Docswellを使いましょう

(ダウンロード不可)

関連スライド

各ページのテキスト
2.

About ME 樅山翔大 B3 九州大学 工学部地球資源システム工学科 趣味:サッカー, 海外旅

3.

本当の長期のデータ保存 とは? 何かを20年、50年、あるいは200年保存したい場合、どのような選択肢がありますか? インターネット? Google? Amazon? Dropbox? 毎月の支払いを無限に続ける? Webは常に「一時的」な性質 永久に残ると思っていたファイルは失われる

4.

分散型ストレージ とは? データを複数のコンピューターや分散型ネットワークに分散して保存するストレージ (https://www.mdpi.com/2071-1050/16/17/7671)

5.

Arweave とは? 一度限りの支払いで 永続的なデータの保存 インセンティブ ブロックウィーブ (ブロックチェーン)

6.

モチベーション 分散型ストレージを GoogleDriveやDropboxのように

7.

課題の背景 Arweave Network 集中型ストレージ (クラウドストレージetc) 単純にtxIdの先着順 データに簡単にアクセスできない! ネイティブではフォルダ構造を作る機能がない

8.

現在のArweave抽象レイヤーのメインストリーム フォルダ構造 リンクによる ファイル共有 一度限りの支払い

9.

課題の背景 実際のURL https://app.ardrive.io/#/drives/15fe2893-57b7-4629-ba8871a77794d4b5?name=My+File&driveKey=OZVGKZn6HdfGoP 6TvNRnKytoMOU0GdV1ySRyvDzWyuQ ベースURL: https://app.ardrive.io/#/ ドライブID: drives/15fe2893-57b7-4629-ba88-71a77794d4b5 ファイル名: name=My+File 暗号化キー: driveKey=OZVGKZn6HdfGoP6TvNRnKytoMOU0GdV1ySRyvDzW yuQ 暗号化キーを共有せずにフォルダを共有する簡単で柔軟な方法が必要!

10.

CryptoShepherdsプロトコルのポジション データベースとしての分散型ストレージを取り巻くレイヤー構造 アプリケーション層 ココ! 機能拡張層 ・高速アクセス ・検索(インデックス) ・アクセス制御 ・データ管理UI ・データ分析 ・アプリケーション統合(SDK, API) データ同期 基盤層=分散型ストレージ(例 Arweave, IPFS, FileCoinなど) 永続的なデータ保存・冗長性・耐検閲性

11.

分散型鍵管理 データ共有 フォルダ共有 暗号化キー共有

14.

自分のデータの保存

15.

フォルダの共有

16.

デモ動画

17.

自分のデータの保存 /path 作りたいフォルダの パスを指定するだけ fn createFolder('/path/to/folder'); ・フォルダ ・取り出したいデータ を指定するだけ /path/to fn loadData('/path/to/folder', 'filename'); /path/to/folder hello.txt ・保存先のフォルダのパス ・保存するデータの名前 ・保存するデータ を指定するだけ fn saveData('/path/to/folder', 'filename', data);

18.

フォルダの共有(現在実装中) 復号条件の作成 /path decryptionCondition 条件満たす or not /path/to 暗号化キーの共有が不要! /path/to/folder fn shareFolder('/path/to/folder', decryptionCondition); DKG(分散型鍵生成) hello.txt ・共有するフォルダ ・フォルダを見るための条件 を指定するだけ

19.

システム概要 Assumption (システムが正しく動く前提) クライアントサイドのコンピューテーション, メモリが十分にセキュアであること Lit Protocol EVM 検証 分散型 鍵管理 データ所有権の管理 暗号化データのハッシュ管理 分散型鍵生成(DKG) 分散型アクセス制御(DAC) プログラマブルキーペア(PKP) クライアント 処理 データの対称鍵暗号化(AES) 暗号化された鍵の管理 分散ストレージ(Arweave)への暗号文保存 データ所有者がデータの取得

20.

クライアントサイド 鍵をメモリ上に残さず、使ったら即削除して、再導出をするメカニズム 対称鍵ベースの階層的暗号化構造によるフォルダ構造の作成 暗号技術選定 ・対称鍵暗号化:AES標準を採用 暗号化と復号に使う鍵が同じ! ・公開鍵暗号化:ECIES標準を採用 暗号化と復号に使う鍵が異なる!

21.

クライアントサイド マスターキー 所有 Arweaveストレージ 公開鍵 秘密鍵 ペア 保存 = 取得 保存 GlobalKey = メモリから消去 ・・・ 保存 GroupKey データ取得時は 再導出が可能 メモリから消去 DataKey メモリに鍵を残さないため、 所有者が保持するマスターキー以外 復号のための鍵が存在しない! メモリから消去 × 保存するデータ 保存

22.

対称鍵ベースの階層的暗号化構造によるフォルダ構造の作成 階層的な暗号化アルゴリズムとアクセス粒度 c(E) Lc k(E) L3 全データの所有権(アクセス権)を 扱うレイヤー Enc(k(E);k(,3)) c(i,3) 全データのアクセス権を 扱うレイヤー c(i+1,3) GlobalKey Enc(k(,3);k(i,2)) L2 k(,3) c(1,2) Enc(k(,3);k(p,2)) c(n,2) k(,3) c(p+1,1) c(p,2) GroupKey Enc(k(i,2);k(1,1)) k(i,2) Enc(k(i,2);k(n,1)) k(i,2) k(i+1,2) Enc(k(i+1,2);k(p,2))) L1 c(1,1) k(1,1) 入力 Enc(k(1,1);m(1)) k(n,1) Enc(k(n,1);m(n)) m(1) ・・・ m(n) Enc(k(i+1,2);k(p+1)) c(p,1) c(n,1) DataKey k(i+1,2) データグループ (フォルダ)の アクセス権を 扱うレイヤー c(p+1,1) k(p,1) Enc(k(p,1);m(p)) k(p+1,1) m(p) m(p+1) 個々のデータ (ファイル)の アクセス権を 扱うレイヤー

