Slide 1

Slide 1 text

DIF Japan Monthly Sync Web5の(浅い)全体像 GMOグローバルサイン・ホールディングス 神沼 貴⼤(@t_kanuma) 2023/12/22

Slide 2

Slide 2 text

初めに ● ︖を付けた箇所 = 未検証なIMHO、推測 2

Slide 3

Slide 3 text

Web5のコンセプト (IMHO) ● SSIコンセプト = デジタル空間をフィジカル空間の紙モデルと同等に ● いつどこで誰にどんな⽬的でCredentialを提⽰するかをHolder次第に ● OpenID4VC, Hyperledger Aries ● Identityを事業者から本⼈に集約する(個⼈に分散する) ● Web5 ● Identity + App Dataを事業者から本⼈に集約する(個⼈に分散する) ● DIF DWN仕様を実装 ⇨ Personal Data Store(PDS) ● Decentralized Web App(DWA) の実現 ⇨ Webをよりパーソナルに、パワフルに 3

Slide 4

Slide 4 text

⼤体の全体像 4

Slide 5

Slide 5 text

⼤まかな全体像 5 Remote Node (マルチテナント) Local Node Local Node ION Remote Node did:ion:yyy did:ion:xxx 3.Sync 2-(a). Send Messages(signed by DID, HTTPS POST) 1. DID Resolution Service Endpoint: Remote Node URL Protocol (Data Schema & Access Control) DWA FE/Mobile App 2-b. Write data to my own node. did:ion:yyy?service=DecentralizedWebNode&message=W3sgT...

Slide 6

Slide 6 text

⼤まかな全体像 6 Remote Node (on AWS) Remote Node (on GCP) 多 対 多の分散環境 Frontend, Mobile, Desktop App

Slide 7

Slide 7 text

現在の状況 ● Tech Preview状態 ● Are We Web5 yet? : 85% done ● 来年Identity Walletがリリースされる ● DIFでDWAのハッカソンを開くなど、啓蒙中の模様 ● did:ionはまだLong-Formのみ(簡単に動かして確認済み) 7

Slide 8

Slide 8 text

DID Document(ION) 8

Slide 9

Slide 9 text

現在の状況: Roadmap 9 [出展](YouTube) Web5 Architecture: v0.8.1

Slide 10

Slide 10 text

TBD社のリポジトリ群と 各リポジトリ/パッケージの依存関係 10

Slide 11

Slide 11 text

TBD54566975内のWeb5関連リポジトリ群 11 リポジトリ 概要 web5-js アプリに対しAPIを提供するSDK (= Local Node) TypeScript、⼀番成熟 web5-kt 同上 Kotlin、2023/8から開発 web5-rs 同上? Rust、2023/11から開発 dwn-server Remote Nodeの実装 dwn-sdk-js web5-js / dwn-serverが依存するDIF DWN仕様の実装 sdk-developement 上記web5-{lang} SDKの実装状況を記す管理ドキュメント web5-wallet Identity Wallet?(後述)

Slide 12

Slide 12 text

TBD54566975内のWeb5関連リポジトリ群 12 リポジトリ 概要 ssi-service SSIに関する機能を提供するREST API Endpoints仕様 / KMSなどのConfig ssi-sdk 上記ssi-serviceが依存するSDK Goで実装 / 豊富な機能 ssi-sdk-wasm 上記ssi-sdkをWASM化する実装 Deprecated 独⽴ 前ページの表

Slide 13

Slide 13 text

⼀番⽬の表の図解 13 Frontend/Mobile App web5-js (SDK) dwn-sdk-js (Local Node) dwn-server dwn-sdk-js (Remote Node) DWA

Slide 14

Slide 14 text

web5-js(SDK)内の各種npm package web5-js(SDK)内の依存関係の概略 14 agent api common cryto dids user-agent @decentralized-identity/ion-sdk @decentralized-identity/ion-pow-sdk credential dwn-sdk-js App いずれapiパッケージから参照される模様/ 機能的に発展途上 @sphereon/pex

Slide 15

Slide 15 text

api packageが提供する機能 15

Slide 16

Slide 16 text

⼤まかな全体像 16 Remote Node (マルチテナント) Local Node Local Node ION Remote Node did:ion:yyy did:ion:xxx 3.Sync 2. Send Messages(HTTPS POST) 1. DID Resolution Service Endpoint: Remote Node URL Protocol (Data Schema & Access Control) DWA FE/Mobile App 2-b. Write data to my own node. did:ion:yyy?service=DecentralizedWebNode&message=W3sgT...

