深度探讨椭圆曲线加密算法

NervosFans
8 min readMay 18, 2018

--

大家有没有想过,为什么这么多人对区块链这么感兴趣,对发币这么感兴趣。答案很简单,无非是区块链的通证经济能够让大家的生活越来越好,也让大家都知道区块链的经济形态是条不错的致富之道。

可是,是什么样的机制保障了区块链的经济形态能够安全稳定持续地发展下去呢?

今天我们来分享为区块链保驾护航的机制 — 加密算法的介绍。

先解释加密算法前,请老司机原谅,我们先简单介绍下密码学。

密码学本质是加密算法,为数据的明文文件进行加密处理,使其变成不可读的一段代码,但输入相应的密钥后,才能显示本真的内容。大家通过这样的方式来保护数据的安全,确保数据不被盗窃不被阅读,该过程称为加密;该过程逆向逻辑是解密;该过程中,在讨论用什么样的数学算法进行保密性高的加密,称为密码学。

现在比特币常用的加密算法有哪些呢?我们逐一介绍。

现比特币仍继续使用公开密钥加密(public-key cryptography,也称为非对称加密)方式进行数据加密,实质是一对数学算法相关的公钥密钥解密的关系,使用通过私钥解开公钥(公开的密钥)后获取本真的信息,此过程是非对称加密算法。

公钥的主要作用:加密;验证签名。

私钥的主要作用:签名;解密。

特性:

通过私钥可以计算出公钥,反之则不行。

公钥加密:公钥加密的内容可以用私钥来解密 — — 只有私钥持有者才能解密。

私钥签名:私钥签名的内容可以用公钥验证。公钥能验证的签名均可视为私钥持有人所签署。

使用原则:

① 每一个公钥都对应一个私钥。

② 密钥对中,让大家都知道的是公钥,不告诉大家,只有自己知道的,是私钥。

③ 如果用其中一个密钥加密数据,则只有对应的那个密钥才可以解密。

④ 如果用其中一个密钥可以进行解密数据,则该数据必然是对应的那个密钥进行的加密。

对称密钥密码的主要应用就是公钥加密和公钥认证

举个例子:

A(客户)想给B(服务器)发送一段文字,但是不想让别人看到,因此想使用非对称加密方法来加密这段文字,当然,B需要有一对公钥和私钥:
① B将他的公钥发送给A
② A用B给他的公钥加密这段文字,然后传给B
③ B用他的私钥解密A发过来的消息,这里要强调的是,只要B的私钥不泄露,这封信就是安全的,即使落在别人手里,也无法解密。
通过这几步,B就能成功收到A发送的信息,同时又达到了保密的目的。

那如何解密呢?

另一种是椭圆曲线加密算法

椭圆曲线密码学(英语:Elliptic curve cryptography,缩写为ECC),一种建立公开密钥加密的算法,基于椭圆曲线数学。椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的。

椭圆曲线密码学的主要优势是在某些情况下它比其他的方法使用更小的密钥 — — 比如RSA加密算法 — — 提供相当的或更高等级的安全。椭圆曲线密码学的另一个优势是可以定义群之间的双线性映射,基于Weil对或是Tate对;双线性映射已经在密码学中发现了大量的应用,例如基于身份的加密。不过一个缺点是加密和解密操作的实现比其他机制花费的时间长。

双线性映射解释:在数论中,一个双线性映射是由两个向量空间上的元素,生成第三个向量空间上一个元素之函数,并且该函数对每个参数都是线性的。

椭圆曲线加密算法本质是数标轴上曲线的方程式计算,通过数的计算得到加密/解密。

例如:

公开密钥算法总是要基于一个数学上的难题。比如RSA 加密算法依据的是:给定两个素数p、q 很容易相乘得到n,而对n进行因式分解却相对困难。那椭圆曲线上有什么难题呢?

假设如下方程等式:

K=kG [其中 K,G为Ep(a,b)上的点,k为小于n(n是点G的阶)的整数]

不难发现,给定k和G,根据加法法则,计算K很容易;但给定K和G,求k就相对困难了。

这就是椭圆曲线加密算法采用的难题。我们把点G称为基点(base point),k(k<n,n为基点G的阶)称为私有密钥(privte key),K称为公开密钥(public key)。

我们看下图,下图描述一个利用椭圆曲线进行加密通信的过程:

1、用户A选定一条椭圆曲线Ep(a,b),并取椭圆曲线上一点,作为基点G。

2、用户A选择一个私有密钥k,并生成公开密钥K=kG。

