ECC 构筑安全可靠的区块链

现在很多基于区块链技术的数字货币系统,比如:比特币和以太坊,它们都使用了椭圆曲线密码学(ECC, Elliptic Curve Cryptography)来保证货币的安全性。

 

ECC 是一种公开密钥密码学,又称为非对称密码学。在这种密码学中,需要产生一对密钥。其中一个密钥称为私钥,需要保密;另一个密钥称为公钥,是可以公开让别人知道的。

私钥和公钥在数学上的关系是不可逆的,也就是通过某个数学函数,我们可以私钥计算出公钥,但是不能从公钥反向推导出私钥(或者说从计算上是不可行的)。

椭圆曲线加密算法对应的数学函数是椭圆曲线乘法,而另一种广泛使用的非对称加密算法 RSA (由三个发明人姓氏的开头字母组成)对应的数学函数是极大整数的因式分解。

与对称密码学使用相同的密钥进行加解密不同,非对称密码学有一个有用的特性:如果用公钥对数据进行加密,只有用对应的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。

一听说椭圆曲线,很多人会凭直觉认为这条数学曲线像个椭圆,其实不然。椭圆曲线因为用二元三次方程 y2 = x3 + ax + b 表示,类似椭圆周长计算方程 

ECC 构筑安全可靠的区块链

 而得名。以下是比特币的椭圆曲线图,是不是一点也不像椭圆:

ECC 构筑安全可靠的区块链

椭圆曲线上点的加法定义:任意取椭圆曲线上两点 A、C (若 A、C 两点重合,则做 A 点的切线)做直线交于椭圆曲线的另一点 D\',过 D\'做 y 轴的平行线交于 D。在这里我们规定 A+C=D。

ECC 构筑安全可靠的区块链

k 个相同的点 P 相加,我们记作 kP。如下图:P+P+P = 2P+P = 3P。

ECC 构筑安全可靠的区块链

如果我们定义 K=kG, k 为整数,G 为椭圆曲线上的一个点,该等式就是表示 k 个 G 点相加或 k 乘以G 得到的结果为点 K,K 也为椭圆曲线上的一个点。

我们可以用这个等式中的 k 作为私钥,而结果点 K 作为公钥。G 为该椭圆曲线的基点,和参数 a,b 都是公开的

已知整数 k 和基点 G,根据椭圆曲线加法法则,推算出点 K 是非常容易的,因为存在快速算法可以将计算复杂度降低到O(logk)

私钥推导出公钥的过程是不可逆的,即现在数学上还没有有效的方法可以从基点 G 和点 K 推算出整数 k。如果使用遍历法来寻找整数 k,其计算复杂度为O(k)。在实际使用时,整数 k 会取一个非常大的值。

比如: k 为一个78位的十进制数,由私钥推算出公钥的计算复杂度为 O(78),用遍历法从公钥找出私钥的计算复杂度为 O(1078),而宇宙中已知的原子总数大概为 1080,所以采用暴力破解法破解私钥是根本不可行的。

为了让椭圆曲线更形象易理解,我们上面画的曲线都是连续的,实际用于加密的曲线都是有限域上定义的离散曲线。

随着椭圆曲线参数 a、 b,基点 G 的不同,椭圆曲线的加密性能也不一样。为了获得更高的安全性,对这些参数也有一些特定的要求。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgzjxg.html