Slide 17

Slide 17 text

API提供機能: 基本的な使い⽅ 1. Static MethodであるWeb5.connection(option)でweb5インスタンス⽣成 ● 内部でdid:ion作って、DWNを紐づける。 ● option ● Remote NodeのEndpoint情報 ● 後述するSyncの設定 ● Local Nodeのストレージ暗号化⽅式 2. web5インスタンスを操る。 ● web5.dwn.* ● Records(Messages): DIF DWN Spec 10.2 Interface - Records ● Protocols: DIF DWN Spec 10.3 Interface - Protocols ● web5.did.* ● did:ion, did:keyの⽣成 ● ↑でDWNコントール⽤did:ionは作るので、今のところVC、VP署名⽤のみ︖ ● web5.vc.* : VC、VP周り 17

Slide 18

Slide 18 text

API提供機能: web5.dwn.* 18 メソッド 概要 records.query(request) ⾃Node or 他Node(許可される場合)のRecord[]の取得 records.read(request) ⾃Node or 他Node(許可される場合)のRecordの取得 records.create(request) ⾃Node or 他Node(許可済みの場合)上にRecord作成 records.write(request) createのalias records.delete(request) ⾃Node or 他Node(許可される場合)上のRecord削除 protocols.query(request) ⾃Node or 他Nodeの特定のprotocolの設定内容を取得 procols.configure(request) ⾃Node or 他Node(許可される場合)の特定のprotocolの内容を設定 各メソッドのRequestの必須/オプションプロパティ及びResponseの内容は、GitHub開発ドキュメント参照

Slide 19

Slide 19 text

web5.dwn.write(request)のrequestオプション ● オプションの設定が肝になりそう︖ 19

Slide 20

Slide 20 text

Recordの暗号化 20 Recordを暗号化する対称鍵 対称鍵を暗号化するDID

Slide 21

Slide 21 text

Recordの暗号化(こんな形︖) 21 Remote Node Local Node App プライベートなデータの暗号化 1. 対称鍵⽣成 2. 対称鍵でRecordを暗号化 3. ⾃DIDで対称鍵を暗号化 4. Recordと暗号化済み対称鍵をLocal/Remote Nodeに書き込み 書き込み 同期

Slide 22

Slide 22 text

(現時点での)API提供機能: いずれweb5.vc.* 22 分類 機能 誰⽤ JWT-VC データ⽣成(未署名) Issuer 署名(ES256K or Ed25519) Issuer 検証(完全性、真正性) Verifier Presentation Exchange V2 Definitionを満たすVC抽出 Holder VCがDefinitionを満たすか検証 Holder VP⽣成 Holder Submissionの妥当性検証 Verifier VPの検証(Definitionに沿うか) Verifier GitHub: 開発ドキュメント

Slide 23

Slide 23 text

ポイントと疑問 ● ION DID ● DID作成に関して、ユーザ/App開発者は詳細に全く関わらなくて良い。 ● 疑問: SidetreeのUpdate, Recovery, Deactivate操作は︖ -> Identity Walletを使う? ● e.g. Remote NodeをAWSからGCPに引っ越ししたい場合は︖ ● Local Node ● デフォルトでは、Level DBに暗号化せずにデータ/鍵ペアを保管する。 ● In-browser NodeではIndexed DBにLocal Nodeが作られる。(FrontendのOriginで区分け) ● 疑問: 複数デバイスで同じApp/Data使いたい場合は︖どう複製︖ -> Identity Walletを使う? ● 疑問: Local Nodeのストレージ暗号化の実装は︖ ● 疑問: 企業はどうWeb5を使えばいい︖ ● Verifiable Credential周り ● SSI SDKに⽐べると機能不⾜に⾒える。(後述) ● 今のところHolderとしての役回り︖(後述) 23

Slide 24

Slide 24 text

● Web5.connect(option) ● option.appDataStore: AppDataStore(インターフェース) ● デフォルト実装: agent/app-data-store.ts内のAppDataVault Class Local Nodeのストレージ暗号化⽅式 24 App パスフレーズ 設定 AppDataVault#initialize 鍵ペア⽣成 鍵ペア パスフレーズ HKDF(公開鍵,..)⇨salt PBKDF2(salt, パスフレーズ)⇨KEK JWE protectedの⼀部: salt cipher text: 暗号化されたCEK 初期起動 CEK = 秘密鍵 XChaCha20Poly1305(KEK, CEK) JWEをLocal Nodeに保管 処理概略

