mcpField
W
walrus-data-security

walrus-data-security

github.com/mystenlabs安全343 次安装1 周前更新
代码仓库

关于 walrus-data-security

walrus-data-security 是介绍 Walrus 和 Seal 安全属性及集成模式的技能,面向开发者说明客户端加密、链上访问策略、数据可用性,以及使用 Nautilus 进行安全链下计算。

主要功能

  1. 01说明 Walrus 的可用性和完整性保证
  2. 02介绍使用 Seal 进行客户端加密
  3. 03描述基于 Move 的访问策略
  4. 04记录 Seal 配置与解密常见问题
  5. 05介绍 Nautilus TEE 计算

适用场景

  1. 01在将敏感数据存入 Walrus 前加密
  2. 02设置代币门控或限时解密
  3. 03排查 Seal 交易和签名错误
  4. 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 会存储并提供你上传的任何字节。

本技能中的所有模式均源自:

如果不确定 Seal 或 Walrus 的安全性,请在回答前获取相关页面。


相关技能

主题技能加载时机
存储 blobwalrus-cli 或 walrus-ts-sdk上传 blob(加密后)
HTTP APIwalrus-http-api通过 REST 存储加密数据
Blob 生命周期walrus-blob-lifecycle管理加密 blob 的生命周期
Move 集成walrus-move-integrationSeal 的链上访问策略
故障排查walrus-troubleshootingSeal 错误消息及修复方法

参考文件

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。**一种阈值加密系统,没有任何单一参与方持有完整的解密密钥。你可以定义链上访问策略(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 文档将 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 Agent、DePIN、防欺诈、身份管理

开始使用:https://docs.sui.io/concepts/cryptography/nautilus/using-nautilus

规则
  1. 上传到 Walrus 前,务必加密敏感数据。 Walrus 保证可用性和完整性,但不保证机密性。它不提供服务器端加密,也无法控制数据存放的位置。
  2. Blob ID 不是秘密。 任何拥有 Blob ID 的人都可以获取 Blob 内容。安全性来自加密,而不是隐匿。
  3. 使用 Seal 实现链上访问控制。 如果你希望解密权限与区块链状态(代币所有权、时间锁、角色成员身份)绑定,建议使用 Seal。
  4. 在 Seal PTB 前设置 tx.setSender(address)。 未设置或设置的发送方不匹配,都会导致解密失败。
  5. 删除并不能保证隐私。 即使删除了,缓存、曾经的存储节点或用户下载内容中仍可能存在副本。加密是唯一可靠的隐私保护机制。
常见错误
  • 在 Walrus 上存储未加密的敏感数据。 所有 Blob 都是公开的。未加密时,任何人都可以读取。
  • 误以为 Blob ID 是秘密。 Blob ID 是根据内容确定性生成的。如果有人拥有内容,就可以计算出 Blob ID;如果拥有 Blob ID,就可以获取内容。
  • 在 Seal 交易中忘记调用 tx.setSender()。 必须先在 PTB 上显式设置发送方,再将其传递给 Seal。这是最常见的 Seal 集成错误。
  • 依赖删除来保护隐私。 删除会从当前及未来的存储节点移除分片,但不会影响缓存、过去的节点或他人制作的副本。请先加密。
  • 将 Seal 与 Walrus 原生加密混为一谈。 Walrus 本身没有加密功能。Seal 是一个独立系统,可与 Walrus 配合使用。
  • Connected wallet does not support Seal session signing。 并非所有钱包都支持 Seal 的会话签名协议。请检查钱包兼容性,或实现逐个签名的手动审批。
  • 将 Seal 用于 HIPAA/PHI 或政府机密数据。 Seal 并非为高度受监管的数据而设计。其威胁模型假定密钥服务器之间存在阈值信任,这可能无法满足监管要求。
  • 未指定 Seal 密钥服务器对象 ID。 Seal 客户端需要目标网络对应的正确密钥服务器对象 ID。测试网和主网使用的 ID 不同。请查看 Seal 文档获取当前值。

评论

支持 Markdown