SuperAPI AI 工具集

encrypted-maps

安全与审计

查看项目

更新于 10-16 05:05

技能介绍

用途:为 canister 添加访问控制、端到端加密的键值存储,适合密码管理器、加密笔记、保险库等应用。每个 map 由 (mapOwner, mapName) 标识,包含 mapKey → 加密值条目;mapName 与 mapKey 均为字节数组,各不超过 32 字节。

主要能力:值在客户端用 vetKey 加密,canister 只存密文并执行访问控制。权限分 Read、ReadWrite、ReadWriteManage(可授予/撤销他人),所有者始终拥有全部权限。共享 map 时会自动为新用户重新加密 map key。

使用方式:Rust 后端用 ic-vetkeys 0.9 的 export_encrypted_maps_canister! 宏,传入域分隔符和四个 Memory 实例;Motoko 用 ic-vetkeys 0.6 的 EncryptedMapsCanister mixin(需 moc ≥ 1.13.0、core ≥ 2.6.1)。前端用 @icp-sdk/vetkeys 0.7 的 encrypted_maps 模块,配合 @icp-sdk/core 的 agent/identity。生成器会产出 #[init]/#[post_upgrade]、稳定状态和前端期望的全部端点,不要手写约 200 行委托代码。

限制与注意:域分隔符和 vetKD key name 一旦有数据便不可更改,否则已存值无法解密;Motoko 中 VETKD_KEY_NAME 在首次安装时写入稳定状态,后续升级修改会被忽略。自 0.5.0 起派生密钥材料默认仅存内存,需持久化可传 IndexedDbDerivedKeyMaterialCache,登出时调用 clearCache()。AccessRights 是 Candid variant,如 { ReadWrite: null }。vetkd_derive_key 消耗 cycles,需保持 canister 有余额。KeyManager 是更底层方案,目前无现成 canister 生成器,需手动接线。部署与验证细节参见 icp-cli skill。