Quantova Inc が、Cardano のスマートコントラクトで耐量子の署名を検証できるようにする CIP を提案しています。10 月 15 日に CIPs リポジトリへ出した PR #1300 で、米国立標準技術研究所 (NIST) が標準化した ML-DSA (FIPS 204) と SLH-DSA (FIPS 205) を検証する Plutus の組み込み関数 (builtin) を 2 つ足す内容です。
Cardano のスクリプトがいま検証できる Ed25519・ECDSA・Schnorr の署名は、どれも十分な規模の量子計算機があれば破られる方式です。Cardano 公式の 11 月 1 日の CIP まとめは、この提案を規制対応ステーブルコインの CPS と並ぶ新しい提案の筆頭に挙げました。番号は仮の CIP-0206 で、状態は提案段階 (open) です。
CPS-0027 の問いへの、一つの答え
出発点は、MLabs の Koz Ross 氏が 1 月に出した CPS-0027「耐量子署名への取り組み方」です。この問題提起は、スクリプトや dApp の開発者が耐量子の署名を使うには自前で実装するしかなく、難しく、効率が悪く、危険だと指摘し、どの方式を builtin にするかには十分な根拠が要るとしていました。
PR #1300 はその問いに具体的に答える形を取っています。選んだ 2 方式は、NIST が 2024 年 8 月に最終決定した署名方式で、ML-DSA は格子の問題、SLH-DSA はハッシュの問題と、まったく別の数学の難しさに頼っています。片方の系統に弱点が見つかっても、もう片方が残る、という組み合わせです。同じく候補に挙がる Falcon は標準案の段階で、署名に浮動小数点を使うことがチェーン上では移植性やサイドチャネルの懸念になるとして、SQIsign とともに後回しにしています。
方式を名前で宣言する符号化
提案のもう一つの柱は、鍵と署名の形式です。バージョン 1 バイト、方式を示す 16 ビットの識別子、鍵か署名かの種別、本体の順に並べ、検証側は本体の長さではなく識別子で方式を判断します。初期の識別子は ML-DSA の 3 段階 (44・65・87) と SLH-DSA-SHA2-128s の 4 つで、Falcon などは標準化されたあとに識別子を足すだけで、形式を作り直さずに受け入れられる設計です。
代償は大きさです。提案の表では、ML-DSA-44 の署名は 2,420 バイト、SLH-DSA-SHA2-128s の署名は 7,856 バイトあります。SLH-DSA は鍵が 32 バイトと最小で署名が最大、ML-DSA はその逆なので、両方を用意する、と説明しています。検証時間は JavaScript の参考実装での目安で、実際の費用はネイティブ実装での計測に委ねるとしています。
テストベクター (正解の入出力の一覧) と参考実装も付いています。改ざんしたメッセージや別方式の鍵と署名の組み合わせを拒否することを確かめる内容です。ただし builtin とその費用モデルはコンセンサスにかかわるため、導入には通常の手続きでのハードフォークが必要で、その作業は台帳と Plutus の保守チームの担当だと、提案自身が書いています。
鍵の移行とは別の層の話
耐量子の話題では、ウォレットや鍵そのものの移行が注目されがちです。この提案が扱うのは、コントラクトの中で「この耐量子署名は正しいか」を確かめる道具のほうです。たとえばオラクルやブリッジ、マルチシグのように、外部の署名をスクリプトで検証する仕組みが、耐量子の署名を受け付けられるようになります。Midnight が Quantum Alliance で耐量子の物差しづくりに加わった話は 10 月 19 日の記事で取り上げました。
確認できる次の一点は、Intersect の技術運営委員会 (TSC) が 11 月 4 日 23 時 (日本時間) から開く、IO Research との耐量子暗号のオンライン会合です。Cardano 全体の耐量子の作業がどこに向かっているかが示されれば、PR #1300 の 2 方式がその中でどう位置づけられるかも見えてきます。提案そのものへの反応は、PR #1300 のコメント欄で追えます。
ことば
- ML-DSA — NIST が FIPS 204 として標準化した、格子の問題に基づく署名方式です。鍵と署名がほどほどの大きさで、提案では強さの異なる 44・65・87 の 3 段階を識別子で使い分けます。
- SLH-DSA — NIST が FIPS 205 として標準化した、ハッシュ関数だけに安全性を頼る署名方式です。鍵は 32 バイトと小さい一方、署名は数千バイトと大きくなります。
- builtin (組み込み関数) — Plutus のスクリプトから呼べる、ノード側に用意された関数です。署名の検証のように重い計算を安く速く実行でき、追加にはハードフォークが必要です。
一次ソース / 関連リンク
GitHub
- Cardano 公式 X の今週の CIP まとめ
https://x.com/Cardano/status/2116727931313459513

Intersect weekly update #135 (TSC の耐量子暗号の会合の予定)
intersectmbo.org

