RC4(pycryptoなど)の続き

pycrypto(のRC4)が期待通り動いてくれないのは先日書いた
なんちゃって暗号ファイルシステムの実装 - skobayasの日記
通りですが、ようやく正解?を見つけました。

これはDESやAESといったブロック暗号でCBCモードを使用する際に気をつけなければいけないことのはずです。
なので、RC4といったストリーム暗号では関係のないはずのものなんでしょうけど。

要はCBCモードは一種のステートマシンみたいなもので、前回の情報を覚えているみたいなんですね。
なので、最初から行いたければ初期化する必要がある、と。


>>> from Crypto.Cipher import *
>>> import md5
>>> rc4=ARC4.new(md5.new("Nobody inspects the spammish repetition").digest())
>>> enc=rc4.encrypt('abc')
>>> enc
'\xdb\x11\x06'
>>> dec=rc4.decrypt(enc)
>>> dec
'\xfek\xcd'

↑ここまでは前回と同じ

>>> rc4=ARC4.new(md5.new("Nobody inspects the spammish repetition").digest())
↑ここで最初期化
>>> dec=rc4.decrypt(enc)
>>> dec
'abc'
↑今度はうまく復号化できた。

これでpycryptoのDES/AES(それぞれCBCモード)/RC4とM2CryptoのDES/AES(それぞれCBCモード)/RC4が使えるようになった。
PurePython実装のDESとRC4もあるので、速度を比較してみるのもまた一興かと。
それぞれの方式と実装の違いによる速度など。

お約束のベンチマークは後日公開予定