新しいSQRL認証 スキームはCurveに依存しています Ed25519 DanielBernsteinによって開発された暗号化。ただし、このスキームの実装を開始するには、最初にCurveEd25519の成熟した実装が必要です。
成熟した実装を知っている人はいますか? Java、.NET、またはその他の一般的なプラットフォームの場合は?
まず第一に、Curve25519とEd25519はまったく同じものではありません。それらは同じ基礎となる曲線に基づいていますが、異なる表現を使用しています。ほとんどの実装はCurve25519またはEd25519のいずれかですが、それらの間で一部のコードを再利用することは可能です。
Ed25519公開鍵をCurve25519に変換することは可能ですが、その逆の場合、符号ビットが失われます。つまり、2つのEd25519公開鍵は、1つのCurve25519公開鍵に対応します。秘密鍵も非常に似ています。
実装に関しては、実際の実装と、それらを使用可能な形式でパッケージ化するライブラリを区別することが重要です。
djbの実装 [〜#〜] supercop [〜#〜]
Ref
cで記述、非常に遅いRef10
はcで書かれており、まともなパフォーマンスAMD64-64-24k
とAMD64-51-30k
は、アセンブリで記述されており、Ref10
の約2倍の速度です。彼はまた、NaClで以前の互換性のないプロトタイプを作成しました。それを使用しないでください
アセンブリとcの両方のいくつかのバリアントが含まれています。 64ビット用に最適化されたものもあれば、32ビット用に最適化されたものもあります。
Cライブラリ、現在Ref10
実装を使用
多くのプログラミング言語のバインディング 。これはおそらく最も人気のあるバージョンであり、私がほとんどの人に推奨するものです。
認証付き暗号化(XSalsa20Poly1305)、ハッシュ、Curve25519鍵交換など、NaClの他の暗号化機能が多数含まれています。
Cライブラリ、Ref10
実装を使用します。
このライブラリの最も興味深い機能は、Ed25519公開鍵を使用した鍵交換をサポートしていることです。ただし、共有キーはハッシュされないため、Curve25519と同じ共有シークレットは生成されません。
Win32およびWin64用のビルド済みバイナリが含まれています。
私の C#ポート
純粋なマネージコードであり、32ビットおよび64ビットプラットフォームで変更なく機能します。 Ref10に基づく。 cの実装よりも少し遅いですが、違いは驚くほど小さいです。
Curve25519キーとEd25519キーの両方を使用したNaClと互換性のあるキー交換をサポートし、NaClの他の暗号機能を多数含んでいます。 LibSodiumと同様の機能セットを目指しています。
Ed25519署名関数は機能し、妥当な量のテストを確認しましたが、ライブラリの他の部分は少し荒いです。
SUPERCOPまたはFloodyberryのコードからの実装を直接使用します。
おそらくビルドにはもう少し作業が必要ですが、パフォーマンスが向上し(〜2x)、不要なコードを持ち歩く必要がなくなります。
今のところLibSodiumを使用することをお勧めします。比較的人気があり、手入れが行き届いています。パフォーマンスはまともであり、本当に署名の多いアプリケーションでのみパフォーマンスの問題を引き起こすはずです。
群を抜いて最も成熟したパフォーマンスの高いものは、ダニエル・バーンスタイン自身が書いたものです。 [〜#〜] supercop [〜#〜] 内にあります。
ただし、そのAPIは非常に扱いにくく、必要なものを取得するにはかなりの掘り下げ/抽出が必要です。他の人の作業を節約するために、私はこれを自分で行い、コードを Github に配置しました。
ただし、正確な用語に注意してください。Ed25519とCurve25519は関連していますが、異なるものです。知っておくべきことは、Ed25519は公開/秘密鍵署名システムであり、Curve25519は鍵交換であるということです。 Ed25519キーペアはCurve25519キーペアに変換できますが、その逆についてはよくわかりません。 Githubの私のライブラリは、すべてをEd25519キーペアに保持し、キー交換のためにCurve25519に変換します。