0Pricing
Cryptology Academy · レッスン

CRYSTALS-DilithiumとFalconの署名

NISTが標準化した格子ベースのデジタル署名方式を比較します。

「CRYSTALS-DilithiumとFalconの署名」はCoddyKit上の無料Cryptology Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCryptology Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cryptology Academyコースには全4レッスンが含まれています。

耐量子署名の必要性

RSAとECDSAの署名は、Shorのアルゴリズムによって破られます。そのため、耐量子署名でTLS証明書、コード署名、メール署名(S/MIME、PGP)、ソフトウェア更新の認証を置き換える必要があります。NISTは2つの格子ベース方式、ML-DSAとFN-DSAを標準化しました。

CRYSTALS-Dilithium(ML-DSA)

Dilithiumは、Module-LWEとModule-SIS(Short Integer Solution)の困難性に基づいています。QROM(Quantum Random Oracle Model)における安全性証明があります。バリアントはDilithium2(約128ビット)、Dilithium3(約192ビット)、Dilithium5(約256ビット)の3つです。署名処理は単純で、拒否サンプリングを必要としません。

Dilithiumの署名生成

秘密鍵は秘密行列s1、s2です。公開鍵はt = As1 + s2です。署名では、ランダムなyをサンプリングし、w = Ayを計算します。次に、w1 = HighBits(w)として、チャレンジc = H(mu || w1)を計算し、z = y + cs1を計算します。||z||または||r0||が大きすぎる場合は拒否して再試行します。出力は(z, c, hint)です。

Dilithiumの検証

(z, c, hint)を検証するには、||z||が小さいことを確認し、w' = Az - ctを計算します。hintを使ってw1を復元し、c == H(mu || w1)を検証します。hintはMakeHint()によって生成される少数ビットです。拒否処理によりzからs1が漏えいしないことが保証されます。これは「aborts-then-uniform」引数と呼ばれる安全性の議論です。

Dilithiumの鍵と署名のサイズ

ML-DSA-65(Dilithium3、192ビット安全性)では、公開鍵が1952バイト、秘密鍵が4000バイト、署名が3293バイトです。ECDSA-P256では、公開鍵が64バイト、署名が64バイトです。Dilithiumの署名は約40~50倍大きくなりますが、量子コンピューターに対して安全です。

Falcon(FN-DSA)

FalconはNTRU格子に基づき、NTRU格子上でガウスサンプラーを使用します。署名はDilithiumより大幅に小さくなりますが、署名生成には浮動小数点のガウスサンプラーが必要です。そのため、constant-timeでの実装が難しく、安全なコードを書くにはより複雑になります。

Falconの鍵と署名のサイズ

Falcon-512(128ビット安全性)では、公開鍵が897バイト、署名が666バイトで、Dilithiumより大幅に小さくなります。トレードオフとして、Falconは安全な実装がより困難です(ガウスサンプリングはタイミング攻撃の影響を受けやすいためです)。帯域幅が限られた環境に適していますが、慎重な実装が必要です。

SPHINCS+(SLH-DSA)

SPHINCS+はハッシュベースの署名方式で、構造的な代数仮定を置かない保守的な選択肢です。安全性はハッシュ関数の安全性だけに依存します。署名サイズは約8~50 KBと大きく、署名生成も低速です。長期的な信頼性が重要で、性能が二次的な場面で使用されます。

方式の選択

ML-DSA(Dilithium)は汎用的で実装が単純なため、TLS証明書やコード署名に適しています。FN-DSA(Falcon)は、IoTやLPWANなど帯域幅が制約された環境に適しています。SLH-DSA(SPHINCS+)は非常に保守的な選択肢で、長期間使用するルート(CAのオフライン鍵やソフトウェアの信頼の基点)に適しています。

実装上の注意点

Dilithiumでは、拒否サンプリングによって分岐の実行時間が漏えいする可能性があるため、constant-timeの比較を使用してください。Falconでは、ガウスサンプラーが浮動小数点を使用するため、浮動小数点演算の決定性を確保してください。どちらも多項式演算におけるサイドチャネルを避ける必要があります。NIST提出パッケージのリファレンス実装を使用してください。

FIPS標準

NIST FIPS 204はML-DSA(Dilithium)、NIST FIPS 205はSLH-DSA(SPHINCS+)、NIST FIPS 206はFN-DSA(Falcon)を規定しています。すべて2024年8月に公開されました。OpenSSL 3.x、BoringSSL、liboqs(Open Quantum Safeプロジェクト)などのライブラリが3方式すべてを実装しています。

確認問題

FalconがDilithiumより優れている主な点は何ですか?

まとめ

ML-DSA(Dilithium)は格子ベースで実装が単純、署名サイズは約3 KBです。FN-DSA(Falcon)はNTRUベースで署名サイズは約700バイトですが、実装が複雑です。SLH-DSA(SPHINCS+)はハッシュベースで保守的ですが、サイズが大きくなります。すべてFIPS 204/205/206で標準化されています。次は、ハイブリッド方式によるPQCへの移行です。

よくある質問

「CRYSTALS-DilithiumとFalconの署名」レッスンは無料ですか?

はい。「CRYSTALS-DilithiumとFalconの署名」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cryptology Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cryptology Academyコースには全4レッスンが含まれています。

「CRYSTALS-DilithiumとFalconの署名」で何を学びますか?

NISTが標準化した格子ベースのデジタル署名方式を比較します。 ブラウザで直接実行するハンズオンコードでCryptology Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Cryptology Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのCryptology Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「CRYSTALS-DilithiumとFalconの署名」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このCryptology Academyレッスンでコードを書いて実行できますか?

はい。すべてのCryptology Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. ShorのアルゴリズムとGroverのアルゴリズム
  2. CRYSTALS-Kyber:格子ベースのKEM
  3. CRYSTALS-DilithiumとFalconの署名
  4. PQCへの移行:ハイブリッド方式
← Cryptology Academyに戻る