1

PyCryptodome パッケージを使用して、Python の DES アルゴリズムで CTR モードを使用したいと考えています。この投稿の最後に提示された私のコード。ただし、「TypeError:短いブロックサイズの安全なナンスを作成できません」というエラーが発生しました。このコードは AES アルゴリズムではうまく機能しますが、DES、DES3、Blowfish など (64 ブロック サイズ) では機能しません。私の知る限り、CTR モードは 64 ブロック暗号アルゴリズムに適用できます。

from Crypto.Cipher import DES
from Crypto.Random import get_random_bytes
data = b'My plain text'
key = get_random_bytes(8)
cipher = DES.new(key, DES.MODE_CTR)
ct_bytes = cipher.encrypt(data)
nonce = cipher.nonce
cipher = DES.new(key, DES.MODE_CTR, nonce=nonce)
pt = cipher.decrypt(ct_bytes)
print("The message was: ", pt)

どうもありがとう。

4

2 に答える 2

2

ライブラリは、 インクリメントされないカウンタ ブロックの部分としてnonce を定義します。

ブロックの長さは 64 ビットしかないため、ラップアラウンド (多数のブロックを暗号化する場合) またはノンスの再利用 (ナンスをランダムに生成する場合) の危険性を考慮すると、ナンスの長さを安全に定義することは困難です。

代わりに、ナンスが存在しないと判断できます。カウンターは完全な 64 ビットとランダムな初期値を取ります。

iv = get_random_bytes(8)
cipher = DES.new(key, nonce=b'', initial_value=iv)

最後に、これは演習にすぎないと思います。DES は非常に弱い暗号であり、キーの長さはわずか 56 ビット、ブロック サイズはわずか 64 ビットです。代わりに AES を使用してください。

于 2018-10-15T08:28:56.797 に答える