簡體   English   中英

有哪些Ed25519的實現?

[英]What implementions of Ed25519 exist?

新的SQRL認證方案依賴於Daniel Bernstein開發的Curve Ed25519加密。 但是,為了開始實施該方案,首先需要成熟的Curve Ed25519實現。

有誰知道任何成熟的實現? 對於Java,.NET或任何其他流行的平台?

Curve25519對比Ed25519

首先,Curve25519和Ed25519並不完全相同。 它們基於相同的基礎曲線,但使用不同的表示。 大多數實現都是針對Curve25519或Ed25519,但可以在它們之間重用一些代碼。

可以將Ed25519公鑰轉換為Curve25519,但反過來卻錯過了一個符號位。 即兩個Ed25519公鑰對應一個Curve25519公鑰。 私鑰也非常相似。


關於實現,區分實際實現和以可用形式打包它們的庫是很重要的。

實際實施

djb在SUPERCOP中的實現

  • Ref用c寫的,很慢
  • djb的Ref10用c寫的,性能不錯
  • djb的amd64-64-24kamd64-51-30k ,用匯編編寫,大約是Ref10兩倍

他還在NaCl中編寫了一個早期的,不兼容的原型,不要使用那個

Floodyberry的唐娜實施

包含幾個變體,包括程序集和c。 一些針對64位進行了優化,一些針對32位進行了優化。

圖書館

  • LibSodium

    C庫,目前使用Ref10實現

    具有許多編程語言的綁定 它可能是最受歡迎的版本,也是我向大多數人推薦的版本。

    包含來自NaCl的一堆其他加密函數,例如經過身份驗證的加密(XSalsa20Poly1305),哈希,Curve25519密鑰交換。

  • Nightcracker的Ed25519

    C庫,使用Ref10實現。

    該庫最有趣的功能是它支持使用Ed25519公鑰進行密鑰交換。 但它不會散列共享密鑰,因此它不會產生與Curve25519相同的共享密鑰。

    包含Win32和Win64的預構建二進制文件。

  • 我的C#端口

    純托管代碼,在32位和64位平台上保持不變。 基於Ref10。 比c實現慢一點,但差異非常小。

    使用Curve25519和Ed25519鍵支持與NaCl兼容的密鑰交換,並包含一系列來自NaCl的其他加密函數。 我的目標是像LibSodium一樣的功能集。

    Ed25519簽名功能可以工作並且已經看到了大量的測試,但是庫的其他部分有點粗糙。

  • 直接使用SUPERCOP或Floodyberry代碼的實現。

    可能需要更多的工作來構建,但是你將獲得更高的性能(~2x)並且不需要攜帶你不需要的代碼。


我建議現在和LibSodium一起去。 它相對受歡迎且維護良好。 性能不錯,應該只會導致真正簽名的重型應用程序中的性能問題。

添加到CodesInChaos的答案:

圖書館

  • 我的Java端口

    基於Ref 10,並提供標准JCA API,以便將其添加到加密提供程序。

到目前為止,最成熟和最高效的是丹尼爾伯恩斯坦本人寫的。 它可以在SUPERCOP中找到。

但是,它的API非常笨拙,需要相當多的挖掘/提取才能得到你想要的東西。 為了節省其他人的工作,我自己完成了這項工作並將我的代碼放在Github上

請注意您的確切條款,Ed25519和Curve25519是相關的,但不同的東西。 你應該知道的是Ed25519是一個公鑰/私鑰簽名系統,Curve25519是一個密鑰交換。 Ed25519密鑰對可以轉換為Curve25519密鑰對,反過來我不太確定。 我在Github上的圖書館所做的就是將所有內容保存在Ed25519密鑰對中,然后轉換為Curve25519進行密鑰交換。

嵌入式實現

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM