http://blog.csdn.net/hacode/article/details/8750037
简述:
在垃圾邮件防范和DOS系统中,可能会用到“工作量证明”这个工具。 简而言之,就是一份证明,它能够说明你为此工作了一定量的时间了。
当然,这只是对于一方而言的,游戏的另一方应该有一个很简单的办法验证你的答案是否正确。
举例子:
B给A出了一个难题,或者A自己找来一个难题,A花费了10分钟时间证明一个问题,然后把答案发送给B,B只要1秒钟不到就验证了答案是否正确。
这样在计算机系统中,可以用于这样的情形:
A请求一个B的服务,如果A可以段时间大量的请求,可能会造成B的崩溃,于是B对于服务的请求者出题,或者约定一种“解答-验证”协议
,这个题需要花费一定的时间去计算,计算好了以后,发送个B验证,B瞬间可以验证完毕,验证通过,再给A提供服务。
如果A是一个攻击者,这个时间花费×它要攻击的对象n是一笔可观的cpu计算量投入,因此可以有效阻止恶意攻击。
“工作量证明”工具:
Here is a list of known proof-of-work functions:
- Integer square root modulo a large prime[8]
- Weaken Fiat–Shamir signatures[8]
- Ong–Schnorr–Shamir signature broken by Pollard [8]
- Partial hash inversion[9][10][11][12] as Hashcash
- Hash sequences[13]
- Puzzles[14]
- Diffie–Hellman-based puzzle[15]
- Moderate[4]
- Mbound[5]
- Hokkaido[6]
- Merkle tree based[16]
- Guided tour puzzle protocol[7]
Hashcash
比如说,Adam Back提出的HASHCASH工具,启发过bitcoin系统。
hashcash可以用于防止垃圾邮件。
发信者需要对邮件头head,附加一个random,然后对这个string进行sha1-160,如果hash的前20个bit是0,那么就算solved,于是发送邮件给receiver。
收信人拿到以后,也对这个由sender发现的string进行hash,发现前20个bit确实是0,于是认为sender确实做了辛苦的hash搜索工作,于是相信sender不是一个垃圾制造者,sender可能是一个正常的邮件对象发送过来的。
这个案例中,工作量大概是,2的20次方个随间random搜索以后,大概可以找到一个前20bit是0的hash,也就是答案。因为前20个bit,每一bit是0的概率都是1/2,所有总的概率就是1/(2的20次方)。
而接收方的验证是极其简单的。