64桁の16進文字(64 * 4 = 256ビット)より大きいキーを指定すると、次のエラーが発生します。
この 公式ドキュメント によると、Blowfishは32ビットから448ビットのキーをサポートできます。
可変キー長:32ビットから448ビット
この制限を回避することは可能ですか?どうしましたか?
実際の鍵のサイズは十分に大きいですが、できる限りセキュリティを確保したいと考えています。
おかげで、
OpenSSLのコマンドラインプログラム(_openssl enc
_) の場合、選択されたアルゴリズムはキーサイズも選択します(これがaes-128、aes-192、およびaes-256に個別のオプションがある理由です) 。 Blowfishの場合、このオプションはありません。
Encプログラムは、特定のパラメーターを持つ固定数のアルゴリズムのみをサポートします。したがって、たとえば、RC2を76ビットのキーで、またはRC4を84ビットのキーで使用する場合、このプログラムは使用できません。
_openssl enc -bf
_は常に128ビットのキーを使用します:
BlowfishおよびRC5アルゴリズムは128ビットのキーを使用します。
Blowfish関数のドキュメント は可変長のキーを使用できると言っているため、おそらくOpenSSLに対してコンパイルされた独自のプログラムを作成した場合、任意のキーサイズを使用できます。
BF_set_key()
は、lenバイト長のキーを使用してBF_KEYキーをdataに設定します。
アルゴリズムを選択でき、何らかの理由でより長いキーが必要な場合、OpenSSLは最大256ビットのキーでAESを実行します:(_openssl enc -aes-256
_)。
上記を考慮すると、32文字(32 * 4 = 128)を超えるとOpenSSLが文句を言うと予想されますが、最初の32文字以降のデータは何も通知せずに無視するようです。
blong @ ubuntu:〜$ openssl enc -bf -iv 0 -P -K 000000000000000000000000000000012345
salt = 0700000000000000
key = 00000000000000000000000000000001
iv = 0000000000000000
彼らがこのケースをキャッチしようとしているように見えるため、バグレポートを送信しましたが、エラーは> 128bitsではなく> 128charactersに対するものです。 。
128ビット以上は不要。 128ビットでは、2 ^ 128の可能なキーがあり、1秒あたり1,000億テストで割ると(手ごわいGPUファームが必要になります)、それを解読するには、宇宙の年齢の7.8 * 10 ^ 9倍の時間がかかります(約10 ^ 20年)。
しかし、真剣に考えると、キーのサイズに制限があるのはなぜでしょうか。
「今は壊せない、40年も壊せない」よりも優れたセキュリティはありません。 128ビットのキーはすでにこのレベルのセキュリティを提供しています。より大きなキーを使用することで、notにより「セキュリティが強化されます」。より大きなキーを取得するだけです。
(128ビットを超えるキーは、集団的な男らしさに不安を感じる静かで柔軟性のない管理構造に主に存在します。)
私はキーのビット長の背後にある数学を理解していますが、最近の再調査により、より長いキーを検討するようになりました。計算を高速化するためにGPUを使用するクラスターは、すでに毎秒数千億のキーをヒットしています。 128ビットのキーは今日でも(おそらく)十分ですが、その時間が短くなっています。