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

    Data Model (v1.1, March 2022) Holder Verifier Issuer Verifiable Credential (VC) ⚫氏名: John Smith ⚫生年月日: 1980-01-01 ⚫Issuerの署名
  2. 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の署名
  3. 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 (ワクチン接種証明書)
  4. VCの実現方式 8 JWT型のVC 例: SMART Health Cards (ワクチン接種証明書) ✓ シンプルで実装しやすい

    ✓ 多くの実利用が存在  全属性の開示が必要 (SD-JWTなら選択的開示可)  Holderの行動がリンク可能 (署名値がsuper cookieになる) データ形式: JSON 証明形式: JWT 署名方式: RSA, ECDSA, EdDSA, ...
  5. 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.
  6. 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 メタデータ や署名 接種した人 接種情報 接種した ワクチン
  7. 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月以降に当局認可済ワクチンを 接種していたら、その接種日を教えてください
  8. 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月以降に当局認可済ワクチンを 接種していたら、その接種日を教えてください
  9. 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月以降に当局認可済ワクチンを 接種していたら、その接種日を教えてください
  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 = 署名値 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月以降に当局認可済ワクチンを 接種していたら、その接種日を教えてください
  11. 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月以降に当局認可済ワクチンを 接種していたら、その接種日を教えてください
  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] 16 VC1 VC2 vc#2: VerifiableCredential issuer = 提供者; proof = ... cvx#207: Vaccine name = Spikevax manufacturer = Moderna status = 認可済 credentialSubject 政府 検疫所 個人 *** **************** **************** *** *** 𝑋 *** *** 𝑋 *** **************** **************** *** *** 選択的開示 (一部の属性を秘匿) ワクチン 情報 提供者 2022年4月以降に当局認可済ワクチンを 接種していたら、その接種日を教えてください
  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] 17 VC1 VC2 vc#2: VerifiableCredential issuer = 提供者; proof = ... cvx#207: Vaccine name = Spikevax manufacturer = Moderna status = 認可済 credentialSubject 政府 検疫所 個人 *** **************** **************** *** *** 𝑋 *** *** 𝑋 *** **************** **************** *** *** NIZK 選択的開示 (一部の属性を秘匿) リンク不可能 (署名の知識証明) ワクチン 情報 提供者 2022年4月以降に当局認可済ワクチンを 接種していたら、その接種日を教えてください
  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] 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 認可済
  15. 課題: Verifierによる要求の表現 21 Verifier (検疫所) 2022年4月以降に当局認可済ワクチンを接種していたら その接種日を教えてください Holder (個人) 私(匿名)は2022年4月4日に、

    当局認可済ワクチン(匿名)を接種しました 政府 署名値 どのように 表現する? ?: Person ? date > 2022-03-31 isPatientOf vaccine ? status = 認可済 グラフパターン で表現したい [YSS22]で実現
  16. 課題: Verifierによる要求の表現 22 ◼ 既存手法 (DIFのPresentation Exchange, W3CのVerifiable Presentation Request):

    VC単位・ツリー単位のクエリしか表現できず、 上のようなグラフパターンを使った要求が実現できない Verifier (検疫所) 2022年4月以降に当局認可済ワクチンを接種していたら その接種日を教えてください ?: Person ? date > 2022-03-31 isPatientOf vaccine ? status = 認可済 グラフパターン で表現したい
  17. 課題: 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 = 認可済 グラフパターン で表現したい
  18. 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 = 署名値 主語 述語 目的語
  19. 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 クエリ
  20. 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 (ワクチン 仕様書)
  21. 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 (ワクチン 仕様書)
  22. 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データストア
  23. 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データストア
  24. 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データストア
  25. 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データストア
  26. 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データストア
  27. 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データストア
  28. 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データストア
  29. 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データストア
  30. 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データストア
  31. 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データストア
  32. 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データストア
  33. 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データストア
  34. 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データストア
  35. 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データストア
  36. 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データストア
  37. 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データストア
  38. 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 認可済
  39. 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
  40. 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 …
  41. 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による署名生成
  42. 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による署名生成
  43. 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による ゼロ知識証明
  44. 構成の概要 50 Holder Verifier Issuer VC クエリ結果 +VP VC 保存

    SPARQL パース VP 生成 標準的な RDF データストア zk-SPARQL クエリ 拡大 SPARQL クエリ 拡大 ソリューション 各VCを区別 するための ラベル付け クエリの条件を満たす RDFトリプルと それらを含むVCを特定 要求された属性のみ を選択的開示 既存のデータストア を利用可能
  45. プロトタイプ 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
  46. まとめと今後の課題 52 ◼ まとめ ⚫ Linked Data型のVerifiable Credentialsを格納でき、 SPARQL(のサブセット)によるクエリが可能で、 クエリの結果は暗号学的に検証可能であり、

    かつクエリ結果には検証に必要な最小限の情報のみが含まれるような、 パーソナルRDFデータストアの構成案を示した ◼ 今後の課題 ⚫ 安全性の定式化と構成の安全性証明 ⚫ SPARQLの機能制限の解除 ⚫ FILTERのゼロ知識証明 ⚫ FILTER ( ?date > "2022-03-31" ) が成り立つことを date を隠したまま示す (zk-SNARKやBulletproofs等で) ⚫ SPARQL以外の言語対応 (GraphQL, GQL, Cypher, ...) ⚫ RDFデータの検索可能暗号化
  47. 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, プロパティパス, ... は利用不可
  48. 関連研究 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.
  49. 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
  50. @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 <https://zkp-ld.org> jsonld-bbs-signatures (TS) bbs-signatures (TS + Rust) bls12381-key-pair (TS) zkp-ld-playground (React/TS) @mattrglobal fork
  51. 関連実装の詳細 @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