urve25519は、ダニエル・J・バーンスタイン教授によって設計された、幅広いシナリオに対応した最高レベルのディフィー・ヘルマン関数です。 暗号技術において、Curve25519は128ビットのセキュリティを提供する楕円曲線であり、楕円曲線のDiffie-Hellman(ECDH)鍵交渉方式での使用を想定して設計されています。 これはECC曲線の中でも最も高速なものの一つであり、既知の特許で保護されていません。
ユーザーの32バイト鍵が与えられると、curve25519はユーザーの32バイト公開鍵を計算します。 そのユーザーの32バイトキーと別のユーザーの32バイト公開鍵が与えられ、curve25519は両ユーザーが使用する32バイトの共有キーを計算します。 この秘密は、両方のユーザーの情報を認証・暗号化するために使われます。
2. Curve25519をダウンロードしてコンパイルする
curve25519ライブラリは非常に高速でcurve25519関数を計算します。 図書館は幅広い用途を持っています。 共有ライブラリにリンクするのではなく、自分のプログラムで適用できるし、適用すべきです。 コンパイルされたコードはCPUによりますが約16KBです。
ダウンロードとコンパイル
ダウンロード
コンパイル
3. Curve25519の使用
curve25519を使用するCプログラムについては、curve25519.hを含めるようにプログラムを変更し、makeファイルを修正してプログラムをcurve25519.aと連携させ、プログラムがcurve25519.aとcurve25519.hに依存していることを明記してください。
計算鍵
内部的には、32バイトのcurve25519キーを生成するには、まず暗号セキュリティソースから32バイトのランダムな秘密(mysecret[0], mysecret[1], ..., mysecret[31])を生成します。 次に次の通りにします: mysecret[0] &= 248; mysecret[31] &= 127; mysecret[31] |= 64; 32バイトのCurve25519キーを生成します。mysecret[0]、mysecret[1]、...、mysecret[31]。
将来的には、ライブラリ版が128バイトのハッシュを32バイトに圧縮するcurve25519_圧縮関数をサポートし、不十分な乱数生成器に対する保護も加える予定です。 32バイトを鍵に変換するcurve25519_クランプ関数; そして、128バイトを直接鍵に変換する、curve25519_鍵生成関数の最も使いやすい組み合わせです。
公開鍵の計算
32バイトの公開鍵を生成するには、mypublic[0], mypublic[1], ..., mypublic[31]と一致します。 curve25519(mypublic、mysecret、basepoint); ここで一定の基点は次の通りです:
コンセント無符号のキャラベースポイント[32] = {9}; 今後の図書館のバージョンでは、より簡潔curve25519_公共機能もサポートする予定です。
共有鍵を生成する
別のユーザーのCurve25519公開鍵 hispublic[0], hispublic[1], ..., hispublic[31], 呼び出しが与えられると
curve25519(共有、私の秘密、彼の公開); 32バイトの共有キーを生成します shared[0], shared[1], ..., shared[31]。 他の誰かが自分の秘密鍵とあなたの公開鍵の両方を使って同じ共有鍵を生成することができます。 そして、この共有キーをハッシュ化し、その結果をキーとして使うことができます。例えばPoly1305-AESの場合です。 今後のバージョンでは、32バイトのキーを直接ハッシュ化して128バイトのキーを生成するcurve25519_拡張関数をサポートし、共有関数の組み合わせとして最も使いやすいcurve25519_ます。
4. 参考文献
[Ed25519とCurve25519の説明]ハイパーリンクのログインが見えます。 [Curve25519 暗号化と復号および署名のED25519利用]ハイパーリンクのログインが見えます。 [ED25519]ハイパーリンクのログインが見えます。 [Android ED25519実装]ハイパーリンクのログインが見えます。 [[CのED25519実装]ハイパーリンクのログインが見えます。 [ed25519 Java 実装]ハイパーリンクのログインが見えます。
翻訳元:ハイパーリンクのログインが見えます。 |