Equations
ZKP提示イベント
HolderがVerifier(サービス提供者)にZKPを提示したイベントを表します。 このイベントにより、プロトコルの実行履歴を構造的に記録できます。
重要な設計:
- ZKPにはHolderのDIDは含まれない(ゼロ知識性の保証)
- ZKPは属性のみを証明し、身元は明かさない
- presentedDIDは別チャネル(DID提示)で送信されることを想定
- presentedDID : UnknownDID
- service : Service
- zkp : UnknownZKP
- timestamp : Timestamp
Instances For
プロトコル実行履歴(トレース)
システム全体のZKP提示イベントの記録。 攻撃者がこのトレースを観測・解析することで名寄せを試みることができる。
攻撃シナリオ:
- 攻撃者は複数のサービスからZKPを収集
- ZKP暗号を破ればDIDが露出(確率 ≤ 2^{-128})
- 異なるサービスのDIDを関連付けようとする(さらに確率 ≤ 2^{-128})
プライバシー保護の設計: 異なるサービスで異なるDIDを使用することで、 トレースを観測されても名寄せには暗号的計算量(128ビット)が必要。
Equations
Instances For
DIDがサービスで使用されたことを表す述語
意味:
UsedIn did service traceは、
プロトコル実行履歴traceの中に、
didがserviceに提示されたイベントが存在することを表します。
プロトコルの実態: AMATELUSでは、HolderがVerifier(サービス提供者)にZKPを提示する際、 ZKPにはHolderのDIDは含まれません(ゼロ知識性の保証)。 DIDは別チャネル(DID提示)で送信されます。
この述語が含意する暗号的リスク:
DID間の関連付け: 異なるサービスで異なるDIDを使用すれば、名寄せは困難
暗号が破られた場合(確率 ≤ 2^{-128}): ZKPからDIDが露出し、名寄せが可能になる
したがって、anti_linkability定理は「暗号が破られない限り」という条件付きで
名寄せ防止を保証します。これは暗号プロトコルにおける標準的な安全性保証です。
設計の利点:
- プロトコル実行の形式的モデル化
- 攻撃シナリオの明確化(トレース観測・解析)
- 名寄せリスクの定量化(暗号強度に基づく確率)
実装での検証: 実際の実装では、ZKP提示の記録やセッション履歴から、 特定のDIDが特定のサービスで使用されたことを検証可能です。
Equations
Instances For
DID間の関連付けを発見する試み(抽象的なモデル)
この関数は理論的なモデルとして定義されているが、実際の名寄せ攻撃の成功確率は 暗号強度に依存する具体的な確率(最大 2^{-128})である。
注意: この関数は簡略化されたモデルであり、実際の安全性保証は
anti_linkability定理とdidLinkabilitySecurityで定義される暗号強度に基づく。
Instances For
DID間の暗号的関連性発見の計算コスト
異なるDID間の暗号的関連性を発見するには、以下の計算量が必要です。
DIDはハッシュ関数に基づくため:
- 古典計算機: 256ビット(ハッシュの衝突耐性)
- 量子計算機: 128ビット(Grover適用後)
注意: これは鍵ペアの独立性とハッシュ関数の衝突耐性に依存します。
Equations
- didLinkabilitySecurity = { classicalBits := 256, quantumBits := 128, grover_reduction := didLinkabilitySecurity._proof_1 }
Instances For
Theorem 5.1: 名寄せ防止(Anti-Linkability)の暗号的保証
定理の意味: プロトコル実行履歴traceを観測できる攻撃者に対して、 異なるサービスで使用される異なるDIDを関連付けるには、 暗号的に困難な計算が必要である。
前提条件(UsedInの意味):
trace: プロトコル全体のDID提示イベントの記録UsedIn did₁ service₁ trace: traceの中に、did₁がservice₁に提示されたイベントが存在UsedIn did₂ service₂ trace: traceの中に、did₂がservice₂に提示されたイベントが存在- ZKPにはDIDは含まれない(ゼロ知識性の保証)
- DIDは別チャネルで送信される
攻撃シナリオ:
- 攻撃者がtraceを観測(複数のサービスからZKPを収集)
- traceからdid₁とdid₂を含むイベントを特定
- did₁とdid₂が同一人物のものであることを発見しようとする
攻撃成功確率(具体的な保証):
- 古典計算機: 最大 2^{-256}(ハッシュの衝突耐性)
- 量子計算機: 最大 2^{-128}(Grover適用後)
これらの確率は実用的には無視できるが、数学的には有限の確率である。 「Negligible(理論的な無限小)」ではなく、暗号強度に基づく 具体的な確率的保証として理解すべきである。
証明の構造: 異なるサービスで使用された2つのDIDを関連付けるには、以下が必要:
DID間の暗号的関連付け(ハッシュ衝突の発見): DIDはハッシュ値に基づくため、ハッシュ関数の衝突耐性により 量子計算機でも128ビットの計算量が必要 (didLinkabilitySecurityで定義)
鍵ペアの関連性の発見: keyPairIndependenceSecurityにより、量子計算機でも128ビットの計算量が必要 (SecurityAssumptions.keyPairIndependence_quantum_secureで保証)
ZKPの零知識性: ZKPにはDIDは含まれないが、ZKPの統計的性質から秘密情報を抽出するには 量子計算機でも128ビットの計算量が必要 (zero_knowledge_property_quantum_secureで保証)
外部情報による関連付け: プロトコルの範囲外(実装レベルやソーシャルエンジニアリング) これは暗号プロトコルでは防げない
したがって、cryptographic_linkability_quantum_secureにより、 量子脅威下でも128ビット(NIST最小要件)を満たす。
条件付き安全性: この定理は、「名寄せが不可能」ではなく「名寄せに2^{128}の計算量が必要」 という確率的保証を提供する。ZKPの暗号的保護が破られない限り(確率 1 - 2^{-128})、 名寄せは不可能である。これは暗号学における標準的な安全性の定義である。
鍵ペアの独立生成の量子安全性
注意: この定理は SecurityAssumptions.keyPairIndependence_quantum_secure を参照します。
異なる鍵ペア間の関連性を発見するには、量子計算機でも128ビットの計算量が必要です。
DID所有者抽出の計算コスト
DIDドキュメントから所有者を特定するには、以下の計算量が必要です。
DIDドキュメントには公開鍵のみが含まれる:
- 古典計算機: 256ビット以上(公開鍵から秘密鍵を計算する困難性)
- 量子計算機: 128ビット(ポスト量子暗号の場合)
注意: Ed25519などの楕円曲線署名の場合、Shorのアルゴリズムにより多項式時間で破られます。 Dilithium2などのポスト量子暗号を使用すれば、量子脅威下でも128ビットの安全性を維持できます。
Equations
- didOwnerExtractionSecurity = { classicalBits := 256, quantumBits := 128, grover_reduction := didLinkabilitySecurity._proof_1 }
Instances For
Theorem 5.3: ZKP零知識性の量子安全性
AMATELUSで使用されるZKPシステム(STARKs)は、量子脅威下でも 証明の識別に128ビットの計算量が必要です。
量子脅威下での安全性:
- 証明識別の量子コスト: 128ビット
- NIST最小要件: 128ビット
- 結論: 安全(128 ≥ 128)
証明: SecurityAssumptions.amtZKP_zeroKnowledge_quantum_secureにより、 実際の証明とシミュレートされた証明を識別する量子コストは128ビットであり、 NIST最小要件128ビットを満たす。
ZKPから秘密情報を抽出する計算コスト(暗号強度ベースの定義)
定理の意味: ZKPの零知識性により、証明から秘密情報(witness)を抽出するには、 量子計算機でも128ビットの計算量が必要です。
攻撃成功確率:
- 古典計算機: 最大 2^{-256}
- 量子計算機: 最大 2^{-128}
これらの確率は実用的には無視できるが、数学的には有限の確率である。 「Negligible(理論的な無限小)」ではなく、暗号強度に基づく 具体的な確率的保証として理解すべきである。
証明の構造: zero_knowledge_property_quantum_secureにより、ZKPの証明はシミュレータで 生成可能であり、実際の証明とシミュレートされた証明の識別には128ビットの 計算量が必要である。シミュレータは秘密情報wにアクセスせずに証明を 生成するため、証明自体に秘密情報は含まれない。
したがって、攻撃者がZKPから秘密情報を抽出するには、 量子計算機でも128ビットの計算量が必要である。
総合的プライバシー保護(暗号強度ベースの定義)
プロトコル実行履歴traceを持つシステムにおいて、 複数のDIDを使用することで、以下のプライバシー保護が暗号的に保証される:
- DID間の名寄せ防止: 量子計算機でも128ビットの計算量が必要
- DID所有者抽出の困難性: 量子計算機でも128ビットの計算量が必要
- ZKPによる秘密情報の保護: 量子計算機でも128ビットの計算量が必要
攻撃シナリオ: 攻撃者がtraceを観測し、did₁とdid₂が同一人物のものであることを発見しようとする。
安全性保証: これらの保証は、具体的な攻撃成功確率(最大 2^{-128})に基づいており、 暗号強度に依存した確率的保証である。
Equations
- One or more equations did not get rendered due to their size.
Instances For
DIDとDID Documentのサイズが固定であることの証明
amt.md仕様(Version 0)より:
- SHA3-512ハッシュ: 64バイト(固定)
- Base32エンコード後: 103文字(固定)
- Ed25519公開鍵: 32バイト(固定)
- DID Document: テンプレートベースで、サイズはほぼ固定
証明可能な性質: すべての DID と DID Document が同じサイズを持つため、 サイズ比較によるタイミング攻撃は理論的に不可能。
しかし、これだけでは不十分: 以下の要因によりタイミング情報が漏洩する可能性がある:
- ハードウェアレベル: キャッシュ、分岐予測
- システムレベル: OSスケジューリング、データベースアクセスパターン
- ネットワークレベル: 遅延パターン
Equations
Instances For
タイミングのランダム化手法
- random_delay : TimingCountermeasure
- constant_time_ops : TimingCountermeasure
- dummy_traffic : TimingCountermeasure
Instances For
トラフィック分析の計算コスト
タイミングパターンからDIDを関連付けるには、以下の計算量が必要です。
タイミングのランダム化が実装されている場合:
- 古典計算機: 128ビット以上(ランダムノイズによる隠蔽)
- 量子計算機: 128ビット(量子計算でも改善されない)
注意:
- これは実装レベルのタイミングランダム化に依存します
- 完全なランダム化により、統計的攻撃も防げます
- ネットワーク層でのダミートラフィック挿入などの対策が必要
Equations
- trafficAnalysisSecurity = { classicalBits := 128, quantumBits := 128, grover_reduction := trafficAnalysisSecurity._proof_1 }
Instances For
タイミング攻撃対策の実装
この構造体は、タイミング攻撃を防ぐための対策が実装されていることを表します。
証明可能な部分:
size_fixed: amt.md仕様により、DIDとDID Documentのサイズは固定
→ サイズ比較によるタイミング攻撃は不可能(数学的に証明可能)
実装依存の部分:
countermeasure: 選択したタイミング対策手法
correctly_implemented: その手法が正しく実装されていることの前提
→ これは実装者の責任であり、数学的証明の範囲外
使用例:
def myTimingProtection : TimingAttackProtection := {
size_fixed := did_document_size_is_constant
countermeasure := .random_delay
correctly_implemented := by <implementation proof>
}
重要な注意: サイズが固定であっても、以下の理由によりタイミング攻撃は完全には防げません:
- ハードウェアレベルの挙動(キャッシュ、分岐予測)
- OSスケジューリングの非決定性
- ネットワーク遅延の統計的パターン
したがって、
countermeasureとcorrectly_implementedが必須です。
- size_fixed : did_size_fixed
DIDとDID Documentのサイズが固定であること(証明可能)
- countermeasure : TimingCountermeasure
選択したタイミング対策手法
- correctly_implemented : Prop
選択した対策が正しく実装されていることの前提(実装依存)
Instances For
タイミング攻撃耐性(構造体バージョン)
TimingAttackProtection が正しく実装されている場合、
タイミングパターンからDIDを関連付けるには、量子計算機でも128ビットの計算量が必要です。
証明の構造:
protection.size_fixedにより、サイズ比較によるタイミング攻撃は不可能(証明可能)protection.correctly_implementedにより、選択した対策が正しく実装されている(実装仮定)- したがって、タイミングパターンからの名寄せには128ビットの計算量が必要
数学的に証明可能な部分:
- DIDとDID Documentのサイズが固定であること
- サイズ固定によりサイズ比較攻撃が不可能であること
実装に依存する部分(数学的証明不可能):
- ハードウェア/OS/ネットワークレベルのタイミングばらつきの制御
- ランダム化やダミートラフィックの実装の正しさ
サイズ固定性のみではタイミング攻撃を完全には防げない
この定理は、DIDとDID Documentのサイズが固定であっても、 完全なタイミング攻撃耐性には追加の対策が必要であることを示します。
証明可能な事実:
did_document_size_is_constantにより、サイズは固定- サイズ比較によるタイミング攻撃は不可能
しかし不十分:
- ハードウェアレベル(キャッシュ、分岐予測)
- システムレベル(OSスケジューリング、データベース)
- ネットワークレベル(遅延パターン)
これらは
TimingCountermeasureとcorrectly_implementedで対処する必要がある。
ZKPによる統計的攻撃の計算コスト(暗号強度ベースの定義)
定理の意味: ZKPの零知識性により、統計的分析を通じて秘密情報を抽出するには、 量子計算機でも128ビットの計算量が必要です。
攻撃成功確率:
- 古典計算機: 最大 2^{-256}
- 量子計算機: 最大 2^{-128}
これらの確率は実用的には無視できるが、数学的には有限の確率である。 「Negligible(理論的な無限小)」ではなく、暗号強度に基づく 具体的な確率的保証として理解すべきである。
証明の構造: zero_knowledge_property_quantum_secureにより、ZKPの証明は シミュレータで生成可能であり、実際の証明とシミュレートされた 証明の識別には128ビットの計算量が必要である。
シミュレータは秘密情報にアクセスせずに証明を生成するため、 証明の統計的性質から秘密情報を推測することは、 量子計算機でも128ビットの計算量が必要である。
したがって、攻撃者が統計的分析を通じて秘密情報を抽出するには、 量子計算機でも128ビットの計算量が必要である。