RSA、ECDSA 與 EdDSA 深度比較
從大數分解到確定性簽章的演進與安全抉擇
數位簽章是現代安全協議的核心。RSA、ECDSA、EdDSA 三者各自基於不同數學難題,安全性與效能差異顯著——選錯演算法,代價可能是整個系統的私鑰洩漏。
RSA 與 ECDSA:兩代主流的侷限
RSA 依賴大整數質因數分解的計算困難性。安全需求驅使密鑰不斷拉長——目前建議最低 2048-bit,達到同等安全等級所需的密鑰遠比橢圓曲線方案龐大,導致簽章與驗證速度偏慢。
ECDSA 改用橢圓曲線離散對數問題,256-bit 密鑰即可對應 RSA 3072-bit 的安全強度,效能大幅提升。然而其致命弱點在於:每次簽章必須產生一個高品質隨機數 k。2010 年 Sony PlayStation 3 私鑰洩漏事件,正是因為 k 值重複使用所致。一旦 k 被猜測或重用,私鑰可被完整還原。
EdDSA:確定性簽章的現代解法
EdDSA(Edwards-curve Digital Signature Algorithm)基於扭曲愛德華曲線(Twisted Edwards Curve),最常見實作為 Ed25519。其核心突破在於將隨機數 k 改以私鑰與訊息的雜湊值確定性推導,徹底消除隨機數源的安全疑慮。同等安全強度下,Ed25519 的簽章速度比 ECDSA(P-256)快約 2–3 倍,驗章更快,且簽章長度固定為 64 bytes。SSH、TLS 1.3、Signal Protocol 均已優先採用此演算法。
# Python 使用 Ed25519 簽章(cryptography 套件)
from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey
private_key = Ed25519PrivateKey.generate()
signature = private_key.sign(b"hello world")
public_key = private_key.public_key()
public_key.verify(signature, b"hello world") # 驗證失敗則拋出例外
💡 三者核心差異一覽
- RSA:基於大數質因數分解,密鑰長、效能慢,適合相容舊系統場景。
- ECDSA:密鑰短且高效,但隨機數 k 洩漏或重用將導致私鑰完整曝光。
- EdDSA(Ed25519):確定性簽章、無隨機數風險,效能最佳,現代協議首選。
- 新系統選型原則:優先 EdDSA → 次選 ECDSA(需搭配 RFC 6979)→ RSA 僅用於相容考量。
演算法的演進從未停止。若你正在設計新系統,EdDSA 是目前兼顧安全、效能與易用性的最優解;ECDSA 若非必要應搭配 RFC 6979 確定性 k 生成;RSA 則僅留給無法遷移的舊有場景。
留言
張貼留言