1 ポイント 投稿者 GN⁺ 2024-02-02 | 1件のコメント | WhatsAppで共有

Goエコシステム向けの耐量子暗号

  • filippo.io/mlkem768 は、ML-KEM-768 の純粋な Go 実装であり、正確性と可読性に最適化されている。
  • ML-KEM は NIST によって標準化が進められており、ほとんどの業界で採用が進んでいる耐量子鍵共有メカニズムである。
  • パッケージはコード約 500 行、コメント 200 行、テスト 650 行で構成されており、golang.org/x/crypto/sha3 を除いて依存関係はない。
  • Go 標準ライブラリに統合される予定で、レビューのしやすさ、単純さ、徹底したテストを通じて高い安全性への信頼を提供するよう設計されている。

仕様検証のための実装

  • 多くの実装と異なり、このコードは参照用の pq-crystals ライブラリから移植されたものではなく、ほかのコードベースを詳しく読まずにゼロから書かれている。
  • FIPS 203 文書は、詳細な擬似コード、徹底した定義、一貫した型情報を提供しており、優れた実装ガイドになっている。
  • コードの可読性と学習リソースとしての価値を高めるため、関数名や変数名、演算順序は FIPS 仕様に合わせて慎重に選ばれている。

実装に十分な多項式と線形代数

  • 仕様が要求する数学的背景は比較的限定的だが、実装者の作業を容易にするために「Kyber 実装に十分な多項式と線形代数」が書かれている。
  • 残りの部分は読者への演習問題として残されており、1) 素数 3329 に対する剰余演算、2) [0, 3329) から [0, 2ᵈ) への圧縮および展開関数の具体的実装、3) 定数時間演算の保証、が含まれる。

可読性と教育的価値

  • 可読性は実装の主要な目標の 1 つであり、効果的なレビューを可能にし、次世代の保守担当者や暗号エンジニアのための学習リソースとしても機能する。
  • 複雑な関数の可読性を高めるために、コードを長くし再利用性を低くする場合もある。

テストによる高い安全性への信頼

  • 鍵生成、カプセル化、デカプセル化が正しく行われることを確認し、95% 以上のテストカバレッジを維持している。
  • NIST や他の実装から得たテストベクトルとの相互運用性を保証し、期待値と比較して基本的な有限体演算を徹底的にテストしている。
  • CCTV プロジェクトの一環として、他の実装でも再利用可能なテストベクトルを公開している。

性能

  • 性能は主要目標ではないが、パッケージは実用に足るだけ十分に高速である必要がある。
  • ML-KEM は十分に高速であり、このシンプルな実装でもアセンブリ最適化された P-256 や X25519 の実装と競争できる。
  • 性能向上のために、Go のプログラミングパターンに従い、ヒープ割り当てを最小化するなどの工夫が行われている。

ML-KEM 実装を Kyber v3 として使う

  • NIST は Kyber の Round 3 提出版にいくつかの小さな変更を加えている。
  • いくつかの実験的プロトコルは Kyber v3(または "draft00")をベースに定義されているが、別パッケージを作る必要はない。
  • ML-KEM を使って共有秘密 K を生成し、その後 Kyber の共有秘密を生成するために追加の鍵導出を適用できる。

GN⁺の見解

  • 耐量子暗号の重要性: 量子コンピューティングの進展によって既存の暗号技術が脆弱になる可能性があるため、ML-KEM のような耐量子暗号技術の開発と標準化は非常に重要である。
  • Go 言語の拡張性: この実装は Go 言語の拡張性と柔軟性を示しており、暗号ライブラリを標準ライブラリに統合する計画もあるため、Go 開発者コミュニティにとって有用なリソースになるだろう。
  • 教育的価値: コードの可読性と教育的価値を重視したアプローチは、次世代の暗号エンジニアや関心のある開発者にとって大きな学習資源となるだろう。

1件のコメント

 
GN⁺ 2024-02-02
Hacker Newsのコメント
  • 量子コンピューティングの現状に関する疑問

    量子コンピューティングが本当に必要な水準に到達したのか、それともAIのように定義が変化し、既存の製品を新しい名前で出しているだけなのかという疑問。

  • Kudelski Securityからの挨拶と共有

    Kudelski Securityで、耐量子暗号向けGo言語ライブラリの1つを中止しなければならなかった最近の事例を紹介。詳細はリンク先の記事で確認可能。

  • Go言語で実装された暗号システムに関する書籍の推薦

    John ArundelによるGo 1.22向けの暗号システム実装本を紹介。書籍の最後の部分で耐量子暗号に触れられており、NIST PQの標準化後に更新される可能性がある。

  • 他言語(Java、C# など)の実装に関する質問

    他のプログラミング言語での類似実装について情報を尋ねる質問。

  • Go言語による純粋実装への懸念

    純粋なGo言語で書かれている場合、タイミング攻撃や電力サイドチャネル攻撃に脆弱である可能性があるという懸念。

  • Kyber v3対応への関心と質問

    draft00/kyber v3をサポートしている点を好意的に評価し、SHA-3なしでKyber 90'sモードをサポートできる可能性について尋ねる質問。

  • 32ビットのシステムコールテーブルに関する冗談

    32ビットのシステムコールテーブルが「近日公開予定」だという冗談。

  • Unicode変数名の使用への好感

    アルゴリズムや実装の品質を判断する能力はないが、変数名にUnicodeを使っている点を非常に肯定的に評価。

  • FiloSottileの他プロジェクトへの称賛

    FiloSottileが開発した別のツール「age」への好意的な反応。

  • NIST FIPS 203文書へのリンク共有

    記事で言及されたNIST FIPS 203文書へのリンクを共有。