主页 > imtoken官网下载2.0安卓钱包 > 比特币衡量的是什么 谈谈“熵”

比特币衡量的是什么 谈谈“熵”

原博客:

entropy_and_order_by_fractalfiend-d4hmwwa

熵在物理学中用来衡量热力学系统的无序或混沌程度(参考热力学第二定律),引入信息论(计算机科学)时,用来衡量信息的不确定性(不可预测性),简单地说,就是“随机性”。

假设有一枚“理想”硬币(抛出正面和反面的概率相等),每次抛硬币都是独立且不可预测的,结果不是正面就是反面(0和1),那么抛硬币事件的熵256 次抛出的熵是 1 bit/bit,256 次抛出的熵是 256 bits/bit(这甚至可以用作“理想的”比特币私钥)。

如果不考虑复杂的定义和烦人的公式,“熵”其实就是这么简单。 本文不想在学术上更深入地讨论熵,只是想解释一个对密码学非常重要的定律:

任何算法(包括那些符合密码学规范的伪随机数算法)都只能“保持”熵,甚至可以“减少”熵比特币衡量的是什么,但绝不能“增加”熵!

这一点非常关键,以至于历史上出现的无数nonce问题(不管是否与比特币有关)基本上都源于忽略了这一点。

以前段时间发生的blockchain.info随机数问题为例。 blockchain.info使用的RC4算法(由于版权问题通常称为ARC4)是一种广泛使用的密码算法,通常用于生成伪随机数。 信息流。 ARC4算法有一个很“好”的特点,就是只有一个种子(即使种子只有0和1两位),也能产生“无穷多”的随机数,只需要对result 计算一下就可以了。

例如用0或1初始化ARC4数组,然后反复进行ARC4运算,可以得到任意长度的数组,数组中的每个元素都是一个0-255(8位)的数。 限于篇幅,小太这里只运行ARC4next方法256次。

0 : [222,24,137,65,163,55,93,58,138,6,30,103,87,110,146,109,199,26,127,163,240,204,235,151,69,43,77,50,39,150,95,158,168,204,117,7,109,159,185,197,65,122,165,203,48,252,34,25,139,52,152,45,187,98,158,192 ,75,79,139,5,160,113,8,80,146,160,195,88,74,72,228,163,10,57,123,138,205,29,0,158,200,125,104,17,242,44,244,156,163,229,147,84,185,69,21,53,162,24,122,134,66,108,202,125,94,130,62,186,0,68,18,103 ,18,87,184,216,96,174,76,189,76,73,6,187,197,53,239,225,88,127,8,219,51,149,92,219,203,173,155,16,245,63,196,229,44,89,21,101,81,132,135,254,8,77,14,63,3,222,188,201,218,28,233,13 ,8,92,45,138,25,216,55,48,134,22,54,146,20,43,216,252,93,122,115,73,106,142,89,238,126,207,107,148,6,99,244,166,190,230,91,210,200,92,70,152,108,27,239,52,144,211,123,56,218,133,211,46,151,57,203,35,74 ,43,231,64,235,8,137,54,33,153,175,204,50,131,85,153,13,79,137,251,99,195,228,81,116,172,100,77,71,2,71,63,151,209,157,98]

1 : [6,8,14,14,24,32,41,41,57,51,73,87,102,118,135,131,161,181,202,224,247,102,17,124,76,104,133,163,194,226,163,73,108,38,57,127,166,206,23,65,224,71,165,211,186,87,52,103,128,180,137,239,127,183,151,209,60,44 ,48,147,210,142,207,149,216,104,173,167,238,239,94,230,67,143,76,236,63,143,154,197,12,17,10,119,104,46,106,197,42,3,171,116,97,215,94,138,225,97,198,118,100,125,26,61,58,230,88,198,0,112,124,71,207,55,97,128,47,75,153,130,158,95,117 ,7,105,226,176,130,239,90,49,125,20,247,71,95,234,13,154,98,178,210,63,236,243,36,147,202,101,88,53,9,222,9,250,163,15,184,130,181,167,249,231,37,187,125,231,174,239,43,92,255,255,154,201,48,177,206,22,183,105,92,9,8,94,51,211,200,121,189 ,64,9,97,248,174,13,201,173,209,196,15,129,227,3,127,184,41,69,165,199,122,90,33,63,21,160,164,205,37,93,222,211,137,199,18,135,107,7,83,10,230,113,108,41,195,34,181,63,68,164,52,214,97,63,178 ,22,55,192,80,153,210,224,91,240,104,165]

这个序列的任何一段(32 个元素或 256 位)都可以作为比特币私钥或签名中使用的 k 值,它们看起来都是“随机的”。 不幸的是,无论你执行什么操作,这个序列的熵总是小于或等于 1 位(即 0 和 1)。 也就是说,其他人如果能覆盖所有的熵,进行同样的运算比特币衡量的是什么,也能计算出你所有的私钥和所有的k值。

blockchain.info出现问题时的熵是8位(0-255),也就是说你只需要用这256个数字作为种子,反复进行ARC4运算,覆盖区块链出现问题的时间段出现问题。 info 用户使用的所有随机数(考虑到浏览器缓存和 CDN 缓存,所讨论的时间段的长度可能是数周)。 当然你也可以根据代码做一些优化,只考虑一些可能的情况,比如每33次ARC4next产生一个随机数,或者使用33次ARCnext在256次ARCnext之后产生一个随机数。

例如,在上述0号种子对应的数组中,我们可以进行如下简单的计算:

1.取前33个元素:[222,24,137,65,163,55,93,58,138,6,30,103,87,110,146,109,199,26,127,163,240,204,235,151,69,43,77,50,39,150,95,158,168];

2、根据blockchain.info的算法(自己定义的BigInteger类型),将第一个元素替换为0,最后一个元素加1,得到结果数组:[0,24,137,65,163,55,93,58,138, 6,30,103,87,110,146,109,199,26,127,163,240,204,235,151,69,43,77,50,39,150,95,158,169];

3. 使用此结果数组获取 ak 值:188941a3375d3a8a061e67576e926dc71a7fa3f0cceb97452b4d3227965f9ea9;

4、然后用ECDSA算法计算k值对应的r值:0dcc0b9a668d4b7b8cbde71288bf32bb659bd7fda1b66172ce97fda6f8b0a06e;

5、这个r值在整个区块链的交易签名中出现了5次,这5次交易对应的私钥已经泄露;

6、比如说,地址:19hXXVpwhmu1frqKwF1VZdNfqtGrMvg87n,交易hash:b2b63f29c379ff830f45a5165b0e374093207ddca3e737562617c1d526ef4c65,该笔交易签名就是这个r 值,利用区块链上的数据,任何人都能够很容易的计算出该地址的私钥:5JHyRh8hwyjWjt3RR3B9X6oJt9mzJZwFe8YnF7W22XcSHdD6rxK;

7. 砰!

看到这里,你应该明白了,对于比特币所需要的随机数,仅仅使用密码安全的伪随机数算法是不够的。 你需要的是“好”和“足够”的熵(比特币需要的是 256 bits/bit),无论你使用哪种算法,始终保证熵的质量,绝不降低熵。

最后,比特币本身是安全的,不安全的是错误的解决方案和有问题的熵!

注:小太之前在github上的开源分析程序()中实现了完整的ARC4算法。 如果你有兴趣,不妨亲自尝试一下。 您还可以计算出许多已“碰撞”的随机数。