ClawMemory 安全审计与备份方案 v1.0.0
ClawMemory 遵循以下安全设计原则:
原则
实现
本地优先(Local-First)
所有数据存储在本地,云端上传架构禁用
零信任(Zero Trust)
所有访问均需授权验证
最小权限(Least Privilege)
默认使用最高隐私限制,按需降级
纵深防御(Defense in Depth)
多层安全机制叠加
隐私设计(Privacy by Design)
隐私分级物理隔离
+------------------------------------------+
| 密码(用户输入) |
+------------------------------------------+
|
v
+------------------------------------------+
| PBKDF2-SHA256 |
| - 100000 次迭代 |
| - 32 字节输出(256-bit AES密钥) |
| - Salt: 32 字节随机数 |
+------------------------------------------+
|
v
+------------------------------------------+
| AES-256-GCM |
| - AEAD 认证加密 |
| - Nonce: 96-bit 随机(每条记忆不同) |
| - Tag: 128-bit 认证标签 |
+------------------------------------------+
|
v
+------------------------------------------+
| 存储格式: base64(nonce || ciphertext) |
| 每条记忆独立加密,独立 nonce |
+------------------------------------------+
项目
实现
密钥生成
PBKDF2-SHA256 从密码派生
密钥存储
本地 .key 文件,机器特征绑定
密钥迁移
导出 salt 文件 + 新密码重新派生
密码验证
PBKDF2 验证令牌(不存储密码)
盐值备份
.salt.backup 自动创建
machine_id = hashlib .sha256 (
f"{ COMPUTERNAME } { USERNAME } { CWD } " .encode ()
).hexdigest ()[:16 ]
protected_key = key + machine_id .encode ()
# 密钥文件: key[0:32] + machine_id[32:48]
在另一台机器上无法使用同一密钥文件,需通过密码重新派生。
data/store/
memory.db <- PUBLIC / INTERNAL / PRIVATE
strict/ <- STRICT 级别专属存储
acl.json <- STRICT 记忆的访问授权
[encrypted] <- STRICT 记忆的加密数据
访问者
PUBLIC
INTERNAL
PRIVATE
STRICT
所有者Agent
R/W
R/W
R/W
R/W
同Agent会话
R
R
X
X
其他Agent
R
X
X
X
授权用户
R
R
R
R(需ACL)
导出(脱敏)
R
R
R*
X
X = 拒绝访问, R = 只读, W = 读写, R* = 脱敏后导出
系统自动检测以下敏感信息类型:
类型
模式
默认隐私
PASSWORD
密码: 或 pass: 后面内容
STRICT
ID_CARD
身份证: 后面内容
STRICT
PASSPORT
护照: 后面内容
STRICT
BANK_CARD
16-19位数字序列
PRIVATE
ID_NUMBER
6位数字(身份证号)
PRIVATE
FINANCIAL
金额+账户信息
PRIVATE
HEALTH
病历/病史关键词
PRIVATE
HOME_ADDRESS
家庭地址: 后面内容
PRIVATE
PHONE
手机号(1[3-9])
INTERNAL
EMAIL
邮箱地址
INTERNAL
字段
说明
是否含敏感内容
id
记录ID
否
memory_id
记忆ID
否
action
操作类型
否
actor
操作者
否
timestamp
时间戳
否
privacy_level
隐私级别
否
fields_accessed
访问的字段列表
否
session_id
会话ID
否
根据安全设计,以下内容永不 记录到审计日志:
记忆内容(加密后或解密后)
记忆的明文预览
访问授权的具体权限细节
用户输入的密码
操作
说明
READ
读取记忆内容
WRITE
创建新记忆
UPDATE
更新记忆
DELETE_SOFT
软删除
DELETE_HARD
永久删除
EXPORT
导出记忆
GRANT
授予访问权限
REVOKE
撤销访问权限
RESTORE
恢复软删除
python cli/main.py compliance
输出:
报告生成时间
总记忆数量
按隐私分级统计
活跃访问授权数量
STRICT 级别记忆数量
合规状态(PASS / REVIEW / FAIL)
状态
条件
PASS
所有 STRICT 记忆均有有效授权记录
REVIEW
存在无授权的 PRIVATE/STRICT 记忆
FAIL
检测到安全配置异常
data/backup/
backup_20260329_180000.db <- 时间戳备份
backup_20260328_180000.db
backup_20260327_180000.db
...
备份原则:
增量备份:每次备份只包含变更(SQLite VACUUM)
加密存储:备份文件与主数据同等加密
保留周期:建议保留最近 30 天
# 立即备份
python cli/main.py backup
# 定时备份(cron)
# 每天凌晨2点自动备份
cron add --name " ClawMemory daily backup" \
--schedule " cron:0 2 * * *" \
--payload " agentTurn: python cli/main.py backup"
# 导出为便携式JSON(自动脱敏私密内容)
python cli/main.py export ~ /claymemory_backup.json
# 导出指定日期范围的记忆
python cli/main.py export backup.json --after 2026-01-01 --before 2026-03-01
# 从备份文件恢复
python cli/main.py import ~ /clawmemory_backup.json
# 从时间戳数据库备份恢复
# 1. 停止当前ClawMemory进程
# 2. 备份当前数据库
# 3. 复制备份文件到 data/store/memory.db
# 4. 重启进程
[ ] 定期验证备份文件完整性(至少每月一次)
[ ] 测试从备份恢复流程(至少每季度一次)
[ ] 确认密钥文件有安全备份(不在同一设备)
[ ] 记录加密密码的安全存放位置
[ ] 定期检查审计日志是否有异常访问
威胁
防御机制
本地文件窃取
AES-256-GCM 全盘加密
内存分析攻击
密钥不在进程外暴露
重放攻击
每条记忆独立 nonce
彩虹表攻击
PBKDF2 高迭代次数
字典攻击
用户密码无复杂度要求(建议8位+)
隐私分级绕过
架构层面强制执行
云端数据泄露
云端上传架构禁用
未经授权导出
导出自动脱敏
威胁
缓解措施
机器被完全控制
使用强密码 + 全磁盘加密
社会工程学获取密码
用户自行负责密码安全
侧信道攻击
建议在高信任环境使用
备份文件泄露
备份文件同样加密传输/存储
建议1: 使用强密码
- 长度 >= 16 位
- 包含大小写字母 + 数字 + 特殊字符
- 不要使用常见密码或个人信息
建议2: 全磁盘加密
- Windows: BitLocker 或 VeraCrypt
- macOS: FileVault
- Linux: LUKS
建议3: 定期备份
- 每日增量备份
- 备份文件加密存储在安全位置
- 定期测试恢复流程
建议4: 隐私分级
- 默认使用 INTERNAL
- 敏感内容及时升级为 PRIVATE/STRICT
- 定期运行 compliance 检查
仅在信任的 OpenClaw 实例中启用 ClawMemory
定期检查审计日志
不将 STRICT 级别记忆设为低隐私
================================================================
ClawMemory 安全审计报告
生成时间: YYYY-MM-DD HH:MM:SS
================================================================
一、加密状态
密钥绑定机器: [机器名]
密钥文件存在: [是/否]
盐值文件存在: [是/否]
二、存储状态
主数据库大小: XX MB
向量索引大小: XX MB
备份文件数量: XX
三、隐私统计
PUBLIC: XX 条
INTERNAL: XX 条
PRIVATE: XX 条
STRICT: XX 条
四、访问授权
活跃授权数: XX
过期授权数: XX
五、审计日志异常
失败访问次数: XX
异常操作: [列表]
六、合规状态
[PASS / REVIEW / FAIL]
七、待处理项
[列表]
================================================================
审计人: __________
日期: __________
================================================================