比特币有很多花法,介绍比较文艺的一种。
有个大户发起了310个BTC的挑战,这310个BTC的私钥隐藏在一张图上,解出谜题的人就可以得到这310个BTC,图片如下:

破解分了4个阶段,每个阶段都有不同的奖励,分别是 0.1 BTC ,0.2 BTC,0.31 BTC,310.00 BTC
最后的310个BTC的大奖在这个地址:39uAUwEFDi5bBbdBm5ViD8sxDBBrz7SUP4
目前破解已经进行到了第2个阶段,从地址的形式来看,以“3”开头,猜测很可能是一个多重签名的地址。
那么,做个大胆的猜测:前面三个奖励很可能是单个的私钥就能算出来的,将这几个(4个?)私钥集齐,就能得到这个多重签名的脚本,也就能得到310个BTC的大奖。
现在,我们先从第一阶段的破解过程看一下,看看能否猜到作者的设计思路。
图中间下方有一段表,如下:

将表中的字符连接起来得到一个串,这个串即是加密的数据,我们现在要对它进行解密(不要问为啥,我们现在是通过解题过程来猜作者的思路)
511B2033232841053022B0FE52ED0F7A165B52C7E75112F656FC4B
游戏开始的日期是20181002,将这个日期就是解密的密钥
用python写,解密的算法如下:
```
key ="20181002"
encrypted ="511B2033232841053022B0FE52ED0F7A165B52C7E75112F656FC4B"
decrypted = []
segment =""
for iin range(len(encrypted)):
segment = segment +format(((int(encrypted[i],16)-int(key[i%len(key)])) %16), 'x')
if((i+1)%3 ==0):
decrypted.append(segment)
segment =""
print("decrypted table:" +str(decrypted) +"\n")
```
解密完成后,得到的结果如下:
['310', '310', '310', '310', '310', '310', '1aa', '0fc', '32d', '5ff', '78f', '643', '42c', '5c7', '490', '2f4', '36e', '43b']
一个数组,去掉前面几个一样的‘310’,一共12个元素,很容易联想到通常用的12个助记词(虽然也有18和24个的标准,但是连续出现同样的是不符合规则的),然后,想办法把这12个数对应到助记词上去,如下:
```
f =open('english.txt', 'r')
words = f.read().splitlines()
f.close()
for iin range(6,len(decrypted)):
print(words[int(decrypted[i],16)-1])
```
得到的助记词是:
cry buyer grain save vault sign lyrics rhythm music fury horror mansion
把这12个助记词导入到AToken钱包(AToken.com),得到地址上确实有0.1个BTC。
第一步的设计其实不是非常复杂,不过非常难想到的是解密的key居然是谜题发布的日期。到此为止,我们只采用了图片的非常小的一部分,要想看到后面阶段的解决,就需要用到图片的其它部分了。截止到20181010,第二阶段的0.2个BTC也已经被破解,接下来要看,谁会把第三和第四阶段的谜题破解,拿到最后的大奖了...拭目以待...
有钱人的世界不好理解
网友评论