0.4.1 安全增强:OTP 密钥静态加密(AES-256-GCM)(PR #6,by adra2n)。
变更
- OTP 密钥加密存储:TOTP secret 落盘前以 AES-256-GCM 密封(
v1.<iv>.<tag>.<cipher>),读取需 32 字节主密钥——$DSH_HOME文件泄露不再直接交出第二因素根密钥; - 主密钥来源:环境变量
DSH_AUTH_GATEWAY_MASTER_KEY(hex/base64,建议生产置于 KMS / Docker secret / 加密卷)> 自动生成的auth-gate/otp-master.key(0600);旧明文otp.json零迁移兼容(按v1.前缀判断); - 错误分类:解密失败不再退化为裸 500——
otp-master-key-missing(503)/otp-master-key-invalid(500)/otp-secret-corrupted(500)均以带说明的 JSON 返回,指引恢复路径(恢复 key 或删otp.json重绑); - 重放水印钳制:未来步验证码仍可登录,但
lastCounter不再超前——避免合法当前/下一步验证码被永久当作重放、把用户锁在 TOTP 外; - 运维:
.gitignore忽略otp-master.key;dsh-auth-gateway-reset提示丢失认证器时otp.json与otp-master.key一并删除; - 测试 104 → 116(新增:磁盘密文、往返、篡改拒绝、密钥缓存、env 覆盖、明文迁移、缺失 key 不再静默再生成、typed 错误码、水印钳制回归)。
已知限制
- 主密钥不支持热轮换(进程内缓存一次);轮换需删除
otp.json+ key 文件后重新绑定; - 默认自动生成密钥文件时,密钥与密文同目录,仍属本机可信模型——生产请用环境变量注入主密钥并置于加密卷/外部密钥管理。
安装
dsh plugin --profile web add dsh-auth-gateway # npm 0.4.1
dsh plugin --profile web add github:xbzbing/dsh-auth-gateway#v0.4.1