(尼尔·科布利兹教授,ECC提出者。图片来源于网络)
前文回顾:
【连载】比特币史话 | 创世(1)
【连载】比特币史话 | 创世(2)
【连载】比特币史话 | 创世(3)
【连载】比特币史话 | 密码朋克(1)
【连载】比特币史话 | 密码朋克(2)
【连载】比特币史话 | 密码朋克(3)
【连载】比特币史话 | 密码朋克(4)
【连载】比特币史话 | 椭圆曲线(1)
正文:
“公钥加密技术”,或者说“非对称加密技术”,这其中的“加密技术”一词,有人认为是对cryptography(密码学)的一种习惯性误译。“加密”则应当是encryption的对译。也因为此,本应译作“密码货币”的cryptocurrency也更经常的被大家叫做“加密货币”。不过,从韦氏英英词典(Merriam-Webster)对于cryptography一词的释义来看[1],第一个意思是“秘密书写”,第二个意思是“用密码进行加密和解密”,翻译成“加密”倒也还算贴切。
公钥加密技术有两个常见的用途,一个是对数据进行加密和解密,另一个就是对数据进行电子签名,并进行签名的验证。其中,加密的目的是为了隐藏原文,而签名的目的则是为了证明原文属实,两者的用意大不相同。又因为公钥加密技术使用两把不同的钥匙而不是一把,当该技术被用于加密时,发信人使用收信人的公钥对原文进行加密,把密文发送给收信人,收信人使用对应的私钥对密文进行解密,还原出原文。整个过程中,经由互联网传输的信息只有公钥和密文,所以就可以有效保护原文和私钥的秘密性。而当该技术被用于签名时,发信人使用自己的私钥对原文进行签名,把对应的公钥、原文和签名三个信息都发送给收信人,收信人拿到这三个信息就可以通过验算得知,该原文确实是由该公钥的主人,也就是发信人,进行签名的。如果原文内容在传输过程中被第三人篡改了,那么签名验证就会失败,收信人就会知道内容被篡改而不可信了。如果第三人想要伪造发信人的签名,那么他必须先拿到发信人的私钥,而私钥在整个过程中都是不需要触网的,这样就最大程度上避免了第三人盗取发信人私钥的可能性。
RSA算法可以用于加密,也可以用于签名。RSA算法所基于的数学原理是数论中的一个问题,大素数乘积分解问题。简单的讲,就是给你两个很大很大的素数,让你计算它们的乘积,这非常容易;但是,如果给你一个很大很大的数,告诉你这是两个很大很大的素数相乘得来的,请你找出来是哪两个素数,这就非常非常困难了。所以,RSA算法的安全性和密钥的长度密切相关。768比特以下的密钥通常不认为是足够安全的,一般而言,建议使用1024比特以上的密钥。但是,密钥长度给RSA算法带来了一些天生的问题,一是数据量大,二是计算速度慢。[2]
相比之下,基于离散对数问题的椭圆曲线算法有着更高的效率。160比特的椭圆曲线算法就可以取得和1024比特的RSA算法同等的加密强度(二者都是80比特的加密强度)[3]。因此,椭圆曲线算法就有着安全性能更高、计算速度更快、数据量更小,从而带来了存储空间和带宽占用的节省等诸多优点。而正是这些优点,让中本聪相中了椭圆曲线算法,并选择椭圆曲线电子签名算法(ECDSA)作为比特币交易签名所用的算法。
对于这一选择,中本聪分别在2010年1月29日[4]、2010年5月20日[5]以及2010年7月25日[6]三次参与论坛话题讨论时解释道,“比特币使用的是椭圆曲线电子签名算法。这个算法只能用于电子签名,而不能用于加密。RSA两者都能做,但是我没有采用它,因为它要大一个数量级,这就不切实际了。”“不是说可执行程序的大小,而是说数据的大小。如果区块链、比特币地址、磁盘空间、带宽需求都大一个数量级的话,这就不太可行了。”
【未完待续】(公众号:刘教链)