FN-DSA と ML-DSA の比較は、NIST が 2022年に選定した 2 つの格子署名方式の比較です。ML-DSA(CRYSTALS-Dilithium に由来)は 2024年8月に FIPS 204 になりました。FN-DSA は NIST が Falcon に付けた名称で、FIPS 206 として標準化が進められていますが、FIPS 206 は 2026年10月の時点でまだドラフトでした。Falcon ははるかにコンパクトで、ML-DSA ははるかに正しく実装しやすい方式です。
比較表
| FN-DSA-512(Falcon-512) | ML-DSA-44 | FN-DSA-1024(Falcon-1024) | ML-DSA-87 | |
|---|---|---|---|---|
| セキュリティカテゴリ | 1 | 2 | 5 | 5 |
| 公開鍵 | 897 バイト | 1,312 バイト | 1,793 バイト | 2,592 バイト |
| 署名 | 666 バイト(パディング済み) | 2,420 バイト | 1,280 バイト(パディング済み) | 4,627 バイト |
| 公開鍵 + 署名 | 1,563 バイト | 3,732 バイト | 3,073 バイト | 7,219 バイト |
| 格子の種類 | NTRU | Module-LWE / Module-SIS | NTRU | Module-LWE / Module-SIS |
| 署名時の演算 | 浮動小数点(離散ガウスサンプリング) | 整数のみ | 浮動小数点 | 整数のみ |
| 標準 | FIPS 206 ドラフト | FIPS 204(最終版、2024年) | FIPS 206 ドラフト | FIPS 204 |
| X.509 | 未標準化 | RFC 9881 | 未標準化 | RFC 9881 |
Falcon のサイズは Falcon の仕様書に基づきます(署名には可変長の圧縮エンコーディングも使え、その場合はそれぞれ最大 752 バイトと 1,462 バイトです)。ML-DSA のサイズは FIPS 204 の表 2 に基づきます。ML-DSA-65(カテゴリ 3)に相当する Falcon はありません。
サイズが重要な理由
Falcon は、トラップドアと高速フーリエサンプリングを使って NTRU 格子の短いベクトルを生成します。その結果、公開鍵と署名の合計は NIST のポスト量子署名の中で最小になり、カテゴリ 1 で約 1.6 KB です(ML-DSA-44 は 3.7 KB)。TLS の証明書チェーンでは、各証明書が公開鍵と署名を 1 つずつ含み、ハンドシェイクではさらに署名と SCT が加わります。そのためこの差は、チェーンのサイズが約 2 倍で済むか、4 倍に膨らむかの違いになります。署名を UDP の応答に収めなければならない DNSSEC や、1 バイトごとに手数料がかかるブロックチェーンでは、この差がさらに大きく響きます。
実装が難しい理由
Falcon の署名アルゴリズムは、浮動小数点演算を使って格子上の離散ガウス分布からサンプリングします。そのため、ML-DSA にはない次の 3 つの問題が生じます。
- 定数時間:一部の CPU では浮動小数点演算の所要時間がデータに依存することがあり、整数でエミュレートすると低速になります。研究上の攻撃では、サンプラーのタイミングの漏洩から鍵が明らかになることが示されています。
- テストのしやすさ:丸めの影響で、正しい実装が 2 つあっても同じ入力に対して異なる署名を生成することがあります。そのため既知解テストではわずかに偏ったサンプラーを検出できず、偏ったサンプラーは鍵の情報を漏らしながらも有効な署名を生成し続けます。2026年9月、NIST の FIPS 206 チームは、実装を決定的かつテスト可能にすることを目的として、固定小数点による署名手順を提案しました。
- 移植性:浮動小数点演算ユニットを持たない組み込みプロセッサーではソフトウェアによるエミュレーションが必要になり、速度とコードサイズが犠牲になります。
ML-DSA は、8,380,417 を法とする整数演算と棄却サンプリングだけを使います。定数時間で実装するのは簡単で、出力は FIPS 204 によって完全に規定されています。検証はどちらも容易で、特に Falcon の検証は高速です。Falcon チームの報告によると、リファレンス実装は 2.3 GHz の Intel Core i5-8259U で、Falcon-512 の検証を毎秒約 27,900 回、署名を毎秒約 5,900 回実行できます。Apple M4 Max の 1 コアで OpenSSL 3.6.5 の ML-DSA-44 のポータブル実装を計測したところ、検証は毎秒約 20,800 回、署名は毎秒約 3,900 回でした。マシンが異なるため、これらの数値は直接比較できるベンチマークではなく、桁の目安として捉えてください。
標準化の状況
- ML-DSA:2024年8月13日に最終版(FIPS 204)となり、X.509 の識別子(RFC 9881)、CMS と OpenPGP のプロファイル、CNSA 2.0 での採用(ML-DSA-87)、認証済みモジュールがそろっています。
- FN-DSA:NIST は 2022年7月に Falcon を標準化すると発表し、FIPS 204 と 205 の後に FIPS 206 を策定する予定としていました。NIST の担当者は 2025年に、初期公開ドラフトはほぼ書き上がっており承認待ちだと述べています。2026年10月の時点で最終版の標準はなく、2026年9月の固定小数点の提案は、仕様がまだ変わりつつあることを示しています。JOSE、COSE、X.509 で FN-DSA を使うための IETF のドラフトは、この FIPS に追従しています。
FIPS 206 は Falcon の第 3 ラウンドの仕様と異なる可能性があるため、現在書かれた実装は、最終版の標準に合わせて変更が必要になるかもしれません。
どちらを選ぶべきか
- 現在の汎用的なポスト量子署名:ML-DSA(44 または 65)を使います。
- コンプライアンス要件に基づく導入(FIPS 140-3、CNSA 2.0):ML-DSA を使います。FN-DSA は、FIPS 206 が確定するまで認証を受けられません。
- 証明書を多用するプロトコルの今後(TLS のチェーン、DNSSEC、リソースの限られた IoT の更新):FN-DSA の動向を追ってください。プロトコルの構造を変えずに署名のオーバーヘッドを抑えられる、最も有力な手段です。
- 浮動小数点演算に対応しない、またはサイドチャネル対策の要件が厳しいハードウェア:ML-DSA を使います。Falcon を使うのは、十分に精査された定数時間の整数実装がある場合に限ります。
- サイズが問題にならない、長期間使うルート証明書:安全性をハッシュ関数だけに依拠する SLH-DSA、または ML-DSA を使います。この用途では、FN-DSA の署名の小ささは何の利点にもなりません。
移行時の注意点
- クリプトアジリティを前提に設計する:アルゴリズム識別子を持たせ、署名サイズを固定せず、ML-DSA に並ぶ 2 つ目のポスト量子の選択肢として FN-DSA を追加できるようにしておきます。
- プロトタイプは慎重に作る:Falcon のサンプラーを定数時間で実装し、出力が標準化前のものであると明示しているライブラリを使います。標準が求められる場面には、それらを組み込んで出荷しないでください。
- 今のうちに ML-DSA でプロトコルのサイズ予算を測定します。収まるのであれば、そのプロトコルでは FN-DSA がこの先も必要ないかもしれません。
- 最終版の FIPS 206 を注視する:パラメーター名、エンコーディング、署名手順が第 3 ラウンドの Falcon と異なる可能性があり、それに応じてテストベクトルも変わります。
- ハイブリッドも視野に入れる:どちらの格子方式を選ぶにしても、移行期間中は複合署名によってポスト量子方式と ECDSA または EdDSA を組み合わせます。