23.

システム概要 Assumption (システムが正しく動く前提) クライアントサイドのコンピューテーション, メモリが十分にセキュアであること Lit Protocol EVM 検証 分散型 鍵管理 データ所有権の管理 暗号化データのハッシュ管理 階層的復号プロセスのトラッキング 分散型鍵生成(DKG) 分散型アクセス制御(DAC) プログラマブルキーペア(PKP) クライアント 処理 データの対称鍵暗号化(AES) 暗号化された鍵の管理 分散ストレージ(Arweave)への暗号文保存 データ所有者がデータの取得

24.

EVMパート Proxyコントラクトによるユーザーごとの状態管理 検証のための必要情報をEVMにストレージするスキーマ構造

25.

Proxyコントラクトによるユーザーごとの状態管理 ERC-7546:Upgradeable Clone Standard(UCS)採用 Dictionary mapping(bytes4 => address) delegate call あるコントラクトが 他のコントラクトの関数を呼び出す時 呼び出し元コントラクトの状態を そのまま保持する get implementation address Factory Proxy Function A Schema Dict address clone User_A Proxy ユーザーごとの状態 =Schema(スキーマ)で管理 User_B delegate call Function B Function C

26.

検証のための必要情報をEVMにストレージするスキーマ構造 ココ! Proxy Schema Dict address

27.

システム概要 Assumption (システムが正しく動く前提) クライアントサイドのコンピューテーション, メモリが十分にセキュアであること Lit Protocol EVM 検証 分散型 鍵管理 データ所有権の管理 暗号化データのハッシュ管理 階層的復号プロセスのトラッキング 分散型鍵生成(DKG) 分散型アクセス制御(DAC) プログラマブルキーペア(PKP) クライアント 処理 データの対称鍵暗号化(AES) 暗号化された鍵の管理 分散ストレージ(Arweave)への暗号文保存 データ所有者がデータの取得

28.

暗号化キーの共有不要なフォルダ共有 とは? 暗号化プロセス 暗号化 復号 暗号化 分散型鍵管理ネットワーク プログラマブルキーペア フォルダ 復号プロセス アクセス条件 3. DKG(分散型鍵生成) 2. OK! 1. チェック 4. 復号

29.

暗号化キーの共有不要なフォルダ共有 階層的な暗号化アルゴリズムとアクセス粒度 c(E) Lc OwnershipNFT L3 × k(E) Enc(k(E);k(,3)) c(i,3) プログラマブルキーペア c(i+1,3) GlobalKey Enc(k(,3);k(i,2)) L2 k(,3) c(1,2) Enc(k(,3);k(p,2)) c(n,2) k(PE) k(,3) c(p+1,1) c(p,2) GroupKey Enc(k(i,2);k(1,1)) k(i,2) Enc(k(i,2);k(n,1)) k(i,2) k(i+1,2) Enc(k(i+1,2);k(p,2))) L1 c(1,1) k(1,1) Cpkp 全データへ のアクセス k(i+1,2) Enc(k(i+1,2);k(p+1)) k(PE) Cpkp 特定データ グループへ のアクセス c(p,1) c(p+1,1) k(PE) Cpkp 特定のデー Enc(k(1,1);m(1)) k(n,1) Enc(k(n,1);m(n)) k(p,1) Enc(k(p,1);m(p)) k(p+1,1) Enc(k(p+1,1);m(p+1)) タへの c(n,1) アクセス 入力 m(1) ・・・ m(n) DataKey m(p) m(p+1)

30.

ご清聴ありがとうございました。