1703864700
我们后面会用到的另一个技巧是,可以对于哈希指针进行签署。如果你签署了哈希指针,那么该签名覆盖(或者说保护)整个结构——这不仅仅是哈希指针本身,还包括哈希指针指向的整个区块链。比如,如果签署了区块链末尾的哈希指针,其结果就是你有效地数字签署了整条区块链。
1703864701
1703864702
椭圆曲线数字签名算法
1703864703
1703864704
现在让我们来看一下具体的细节。比特币使用的数字签名方案叫作椭圆曲线数字签名算法(ECDSA)。ECDSA为美国政府的标准,是早前DSA[1]算法利用了椭圆曲线的升级版。这些算法经过了数年的细致密码分析,且被普遍认为是安全的。
1703864705
1703864706
更具体地说,比特币使用ECDSA算法,而不是标准椭圆曲线“secp256k1”[预计提供128位安全保障,即打破这个算法的难度与执行2128对称性密钥运算(如破解哈希函数)一样困难]。虽然这个曲线是公开标准,但除比特币以外鲜有使用,其他使用ECDSA的应用(如安全网络浏览时的TLS[2]密钥交换)通常都使用更常见的“secp256k1”曲线。这就是比特币的一个古怪之处,因为在比特币系统早期实施中被中本聪选定(参见原版前言),现在已很难改变。
1703864707
1703864708
我们不会详细地讨论ECDSA的原理,因为这涉及一些过于复杂的数学知识,且对于本书的其他内容没有太多帮助。如果你对ECDSA感兴趣,请参见本章末尾延伸阅读部分。虽然我们这么说,但对于了解各种参数也许会很有必要:
1703864709
1703864710
个人密钥:256位
1703864711
1703864712
公钥(未压缩):512位
1703864713
1703864714
公钥(压缩):257位
1703864715
1703864716
待签名信息:256位
1703864717
1703864718
签名:512位
1703864719
1703864720
注意,严格来讲,虽然ECDSA只能签署256位的信息,但这存在问题,因为信息在签署之前总是已经经过哈希压缩,因此,任何大小的信息都能被有效签署。
1703864721
1703864722
使用ECDSA时,确保随机性良好来源至关重要,因为不良来源将可能导致密钥信息的泄露。这一点不难理解,如果你使用了不良随机来生成密钥,那么该密钥就可能不安全。但是ECDSA的古怪就在于,即使你仅仅只是在生成签名时使用了不良随机,而你使用的密钥完美无缺,你的个人密钥还是有可能泄露(熟悉DSA的人都知道这是DSA的古怪之处,但并不针对椭圆曲线)。接着游戏就结束了,如果你的个人密钥泄露,对手就可以伪造你的签名。因此,我们在实践中要特别注意使用良好随机来源,使用不良随机来源是安全系统的一个常见缺陷。
1703864723
1703864724
数字签名作为密码学基础,我们对其讨论就此结束。在下一节,我们将讨论对打造加密货币会带来帮助的一些数字签名应用。
1703864725
1703864726
1703864727
加密货币及加密术
1703864728
1703864729
如果你一直在期待比特币使用的加密算法,我们可能会让你失望了,比特币并没有使用任何加密术,因为并没有加密的需要。加密术只是因为现代密码学而变得可能成为众多技术中的一个,很多技术(如承诺方案)在某种程度上隐藏信息,但是与加密术有所不同。
1703864730
1703864731
[1]DSA (Digital Signature Algorithm),电子签名算法。——译者注
1703864732
1703864733
[2]TLS(Transport Layer Security),传输层安全协议,用于在两个通信应用程序之间提供保密性和数据完整性。——译者注
1703864734
1703864735
1703864736
1703864737
1703864739
区块链技术驱动金融:数字货币与智能合约技术 1.4 公钥即身份
1703864740
1703864741
让我们来看一下与数字签名并行的一个有用技巧,基本想法是从数字签名模式中拿出一个公共验证密钥,并将其与一个人或一个系统参与者的身份对等。如果你见到一条消息的签名被公钥pk正确验证,那么你可以认为pk就是在表达这条消息。你真的可以将公钥认为是参与者或者系统的一方,他可以通过签署声明而发布声明。从这个角度来说,公钥就是身份,让某人能为pk身份发声,他必须知道相应的密钥sk。
1703864742
1703864743
将公钥视为身份的一个结果是,你可以随时制定新的身份——你可以简单通过数字签名方案中的generateKeys程序,生成新的密钥对sk和pk。pk是你可以使用的新的公共身份,sk是相应的密钥,只有你自己知道并可以让你代表身份为pk发声。在实践中,你可能会使用pk的哈希作为你的身份,这是因为公钥很大。如果是这样的话,为了验证消息来自你的身份,人们会需要验证:(1)你的身份确实是pk的哈希;(2)信息能经过公钥pk验证。
1703864744
1703864745
此外,在默认情况下,你的公钥pk基本上看起来是随机的,也并没有人能够通过检查pk发现你的现实身份(当然,一旦你开始使用这个身份发表声明,这些声明可能泄露信息,而让别人将你的真实身份与pk联系起来。我们很快会更详细地讨论这个问题)。你可以生成一个看起来随机的新身份,看起来像人群中的一张脸,但这些都只有你能够控制。
1703864746
1703864747
去中心化身份管理
1703864748
1703864749
公钥和私钥的体系,帮助我们引入去中心化的身份管理的理念。你可以自己作为用户注册,而无须到一个中央机构注册为系统用户。你不需要别人给你一个用户名,你也不需要告诉任何人你会使用什么名字。如果你想要新的身份,可以随时生成一个,而且想要多少就生成多少。如果你希望拥有五个不同的名字,没有问题!那就生成五个身份。如果你想匿名一阵子,你可以生成一个新的身份,使用一段时间,然后弃之不用。有了去中心化身份管理,所有这一切都变得可能。事实上,这就是比特币对待身份的方式。这些身份在比特币语言中被称为地址。你可以常常听到地址这个词,用于比特币或加密货币相关的内容中,而地址其实就是公钥的哈希值。作为去中心化身份管理方案的一部分,它就是某人凭空捏造的一个身份而已。
[
上一页 ]
[ :1.7038647e+09 ]
[
下一页 ]