Tan's Blog.

ProofofWork

字数统计: 578阅读时长: 2 min
2019/04/12 Share

PoW:工作量证明

PoW的理解

PoW通俗讲就是“通过工作以获得指定成果,用成果来证明曾经付出的努力”。
工作量证明须要由工作者和验证者双方共同完毕.它有两层含义.
1.工作者须要完毕的工作必须有一定的量,这个量由验证者给出.
2.验证者能够迅速的检验工作量是否达标,注意这里的检验完毕过程必须简单.
举几个例子:
A跟B说,你给我还原这个魔方,B还原魔方须要非常多时间,而A验证却非常快,仅仅须要看一眼即可了.
A跟B说,你给我解这个10次方程,过程非常麻烦,可是结果easy验证.
A跟B说,你给我把这个游戏玩通关,B须要一定时间,而A验证却非常快.
RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分easy,可是想要对其乘积进行因式分解却极其困难.
···

Pow的应用

今天试做BabyXSS,其中有一段输入会涉及到PoW。

输入的内容经过md5运算后得到加密结果,前六位符合等号右边的条件,根据这些条件写python脚本。

1
2
3
4
5
6
7
8
9
10
11
import hashlib
from itertools import count
msg = 'admin'
for i in count():
md = hashlib.md5()
str1=msg+str(i)
md.update(str1.encode('utf-8'))
hashid = md.hexdigest()
if hashid.startswith('da64d0'):
print(str1,hashid)
break

对于随机字符串admin,我们必须找出一个数n,使得随机字符串拼上这个数n后的md5结果前面6位是da64d0.
即md5(admin+n)的结果符合一定的要求,通过不停的穷举,可以找出这样一个数n。
由于md5用十六进制表示,每一位出现的概率是16。所以要找到符合要求的字符串,平均需要16 16 16 16 16 * 16=16777216次。可以具体规定前面符合要求的字符个数来控制工作者的工作量,当然规定的字符个数越多,工作者的工作量就会越多。
将这段代码的str1作为输入,提交得到

点进去,得到一个url:http://123.207.149.64:23346/usermessages/1555074568-d41d8cd98f00b204e9800998ecf8427e.html , 是个空页面,一脸茫然,还有待破解。。。

CATALOG
  1. 1. PoW:工作量证明
    1. 1.1. PoW的理解
    2. 1.2. Pow的应用