Diffie-Hellmanで確立された鍵のサイズを縮小する方法は?


4

Diffie Hellmanメソッド(DH)でキーを生成すると、確立された共有キーは、使用されているプラ​​イムと同じサイズになります。 私が読んだ限り、これは古典的なDHのための少なくとも2000ビットでなければならない、いくつかはさらに言う。

しかし、通常256または512ビットが対称方式に必要です。

サイズを小さくするために確立されたキーをハッシュするだけで十分だと聞いていますが、キー導出関数を使用するものもあります。

今、これを行う標準的な方法は何ですか? また、キー導出関数を使用する方が安全ですか?

使用するメソッドの名前を付けることができれば、私はそのようなメソッドの詳細を読むことができたと思います。

  0

鍵の導出関数はハッシュ以上のものではありません。 HKDFの主な利点は、単一の一定のサイズの出力ではなく、名前付きの任意のサイズの出力を生成することです。 HKDFはHMAC-SHA-2の上に実装するのが非常に簡単です。 12 8月. 132013-08-12 12:18:54

7

Diffie-Hellmanは、2人の当事者が秘密の値を生成することを許可します。秘密の値は、通信の観察から再構築できません。鍵交換に起因する秘密値の大きさ(グラムAB MOD P)はBが選択される場合は、そのエントロピーが小さくてもよい、実際プライムと同じサイズであります小さな空間でおよびbを結果の秘密値である256ビットの乱数gives you 128-bit securityにピッキングすること。

結果として得られる秘密の値は、何らかの数学的構造を持つため、そのまま使用しないでください。代わりに、ハッシュしてその結果を対称キーとして使用する必要があります。より正確には、共有秘密をkey derivation functionへの入力として使用する必要があります。 パスワードベースのキー導出関数:秘密値は十分なエントロピーを持ち、強化する必要はなく、伸ばすだけです。

RFC 2631は、共有秘密の鍵材料を導出する方法を指定する:SHA-1(ZZは|| CTRを入力||)ZZは、共有秘密のバイト符号化である場合、タイプは、誘導されている材料の種類を示していますctrはカウンタのバイトエンコーディングです。 SHA-1の代わりにSHA-256やSHA-512などの別のハッシュ関数を使用することは明らかです。

2人の当事者が合意している限り、鍵素材が正確に導出される方法は実際には重要ではありません。たとえば、256ビットしか必要ない場合は、SHA-256(ZZ)はOKです。カウンタをタックするポイントは、ハッシュ関数の1つの実行が提供できるものより多くを必要とするときです。プロトコルを将来的に証明するために、RFCに従うことをお勧めします。現在1つのキーのみを派生させる必要がある場合は、タイプとカウンタの対応するASN.1エンコーディングをアプリケーションの文字列リテラルとしてハードコーディングできます。

実際には、using the DH shared secret directly“not too bad”です。にもかかわらず、あなたはKDF(少なくともハッシュ)でそれを絞っておく必要があります:それは簡単で、速く、より安全で、より標準的で、より将来性のあるものです。

+1

私はこの問題をさらに詳しく調べるために、同様の議論をしているこの論文http://instantlogic.net/publications/DiffieHellman.pdfを見つけました。 13 8月. 132013-08-13 09:21:57