Slide 25

Slide 25 text

業務システム 企業はどう使えばいい︖ (こんなイメージ︖) 25 Node.js App Remote Node Local Node (web5-js) 社員 / エンドユーザー 業務システム内の バックエンドアプリの1つ

Slide 26

Slide 26 text

Remote Node 26

Slide 27

Slide 27 text

⼤まかな全体像 27 Remote Node (マルチテナント) Local Node Local Node ION Remote Node did:ion:yyy did:ion:xxx 3.Sync 2-a. Send messages(HTTPS POST) 1. DID Resolution Service Endpoint: Remote Node URL Protocol (Data Schema & Access Control) DWA FE/Mobile App did:ion:yyy?service=DecentralizedWebNode&message=W3sgT... 2-b. Write data to my own node.

Slide 28

Slide 28 text

Remote Node概要 28 dwn-sdk-js Node.js (on container) dwn-server Level DB or SQLite MySQL or Postgres JSON-RPC API または ⾃Local Node 他Local Node 同期 メッセージ送信 (HTTPS) DID秘密鍵 秘密鍵はRemoteに同期しない (YouTube) SSI Meetup - Web5: Open to Build - Block/TBD

Slide 29

Slide 29 text

その他 ● Tech Previewでは、TBD社のRemote Nodeを使える。 ● ⾃分でも建てられる。 ● “どのDIDに対し⾃ノードとしての利⽤を許可するのか“ ● 基本オープン︖ ● ⾃分で対応しないといけない︖ ● 実際、誰がRemote Nodeを運⽤するの問題 ● ⾊々考えられる︓⾃分、友達、Remote Nodeサービス提供者、財団が建てた公共財 ● (YouTube) Web5: An open source decentralized web platform ● Remote Nodeを提供するサービサーは登場すると想定できる。 ● それによりDecentralizationの度合いは低下する。 ● そういったサービスはPublicなデータを集めて検索機能を作ったりするだろう。 29

Slide 30

Slide 30 text

Messages 30

Slide 31

Slide 31 text

⼤まかな全体像 31 Remote Node (マルチテナント) Local Node Local Node ION Remote Node did:ion:yyy did:ion:xxx 3.Sync 2-a. Send messages(HTTPS POST) 1. DID Resolution Service Endpoint: Remote Node URL Protocol (Data Schema & Access Control) DWA FE/Mobile App did:ion:yyy?service=DecentralizedWebNode&message=W3sgT... 2-b. Write data to my own node.

Slide 32

Slide 32 text

メッセージのフォーマット 32 target: アクセスするDWNのDID(必須) encodedData: Writeの場合のみ messageの中がDIF DWN 9.Messagesに則る dataCid: encodedDataのCID messageの外がJSON-RPCに則る recordID: (平たくいうと)descriptor -> DAG CBOR -> CID payload: descriptor -> DAG CBOR -> CID all Messages MUST be committed to an IPLD DAG in a tree allocated to the DID of the owner [出展] DIF DWN 9.Messages protected: alg, kid=DID

Slide 33

Slide 33 text

Sync 33

Slide 34

Slide 34 text

Web5のSync 34 Remote Node (マルチテナント) Local Node Local Node ION Remote Node did:ion:yyy did:ion:xxx 3.Sync 2-a. Send messages(HTTPS POST) 1. DID Resolution Service Endpoint: Remote Node URL Protocol (Data Schema & Access Control) DWA FE/Mobile App did:ion:yyy?service=DecentralizedWebNode&message=W3sgT... 2-b. Write data to my own node.

Slide 35

Slide 35 text

Hyperledger AriesのMessage Forwarding 35 Mediator (on cloud) App FW DIDComm(Mediation依頼) Holder Mobile App DIDComm(Forwarding) 初期起動でMediation依頼 (⽅式: Push) callback WebsocketでPush DIDComm受信 Mediator (on cloud) App FW DIDComm(Mediation依頼) Holder Mobile App DIDComm(HTTP Req) DIDComm受信 初期起動でMediation依頼 (⽅式: Pull) 滞留メッセージの取得 HTTP Resp Queue callback Polling App側で制御する DIDCommとしては例外的にHTTP Response でJWEデータを返却

Slide 36

Slide 36 text

