核心用法
TOTP Verification Skill 是一个基于时间的一次性密码(TOTP)验证系统,专为保护敏感操作设计。采用 otplib 库实现,配置窗口为 2(即 ±1 分钟时间容差),兼容主流验证器如 Google Authenticator 和 Authy。
工作流程:
1. 安装依赖后运行 npm run generate 生成 Base32 编码的密钥及二维码
2. 将 TOTP_SECRET 写入 .env 文件
3. 使用验证器 App 扫描二维码完成绑定
4. 敏感操作前,Agent 请求用户输入 6 位 OTP 码
5. 通过 verify.js 验证,exit 0 通过,exit 1 拒绝
技术规格: SHA-1 算法、6 位数字、30 秒周期、Base32 密钥编码。
显著优点
- 操作隔离: 将高敏感操作(读取
.env、删除备份、重启网关)与常规对话分离,强制人工确认 - 零外部依赖: 纯 Node.js 实现,无需调用第三方验证服务,密钥完全本地托管
- 主流兼容: 支持 Google Authenticator、Authy、Microsoft Authenticator 等标准 TOTP 应用
- 时间容错: 1 分钟窗口有效应对设备时间漂移,兼顾安全与可用性
- 易于集成: 通过退出码(0/1)与 shell 工作流无缝衔接
潜在缺点与局限性
- 单点故障: 若
.env文件泄露,攻击者可离线暴力破解窗口期内的 TOTP 码(仅 10⁶ 种组合,在线速率受限但离线不可忽略) - 无防重放机制: 同一 OTP 在窗口期内可重复使用,缺乏「已用令牌」记录
- 密钥管理脆弱: 依赖单一环境变量存储,无 HSM、KMS 或加密存储方案
- 无速率限制: 验证脚本本身未实现尝试次数限制,易被暴力破解
- 依赖 Node.js: 目标环境必须安装 Node,增加攻击面和维护成本
适合人群
- 个人开发者或小型团队,需要为 AI Agent 增加基础二次确认层
- 对安全有初步要求,但尚未部署企业级 IAM/SSO 的环境
- 需要兼容手机验证器、拒绝短信/邮件 OTP 方案的用户
常规风险
| 风险类型 | 说明 |
|---------|------|
| 密钥泄露 | `.env` 文件权限不当或意外提交至版本控制,导致长期密钥暴露 |
| 时间攻击 | 本地系统时间被篡改可绕过或干扰验证窗口 |
| 社会工程 | 攻击者诱导用户实时提供 OTP,缺乏交易绑定上下文(如金额、操作详情) |
| 暴力破解 | 无内置速率限制,结合密钥泄露可在窗口期内枚举 6 位码 |
| 供应链风险 | `otplib` 依赖若被投毒,可植入后门或削弱随机性 |
建议生产环境叠加:密钥加密存储(如 AWS Secrets Manager)、验证速率限制、操作日志审计、以及硬件安全模块(HSM)托管主密钥。