一般来说,与新手的直觉不同的是,概率系统是不可预测且难以推理的,反面的常常是真的——统计学理论使得我们可以精确地量化我们感兴趣的事件的概率,并对该系统行为做出自信的推论。
换句话说,在比特币系统中,你不需要明确地注册或揭露你的真实身份,但是你的行为模式本身可能是可识别的。这就是比特币等加密货币的基本隐秘性问题,我们将会在第6章专门讨论这个问题。
我们给你的回答是,别人生成一个与你的相同256位密钥的概率如此之小,在实践中,我们不需要担心它会发生。总而言之,我们保证这种情况绝不会发生。
公钥和私钥的体系,帮助我们引入去中心化的身份管理的理念。你可以自己作为用户注册,而无须到一个中央机构注册为系统用户。你不需要别人给你一个用户名,你也不需要告诉任何人你会使用什么名字。如果你想要新的身份,可以随时生成一个,而且想要多少就生成多少。如果你希望拥有五个不同的名字,没有问题!那就生成五个身份。如果你想匿名一阵子,你可以生成一个新的身份,使用一段时间,然后弃之不用。有了去中心化身份管理,所有这一切都变得可能。事实上,这就是比特币对待身份的方式。这些身份在比特币语言中被称为地址。你可以常常听到地址这个词,用于比特币或加密货币相关的内容中,而地址其实就是公钥的哈希值。作为去中心化身份管理方案的一部分,它就是某人凭空捏造的一个身份而已。
你可以不经过中央机构而生成一个身份的概念可能看起来有悖常理。毕竟,如果有人刚好就生成了跟你一样的密钥,他不就能偷走你的比特币吗?
让我们来看一下与数字签名并行的一个有用技巧,基本想法是从数字签名模式中拿出一个公共验证密钥,并将其与一个人或一个系统参与者的身份对等。如果你见到一条消息的签名被公钥pk正确验证,那么你可以认为pk就是在表达这条消息。你真的可以将公钥认为是参与者或者系统的一方,他可以通过签署声明而发布声明。从这个角度来说,公钥就是身份,让某人能为pk身份发声,他必须知道相应的密钥sk。
乍一看,去中心化身份管理可能极具匿名性及隐秘性。毕竟,你可以自己创建一个看起来很随机的身份,同时也不用告诉任何人你的真实身份是什么。但事实并不是这么简单,随着时间的推移,你创建的身份会做出一系列的声明。人们看到这些声明便知道拥有这个身份的人做出了特定的一系列行为。他们能够开始将细节联系起来,从这一系列的行为推断出你的真实身份。随着时间的推移,一个观察者可以将这些事情联系起来,并推断出这样的结论:“天,这个人的行为好像乔(Joe),可能这个人就是乔。”
安全性与随机性
此外,在默认情况下,你的公钥pk基本上看起来是随机的,也并没有人能够通过检查pk发现你的现实身份(当然,一旦你开始使用这个身份发表声明,这些声明可能泄露信息,而让别人将你的真实身份与pk联系起来。我们很快会更详细地讨论这个问题)。你可以生成一个看起来随机的新身份,看起来像人群中的一张脸,但这些都只有你能够控制。
将公钥视为身份的一个结果是,你可以随时制定新的身份——你可以简单通过数字签名方案中的generateKeys程序,生成新的密钥对sk和pk。pk是你可以使用的新的公共身份,sk是相应的密钥,只有你自己知道并可以让你代表身份为pk发声。在实践中,你可能会使用pk的哈希作为你的身份,这是因为公钥很大。如果是这样的话,为了验证消息来自你的身份,人们会需要验证:(1)你的身份确实是pk的哈希;(2)信息能经过公钥pk验证。
但还有一个精妙之处:概率保证只有在密钥为随机产生时为真。在现实系统中,随机的生成常常是薄弱环节。如果两个用户的电脑使用同样的随机来源或者使用可预测的随机,那么理论保证不再适用。所以,在生成密钥时使用良好随机源至关重要,以确保实践保证与理论保证相符。