テクノロジー 注目度 95

DJBの暗号化オデッセイ:コードヒーローから標準策定の異端児へ

Daniel J. Bernstein(DJB)は、2000年代後半に確立された既存の暗号化プリミティブを打ち破ることで名を馳せました。彼はCurve25519という楕円曲線とChaChaストリーム暗号、Poly1305 MACなどの相補的なアルゴリズムを発表し、Networking and Cryptography library(NaCl)という高レベルライブラリをパッケージ化して容易な採用を促進しました。彼のコードは高速で、設計には明白なエレガンスがあり、長年の間他の人の陥落に予見していたような常時時間演算、単純な式、RNGの誤用がないなどでした。2011年には、Bernsteinと共同研究者は同じ曲線に基づく署名スキームであるEd25519を導入し、「現代」暗号構築ブロックのスイートをNSAの影響から解放されたものとして完成させました。DJBの作品はニッチな玩具にとどまらず、急速に業界標準になりました。OpenSSHは2014年にCurve25519 ECDHをキー交換(サポートされている場合デフォルト)とEd25519をホスト/ユーザーキータイプとして追加しました。GoogleとCloudflareはHTTPSでChaCha20-Poly1305を採用し、RFC 7905はTLS 1.2にそれを標準化しました。2018年にはTLS 1.3が最終決定され、「X25519をキー交換に使用し、Ed25519を識別確認に使用することを推奨」しました。ブラウザベンダーとライブラリもそれに従いました。ChromeとFirefoxはTLSスタックにX25519キー合意を実装し、多くのスマートカードや安全なメッセージングアプリ(Signal、WireGuardなど)がEd25519を採用しました。結果として、Curve25519は導入からわずか10年で実務における支配的な公開鍵システムになりました。しかし、現実と伝説の衝突は避けられませんでした。Curve25519のデザインはセキュリティと利便性をバランスさせるために独自の選択を行いました。特に、すべての32バイトの文字列が有効な公開鍵入力であり、スカラー乗算アルゴリズムは「すべての入力公開鍵をエラーなしで処理します」。これは意図的なものでした。Bernsteinの実装では、「クラmping」と呼ばれるプライベートスカラ(特定のビットを設定/クリア)を使用して小サブグループの問題に対処し、与えられた公開座標に盲目的に乗算します。IETFのRFC 7748はX25519を説明し、プロトコルがゼロ出力の場合中止することを許可しました。ゼロ出力のみが小さな順序(Curve25519のツイストまたは低順序サブグループ)を持つ入力ポイントである場合に発生します。これは暗号化コミュニティで予期せぬ議論につながりました。プロトコルはゼロ出力を明示的にチェックし、それを失敗として扱うべきでしょうか?一部の声は肯定的でした。古典的なECDHプロトコルは常に検証を義務付けており、攻撃者が奇妙なポイントを送信して騙そうとするのを防ぐためです。実際、Curve25519の構造では、攻撃者は小さな順序を持つ特別に作成された公開鍵を送信することで、Aliceの秘密鍵全体を最終的に回復できる可能性があります。なぜ常にチェックしないのでしょうか?DJBと同僚は、Curve25519がすでにその方法で保護されていると主張しました。プライベートキークラmpingにより、秘密スカラが8倍(係数)に掛けられ、すべての小さな要素が中立点(ゼロ出力)を生成し、検出されるかまたは鍵の派生が失敗します。言い換えれば、設計は完全な検証ステップを1回限りの調整と交換しました。Trevor PerrinはCFRGメールリストで哲学を要約しました。「X25519は、チェックを省略して誤用できない非常に単純なAPIを提供するように設計されました。このシンプルさはその成功の大きな一部です。」この観点から、ゼロチェックを追加することは過剰な対策であり、潜在的な新しいミス源となる可能性があります。Perrinはゼロチェックを「CFRGの妥協」と呼び、伝統主義者にとって受け入れられたものであり、「議論やサポートがほとんどなく、現在も議論の的となっています。」25519の伝説は少し傷つきました。それでも素晴らしい曲線であり、依然として最適な選択肢ですが、完璧な暗号化アルゴリズムや曲線はありません。小さな係数があり、高度なプロトコルでは注意が必要でした(Ristrettoのようなプライム順序グループ抽象化につながりました)。また、これは「安全」な曲線もトレードオフを含むことを示しています。専門家にとっては、これはすべて正常なことですが、Bernsteinの仕事が公的な技術的反発に直面した唯一の例です。雰囲気は敬意と技術的なものであり、より激しい議論が暗号化の将来の方向性に関するものになることはまだ分かっていませんでした。


背景

DJB(Daniel J. Bernstein)は、2000年代後半に楕円曲線暗号化の新しい標準Curve25519を開発し、広く採用されました。彼の設計はセキュリティと利便性のバランスを重視し、従来の暗号化プリミティブを打ち破りました。この革新的なアプローチは、OpenSSHやTLSなどの主要なプロトコルに採用され、インターネット通信における安全性の向上に貢献しました。

重要用語解説

Curve25519: 楕円曲線に基づく公開鍵暗号化アルゴリズム。高速でセキュリティが高く、広く使用されています。

[重要性]:現代のインターネット通信において最も一般的なキー交換アルゴリズムの一つです。

[具体例(あれば)]:TLS 1.3やOpenSSHで使用されます。

Ed25519: Curve25519に基づく署名スキーム。高速でセキュリティが高く、広く使用されています。

[重要性]:デジタル署名の作成に使用され、データの整合性と送信者の身元を検証します。

[具体例(あれば)]:SignalやWireGuardなどのメッセージングアプリで使用されます。

NaCl: Networking and Cryptography library。DJBが開発したオープンソースのライブラリで、Curve25519やChaChaストリーム暗号など、さまざまな暗号化アルゴリズムを提供しています。

[重要性]:セキュリティの高い暗号化機能を提供するため、広く使用されています。

[具体例(あれば)]:OpenSSHやTLSなどのプロトコルで使用されます。

ChaCha20-Poly1305: ストリーム暗号化アルゴリズムとメッセージ認証コードの組み合わせ。高速でセキュリティが高く、広く使用されています。

[重要性]:データの機密性を保護するために使用され、TLSやOpenSSHなどのプロトコルで使用されます。

[具体例(あれば)]:TLS 1.3やOpenSSHで使用されます。

今後の影響

DJBの暗号化アルゴリズムはインターネット通信のセキュリティに大きな影響を与え、広く採用されています。Curve25519とEd25519は現在、最も一般的な公開鍵暗号化アルゴリズムの一つであり、TLSやOpenSSHなどの主要なプロトコルで使用されています。彼の仕事は、ポスト量子暗号化への移行にも貢献しており、将来のインターネットセキュリティに重要な役割を果たしています。