Web5のSync(2つの⽅向) 36 Local Node Remote Node 同期 Web5側で執り⾏う(App/開発者側が深く関与しない) Local Node App データ書き込み Remote Node Local Node 1.メッセージ送信 2. 同期 Remote Node 2. 同期

Slide 37

Slide 37 text

Web5のSync ● Local -> Remote ● デフォルトでは2分に⼀度、HTTPS POSTで同期する(簡単に動かして確認済み) ● 調整可能 ● ConfigでLocal Node単位で同期間隔の調整 ● アプリ側から即時同期させる ● Remote -> Local ● 無い︖ Local -> Remote⽅向だけ︖(相⼿からの受信がない環境での検証だと) ● WebSocketでリアルタイム︖(DWN Server Configから推測) ● Local-Remoteが多:多の分散環境でどのような同期プロトコルなのかは不明 ● 各Nodeでの状態管理は前述のMerkle DAG? 37

Slide 38

Slide 38 text

Web5のSync: 即時同期が必要になるケース 38 Remote Node (マルチテナント) Local Node Local Node Remote Node 1. Tweet的メッセージ送信 2. すぐに同期 3. すぐにリプライ Chatアプリ 4. (2分後)No.1の同期 5. データ不整合発⽣

Slide 39

Slide 39 text

Protocol 39

Slide 40

Slide 40 text

⼤まかな全体像 40 Remote Node (マルチテナント) Local Node Local Node ION Remote Node did:ion:yyy did:ion:xxx 3.Sync 2-a. Send messages(HTTPS POST) 1. DID Resolution Service Endpoint: Remote Node URL Protocol (Data Schema & Access Control) DWA FE/Mobile App did:ion:yyy?service=DecentralizedWebNode&message=W3sgT... 2-b. Write data to my own node.

Slide 41

Slide 41 text

Protocol Definition 41 • ユーザー/アプリレベルでの肝になると思う。 • 相互運⽤性の鍵 • あるエコシステム内で異なるアプリが同じ Protocolを使うことが普及の鍵になると思う。 • 例) ⾳楽配信アプリ間で共通のプレイリストの Protocolを⽤意 structure: • 各typeの関係を構造化 • binaryImageはphotoの配下 $actions: • 各typeに対し誰が何をできるか • anyone, recipient, author: web5.dwn.*でのrequestに紐づく。 • album,photoはrecipient(=DID)に メッセージを送信する。 (Remote NodeにWriteする) • binariImage: 後から書き込めると⾔う意味︖ よくわからない。 JSON Schema? Remote Nodeへの︖

Slide 42

Slide 42 text

ION 42

Slide 43

Slide 43 text

⼤まかな全体像 43 Remote Node (マルチテナント) Local Node Local Node ION Remote Node did:ion:yyy did:ion:xxx 3.Sync 2-a. Send messages(HTTPS POST) 1. DID Resolution Service Endpoint: Remote Node URL Protocol (Data Schema & Access Control) DWA FE/Mobile App did:ion:yyy?service=DecentralizedWebNode&message=W3sgT... 2-b. Write data to my own node.

Slide 44

Slide 44 text

デフォルトのDID Method ● did:ion ● YouTube: Introducing did:dht - Our newest DID Method! ● 将来的に使わなくなる可能性あり ● MS撤退の動きを察知。 ● ⾃分達(TBD)で運⽤、難しい -> インフラコスト、Bitcoin⼿数料の問題︖ ● did:dht ● Distributed Hash Table ● 現状、仕様はTBD内で管理 ● IONのようにTXを積み重ねるのではなく、DID Docをそのまま保管する⽅式︖ ● 2001年からあるBitTorrent(P2Pファイル交換プロトコル/ソフトウェア) の既存ネットワーク?インフラ?であるMainline DHTを利⽤する 44

Slide 45

Slide 45 text

SSI Service、SSI SDK 45

Slide 46

Slide 46 text

TBD54566975内のWeb5関連リポジトリ群 46 リポジトリ 概要 ssi-service SSIに関する機能を提供するREST API Endpoints仕様 / KMSなどのConfig ssi-sdk 上記ssi-serviceが依存するSDK Goで実装 / 豊富な機能 ssi-sdk-wasm 上記ssi-sdkをWASM化する実装 Deprecated 独⽴ 前ページの表

Slide 47

Slide 47 text

