Signature
可以使用 OpenSSL 自定義 EdDSA 簽名方案嗎?
EdDSA 目前有兩種簽名方案:Ed25519 和 Ed448。
- Ed25519 是使用 SHA-512 (SHA-2) 和 Curve25519 的 EdDSA 簽名方案
- Ed448 是使用 SHAKE256 (SHA-3) 和 Curve448 的 EdDSA 簽名方案
- 是否可以將 EdDSA 與自定義算法(簽名方案)一起使用,例如不同的曲線和不同的散列算法(如 SHA-1)?
- 由於 RFC 標準,這不可能嗎?
- OpenSSL 不提供使用其他曲線的 EdDSA 是否有任何加密原因?
- 這是否與未實現該功能的 OpenSSL 有關?
首先要澄清的是“EdDSA”的定義。EdDSA 是在 2011 年Bernstein 等人的高速高安全性簽名中引入的。它隱含假設的各種參數在 2015 年Bernstein 等人的論文中更普遍地聲明, EdDSA 用於更多曲線。這最終導致了 RFC Edwards-Curve 數字簽名算法 (EdDSA),即 2017 年的RFC 8032。
它們都抽像地描述了 EdDSA,然後用一組具體的參數對其進行*實例化。*因此,Ed25519 和 Ed448 是 EdDSA 的特定參數集,它們形成了可以實施的具體簽名方案。
- 是否可以將 EdDSA 與自定義算法(簽名方案)一起使用,例如不同的曲線和不同的散列算法(如 SHA-1)?
是的,這是可能的,假設您不是指第一篇論文和 RFC 8032 中的特定實例。
事實上,Monocypher密碼庫
crypto_sign()
正是這樣做的,將 SHA-512 換成了 BLAKE2b。
- 由於 RFC 標準,這不可能嗎?
如上所述,這是可能的,但結果顯然不能稱為“Ed25519”或“Ed448”,因為它與那些特定的實例不兼容。
- 這是否意味著 EdDSA 在設計上是剛性的?
不是,不。2015 年的論文甚至不遺餘力地添加了一堆。
所有這些文件中指定的 EdDSA 在基本曲線方面有些不靈活,但是:它假設輔因子 $ h=2^c $ 有 $ c\in{2,3} $ ,例如排除了素數階 Weierstrass 曲線。所需的修改能夠不需要 $ c $ 具有質數階曲線既微不足道又顯而易見,但是這組特定的允許值 $ c $ 由 EdDSA 的所有規範強制要求。
- 這是否與未實現該功能的 OpenSSL 有關?
不,沒有人指定 EdDSA 關心 OpenSSL 做了什麼,因為這將本末倒置:OpenSSL 在指定之前無法實現 EdDSA。