ecdsa, cert,

为什么你应该用ECDSA椭圆曲线数字签名算法生成证书

DolorHunter DolorHunter Follow Apr 19, 2020 · 14 mins read

为什么你应该用ECDSA椭圆曲线数字签名算法生成证书
Share this

在一年多前, 我就对于 RSA 算法和 ECDSA 算法的数字签名都有所耳闻了. ECDSA 算法是 ECC 算法针对数字签名的变种, 被广泛应用于数字签章和公开金钥加密算法. 比如说, 比特币所使用的数字签章算法就是 ECDSA.

RSA 算法是 1977 年提出的, 而 ECC 的提出是在 1985 年. 但是, 从数字签名这方面来看, ECDSA 真正流行起来可能还不超过十年. 虽然我没查到 ECDSA 是什么时候诞生的, 但是根据其不支持 Android 4.x 以下和 Windows XP(RSA 可以完全支持), 单就这一点来推断, ECDSA 可能比 1985 要年轻很多. 毕竟 Windows XP 是 01 年的产品, 而安卓 4 也不过才在 11 年底退出.

不过, ECDSA 算法并不再是一个新事物了. 如果说 WebP 是否能替代原有格式成为最夯的图片格式还有待商榷, 那么 ECDSA 取代 RSA 则是已经得到了一致的认可. 尤其是最近 V2fly 社区版本的 新白话 更是直接删掉了 RSA 证书的教程, 只提供 ECC 的部分, 让我突然之间觉得 RSA 可能要走向历史了. 要知道新白话的内容可是以最简和兼容著称的, 配置尽可能简单, 兼容性尽可能好. 因此, 我觉得有必要来聊一聊 ECDSA 与 RSA.

一些基础概念

私鑰: 一個秘密數字,只有生成它的人才能知道。 私鑰本質上是一個隨機生成的數字。

公鑰: 與私鑰相對應的數字,但不需要保密。 可以從私鑰中計算出公鑰,反之亦然。 可以使用公共密鑰來確定簽名是否是真實的(換句話說,使用正確的密鑰生成的),而無需洩露私有密鑰。

签名: 数字签名是公钥密码的逆应用:用私钥加密消息,用公钥解密消息。用私钥加密的消息称为签名,只有拥有私钥的用户可以生成签名。

证书: 数字证书就是一张附带了数字签名的信息表, 一般包含:公钥,数字签名,公钥拥有者的信息,有效期和发行机构等信息。

更详细的图文介绍可参考 David Youd - What is a Digital Signature?

ECC 證書的歷史和好處

RSA當前是公共密鑰加密的行業標準,並且在大多數SSL / TLS證書中使用。

橢圓曲線密碼術是一種流行的替代方法,它是由兩名獨立研究人員(Neal Koblitz和Victor S. Miller)於1985年首次提出的,它使用不同的公式化加密方法。 儘管RSA基於分解大整數的難度,但ECC依賴於發現隨機橢圓曲線的離散對數。

換句話說,ECC的假設是:雖然可以計算點乘法,但僅給定原始點和乘積點,則幾乎不可能計算被乘數。 難度隨著橢圓曲線的大小而急劇增加。

ECDSA 的算法优势

RSA密鑰算法是迄今為止的黃金標準,是數字安全中使用最廣泛的算法。 但是,根據使用移動和緊湊型設備的現代趨勢,“純網絡性能”是整個業務的重中之重。 從這個角度來看,密鑰的物理大小是一個主要問題。

ECDSA 的公钥私钥长度更短, 加密后的信息也会更小. 因此计算处理花费的时间会更短, 并且内存和带宽的需求也会更小.

較小的ECC密鑰具有與較大的RSA密鑰相當的強度,這是因為生成密鑰的算法不同。例如,256位ECC密鑰等效於3072位RSA密鑰,而384位ECC密鑰等效於7680位RSA密鑰。

安全强度(位) RSA公钥长度(位) ECDSA公钥长度(位)
80 1024 160
112 2048 224
128 3072 256
192 7680 384
256 15360 512

DSA和RSA密鑰算法需要較大的密鑰大小,並且可能因分解大量數字而失敗。 對於ECDSA,需要解決橢圓曲線離散對數問題(ECDLP)才能破解密鑰,到目前為止,尚未實現任何重大進展。 因此,ECC證書提供了更好的安全解決方案,並且使用普通黑客的“蠻力”方法更難以破解。

ECDSA 的劣势

验证签名上 RSA 似乎比 ECDSA 快得多. ref SSL.com - Comparing ECDSA vs RSA

但是应该只有在第一次连接域名的时候才会验证证书, 可以大概认为每次上网的时候 ECC 会多一小段的延迟. 但是除了证书的验证之外, 其他方面(加密解密运算, 带宽占用)不会受影响.

ECDSA 算法的後量子抗性

ECDSA 算法的担忧主要在于量子抗性不足. 前文讲到一般的黑客在面对 ECDSA 算法时, 使用穷举法一定是会碰壁的. 但是如果攻擊者擁有大型量子計算機,那麼他可以使用秀爾算法解決離散對數問題,從而破解私鑰和共享秘密。这是该算法目前面对的一个难题.

美國國家標準技術研究院(NIST)已在其Suite B(套件B是一種已有20年曆史的公共加密標準)推薦算法集中認可了橢圓曲線密碼學,特別是用於密鑰交換的橢圓曲線Diffie-Hellman(ECDH)和用於數字簽名的橢圓曲線數字簽名算法(ECDSA)。美國國家安全局(NSA)允許其用於保護通過384位密鑰分類為最高機密的信息。但是,由於擔心對ECC進行量子計算攻擊,美國國家安全局(NSA)於2015年8月宣布,計劃用新的密碼套件替換套件B。

目前的估算認為:破解256位素數域上的橢圓曲線,需要2330個量子比特與1260億個托佛利門。相比之下,使用秀爾算法破解2048位的RSA則需要4098個量子比特與5.2萬億個托佛利門。因此,橢圓曲線會更先遭到量子計算機的破解。

目前還不存在建造如此大型量子計算機的科學技術,因此橢圓曲線密碼學至少在未來十年(或更久)依然是安全的。

ECDSA 的兼容性

只要你的设备不太旧, 通常都能支持 ECDSA. 以下是关于 ECDSA 所需的浏览器, 操作系统, 服务器框架的最低版本要求.

浏览器 所需的最低版本
Firefox 2.0
Chrome 1.0
IE 7
Safari 4
操作系统 所需的最低版本
Windows Vista
MacOS OS X 10.6
Android 4.0
Red Hat Enterprise Linux 6.5
服务器框架 所需的最低版本
Apache HTTP Server 2.2.26
Nginx 1.1.0
Windows Server 2008
Apache Tomcat 1.1.30
Dovecot 2.2.5
IBM HTTP Server 8.0 w/ PM80235
Sun Java System Web Server 7.0

参考资料:

Join Newsletter
Get the latest news right in your inbox. We never spam!
DolorHunter
Written by DolorHunter
Developer & Independenet Blogger