2017-04-12 13 views
0

PythonでPyCryptoライブラリを使用するAES暗号化を取得しようとしています。PyCrypto AES CTRモードでブロックサイズを設定する方法

ユーザーからのパスワードとファイルからの塩を読みました。 私は、テキストのパスワードからキーを生成するためのPBKDF2を呼び出し

PBKDF2(self.master_password, salt, 32) 
私はその後、私はその後、Crypto.Utilパッケージからカウンターを作成Random.get_random_bytes

IV = Random.get_random_bytes(len(key)) 

を使用してIVを生成

その後
ctr = Counter.new(32, IV) 

私はAESオブジェクトを作成

e = AES.new(key, AES.MODE_CTR, counter=ctr) 
私は

e.encrypt(user_name) 

を暗号化するために電子を呼び出すとき

は、しかし、私はこのエラーがブロック暗号では、ドキュメントとI一致する16バイトであることを意味を理解する方法から、次のエラー

CTR counter function returned string not of length 16 

を取得します

https://www.dlitz.net/software/pycrypto/api/current/Crypto.Cipher.AES-module.html

で発見私は32にそれを変更しようとしましたこの

AES_Encryptor = AES.new(key, AES.MODE_CTR, counter=ctr, block_size=32) 

のようなAESオブジェクトを作成する誰かが素晴らしいことだろう正しい方向に向けて私を指すことができれば、私は次のエラー

'block_size' is an invalid keyword argument for this function 

を取得することにより、バイトのブロックサイズ。

+0

なぜ256ビットのブロックサイズが必要ですか? – zaph

+0

私のプロジェクトの説明の一部だった –

+0

OK、説明は間違っていますが、Artjomの説明によると、AESのブロックサイズは128ビットしかありません。プロジェクトの説明を変更する必要があります。 256ビットのブロック・サイズを使用するには良いリアクションはなく、256ビットのブロック・サイズを持つRijndaelは、AESと同様に徹底的に検証されていません。 – zaph

答えて

3

AESは、128ビット(16バイト)の固定ブロックサイズのブロック暗号です。それは、128ビット、192ビット、および256ビットの3つの有効な鍵サイズを有する。 IVとも呼ばれるCTRモードのノンスは、ブロックサイズが16バイトである限り、、多くてもである必要があります。

ブロックサイズを256ビットにする場合は、AESを使用できません。 Rijndaelのような256ビットのブロックサイズを許すいくつかの他のアルゴリズムがありますが、pycryptoにその実装はありません。 AESはRijndaelのサブセットです。

通常、カウンタの衝突なしに暗号化できるブロック数を制御するため、CTRモードでは64ビットまたは96ビットのノンスを生成します。 64ビットのナンスのために

nonce = Random.get_random_bytes(8) # 8 bytes 
ctr = Counter.new(64, nonce)  # 64 bits remaining 

または

nonce = Random.get_random_bytes(12) # 12 bytes 
ctr = Counter.new(32, nonce)  # 32 bits remaining 

、あなたが問題に実行する前に、せいぜい2つのブロックを暗号化することができます。これは世界のどのデータよりも優れていますが、ナンスをランダムに選択することで、誕生日パラドックスのために同じ鍵で2 の暗号化を行った後にノンスの衝突が発生する可能性があります。
96ビットのナンスでは、最大で2つのブロック(約68 GBのデータ)の暗号化が可能ですが、ノンスの衝突が発生する確率ははるかに低くなります。

ナンスは秘密ではないため、暗号文とともに送信することができます。通常は、単純に暗号文の前に付加され、解読の前にスライスされます。どのくらいの時間になっているのか分かっているので、どれくらいスライスすることができますか。

+0

説明をいただきありがとうございます。 –

関連する問題