Otp Challenger

🔐 敏感操作前的双因素身份验证

为敏感操作(部署、财务、数据访问)提供 TOTP/YubiKey 双因素身份验证,支持 24 小时验证状态缓存与速率限制保护。

收藏
13k
安装
2.7k
版本
1.0.4
CLS 安全性认证2026-05-19
点击查看完整报告 >

使用说明

核心用法

OTP Challenger 是一个为 AI Agent 和自动化脚本设计的身份验证中间件,在执行敏感操作前强制要求用户进行 2FA 验证。支持两种验证方式:

  • TOTP(时间型一次性密码):6 位数字,兼容 Google Authenticator、Authy 等标准应用
  • YubiKey OTP:44 字符 ModHex 格式,硬件安全密钥

主要脚本包括:

  • verify.sh:验证 OTP 代码,成功后可维持 24 小时有效状态
  • check-status.sh:查询当前验证状态
  • generate-secret.sh:生成 TOTP 密钥及二维码

典型使用场景

# 在部署脚本中集成
source ../otp/verify.sh
if ! verify_otp "$USER_ID" "$OTP_CODE"; then
  echo "🔒 需要 OTP 验证"
  exit 1
fi
kubectl apply -f production.yaml  # 验证通过后执行敏感操作

显著优点

1. 即插即用:提供 Bash 函数封装,可直接嵌入现有脚本
2. 双模支持:同时支持软件 TOTP 和硬件 YubiKey,适应不同安全级别需求

3. 状态缓存:验证成功后 24 小时内无需重复验证,平衡安全性与用户体验

4. 速率限制:内置 OTP_MAX_FAILURES(默认 3 次)防止暴力破解

5. 零秘密存储:状态文件仅存储时间戳,密钥通过环境变量或外部配置管理

潜在缺点与局限性

  • 依赖外部工具:需预装 oathtool(TOTP 计算)或 Node.js(备用实现)
  • 单用户状态文件memory/otp-state.json 默认路径,多实例部署需自行同步
  • 无内置加密:状态文件明文存储,依赖文件系统权限保护
  • YubiKey 需联网:验证需调用 Yubico 云 API,离线环境不可用
  • 固定有效期:24 小时过期时间不可按风险等级动态调整

适合人群

  • DevOps 工程师:为 CI/CD 部署、Terraform 应用添加审批人验证
  • SRE/平台团队:构建需人工确认的自动化运维工作流
  • 安全管理员:在现有脚本体系中快速接入 2FA,无需改造底层系统
  • 金融科技开发者:支付审批、资金转账等场景的身份复核

常规风险

| 风险类型 | 说明 | 缓解建议 |
|---------|------|---------|
| 配置泄露 | `OTP_SECRET` 或 `YUBIKEY_SECRET_KEY` 暴露 | 使用专用 secret 管理工具(如 Vault),禁止硬编码 |
| 状态文件篡改 | `otp-state.json` 被恶意修改跳过验证 | 设置严格文件权限(0600),考虑签名验证 |
| 中间人攻击 | YubiKey 验证流量被拦截 | 验证 Yubico API TLS 证书,考虑代理白名单 |
| 时钟漂移 | TOTP 验证因系统时间不一致失败 | 部署 NTP 同步,或增大时间窗口容忍度 |

安全解读

核心用法

OTP Challenger 是一款专为 AI 代理和工作流设计的安全身份验证 Skill,支持 TOTP(时间同步令牌)和 YubiKey 硬件密钥两种双因素认证方式。核心脚本包括:

  • `verify.sh <user_id> <code>`:验证6位数字TOTP码或44位YubiKey OTP码,成功后续航24小时
  • `check-status.sh <user_id>`:查询验证状态是否有效
  • `generate-secret.sh <account_name>`:生成TOTP密钥与二维码

典型集成模式:在执行敏感操作(如 kubectl apply、资金转账、PII导出)前,调用 verify.sh 获取即时身份确认,通过后再执行主流程。

显著优点

| 维度 | 亮点 |
|------|------|
| **双模支持** | 同时兼容软件TOTP(Google Authenticator等)和硬件YubiKey,覆盖个人与企业场景 |
| **安全设计** | 实现速率限制(默认3次失败/5分钟)、90秒重放窗口、HMAC-SHA1签名验证、flock文件锁并发控制 |
| **隐私合规** | 状态文件仅存储时间戳,敏感密钥绝不落盘;通过GDPR/CCPA数据最小化原则 |
| **灵活配置** | 支持环境变量、YAML配置、密码管理器引用(如1Password的`op://`语法) |
| **审计完整** | 内置审计日志,记录每次验证尝试,支持异常模式监控 |

潜在局限

1. 外部依赖:必须联网验证YubiKey(调用api.yubico.com),离线环境无法使用硬件令牌模式
2. 工具链要求:依赖jqpython3oathtool等系统工具,跨平台部署需预先配置

3. 状态文件权限:需手动确保~/.openclaw/memory/目录权限为0700,否则存在验证状态泄露风险

4. 会话固定:默认24小时有效期不支持细粒度控制,高安全场景可能需要缩短

适合人群

  • DevOps/SRE:在CI/CD流水线或生产部署前加入人工复核节点
  • 安全工程师:为内部工具、管理后台、数据平台增加2FA保护层
  • 财务/合规团队:满足SOX、PCI-DSS等法规对敏感操作的身份确认要求
  • 个人开发者:为自托管服务(如Homelab、VPS管理)添加低成本双因素保护

常规风险

| 风险 | 等级 | 说明 |
|------|------|------|
| YubiKey API可用性 | 低 | 依赖Yubico云服务,建议配置代理或自建验证服务器 |
| 配置密钥泄露 | 中 | `OTP_SECRET`若写入明文配置文件存在泄露风险,推荐密码管理器引用 |
| 状态文件并发 | 低 | 已通过flock实现文件锁,但极端并发下仍需注意NFS等文件系统兼容性 |
| TOTP时间漂移 | 低 | 标准30秒窗口,极端时钟偏差可能导致验证失败 |

快速配置示例

security:
  otp:
    secret: "op://Private/otp-challenger/secret"  # 1Password引用
    intervalHours: 8                              # 缩短会话有效期
  yubikey:
    clientId: "${YUBIKEY_CLIENT_ID}"
    secretKey: "${YUBIKEY_SECRET_KEY}"

认证报告评分87分(S级),静态分析90分,隐私合规90分,适合对安全性有明确要求的生产环境部署。

Otp Challenger 内容

docs文件夹
implementation-plans文件夹
2025-01-31-yubikey-support文件夹
plans文件夹
examples文件夹
openclaw文件夹
tests文件夹
手动下载zip · 37.2 kB
phase_01.mdtext/markdown
请选择文件