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

SD-JWTによる選択的開示

 SD-JWTによる選択的開示

DIF Japan Monthly Callにて、「SD-JWTによる選択的開示」を発表しました。

Avatar for 安酸円秀

安酸円秀

April 12, 2023
Tweet

Other Decks in Technology

Transcript

  1. 安酸 円秀 - やすかた かずひで (@kazuhideYS) - ソフトバンク株式会社 所属 テクノロジーユニット

    ビジネスシステム開発本部 デジタルID戦略部 - 次世代ID技術を先行で色々試す係 - 2年ほどDID/VCのPoC開発に従事
  2. • 分散型ID技術のフィージビリティ調査(2021〜) • 試験用DID/VC Walletを内製開発、各種仕様の先行実装 我々の活動について DID/VC Wallet (Mobile App)

    VC Verifier (Web service) VC Issuer (Web service) DID mgmt. Microsoft ION VC発行 VC mgmt. DIDComm Mediator Presentation Exchange SD-JWT OIDC Credential Provider SIOPv2/ OIDC4VP DIDComm VP提示
  3. 本日の話 SD-JWTによるVC選択的開示のデモ&技術的説明 今日の話 DID/VC Wallet (Mobile App) VC Verifier (Web

    service) VC Issuer (Web service) DID mgmt. Microsoft ION VC発行 VC mgmt. DIDComm Mediator Presentation Exchange SD-JWT OIDC Credential Provider SIOPv2/ OIDC4VP DIDComm VP提示
  4. デモシナリオ 物理店舗(=Issuer) 返金用ページ (=Verifier) 購入者(=Holder) VC Wallet 返金リクエスト 購入時のレシートを要求 レシートの選択的開示

    OK/NG 物品購入時、 レシートVCを SD-JWT形式で渡す 店舗で購入したものをオンラインで返金手続きする際のレシート提示 デモシナリオ 検証
  5. デモシナリオ 選択的開示を実現する各種標準仕様 技術スタック DID/VC Wallet (Mobile App) VC Verifier (Web

    service) VC Issuer (Web service) DID mgmt. Microsoft ION VC発行 VC mgmt. DIDComm Mediator Presentation Exchange SD-JWT OIDC Credential Provider SIOPv2/ OIDC4VP DIDComm VP提示
  6. 例:レシートVC (発行時の形式) <header>.<Hashed Payload>.<signature>.<IssuerDisclosures> Payload内の各値をHash化 実際の値+Salt値を Disclosuresとして添付 { “vc”: {

    “issuer”: <Hash01>, …, “credentialSubject”: [{ “id”: <Hash02>, …, “items”: [ { “name”: <Hash03>, “amount”: <Hash04>, …, }, { “name”: <Hash05>, “amount”: <Hash06>, …, }, …, ] }] } } { “sd_ii_disclosures”: { “vc”: { “issuer”: “{“s”: <salt>, “v”: “did:example:shop”}”, …, “credentialSubject”: [{ “id”: “{“s”: <salt>, “v”: “did:example:buyer”}”, …, “items”: [ { “name”: “{“s”: <salt>, “v”: “Cake”}, “amount”: “{“s”: <salt>, “v”: 1}”, …, }, { “name”: “{“s”: <salt>, “v”: “Beer”}, “amount”: “{“s”: <salt>, “v”: 1}”, …, }, …, ] }] } } } Issuer Holder Verifier ※Draft01 現在は構造が変 わっている
  7. 例:レシートVC (開示時の形式) <header>.<Hashed Payload>.<signature> .<HolderHeader>.<HolderDisclosures>.<HolderSignature> Issuerから受け取った Disclosuresのうち、 Verifierに開示したいものだけ を選んで提示 全体にHolderの署名を付与

    { “vc”: { “issuer”: <Hash>, …, “credentialSubject”: [{ “id”: <Hash>, …, “items”: [ { “name”: <Hash>, “amount”: <Hash>, …, }, { “name”: <Hash>, “amount”: <Hash>, …, }, …, ] }] } } { “sd_hs_disclosures”: { “vc”: { “issuer”: “{“s”: <salt>, “v”: “did:example:shop”}”, …, “credentialSubject”: [{ “id”: “{“s”: <salt>, “v”: “did:example:buyer”}”, …, “items”: [ { “name”: “{“s”: <salt>, “v”: “Cake”}, “amount”: “{“s”: <salt>, “v”: 1}”, …, }, …, ] }] } } } Issuer Holder Verifier 見せたい値だけ 含める ※Draft01 現在は構造が変 わっている Holderの署名 (本人性確認)
  8. SD-JWTの検証 <header>.<Hashed Payload>.<signature> .<HolderHeader>.<HolderDisclosures>.<HolderSignature> ① 署名の検証 前半部 <header>.<payload>.<signature> → 通常のJWTと同様に検証

    後半部 <HolderSignature>はそれより前の5 節をinputとして検証 ② 開示された値の検証 <payload>と<HolderDisclosures>を突合 Hashの値が一致するかを検証 ③ 各種JWT Claimsの検証 { “vc”: { “issuer”: <Hash>, …, “credentialSubject”: [{ “id”: <Hash>, …, “items”: [ { “name”: <Hash>, “amount”: <Hash>, …, }, { “name”: <Hash>, “amount”: <Hash>, …, }, …, ] }] } } { “sd_hs_disclosures”: { “vc”: { “issuer”: “{“s”: <salt>, “v”: “did:example:shop”}”, …, “credentialSubject”: [{ “id”: “{“s”: <salt>, “v”: “did:example:buyer”}”, …, “items”: [ { “name”: “{“s”: <salt>, “v”: “Cake”}, “amount”: “{“s”: <salt>, “v”: 1}”, …, }, …, ] }] } } } Issuer Holder Verifier Hashの照合 ※Draft01 現在は構造が変 わっている
  9. Presentation Definition (@ Presentation Exchange) { “input_descriptors”: [ // 要求する各VCの定義の配列

    { “id”: “receipt”, “constraints”: { “fields”: [ { “path”: [“$.vc.credentialSubject[0].items”] // 購入物 “filter”: { // JSONSchemaで条件を定義 “type”: “array”, “contains”: { “type”: “object”, “properties”: { “name”: {“type”: “string”, “const”: “Cake”}, “amount”: {“type”: “number”, “minimum”: 1}, …, } } } }, …, ] } } ] } Verifierが要求するVPを Holderに伝えるJSON文書 「ケーキを一つ以上購入したレシート」のPresentation Definition
  10. デモシナリオ 返品用ページ (=Verifier) 購入者(=Holder) VC Wallet 返品リクエスト 302 openid://?response_type=id_token%20vp_token &presentation_definition=<要求するVPの定義>...

    OK/NG レシートVC (SD-JWT) OIDC4VP on SIOP v2 署名検証・PDとの照合 Holder - Verifier間の通信プロトコル、 OIDCの拡張として策定中 Browser カスタムスキーマ で呼び出し <redirect_uri>?vp_token=... GET <redirect_uri>?vp_token=... PDを元にVP組立
  11. 参考: Draft03の データ構造 <header>.<Payload>.<signature>~<Disclosure>~<Disclosure2>~... ・Objectのkey名も秘匿可能に ・Disclosuresは各Hash値に対応 する[salt, key, value]の配列に変 更

    { “vc”: { “_sd”: [ <Hash01>, …, ] “credentialSubject”: [{ “_sd”: [ <Hash02>, …, ] “items”: [ { “_sd”: [ <Hash03>, <Hash04>, …, ] }, { “_sd”: [ <Hash05>, <Hash06>, …, ] }, …, ] }] } } [<salt1>, “issuer”, “did:example:shop”] [<salt2>, “id”: “did:example:buyer”] [<salt3>, “name”, “Cake”] [<salt4>, “amount”, 1] [<salt5>, “name”, “Beer”] [<salt6>, “amount”, 1] …, Issuer Holder Verifier