【免费下载链接】warden-workerA Bitwarden-compatible server for Cloudflare Workers项目地址https://gitcode.com/gh_mirrors/wa/warden-worker点击查看免费下载Warden-Worker 是一个运行在 Cloudflare Workers 上、兼容 Bitwarden 协议的自托管密码库服务器。这篇文章一次讲透它的三层安全设计服务端 PBKDF2 密码哈希、TOTP 二步验证2FA与接口限流帮你看懂账号从存储到登录的完整防护链路。️ 项目速览跑在边缘节点上的自托管密码库Warden-Worker 用 Rust 实现了 Bitwarden 的服务端 API数据存放在 D1SQLite附件可选 KV 或 R2见 README.md。与密码安全直接相关的核心模块src/crypto.rs密码哈希、TOTP、恢复码等全部底层密码学实现src/handlers/twofactor.rs二步验证的开启/关闭接口src/handlers/identity.rs登录、令牌签发与限流执行wrangler.toml限流器配置入口下面逐层拆解。 一、服务端 PBKDF2 哈希为什么要把密码再哈希一次两级 KDF客户端与服务器各干各的按 Bitwarden 协议客户端先用本地 KDFPBKDF2 或 Argon2把主密码派生为masterPasswordHash发给服务器的只有这个哈希永远不是明文密码。Warden-Worker 收到后再用自己的盐值和迭代次数对哈希做第二次 PBKDF2-HMAC-SHA256最终存储的是这层结果hash_password_for_storage。好处很直接即使数据库泄露攻击者拿到的也只是哈希的哈希无法直接还原客户端原始哈希。600,000 次迭代、64 字节盐值与恒定时间比较关键常量都定义在 src/crypto.rs#L13-L22MIN_SERVER_PBKDF2_ITERATIONS 600_000服务端最低迭代次数PASSWORD_SALT_LENGTH 64每个用户独立的 64 字节随机盐派生密钥长度 256 位一个有意思的工程细节Cloudflare Workers 原生 WebCrypto 的 PBKDF2 上限只有 100,000 次迭代项目因此改用Rust/WASM 纯软件实现pbkdf2_sha256才能安全跑满 60 万次。这类请求 CPU 开销大所以被分流到 Durable ObjectHEAVY_DO执行——免费计划下每个 DO 请求有 30 秒 CPU 预算完全够用。验证环节 verify_password 使用constant_time_eq恒定时间比较避免通过响应时间差猜出正确哈希的前缀。登录时自动升级从 10 万次迭代平滑迁移迁移脚本 migrations/0007_add_password_iterations.sql 显示老用户默认只有 100,000 次迭代。于是 maybe_upgrade_password_hash 在每次登录成功后检查若该用户迭代数低于当前配置值或还是无盐值的旧方案立即生成新盐并按新标准重哈希写回。只要用户正常登录整个实例就会逐步迁移到更强标准——不需要批量重置密码也不需要停机维护。迭代次数可通过PASSWORD_ITERATIONS环境变量上调但永远不会被允许低于 60 万次server_password_iterations。⏱️ 二、TOTP 二步验证从密钥生成到防重放密钥与验证码生成标准 RFC 4226 实现generate_totp_secret用crypto.getRandomValues生成 20 字节随机数160 位熵Base32 编码后作为密钥generate_totpHMAC-SHA1 RFC 4226 动态截断产出 6 位数字验证码时间窗口 30 秒密钥存在twofactor表的data字段表结构带UNIQUE(user_uuid, atype)保证每用户最多一个 TOTP 密钥migrations/0003_add_twofactor.sql登录校验±1 步时间漂移 防重放核心在 validate_totp做了三件事格式校验必须恰好 6 位数字直接拒绝畸形输入时间漂移当前时间步 当前时间戳 ÷ 30默认校验 -1、0、1 共三个窗口约 ±30 秒容差吸收手机时钟偏差可通过AUTHENTICATOR_DISABLE_TIME_DRIFT关闭漂移allow_totp_drift防重放凡 last_used的时间步一律跳过同一个验证码用过就不能再用验证通过后登录流程把命中的时间步写回数据库identity.rs#L608-L622验证码比对同样是恒定时间比较防止时序侧信道。三件套恢复码、设备记住与关闭校验恢复码generate_recovery_code 生成 20 字节 Base32 码存入users.totp_recover一次性——使用后清空该用户全部二步验证与设备信任identity.rs#L636-L672设备记住验证成功后可签发 30 天有效、绑定设备的 JWT remember token同设备 30 天内免输 TOTP关闭 2FA 需双重确认必须同时提供主密码和原始 Base32 密钥且密钥用恒定时间ct_eq比对disable_authenticator开启时防绕过激活接口会先验证当前 TOTP 码并继承旧记录的last_used防止重新配置窗口内旧码被复用activate_authenticator 三、限流挡住暴力破解与枚举攻击5 次 / 60 秒一行配置搞定Warden-Worker 使用 Cloudflare Workers 官方 Rate Limiting 绑定wrangler.toml 中只定义了一个限流器[[ratelimits]] name LOGIN_RATE_LIMITER namespace_id 1001 simple { limit 5, period 60 }注意period只允许 10 或 60 秒这是平台约束。保护哪些接口、按什么键限接口限流键防御目标/identity/connect/token登录login:邮箱针对单账号的密码暴力破解/api/accounts/register注册register:IP批量注册、邮箱枚举/identity/accounts/prelogin预登录prelogin:IP邮箱枚举/api/accounts/password-hint密码提示password-hint:IP密码提示枚举设计亮点是限流键的选择登录按邮箱限流把暴力破解锁死在单个账号上其余接口按cf-connecting-ip头取客户端 IP 限流挡住同一机器的批量扫描见 accounts.rs#L139-L153。超限即返回 429Too many requests.登录处的完整判断逻辑见 identity.rs#L559-L569。优雅降级没有绑定也不至于服务不可用如果部署时漏配了LOGIN_RATE_LIMITER绑定代码会跳过限流检查、请求照常通过——可用性优先于强校验。但官方安全策略明确建议部署时显式启用该绑定见 SECURITY.md否则防护会打折。✅ 自托管者安全加固清单来自官方 SECURITY.md 的四条硬建议设置强随机JWT_SECRET/JWT_REFRESH_SECRET32 字符以上、随机、各环境唯一用ALLOWED_EMAILS限制可注册范围生产环境考虑直接关闭公开注册确认wrangler.toml中[[ratelimits]]绑定存在D1 备份与日志可能含敏感元数据按机密数据保护 30 秒看懂要点防线机制默认参数密码存储服务端 PBKDF2-HMAC-SHA256 二次哈希600,000 次迭代 64 字节随机盐哈希比对恒定时间比较防时序攻击存量用户登录时自动升级10 万 → 60 万次迭代二步验证TOTPRFC 42266 位码、30 秒窗口±1 步漂移 防重放应急兜底一次性恢复码 30 天设备记住用后即焚接口限流Cloudflare Rate Limiting5 次 / 60 秒一句话总结Warden-Worker 以明文密码永不离开客户端为底线再叠加 PBKDF2 二次哈希、TOTP 二步验证与按键限流三层服务端防线让部署在边缘节点上的自托管密码库拥有与托管服务同级的防护水平。赞分享【免费下载链接】warden-workerA Bitwarden-compatible server for Cloudflare Workers项目地址https://gitcode.com/gh_mirrors/wa/warden-worker点击查看免费下载相关推荐Rocket.Chat TOTP 二次验证全流程 REST API 化users.*Totp 五端点实战与迁移指南Rocket.Chat TOTP 二次验证全流程 REST API 化users. Totp 五端点实战与迁移指南 本文围绕 Rocket.Chat 仓库中即时通讯后端前端K8M项目实现TOTP二次验证提升系统安全性K8M项目实现TOTP二次验证提升系统安全性 在当今云计算和容器化技术快速发展的背景下Kubernetes管理工具K8M项目迎来了一个重要的安全功能升级——T云原生集群管理后端前端AI 应用大模型MCP 服务运维RoboHash打造独一无二的哈希图像验证体验RoboHash打造独一无二的哈希图像验证体验 在数字世界中安全验证往往伴随着冰冷的字符串和复杂的算法。但今天让我们一同探索一个独特的开源项目—— Rob后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考