最近看到一篇文章Satoshi』s Genius: Unexpected Ways in which Bitcoin Dodged Some Cryptographic Bullets,国内有人翻译过(中本聪的天才:比特币以意想不到的方式躲开了一些密码学子弹)。里面说的第一个就是天才的中本聪并不是将公钥而是将公钥两次 HASH 之后作为比特币账户的地址,这可以让比特币系统抵抗量子计算机的攻击。
这个观点基于如下理由:虽然比特币所使用的公钥体系 ECDSA 可被量子计算机破解(量子计算机可在短时间内从公钥推导私钥,从而冒充持有人签名交易),但用户公钥并不在网络上可见。网络可见的地址只是公钥的两次 HASH 值。要从 HASH 值推导到公钥再倒推回私钥,面临 HASH 和 ECDSA 两重密码学困境,这几乎是一件不可能的事情(备注:此处结论是基于一种被大家认可的信念。在理论上, HASH 算法的逆推复杂性未得到证明,把 HASH 和 ECDSA 结合是否增加破解的复杂性也是未知的)。
不过上述假设条件「用户公钥并不在网络上可见」并不一定成立。情况如下:
- 其它人无法在公开网络中获取未对外支付过的比特币账户的公钥。
- 但对外支付过的比特币账户的公钥在网络上公开的。这是因为当一个地址进行支付时,它必须提供签名以及公开公钥,以验证交易的确由该地址而不是他人冒充发出。
大多数人只知道 ECDSA 无法抵抗量子计算机,但实际情况更糟。目前大家还不知道这类公钥密码体系在传统计算机体系下是否保险,理论计算机界还未证明它的可靠性。这也意味着,也许某些专家或者国家机构已经发明了使用传统计算机的破解方法(由于该破解带来的重大经济和军事意义,破解方法秘而不宣是完全可能的)。
基于上述理由,唯一的建议是,尽量保证比特币的地址的公钥未在网络上泄漏过(亦即,该地址从未对外支付过)。一个简单的方法是,每次支付时,将支付余额转到一个新的账户,废弃旧账户。这也是比特社区推荐的做法。
上面提及的密码学破绽的世纪可能性极低,可实际应用的量子计算机遥不可及,真正能破解 HASH 和公钥密码体系的人也看不上比特币那么点资产。比特币最主要的安全风险还是来源于钱包(保存私钥,从私钥可快速生成公钥)被盗的风险,而这又依赖于操作系统和个人使用习惯,非密码学体系可解决。由于使用时间越长的账户,私钥泄漏的可能性越大,上述不断使用新地址的方法也可降低因私钥被盗导致的风险。
当然并不是所有账户都能这么做。比如接受公开捐赠的账户,总不能变来变去。其实这不符合正常的用户习惯。这是为了获取安全性(比特币社会认为还有私密性)的一种妥协。
Q. E. D.