RSA(非对称加密)与ECC(椭圆曲线加密)的区别

 1、RASRSA(非对称加密)与ECC(椭圆曲线加密)的区别                                           

 RSA(非对称加密)与ECC(椭圆曲线加密)的区别

RSA(非对称加密)与ECC(椭圆曲线加密)的区别

RSA(非对称加密)与ECC(椭圆曲线加密)的区别

2、ECC

RSA(非对称加密)与ECC(椭圆曲线加密)的区别

RSA(非对称加密)与ECC(椭圆曲线加密)的区别

RSA(非对称加密)与ECC(椭圆曲线加密)的区别

椭圆曲线加解密算法原理

  建立基于椭圆曲线的加密机制,需要找到类似RSA质因子分解或其他求离散对数这样的难题。而椭圆曲线上的已知G和xG求x,是非常困难的,此即为椭圆曲线上的的离散对数问题。此处x即为私钥,xG即为公钥。

  椭圆曲线加密算法原理如下:

  设私钥、公钥分别为k、K,即K = kG,其中G为G点。

  公钥加密: 
  选择随机数r,将消息M生成密文C,该密文是一个点对,即: 
  C = {rG, M+rK},其中K为公钥

  私钥解密: 
  M + rK - k(rG) = M + r(kG) - k(rG) = M 
  其中k、K分别为私钥、公钥。

椭圆曲线签名算法原理

  椭圆曲线签名算法,即ECDSA。 
  设私钥、公钥分别为k、K,即K = kG,其中G为G点。

  私钥签名: 
  1、选择随机数r,计算点rG(x, y)。 
  2、根据随机数r、消息M的哈希h、私钥k,计算s = (h + kx)/r。 
  3、将消息M、和签名{rG, s}发给接收方。

  公钥验证签名: 
  1、接收方收到消息M、以及签名{rG=(x,y), s}。 
  2、根据消息求哈希h。 
  3、使用发送方公钥K计算:hG/s + xK/s,并与rG比较,如相等即验签成功。

  原理如下: 
  hG/s + xK/s = hG/s + x(kG)/s = (h+xk)G/s 
  = r(h+xk)G / (h+kx) = rG

3、RAS与ECC比较

数字签名技术已经广泛使用于网络安全协议或分布式系统中,目前比较流行的数字签名算法有RSA和ECDSA。很多同学在产品设计中往往都难以区分RSA和ECDSA的优劣,所以笔者将基于自己的实践,来给出一些初步的建议。

1. 密码强度比较

RSA(非对称加密)与ECC(椭圆曲线加密)的区别

这是学术界普遍认可的密码强度对照表。比如,3072-bit的RSA密码强度,大约相当于283-bit的ECC密码强度,大约相当于128-bit的对称密码算法的强度。换句话说,攻击分组加密算法AES-128的难度,与攻击数字签名RSA-3072的难度相当。此外,我们应注意到,从RSA-1024到RSA-3072,模数长度增长了200%,但密码强度仅增强了50%左右;拿密码哈希函数来比较,这个安全强度的增长只是相当于从SHA1增强到SHA-256。

2. 性能比较

笔者基于开源的tommathlib实现了ECDSA(符合ANSI X9.62标准)和RSA签名算法(符合PKCS#1 v2.1, e=65537)。

RSA(非对称加密)与ECC(椭圆曲线加密)的区别

表中数据是笔者基于自己的开发机器(Intel Xeon CPU E5520  @ 2.27GHz)上单线程运行得出的实验结果。对于ECDSA来说,生成签名与验证签名的开销相差不大,而对于RSA来说,验证签名比生成签名要高效得多,这是因为RSA可以选用小公钥指数,比如{3, 5, 17, 257 or 65537},而安全强度不变。如果只看单次操作,那么ECDSA的Sign操作比RSA的性能更好,而RSA的Verify要比ECDSA更好。

3. 结论

(1) RSA签名算法适合于:Verify操作频度高,而Sign操作频度低的应用场景。比如,分布式系统中基于capability的访问控制就是这样的一种场景。
(2) ECDSA签名算法适合于:Sign和Verify操作频度相当的应用场景。比如,点对点的安全信道建立。