几个小时前,BBC和GQ和 Economist,发布了文章,说又找到了中本聪,这个中本聪就是我们在去年12月份找到的一个,新闻出来,我第一反应就是假新闻,因为Craig Wright 是有前科的人,去年他就伪造了PGP (注:PGP Pretty Good Privacy ,是一个基于RSA公钥加密体系的邮件加密软件)签名,用了过期的元数据来完成签名,后来被大家发现。甚至在还爆出学位造假的新闻。
但是这次有比特币的核心开发者 Gavin Anderson 的博客,在博客里面,Gavin Anderson 确信Craig Wright 就是中本聪(http://gavinandresen.ninja/satoshi),在博客中Gavin说:I believe Craig Steven Wright is the person who invented Bitcoin. 我相信Craig Steven Wright 就是发明比特币的人。
看到这里我只想说:发生了什么? 难道Gavin也被忽悠了,但是凭借者对Gavin的信任,我相信这里面肯定发生了什么。。
但是几篇公开媒体的报道,都没有明确揭示 Craig Wright是否用他早期挖出的比特币地址对应的私钥进行了有效签名?不禁让人们怀疑他是否真的是中本聪? 或者Gavin的blog被黑了(这个稍后会知道)
据悉,Craig Wright 给出的签名是这个:MEUCIQDBKn1Uly8m0UyzETObUSL4wYdBfd4ejvtoQfVcNCIK4AIgZmMsXNQWHvo6KDd2Tu6euEl13VTC3ihl6XUlhcU+fM4=
转换成16进制以后,我们得到:
3045022100c12a7d54972f26d14cb311339b5122f8c187417dde1e8efb6841f55c34220ae0
022066632c5cd4161efa3a2837764eee9eb84975dd54c2de2865e9752585c53e7cce
我们在这一笔交易中可以发现这个签名消息:
https://blockchain.info/tx/828ef3b079f9c23829c56fe86e85b4a69d9e06e5b54ea597eef5fb3ffef509fe?format=hex
在第248个区块发生了这一笔交易,发生的时间是2009年1月12日。
这也只是说明了,Craig Wright 只是选取了一个公开的交易,然后声称自己拥有这个公钥地址的私钥,这个非常非常让人怀疑,因为这样的一个做法,是无法让人信服的。
另外需要注意的是,比特币的第一笔交易发生在第170个Block,这笔交易是satoshi 发送给 Hal Finney ,除非Craig Wright 可以证明自己拥有前面170个Block中的比特币的地址的私钥,或者用私钥签名某一段消息,我们才可以确认 Craig Wright 就是中本聪。
第170个Block发生的交易
https://blockexplorer.com/block/00000000d1145790a8694403d4063f323d499e655c83426834d4ce2f8dd4a2ee
我们来解释一下,为什么Craig Wright 选取一个公开的签名,来声称自己就是这个签名的主人是不可信的?包括Craig Wright 需要做什么,我们才可以相信他是satoshi?
我们先看一下,密码学中的公钥、私钥和数字签名的基本原理:
一个数字签名需要和现实世界中的手写签名类比,我们模拟手写签名,来设计数字签名所需要的两个性质,首先只要你可以签署你的签名, 但是所有人都可以验证你的签名。第二点是我们希望签名绑定某个特定文档,并且不能被造假利用到你没有签名的地方。因为对于手写的签名而言,类比于别人不能 把你的签名单独切割下来,并粘贴到一个新的文档上面。
那我们如何通过密码学来构建这些性质呢?首先,让我们对讨论的话题更专注一点,这可以使我们更好的理解数字签名方案和一些相关的安全性质。
我们注意到,generateKeys 和 sign 都可以采用随机的算法,实际上,generatekeys 最好可以随机化,因为不同的人需要产生不同的公钥和私钥。Verify 函数则相反,verify 函数最好是确定性的。
现在让我们更详细的探讨我们队数字签名的两个要求,第一个相对比较直接,也就是所有签名必须可以被校验。如果我通过我的私钥签名了一个消息,如果有人需要通过公钥来验证我的签名消息,那么验证的结果应该为真。这个性质是数字签名非常根本的一个性质。
不可伪造性:第二个性质是,在通常的计算能力下面,别人不能伪造你的签名。这就是说,如果有一个对手方,知道了你的公钥,并且知道你在其他消息上的 一些签名,那么这个对手方无法在你没有签名的消息上,伪造你的签名。不可伪造性类似于我们经常在密码学里面遇到的一个经典游戏,也是我们在密码学中安全证 明经常会举例的一个游戏。
在不可伪造的游戏中,有一个黑客声称他可以伪造签名,被挑战者希望测试这个黑客。我们要做的第一件事情就是通过generatekeys这个函数, 来产生私钥和公钥对。我们把私钥给被挑战者,我们把公钥同时给被挑战者和黑客。这样黑客只知道一些公开的信息,他的任务就是伪造一些签名。被挑战者知道私 钥,因此可以签名消息。
直觉上,这个挑战游戏符合现实世界的一些规则,一个现实世界的攻击者也会查看潜在受害者在一些文档上的真正的签名,并且攻击者还通过某些方式操控受害者签署一些看起来无害的文档,但是对攻击者有用的文档。
为了模型化这个游戏,我们允许攻击者可以获得一些真实的签名消息,并且获得可观数量的真实签名消息。我们假设攻击者可以获得一百万个真实的签名消息,但是不是280 这么多。
一旦攻击者看到了足够多真实的签名消息,然后攻击者对一个之前没有看到过的消息M进行伪造签名。对消息M的唯一要求就是攻击者之前从来没有看到过这 个消息。(因为如果攻击者之前看到过这个消息,那么他可以很容易的把这个消息发送回来),被挑战者通过运行verify验证函数来决定攻击者对消息M的签 名是否是真实有效的,如果验证争取,那么攻击者就赢得了这个游戏。
图1不可伪造的游戏。黑客攻击者和被挑战者一起玩这样一个游戏,如果黑客可以在一个之前没有见过的消息上进行签名,那么黑客就赢得这个游戏,反正被挑战者赢得这个游戏,从而可以证明这个数字签名方案是不可伪造的。
我们说数字签名方案不可伪造的意思是,不论黑客利用什么样的算法,他成功伪造签名的概率非常小,小到在实际应用中可以忽略不计。
实际问题是,在实际应用中,为了要把一个算法应用到数字签名领域需要解决很多实际的问题,比如,很多签名算法都是随机的(例如在比特币网络中使用的),因此我们需要一个非常好的随机源,一个好的随机源对算法的安全性是至关重要的。
另外一个在实际应用中需要考虑的问题就是消息的长度,因为在实际签名应用中,你只能签署有效长度的字符串。但是这个问题有个很容易 的解决方案:我们可以通过签名消息的哈希值,而不是签名消息本身。如果我们利用256位输出的hash函数,我们可以签名任意长度的消息,前面我们也讨论 过,我们可以通过利用信息的哈希值作为信息摘要来完成对消息的签名,因为hash函数是防止碰撞的。
另外一个有意思的应用就是,你可以签名一个hash 指针,如果你签名了一个hash指针,那么这个签名可以保护整个数据结构,而不单单是hash指针本身,而是hash指针所指向的整个数据结构。例如如果 你数字签名了区块链起点的hash指针,那么等同于你签名了这个区块链。
椭圆曲线数字签名算法( ECDSA):现在让我们探讨一些更细节的内容,比特币网络用了一个特殊数字签名方案,叫做椭圆曲线数字签名算法,椭圆曲线数字签名算法是美国政府的一个 标准,是早期DSA签名算法的一个升级版本,并利用了椭圆曲线。这些算法已经经过很多年的密码上的安全分析和检验,并且被认为是安全可靠的。
更具体的来说,比特币网络利用椭圆加密曲线中的secp256k1,可以提供128位的安全保护(也就是说,破解这个算法的难度非常高,大概类似于 做2128次)的随机碰撞试验,虽然这个协议是一个标准,但是在比特币网络之外却很少使用,其他利用椭圆加密曲线签名算法的(例如在TLS中安全的网络浏 览器中值的传输)更多的是利用“secp256r1”曲线。这是因为最开始比特币的开发者中本聪选择这样的一个加密曲线,现在很难以改变了。
我们不会探讨ECDSA的具体工作原理,因为有很多比较复杂的数学原理,并且和本身的关系也不大。如果你有兴趣了解的更深入,可以看我们的推荐的一些参考书。但是了解一个基本的签名流程还是非常有帮助的。
Private key: 256 bits Public key, uncompressed: 512 bits Public key, compressed: 257 bits Message to be signed: 256 bits Signature: 512 bits
需要注意的是ECDSA只能签名256位的消息,但是这个并不是一个主要问题,因为消息在签名前都经过了哈希运算,这样可以导致任何长度的消息都可以被签名。
对于ECDSA签名算法而言,一个好的随机源是非常重要的,因为比较差的随机源会导致你的私钥泄露。直觉上的一个认识就是如果你用一个差的随机源来产生私钥,那么你的私钥可能是不安全的。对ECDSA来说,如果你用一个差的随机源来签名消息,即使是用你的很好的私钥,也有可能导致你的私钥泄露。如果你泄露了你的私钥,那么黑客就可以伪造你的签名。因此我们需要特别小心使用一个比较好的随机源来产生公钥和私钥,因为一个不好的随机源会对系统安全造成很大的影响。
到此我们可以清晰的知道,Craig Wright 公布出来的签名只是玩了一个诡计,他选取了一个公开的签名消息,并声称是自己的。如果他真的拥有这个地址的私钥 (12cbQLTFMXRnSzktFkuoG3eHoMeFtpTu3S),那么他应该就是中本聪。 1 他可以移动上面的比特币来证明自己 2 他可以用该地址的私钥,来签名一段消息,比如签名:i am satoshi, 然后让大家验证。 如果这两点他都做不到,那么我们如何相信他是中本聪呢?
声明:此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网站所提供的信息,只供参考之用。