进一步探讨比特币签名中的随机风险
时间:2014-11-10 来源:比太钱包 作者:比太钱包
通过小太的上一篇文章(http://www.wanbizu.com/jingyan/201411063310.html),您应该明白签名比特币交易时随机的k值有多么重要了,我们甚至可以说,k值的随机性与私钥的随机性一样重要。今天,让我们更深入的探讨一下这个话题。 现在大家已经知道,不安全的随机数生成器有可能会导致的k值重复(对应的r值当然也重复),进而造成私钥暴漏,那保证k值不重复总该没事了吧 上一篇文章中所提到的Filippo,他关于k值的观点是“k must be secret and unique. NOT NECESSARILY RANDOM.”(k值必须是保密且唯一的,并不一定必须随机)。这句话其实并不十分严谨,因为“保密且唯一”其实就意味着要尽可能的“真”随机,至少也要做到密码学安全的随机,否则谈何“保密且唯一”呢,即便是RFC6979规范,也可以看成是一种特殊设计的、密码学安全的随机数生成方法。 对于比特币安全来说,最重要的仍然是随机,因为我们面临的可不仅仅是“同一个私钥签出的不同交易中使用了重复的k值”这么一种风险,还有其它潜在的暴漏私钥的可能性,关于这些可能性,安全工程师、比特币开发者们需要学习,而黑客们也没准正忙着学习并分析历史上的区块链数据寻找机会偷币呢。 可能性1: 使用相同钱包解决方案的用户A和用户B,因该钱包所依赖的随机数生成器不够安全,导致A和B使用了相同的k值来签名交易,这在区块链数据上看到的现象就是由两个不同的比特币地址签出的交易中r值相同。在这种情况下,作为第三方观察者的黑客,可能拿这两个地址没办法,但从理论上讲,如果A记录了自己的k值,就能够计算出B的私钥,反之亦然。当然,因为没有人、也没有任何一个钱包软件会记录过去签名时所用到的k值(如果记录了,反而更有问题,因为如果有人获取了您之前使用过的k值,就能反推出您的私钥,进而盗取您的比特币),所以总体上来讲,此类的r值重复的风险要远小于由同一个地址签出的交易r值重复的情况。但也不排除有黑客分析出该钱包的随机数漏洞,通过缩小概率空间来尝试暴力破解k值,进而盗取该钱包用户的比特币资产。 可能性2: 使用相同钱包解决方案的用户A和用户B,因该钱包所依赖的随机数生成器不够安全,导致A和B出现了两次k值重复(不是自己和自己重复,而是与对方重复),即A用了k1和k2,B也用了k1和k2。在这种情况下,任何一个第三方黑客,都能够反推出A的私钥和B的私钥,两个人的比特币资产均会被盗。 可能性3: 因某钱包解决方案所依赖的随机数生成器不够安全,导致签名交易时使用的k值与私钥相同(钱包软件一般都会使用相同的随机数算法来生成私钥和计算k值),放心吧,交易一广播出去,币马上就丢,黑客运气好点、程序跑的快点的话,甚至有可能把刚广播的交易给双花了。 看到上述几种可能性,您就该明白,除了私钥的安全,k值的随机性对于比特币安全来说有多么重要了吧 我们都知道,可以把比特币私钥看成是宇宙中有2^256个抽屉(其实私钥的范围要小于这个数),生成一个私钥就相当于随便抽出了一个抽屉往里面放钱,用这种方式,我们同样可以把k值看成是宇宙中有2^256个钥匙,每次花钱都要随便拿一把钥匙,用完就把钥匙扔掉。这两个过程都要保证是随机的,以避免能被其他人所复现,重复了就有可能导致财产损失,这就是小太为什么会说“随机是比特币的命根子”的根本原因。 像上一篇文章中所提到的blockchain.info的问题,其实本篇文章中的这几种可能性出现的几率就更高了。比如说,如果服务器管理员能够一定程度的掌握服务器随机数,除了能提高碰撞私钥的概率,还能大幅提高碰撞k值的概率;对于第三方黑客而言,也有更多有问题的地址和交易供其尝试反推私钥;这就是错误的随机数生成方案所带来的潜在风险。 历史上这些有问题的r值均出现过,其中单个地址r值重复直接导致过的丢币就有过很多次(这种情形对于黑客来说最容易判断),而本文中的这几种可能性也均发生过,但是否真导致了用户丢币就不得而知了,因为即便是真丢了,用户也可能不知道是为什么,偷的人到底是谁,怎么偷的,大家也不得而知。如前所述,k值的概率空间是2^256,即便是地球上的所有人每天从早到晚的用比特币在进行着交易,都不应出现重复。而当前仅仅百万个钱包、千万笔交易的数量级就导致了这么多次的r值问题,这足以说明,当前的不少钱包解决方案也“太不随机”了。 历史上的一个块(322925)中,曾出现过很多个地址的很多笔交易的r值均重复(大哥,您签名比特币交易时是用了同一个k值,写个循环干的吗 )。 这里再补充一点,如果大家使用的都是密码学安全的、尽可能“真”的随机数生成器来生成k值,那么按道理来讲,整个区块链上的r值应该也是随机分布的,随着区块链上的交易数量越来越多,统计学上,r值分布也应越来越均匀。但现实情况是整个区块链的r值分布非常集中(可能是拜一些钱包采用了不安全的随机数解决方案所赐),随着交易数量的不断增加,碰撞出有问题的地址的概率也就越来越高,这也是比特币未来发展巨大隐患,理应引起钱包解决方案提供商和比特币企业的足够重视,没准黑客比你们更重视哈! 最后,问大家一个问题,您的随机数,安全吗 小太随机系列谈还有最后一篇哦,敬请期待! |