ECC & RSA
了解公钥密码学的人应该都听说过ECC、ECDH或是ECDSA。ECC是椭圆曲线密码学(Elliptic Curve Cryptography) 的缩写,后两个是基于它的算法名称。
在ECC流行起来之前,几乎所有的公钥算法都是基于RSA、DSA和DH———基于模运算的可选加密系统。RSA及其友类算法在当前仍非常重要,经常与ECC一并使用。RSA及其友类算法背后的原理利用"质因数分解"的复杂度问题,一些简单的实现很容易编写和理解;ECC的实现利用"椭圆曲线上的离散对数问题",相对复杂些。
- TLS握手中的非对称加密操作既花时间又是计算密集型的。随着椭圆曲线密码学的出现,ECC密钥被用作物联网设备身份的根源。256位ECC密钥提供与3072位RSA密钥相同的加密强度,但生成成本较低。CPU周期以及所需的内存占用空间也较低,从而使SSL证书处理时间提高了200%。
- ECC支持现在的操作系统,在SSL库和加密软件堆栈中是通用的。因此,受限的物联网设备现在可以更轻松地生成自己的私钥,执行验证操作并且更安全,同时使用更少的CPU和内存,从而节省能源。
一种关于密码学的碳排放量的衡量。
- 通过这样的测量方法,破解一个228字节的RSA秘钥所需能量少于煮沸一勺水的能量。相对地,破解一个228字节的椭圆曲线秘钥所需能量足够煮沸地球上所以水。而RSA要达到这样的安全强度,需要2,380个字节的秘钥长度。
- 使用ECC可以用更简短的秘钥获得相同的安全强度。简短秘钥是非常重要的,尤其是在现实中密码学算法越来越多的运行在小功率设备里,例如手机。
- 尽管两质数相乘比把结果因式分解要简单,但当质数变得非常大,在低功率设备上仅仅只是乘法步骤都将花费很长一段时间来计算。虽然可以通过增加秘钥长度来保持RSA的安全性,但却是以牺牲客户端的性能为代价。ECC提供了一个较好的选择:使用简短并且快速的秘钥来达到高安全性。
TLS中的ECC和RSA
使用HTTPS访问web
- 用RSA的网站使用ECDHE_RSA是因为他们的SSL证书是RSA秘钥对。
- 现在的浏览器也支持基于椭圆曲线密钥对的认证证书。如果网站的SSL证书是一个椭圆曲线密钥对的证书,这个页面将被声明为ECDHE_ECDSA。服务器的身份验证将会用ECDSA(椭圆曲线数字签名算法)来认证。
- 使用ECDSA对性能改善显著超过了RSA。即使与一个没有最佳编译优化的椭圆曲线代码的旧版OpenSSL相比,一个256字节秘钥的ECDSA签名要比一个2048字节秘钥的RSA签名快过20倍。
- 在TLS1.2的握手过程,在 Client Hello 和 Server Hello 里用到了ECDHE算法做密钥交换,参数完全公开,但却能够防止黑客攻击,只有通信双方才能知道的Pre-Master&