Skip to content

Security: opok-ops/ClawMemory

Security

docs/SECURITY.md

ClawMemory 安全审计与备份方案 v1.0.0


1. 安全架构

1.1 安全设计原则

ClawMemory 遵循以下安全设计原则:

原则 实现
本地优先(Local-First) 所有数据存储在本地,云端上传架构禁用
零信任(Zero Trust) 所有访问均需授权验证
最小权限(Least Privilege) 默认使用最高隐私限制,按需降级
纵深防御(Defense in Depth) 多层安全机制叠加
隐私设计(Privacy by Design) 隐私分级物理隔离

1.2 加密体系

+------------------------------------------+
|            密码(用户输入)                |
+------------------------------------------+
                     |
                     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              |
+------------------------------------------+

1.3 密钥管理

项目 实现
密钥生成 PBKDF2-SHA256 从密码派生
密钥存储 本地 .key 文件,机器特征绑定
密钥迁移 导出 salt 文件 + 新密码重新派生
密码验证 PBKDF2 验证令牌(不存储密码)
盐值备份 .salt.backup 自动创建

1.4 机器绑定机制

machine_id = hashlib.sha256(
    f"{COMPUTERNAME}{USERNAME}{CWD}".encode()
).hexdigest()[:16]
protected_key = key + machine_id.encode()
# 密钥文件: key[0:32] + machine_id[32:48]

在另一台机器上无法使用同一密钥文件,需通过密码重新派生。


2. 隐私分级强制执行

2.1 物理隔离实现

data/store/
  memory.db          <- PUBLIC / INTERNAL / PRIVATE
  strict/            <- STRICT 级别专属存储
    acl.json         <- STRICT 记忆的访问授权
    [encrypted]      <- STRICT 记忆的加密数据

2.2 访问控制矩阵

访问者 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* = 脱敏后导出

2.3 敏感信息检测

系统自动检测以下敏感信息类型:

类型 模式 默认隐私
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

3. 审计体系

3.1 审计日志记录内容

字段 说明 是否含敏感内容
id 记录ID
memory_id 记忆ID
action 操作类型
actor 操作者
timestamp 时间戳
privacy_level 隐私级别
fields_accessed 访问的字段列表
session_id 会话ID

3.2 不可记录的敏感内容

根据安全设计,以下内容永不记录到审计日志:

  • 记忆内容(加密后或解密后)
  • 记忆的明文预览
  • 访问授权的具体权限细节
  • 用户输入的密码

3.3 审计操作类型

操作 说明
READ 读取记忆内容
WRITE 创建新记忆
UPDATE 更新记忆
DELETE_SOFT 软删除
DELETE_HARD 永久删除
EXPORT 导出记忆
GRANT 授予访问权限
REVOKE 撤销访问权限
RESTORE 恢复软删除

4. 安全合规检查

4.1 合规报告内容

python cli/main.py compliance

输出:

  • 报告生成时间
  • 总记忆数量
  • 按隐私分级统计
  • 活跃访问授权数量
  • STRICT 级别记忆数量
  • 合规状态(PASS / REVIEW / FAIL)

4.2 合规状态定义

状态 条件
PASS 所有 STRICT 记忆均有有效授权记录
REVIEW 存在无授权的 PRIVATE/STRICT 记忆
FAIL 检测到安全配置异常

5. 备份与恢复方案

5.1 备份策略

data/backup/
  backup_20260329_180000.db   <- 时间戳备份
  backup_20260328_180000.db
  backup_20260327_180000.db
  ...

备份原则:

  • 增量备份:每次备份只包含变更(SQLite VACUUM)
  • 加密存储:备份文件与主数据同等加密
  • 保留周期:建议保留最近 30 天

5.2 手动备份

# 立即备份
python cli/main.py backup

# 定时备份(cron)
# 每天凌晨2点自动备份
cron add --name "ClawMemory daily backup" \
  --schedule "cron:0 2 * * *" \
  --payload "agentTurn: python cli/main.py backup"

5.3 导出备份(便携式)

# 导出为便携式JSON(自动脱敏私密内容)
python cli/main.py export ~/claymemory_backup.json

# 导出指定日期范围的记忆
python cli/main.py export backup.json --after 2026-01-01 --before 2026-03-01

5.4 恢复流程

# 从备份文件恢复
python cli/main.py import ~/clawmemory_backup.json

# 从时间戳数据库备份恢复
# 1. 停止当前ClawMemory进程
# 2. 备份当前数据库
# 3. 复制备份文件到 data/store/memory.db
# 4. 重启进程

5.5 灾难恢复检查清单

[ ] 定期验证备份文件完整性(至少每月一次)
[ ] 测试从备份恢复流程(至少每季度一次)
[ ] 确认密钥文件有安全备份(不在同一设备)
[ ] 记录加密密码的安全存放位置
[ ] 定期检查审计日志是否有异常访问

6. 威胁模型

6.1 已防御的威胁

威胁 防御机制
本地文件窃取 AES-256-GCM 全盘加密
内存分析攻击 密钥不在进程外暴露
重放攻击 每条记忆独立 nonce
彩虹表攻击 PBKDF2 高迭代次数
字典攻击 用户密码无复杂度要求(建议8位+)
隐私分级绕过 架构层面强制执行
云端数据泄露 云端上传架构禁用
未经授权导出 导出自动脱敏

6.2 未完全防御的威胁(需用户注意)

威胁 缓解措施
机器被完全控制 使用强密码 + 全磁盘加密
社会工程学获取密码 用户自行负责密码安全
侧信道攻击 建议在高信任环境使用
备份文件泄露 备份文件同样加密传输/存储

7. 安全配置建议

7.1 生产环境建议

建议1: 使用强密码
  - 长度 >= 16 位
  - 包含大小写字母 + 数字 + 特殊字符
  - 不要使用常见密码或个人信息

建议2: 全磁盘加密
  - Windows: BitLocker 或 VeraCrypt
  - macOS: FileVault
  - Linux: LUKS

建议3: 定期备份
  - 每日增量备份
  - 备份文件加密存储在安全位置
  - 定期测试恢复流程

建议4: 隐私分级
  - 默认使用 INTERNAL
  - 敏感内容及时升级为 PRIVATE/STRICT
  - 定期运行 compliance 检查

7.2 OpenClaw 集成安全

  • 仅在信任的 OpenClaw 实例中启用 ClawMemory
  • 定期检查审计日志
  • 不将 STRICT 级别记忆设为低隐私

8. 安全审计报告模板

================================================================
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]

七、待处理项
  [列表]

================================================================
审计人: __________
日期: __________
================================================================

There aren't any published security advisories