Upgrade to Pro — share decks privately, control downloads, hide ads and more …

複数の証明書を選択的に連結・開示できるJSON-LD型Verifiable Credentialsの改良版

Dan Yamamoto
September 28, 2023

複数の証明書を選択的に連結・開示できるJSON-LD型Verifiable Credentialsの改良版

Presented at DIF Japan SIG Monthly Meeting, 2023-09-29

Dan Yamamoto

September 28, 2023
Tweet

More Decks by Dan Yamamoto

Other Decks in Technology

Transcript

  1. Verifiable Credentials (VCs) 1 ◼ 暗号学的に安全で、プライバシーを尊重し、機械的な検証が可能な デジタルクレデンシャルを表現するための仕組み ◼ W3C勧告: Verifiable

    Credentials Data Model (v1.1, March 2022) Holder Verifier Issuer Verifiable Credential (VC) Verifiable Presentation (VP) ⚫氏名: John Smith ⚫生年月日: 1980-01-01 ⚫Issuerの署名 ◼ 実用例: IATA Travel Pass / Microsoft Entra Verified ID / SMART Health Cards (ワクチン接種証明書)
  2. VCsの実現方式 (一例) 2 JWT-VC JWTベースのシンプルVC SD-JWT-VC Salted Hashで選択的開示 VC-DI-BBS ゼロ知識証明で選択的開示

    本提案 VC-DI-BBSの拡張 偽造不可 ✓ ✓ ✓ ✓ 属性の選択的開示 ✓ ✓ ✓ Verifierによる リンク不可 (Verifier毎に 発行すれば可) (Verifier毎に 発行すれば可) ✓ (制限付き) ✓ (制限付き) Issuerによる リンク不可 ✓ (制限付き) ✓ (制限付き) 隠した属性の 等価性証明 ✓ PoP (所有権証明) ✓ ✓ ✓ new 匿名PoP ✓ new PPID (仮名) ✓ new 述語証明 (計画中...) 実用化 ✓ 実装容易性 ✓ ✓ 国際標準化 ✓ (進行中: W3C) ✓ (進行中:IETF, OIDF) (少し停滞: W3C)
  3. ユースケース例 4 xyz: Person name = John Smith credentialSubject :

    Vaccination date = 2022-04-04 lotNo = 9999999 isPatientOf code#123 : Vaccine vaccine vc#1: VerifiableCredential issuer = 政府; proof = 署名値 メタデータ と署名値 接種した人 接種情報 接種した ワクチン VC1 Holderの秘密鍵 (VC内に埋込) Issuer 政府 Verifier 検疫所 Holder 個人
  4. xyz: Person name = John Smith : Vaccination date =

    2022-04-04 lotNo = 9999999 isPatientOf code#123 : Vaccine vaccine ユースケース例 5 VC1 2022年4月以降に当局認可済ワクチンを 接種していたら、その接種日を教えてください vc#1: VerifiableCredential issuer = 政府; proof = 署名値 Issuer 政府 Verifier 検疫所 Holder 個人 credentialSubject
  5. xyz: Person name = John Smith : Vaccination date =

    2022-04-04 lotNo = 9999999 isPatientOf cvx#207 : Vaccine vaccine ユースケース例 6 VC1 認可済かどうか 分からない! code#123 2022年4月以降に当局認可済ワクチンを 接種していたら、その接種日を教えてください vc#1: VerifiableCredential issuer = 政府; proof = 署名値 Issuer 政府 Verifier 検疫所 Holder 個人 credentialSubject
  6. xyz: Person name = John Smith : Vaccination date =

    2022-04-04 lotNo = 9999999 isPatientOf cvx#207 : Vaccine vaccine ユースケース例 7 VC1 VC2 : VerifiableCredential issuer = 提供者; proof = ... code#123: Vaccine name = Awesome Vaccine manufacturer = Example.com status = 認可済 credentialSubject ワクチン 情報 提供者 ワクチン 仕様VC ダウンロード 認可済かどうか 分からない! code#123 2022年4月以降に当局認可済ワクチンを 接種していたら、その接種日を教えてください vc#1: VerifiableCredential issuer = 政府; proof = 署名値 Issuer 政府 Verifier 検疫所 Holder 個人 credentialSubject
  7. xyz: Person name = John Smith : Vaccination date =

    2022-04-04 lotNo = 9999999 isPatientOf cvx#207 : Vaccine vaccine ユースケース例 8 VC1 VC2 : VerifiableCredential issuer = 提供者; proof = ... code#123: Vaccine name = Awesome Vaccine manufacturer = Example.com status = 認可済 credentialSubject ワクチン 情報 提供者 ワクチン 仕様VC ダウンロード 認可済かどうか 分からない! code#123 2022年4月以降に当局認可済ワクチンを 接種していたら、その接種日を教えてください vc#1: VerifiableCredential issuer = 政府; proof = 署名値 Linked Data として 結合・グラフ化 Issuer 政府 Verifier 検疫所 Holder 個人 credentialSubject
  8. xyz: Person name = John Smith : Vaccination date =

    2022-04-04 lotNo = 9999999 isPatientOf code#123 : Vaccine vaccine ユースケース例 9 VC1 VC2 : VerifiableCredential issuer = 提供者; proof = ... code#123: Vaccine name = Awesome Vaccine manufacturer = Example.com status = 認可済 credentialSubject ワクチン 情報 提供者 2022年4月以降に当局認可済ワクチンを 接種していたら、その接種日を教えてください vc#1: VerifiableCredential issuer = 政府; proof = 署名値 Linked Data として 結合・グラフ化 Issuer 政府 Verifier 検疫所 Holder 個人 credentialSubject
  9. xyz: Person name = John Smith : Vaccination date =

    2022-04-04 lotNo = 9999999 isPatientOf code#123 : Vaccine vaccine ユースケース例 10 VC1 VC2 : VerifiableCredential issuer = 提供者; proof = ... code#123: Vaccine name = Awesome Vaccine manufacturer = Example.com status = 認可済 credentialSubject ワクチン 情報 提供者 2022年4月以降に当局認可済ワクチンを 接種していたら、その接種日を教えてください *** **************** **************** ********* ********* ********************** ************************* vc#1: VerifiableCredential issuer = 政府; proof = 署名値 選択的開示 *** Issuer 政府 Verifier 検疫所 Holder 個人 credentialSubject
  10. xyz: Person name = John Smith : Vaccination date =

    2022-04-04 lotNo = 9999999 isPatientOf code#123 : Vaccine vaccine ユースケース例 11 VC1 VC2 : VerifiableCredential issuer = 提供者; proof = ... code#123: Vaccine name = Awesome Vaccine manufacturer = Example.com status = 認可済 credentialSubject ワクチン 情報 提供者 2022年4月以降に当局認可済ワクチンを 接種していたら、その接種日を教えてください 選択的開示 *** **************** **************** *** X *** *** X *** ********************** ************************* 隠した値の 等価性証明 vc#1: VerifiableCredential issuer = 政府; proof = 署名値 *** Issuer 政府 Verifier 検疫所 Holder 個人 credentialSubject
  11. xyz: Person name = John Smith : Vaccination date =

    2022-04-04 lotNo = 9999999 isPatientOf code#123 : Vaccine vaccine ユースケース例 12 VC1 VC2 : VerifiableCredential issuer = 提供者; proof = ... code#123: Vaccine name = Awesome Vaccine manufacturer = Example.com status = 認可済 credentialSubject ワクチン 情報 提供者 2022年4月以降に当局認可済ワクチンを 接種していたら、その接種日を教えてください 選択的開示 *** **************** **************** *** X *** *** X *** ********************** ************************* 隠した値の 等価性証明 ** vc#1: VerifiableCredential issuer = 政府; proof = 署名値 *** **** リンク不可 (署名値を秘匿) Issuer 政府 Verifier 検疫所 Holder 個人 credentialSubject
  12. xyz: Person name = John Smith : Vaccination date =

    2022-04-04 lotNo = 9999999 isPatientOf code#123 : Vaccine vaccine ユースケース例 13 VC1 VC2 : VerifiableCredential issuer = 提供者; proof = ... code#123: Vaccine name = Awesome Vaccine manufacturer = Example.com status = 認可済 credentialSubject ワクチン 情報 提供者 2022年4月以降に当局認可済ワクチンを 接種していたら、その接種日を教えてください 選択的開示 *** **************** **************** *** X *** *** X *** ********************** ************************* 隠した値の 等価性証明 ** vc#1: VerifiableCredential issuer = 政府; proof = 署名値 *** **** リンク不可 (署名値を秘匿) Issuer 政府 Verifier 検疫所 Holder 個人 秘密鍵を隠したままその知識だけ証明 (選択的開示と同様) credentialSubject
  13. xyz: Person name = John Smith : Vaccination date =

    2022-04-04 lotNo = 9999999 isPatientOf code#123 : Vaccine vaccine ユースケース例 14 VC1 VC2 : VerifiableCredential issuer = 提供者; proof = ... code#123: Vaccine name = Awesome Vaccine manufacturer = Example.com status = 認可済 credentialSubject ワクチン 情報 提供者 2022年4月以降に当局認可済ワクチンを 接種していたら、その接種日を教えてください 選択的開示 *** **************** **************** *** X *** *** X *** ********************** ************************* 隠した値の 等価性証明 ** VP vc#1: VerifiableCredential issuer = 政府; proof = 署名値 *** **** リンク不可 (署名値を秘匿) Issuer 政府 Verifier 検疫所 Holder 個人 秘密鍵を隠したままその知識だけ証明 (選択的開示と同様) 私(匿名、VC1の正当な所有者)は 2022年4月4日に 認可済ワクチン(匿名)を接種しました credentialSubject
  14. 実装 jsonld-proofs rdf-proofs-wasm rdf-proofs zkp-ld-playground docknetwork/crypto アプリケーション JSON-LD 固有処理 RDFデータ

    固有処理 BBS+署名と ゼロ知識証明 15 TypeScriptと Rustの仲介 ソース→ https://github.com/zkp-ld/ ◆JSON-LD VCの発行と検証 ◆JSON-LD VPの提示と検証 ◆N-Quads VCの発行と検証 ◆N-Quads VPの提示と検証 ◆N-Quads VCの発行と検証 ◆N-Quads VPの提示と検証 ◆整数の配列として表現されたVCの発行と検証 ◆整数の配列として表現されたVPの提示と検証
  15. zkp-ld-playground を使ったデモ 16 1. ワクチン接種証明書VCとワクチン仕様VCを同時に提示 (秘密鍵を使わないシンプルなデモ) 2. ワクチン接種証明書VCにHolderの秘密を埋込 (PoP: 所有権証明のデモ)

    3. 埋め込んだ秘密と提示先(Verifier)の識別子から仮名を生成 (PPIDのデモ) 4. 提示したVPから、同じHolder(の秘密)にバインドした新たなVCを発行 (ブラインド署名を応用したデモ) https://playground.zkp-ld.org/
  16. まとめ 17 ◼ 複数の証明書を連結し、選択的に開示でき、IssuerやVerifierに よるリンクが困難なVerifiable Credentialsを実装した ◼ Holderの秘密鍵をブラインド署名でVC内に埋め込むことで 所有証明(PoP)を可能にした ◼

    埋め込まれた秘密鍵とVerifierの識別子から一意の仮名(PPID) を作成することで、Verifierを跨がるリンクは防ぎつつ、Verifierサ イト内でHolderの同一性を特定可能にした ◼ 実装の多くを一から作り直した ◼ 今後の課題 ⚫ 述語証明機能、プロパティ秘匿機能、失効確認機能、Issuer秘匿機能 ⚫ 厳密な安全性証明
  17. VC発行処理 19 1. JSON-LD形式のVCをRDF N-Quadsデータに変換 2. N-Quadsデータの曖昧性を排除 (Canonicalization) 3. CanonicalなN-QuadsデータをTermの配列に分解

    4. 配列内の各Termをハッシュして整数の配列に変換 5. 整数の配列をBBS+署名アルゴリズムに入れて署名値を生成
  18. (1) JSON-LD形式のVCをRDF N-Quadsデータに変換 20 { "type": "VerifiableCredential", "issuer": "政府", "proof":

    { ... }, "credentialSubject": { "id": "xyz", "type": "Person", "name": "John Smith" "isPatientOf": { "type": "Vaccination", "date": "2022-04-04", "vaccine": { "id": "code#123", "type": "Vaccine" } } } } xyz: Person name = John Smith : Vaccination date = 2022-04-04 isPatientOf code#123 : Vaccine vaccine credentialSubject : VerifiableCredential issuer = 政府; proof = 署名値
  19. (1) JSON-LD形式のVCをRDF N-Quadsデータに変換 21 _:b0 type VerifiableCredential _:b0 issuer 政府

    _:b0 credentialSubject xyz xyz type Person xyz name John Smith xyz isPatientOf _:b1 _:b1 type Vaccination _:b1 date 2022-04-04 _:b1 vaccine code#123 主語 述語 目的語 { "type": "VerifiableCredential", "issuer": "政府", "proof": { これから作る }, "credentialSubject": { "id": "xyz", "type": "Person", "name": "John Smith" "isPatientOf": { "type": "Vaccination", "date": "2022-04-04", "vaccine": { "id": "code#123", "type": "Vaccine" } } } }
  20. N-Quadsの曖昧性 22 _:b0 type VerifiableCredential _:b0 issuer 政府 _:b0 credentialSubject

    xyz xyz type Person xyz name John Smith xyz isPatientOf _:b1 _:b1 type Vaccination _:b1 date 2022-04-04 _:b1 vaccine code#123 { "type": "VerifiableCredential", "issuer": "政府", "proof": { これから作る }, "credentialSubject": { "id": "xyz", "type": "Person", "name": "John Smith" "isPatientOf": { "type": "Vaccination", "date": "2022-04-04", "vaccine": { "id": "code#123", "type": "Vaccine" } } } } xyz type Person xyz name John Smith xyz isPatientOf _:x _:x type Vaccination _:x date 2022-04-04 _:x vaccine code#123 _:y type VerifiableCredential _:y issuer 政府 _:y credentialSubject xyz 空白ノードのラベルの置換 (例 _:b0 → _:x) や 行単位のシャッフルをしても、RDFグラフとしては同型 → 署名時と検証時でこれらを揃える必要がある
  21. (2) N-Quadsデータの曖昧性を排除 (Canonicalization) 23 _:b0 type VerifiableCredential _:b0 issuer 政府

    _:b0 credentialSubject xyz xyz type Person xyz name John Smith xyz isPatientOf _:b1 _:b1 type Vaccination _:b1 date 2022-04-04 _:b1 vaccine code#123 _:c14n0 date 2022-04-04 _:c14n0 type Vaccination _:c14n0 vaccine code#123 _:c14n1 type VerifiableCredential _:c14n1 credentialSubject xyz _:c14n1 issuer 政府 xyz type Person xyz isPatientOf _:c14n1 xyz name John Smith RDF Canonicalization 元の空白ノードのラベルや行の順序によらず 確定的に一意なラベルと順序が得られる
  22. (2) N-Quadsデータの曖昧性を排除 (Canonicalization) 24 _:b0 type VerifiableCredential _:b0 issuer 政府

    _:b0 credentialSubject xyz xyz type Person xyz name John Smith xyz isPatientOf _:b1 _:b1 type Vaccination _:b1 date 2022-04-04 _:b1 vaccine code#123 _:c14n0.c8xd... date 2022-04-04 _:c14n0.c8xd... type Vaccination _:c14n0.c8xd... vaccine code#123 _:c14n1.c8xd... type VerifiableCredential _:c14n1.c8xd... credentialSubject xyz _:c14n1.c8xd... issuer 政府 xyz type Person xyz isPatientOf _:c14n1.c8xd... xyz name John Smith RDF Canonicalization VC全体のハッシュ値を識別子に添えることで、 他のVCと結合された際にも区別できるようにする (悪いHolderによる不正への対策)
  23. (3) CanonicalなN-QuadsデータをTermの配列に分解 25 _:c14n0.c8xd... date 2022-04-04 _:c14n0.c8xd... type Vaccination _:c14n0.c8xd...

    vaccine code#123 _:c14n1.c8xd... type VerifiableCredential _:c14n1.c8xd... credentialSubject xyz _:c14n1.c8xd... issuer 政府 xyz type Person xyz isPatientOf _:c14n1.c8xd... xyz name John Smith _:c14n0.c8xd... date 2022-04-04 Vaccination _:c14n0.c8xd... type John Smith xyz name ... ... ... 1 4 2 5 26 25 3 6 27
  24. (4) 配列内の各Termをハッシュして整数の配列に変換 26 _:c14n0.c8xd... date 2022-04-04 Vaccination _:c14n0.c8xd... type John

    Smith xyz name ... ... ... 1 4 2 5 26 25 3 6 27 9139018... 7975413... 8394757... 4937101... 9139018... 1106247... 5388010... 6580550... 4549787... ... ... ... 1 4 2 5 26 25 3 6 27 Hash to Scalar
  25. (5) 整数の配列をBBS+署名アルゴリズムに入れて署名値を生成 27 9139018... 7975413... 8394757... 4937101... 9139018... 1106247... 5388010...

    6580550... 4549787... ... ... ... 1 4 2 5 26 25 3 6 27 BBS+.sign ← Holderの秘密鍵のハッシュ値を先頭に追加 (秘密鍵がない場合は1) 署名値 { "type": "VerifiableCredential", "issuer": "政府", "proof": { これから作る 署名値 }, "credentialSubject": { "id": "xyz", "type": "Person", "name": "John Smith" "isPatientOf": { "type": "Vaccination", "date": "2022-04-04", "vaccine": { "id": "code#123", "type": "Vaccine" } } } } 4999362... 0 Issuerの秘密鍵
  26. VC検証処理 28 9139018... 7975413... 8394757... 4937101... 9139018... 1106247... 5388010... 6580550...

    4549787... ... ... ... 1 4 2 5 26 25 3 6 27 BBS+.verify ← 秘密鍵を埋め込んだ場合は本人にしか検証できない (Verifierに検証してもらうときは後述するVP化を行う) accept / reject { "type": "VerifiableCredential", "issuer": "政府", "proof": { 署名値 }, "credentialSubject": { "id": "xyz", "type": "Person", "name": "John Smith" "isPatientOf": { "type": "Vaccination", "date": "2022-04-04", "vaccine": { "id": "code#123", "type": "Vaccine" } } } } 1 0 Issuerの公開鍵 (1)~(4)は発行時と同じ
  27. VP提示処理 29 _:b0 credentialSubject xyz xyz name John Smith xyz

    isPatientOf _:b1 _:b1 date 2022-04-04 _:b0 credentialSubject _:x0 _:x0 isPatientOf _:b1 _:b1 date 2022-04-04 Issuerからもらった オリジナルVC Verifierに見てもらいたい姿 (識別子xyzとnameを隠す) Holderの希望する選択的開示をどのように表現すれば良いか? → Verifierに見てもらいたい姿をHolderに書いてもらう { "credentialSubject": { "id": "xyz", "name": "John Smith" "isPatientOf": { "date": "2022-04-04" } } { "credentialSubject": { "id": "_:x0", "isPatientOf": { "date": "2022-04-04" } }
  28. VP提示処理 30 結果が全然違うのでこのままだと検証できない _:b0 credentialSubject xyz xyz name John Smith

    xyz isPatientOf _:b1 _:b1 date 2022-04-04 _:b0 credentialSubject _:x0 _:x0 isPatientOf _:b1 _:b1 date 2022-04-04 _:c14n0.a date 2022-04-04 _:c14n1.a credentialSubject xyz xyz isPatientOf _:c14n0.a xyz name John Smith _:c14n0.x date 2022-04-04 _:c14n1.x isPatientOf _:c14n0.x _:c14n2.x credentialSubject _:c14n1.x Issuerが署名したときのエンコード Verifierが開示されたVCをエンコード canonicalize canonicalize term分解 term分解 _:c14n0.a date 2022-04-04 _:c14n1.a credentia.. xyz xyz isPatientOf _:c14n0.a xyz name John Smith _:c14n0.x date 2022-04-04 _:c14n1.x isPatientOf _:c14n0.x _:c14n2.x credentia.. _:c14n1.x
  29. VP提示処理 31 9139018... 7975413... 8394757... 4937101... 9139018... 1106247... 5388010... 6580550...

    4549787... ... ... ... 1 4 2 5 26 25 3 6 27 BBS+.derive 非対話ゼロ知識証明 4999362... 0 開示するインデックスを指定 [5, 6, ..., 25, 26, 27] 等価性証明したい対象を指定 [ [1,4], ... ] Issuerの公開鍵 もしVerifierがIssuerやHolderと「同じように」 VPを整数の配列にエンコードできれば、 あとはBBS+がよろしくやってくれる
  30. VP提示処理 32 _:b0 credentialSubject xyz xyz name John Smith xyz

    isPatientOf _:b1 _:b1 date 2022-04-04 _:b0 credentialSubject _:x0 _:x0 isPatientOf _:b1 _:b1 date 2022-04-04 _:c14n0.a date 2022-04-04 _:c14n1.a credentialSubject xyz xyz isPatientOf _:c14n0.a xyz name John Smith _:c14n0 date 2022-04-04 _:c14n1 isPatientOf _:c14n0 _:c14n2 credentialSubject _:c14n1 Issuerが署名したときのエンコード Verifierが開示されたVCをエンコード canonicalize canonicalize term分解 term分解 _:c14n0.a date 2022-04-04 _:c14n1.a credentia.. xyz xyz isPatientOf _:c14n0.a xyz name John Smith _:c14n0 date 2022-04-04 _:c14n1 isPatientOf _:c14n0 _:c14n2 credentia.. _:c14n1 方針: 元のレイアウトに復元するための手段 をHolderが用意してあげれば良い
  31. VP提示処理 33 _:b0 credentialSubject xyz xyz name John Smith xyz

    isPatientOf _:b1 _:b1 date 2022-04-04 _:b0 credentialSubject _:x0 _:x0 isPatientOf _:b1 _:b1 date 2022-04-04 _:c14n0.a date 2022-04-04 _:c14n1.a credentialSubject xyz xyz isPatientOf _:c14n0.a xyz name John Smith _:c14n0 date 2022-04-04 _:c14n1 isPatientOf _:c14n0 _:c14n2 credentialSubject _:c14n1 Issuerが署名したときのエンコード HolderがVerifierになったつもりで開示VCをエンコード canonicalize canonicalize
  32. VP提示処理 34 _:b0 credentialSubject xyz xyz name John Smith xyz

    isPatientOf _:b1 _:b1 date 2022-04-04 _:b0 credentialSubject _:x0 _:x0 isPatientOf _:b1 _:b1 date 2022-04-04 _:c14n0.a date 2022-04-04 _:c14n1.a credentialSubject xyz xyz isPatientOf _:c14n0.a xyz name John Smith _:c14n0 date 2022-04-04 _:c14n1 isPatientOf _:c14n0 _:c14n2 credentialSubject _:c14n1 Issuerが署名したときのエンコード canonicalize canonicalize HolderがVerifierになったつもりで開示VCをエンコード Holderによる置換 置換後 置換前 _:x0 xyz
  33. VP提示処理 35 _:b0 credentialSubject xyz xyz name John Smith xyz

    isPatientOf _:b1 _:b1 date 2022-04-04 _:b0 credentialSubject _:x0 _:x0 isPatientOf _:b1 _:b1 date 2022-04-04 _:c14n0.a date 2022-04-04 _:c14n1.a credentialSubject xyz xyz isPatientOf _:c14n0.a xyz name John Smith _:c14n0 date 2022-04-04 _:c14n1 isPatientOf _:c14n0 _:c14n2 credentialSubject _:c14n1 Issuerが署名したときのエンコード canonicalize canonicalize HolderがVerifierになったつもりで開示VCをエンコード Verifierによるc14n c14n後 c14n前 _:c14n0 _:b1 _:c14n1 _:x0 _:c14n2 _:b0 Holderによる置換 置換後 置換前 _:x0 xyz
  34. VP提示処理 36 _:b0 credentialSubject xyz xyz name John Smith xyz

    isPatientOf _:b1 _:b1 date 2022-04-04 _:b0 credentialSubject _:x0 _:x0 isPatientOf _:b1 _:b1 date 2022-04-04 _:c14n0.a date 2022-04-04 _:c14n1.a credentialSubject xyz xyz isPatientOf _:c14n0.a xyz name John Smith _:c14n0 date 2022-04-04 _:c14n1 isPatientOf _:c14n0 _:c14n2 credentialSubject _:c14n1 Issuerが署名したときのエンコード canonicalize canonicalize HolderがVerifierになったつもりで開示VCをエンコード Issuerによるc14n c14n前 c14n後 _:b0 _:c14n1.a _:b1 _:c14n0.a Holderによる置換 置換後 置換前 _:x0 xyz Verifierによるc14n c14n後 c14n前 _:c14n0 _:b1 _:c14n1 _:x0 _:c14n2 _:b0
  35. VP提示処理 37 Holderによる置換 置換後 置換前 _:x0 xyz Verifierによるc14n c14n後 c14n前

    _:c14n0 _:b1 _:c14n1 _:x0 _:c14n2 _:b0 Issuerによるc14n c14n前 c14n後 _:b0 _:c14n1.a _:b1 _:c14n0.a 識別表 from to _:c14n0 _:c14n0.a _:c14n1 xyz _:c14n2 _:c14n1.a 中間表 from to _:x0 xyz _:b0 _:c14n1.a _:b1 _:c14n0.a 中間表 from to _:x0 xyz _:b0 _:c14n1.a _:b1 _:c14n0.a
  36. VP提示処理 38 _:b0 credentialSubject xyz xyz name John Smith xyz

    isPatientOf _:b1 _:b1 date 2022-04-04 _:b0 credentialSubject _:x0 _:x0 isPatientOf _:b1 _:b1 date 2022-04-04 _:c14n0.a date 2022-04-04 _:c14n1.a credentialSubject xyz xyz isPatientOf _:c14n0.a xyz name John Smith _:c14n0 date 2022-04-04 _:c14n1 isPatientOf _:c14n0 _:c14n2 credentialSubject _:c14n1 Issuerが署名したときのエンコード HolderがVerifierになったつもりで開示VCをエンコード canonicalize canonicalize 識別表 from to _:c14n0 _:c14n0.a _:c14n1 xyz _:c14n2 _:c14n1.a
  37. VP提示処理 39 _:b0 credentialSubject xyz xyz name John Smith xyz

    isPatientOf _:b1 _:b1 date 2022-04-04 _:b0 credentialSubject _:x0 _:x0 isPatientOf _:b1 _:b1 date 2022-04-04 _:c14n0.a date 2022-04-04 _:c14n1.a credentialSubject xyz xyz isPatientOf _:c14n0.a xyz name John Smith _:c14n0.a date 2022-04-04 xyz isPatientOf _:c14n0.a _:c14n1.a credentialSubject xyz Issuerが署名したときのエンコード HolderがVerifierになったつもりで開示VCをエンコード canonicalize canonicalize 識別表 from to _:c14n0 _:c14n0.a _:c14n1 xyz _:c14n2 _:c14n1.a
  38. VP提示処理 40 _:b0 credentialSubject xyz xyz name John Smith xyz

    isPatientOf _:b1 _:b1 date 2022-04-04 _:b0 credentialSubject _:x0 _:x0 isPatientOf _:b1 _:b1 date 2022-04-04 _:c14n0.a date 2022-04-04 _:c14n1.a credentialSubject xyz xyz isPatientOf _:c14n0.a xyz name John Smith _:c14n0.a date 2022-04-04 xyz isPatientOf _:c14n0.a _:c14n1.a credentialSubject xyz Issuerが署名したときのエンコード HolderがVerifierになったつもりで開示VCをエンコード canonicalize canonicalize
  39. VP提示処理 41 _:b0 credentialSubject xyz xyz name John Smith xyz

    isPatientOf _:b1 _:b1 date 2022-04-04 _:b0 credentialSubject _:x0 _:x0 isPatientOf _:b1 _:b1 date 2022-04-04 _:c14n0.a date 2022-04-04 _:c14n1.a credentialSubject xyz xyz isPatientOf _:c14n0.a xyz name John Smith _:c14n0.a date 2022-04-04 xyz isPatientOf _:c14n0.a _:c14n1.a credentialSubject xyz Issuerが署名したときのエンコード HolderがVerifierになったつもりで開示VCをエンコード canonicalize canonicalize 復元表 from to 0 0 1 2 2 1 総行数 = 4 これをVerifierに送ってやる
  40. VP提示処理 42 _:b0 credentialSubject xyz xyz name John Smith xyz

    isPatientOf _:b1 _:b1 date 2022-04-04 _:b0 credentialSubject _:x0 _:x0 isPatientOf _:b1 _:b1 date 2022-04-04 _:c14n0.a date 2022-04-04 _:c14n1.a credentialSubject xyz xyz isPatientOf _:c14n0.a xyz name John Smith _:c14n0 date 2022-04-04 _:c14n1 isPatientOf _:c14n0 _:c14n2 credentialSubject _:c14n1 Issuerが署名したときのエンコード Verifierが開示されたVCをエンコード canonicalize canonicalize term分解 _:c14n0.a date 2022-04-04 _:c14n1.a credentia.. xyz xyz isPatientOf _:c14n0.a xyz name John Smith
  41. VP提示処理 43 _:b0 credentialSubject xyz xyz name John Smith xyz

    isPatientOf _:b1 _:b1 date 2022-04-04 _:b0 credentialSubject _:x0 _:x0 isPatientOf _:b1 _:b1 date 2022-04-04 _:c14n0.a date 2022-04-04 _:c14n1.a credentialSubject xyz xyz isPatientOf _:c14n0.a xyz name John Smith _:c14n0 date 2022-04-04 _:c14n1 isPatientOf _:c14n0 _:c14n2 credentialSubject _:c14n1 Issuerが署名したときのエンコード Verifierが開示されたVCをエンコード canonicalize canonicalize term分解 _:c14n0.a date 2022-04-04 _:c14n1.a credentia.. xyz xyz isPatientOf _:c14n0.a xyz name John Smith 復元表 from to 0 0 1 2 2 1 総行数 = 4
  42. VP提示処理 44 _:b0 credentialSubject xyz xyz name John Smith xyz

    isPatientOf _:b1 _:b1 date 2022-04-04 _:b0 credentialSubject _:x0 _:x0 isPatientOf _:b1 _:b1 date 2022-04-04 _:c14n0.a date 2022-04-04 _:c14n1.a credentialSubject xyz xyz isPatientOf _:c14n0.a xyz name John Smith _:c14n0 date 2022-04-04 _:c14n1 isPatientOf _:c14n0 _:c14n2 credentialSubject _:c14n1 Issuerが署名したときのエンコード Verifierが開示されたVCをエンコード canonicalize canonicalize term分解 _:c14n0.a date 2022-04-04 _:c14n1.a credentia.. xyz xyz isPatientOf _:c14n0.a xyz name John Smith 復元表 from to 0 0 1 2 2 1 総行数 = 4 term分解 (復元表使って) _:c14n0 date 2022-04-04 _:c14n2 credentia.. _:c14n1 _:c14n1 isPatientOf _:c14n0
  43. VP提示処理 45 _:b0 credentialSubject xyz xyz name John Smith xyz

    isPatientOf _:b1 _:b1 date 2022-04-04 _:b0 credentialSubject _:x0 _:x0 isPatientOf _:b1 _:b1 date 2022-04-04 _:c14n0.a date 2022-04-04 _:c14n1.a credentialSubject xyz xyz isPatientOf _:c14n0.a xyz name John Smith _:c14n0 date 2022-04-04 _:c14n1 isPatientOf _:c14n0 _:c14n2 credentialSubject _:c14n1 Issuerが署名したときのエンコード Verifierが開示されたVCをエンコード canonicalize canonicalize term分解 _:c14n0.a date 2022-04-04 _:c14n1.a credentia.. xyz xyz isPatientOf _:c14n0.a xyz name John Smith 復元表 from to 0 0 1 2 2 1 総行数 = 4 term分解 (復元表使って) _:c14n0 date 2022-04-04 _:c14n2 credentia.. _:c14n1 _:c14n1 isPatientOf _:c14n0 オリジナルVCのどのtermが開示/非開示されているか特定できた → BBS+を使って検証可能