(geohot,美国安全黑客。图片来源于网络)
前情回顾:
比特币史话·84 | 压缩(2): 装到手机里
比特币史话·85 | 压缩(3): 植树造林
比特币史话·86 | 压缩(4): 布隆过滤器
比特币史话·87 | 随机(1): 真伪随机数
比特币史话·88 | 随机(2): 脑钱包
正文:
2010年,在德国柏林举办的第27届CCC黑客大会(全称“混乱通信大会”,Chaos Communication Congress)上,一个代号fail0verflow的黑客小组宣布他们成功破解了日本索尼公司出品的全球流行的家用游戏机PS3 (Playstation 3)的签名算法,从而可以对任何非官方刻录的游戏光盘镜像可以进行合法签名,从而使得这些刻录盘像正盘版一样在任何一台PS3游戏机上运行。同时,这一破解使得任意第三方开发的程序都可以获得和官方同等效力的签名,从而直接在PS3上运行。甚至,他们可以制作升级包,而PS3主机会把这些升级包当成官方出品的升级包一样接受并升级。
这一系列神乎其技的破解,其实背后的原理真的是非常简单。PS3游戏机是如何识别一个软件包或者游戏光盘是不是索尼官方授权的呢?答案就是使用ECDSA椭圆曲线数字签名算法。而fail0verflow的破解也很简单直接,就是搞到了索尼公司用来给这些游戏软件签名用的私钥。
破解私钥无疑是一种釜底抽薪的方式。索尼公司没有任何可能性应对。
不过fail0verflow出于对索尼公司借用公权力实施打击的忌惮,并没有公布他们获得的私钥。直到2011年1月3日,美国安全黑客geohot,真名乔治·弗朗西斯·霍茨(George Francis Hotz, 1989-),17岁时就成为世界上首个成功破解iPhone的天才少年,公布了索尼公司用以签名的私钥,其16进制形式为:
46 DC EA D3 17 FE 45 D8 09 23 EB 97 E4 95 64 10 D4 CD B2 C2
同时,geohot还用这个私钥签发了一个“Hello world”演示程序,以展示该私钥的有效性。9天后,索尼美国分公司把fail0verflow和geohot告上了法庭,理由是违反了1998年美国版权法DMCA(数字千年版权法,Digital Millennium Copyright Act)以及1986年美国赛博安全法CFAA(计算机欺诈和滥用法,Computer Fraud and Abuse Act)。诉讼以geohot同意接受永久禁制令而了结。[1]
但是,实事求是地讲,索尼此次私钥泄露事件,完全是他们自己失误所致。众所周知,ECDSA椭圆曲线数字签名算法在每次计算签名时都需要混合一个随机数,以隐藏私钥。如果在两次或更多次签名中,使用了随机性不够强的随机数,或者有规律和关联关系的伪随机数,那么就有可能根据这些签名反向推算出用于签名的私钥是什么。如果是像索尼公司那样每次都使用了一个固定不变的数字,那么就一定可以根据签名反向推算出私钥,就像fail0verflow和geohot所做的那样,而且方法非常简单,只需要用到四则运算,任何人了解了原理之后都能做到。[2]
对于比特币,以及其他使用了椭圆曲线数字签名算法的区块链数字货币,每次发起转账交易或者其他上链操作,进行数字签名的时候,所使用的钱包软件或者应用软件是否能够产生具有足够随机性的随机数,将不仅仅影响你本次交易的安全性,而且会直接关系到你的私钥的安全性,也就是丢失该地址名下全部资产的风险。而且,这种风险一旦发生,将无法撤销。由于数字签名会被发送到全网并被永久记录在区块链上,所有包含不良随机性的数字签名,也会被区块链永久记录下来,等待有心人的破解。这,就是比特币系统设计中第二处依赖于良好随机性的地方。
因此,绝对不要把你的比特币私钥随随便便导入到未经验证的甚至来路不明的钱包软件或者第三方应用程序中去,即便它们不直接盗取你的私钥和资产,它们是否有能力在使用数字签名算法为你签署交易时产生良好的随机数,而不会由于代码上的缺陷让你的私钥暴露在被窃取的风险之下,也会是一个值得怀疑的问题。
产生良好的随机数并非想象中的那么容易。还记得斯诺登事件吧。计算机标准的随机数生成器Dual_EC_DRBG都是有可能被美国国安局NSA放了后门的。真正安全的钱包和客户端软件应该有能力绕过这些陷阱,实现安全的随机数生成算法。
当然,牢记中本聪的忠告会相当有益:“为了更强的隐私,最好每个比特币地址只用一次。”(2009年11月25日论坛帖子,中本聪所说的“用”是指动币付款,而只收款不付款的话,因为完全不需要做任何操作,所以都是安全无虞的)[3]
【未完待续】(公众号:刘教链)