3、用户A将Ep(a,b)和点K,G传给用户B。

4、用户B接到信息后,将待传输的明文编码到Ep(a,b)上一点M(编码方法很多,这里不作讨论),并产生一个随机整数r(r<n)。

5、用户B计算点C1=M+rK;C2=rG。

6、用户B将C1、C2传给用户A。

7、用户A接到信息后,计算C1-kC2,结果就是点M。因为

C1-kC2=M+rK-k(rG)=M+rK-r(kG)=M

再对点M进行解码就可以得到明文。

在这个加密通信中,如果有一个偷窥者H ,他只能看到Ep(a,b)、K、G、C1、C2 而通过K、G 求k 或通过C2、G求r 都是相对困难的。因此,H无法得到A、B间传送的明文信息。

密码学中,描述一条Fp上的椭圆曲线,常用到六个参量:

T=(p,a,b,G,n,h)。

(p 、a 、b 用来确定一条椭圆曲线,

G为基点,

n为点G的阶,

h 是椭圆曲线上所有点的个数m与n相除的整数部分)

这几个参量取值的选择,直接影响了加密的安全性。参量值一般要求满足以下几个条件:

1、p 当然越大越安全,但越大,计算速度会变慢,200位左右可以满足一般安全要求;

2、p≠n×h;

3、pt≠1 (mod n),1≤t<20;

4、4a3+27b2≠0 (mod p);

5、n 为素数;

6、h≤4。

量子计算机能解决的问题,是否会威胁到当前的密码体系呢?答案是的确会。目前的密码体系大体有两种:对称密码与非对称密码。AES是前一种的例子,RSA是后一种的例子。又如,X11 是由达世币核心研发者 Evan Duffield 发明,并得到广泛应用的哈希算法。它的链式哈希算法运用了一系列共 11 个科学哈希算法,作为工作量证明。这样不仅确保了信息处理分配的公正,还保留了比特币原有的特性。

椭圆曲线数字签名算法(ECDSA)是使用椭圆曲线密码(ECC)对数字签名算法(DSA)的模拟。ECDSA 于 1999 年成为 ANSI 标准,并于 2000 年成为 IEEE 和 NIST 标准。它在 1998 年既已为 ISO 所接受,并且包含它的其他一些标准亦在 ISO 的考虑之中。与普通的离散对数问题(discrete logarithm problem DLP)和大数分解问题(integer factorization problem IFP)不同,椭圆曲线离散对数问题(elliptic curve discrete logarithm problemECDLP)没有亚指数时间的解决方法。因此椭圆曲线密码的单位比特强度要高于其他公钥体制。

对称密码的话,Grover算法能进行不小的加速,比如说AES-128的密钥空间是2¹²⁸,通过构造适当的可以量子化的数据库黑盒子,Grover算法能在大约2⁶⁴的时间内找到密钥,而经典计算机则需要大概2¹²⁸的时间。不过这个问题并不特别大,换用更长的密钥就可以了。问题在于非对称密码,无论是基于因子分解问题的RSA,还是基于椭圆曲线上离散对数的ElGamal,都可以用量子计算机在很短的时间内破解。而偏偏这些算法特别重要,无论是银行转账、身份识别、在线浏览,很多都需要非对称算法来进行密钥分发与身份验证。举个例子,上Gmail时候会自动SSL加密,这个东西就是用RSA来做密钥分发的。

那么,一旦量子计算机做出来之后,是不是隐私就无处遁形呢?

那倒不一定。

学界早就关注这个现象了,也提出了一些能解决这个问题的非对称密码体系,比如说基于格(lattice)的体系(比如NTRU)、基于纠错码的体系(McEliece),还有基于多变量的体系。这些体系都不依赖于隐含子群问题,所以对量子计算机造成的威胁是免疫的。不过,这些体系各有各不太实用的地方,也有些弱点,所以目前没有很多人采用。不过一旦足够规模的量子计算机造出来了,我们也有足够的技术储备来维持我们的隐私,维护目前的秩序。

通过上文了解了我们非常熟悉的加密算法,大家也通过实际的论证了解椭圆曲线的加密算法的推演,不难看出,现有的技术会因新出现的先进技术的出现,倒在沙滩上。

因此,Nervos CKBde 设计很大程度是对区块链的架构,区块链的技术(如加密算法、共识、隐私保护等多维度问题)思考的结晶,Nervos团队成员对此做了很多的改进,让我们一起拭目以待。

最后,欢迎大家一起加入Nervos fans爱好者社区,我们一起加入社区,通过贡献代码,获取空投的代币。

--

--