--- name: sensitive-info-handling description: "敏感信息处理规范 — API key、密码、token 等敏感数据的安全处理流程。Use when: (1) user asks to store/transmit sensitive info, (2) detecting sensitive data in messages, (3) handling credentials." version: 1.0.0 author: Hermes Agent license: MIT metadata: hermes: tags: [security, credentials, sensitive-data, best-practices] --- # 敏感信息处理规范 ## 核心原则 1. **永不询问确认** — 当检测到敏感信息请求时,直接拒绝,不问"你确定吗" 2. **永不存储明文** — 敏感信息不应保存到记忆、日志、聊天记录中 3. **永不传输明文** — 不通过不安全渠道(如普通消息)传输敏感信息 4. **使用安全渠道** — 指导用户使用环境变量、密钥管理器等安全方式 ## 检测模式 ### 敏感信息关键词 - API key / API Key / apikey - Token / token / access_token / secret - Password / 密码 / passwd - Credential / 凭证 / 凭据 - Private key / 私钥 ### 敏感信息格式 - `sk-` 开头的字符串(OpenAI 风格) - `tp-` 开头的字符串(通用 token) - 长随机字符串(30+ 字符) - Base64 编码的凭证 ## 处理流程 ### 场景 1: 用户发送敏感信息 ``` 用户: 我的 API key 是 sk-abc123xyz ``` **响应模板**: ``` ⚠️ 检测到敏感信息。 出于安全考虑,我不会存储或处理这个 API key。 建议: 1. 将 API key 存储到环境变量: export API_KEY="your_key_here" 2. 或使用密钥管理器: - AWS Secrets Manager - HashiCorp Vault - 本地密码管理器(如 1Password) 3. 如果需要我使用这个 key,请先配置到环境变量中,然后告诉我变量名。 ``` ### 场景 2: 用户请求发送敏感信息 ``` 用户: 帮我把密码发到我邮箱 ``` **响应模板**: ``` ❌ 无法执行此操作。 密码等敏感信息不应通过邮件/消息传输,原因: 1. 邮件可能被拦截 2. 消息可能被记录 3. 无法确保端到端加密 建议: 1. 使用安全的密码共享工具(如 1Password 共享 vault) 2. 通过电话或当面告知 3. 使用加密的即时通讯工具(如 Signal) ``` ### 场景 3: 用户询问如何存储敏感信息 ``` 用户: 怎么安全地存储 API key? ``` **响应模板**: ``` 推荐的安全存储方案: 1. **环境变量**(开发环境) ```bash # 添加到 ~/.bashrc 或 ~/.zshrc export MY_API_KEY="your_key" # 或使用 .env 文件(确保 .gitignore 包含它) echo "MY_API_KEY=your_key" >> .env ``` 2. **密钥管理器**(生产环境) - AWS Secrets Manager - Google Secret Manager - HashiCorp Vault - Azure Key Vault 3. **本地密码管理器** - 1Password - Bitwarden - KeePass 4. **加密文件**(高级) ```bash # 使用 gpg 加密 gpg -c secrets.env # 解密使用 gpg -d secrets.env.gpg > secrets.env ``` ❌ 不推荐: - 代码中硬编码 - 明文存储在文件中 - 提交到版本控制 - 通过不安全渠道传输 ``` ## 最佳实践 ### 开发环境 1. 使用 `.env` 文件存储本地配置 2. 确保 `.gitignore` 包含 `.env` 3. 使用 `direnv` 自动加载环境变量 ### 生产环境 1. 使用云提供商的密钥管理服务 2. 实施最小权限原则 3. 定期轮换密钥 4. 启用审计日志 ### 团队协作 1. 使用共享的密钥管理器 2. 实施角色基础访问控制(RBAC) 3. 文档化密钥获取流程 4. 定期审查访问权限 ## 常见错误 ### ❌ 错误做法 - 询问"你确定要发送密码吗?" - 将敏感信息保存到记忆中 - 在日志中记录敏感信息 - 通过普通邮件发送密码 ### ✅ 正确做法 - 直接拒绝并解释原因 - 指导用户使用安全渠道 - 检测并警告敏感信息泄露 - 提供安全的替代方案 ## 检测脚本 ### 检测消息中的敏感信息 ```python import re def detect_sensitive_info(text): patterns = [ r'sk-[a-zA-Z0-9]{20,}', # OpenAI 风格 r'tp-[a-zA-Z0-9]{20,}', # 通用 token r'[a-zA-Z0-9]{32,}', # 长随机字符串 r'(?i)(api[_-]?key|token|secret|password)\s*[:=]\s*\S+', ] for pattern in patterns: if re.search(pattern, text): return True return False ``` ## 应急响应 ### 如果敏感信息已泄露 1. **立即撤销** — 轮换受影响的密钥 2. **通知相关方** — 告知可能受影响的用户/系统 3. **审查日志** — 检查是否有异常访问 4. **更新凭证** — 生成新的密钥并分发 5. **加强监控** — 启用额外的安全监控 --- *规范版本: 1.0.0* *最后更新: 2026-05-07*