工作量证明
概要
工作量证明(Proof of Work,PoW),是要求请求的发送方完成一定量的计算处理,从而抬高大量请求成本的技术。它因比特币挖矿而广为人知,也被应用于网络服务的垃圾信息对策。人发送 1 条提问时,计算量控制在不会构成负担的程度;而机器人程序试图大量发送时,所需的计算量会不断累积,让攻击的性价比下降。
原理
PoW 的基本原理是,服务器发出一个叫作“挑战”的随机字符串,客户端针对这个挑战,找出满足特定条件的“随机数”(nonce)。例如设定“挑战 + 随机数的 SHA-256 哈希值,开头 N 位为零”这样的条件。
通过调整 N 的值(难度),可以控制计算所需的时间。把难度调整到人发送一次时几乎感觉不到的程度,在抑制对用户体验影响的同时阻止机器人程序。
与 CAPTCHA 的区别
CAPTCHA 是用视觉测试(图像识别、文字输入)来区分人和机器人程序的技术。PoW 则是施加计算成本。CAPTCHA 要求用户进行明确的操作,这部分麻烦就落在了用户身上。在移动端,选择图片的操作负担更大,可能成为用户在发送途中放弃的原因。
PoW 在后台自动执行,不要求用户进行明确的操作。不过,PoW 并不是判定“是人还是机器人程序”,而是“让大量请求变得不划算”的技术,所以对少量手动的骚扰效果有限。因此会采用与蜜罐字段和速率限制组合起来的多层防御设计。