目录
[7 这一切意味着什么?](#7 这一切意味着什么?)
[8 椭圆曲线密码学的应用](#8 椭圆曲线密码学的应用)
[9 椭圆曲线密码学的缺点](#9 椭圆曲线密码学的缺点)
[10 展望未来](#10 展望未来)
⚠️ 原文地址:A (Relatively Easy To Understand) Primer on Elliptic Curve Cryptography
⚠️ 写在前面:本文属搬运博客,自己留着学习。如果你和我一样是小白,那么看完本文我们将仍然不能理解下图具体是在干什么,但能够对 RSA 和椭圆曲线加密的初衷有所了解。
7 这一切意味着什么?
椭圆曲线离散对数 是椭圆曲线密码学的难题。尽管已经有近三十年的研究,数学家们仍然没有找到一个算法来解决这个问题,这个算法比朴素的方法有所改进。
换句话说,与因式分解不同,基于目前理解的数学,似乎没有捷径可以缩小围绕这个问题的基础陷门函数的差距。这意味着,对于相同大小的数字,解决椭圆曲线离散对数的问题比因式分解要困难得多。由于计算上更费力的难题意味着更强的密码系统,因此椭圆曲线密码系统比 RSA 和 Diffie-Hellman 更难破解。
为了想象它有多难破解,Lenstra 最近引入了 "全球安全性" 的概念。你可以计算破解一个密码算法需要多少能量,并将这个能量与这些能量能煮沸多少水进行比较。这是一种密码学的碳足迹。按照这个标准,破解一个 228 位的 RSA 密钥所需的能量比煮沸一茶匙水所需的能量还要少。相比之下,破解一个 228 位的椭圆曲线密钥所需的能量足以煮沸地球上所有的水。要达到这种安全级别,使用 RSA 需要一个 2380 位的密钥。
使用 ECC,你可以使用更小的密钥来获得相同级别的安全性。小的密钥尤其重要,尤其是在越来越多加密是在像手机这种功率较小的设备上完成的世界里。虽然将两个素数相乘比将乘积分解为其组成部分的因式分解要容易,但当素数变得非常长时,即使是乘法步骤也可能在低功率设备上需要一些时间。
RSA 这种陷门函数靠的就是 "因式分解的难度" 和 "乘法的难度" 之间的差距。如果为了保证加密速度而缩短密钥长度,那么 RSA 算法的安全性大打折扣。如果保持密钥长度不变,那么像手机这种功率较小的设备完成加密的时间又比较长。
虽然你可能会通过增加密钥长度来继续保持 RSA 的安全,但这样做会在客户端带来加密性能变慢的成本。ECC 似乎提供了一个更好的权衡:短的、快速的密钥提供高安全性。
8 椭圆曲线密码学的应用
经过缓慢的起步之后,基于椭圆曲线的算法正变得越来越受欢迎,并且其采用的速度正在加快。椭圆曲线密码学现在被广泛应用于多种场合:
美国政府使用它来保护内部通信,Tor 项目使用它来帮助确保匿名性,它也是证明比特币所有权的机制,为苹果的 iMessage 服务提供签名,在 DNSCurve 中用于加密 DNS 信息,并且是安全网页浏览中通过 SSL/TLS 进行认证的首选方法。
CloudFlare 使用椭圆曲线密码学来实现完美的向前保密性,这对于在线隐私至关重要。第一代密码学算法如 RSA 和 Diffie-Hellman 在大多数领域仍然是标准,但椭圆曲线密码学正在迅速成为网络隐私和安全的最佳解决方案。
为什么后文一直在提 CloudFlare?答:因为 CloudFlare 是原博所属网站。
如果您从 Chrome 或 Firefox 的最新版本访问原文博客的 HTTPS 版本:
则您的浏览器正在使用椭圆曲线密码学。您可以亲自检查这一点。在 Chrome 中,您可以点击地址栏中的锁图标,然后选择连接标签,以查看建立安全连接时所使用的密码学算法。在 Chrome 30 中点击锁图标后,应显示以下图片。
我只在 Firefox 找到了锁图标:
原博客写作于 2013 年,现在的 Chrome 和 Firefox 早变样了😇
在 CloudFlare 中,ECDHE_RSA 是一种用于安全套接字层(SSL)的密钥交换协议,它结合了椭圆曲线密钥交换(ECDHE)和 RSA 加密的优势。ECDHE 代表椭圆曲线 Diffie-Hellman 临时密钥交换,它基于椭圆曲线数学提供了一种安全高效的方法来建立加密通信的密钥。RSA 组件则用于验证服务器的身份,这是因为 CloudFlare 的 SSL 证书绑定了一个 RSA 密钥对。
现代浏览器也支持基于椭圆曲线的证书。如果 CloudFlare 的 SSL 证书是基于椭圆曲线的,那么页面上的描述将是 ECDHE_ECDSA。在这种情况下,服务器身份的验证将使用 ECDSA(椭圆曲线数字签名算法)。
CloudFlare 使用的 ECC 曲线(与 Google.com相同)的参数如下:
bash
最大值:115792089210356248762697446949407573530086143415290314195533631308867097853951
曲线:y² = x³ + ax + b
a = 115792089210356248762697446949407573530086143415290314195533631308867097853948
b = 41058363725152142129326129780047268409114441015993725554835256314039467401291
ECDSA 相对于 RSA 的性能提升是显著的。即使在使用没有汇编优化椭圆曲线代码的较老版本的 OpenSSL 时,一个 256 位的 ECDSA 签名也比一个 2048 位的 RSA 签名快 20 倍以上。
在一台配备 OpenSSL 0.9.8 的 MacBook Pro 上,性能基准测试结果显示:
- 执行 10 秒的 256 位 ECDSA 签名:42874 个 256 位 ECDSA 签名在 9.99 秒内完成
- 执行 10 秒的 2048 位私钥 RSA 签名:1864 个 2048 位私钥 RSA 签名在 9.99 秒内完成
这表明使用 ECDSA 的签名速度是 RSA 的 23 倍。
CloudFlare 不断寻求改进 SSL 性能。就在本周,CloudFlare 开始使用一种汇编优化的 ECC 版本,这使得 ECDHE 的速度翻了一番。使用椭圆曲线密码学可以为服务器和浏览器节省时间、电力和计算资源,帮助云服务平台使网络变得更加快速和安全。
9 椭圆曲线密码学的缺点
在椭圆曲线的世界中,并非一切都是美好的,一些问题和不确定性曾经阻碍了它在整个行业中的广泛采用。
最近新闻中提到的双椭圆曲线确定性随机数生成器(Dual_EC_DRBG)就是一个例子。这是一种由美国国家标准与技术研究院(NIST)标准化,并得到国家安全局(NSA)推广的随机数生成器。Dual_EC_DRBG 利用椭圆曲线的数学生成看似随机的数字。该算法涉及在曲线上的点,并反复进行椭圆曲线的 "dot" 操作。发表后,有报道称它可能被设计有一个后门,这意味着拥有正确秘密数字的人可以完全预测返回的数字序列。
最近,RSA 公司召回了几款安全产品,因为这些随机数生成器被设置为它们安全产品线的默认伪随机数生成器(PRNG)。无论这个随机数生成器是否真的有后门,这并不影响椭圆曲线技术的强度,但它确实引发了人们对椭圆曲线标准化过程的质疑。正如我们之前所写,这也部分解释了为什么应该关注确保系统使用足够的随机数。在未来的博客文章中,我们将讨论如何在这个算法规格中悄悄地植入后门。
一些世界上最持怀疑态度的密码学家现在对 NIST 本身以及它发布并由 NSA 支持的标准持有一般性的不信任。几乎所有广泛实现的椭圆曲线都属于这个类别。这些曲线尚未知的攻击,选择它们是因为它们的算术效率,但是劣质曲线确实存在,一些人认为谨慎总比后悔好。在 NIST 之外开发具有高效算术的曲线取得了进展,包括由 Daniel Bernstein(djb)创建的曲线 25519 以及 Paulo Baretto 及其合作者最近计算的曲线,尽管这些曲线的广泛采用还需要几年时间。直到这些非传统的曲线被浏览器实现,它们才能用于保护网络上的加密传输。
关于椭圆曲线密码学的另一个不确定性与专利有关。黑莓(通过其 2009 年收购的 Certicom)拥有超过 130 项专利,涵盖椭圆曲线的特定用途。许多这些专利已经授权给私营组织和甚至 NSA 使用。这使得一些开发者在实施 ECC 时犹豫不决,担心他们的实现是否侵犯这些专利组合。2007 年,Certicom 对索尼提起诉讼,指控其使用椭圆曲线的方式,但该诉讼在 2009 年被驳回。现在有许多被认为是不会侵犯这些专利的椭圆曲线密码学实现,并且已经被广泛使用。
与 RSA 相比,ECDSA 数字签名的一个缺点是它需要一个好的熵源。没有适当的随机性,私钥可能会被揭示。Android 上的随机数生成器的一个漏洞允许黑客在 2013 年初找到用于保护数人比特币钱包的 ECDSA 私钥。索尼的 PlayStation 实现中的 ECDSA 也有类似的漏洞。在制作签名的机器上需要一个好的随机数源。Dual_EC_DRBG 不被推荐使用。
10 展望未来
即使有了上述警告,椭圆曲线密码学相对于传统 RSA 的优势仍然被广泛接受。许多专家担心,RSA 和 Diffie-Hellman 背后的数学算法可能在 5 年内**(原博客写作于 2013 年)**被破解,使 ECC 成为唯一合理的替代方案。
椭圆曲线得到所有现代浏览器的支持,大多数证书颁发机构也提供椭圆曲线证书。CloudFlare 保护的每个 SSL 连接默认会在现代浏览器上使用 ECC 。很快,CloudFlare 将允许客户上传自己的椭圆曲线证书。这将使 ECC 不仅用于保护底层消息,还用于身份验证,从而加快 HTTPS 会话的速度。关于这一功能的更多详情,将在功能上线时发布。