walrus-data-security について
walrus-data-securityは、WalrusとSealのセキュリティ特性や統合方法を解説するスキルです。開発者向けに、クライアント側暗号化、オンチェーンのアクセス制御、データ可用性、Nautilusによる安全なオフチェーン計算を説明します。
主な機能
- 01Walrusの可用性と完全性の保証を解説
- 02Sealによるクライアント側暗号化
- 03Moveベースのアクセス制御を説明
- 04Sealの設定と復号時の注意点を記載
- 05NautilusのTEE計算を紹介
活用シーン
- 01Walrusへの保存前に機密データを暗号化
- 02トークンゲートや時間制限付き復号の設定
- 03Sealのトランザクションや署名エラーの調査
- 04オフチェーン計算でのNautilusの検討
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ mystenlabs/ walrus-skills --skill walrus-data-securityインストール後、Claude Code で/walrus-data-securityを入力して読み込まれたか確認します。
同梱ファイルevals/evals.jsonseal-sdk.md
詳細
Walrus のデータセキュリティ
ソースの制約: このスキルの情報はすべて、 Walrus のデータセキュリティドキュメント および Seal SDK のドキュメントから取得しています。 このスキルを拡張する場合は、これらのソースのみを参照してください。
Walrus は、データの可用性と完全性をネイティブに保証します。機密性は保証しません。Walrus に保存されるデータはすべて公開され、誰でも発見できます。blob ID は秘密情報ではなく、blob を特定のノード、リージョン、管轄区域に固定する仕組みもありません。データの機密性を保つには、たとえば Seal を使って保存前にクライアント側で暗号化し、blob ID は公開情報として扱ってください。暗号化はユーザーの責任です。Walrus はアップロードされたあらゆるバイト列を保存し、提供します。
このスキルに記載されているパターンは、以下のすべてを参照しています。
- https://docs.wal.app/docs/data-security
- https://seal-docs.wal.app/
- https://www.npmjs.com/package/@mysten/seal
Seal または Walrus のセキュリティについて確信が持てない場合は、回答の前に該当するページを取得してください。
関連スキル
| トピック | スキル | 読み込むタイミング |
|---|---|---|
| blob の保存 | walrus-cli または walrus-ts-sdk | blob をアップロードするとき(暗号化後) |
| HTTP API | walrus-http-api | REST 経由で暗号化データを保存するとき |
| blob のライフサイクル | walrus-blob-lifecycle | 暗号化された blob の有効期間を管理するとき |
| Move との統合 | walrus-move-integration | Seal のオンチェーンアクセス ポリシーを設定するとき |
| トラブルシューティング | walrus-troubleshooting | Seal のエラーメッセージと解決方法を確認するとき |
参照ファイル
seal-sdk — Seal SDK 統合ガイド
パス: seal-sdk.md
読み込むタイミング: @mysten/seal TypeScript SDK を統合するとき、seal_approve Move 関数を作成するとき、キーサーバーのオブジェクト ID を設定するとき、暗号化/復号フローを実装するとき、または Seal 固有のエラー(セッション署名、送信者の不一致、しきい値未達)をデバッグするとき。
内容: SealClient の初期化、キーサーバー ID、暗号化/復号フロー、seal_approve Move 関数のパターン、アクセス制御のパターン(許可リスト、トークンゲート、時間ロック)、セッション署名、一般的なエラーの一覧、制限事項。
ルーティングガイド
| タスク | 読み込むもの |
|---|---|
| Walrus のセキュリティ保証を理解する | 以下のスキルコンテンツ |
| Walrus に保存する前にデータを暗号化する | seal-sdk.md |
| Move で Seal のアクセス ポリシーを作成する | seal-sdk.md |
| Seal の暗号化/復号エラーをデバッグする | seal-sdk.md |
| Nautilus の TEE 計算環境をセットアップする | 以下のスキルコンテンツ |
| Seal と独自の暗号化のどちらを使うか判断する | 以下のスキルコンテンツ |
スキルコンテンツ
主な概念
-
Walrus の blob はすべて公開されています。 blob ID を知っている人なら誰でも blob を取得できます。Walrus 自体には、ネイティブの暗号化機能やアクセス制御機能はありません。blob ID は秘密情報ではありません。
-
アップロード前に暗号化してください。 プライベートデータを保存するには、Walrus のストア操作を呼び出す前に、クライアント側で暗号化します。Walrus は暗号文を保存します。復号キーを持つ関係者だけが平文を読み取れます。
-
Seal。 1 つの当事者が復号キー全体を保持しない、しきい値暗号化システムです。誰がどのような条件で復号できるかを決定するオンチェーンアクセス ポリシー(Move スマートコントラクト)を定義します。Seal は Walrus および Sui ブロックチェーンと直接統合されます。
-
Nautilus。 信頼実行環境(TEE)を使用した安全なオフチェーン計算のためのフレームワークです。プライベートデータの処理、AI 推論、またはオンチェーン検証を伴う Web2 統合が必要なハイブリッドアプリには、Nautilus を使用してください。
データ可用性の保証
- 書き込みしきい値: シャードの 2/3 が誠実なストレージノードによって運用されていれば、Blob を書き込み、利用可能な状態に保つことができます。
- 読み取りしきい値: データの書き込み後は、ノードの 1/3 しか利用できない場合でも読み取りが可能です。
- 可用性確認時点(PoA): Sui イベントを通じて確認できます。PoA より前は、Blob の可用性に対する責任はお客様にあります。PoA 以降は、Walrus がストレージ期間全体にわたって可用性を維持します。
- 不整合証明: Blob が誤ってエンコードされている場合、ストレージノードは不整合証明を生成し、読み取り結果は
Noneになります。正しく保存された Blob に対して、誤った不整合証明が生成されることはありません。
データ主権とデータ所在地
Walrus では、データを保持するストレージノードや地理的リージョンを選択できません。Blob は消失訂正符号化によってスライバーに分割され、すべてのシャードに分散されます。また、Sui のスマートコントラクトがシャードをストレージノードに割り当てます。すべての Blob は公開され、その配置を制御できないため、個人データや規制対象データを暗号化せずに Walrus に保存しないでください。まず暗号化し、平文と鍵は Walrus の外部に保管し、恒久的に公開してもよいデータのみを保存してください。
データ整合性### データ整合性
Walrus は、読み取ったデータがアップローダーの意図したデータと一致することを保証します。エンコードはクライアント側で行われるため、誤って、または意図的に、誤ったエンコードが行われる可能性があります。一貫性チェックの仕組み(デフォルトおよび厳格)がこれを検出し、対処します。
Seal:オンチェーンアクセス制御を備えたしきい値暗号化
Walrus のドキュメントでは、クライアント側で暗号化する方法の 1 つとして Seal を紹介しています。以下の内容はすべて Seal の公式ドキュメントを参照してください。
Seal が提供する機能:
- しきい値暗号化: 単一の当事者が完全な復号鍵を保持することはありません。
- オンチェーンアクセスポリシー: Move スマートコントラクトによって、誰がどのような条件で復号できるかを定義します。
- Walrus とのシームレスな連携: ローカルで暗号化し、暗号文を Walrus に保存し、Sui 上でアクセスルールを定義します。
Seal のユースケース
- 機密性の高いオフチェーンコンテンツ:ユーザードキュメント、ゲームアセット、プライベートメッセージ
- 時間制限付き、またはトークン保有者限定のデータ
- 信頼できる当事者やロール間で共有されるデータ
インストール
npm install @mysten/seal
Seal SDK の初期化
import { SealClient } from '@mysten/seal';
import { SuiClient } from '@mysten/sui/client';
const suiClient = new SuiClient({ url: getFullnodeUrl('mainnet') });
const sealClient = new SealClient({ suiClient, network: 'mainnet' });
重要:トランザクション送信者を設定する
Seal のポリシーチェック用にプログラマブルトランザクションブロック(PTB)を構築する際は、PTB を Seal に渡す前にトランザクション送信者を設定してください。送信者は、復号アクセスを要求するアドレスと一致している必要があります。
tx.setSender(address);
送信者が指定されていない場合、または一致しない場合、Transaction was not signed by the correct sender というエラーが発生し、復号に失敗します。
ウォレットセッション署名
Seal による復号には、ウォレットで複数のトランザクションに署名する必要があります。一部のウォレットは、承認プロンプトの繰り返しを避けるためのセッション署名に対応しています。接続中のウォレットがセッション署名に対応していない場合、Connected wallet does not support Seal session signing が表示されます。その場合、ユーザーは署名ごとに個別に承認するか、セッションに対応した別のウォレットを使用する必要があります。
Nautilus:安全なオフチェーン計算
Nautilus を使用すると、スマートコントラクトによる検証を通じてオンチェーンの信頼性を維持しながら、機密性の高いタスクやリソースを大量に消費するタスクを、セルフ管理の信頼実行環境(TEE)に委任できます。
- 現在、セルフ管理の AWS Nitro Enclave TEE に対応しています
- アテステーションは Move スマートコントラクトを使用してオンチェーンで検証されます
- 用途:信頼できるオラクル、AI エージェント、DePIN、不正防止、ID 管理
利用を開始するには:https://docs.sui.io/concepts/cryptography/nautilus/using-nautilus
ルール
- Walrus にアップロードする前に、機密データは必ず暗号化してください。 Walrus が保証するのは可用性と完全性であり、機密性ではありません。サーバー側の暗号化機能はなく、データの配置先を制御することもできません。
- Blob ID は秘密情報ではありません。 Blob ID を知っている人は誰でも、blob の内容を取得できます。セキュリティを確保するのは暗号化であり、難読化ではありません。
- オンチェーンのアクセス制御には Seal を使用してください。 ブロックチェーンの状態(トークンの所有権、タイムロック、ロールへの所属など)に復号を連動させたい場合は、Seal が推奨されるソリューションです。
- Seal PTB を使う前に
tx.setSender(address)を設定してください。 sender が未設定、または不一致の場合、復号に失敗します。 - 削除してもプライバシーが保証されるわけではありません。 削除後も、キャッシュ、過去のストレージノード、ユーザーによるダウンロードにコピーが残っている可能性があります。信頼できるプライバシー保護の仕組みは暗号化のみです。
よくある間違い
- 機密データを暗号化せずに Walrus に保存する。 すべての blob は公開されています。暗号化しなければ、誰でも読むことができます。
- Blob ID を秘密だと思い込む。 Blob ID はコンテンツから導出される決定的な値です。コンテンツを持っている人は Blob ID を計算できます。Blob ID を持っている人はコンテンツを取得できます。
- Seal のトランザクションで
tx.setSender()を忘れる。 Seal に渡す前に、PTB で sender を明示的に設定する必要があります。これは Seal の統合で最もよくあるエラーです。 - プライバシー保護のために削除に頼る。 削除によって現在または今後のストレージノードからスライバーは削除されますが、キャッシュ、過去のノード、他者が作成したコピーには影響しません。まず暗号化してください。
- Seal を Walrus 固有の暗号化機能と混同する。 Walrus 自体には暗号化機能がありません。Seal は Walrus と連携して動作する別のシステムです。
Connected wallet does not support Seal session signing。 すべてのウォレットが Seal のセッション署名プロトコルに対応しているわけではありません。ウォレットの互換性を確認するか、署名ごとに手動で承認する方法を実装してください。- HIPAA/PHI や政府の機密指定データに Seal を使用する。 Seal は高度な規制の対象となるデータ向けには設計されていません。その脅威モデルでは、キーサーバー間のしきい値信頼を前提としており、規制要件を満たさない可能性があります。
- Seal のキーサーバーオブジェクト ID を指定しない。 Seal クライアントには、対象ネットワークに対応する正しいキーサーバーオブジェクト ID が必要です。これらは testnet と mainnet で異なります。最新の値はSeal のドキュメントで確認してください。