SSI SDKの機能 ● DID Methods: web, key, jwk, pkh, peer ● VC Formats ● JWT-VC / SD-JWT ● LDP-VC (JSON Web Signature 2020 / BBS+ Signature) ● その他 ● DIF Credential Manifest ● DIF Presentation Exchange 2.0 ● W3C Status List 2021 ● W3C VC JSON Schema ● W3C Wallet Rendering 47 [出展]https://github.com/TBD54566975/ssi-sdk?tab=readme-ov-file #key-types--signature-algorithms

Slide 48

Slide 48 text

当初(2023/7)の推測 48 Frontend/Mobile App web5-js (SDK) dwn-sdk-js (Local Node) DWA ssi-sdk ssi-sdk-wasm (現在deprecated) JS環境にSSI機能提供 当初の計画はこうだった︖ 今はこの形は無くなった︖ WASM File It enables SSI functionality in the browser and other JavaScript environments by compiling the SDK to a WASM file. This repository is responsible for building the main.wasm file and making it available as an npm package. [出展]https://github.com/TBD54566975/ssi-sdk?tab=readme-ov-file#wasm

Slide 49

Slide 49 text

業務システム 典型的な使い⽅の形(Issuer/Verifier)︖ 49 Node.js App Remote Node Local Node (web5-js) SSI Service (REST API) SSI Serviceは企業に使われる︖ Issuer/Verifier向け︖ HolderはWeb5 SDK内の VC関連機能を使う︖ 利⽤ 社員 / エンドユーザー 業務システム内の バックエンドアプリの1つ VC発⾏⽤DID秘密鍵

Slide 50

Slide 50 text

web5-js(SDK)内の各種npm package 前述: credential packageの機能 50 agent api common cryto dids user-agent @decentralized-identity/ion-sdk @decentralized-identity/ion-pow-sdk credential dwn-sdk-js App いずれapiパッケージから参照される模様 / 機能的に発展途上

Slide 51

Slide 51 text

credential package、dids packageの提供機能 ● TBD54566975/sdk-development ● 実装済み ● Presentation Exchange 2.0 ● did:ion, did:keyのCreation/Resolution ● 実装予定 ● SD-JWTのCreation ● did:jwkのCreation/Resolution ● Holderとして機能できそう 51

Slide 52

Slide 52 text

Web5とTrust Triangle(総合するとこんな形︖) ● DWNのMessageでやりとり ● (DIF Credential Manifest/Presentation Exchangeは暗黙的にフローまで定義していると考える) 52 Issuer (Local/Remote Node) Holder (Local/Remote Node) Verifier (Local/Remote Node) 2. VC要求(Credential Application) 3. VC発⾏ (Credential Response(Fulfillment)) 1. オファー(Credential Manifest) 1. VP要求(Presentation Definition) 3. VP提⽰(Presentation Submission) SSI Service SSI Service Web5 JS SDK 2. 抽出(Definitionを満たすVC抽出) (署名) did:web ionのdid docはassertionMethod持って いなかったためとりあえず除外 (フォーマット) JWT-VC (署名) did:key, did:jwk, did:ion

Slide 53

Slide 53 text

Identity Wallet 53

Slide 54

Slide 54 text

TBD54566975内のWeb5関連リポジトリ群 54 リポジトリ 概要 web5-js アプリに対しAPIを提供するSDK (= Local Node) TypeScript、⼀番成熟 web5-kt 同上 Kotlin、2023/8から開発 web5-rs 同上? Rust、2023/11から開発 dwn-server Remote Nodeの実装 dwn-sdk-js web5-js / dwn-serverが依存するDIF DWN仕様の実装 sdk-developement 上記web5-{lang} SDKの実装状況を記す管理ドキュメント web5-wallet Identity Wallet?(後述)

Slide 55

Slide 55 text

Identity Wallet 55 DID管理 DID Doc 作成更新復旧 アプリへの割り当て VP提⽰ Protocol 定義︖ [出展]https://developer.tbd.website/files/Decentralized-Web-Platform.pdf

Slide 56

Slide 56 text

どう各アプリと連携するのか不明 56 DWA (Android) DWA (iOS) DWA (PWA) DWA (Browser on Mobile) Identity Wallet DWA (Browser on PC) DWA (Desktop)

Slide 57

Slide 57 text

最後に 57

Slide 58

Slide 58 text

本当はこれをやってから・・・ 58 Centralized Web App DWA

Slide 59

Slide 59 text

終わり ● 間違えているところ、違和感ある箇所があれば教えてください。 ● ︖ばかりですみません、⾜掛かりになる内容になったなら幸いです。 ● ご清聴ありがとうございました。 59