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

20231109 OpenID TechNight vol.20 「Verifiable Cr...

OpenID Foundation Japan
November 09, 2023
1k

20231109 OpenID TechNight vol.20 「Verifiable Credentials を取り巻く OpenID 関連仕様の解説」

「Verifiable Credentials を取り巻く OpenID 関連仕様の解説」
OpenID TechNight vol.20 ~ 分散型 ID 技術勉強会 ~ 2023/11/09(木)

OpenID Foundation Japan

November 09, 2023
Tweet

Transcript

  1. 今⽇はこれだけ覚えて帰ってください。 • OpenID4VC: VC/DID関連3仕様の俗称 • SIOPv2: OpenID Connect(OIDC)の既存仕様を拡張し、 DIDやhttps型のアプリ連携やクラウドウォレットに対応 •

    OpenID for VP: VC/VPを提⽰するためのOAuth2.0の拡張 新たにVPトークンを定義 • OpenID for VC Issuance: VCを発⾏するためのOAuth2.0の拡張。QR コードによる認可コードの連携が可能 • DCP WG: Digital Credentials Protocols Working Group • VC関連のさらなる仕様策定のために新たに設⽴したWG • HAIP: OpenID4VCを使って、SD-JWTによるクレデンシャル発⾏・利 ⽤時の相互運⽤性を確保するためのプロファイル • その他BLE利⽤、userinfo拡張などの仕様も策定中
  2. ⾃⼰紹介 • ⼩岩井 航介/Kosuke Koiwai • 2017年より KDDI株式会社でID/認証関係等を担当 • 2020年より

    OpenID Foundation Sustaining Board Member • eKYC-IDA仕様の共著者、FAPI1.0仕様の貢献者 • 2022年より OpenIDファウンデーション・ジャパン KYC WGリーダ • その他、FIDO Alliance, W3C でも標準化活動に参画中。 • KDDI は2015年より OpenID Foundation の Sustaining Corporate Sponsor として活動 https://openid.net/foundation/board/ https://news.kddi.com/kddi/corporate/newsrelease/2015/11/10/1444.html
  3. 認証関連仕様の外観 • OAuth2.0をベースに、あらゆる仕様が策定されている。 • Extension(拡張): 新たなユースケースのために既存の仕様にないものを追加 する • Profile(プロファイル): 仕様の範囲内で、特定のユースケースのために利⽤

    法(設定値等)を制限するもの • ユースケースに合わせて、組み合わせて利⽤する。(以下例) OAuth2.0 API Authorization Framework (RFC6749) OpenID Connect Core (OIDC) Financial-grade API (FAPI) eKYC-IDA OpenID for Verifiable Presentations Self-issued OP v2 OpenID for VC Issuance OID4VC High Assurance Interoperability Profile with SD-JWT VC (HAIP)
  4. DID: Decentralized Identifier (分散型識別⼦) • 特定の事業者に依存しない識別⼦(Identifier) • Identity(属性の集合)ではなく、Identifier(識別⼦) • OpenID

    Connectでいうところの Sub値に該当 • W3Cにより標準化(did:method:xxxx) • DIDと紐づく鍵ペアを⽣成、秘密鍵へのアクセス=「所有」 • 識別⼦に紐づくDID Documentが分散台帳上等で公開される • DIDに紐づく秘密鍵で署名したデータをDID Document上の公 開鍵で検証する ことでDIDの「持ち主」が発⾏したデータであ ることを検証できる OpenID BizDay #15 再掲
  5. VC: Verifiable Credentials (検証可能なクレデンシャル) • 検証可能なデータモデル • Issuerから発⾏されたVCをユーザはHolder(Wallet)に保管。 Verifierに提⽰する時は、複数のVCを取捨選択した VP

    (Verifiable Presentation)として提⽰する。 • DIDと組み合わせて利⽤されることが多いが、必須ではない。 • 発⾏者(Issuer)のDIDに紐づく秘密鍵によりデジタル署名される • 発⾏者のDID Documentに含まれる公開鍵を使って検証可能 VCの発⾏ VPの提⽰ OpenID BizDay #15 再掲
  6. Credential の定義の違い • OpenID Connect Coreと、W3C Verifiable Credentialsで、 "Credential”の定義が異なる •

    OIDC: アイデンティティやその他のリソースを使う権利の証明 • W3C: 同⼀エンティティによって⽰されたクレーム(属性)のセット OpenID BizDay #15 再掲
  7. OpenID4VCでサポートするVCの種類 W3C Verifiable Credentials Data Model https://www.w3.org/TR/vc-data-model/ ISO/IEC 18013-5 mobile

    Driving License (mDL) https://www.iso.org/standard/69084.html ISO/IEC 23220-2 electronic Identification (eID) https://www.iso.org/standard/79124.html Anonymous Credentials https://www.hyperledger.org/use/hyperle dger-indy SMART Health Card(SHC) / FHIR (Fast Healthcare Interoperability Resources) https://ecqi.healthit.gov/fhir https://spec.smarthealth.cards/ • Verifiable Credentials には、いくつか仕様が存在。 • W3C のVCと、ISOのmDL (モバイル運転免許証) には互換性はない。 • ワクチン証明書に使われるSMART Health Cardは W3C VCベース。 • OpenID4VCは、下記いずれもサポートするよう設計されている。 OpenID BizDay #15 再掲
  8. Self-Issued OpenID Provider v2 • OpenID Connect Core仕様のSIOPを拡張 • openid://

    だけでなく、https://も使えるように • App Links, Universal Linksや、クラウド連携のWalletも想定 • sub値として、jwt Fingerprintだけでなく、DIDも使えるように • OpenID Connect⾃体にsub値の制限はないが、SIOP仕様ではjwt fingerprintと規定 WalletからVerifierに対してVCを提⽰する際に、 OIDC4VPと組み合わせて利⽤することを想定 VCの発⾏ VPの提⽰ OpenID BizDay #15 再掲
  9. Self-Issued OpenID Provider v1 とは? • OpenID Connect Core 仕様に当初から

    定義されていた!! https://openid.net/specs/openid-connect-core-1_0.html OpenID BizDay #15 再掲
  10. Self-Issued OpenID Provider v1 とは? • ⾃分の端末(スマホやPC)⾃⾝がOP/IdPになるための仕様 • ログイン時に、GoogleやFacebookにリダイレクトする代わり に、openid://スキーマを使ってスマホアプリを起動する

    • 通常であれば、OP(Googleなど)を信頼して、IDトークン内の 情報(claims)を信頼するが、SIOPの場合は、IDトークンを署 名した署名鍵を信頼する。 • SIOPの場合、IDトークン内のsub値以外の情報(claims)は⾃ ⼰申告ななので信頼できないが、Aggregated Claimsを組み合 わせることで信頼できる情報を提供できるようになる。 OpenID BizDay #15 再掲
  11. Self-Issued OpenID Provider v2 • OpenID Connect Core仕様のSIOPを拡張 • openid://

    だけでなく、https://も使えるように • App Links, Universal Linksや、クラウド連携のWalletも想定 • sub値として、jwt Fingerprintだけでなく、DIDも使えるように • OpenID Connect⾃体にsub値の制限はないが、SIOPv1仕様では jwt fingerprintと規定 WalletからVerifierに対してVCを提⽰する際に、 OIDC4VPと組み合わせて利⽤することを想定 VCの発⾏ VPの提⽰ OpenID BizDay #15 再掲
  12. OpenID for Verifiable Presentations • OAuth2.0のプロトコルでVC/VPを返却する拡張 • 直近のドラフトで、OIDCからOAuth2.0ベースになっているので注意 • 新たに

    VP トークン を定義し、IDトークンと独⽴して返却 • OAuth2.0のスコープ(scope)に、求めるVC/VPの種類を指定、 もしくは presentation_definition で細かく指定 WalletからVerifierに対してVCを提⽰する際に、 SIOPV2と組み合わせて利⽤することを想定 VCの発⾏ VPの提⽰ OpenID BizDay #15 再掲
  13. OpenID4VP: リクエストとレスポンスの例 リクエスト レスポンス vp_token には、JSONを格納したり、 mDL で使われる CBOR を

    base64 エンコードして格納して返却 presentation_definition に 欲しいVP/VCの形式等を指定 OpenID BizDay #15 再掲
  14. OpenID for Verifiable Credentials Issuance • IssuerからWalletにVCを発⾏するためのOAuth2.0の拡張 • OAuth2.0のスコープ(scope)に、VCの種類を簡易的に指定、 もしくは

    authorization_details (RAR)で種類、形式を細かく指定 • 最初の認証をスキップし、認可コードをQRコードにして Walletに読み込ませることも可能 (pre-authorized code flow) IssuerがVCをWalletに対し発⾏する際に利⽤ Issuerがユーザを認証する際にVC/VPを提⽰させる場合、IssuerがVerifierにもなる VCの発⾏ VPの提⽰ OpenID BizDay #15 再掲
  15. pre-authorized code flow の例 • 対⾯で本⼈確認を⾏った後、ユーザの端末にVCを発⾏する ユースケースで有⽤ 店頭などで本⼈確認を⾏った後、 Walletに読み込ませるQRコードの例 access

    tokenを受領して(中略) Credential EndpointからVCを取得 Walletはcredential_issuerのmetadataを 確認し、Token Endpointにアクセスする QRコードに含まれる Credential Offer オブジェクトの例 通常のOAuthフローで認可後に得られる 認可コードの代わりに、プレ認可コードが ここで得られる。 JWT形式のVCがここで得られる。 OpenID BizDay #15 再掲
  16. Digital Credentials Protocols (DCP) Working Group とは • OpenID Foundationで新たに設⽴されたWG

    • 2023年8⽉31⽇に第1回開催、47名が参加 • WGのゴールは、Issuer-Holder-Verifier モデルのユースケー スに関連するOpenID仕様を開発し、あらゆるフォーマットの デジタルクレデンシャルの発⾏と提⽰、およびエンドユーザか らVerifierに対する仮名での認証(pseudonymous authentication)を実現すること。 https://openid.net/announcing-the-digital-credentials-protocols-working-group/ https://openid.net/wg/digital-credentials-protocols/charter/ https://lists.openid.net/pipermail/openid-specs-digital-credentials-protocols/Week-of-Mon-20230828/000000.html
  17. DCP WGで作成する仕様 • 既存の OpenID4VC 基本3仕様は、当⾯AB/Connect WGで 継続運⽤(WG間の仕様の移管⼿続、IPR(知財)の問題) • Self-Issued

    OpenID Provider v2 (SIOPv2) • OpenID Connect for Verifiable Presentations (OpenID4VP) • OpenID Connect for Verifiable Credentials Issuance (OpenID4VCI) • 新たに下記新仕様を開発予定 • OID4VC High Assurance Interoperability Profile with SD-JWT VC • OpenID for Verifiable Presentations over BLE • OpenID Connect UserInfo Verifiable Credentials • Security and Trust in OpenID for Verifiable Credentials
  18. OID4VC High Assurance Interoperability Profile with SD-JWT VC (HAIP) •

    基本3仕様(SIOPv2, VP, VCI)を使って、SD-JWTによるクレデンシャ ル発⾏・利⽤時の相互運⽤性を確保するためのプロファイル • VCI • pre-auth codeとauthorization code flow両⽅サポート必須 • DPoP対応必須(クライアントの所有する秘密鍵による認証) など • VP • presentation_definitionの送信必須(DIF Presentation Exchange準拠) • 認可リクエストには request_uriの利⽤必須 などなど • SIOPv2 • Wallet起動にはcustom url scheme対応必須 • sub値には DIDでは無くJWK-Thumbprintを使う など • EUのARFを強く意識して開発されているとのこと https://vcstuff.github.io/oid4vc-haip-sd-jwt-vc/draft-oid4vc-haip-sd-jwt-vc.html
  19. SD-JWT とは • Selective Disclosure: 選択的開⽰ • 年齢確認だけのために、住所⽒名⽣年⽉⽇すべて含まれた⾝分証を提 ⽰する必要はない。 •

    発⾏されたクレデンシャル内の、必要な情報だけを取り出して開⽰で きる仕組み。 • SD-JWTは、ソルトをつけてハッシュ化された値が含まれた JWT。開⽰したい情報と、ソルトを合わせて相⼿に渡せば、 ハッシュを検証することでJWTにその情報が含まれていること が分かる。 https://datatracker.ietf.org/doc/html/draft-ietf-oauth-selective-disclosure-jwt-05 https://www.imes.boj.or.jp/research/abstracts/japanese/23-J-08.html
  20. SD-JWTによる選択的開⽰の⽣成 "_sd": ["Ch-DBcL3kb4VbHIwtknnZdNUHthEq9MZjoFdg6idiho”] ["2GLC42sKQveCfGfryNRN9w", "first_name", "Erika"] クレーム名 ソルト(乱数) 値 Base64URLエンコード

    WyIyR0xDNDJzS1F2ZUNmR2ZyeU5STjl3IiwgImZpcnN0X25hbWUiLCAiRXJpa2EiXQ SHA256ハッシュ+Base64URLエンコード ① ② ②の含まれたJWTだけを受領した相⼿は、中⾝に何が書いてあるのか分からない。 ①と②を受領した相⼿だけが、中⾝を知り、検証することができる。
  21. SD-JWT の弱点 • 毎回同じデータを相⼿に渡してしまうので、同⼀のSD-JWTを 受け取った複数or単⼀のVerifierは、相⼿が同⼀⼈物であると分 かってしまう。(名寄せ or リンク不可能性) • たとえば13才以上を証明してTwitterの裏垢をつくったら?

    • これを解決するために、BBS+署名などのZKP(ゼロ知識証明) ⽅式を提案、推進している⼈たちもいる。 • ZKP⽅式は、まだ各国政府の採⽤暗号リストに掲載されておらず、 実装のバグが⾒付かるなど、まだmatureではないという意⾒もある • SD-JWT派は、ソルトを変えた複数のSD-JWTを使い分ければいいと主 張
  22. OpenID for Verifiable Presentations over BLE • MOSIPから提供された仕様案 • MOSIP:

    The Modular Open Source Identity Platform • 「インド国内のデジタルIDプログラム (India Stack) をベースに、 eガ バメント (電⼦政府) のあらゆるデジタル公共サービス提供メカニズム の 基礎的なビルディング・ブロックを形作るデジタル⾝分証明(デジ タルID) プラットフォームを、第三国展開⽤にパッケージ化した」 • オフラインでも対⾯でBLE経由のVC/VP提⽰が可能。 • 当仕様にもとづくAndroid, iOSでの実装が、Open Wallet Foundation にコントリビュートされている。 https://openid.bitbucket.io/connect/openid-4-verifiable-presentations-over-ble-1_0.html https://www.meti.go.jp/meti_lib/report/2020FY/000190.pdf https://openwallet.foundation/2023/08/23/openwallet-foundation-announces-google-as- premier-member/ ※MOSIPについては経産省資料が詳しい
  23. OpenID Connect UserInfo Verifiable Credentials • OpenID Connectのuserinfoエンドポイントで得られる情報を、 VCに詰め込んで渡す⽅法を規定した、主にVCIのプロファイル •

    UserinfoでVCを渡すのではなく、VCにUserinfo相当の情報を詰める • ここでのVCとは、W3CのJWT-Formatted VCのこと • Issuerがサーバダウンしても Verifierが受領したVC/VPを検証 できるよう、 Issuerの公開鍵(JWK Sets)をJWT(signed)で公 開、第三者によるキャシュ、再配布も可能とした • UserinfoをVCに変換する標準的な⽅法を定めることで、既存の OpenID ProviderがVCを発⾏しやすくしたり、既存の拡張仕様 (IDAなど)をそのまま活⽤できるようになると期待される https://openid.net/specs/openid-connect-userinfo-vc-1_0-00.html
  24. OpenID Connect UserInfo Verifiable Credentials presentationの⽅法はスコープ外 • 既存のjwks urlに Accept:

    application/jwtで アクセスすると、jsonの代わりにJWTが返 却される • Discovery metadataにcredential_endpoint、 credentials_supported を追加 • JWT-formatted VCのcredentialSubject内に、 userinfo相当のクレームを格納して返却 • scopeにuserinfo_credentialを追加指定 • tokenエンドポイントでc_nonce, c_nonce_expires_in を追加で返却 • credentialエンドポイントの利⽤
  25. Security and Trust in OpenID for Verifiable Credentials • この仕様上ではあらゆるVCを対象とする。

    • Issuer-Holder-VerifierモデルでTrustを実現するために必要な コンセプトやセキュリティ要件を⾔語化して定義 • Issuer Identification, Authenticity of Claims, Identity of Holder, Integrity of Interaction, Privacy, Context, Correctness of Claims, Wallet Integrity • Holder Binding: Credentialの主体を特定する⼿段を、 Biometric, Claim-based, Cryptographicの3種と定義 • 3者とも、必要以上のデータを保持してはならない などなど • さらに、定義した要件が、VC基本3仕様で満たせることを⽰す • 型式証明ではない:今後実施予定 https://vcstuff.github.io/oid4vc-security-and-trust/draft-oid4vc-security-and-trust.html
  26. IDA: OpenID Connect for Identity Assurance • 本⼈確認済みのID情報(Identity Assurance) を連携するための、

    OpenID Connect の拡張仕様群 • 年内にFinal化を⽬指して最終調整中。 • OpenID Connectでサポートされている各種個⼈情報に対して、 「誰が」「どのように」「いつ」「何を元に」確認したかを、 メタデータとして付与することができる。 • Verified Claims (verified_claims)というオブジェクトを定義 • 共著者として⼩岩井も名を連ねる OpenID BizDay #15 から⼀部修正
  27. OIDCを拡張した トランスポート層 の定義 OpenID Connect for Identity Assurance 追加claimの定義 OpenID

    Connect for Identity Assurance Claims Registration place_of_birth、 birth_family_name 等の定義 verified_claimsの スキーマ定義 OpenID Identity Assurance schema definition verified_claims, vefirication, claims 等の定義 ファイルの添付 Attachments • • • リクエスト・レスポンス OP metadata, aggregated_claims等 IDA仕様は主に3つの仕様からなる 式による表現 (age>20,name=太郎) Advanced Syntax for Claims 追加仕様も検討中
  28. 2つのVC • W3C の策定する Verifiable Credentialsと IDA仕様で定義された Verified Claims (verified_claims)との間に直接的な互換性はない。

    • Verified Claimsは、OpenID Connect仕様の IDトークンの中に格納 されるため、IDトークンとして署名され、検証可能。 • Verifiable Credentials はそれ⾃体が署名され、検証可能。 • Verified Claimsは、属性情報とそのメタデータの記載⽅法も含め標 準化されている⼀⽅、Verifiable Credentialsの中⾝の標準化はこれ から。(ワクチン証明書のFHIRが⼀例) • Verifiable Credentials 内に本⼈確認済み情報を格納するため、 Verified Claims のデータモデル(スキーマ)の利⽤が検討されている。 ※ IDA仕様が3分割された理由の1つはスキーマの流⽤性確保 penID BizDay #15 再掲 OpenID BizDay #15 から⼀部修正
  29. 今⽇はこれだけ覚えて帰ってください。 • OpenID4VC: VC/DID関連3仕様の俗称 • SIOPv2: OpenID Connect(OIDC)の既存仕様を拡張し、 DIDやhttps型のアプリ連携やクラウドウォレットに対応 •

    OpenID for VP: VC/VPを提⽰するためのOAuth2.0の拡張 新たにVPトークンを定義 • OpenID for VC Issuance: VCを発⾏するためのOAuth2.0の拡張。QR コードによる認可コードの連携が可能 • DCP WG: Digital Credentials Protocols Working Group • VC関連のさらなる仕様策定のために新たに設⽴したWG • HAIP: OpenID4VCを使って、SD-JWTによるクレデンシャル発⾏・利 ⽤時の相互運⽤性を確保するためのプロファイル • その他BLE利⽤、userinfo拡張などの仕様も策定中