Sui と Walrus でどう作られているか(zkLogin・分散ストレージ・E2E暗号化の実例)

ページを読み込んでいます。下に本文があります。


Sui と Walrus でどう作られているか(zkLogin・分散ストレージ・E2E暗号化の実例)

保存されるまでの流れ

  1. ブラウザの中でデータを暗号化する。鍵は端末から出ない。
  2. 暗号文を Walrus の方式(Reed–Solomon の消失訂正符号)で分割・符号化する。
  3. Sui 上で register トランザクションを実行し、保存する枠(Storage)と Blob を確保する。
  4. 符号化した断片をアップロードリレー経由で Walrus のストレージノードへ配る。
  5. ノードから集めた署名(BLS)を証明として、Sui 上で certify トランザクションを実行し保存を確定させる。

なぜブロックチェーンと分散ストレージなのか

一般的な業務ツールは、入力したデータを運営会社のサーバーに預けます。便利な反面、運営会社が中身を見ることができ、サービスが終了すればデータの取り出し先も失われます。

このサイトは逆の設計にしています。データは端末の中で暗号化してから外に出るため、サーバーやブロックチェーン上にあるのは暗号文だけです(運営者が復号できるかはログイン方法で変わります。下のよくある質問を参照)。保存先は特定企業のサーバーではなく Walrus という分散ストレージで、保存した記録は Sui というブロックチェーン上に残ります。サイト自体も Walrus Sites 上で配信しており、フロントエンドまで含めて特定のホスティング業者に依存していません。

  • 端末で暗号化 … 暗号化はブラウザの WebCrypto で行い、平文がネットワークに出ることはありません。
  • データ主権 … いつでも全ツールのデータを JSON へ書き出せます(画面上部のバックアップ)。
  • ローカルファースト … 正本は端末側。ネットワークが不調でも操作は止まりません。

zkLogin — 秘密鍵もシードフレーズも使わないログイン

Web3 アプリの最大の障壁は「ウォレットを作り、12個の単語を安全に保管させる」ことです。業務ツールとしては現実的ではありません。

このサイトは Sui の zkLogin を使い、Google アカウントでログインするだけでブロックチェーン上のアドレスが使える状態にしています。利用者はシードフレーズを一度も見ませんし、書き写す必要もありません。ゼロ知識証明によって、Google のアカウントとブロックチェーン上のアドレスの結び付きは公開されません。

ウォレットをすでにお持ちの方は、ウォレット接続(SIWS)でログインすることもできます。この場合、暗号鍵の材料は運営側に存在しないため、運営者は復号できません。

ガス代を利用者に負担させない(スポンサードトランザクション)

ブロックチェーンへの書き込みには手数料(ガス代)がかかります。業務ツールを使うたびに暗号資産を用意させるのは無理があります。

そこで保存に必要な Sui のガス代と、Walrus の保存料(WAL)は運営側が負担しています。利用者は暗号資産を一切持たずに、ブロックチェーンへの保存を使えます。署名も運営側の鍵で行うため、保存のたびに承認ダイアログが出ることもありません。

1ユーザー=1ブロブにまとめている理由

Walrus は保存するデータを消失訂正符号で 1000 前後のシャードに分散します。この仕組み上、どんなに小さいデータでも符号化後のサイズには下限があり、ブロブ 1 個あたり数十MB分の枠を確保することになります。

ツールごとに別々のブロブへ保存すると、この下限をツールの数だけ支払うことになります。そこで全ツールのデータを 1 つのバンドルにまとめ、利用者 1 人につきブロブ 1 個で保存しています。保存のたびに、まずリモートの最新バンドルを取得し、ツール単位の更新時刻で突き合わせてから書き戻します。別の端末が直前に保存した他ツールのデータを巻き戻さないためです。

保存枠を使い捨てにせず再利用する

保存するたびに新しい枠を買っていると、古いブロブが期限まで枠を占有し続けます。そこで自動同期のブロブは削除可能な形で登録し、新しい保存が確定した時点で古いブロブを削除して枠(Storage)を回収し、次回の保存で再利用しています。

回収と確定は同じトランザクションにまとめてあります。ただし回収側が失敗したときに保存そのものを巻き添えにしないよう、失敗時は保存だけを単独でやり直す二段構えにしています。保存の成功率を、節約より優先するという判断です。

こんな方に

Sui や Walrus を実際のプロダクトでどう使うのか、動いている例を見たい開発者の方。また「自分のデータを特定の会社に預けたくない」という理由でツールを選びたい方。

正直に書いておくこと

クラウドへの複製は 20〜30 秒かかります。ブロックチェーン上の確定処理を2回挟むためで、Web2 のような一瞬にはなりません。ただし入力したデータ自体は端末内(IndexedDB / localStorage)へ即座に保存されるため、その時点で失われません。クラウドは「他端末との同期と長期バックアップ」の役割です。また共有リンク(PDF共有・電子ブック)は復号鍵を URL の # 以降に載せる方式なので、リンクを渡した相手は誰でも閲覧できます。リンクの取り扱いにはご注意ください。

よくある質問

Q. 運営者はデータを見られますか?

A. ログイン方法によって違います。ウォレット接続、またはGoogleログインで合言葉を設定した場合は、暗号鍵の材料が運営側に存在しないため、運営者も見られません。Googleログインで合言葉を設定していない場合は、鍵の材料の一部を運営側で保持しているため、技術的には復号できる状態です(合言葉を設定すると、運営者にも復号できなくなります)。どの場合も、サーバーやブロックチェーン上に置かれるのは暗号文だけです。ただし共有リンクとして公開したもの(PDF共有・電子ブック)は、リンクを知っている人が閲覧できる状態になります。

Q. 暗号資産やウォレットは必要ですか?

A. 不要です。Google アカウントでログインするだけで使えます(Sui の zkLogin)。保存にかかるガス代と保存料は運営側が負担しているため、利用者が暗号資産を用意する必要はありません。

Q. シードフレーズの管理は必要ですか?

A. 必要ありません。zkLogin では秘密鍵を利用者が保管しないため、12単語を書き写して金庫にしまう、といった作業は発生しません。

Q. なぜ保存に 20〜30 秒かかるのですか?

A. ブロックチェーン上での確定処理を 2 回(登録と確定)挟み、その間にデータを符号化して複数のストレージノードへ配っているためです。自社サーバーに 1 行書き込むだけの一般的なサービスとは処理量が違います。ただし端末内への保存は一瞬で終わっており、クラウドへの複製は裏で進むため、待っている必要はありません。

Q. サービスが終了したらデータはどうなりますか?

A. データは端末の中にも残っており、画面上部のバックアップからいつでもJSON ファイルへ書き出せます。また Walrus 上のデータは特定企業のサーバーではなく分散したストレージノードが保持しています。ただし保存には期限があり、期限を過ぎたものは失われます。長期保存を前提にする場合は JSON バックアップを併用してください。

Q. どのネットワークを使っていますか?

A. Sui の mainnet と、その上の Walrus(mainnet)です。テストネットではありません。

関連ページ

このサイトについてEnglish versionセキュアファイル共有利用規約・プライバシー