Equations
- instReprTimestamp = { reprPrec := reprTimestamp✝ }
Equations
Zero-Knowledge Proof の基本構造
すべてのZKPはこの基本構造を含む。
注意: W3Cが標準化しているのは一般的なproof構造であり、
ZKP固有の構造ではありません。この構造はAMATELUSのZKP実装のために定義されています。
参考: W3C VC Data Model 2.0 の Proof 仕様(一般的な証明構造)
- proof : Proof
- publicInput : PublicInput
- proofPurpose : String
- created : Timestamp
Instances For
Verifier認証用ZKPの基本構造
Verifierが自身の正当性を証明するためのZKP。 "私(verifierDID)は、信頼できるトラストアンカーから 発行されたVerifierVCを保持している"ことを証明。
- core : ZKProofCore
- verifierDID : UnknownDID
- credentialType : String
Instances For
Holder資格証明用ZKPの基本構造
Holderが特定の属性を証明するためのZKP。 "私は特定の属性を満たすVCを保持している"ことを証明。 例: "私は20歳以上である"、"私は運転免許を持っている"など
ゼロ知識性の保証: HolderのDIDは含まれない。ZKPの本質は「誰が」ではなく「何を」証明するか。 Verifierは属性の正当性のみを検証し、Holderの身元は知らない。
- core : ZKProofCore
- claimedAttributes : String
Instances For
VerifierAuthZKPの型エイリアス(MutualAuthenticationで使用)
Equations
Instances For
HolderCredentialZKPの型エイリアス(MutualAuthenticationで使用)
Equations
Instances For
正規のゼロ知識証明 (Valid Zero-Knowledge Proof)
暗号学的に正しく生成されたZKP。 任意のRelationに対して暗号的検証が成功する(verifyを通過する)。
設計思想:
- ZKPの生成はWalletの責任(暗号ライブラリの実装詳細)
- プロトコルレベルでは「正規に生成されたZKP」として抽象化
- Verifierは暗号的検証のみに依存し、Wallet実装を信頼しない
抽象化の利点:
- Groth16のペアリング検証などの暗号的詳細を隠蔽
- プロトコルの安全性証明が簡潔になる
- Wallet実装の違いを抽象化(同じプロトコルで多様なWallet実装が可能)
Instances For
不正なゼロ知識証明 (Invalid Zero-Knowledge Proof)
暗号学的に不正なZKP。 以下のいずれかの理由で不正:
- Witness(秘密情報)が不正
- 証明データπが改ざんされている
- ランダムネスが不足している(Walletバグ)
- 署名検証に失敗する
- Relationが不一致
Walletバグの影響:
- バグのあるWalletが生成したZKPは
InvalidZKPとして表現される - プロトコルの安全性には影響しない(当該利用者のみが影響を受ける)
- reason : String
Instances For
未検証のゼロ知識証明 (Unknown Zero-Knowledge Proof)
正規のZKPと不正なZKPの和型。 AMATELUSプロトコルで扱われるZKPは、暗号学的に以下のいずれか:
- valid: 正規に生成されたZKP(暗号的に正しい)
- invalid: 不正なZKP(暗号的に間違っている、または改ざんされている)
設計の利点:
- ZKP検証の暗号的詳細(Groth16のペアリング計算など)を抽象化
- プロトコルレベルでは「正規/不正」の区別のみが重要
- Wallet実装のバグは
invalidとして表現され、プロトコルの安全性には影響しない
- valid : ValidZKP → UnknownZKP
- invalid : InvalidZKP → UnknownZKP
Instances For
ZKPから基本構造を取得
Equations
Instances For
ZKP検証関数(定義として実装)
設計の核心:
- 正規のZKP(valid): 常に検証成功(暗号的に正しい)
- 不正なZKP(invalid): 常に検証失敗(暗号的に間違っている)
この単純な定義により、暗号的詳細(Groth16ペアリング検証など)を 抽象化しつつ、プロトコルの安全性を形式的に証明できる。
Relationパラメータの意味:
実際の実装では、Relationに応じて異なる検証ロジックが実行されますが、
プロトコルレベルでは「ValidZKPは任意のRelationに対して検証成功」
という抽象化で十分です。
Walletバグの影響:
- バグのあるWalletが生成したZKPは
invalidとして表現される verify (invalid _) _ = falseにより、検証は失敗する- したがって、Walletバグは当該利用者のみに影響
Equations
- (UnknownZKP.valid a).verify x✝ = true
- (UnknownZKP.invalid a).verify x✝ = false
Instances For
ZKPが有効かどうかを表す述語
Instances For
Theorem: 不正なZKPは常に検証失敗
暗号学的に不正なZKPは、どのRelationに対しても検証が失敗する。 これにより、Walletバグや改ざんされたZKPが受け入れられないことを保証。
Equations
- instReprDeviceConstraints = { reprPrec := reprDeviceConstraints✝ }
Equations
- instReprZKPRequirements = { reprPrec := reprZKPRequirements✝ }