Hashcash工作量证明防护:ClassQuiz如何防御暴力破解与垃圾攻击 Hashcash工作量证明防护ClassQuiz如何防御暴力破解与垃圾攻击【免费下载链接】ClassQuizClassQuiz is a quiz-application like Kahoot!, but open-source.项目地址: https://gitcode.com/gh_mirrors/cl/ClassQuizClassQuiz是一款类 Kahoot! 的开源课堂测验应用它的注册、登录等敏感接口采用Hashcash 工作量证明Proof of Work, PoW机制来抵御垃圾注册与暴力破解。本文面向新手讲清楚这种不花钱、只花 CPU的防护是如何实现以及它为什么比验证码更温和。一、为什么需要一个防刷机制在线课堂测验平台会遭遇两类典型攻击 ️攻击类型表现危害垃圾账号批量注册脚本秒级注册成千上万账号社区内容被灌水、存储被撑爆暴力破解密码每秒数千次尝试登录用户账号被盗ClassQuiz 的首页与功能概览如下官方宣传图传统方案是图形验证码或限流但前者影响正常用户后者对分布式攻击束手无策。ClassQuiz 选择了另一条路——工作量证明。二、核心思想用 CPU 代替钱把工作量证明想象成一笔小费上传资料前先付几块钱手续费攻击者想刷 1 万个请求就得先付 1 万笔。不同之处在于这笔手续费不是钱而是CPU 计算时间。对单个普通用户算 1~30 秒体验只是加载稍慢一点对批量攻击者每台机器每秒只能算有限次想要每秒发 1 万个请求就必须先备好每秒 1 万次的算力——攻击成本被放大了成千上万倍。官方文档也这样解释这个设计动机见 PoW 说明页Its just used to prevent spam... you pay with your CPU intensively. The Proof of Work-algorithm used is called HashCash and is also used by Bitcoin.三、Hashcash 算法拆解给哈希找零Hashcash 是比特币同款的工作证明算法核心步骤非常直白拼装挑战串格式为版本:难度:日期:资源:扩展:盐例如1:19:260822:register::aB3Xz9Q不断追加计数器拼上十六进制计数器0、1、2…做SHA-1哈希检验前导零直到哈希值的前若干位全部是0为止此时记录计数器值提交凭证把整串印章stamp发给服务器服务器只需哈希一次验证即可。这里有一个精妙的不对称性找前导 4 个0平均要尝试16⁴ ≈ 6.5 万次哈希客户端慢慢算服务器验证只需1 次哈希微秒级。验证端的轻量正是它能挡住每秒数千次暴力破解的关键。四、前后端如何协作前端浏览器端hashcash.ts 中的mint()函数负责铸币。它生成 8 位随机盐盐字符集为字母数字见gen_salt然后循环计算 SHA-1直到命中前导零。整个过程在浏览器里完成并且会用performance.now()记录耗时通过 Plausible 匿名上报耗时多久用于观测不同设备的体验差异。后端服务端helpers/init.py 中的check_hashcash()负责验证调用底层校验函数确认哈希前导零真实存在逐字段比对版本:难度:日期:资源:盐:计数器结构确保难度声明与服务器要求一致、资源字段与本次下发的挑战串完全匹配。核心校验逻辑helpers/init.py大致如此if not hc_check(data): return False version, claim, _date, res, ext, _rand, _counter data.split(:) some_error [version 1, claim claim_in, res input_data, ext ] return all(el is True for el in some_error)底层协议实现在 hashcash.py 中完整实现了 Hashcash v1 协议check()支持 v0/v1 及广义 Hashcash印章mint()/_mint()则展示了如何铸出合法凭证——其中_mint()是确定性寻零过程见 _mint 实现mint()在其基础上按协议加入随机盐。五、为什么是 SHA-1会被破解吗SHA-1 在这里是慢函数而非密码工作证明只要求哈希难以预知、易计算易验证并不要求抗碰撞能力因此 SHA-1 的碰撞问题不影响 PoW 用途代码中甚至显式标注了usedforsecurityFalse。盐 日期保证同一资源在同一天的不同盐值互不通用防止一次算好、无限重放。难度可调位数claim是参数管理员可以根据算力分布动态调节在用户体验与防护强度之间取平衡。六、与验证码、限流的对比方案普通用户成本攻击者成本说明图形验证码需识别图片需接打码平台交互打断体验IP 限流几乎无换代理即可绕过防不住分布式攻击Hashcash PoW数秒 CPU算力线性放大成本与请求数严格挂钩七、用户视角为什么加载那么久如果你曾在 ClassQuiz 上感受到某一步骤转圈 5 秒甚至 30 秒那多半就是在做工作量证明——官方文档PoW 说明原话The time it takes depends on the power of your CPU and, believe it or not, luck. Sometimes it takes like 5 seconds, sometimes 30 secs, so please be patient.时间长短取决于 CPU 性能和一点点运气属于正常现象。常见问题 FAQQ1它很费电吗单次要害 1~30 秒的 CPU 时间日常使用可忽略但对每秒数千次的攻击流量成本会被同比例放大——这正是设计目的。Q2攻击者能不能提前算好再批量重放不能。每次挑战包含随机盐与日期戳服务器会校验资源字段与本次下发的挑战串匹配预计算无法通用。Q3为什么不用更复杂的算法工作证明追求实现极简、验证极快。Hashcash 的全部核心就是哈希到前导零任何人都能读懂、任何语言三分钟就能实现——开源项目的最佳实践。总结ClassQuiz 用一套前后端不到几百行的代码把Hashcash 工作量证明嵌入注册与登录流程浏览器慢慢铸币服务器快速验币让垃圾注册和暴力破解在经济上彻底不划算。这是零成本防护思想在开源课堂测验应用中的教科书级落地 。想深入阅读源码可以从 helpers/hashcash.py 与 lib/hashcash.ts 两个入口开始。【免费下载链接】ClassQuizClassQuiz is a quiz-application like Kahoot!, but open-source.项目地址: https://gitcode.com/gh_mirrors/cl/ClassQuiz创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考