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

zk-SPARQL: SPARQLクエリに対して検証とプライバシ保護が可能な結果を返すパーソナルRDFデータストア

Dan Yamamoto
February 03, 2023

zk-SPARQL: SPARQLクエリに対して検証とプライバシ保護が可能な結果を返すパーソナルRDFデータストア

Presented at SCIS2023 (Symposium on Cryptography and Information Security 2023), Kokura, Japan (in Japanese)
https://www.iwsec.org/scis/2023/

Dan Yamamoto

February 03, 2023
Tweet

More Decks by Dan Yamamoto

Other Decks in Research

Transcript

  1. zk-SPARQL: SPARQLクエリに対して
    検証とプライバシ保護が可能な結果を返す
    パーソナルRDFデータストア
    山本 暖 / 須賀 祐治 (IIJ)
    佐古 和恵 (早稲田大学)
    2023-01-25 @ SCIS2023 (2B1-2)

    View Slide

  2. 概要
    1
    ◼ 以下の特徴をもつ個人用RDFデータストアを構成
    ⚫ Linked Data型のVerifiable Credentialsを格納可能
    ⚫ W3C標準クエリ言語SPARQLを使ったクエリが可能
    ⚫ クエリ結果は検証可能 (BBS+署名)
    ⚫ クエリ結果は検証に必要な情報のみを含む (ゼロ知識証明)

    View Slide

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

    View Slide

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

    View Slide

  5. Verifiable Credentials
    4
    ◼ 暗号学的に安全で、プライバシーを尊重し、機械的な検証が可能な
    デジタルクレデンシャルを表現するための仕組み
    ◼ W3C勧告: Verifiable Credentials Data Model (v1.1, March 2022)
    Holder Verifier
    Issuer
    Verifiable Credential (VC)
    ⚫氏名: John Smith
    ⚫生年月日: 1980-01-01
    ⚫Issuerの署名

    View Slide

  6. Verifiable Credentials
    5
    ◼ 暗号学的に安全で、プライバシーを尊重し、機械的な検証が可能な
    デジタルクレデンシャルを表現するための仕組み
    ◼ W3C勧告: Verifiable Credentials Data Model (v1.1, March 2022)
    Holder Verifier
    Issuer
    Verifiable Credential (VC) Verifiable Presentation (VP)
    ⚫氏名: John Smith
    ⚫生年月日: 1980-01-01
    ⚫Issuerの署名

    View Slide

  7. Verifiable Credentials
    6
    ◼ 暗号学的に安全で、プライバシーを尊重し、機械的な検証が可能な
    デジタルクレデンシャルを表現するための仕組み
    ◼ 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

  8. VCの実現方式
    7
    JWT型のVC
    例: SMART Health Cards
    (ワクチン接種証明書)
    データ形式: JSON
    証明形式: JWT
    署名方式: RSA, ECDSA, EdDSA, ...

    View Slide

  9. VCの実現方式
    8
    JWT型のVC
    例: SMART Health Cards
    (ワクチン接種証明書)
    ✓ シンプルで実装しやすい
    ✓ 多くの実利用が存在
     全属性の開示が必要 (SD-JWTなら選択的開示可)
     Holderの行動がリンク可能
    (署名値がsuper cookieになる)
    データ形式: JSON
    証明形式: JWT
    署名方式: RSA, ECDSA, EdDSA, ...

    View Slide

  10. VCの実現方式
    9
    JWT型のVC
    例: SMART Health Cards
    (ワクチン接種証明書)
    ✓ シンプルで実装しやすい
    ✓ 多くの実利用が存在
     全属性の開示が必要 (SD-JWTなら選択的開示可)
     Holderの行動がリンク可能
    (署名値がsuper cookieになる)
    Linked Data型のVC
    (特に[YSS22])
    データ形式: JSON
    証明形式: JWT
    署名方式: RSA, ECDSA, EdDSA, ...
     比較的複雑
     実利用は少なく、仕様も未完成
    ✓ 属性の選択的開示が可能
    ✓ Holderの行動はリンク不可能
    ✓ VCの結合(グラフ化)が可能
    データ形式: JSON-LD
    証明形式: Data Integrity
    署名方式: BBS+
    {ZK}
    [YSS22] D. Yamamoto, Y. Suga, and K. Sako, “Formalising linked-data based verifiable credentials for selective disclosure,” in 2022 IEEE
    European Symposium on Security and Privacy Workshops (EuroS&PW), 2022, pp. 52–65.

    View Slide

  11. Linked Data型VCの例 [YSS22]
    10
    政府
    検疫所
    xyz: Person
    name = John Smith
    credentialSubject
    e#1 : Vaccination
    date = 2022-04-04
    lotNo = 4444444
    isPatientOf
    cvx#207
    : Vaccine
    vaccine
    vc#1: VerifiableCredential
    issuer = 政府; proof = 署名値
    個人
    VC
    メタデータ
    や署名
    接種した人 接種情報
    接種した
    ワクチン

    View Slide

  12. xyz: Person
    name = John Smith
    credentialSubject
    e#1 : Vaccination
    date = 2022-04-04
    lotNo = 4444444
    isPatientOf
    cvx#207
    : Vaccine
    vaccine
    vc#1: VerifiableCredential
    issuer = 政府; proof = 署名値
    Linked Data型VCの例 [YSS22]
    11
    VC1
    政府
    検疫所
    個人
    2022年4月以降に当局認可済ワクチンを
    接種していたら、その接種日を教えてください

    View Slide

  13. xyz: Person
    name = John Smith
    credentialSubject
    e#1 : Vaccination
    date = 2022-04-04
    lotNo = 4444444
    isPatientOf
    cvx#207
    : Vaccine
    vaccine
    vc#1: VerifiableCredential
    issuer = 政府; proof = 署名値
    Linked Data型VCの例 [YSS22]
    12
    VC1
    政府
    検疫所
    個人
    認可済かどうか
    分からない!
    cvx#207
    2022年4月以降に当局認可済ワクチンを
    接種していたら、その接種日を教えてください

    View Slide

  14. xyz: Person
    name = John Smith
    credentialSubject
    e#1 : Vaccination
    date = 2022-04-04
    lotNo = 4444444
    isPatientOf
    cvx#207
    : Vaccine
    vaccine
    vc#1: VerifiableCredential
    issuer = 政府; proof = 署名値
    Linked Data型VCの例 [YSS22]
    13
    VC1
    VC2
    vc#2: VerifiableCredential
    issuer = 提供者; proof = ...
    cvx#207: Vaccine
    name = Spikevax
    manufacturer = Moderna
    status = 認可済
    credentialSubject
    ワクチン
    情報
    提供者
    ワクチン
    仕様VC
    ダウンロード
    政府
    検疫所
    個人
    認可済かどうか
    分からない!
    cvx#207
    2022年4月以降に当局認可済ワクチンを
    接種していたら、その接種日を教えてください

    View Slide

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

    View Slide

  16. Linked Data として
    結合・グラフ化
    xyz: Person
    name = John Smith
    credentialSubject
    e#1 : Vaccination
    date = 2022-04-04
    lotNo = 4444444
    isPatientOf
    cvx#207
    : Vaccine
    vaccine
    vc#1: VerifiableCredential
    issuer = 政府; proof = 署名値
    Linked Data型VCの例 [YSS22]
    15
    VC1
    VC2
    vc#2: VerifiableCredential
    issuer = 提供者; proof = ...
    cvx#207: Vaccine
    name = Spikevax
    manufacturer = Moderna
    status = 認可済
    credentialSubject
    政府
    検疫所
    個人 ワクチン
    情報
    提供者
    2022年4月以降に当局認可済ワクチンを
    接種していたら、その接種日を教えてください

    View Slide

  17. xyz: Person
    name = John Smith
    credentialSubject
    e#1 : Vaccination
    date = 2022-04-04
    lotNo = 4444444
    isPatientOf
    cvx#207
    : Vaccine
    vaccine
    vc#1: VerifiableCredential
    issuer = 政府; proof = 署名値
    Linked Data型VCの例 [YSS22]
    16
    VC1
    VC2
    vc#2: VerifiableCredential
    issuer = 提供者; proof = ...
    cvx#207: Vaccine
    name = Spikevax
    manufacturer = Moderna
    status = 認可済
    credentialSubject
    政府
    検疫所
    個人
    ***
    **************** ****************
    *** *** 𝑋 ***
    *** 𝑋 ***
    ****************
    ****************
    ***
    ***
    選択的開示
    (一部の属性を秘匿)
    ワクチン
    情報
    提供者
    2022年4月以降に当局認可済ワクチンを
    接種していたら、その接種日を教えてください

    View Slide

  18. xyz: Person
    name = John Smith
    credentialSubject
    e#1 : Vaccination
    date = 2022-04-04
    lotNo = 4444444
    isPatientOf
    cvx#207
    : Vaccine
    vaccine
    vc#1: VerifiableCredential
    issuer = 政府; proof = 署名値
    Linked Data型VCの例 [YSS22]
    17
    VC1
    VC2
    vc#2: VerifiableCredential
    issuer = 提供者; proof = ...
    cvx#207: Vaccine
    name = Spikevax
    manufacturer = Moderna
    status = 認可済
    credentialSubject
    政府
    検疫所
    個人
    ***
    **************** ****************
    *** *** 𝑋 ***
    *** 𝑋 ***
    ****************
    ****************
    ***
    ***
    NIZK
    選択的開示
    (一部の属性を秘匿)
    リンク不可能
    (署名の知識証明)
    ワクチン
    情報
    提供者
    2022年4月以降に当局認可済ワクチンを
    接種していたら、その接種日を教えてください

    View Slide

  19. xyz: Person
    name = John Smith
    credentialSubject
    e#1 : Vaccination
    date = 2022-04-04
    lotNo = 4444444
    isPatientOf
    cvx#207
    : Vaccine
    vaccine
    vc#1: VerifiableCredential
    issuer = 政府; proof = 署名値
    Linked Data型VCの例 [YSS22]
    18
    VC1
    VC2
    vc#2: VerifiableCredential
    issuer = 提供者; proof = ...
    cvx#207: Vaccine
    name = Spikevax
    manufacturer = Moderna
    status = 認可済
    credentialSubject
    政府
    検疫所
    個人
    ***
    **************** ****************
    *** *** 𝑋 ***
    *** 𝑋 ***
    ****************
    ****************
    ***
    ***
    NIZK
    選択的開示
    (一部の属性を秘匿)
    リンク不可能
    (署名の知識証明)
    VP
    ワクチン
    情報
    提供者
    私(匿名)は2022年4月4日に、
    当局認可済ワクチン(匿名)を接種しました
    2022年4月以降に当局認可済ワクチンを
    接種していたら、その接種日を教えてください
    2022-04-04
    認可済

    View Slide

  20. 課題: Verifierによる要求の表現
    19
    Verifier
    (検疫所)
    2022年4月以降に当局認可済ワクチンを接種していたら
    その接種日を教えてください
    Holder
    (個人)
    私(匿名)は2022年4月4日に、
    当局認可済ワクチン(匿名)を接種しました
    政府 署名値
    [YSS22]で実現

    View Slide

  21. 課題: Verifierによる要求の表現
    20
    Verifier
    (検疫所)
    2022年4月以降に当局認可済ワクチンを接種していたら
    その接種日を教えてください
    Holder
    (個人)
    私(匿名)は2022年4月4日に、
    当局認可済ワクチン(匿名)を接種しました
    政府 署名値
    どのように
    表現する?
    [YSS22]で実現

    View Slide

  22. 課題: Verifierによる要求の表現
    21
    Verifier
    (検疫所)
    2022年4月以降に当局認可済ワクチンを接種していたら
    その接種日を教えてください
    Holder
    (個人)
    私(匿名)は2022年4月4日に、
    当局認可済ワクチン(匿名)を接種しました
    政府 署名値
    どのように
    表現する?
    ?: Person ?
    date > 2022-03-31
    isPatientOf vaccine ?
    status = 認可済
    グラフパターン
    で表現したい
    [YSS22]で実現

    View Slide

  23. 課題: Verifierによる要求の表現
    22
    ◼ 既存手法 (DIFのPresentation Exchange, W3CのVerifiable Presentation Request):
    VC単位・ツリー単位のクエリしか表現できず、
    上のようなグラフパターンを使った要求が実現できない
    Verifier
    (検疫所)
    2022年4月以降に当局認可済ワクチンを接種していたら
    その接種日を教えてください
    ?: Person ?
    date > 2022-03-31
    isPatientOf vaccine ?
    status = 認可済
    グラフパターン
    で表現したい

    View Slide

  24. 課題: Verifierによる要求の表現
    23
    ◼ 既存手法 (DIFのPresentation Exchange, W3CのVerifiable Presentation Request):
    VC単位・ツリー単位のクエリしか表現できず、
    上のようなグラフパターンを使った要求が実現できない
    ◼ 提案: RDFグラフに対するクエリ言語 SPARQL (W3C勧告) を使って
    Verifier の要求を表現する
    Verifier
    (検疫所)
    2022年4月以降に当局認可済ワクチンを接種していたら
    その接種日を教えてください
    ?: Person ?
    date > 2022-03-31
    isPatientOf vaccine ?
    status = 認可済
    グラフパターン
    で表現したい

    View Slide

  25. RDF (Resource Description Framework)
    24
    vc#1 a VerifiableCredential
    vc#1 issuer 政府
    vc#1 proof 署名値など
    vc#1 credentialSubject xyz
    xyz a Person
    xyz name John Smith
    xyz isPatientOf e#1
    e#1 date 2022-04-04
    e#1 vaccine cvx#207
    RDFグラフ
    ラベル付き有向グラフを
    3つ組の集合として
    表現したもの
    xyz: Person
    name = John Smith
    credentialSubject
    e#1 : Vaccination
    date = 2022-04-04
    isPatientOf cvx#207: Vaccine
    vaccine
    vc#1: VerifiableCredential
    issuer = 政府; proof = 署名値
    主語 述語 目的語

    View Slide

  26. SPARQL
    25
    Verifier
    2022年4月以降に当局認可済ワクチンを接種していたら
    その接種日を教えてください
    ?: Person ?
    date > 2022-03-31
    isPatientOf vaccine ?
    status = 認可済
    SELECT ?date WHERE { # 以下を満たす ?date を返せ
    ?s a Person . # ?s は人
    ?s isPatientOf ?ev . # ?s は医療行為 ?ev の対象患者
    ?ev date ?date . # ?ev は ?date に実施
    ?ev vaccine ?vac . # ?ev ではワクチン ?vac を使用
    ?vac status 認可済 . # ?vac は認可済
    FILTER ( ?date > "2022-03-31" ) # ?date は2022年3月31日以降
    }
    SPARQL
    クエリ

    View Slide

  27. SPARQL
    26
    SELECT ?date WHERE {
    ?s a Person .
    ?s isPatientOf ?ev .
    ?ev date ?date .
    ?ev vaccine ?vac .
    ?vac status 認可済 .
    FILTER ( ?date > "2022-03-31" )
    }
    vc#1 proof VC1の署名値など
    vc#1 credentialSubject xyz
    xyz a Person
    xyz name John Smith
    xyz isPatientOf e#1
    e#1 date 2022-04-04
    e#1 vaccine cvx#207
    vc#2 proof VC2の署名値など
    vc#2 credentialSubject cvx#207
    cvx#207 name Spikevax
    cvx#207 status 認可済
    ... ... ...
    RDFデータストア
    SPARQLクエリ
    s ev date vac
    SPARQLソリューション
    VC1
    (ワクチン
    接種証明書)
    VC2
    (ワクチン
    仕様書)

    View Slide

  28. SPARQL
    27
    SELECT ?date WHERE {
    ?s a Person .
    ?s isPatientOf ?ev .
    ?ev date ?date .
    ?ev vaccine ?vac .
    ?vac status 認可済 .
    FILTER ( ?date > "2022-03-31" )
    }
    vc#1 proof VC1の署名値など
    vc#1 credentialSubject xyz
    xyz a Person
    xyz name John Smith
    xyz isPatientOf e#1
    e#1 date 2022-04-04
    e#1 vaccine cvx#207
    vc#2 proof VC2の署名値など
    vc#2 credentialSubject cvx#207
    cvx#207 name Spikevax
    cvx#207 status 認可済
    ... ... ...
    RDFデータストア
    SPARQLクエリ
    s ev date vac
    SPARQLソリューション
    VC1
    (ワクチン
    接種証明書)
    VC2
    (ワクチン
    仕様書)

    View Slide

  29. SPARQL
    28
    SELECT ?date WHERE {
    ?s a Person .
    ?s isPatientOf ?ev .
    ?ev date ?date .
    ?ev vaccine ?vac .
    ?vac status 認可済 .
    FILTER ( ?date > "2022-03-31" )
    }
    vc#1 proof VC1の署名値など
    vc#1 credentialSubject xyz
    xyz a Person
    xyz name John Smith
    xyz isPatientOf e#1
    e#1 date 2022-04-04
    e#1 vaccine cvx#207
    vc#2 proof VC2の署名値など
    vc#2 credentialSubject cvx#207
    cvx#207 name Spikevax
    cvx#207 status 認可済
    ... ... ...
    SPARQLクエリ
    s ev date vac
    SPARQLソリューション
    VC1
    (ワクチン
    接種証明書)
    VC2
    (ワクチン
    仕様書)
    RDFデータストア

    View Slide

  30. SPARQL
    29
    SELECT ?date WHERE {
    ?s a Person .
    ?s isPatientOf ?ev .
    ?ev date ?date .
    ?ev vaccine ?vac .
    ?vac status 認可済 .
    FILTER ( ?date > "2022-03-31" )
    }
    vc#1 proof VC1の署名値など
    vc#1 credentialSubject xyz
    xyz a Person
    xyz name John Smith
    xyz isPatientOf e#1
    e#1 date 2022-04-04
    e#1 vaccine cvx#207
    vc#2 proof VC2の署名値など
    vc#2 credentialSubject cvx#207
    cvx#207 name Spikevax
    cvx#207 status 認可済
    ... ... ...
    SPARQLクエリ
    s ev date vac
    xyz
    SPARQLソリューション
    VC1
    (ワクチン
    接種証明書)
    VC2
    (ワクチン
    仕様書)
    RDFデータストア

    View Slide

  31. SPARQL
    30
    SELECT ?date WHERE {
    ?s a Person .
    ?s isPatientOf ?ev .
    ?ev date ?date .
    ?ev vaccine ?vac .
    ?vac status 認可済 .
    FILTER ( ?date > "2022-03-31" )
    }
    vc#1 proof VC1の署名値など
    vc#1 credentialSubject xyz
    xyz a Person
    xyz name John Smith
    xyz isPatientOf e#1
    e#1 date 2022-04-04
    e#1 vaccine cvx#207
    vc#2 proof VC2の署名値など
    vc#2 credentialSubject cvx#207
    cvx#207 name Spikevax
    cvx#207 status 認可済
    ... ... ...
    SPARQLクエリ
    s ev date vac
    xyz
    SPARQLソリューション
    VC1
    (ワクチン
    接種証明書)
    VC2
    (ワクチン
    仕様書)
    RDFデータストア

    View Slide

  32. SPARQL
    31
    SELECT ?date WHERE {
    ?s a Person .
    ?s isPatientOf ?ev .
    ?ev date ?date .
    ?ev vaccine ?vac .
    ?vac status 認可済 .
    FILTER ( ?date > "2022-03-31" )
    }
    vc#1 proof VC1の署名値など
    vc#1 credentialSubject xyz
    xyz a Person
    xyz name John Smith
    xyz isPatientOf e#1
    e#1 date 2022-04-04
    e#1 vaccine cvx#207
    vc#2 proof VC2の署名値など
    vc#2 credentialSubject cvx#207
    cvx#207 name Spikevax
    cvx#207 status 認可済
    ... ... ...
    SPARQLクエリ
    s ev date vac
    xyz
    SPARQLソリューション
    VC1
    (ワクチン
    接種証明書)
    VC2
    (ワクチン
    仕様書)
    RDFデータストア

    View Slide

  33. SPARQL
    32
    SELECT ?date WHERE {
    ?s a Person .
    ?s isPatientOf ?ev .
    ?ev date ?date .
    ?ev vaccine ?vac .
    ?vac status 認可済 .
    FILTER ( ?date > "2022-03-31" )
    }
    vc#1 proof VC1の署名値など
    vc#1 credentialSubject xyz
    xyz a Person
    xyz name John Smith
    xyz isPatientOf e#1
    e#1 date 2022-04-04
    e#1 vaccine cvx#207
    vc#2 proof VC2の署名値など
    vc#2 credentialSubject cvx#207
    cvx#207 name Spikevax
    cvx#207 status 認可済
    ... ... ...
    SPARQLクエリ
    s ev date vac
    xyz e#1
    SPARQLソリューション
    VC1
    (ワクチン
    接種証明書)
    VC2
    (ワクチン
    仕様書)
    RDFデータストア

    View Slide

  34. SPARQL
    33
    SELECT ?date WHERE {
    ?s a Person .
    ?s isPatientOf ?ev .
    ?ev date ?date .
    ?ev vaccine ?vac .
    ?vac status 認可済 .
    FILTER ( ?date > "2022-03-31" )
    }
    vc#1 proof VC1の署名値など
    vc#1 credentialSubject xyz
    xyz a Person
    xyz name John Smith
    xyz isPatientOf e#1
    e#1 date 2022-04-04
    e#1 vaccine cvx#207
    vc#2 proof VC2の署名値など
    vc#2 credentialSubject cvx#207
    cvx#207 name Spikevax
    cvx#207 status 認可済
    ... ... ...
    SPARQLクエリ
    s ev date vac
    xyz e#1 2022-04-04 cvx#207
    SPARQLソリューション
    VC1
    (ワクチン
    接種証明書)
    VC2
    (ワクチン
    仕様書)
    RDFデータストア

    View Slide

  35. SPARQL
    34
    SELECT ?date WHERE {
    ?s a Person .
    ?s isPatientOf ?ev .
    ?ev date ?date .
    ?ev vaccine ?vac .
    ?vac status 認可済 .
    FILTER ( ?date > "2022-03-31" )
    }
    vc#1 proof VC1の署名値など
    vc#1 credentialSubject xyz
    xyz a Person
    xyz name John Smith
    xyz isPatientOf e#1
    e#1 date 2022-04-04
    e#1 vaccine cvx#207
    vc#2 proof VC2の署名値など
    vc#2 credentialSubject cvx#207
    cvx#207 name Spikevax
    cvx#207 status 認可済
    ... ... ...
    SPARQLクエリ
    s ev date vac
    xyz e#1 2022-04-04 cvx#207
    xyz v#1 2022-01-01 cvx#208
    SPARQLソリューション
    VC1
    (ワクチン
    接種証明書)
    VC2
    (ワクチン
    仕様書)
    RDFデータストア

    View Slide

  36. SPARQL
    35
    SELECT ?date WHERE {
    ?s a Person .
    ?s isPatientOf ?ev .
    ?ev date ?date .
    ?ev vaccine ?vac .
    ?vac status 認可済 .
    FILTER ( ?date > "2022-03-31" )
    }
    vc#1 proof VC1の署名値など
    vc#1 credentialSubject xyz
    xyz a Person
    xyz name John Smith
    xyz isPatientOf e#1
    e#1 date 2022-04-04
    e#1 vaccine cvx#207
    vc#2 proof VC2の署名値など
    vc#2 credentialSubject cvx#207
    cvx#207 name Spikevax
    cvx#207 status 認可済
    ... ... ...
    SPARQLクエリ
    s ev date vac
    xyz e#1 2022-04-04 cvx#207
    xyz v#1 2022-01-01 cvx#208
    SPARQLソリューション
    VC1
    (ワクチン
    接種証明書)
    VC2
    (ワクチン
    仕様書)
    RDFデータストア

    View Slide

  37. SPARQL
    36
    SELECT ?date WHERE {
    ?s a Person .
    ?s isPatientOf ?ev .
    ?ev date ?date .
    ?ev vaccine ?vac .
    ?vac status 認可済 .
    FILTER ( ?date > "2022-03-31" )
    }
    vc#1 proof VC1の署名値など
    vc#1 credentialSubject xyz
    xyz a Person
    xyz name John Smith
    xyz isPatientOf e#1
    e#1 date 2022-04-04
    e#1 vaccine cvx#207
    vc#2 proof VC2の署名値など
    vc#2 credentialSubject cvx#207
    cvx#207 name Spikevax
    cvx#207 status 認可済
    ... ... ...
    SPARQLクエリ
    s ev date vac
    xyz e#1 2022-04-04 cvx#207
    xyz v#1 2022-01-01 cvx#208
    SPARQLソリューション
    VC1
    (ワクチン
    接種証明書)
    VC2
    (ワクチン
    仕様書)
    RDFデータストア

    View Slide

  38. SPARQL
    37
    SELECT ?date WHERE {
    ?s a Person .
    ?s isPatientOf ?ev .
    ?ev date ?date .
    ?ev vaccine ?vac .
    ?vac status 認可済 .
    FILTER ( ?date > "2022-03-31" )
    }
    vc#1 proof VC1の署名値など
    vc#1 credentialSubject xyz
    xyz a Person
    xyz name John Smith
    xyz isPatientOf e#1
    e#1 date 2022-04-04
    e#1 vaccine cvx#207
    vc#2 proof VC2の署名値など
    vc#2 credentialSubject cvx#207
    cvx#207 name Spikevax
    cvx#207 status 認可済
    ... ... ...
    SPARQLクエリ
    s ev date vac
    xyz e#1 2022-04-04 cvx#207
    xyz v#1 2022-01-01 cvx#208
    SPARQLソリューション
    VC1
    (ワクチン
    接種証明書)
    VC2
    (ワクチン
    仕様書)
    date
    2022-04-04
    クエリ結果
    RDFデータストア

    View Slide

  39. SPARQL
    38
    SELECT ?date WHERE {
    ?s a Person .
    ?s isPatientOf ?ev .
    ?ev date ?date .
    ?ev vaccine ?vac .
    ?vac status 認可済 .
    FILTER ( ?date > "2022-03-31" )
    }
    vc#1 proof VC1の署名値など
    vc#1 credentialSubject xyz
    xyz a Person
    xyz name John Smith
    xyz isPatientOf e#1
    e#1 date 2022-04-04
    e#1 vaccine cvx#207
    vc#2 proof VC2の署名値など
    vc#2 credentialSubject cvx#207
    cvx#207 name Spikevax
    cvx#207 status 認可済
    ... ... ...
    SPARQLクエリ
    s ev date vac
    xyz e#1 2022-04-04 cvx#207
    xyz v#1 2022-01-01 cvx#208
    SPARQLソリューション
    VC1
    (ワクチン
    接種証明書)
    VC2
    (ワクチン
    仕様書)
    date
    2022-04-04
    クエリ結果
    検証できない
    RDFデータストア

    View Slide

  40. SPARQL
    39
    SELECT ?date WHERE {
    ?s a Person .
    ?s isPatientOf ?ev .
    ?ev date ?date .
    ?ev vaccine ?vac .
    ?vac status 認可済 .
    FILTER ( ?date > "2022-03-31" )
    }
    vc#1 proof VC1の署名値など
    vc#1 credentialSubject xyz
    xyz a Person
    xyz name John Smith
    xyz isPatientOf e#1
    e#1 date 2022-04-04
    e#1 vaccine cvx#207
    vc#2 proof VC2の署名値など
    vc#2 credentialSubject cvx#207
    cvx#207 name Spikevax
    cvx#207 status 認可済
    ... ... ...
    SPARQLクエリ
    s ev date vac
    xyz e#1 2022-04-04 cvx#207
    xyz v#1 2022-01-01 cvx#208
    SPARQLソリューション
    VC1
    (ワクチン
    接種証明書)
    VC2
    (ワクチン
    仕様書)
    クエリ結果
    + 署名
    date vc
    2022-04-04 VC1,2
    RDFデータストア

    View Slide

  41. SPARQL
    40
    SELECT ?date WHERE {
    ?s a Person .
    ?s isPatientOf ?ev .
    ?ev date ?date .
    ?ev vaccine ?vac .
    ?vac status 認可済 .
    FILTER ( ?date > "2022-03-31" )
    }
    vc#1 proof VC1の署名値など
    vc#1 credentialSubject xyz
    xyz a Person
    xyz name John Smith
    xyz isPatientOf e#1
    e#1 date 2022-04-04
    e#1 vaccine cvx#207
    vc#2 proof VC2の署名値など
    vc#2 credentialSubject cvx#207
    cvx#207 name Spikevax
    cvx#207 status 認可済
    ... ... ...
    SPARQLクエリ
    s ev date vac
    xyz e#1 2022-04-04 cvx#207
    xyz v#1 2022-01-01 cvx#208
    SPARQLソリューション
    VC1
    (ワクチン
    接種証明書)
    VC2
    (ワクチン
    仕様書)
    クエリ結果
    + 署名
    date vc
    2022-04-04 VC1,2
    検証できるが
    全属性が開示
    されてしまう
    RDFデータストア

    View Slide

  42. zk-SPARQL
    41
    SELECT ?date WHERE {
    ?s a Person .
    ?s isPatientOf ?ev .
    ?ev date ?date .
    ?ev vaccine ?vac .
    ?vac status 認可済 .
    FILTER ( ?date > "2022-03-31" )
    }
    vc#1 proof VC1の署名値など
    vc#1 credentialSubject xyz
    xyz a Person
    xyz name John Smith
    xyz isPatientOf e#1
    e#1 date 2022-04-04
    e#1 vaccine cvx#207
    vc#2 proof VC2の署名値など
    vc#2 credentialSubject cvx#207
    cvx#207 name Spikevax
    cvx#207 status 認可済
    ... ... ...
    SPARQLクエリ
    s ev date vac
    xyz e#1 2022-04-04 cvx#207
    xyz v#1 2022-01-01 cvx#208
    SPARQLソリューション
    VC1
    (ワクチン
    接種証明書)
    VC2
    (ワクチン
    仕様書)
    クエリ結果
    date vp
    2022-04-04 VP
    選択的開示、
    ゼロ知識証明
    ([YSS22]同様)
    RDFデータストア

    View Slide

  43. zk-SPARQL
    42
    SELECT ?date WHERE {
    ?s a Person .
    ?s isPatientOf ?ev .
    ?ev date ?date .
    ?ev vaccine ?vac .
    ?vac status 認可済 .
    FILTER ( ?date > "2022-03-31" )
    }
    vc#1 proof VC1の署名値など
    vc#1 credentialSubject xyz
    xyz a Person
    xyz name John Smith
    xyz isPatientOf e#1
    e#1 date 2022-04-04
    e#1 vaccine cvx#207
    vc#2 proof VC2の署名値など
    vc#2 credentialSubject cvx#207
    cvx#207 name Spikevax
    cvx#207 status 認可済
    ... ... ...
    SPARQLクエリ
    s ev date vac
    xyz e#1 2022-04-04 cvx#207
    xyz v#1 2022-01-01 cvx#208
    SPARQLソリューション
    提示すべきVCと
    開示すべき属性
    を特定
    クエリ結果
    date vp
    2022-04-04 VP
    RDFデータストア

    View Slide

  44. zk-SPARQL
    43
    SELECT ?date WHERE {
    ?s a Person .
    ?s isPatientOf ?ev .
    ?ev date ?date .
    ?ev vaccine ?vac .
    ?vac status 認可済 .
    FILTER ( ?date > "2022-03-31" )
    }
    vc#1 proof VC1の署名値など
    vc#1 credentialSubject xyz
    xyz a Person
    xyz name John Smith
    xyz isPatientOf e#1
    e#1 date 2022-04-04
    e#1 vaccine cvx#207
    vc#2 proof VC2の署名値など
    vc#2 credentialSubject cvx#207
    cvx#207 name Spikevax
    cvx#207 status 認可済
    ... ... ...
    SPARQLクエリ
    s ev date vac
    xyz e#1 2022-04-04 cvx#207
    xyz v#1 2022-01-01 cvx#208
    SPARQLソリューション
    提示すべきVCと
    開示すべき属性
    を特定
    クエリ結果
    date vp
    2022-04-04 VP
    RDFデータストア

    View Slide

  45. zk-SPARQL
    44
    SELECT ?date WHERE {
    ?s a Person .
    ?s isPatientOf ?ev .
    ?ev date ?date .
    ?ev vaccine ?vac .
    ?vac status 認可済 .
    FILTER ( ?date > "2022-03-31" )
    }
    vc#1 proof VC1の署名値など
    vc#1 credentialSubject xyz
    xyz a Person
    xyz name John Smith
    xyz isPatientOf e#1
    e#1 date 2022-04-04
    e#1 vaccine cvx#207
    vc#2 proof VC2の署名値など
    vc#2 credentialSubject cvx#207
    cvx#207 name Spikevax
    cvx#207 status 認可済
    ... ... ...
    SPARQLクエリ
    s ev date vac
    xyz e#1 2022-04-04 cvx#207
    xyz v#1 2022-01-01 cvx#208
    SPARQLソリューション
    提示すべきVCと
    開示すべき属性
    を特定
    クエリ結果
    date vp
    2022-04-04 VP
    作りたいVP
    RDFデータストア
    X_1 proof VC1の署名値など
    X_1 credentialSubject X_2
    X_2 a Person
    --- --- ---
    X_2 isPatientOf X_3
    X_3 date 2022-04-04
    X_3 vaccine X_4
    X_5 proof VC2の署名値など
    X_5 credentialSubject X_4
    --- --- ---
    X_4 status 認可済

    View Slide

  46. zk-SPARQL
    45
    vc#1 proof VC1の署名値 𝜎1
    vc#1 credentialSubject xyz
    xyz a Person
    xyz name John Smith
    xyz isPatientOf e#1
    e#1 date 2022-04-04
    e#1 vaccine cvx#207
    vc#2 proof VC2の署名値 𝜎2
    vc#2 credentialSubject cvx#207
    cvx#207 name Spikevax
    cvx#207 status 認可済
    ... ... ...
    Issuerによって発行されたVC
    X_1 proof NIZK 𝜋1
    X_1 credentialSubject X_2
    X_2 a Person
    --- --- ---
    X_2 isPatientOf X_3
    X_3 date 2022-04-04
    X_3 vaccine X_4
    X_5 proof NIZK 𝜋2
    X_5 credentialSubject X_4
    --- --- ---
    X_4 status 認可済
    Verifierに返したいVP

    View Slide

  47. zk-SPARQL
    46
    vc#1 proof VC1の署名値 𝜎1
    vc#1 credentialSubject xyz
    xyz a Person
    xyz name John Smith
    xyz isPatientOf e#1
    e#1 date 2022-04-04
    e#1 vaccine cvx#207
    vc#2 proof VC2の署名値 𝜎2
    vc#2 credentialSubject cvx#207
    cvx#207 name Spikevax
    cvx#207 status 認可済
    ... ... ...
    Issuerによって発行されたVC
    X_1 proof NIZK 𝜋1
    X_1 credentialSubject X_2
    X_2 a Person
    --- --- ---
    X_2 isPatientOf X_3
    X_3 date 2022-04-04
    X_3 vaccine X_4
    X_5 proof NIZK 𝜋2
    X_5 credentialSubject X_4
    --- --- ---
    X_4 status 認可済
    Verifierに返したいVP
    𝑚1,1 𝑚1,2
    𝑚1,3
    𝑚1,4 𝑚1,5
    𝑚1,6

    View Slide

  48. zk-SPARQL
    47
    vc#1 proof VC1の署名値 𝜎1
    vc#1 credentialSubject xyz
    xyz a Person
    xyz name John Smith
    xyz isPatientOf e#1
    e#1 date 2022-04-04
    e#1 vaccine cvx#207
    vc#2 proof VC2の署名値 𝜎2
    vc#2 credentialSubject cvx#207
    cvx#207 name Spikevax
    cvx#207 status 認可済
    ... ... ...
    Issuerによって発行されたVC
    X_1 proof NIZK 𝜋1
    X_1 credentialSubject X_2
    X_2 a Person
    --- --- ---
    X_2 isPatientOf X_3
    X_3 date 2022-04-04
    X_3 vaccine X_4
    X_5 proof NIZK 𝜋2
    X_5 credentialSubject X_4
    --- --- ---
    X_4 status 認可済
    Verifierに返したいVP
    𝜎1
    ← BBS. sign 𝑠𝑘1
    , 𝑚1,𝑖 𝑖
    𝑚1,1 𝑚1,2
    𝑚1,3
    𝑚1,4 𝑚1,5
    𝑚1,6

    Issuerによる署名生成

    View Slide

  49. zk-SPARQL
    48
    vc#1 proof VC1の署名値 𝜎1
    vc#1 credentialSubject xyz
    xyz a Person
    xyz name John Smith
    xyz isPatientOf e#1
    e#1 date 2022-04-04
    e#1 vaccine cvx#207
    vc#2 proof VC2の署名値 𝜎2
    vc#2 credentialSubject cvx#207
    cvx#207 name Spikevax
    cvx#207 status 認可済
    ... ... ...
    Issuerによって発行されたVC
    X_1 proof NIZK 𝜋1
    X_1 credentialSubject X_2
    X_2 a Person
    --- --- ---
    X_2 isPatientOf X_3
    X_3 date 2022-04-04
    X_3 vaccine X_4
    X_5 proof NIZK 𝜋2
    X_5 credentialSubject X_4
    --- --- ---
    X_4 status 認可済
    Verifierに返したいVP
    𝜎1
    ← BBS. sign 𝑠𝑘1
    , 𝑚1,𝑖 𝑖
    𝑚1,1 𝑚1,2
    𝑚1,3
    𝑚1,4 𝑚1,5
    𝑚1,6
    𝑚2,1
    𝑚2,2 𝑚2,3
    𝑚2,4
    𝜎2
    ← BBS. sign 𝑠𝑘2
    , 𝑚2,𝑖 𝑖
    𝑚2,5
    𝑚2,6


    Issuerによる署名生成

    View Slide

  50. zk-SPARQL
    49
    vc#1 proof VC1の署名値 𝜎1
    vc#1 credentialSubject xyz
    xyz a Person
    xyz name John Smith
    xyz isPatientOf e#1
    e#1 date 2022-04-04
    e#1 vaccine cvx#207
    vc#2 proof VC2の署名値 𝜎2
    vc#2 credentialSubject cvx#207
    cvx#207 name Spikevax
    cvx#207 status 認可済
    ... ... ...
    Issuerによって発行されたVC
    X_1 proof NIZK 𝜋1
    X_1 credentialSubject X_2
    X_2 a Person
    --- --- ---
    X_2 isPatientOf X_3
    X_3 date 2022-04-04
    X_3 vaccine X_4
    X_5 proof NIZK 𝜋2
    X_5 credentialSubject X_4
    --- --- ---
    X_4 status 認可済
    Verifierに返したいVP
    𝜎1
    ← BBS. sign 𝑠𝑘1
    , 𝑚1,𝑖 𝑖 𝜋 ← NIZK
    𝑚1,𝑖 𝑖∉𝑅1
    , 𝑚2,𝑖 𝑖∉𝑅2
    , 𝜎1
    , 𝜎2
    :
    BBS. verify 𝑝𝑘1
    , 𝑚1,𝑖 𝑖
    , 𝜎1

    BBS. verify 𝑝𝑘2
    , 𝑚2,𝑖 𝑖
    , 𝜎2
    𝑚1,1 𝑚1,2
    𝑚1,3
    𝑚1,4 𝑚1,5
    𝑚1,6
    𝑚2,1
    𝑚2,2 𝑚2,3
    𝑚2,4
    𝜎2
    ← BBS. sign 𝑠𝑘2
    , 𝑚2,𝑖 𝑖
    𝑚2,5
    𝑚2,6


    Issuerによる署名生成 Holderによる
    ゼロ知識証明

    View Slide

  51. 構成の概要
    50
    Holder
    Verifier
    Issuer
    VC
    クエリ結果
    +VP
    VC
    保存
    SPARQL
    パース
    VP
    生成
    標準的な
    RDF
    データストア
    zk-SPARQL
    クエリ
    拡大
    SPARQL
    クエリ
    拡大
    ソリューション
    各VCを区別
    するための
    ラベル付け
    クエリの条件を満たす
    RDFトリプルと
    それらを含むVCを特定
    要求された属性のみ
    を選択的開示
    既存のデータストア
    を利用可能

    View Slide

  52. プロトタイプ
    51
    { "type": "VerifiablePresentation",
    "verifiableCredential": [ {
    "id": ".../vc#1",
    "type": "VerifiableCredential",
    "issuer": "did:example:issuer1",
    "credentialSubject": {
    "id": "anoni:RyMyF0",
    "type": "Person",
    "isPatientOf": {
    "id": "anoni:2wtQku",
    "vaccinationDate": {
    "@value": "2022-04-04T00:00:00Z"
    },
    "vaccine": { "id": "anoni:5kKKS7" }
    }
    }
    }, {
    "id": ".../vc#2",
    "type": "VerifiableCredential",
    "issuer": "did:example:issuer2",
    "credentialSubject": {
    "id": "anoni:5kKKS7",
    "status": "active" }}]}
    クエリ
    回答 VP
    https://github.com/
    zkp-ld/veanpods

    View Slide

  53. まとめと今後の課題
    52
    ◼ まとめ
    ⚫ Linked Data型のVerifiable Credentialsを格納でき、
    SPARQL(のサブセット)によるクエリが可能で、
    クエリの結果は暗号学的に検証可能であり、
    かつクエリ結果には検証に必要な最小限の情報のみが含まれるような、
    パーソナルRDFデータストアの構成案を示した
    ◼ 今後の課題
    ⚫ 安全性の定式化と構成の安全性証明
    ⚫ SPARQLの機能制限の解除
    ⚫ FILTERのゼロ知識証明
    ⚫ FILTER ( ?date > "2022-03-31" )
    が成り立つことを date を隠したまま示す (zk-SNARKやBulletproofs等で)
    ⚫ SPARQL以外の言語対応 (GraphQL, GQL, Cypher, ...)
    ⚫ RDFデータの検索可能暗号化

    View Slide

  54. Appendix

    View Slide

  55. zk-SPARQLとSPARQL
    54
    ◼ zk-SPARQL = W3C SPARQL仕様に対して拡張と制限を加えたもの
    ◼ 拡張: クエリ結果にVerifiable Presentationを追加
    ⚫SPARQL 1.1 Query Results JSON Format仕様のVariable Binding
    Resultsを拡張し、Verifiable Presentationを格納するための特別な変数
    `vp` を追加
    ⚫同仕様のBoolean Resultsを拡張し、ASKクエリの結果にVerifiable
    Presentationを格納するための`vp`を追加
    ◼ 制限: SPARQLに対して以下の制限を課している (現状)
    ⚫クエリ形式はSELECT, ASKのみ
    ⚫複数のグラフ・パターンは使えない
    ⚫FILTERが含む変数はすべてSELECT句で開示対象となっていること
    ⚫OPTIONAL, UNION, NOT EXISTS, MINUS, プロパティパス, ... は利用不可

    View Slide

  56. 関連研究
    55
    ◼ IntegriDB[ZKP15], vSQL[ZGK+17], OutsourcedSPARQL[M19]
    ⚫リレーショナルデータベースに対するSQLクエリ結果、RDFストアに対する
    SPARQLクエリ結果を検証可能にする
    ⚫目的はデータベース処理のアウトソース (クエリ実行者≒データ所有者)
    ⚫クエリ実行者(Verifier)に対してデータを秘匿・最小化する動機がない
    ◼ Solid[SMH+16], SolidVC[E19]
    ⚫SPARQLでクエリ可能なLinked Data / VCのデータベース
    ⚫選択的開示機能やリンク不可能性は考慮されていない
    [ZKP15] Y. Zhang, J. Katz, and C. Papamanthou, “Integridb: Verifiable sql for outsourced databases,” in Proceedings of the 22nd ACM SIGSAC Conference on Computer and
    Communications Security, ser. CCS ’15. New York, NY, USA: Association for Computing Machinery, 2015, p. 1480–1491.
    [ZGK+17] Y. Zhang, D. Genkin, J. Katz, D. Papadopoulos, and C. Papamanthou, “vSQL: Verifying arbitrary SQL queries over dynamic outsourced databases,” in 2017 IEEE
    Symposium on Security and Privacy. IEEE Computer Society Press, May 2017, pp. 863–880.
    [M19] S. Morel, “Computational integrity for outsourced execution of sparql queries,” Master’s thesis, Ghent University, 2019.
    [SMH+16] A. V. Sambra, E. Mansour, S. Hawke, M. Zereba, N. Greco, A. Ghanem, D. Zagidulin, A. Aboulnaga, and T. Berners-Lee, “Solid: a platform for decentralized social
    applications based on linked data,” MIT CSAIL & Qatar Computing Research Institute, Tech. Rep., 2016.
    [E19] K. Y. Ezike, “SolidVC: a decentralized framework for verifiable credentials on the web,” Master’s thesis, Massachusetts Institute of Technology, 2019.

    View Slide

  57. Structure
    56
    RDF store
    zk-SPARQL
    processor
    SPARQL UI
    for owner
    BBS+ signatures
    for RDF
    bulletproofs,
    zk-SNARKs, ...
    secure storage
    SPARQL UI
    for consumer
    store-binding
    consumer
    authorization
    = YASGUI
    use
    SPARQL.js
    use
    quadstore
    based on
    jsonld-signatures-bbs
    Data Consumer Data Source
    Veanpods
    owner

    View Slide

  58. @zkp-ld
    関連実装
    57
    ◼ @zkp-ld/jsonld-signatures-bbs
    ◼ @zkp-ld/bls12381-key-pair
    ◼ @zkp-ld/bbs-signatures
    Implementations (published on Github and npm)
    ◼ a playground for developers
    ◼ you can sign & verify LD-based credential
    and show & verify presentations on browser
    ◼ with Selective Disclosure, Unlinkability,
    and (partially implemented) Range Proof
    ZKP-LD Playground
    jsonld-bbs-signatures (TS)
    bbs-signatures (TS + Rust) bls12381-key-pair (TS)
    zkp-ld-playground (React/TS)
    @mattrglobal
    fork

    View Slide

  59. 関連実装の詳細
    @zkp-ld
    jsonld-bbs-signatures
    (TS)
    bbs-signatures
    (TS + Rust)
    bbs
    (Rust)
    bls12381-key-pair
    (TS)
    zkp-ld-playground
    (React/TS)
    @mattrglobal
    fork
    bulletproofs_amcl
    (Rust)
    MIRACL (旧 Apache Milagro
    Cryptographic Library)
    (Rust, C++)
    Hyperledger
    ursa
    fork
    pairing-plus (algorand)
    (Rust)
    (different implementations for the same BLS12-381 curve)
    Application
    BBS+ frontend
    BBS+ backend
    + Bulletproofs
    Pairing-Friendly
    Curves
    58

    View Slide