Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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の署名

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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.

Slide 11

Slide 11 text

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 メタデータ や署名 接種した人 接種情報 接種した ワクチン

Slide 12

Slide 12 text

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月以降に当局認可済ワクチンを 接種していたら、その接種日を教えてください

Slide 13

Slide 13 text

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月以降に当局認可済ワクチンを 接種していたら、その接種日を教えてください

Slide 14

Slide 14 text

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月以降に当局認可済ワクチンを 接種していたら、その接種日を教えてください

Slide 15

Slide 15 text

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月以降に当局認可済ワクチンを 接種していたら、その接種日を教えてください

Slide 16

Slide 16 text

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月以降に当局認可済ワクチンを 接種していたら、その接種日を教えてください

Slide 17

Slide 17 text

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月以降に当局認可済ワクチンを 接種していたら、その接種日を教えてください

Slide 18

Slide 18 text

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月以降に当局認可済ワクチンを 接種していたら、その接種日を教えてください

Slide 19

Slide 19 text

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 認可済

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

課題: 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 = 認可済 グラフパターン で表現したい

Slide 25

Slide 25 text

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 = 署名値 主語 述語 目的語

Slide 26

Slide 26 text

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 クエリ

Slide 27

Slide 27 text

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 (ワクチン 仕様書)

Slide 28

Slide 28 text

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 (ワクチン 仕様書)

Slide 29

Slide 29 text

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データストア

Slide 30

Slide 30 text

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データストア

Slide 31

Slide 31 text

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データストア

Slide 32

Slide 32 text

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データストア

Slide 33

Slide 33 text

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データストア

Slide 34

Slide 34 text

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データストア

Slide 35

Slide 35 text

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データストア

Slide 36

Slide 36 text

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データストア

Slide 37

Slide 37 text

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データストア

Slide 38

Slide 38 text

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データストア

Slide 39

Slide 39 text

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データストア

Slide 40

Slide 40 text

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データストア

Slide 41

Slide 41 text

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データストア

Slide 42

Slide 42 text

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データストア

Slide 43

Slide 43 text

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データストア

Slide 44

Slide 44 text

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データストア

Slide 45

Slide 45 text

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 認可済

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

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 …

Slide 48

Slide 48 text

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による署名生成

Slide 49

Slide 49 text

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による署名生成

Slide 50

Slide 50 text

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による ゼロ知識証明

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

プロトタイプ 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

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

Appendix

Slide 55

Slide 55 text

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, プロパティパス, ... は利用不可

Slide 56

Slide 56 text

関連研究 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.

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

@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

Slide 59

Slide 59 text

関連実装の詳細 @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