| 一般的な | |
|---|---|
| デザイナー | ジャン=フィリップ・オーマソン、ダニエル・J・バーンスタイン、ウォード・ビューレンス、クリストフ・ドブラウニグ、マリア・アイヒルゼーダー、スコット・フリューラー、ステファン=ルーカス・ガスダーグ、アンドレアス・ヒュルシング、パノス・カンパナキス、ステファン・ケルブル、ターニャ・ランゲ、マーティン・M・ラウリドセン、フロリアン・メンデル、ルーベン・ニーダーハーゲン、クリスチャン・レヒベルガー、ジューストライネフェルト、ピーター シュワーベ、バス ヴェスターバーン |
| 初版 | 2017年11月30日 ( 2017-11-30 ) |
| 由来 | スフィンクス |
| 詳細 | |
| セキュリティに関する主張 | 署名を偽造するために必要な作業が、必要なセキュリティレベルを下回るまでに2 64署名が必要 |
| 構造 | ハッシュベースの暗号化 |
SPHINCS +は、正式にはSLH-DSA [ 1 ]としても知られ、NISTによって量子耐性標準化プロセスのFIPS 205標準に選択された量子耐性署名方式です。
SPHINCS +は、WOTS +(ウィンターニッツワンタイム署名方式の改良版)と呼ばれるワンタイム署名方式、FORS(ランダムサブセットの森)と呼ばれる少数回署名方式、およびマークル木に基づいています。[ 2 ]
署名の際、メッセージはFORS鍵で署名されます。FORS鍵は、マークルツリーの葉であるWOTS +鍵で署名されます。ツリーのルートは、別のツリーの葉である別のWOTS +鍵で署名されます。そのツリーのルートは、再びWOTS +鍵で署名されます。ツリーの階層数は、アルゴリズムの一部として指定されるパラメータです。この「ツリーのツリー」はハイパーツリーと呼ばれます。最上位のツリーのルートは公開鍵です。署名は、FORS鍵とその署名、WOTS +鍵とその署名、マークルツリーの包含証明、そしてハイパーツリーのパスを生成するために使用されたRと呼ばれるランダム値で構成されます。[ 2 ]
署名を検証するために、検証者はまず最初のWOTS +鍵の包含証明を公開鍵と照合し、次に次のルート鍵の署名を検証します。そして、次のWOTS +鍵の包含証明を新しいルート鍵と照合します。この処理は最後のWOTS +鍵に到達するまで続けられ、最後のWOTS +鍵はFORS鍵の検証に使用されます。そして、この鍵はメッセージの署名を実際に検証するために使用されます。[ 2 ]
すべてのWOTS +鍵とFORS鍵は、秘密鍵から決定論的に生成されます。署名時に、署名者はRと呼ばれるランダムなビット列を生成し、それをメッセージと共にハッシュします。得られたハッシュの一部はハイパーツリーのパスを選択するために使用され、残りの部分はFORS鍵で署名されます。[ 2 ]
SPHINCS +は、そのセキュリティが基礎となるハッシュ関数の原像と衝突耐性のみに依存しているため、NISTによって「保守的な」選択と呼ばれています。 [ 3 ] [ 4 ]
特定のSHA256インスタンスに対する理論的な偽造攻撃が報告されています。この攻撃は、大量の正規署名と実行不可能な量の計算を必要とします。この攻撃はSHA256のMerkle-Damgård構造[ a ]を利用し、各セキュリティクレームを40ビット削減します。この攻撃の作者たちは、この攻撃が「SPHINCS +設計の全体的な健全性に疑問を投げかけるものではない」と考えており、緩和策も提案されています。[ 2 ]
SPHINCS +は、 EUROCRYPT 2015で発表されたSPHINCSスキームに基づいています。[ 6 ]
SPHINCSは、公開鍵と秘密鍵のサイズが1kBと大きく、署名のサイズが41kBであるのが特徴です。[ 6 ]
SPHINCS +は2017年に初めてリリースされました[ 7 ]。これは、SPHINCSが「ハッシュベース署名におけるマルチターゲット攻撃」と呼ばれる脆弱性を抱えていたためです。この脆弱性は2016年の論文で対処されています。さらに、検証可能なインデックス選択(ツリー構造を通るパス)がないため、別の種類のマルチターゲット攻撃が可能になります。SPHINCS +は、これらの問題すべてに対処し、ツリーレスWOTS +鍵圧縮、署名時のRパラメータの追加、そしてFew-Time署名方式のFORSへの置き換えによって鍵と署名のサイズを削減するように設計されました[ 8 ] [ 9 ] 。
SPHINCS +は、 2024年8月にNISTによってFIPS 205標準でSLH-DSAとして標準化され、 [ 1 ] NIST標準化の2つの量子耐性署名方式の1つとなり、もう1つはML-DSAです。[ 10 ] [ 11 ] [ 12 ]
SLH-DSAは、ハッシュ関数(SHA256またはSHAKE256 )、タイプ(fは署名時間が速く、sは署名が短い)、セキュリティレベル(例えば128は署名の偽造がAES-128の解読と同じくらい難しいことを意味する)に基づいて、以下のインスタンスを指定する:[ 1 ] [ 13 ]
| 名前 | セキュリティレベル | タイプ | ハッシュ関数 | 公開鍵のサイズ | 秘密鍵のサイズ | 署名サイズ |
|---|---|---|---|---|---|---|
| SPHINCS+-SHA2-128s | 1 [ b ] | 小さい | SHA256 | 32 | 64 | 7856 |
| SPHINCS+-SHAKE-128s | シェイク256 | |||||
| スフィンクス+-SHA2-128f | 速い | SHA256 | 17088 | |||
| スフィンクス+-シェイク-128f | シェイク256 | |||||
| SPHINCS+-SHA2-192s | 3 [ c ] | 小さい | SHA256 | 48 | 96 | 16224 |
| SPHINCS+-SHAKE-192s | シェイク256 | |||||
| スフィンクス+-SHA2-192f | 速い | SHA256 | 35664 | |||
| スフィンクス+-シェイク-192f | シェイク256 | |||||
| SPHINCS+-SHA2-256s | 5 [ d ] | 小さい | SHA256 | 64 | 128 | 29792 |
| SPHINCS+-SHAKE-256s | シェイク256 | |||||
| スフィンクス+-SHA2-256f | 速い | SHA256 | 49856 | |||
| スフィンクス+-シェイク-256f | シェイク256 |