$30 off During Our Annual Pro Sale. View Details »

複数の証明書を選択的に連結・開示できる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. 複数の証明書を選択的に連結・開示できる
    JSON-LD型Verifiable Credentials
    の改良版
    山本 暖 (IIJ)
    2023-09-29 @ DIF Japan SIG Monthly Meeting

    View Slide

  2. 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 (ワクチン接種証明書)

    View Slide

  3. 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)

    View Slide

  4. ユースケース例
    3
    Issuer
    政府
    Verifier
    検疫所
    Holder
    個人

    View Slide

  5. ユースケース例
    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
    個人

    View Slide

  6. 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

    View Slide

  7. 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

    View Slide

  8. 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

    View Slide

  9. 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

    View Slide

  10. 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

    View Slide

  11. 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

    View Slide

  12. 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

    View Slide

  13. 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

    View Slide

  14. 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

    View Slide

  15. 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

    View Slide

  16. 実装
    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の提示と検証

    View Slide

  17. zkp-ld-playground を使ったデモ
    16
    1. ワクチン接種証明書VCとワクチン仕様VCを同時に提示
    (秘密鍵を使わないシンプルなデモ)
    2. ワクチン接種証明書VCにHolderの秘密を埋込
    (PoP: 所有権証明のデモ)
    3. 埋め込んだ秘密と提示先(Verifier)の識別子から仮名を生成
    (PPIDのデモ)
    4. 提示したVPから、同じHolder(の秘密)にバインドした新たなVCを発行
    (ブラインド署名を応用したデモ)
    https://playground.zkp-ld.org/

    View Slide

  18. まとめ
    17
    ◼ 複数の証明書を連結し、選択的に開示でき、IssuerやVerifierに
    よるリンクが困難なVerifiable Credentialsを実装した
    ◼ Holderの秘密鍵をブラインド署名でVC内に埋め込むことで
    所有証明(PoP)を可能にした
    ◼ 埋め込まれた秘密鍵とVerifierの識別子から一意の仮名(PPID)
    を作成することで、Verifierを跨がるリンクは防ぎつつ、Verifierサ
    イト内でHolderの同一性を特定可能にした
    ◼ 実装の多くを一から作り直した
    ◼ 今後の課題
    ⚫ 述語証明機能、プロパティ秘匿機能、失効確認機能、Issuer秘匿機能
    ⚫ 厳密な安全性証明

    View Slide

  19. 付録

    View Slide

  20. VC発行処理
    19
    1. JSON-LD形式のVCをRDF N-Quadsデータに変換
    2. N-Quadsデータの曖昧性を排除 (Canonicalization)
    3. CanonicalなN-QuadsデータをTermの配列に分解
    4. 配列内の各Termをハッシュして整数の配列に変換
    5. 整数の配列をBBS+署名アルゴリズムに入れて署名値を生成

    View Slide

  21. (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 = 署名値

    View Slide

  22. (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"
    }
    }
    }
    }

    View Slide

  23. 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グラフとしては同型
    → 署名時と検証時でこれらを揃える必要がある

    View Slide

  24. (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
    元の空白ノードのラベルや行の順序によらず
    確定的に一意なラベルと順序が得られる

    View Slide

  25. (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による不正への対策)

    View Slide

  26. (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

    View Slide

  27. (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

    View Slide

  28. (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の秘密鍵

    View Slide

  29. 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)は発行時と同じ

    View Slide

  30. 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"
    }
    }

    View Slide

  31. 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

    View Slide

  32. 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+がよろしくやってくれる

    View Slide

  33. 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が用意してあげれば良い

    View Slide

  34. 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

    View Slide

  35. 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

    View Slide

  36. 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

    View Slide

  37. 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

    View Slide

  38. 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

    View Slide

  39. 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

    View Slide

  40. 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

    View Slide

  41. 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

    View Slide

  42. 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に送ってやる

    View Slide

  43. 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

    View Slide

  44. 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

    View Slide

  45. 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

    View Slide

  46. 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+を使って検証可能

    View Slide