Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

MicrosoftのDID/VC実装概要

982 views

Published on

#didcon vol.28で話した資料。
MicrosoftのVCaaSの実装を軽く説明してます。

Published in: Technology
  • Be the first to comment

  • Be the first to like this

MicrosoftのDID/VC実装概要

  1. 1. Microsoftの DID/VC実装概要 2020/11/19 #didcon vol. 28 富士榮尚寛 / @phr_eidentity
  2. 2. 今日のお話 Microsoftが「Verifiable Credentials as a Service」とい うことで新サービスを開発していることはアナウン スされているものの、実態がなかなか見えてこない ので触ってみた COPYRIGHT ©, 2020, NAOHIRO FUJIE, ALL RIGHTS RESERVED 2
  3. 3. これまでのMSからのアナウンス ¡ 2017 : uPortと組みます@Consensus 2017 ¡ 2019 : ION(アイオン)作ってます ¡ 2019 : DID Preview update, private previewはじめます ¡ 2020 : 米国の退役軍人のシナリオで実証実験やってます @Ignite COPYRIGHT ©, 2020, NAOHIRO FUJIE, ALL RIGHTS RESERVED 3
  4. 4. 実は私も色々やってました。(98%くらいは趣味) ¡ 2018年のConsumer Identity World APAC ¡ uPortとAzure Active Directory B2Cを組み合わせたサプライ チェーンでのKYCデモ作成 COPYRIGHT ©, 2020, NAOHIRO FUJIE, ALL RIGHTS RESERVED 4
  5. 5. Demo – verify iden.ty by submi3ng drivers' license 1. Register iden-ty documents into wallet 2. Use wallet to verify user and enable access Register Drivers license via NFC HR App for Students Record registration event to Blockchain Submit Drivers license in Wallet Verify registration Automatic enabling access to corporate applications
  6. 6. ということで MSのVCaaSの 話をします。 COPYRIGHT ©, 2020, NAOHIRO FUJIE, ALL RIGHTS RESERVED 6
  7. 7. 通称PICS: Portable Identity Card Service ¡ Azure Active Directoryのコンポーネ ントの一部として提供されるっぽ い(要Azure AD Premium P1) ¡ MSがホストするIssuerサービス+α ¡ +αの部分は ¡ Discovery(Universal ResolverのFork) ¡ Presentation Exchange ¡ IssuerのフロントはSDK提供 ¡ HolderはMS Authenticator ¡ VerifierはSDK提供 COPYRIGHT ©, 2020, NAOHIRO FUJIE, ALL RIGHTS RESERVED 7
  8. 8. 今日の#didconのチケット取得 COPYRIGHT ©, 2020, NAOHIRO FUJIE, ALL RIGHTS RESERVED 8 チケットをVCとして発行 VCを提示してZoomリンク取得 ブラウザ版Wallet by @ookimaki_tech
  9. 9. 全体像 COPYRIGHT ©, 2020, NAOHIRO FUJIE, ALL RIGHTS RESERVED 9 分散台帳(ION) Issuer(VC発行機関) Front (SDK) Backend (PICS) 鍵管理 (KeyVault) 構成管理 (Blob) 属性提供元 (認証基盤等) Holder(利用者) Verifier(VC利用・検証機関) Verifier (SDK) Presentation Exchange (PICS) DID登録 1. VC発行要求 2. 認証等 4. VC発行 3. ID情報 Authenticator DID確認 1. VC提供要求 2. VC変換要求 3. VC送信 Discoveryサービス
  10. 10. 構成要素の解説 COPYRIGHT ©, 2020, NAOHIRO FUJIE, ALL RIGHTS RESERVED 10 コンポーネント 役割・解説 Issuer Frontend(SDK) VC発行要求を発行する verifiablecredentials-verification-sdk-typescriptを利用して構築するFrontend Webアプリケーション Issuer Backend(PICS) VCの発行を行う PICSのVC発行機能(issueエンドポイント) 構成管理(Azure Storage) VCに関する構成情報(Claim取得方法、VCの属性とのマッピング、ロゴ画像などに関する情報)を格納する 鍵管理(Azure Key Vault) IssuerならびにVerifierのDIDに関連する鍵(署名鍵、リカバリ鍵、更新鍵)を格納する 属性提供元 VCに含めるID情報の提供元 以下の3つから選択することが可能 ・id_tokens: OpenID Connectに対応したIdentity Provider ・presentations: 他のVC ・selfissued: 自己申告 Authenticator 発行されたVCを保存するHolderのIdentity Wallet 本レポート執筆時点でAndroid版のMicrosoft Authenticator(ベータ版)のみが公式にリリースされているが、SDKの利用等に よりカスタムWalletの開発を行うことが可能 Presentation Exchange DIFのPresentation Exchangeの仕様に従いVerifierからの要求に従いHolderが保持しているVCを変換する。今後、Selective Disclosure等に利用されることが想定される。 PICSのVC変換機能(exchangeエンドポイント) Verifier(SDK) Holderから提示されたVCを検証する verifiablecredentials-verification-sdk-typescriptを利用して構築するWebアプリケーション Discoveryサービス DIDからDID Documentを取得する 各種コンポーネントはDID Document内に記載される情報を使って各種処理を行う(例:DID Document内に記載される公開鍵 情報を利用した署名検証) 分散台帳(ION) DIDの発行、DID Documentの保管を行う
  11. 11. VCを発行してみる ¡ Issuerの設定 ¡ 組織名と鍵の設定(Azure Key Vault)を入れてあげるとIssuerの定義がされる ¡ Issuer DID/DID Documentが発行される※現状はBitcoin Blockchain上には書き込まれない模様 COPYRIGHT ©, 2020, NAOHIRO FUJIE, ALL RIGHTS RESERVED 11
  12. 12. VCを発行してみる ¡ Credentialの発行 ¡ Credentialの名前、サブスクリプション、マニフェスト(Rules、Display)の指定(後述) COPYRIGHT ©, 2020, NAOHIRO FUJIE, ALL RIGHTS RESERVED 12
  13. 13. VCを発行してみる ¡ Credentialの発行 ¡ マニフェストについて(https://identity.foundation/credential-manifest/) ¡ MSの実装ではRulesとDisplayの2つに分かれていてBlobにjsonをアップロードする COPYRIGHT ©, 2020, NAOHIRO FUJIE, ALL RIGHTS RESERVED 13 { "attestations": { "idTokens": [ { "mapping": { "firstName": { "claim": "given_name" }, "lastName": { "claim": "family_name" } }, "configuration": "https://nfpoc.b2clogin.com/nfpoc.onmicrosoft.com/v2.0/.well- known/openid-configuration?p=B2C_1_didcon", "client_id": "52075da0-6f99-44e7-b294-339e70fa1608", "redirect_uri": "vcclient://openid" } ] }, "validityInterval": 2592000, "vc": { "type": ["https://schema.org/didconTicket"] } } { "default": { "locale": "en-US", "card": { "title": "#didcon Ticket", "issuedBy": "#idcon", "backgroundColor": "#A97B41", "textColor": "#000000", "logo": { "uri": "https://didpreviewstorage.blob.core.windows.net/pic/idcon.jpg", "description": "#idcon" }, "description": "Use this ticket to join the idcon vol.28, #didcon!" 〜中略〜 }, "claims": { "vc.credentialSubject.firstName": { "type": "String", "label": "First name” }, 〜後略〜 Rulesファイル : VCの発行に関するルールを記載 Displayファイル : VC(カード)の見た目に関する記載 どこからVCに載せるClaimをとってくるか (IdToken、他のVC、自己申告) IdTokenの場合は取得元のOPの情報 VCのタイプ(スキーマ)の指定 VCの有効期限の指定 言語指定(動かない) タイトル、背景色、テキスト色など ロゴ画像のURL 表示するClaimとVCの属性のマッピング
  14. 14. VCを発行してみる ¡ Issuer frontの実装 ¡ 要するに発行リクエストを受け付けて、バックエンドへ渡してVCを発行してもらうためのWeb I/F ¡ SDK(verifiablecredentials-verification-sdk-typescript)を使って実装 ¡ サンプルあり(https://github.com/Azure-Samples/active-directory-verifiable-credentials) COPYRIGHT ©, 2020, NAOHIRO FUJIE, ALL RIGHTS RESERVED 14 const requestBuilder = new RequestorBuilder({ presentationDefinition: { input_descriptors: [ { schema: { uri: credentialType, }, issuance: [ { manifest: credential } ] } ] } }, crypto).allowIssuance(); Rulesに指定したVCのタイプ(スキーマ) 例)https://schema.org/didconTicket RulesとDisplayをベースにPICSが生成する マニフェストのURIを指定 マニフェストのURIを開くとRules/Display で指定した内容が確認可能
  15. 15. # 処理 処理内容 1 VC発行リクエスト(SIOPリクエス ト)の発行 UserAgentでIssuer Frontendへアクセス、QRコードの表示やopenid://vcス キーマ経由でSIOPリクエストをAuthenticatorに読み込ませる 2 構成情報の読み込み IssuerのDID Document、カードの構成情報(コントラクト)、ユーザ認証 に利用するOpenID Providerの構成情報を読み込む 3 ユーザ認証と属性情報の取得 OpenID Connectのプロトコルに従い、ユーザ認証と属性情報の取得を行う 4 SIOPレスポンスを送信し、VCの取 得 Issuer BackendへSIOPレスポンスを送信し、VCを取得する 処理の流れ ¡ 以下のステップで処理が実行される COPYRIGHT ©, 2020, NAOHIRO FUJIE, ALL RIGHTS RESERVED 15
  16. 16. COPYRIGHT ©, 2020, NAOHIRO FUJIE, ALL RIGHTS RESERVED 16 DiscoveryでIssuerの DID Documentを取得 マニフェストから発行 するVCの情報を取得 Claimを取得するため のOPの情報を取得
  17. 17. COPYRIGHT ©, 2020, NAOHIRO FUJIE, ALL RIGHTS RESERVED 17 ここは普通にOIDC Id_tokenをPICSに投げ 込んでVCを取得
  18. 18. VCを提示〜検証する ¡ Verifierの設定 ¡ SDK(verifiablecredentials-verification-sdk-typescript)を使って実装 ¡ サンプルあり(https://github.com/Azure-Samples/active-directory-verifiable-credentials) COPYRIGHT ©, 2020, NAOHIRO FUJIE, ALL RIGHTS RESERVED 18 const requestBuilder = new RequestorBuilder({ clientName: client.client_name, clientId: clientId, redirectUri: clientId, logoUri: client.logo_uri, tosUri: client.tos_uri, client_purpose: client.client_purpose, presentationDefinition: { input_descriptors: [{ schema: { uri: [credentialType], } }] } 受け取りたいVCのタイプ(スキーマ) 例)https://schema.org/didconTicket const validator = new ValidatorBuilder(crypto) .useTrustedIssuersForVerifiableCredentials({ [credentialType]: issuerDid}) .useAudienceUrl(clientId) .build(); const validationResponse = await validator.validate(req.body.id_token); 受け取りたいVCのタイプとIssuerの DIDを指定してValidation Presentation Exchangeの仕様に一部準拠。 受け取りたいVCの条件設定はもう少し細か くできるようになる見込み
  19. 19. 処理の流れ ¡ 以下のステップで処理が実行される COPYRIGHT ©, 2020, NAOHIRO FUJIE, ALL RIGHTS RESERVED 19 # 処理 処理内容 1 VC発行リクエスト(SIOPリクエス ト)の発行 UserAgentでVerifierへアクセス、QRコードの表示やopenid://vcスキーマ経 由でSIOPリクエストをAuthenticatorに読み込ませる 2 リクエスト元のVerifierの情報を取得 VerifierのDID Documentを取得する 3 Presentation Exchangeを要求 VCをPresentation Exchangeエンドポイントへ送信し、Verifierへの提示用の VCを取得する 4 SIOPレスポンスとしてVCを送信 VerifierへVCを含むSIOPレスポンスを送信する
  20. 20. COPYRIGHT ©, 2020, NAOHIRO FUJIE, ALL RIGHTS RESERVED 20
  21. 21. 関連する標準・仕様(策定中のものが殆ど・・・) 仕様 策定団体 備考 Decentralized Identifiers W3C https://www.w3.org/TR/did-core/ DIF https://identity.foundation/sidetree/spec/#long-form-did-uris Sidetree仕様内のLong formed DIDを利用 Verifiable Credentials Data Model W3C https://www.w3.org/TR/vc-data-model/ SyntaxとしてはJSON+contextを利用 Presentation Exchange DIF https://identity.foundation/presentation-exchange/ DID SIOP DIF https://identity.foundation/did-siop/ Sidetree DIF https://identity.foundation/sidetree/spec/ Discovery DIF Universal ResolverのION Driverの実装(Microsoft自身が提供するDiscovery サービスの実態はUniversal Resolver+ION Driver) https://github.com/decentralized-identity/universal-resolver Credential Manifest DIF https://identity.foundation/credential-manifest/ Well Known DID Configuration DIF https://identity.foundation/.well-known/resources/did-configuration/ COPYRIGHT ©, 2020, NAOHIRO FUJIE, ALL RIGHTS RESERVED 21
  22. 22. 思うこと COPYRIGHT ©, 2020, NAOHIRO FUJIE, ALL RIGHTS RESERVED 22 ¡ 典型的な卵・鶏なので、意識的にVC発行元、使える場所を増やしていかない と普及しない ¡ クローズな世界で使っていると分散台帳を使う意味が出ないので、標準化と 幅広い適用がとっても大事 ¡ まだまだ仕様が柔らかい状態なので、フィードバックするなら今。

×