2

ECDHシークレットアグリーメントの構造を調べて数日を過ごしましたが、成功しませんでした。MSDNで、NCryptSecretAgreement関数が、秘密の合意値を表すハンドルを受け取るNCRYPT_SECRET_HANDLE変数へのポインターを設定していることがわかりました。私はWinAPIにまったく慣れていないので、ドキュメントを読む以外に何もできません。

WindowsベースのデスクトップアプリとWebアプリの間でキーを交換する必要があります。私が知る必要があるのは、CNGのKDFが秘密合意値をどのように正確に使用するか(私の場合はハッシュ)です。SHA-256アルゴリズムをKDFとして使用し、秘密合意のXとYをハッシュしようとしていますが、結果がCNGで計算されたものと一致しません。何か案は?

ありがとうございました。

4

1 に答える 1

1

Microsoftが実装に適していると判断したものを保証することはできませんが、ECDHにはX9.63と呼ばれる標準があります。その標準では、ECDHは次のように機能します。

  • DHを実行して、共通の曲線ポイント(X、Y)を生成します(これは、ピアから取得したポイントに、秘密のDH値を掛けたものです)。

  • Xを(そしてXのみ; Yは破棄されます)バイトのシーケンスに変換します。これをZと呼びます。変換は符号なしビッグエンディアンであり、フィールドサイズを使用します。XがフィールドF qに存在する場合、変換は正確にceil(ceil(log q)/ 8)を生成します。たとえば、NIST P-521曲線を使用する場合、 2 520 <q <2 521となる素数qを法として作業するため、ceil(log q)= 521となり、結果のバイトシーケンスは正確に66バイトで構成されます。値X。最も一般的に使用される楕円曲線(「P-256」として知られている)では、32バイトです。

  • 出力長がnバイトのハッシュ関数H (たとえば、SHA-256ではn = 32 )を使用してZをキーに導出するには、潜在的に無限の文字列H 1 || H 2 || H3 ||を計算します。 ..ここで、「||」は連結を示し、H i = H(Z || i)ここで、「i」はビッグエンディアンの規則を使用して4バイトとして表されます。簡単に言うと、 Zを32ビットカウンターと一緒にハッシュし、目的のキー長に十分なバイト数が得られるまで何度もハッシュします。

于 2011-10-31T12:30:52.007 に答える