7

私は暗号化システムを実装するライブラリを探していて、NaCl:Networking andCryptographyライブラリ(特にボックス関数)の使用に興味がありました。明らかに、対称暗号化XSalsa20、官民暗号化にはCurve25519、認証にはPoly1305をプリミティブとして使用します。

ただし、ドキュメントは、それらが使用されてきた方法では不十分であるように見えます。たとえば、鍵を計算するには、送信者の秘密鍵と受信者の公開鍵を使用して秘密鍵を計算すると記載されています。しかし、それはその方法を説明していません。誰かがそれに光を当てることができますか?

同じ公開鍵と秘密鍵を使用した場合、次の試行で同じ鍵が生成されることはなく、悲惨な結果になります。誰かがその背後にある説明を知っているか、関数がどのように使用されるかではなく、関数がどのように機能するかについてのいくつかのドキュメントに私を接続しますか?

4

2 に答える 2

16

どのように機能しcrypto_boxますか?

box2つのキーでDiffie-Hellmanキー交換を使用し、結果をハッシュします。次に、それをのキーとして使用しますsecret_box

  • crypto_boxcrypto_box_beforenmが後に続くのと同等crypto_box_afternmです。

  • crypto_box_beforenmは、Curve25519の論文で説明されているように機能するハッシュされた鍵交換であり、HSalsaで結果をハッシュするCurve25519で楕円曲線Diffie-Hellman鍵交換を使用します。これにより、32バイトの共有キーが生成されます。

    k = Hash(Curve25519(b、A))= Hash(Curve25519(a、B))

  • crypto_box_afternmと同じですcrypto_secret_box。24バイトのナンスと32バイトのキーが必要です。これは、暗号化にXSalsa20を使用し、MACとしてPoly1305を使用する認証済みストリーム暗号です。XSalsa20の出力の最初の32バイトはMACに使用され、残りはxor暗号化するためにプレーンテキストに変換されます。

複数回使用するとどうなりますか?

2つの固定キーペアを使用する場合、キー交換の結果は常に同じになります。

secret_boxただし、キーを数回使用する場合でも、そのキーにナンスを再利用しない限り、対称部分は安全です。つまり、(キー、ナンス)ペアは一意である必要があります。

このプロパティは、AES-GCMやXSalsa20-Poly1305などの最新の認証済みストリーム暗号すべてでほぼ同じです。

ユニークなナンスを作成する一般的な方法は次のとおりです。

  • 8バイトのプレフィックスとランダムな16バイトの値を使用します(ステートレス、ランダムな16バイトが一意である可能性が高い)
  • 16バイトのプレフィックスと8バイトのカウンターを使用します(ステートフル、パケットごとにインクリメントする接続で役立ちます)
于 2012-12-01T21:30:54.390 に答える
1

たとえば、鍵を計算するには、送信者の秘密鍵と受信者の公開鍵を使用して秘密鍵を計算すると記載されています。しかし、それはその方法を説明していません。誰かがそれに光を当てることができますか?

わかりやすい素敵なビデオがありますが、ドイツ語で:https ://www.youtube.com/watch?v=aC05R9xqbg ​​E。このビデオでは、「離散対数」と「楕円曲線」の両方のソリューションについて説明しています。

「楕円曲線」シナリオでは、公開鍵Pは曲線上の点(x座標とy座標)です。Pは、ジェネレータG(曲線で定義)と秘密鍵Kの乗算によって計算されます。秘密鍵Sを計算するには、ピアのポイントP(ピアの公開鍵)と独自の秘密鍵K(スカラー数)。両方のピアがこの操作を行います。

S_Alice = P_Bob mult K_Alice = G mult K_Bob mult K_Alice

S_Bob = P_Alice mult K_Bob = G mult K_Alice mult K_Bob

曲線は可換群であるため、乗算の順序は重要ではありません。したがって、上記の計算から、最終的にボブとアリスの両方が同じキーを計算したことがわかります。

于 2016-02-03T15:55:17.357 に答える