2011-10-28 4 views
3

私は現在、鍵交換にDiffie-Hellmanを使用するプロトコルを開発中です。 パケットを受信しました。このパケットは、aes-128暗号化部分と128 Bit DH公開鍵で構成されています。diffie-hellman共有鍵で暗号化を継続

プロトコルの最後のステップで、aesキーがネットワーク内の別のピアに送信されます。 このaes-keyは、128ビットの強力な秘密鍵を使用する暗号で暗号化する必要があります。

私はフグを言うことができますし、AESキーを暗号化するために今すぐフグ(また、実際には問題のために重要ではありません、別の暗号可能)

を使用することを計画し、私はのための秘密鍵を構築する必要がSecretKeySpec(私はjavax.cryptoのものを使用しています)というクラスで暗号化します。これは、コンストラクタでbyteArrayを受け取り、secretKeyを構築します。

DHからのsharedkeyは128ビットBigIntegerです。 これで、共有キーをbyteArrayとして解釈できるようになりました(これは、16Bytesの128ビット([数字は8ビットデータのフレームとして解釈されます])。

私の質問は、キーは本当ですか?私は唯一のByteArrayの入力として数字を使用しているため

はどんな影響が(ので、この制限はどのような方法で鍵空間のでしょうか?)あり

私はこれが当てはまらないと思いますが、私は100%確実ではありませんよ。 誰かが数学を行い、正しいか間違っているかを証明できますか?

共有キーのキーサイズが間違っていると、最終的に128Bit SecretKeyに暗号化されるという心配がありますか?

+1

BlowfishでAESキーを暗号化すると、プロトコルの強度がAESまたはBlowfishの_weakest_に減少することに注意してください。 AESが公開された後に発見されたAESに対する攻撃がありましたが、Blowfishよりも[AESは強力です(http://en.wikipedia.org/wiki/Advanced_Encryption_Standard#Known_attacks) – sarnold

+0

@sarnold:ノートに感謝、私はその問題を認識しています。ブローフィッシュは単なる例だったかもしれません。私はまだそのステップで少し送信する必要があるかどうか分からないので、私は使用する(または私のデータを埋めるために)固定サイズを取り除くために、ストリーム暗号で実行する予定です。私は1つのイーサネットパケットに制限されているので、各バイトを避けることができます。 :) – evildead

答えて

2

ウェブサイトでは、128ビットAESキーを転送するために、最小のpの3072ビット(またはECCの実装では256ビット)を使用することが推奨されています。

異なるアルゴリズム間のキーの長さを比較する方法の詳細については、http://www.keylength.com/en/compare/で提供されている参考文献を参照してください。

+0

これは本当に素晴らしいリンクです。ありがとう、私は質問を閉じる前に、このような提案がここに掲載されているのを待っています – evildead

+0

私は、なぜ3072ビットが128ビットAESキーを送信するために「安全」と考えられるのでしょうか?私はまだ適切な場所を見つけられませんでした。 – evildead

+0

これは「計算上の複雑さ」の問題です。あなたは[AESに対する最もよく知られた攻撃](http://en.wikipedia.org/wiki/Advanced_Encryption_Standard#Security)の複雑さを比較しようとしています(現在2^126 128ビットAESの鍵回復のために)[離散対数](http://en.wikipedia.org/wiki/Discrete_logarithm)問題に対して最もよく知られている攻撃である。あなたが推測したように、整数は他のビットから独立しているわけではありません - ECCはビット間の相関を減らすことでこれを改善しますが、ビットは依然として完全に独立していません。 – sarnold

1

ないここDHの専門家が、私にはのnビットで表さ共有鍵のためのDHの鍵空間は2^n個よりもやや小さくなっているようです。

+0

それはそうですが、sarnoldによって投稿されたリンクは最低で3072ビットpを使うべきだと言います。しかし、なぜ、私はまだ見つけられませんでした:( – evildead

関連する問題