提示の主体・用途束縛とクレーム再包装 #
署名検証、鍵知識証明、委任検証の実暗号処理は引数の検証器に委ねる。 以下の定理はそれらの結果とフィールド照合の合成についての定理である。 主体や元資格参照は秘密witness。恒久的な共通公開IDを追加しない。
Equations
- instReprPresentationContext = { reprPrec := reprPresentationContext✝ }
自己署名による包装と、元発行者の署名対象を分離する。
- conditions : ClaimConditions
- originSignature : Signature
- packagingIssuer : ValidDID
Instances For
Equations
- claim.repackage holder = { conditions := claim.conditions, originSignature := claim.originSignature, packagingIssuer := holder }
Instances For
theorem
repackaging_preserves_origin
(claim : ClaimEnvelope)
(holder : ValidDID)
:
(claim.repackage holder).conditions = claim.conditions ∧ (claim.repackage holder).originSignature = claim.originSignature
- sameSubjectReissue : PresentationRole
- delegatedPresentation : PresentationRole
Instances For
証明の秘密witnessを含む論理モデル。送信メッセージの型ではない。
- context : PresentationContext
- presenter : ValidDID
- subject : ValidDID
- claims : List ClaimEnvelope
Instances For
実装で満たすべき検証器契約。結果は利用者が自己申告するフラグではない。 verifyClaimは元署名・信頼先・期限・委任範囲および要求属性条件を検証する。 失効の確認状態/鮮度は別途返し、業務受理と分離する。
- verifyClaim : ClaimEnvelope → PresentationContext → Bool
- verifyAuthorization : SubjectAuthorization → Bool
- verifyKeyKnowledge : ValidDID → PresentationContext → Bool
- verifySubjectLink : ValidDID → ValidDID → PresentationContext → Bool
異なる署名済みsubjectを同一人物に結ぶ発行者承認を、この提示内で検証。 単なるDID文字列の違いや二重署名を同一人物証拠にしない。
Instances For
元条件の形式・期限チェック。失効の鮮度は別の観測結果で扱う。
Equations
- claimConditionsValidAt c now = ((match c.expiresAt with | none => true | some t => decide (now ≤ t)) && (!c.revocationEnabled || c.revocationRef.isSome))
Instances For
def
authorizationMatches
(p : BoundPresentation)
(a : SubjectAuthorization)
(role : PresentationRole)
(now : ℕ)
:
Equations
- One or more equations did not get rendered due to their size.
def
verifySubjectAuthorization
(p : BoundPresentation)
(checks : PresentationChecks)
(role : PresentationRole)
(now : ℕ)
:
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- subjectBound subject p checks = (decide (subject = p.subject) || checks.verifySubjectLink subject p.subject p.context)
Instances For
def
verifyBoundPresentation
(p : BoundPresentation)
(expected : PresentationContext)
(checks : PresentationChecks)
(role : PresentationRole)
(now : ℕ)
:
Equations
- One or more equations did not get rendered due to their size.
Instances For
theorem
presentation_context_bound
(p : BoundPresentation)
(expected : PresentationContext)
(checks : PresentationChecks)
(role : PresentationRole)
(now : ℕ)
(h : verifyBoundPresentation p expected checks role now = true)
:
theorem
unapproved_other_presenter_rejected
(p : BoundPresentation)
(checks : PresentationChecks)
(now : ℕ)
(h : p.authorization = none)
(hne : p.subject ≠ p.presenter)
:
theorem
delegation_not_personal_reissue
(p : BoundPresentation)
(a : SubjectAuthorization)
(checks : PresentationChecks)
(now : ℕ)
(ha : p.authorization = some a)
(hr : a.role = PresentationRole.delegatedPresentation)
:
theorem
ahi_subject_bound
(p : BoundPresentation)
(expected : PresentationContext)
(checks : PresentationChecks)
(role : PresentationRole)
(now : ℕ)
(s : ValidDID)
(hs : p.ahiSubject = some s)
(h : verifyBoundPresentation p expected checks role now = true)
: