Cryptography Ed25519有哪些实施方案?

Cryptography Ed25519有哪些实施方案?,cryptography,curve-25519,sqrl,ed25519,Cryptography,Curve 25519,Sqrl,Ed25519,该方案依赖于Daniel Bernstein开发的曲线加密。然而,为了开始实施该方案,首先需要成熟地实施曲线Ed25519 有人知道有什么成熟的实现吗?对于Java、.NET或任何其他流行平台?到目前为止,最成熟和性能最好的平台是由Daniel Bernstein自己编写的。可以在中找到它 然而,它的API相当笨拙,需要相当多的挖掘/提取才能得到您想要的。为了节省别人的工作,我自己做了这件事,并把我的代码放在上面 但要注意确切的术语,Ed25519和Curve25519是相关的,但不同的东西。您

该方案依赖于Daniel Bernstein开发的曲线加密。然而,为了开始实施该方案,首先需要成熟地实施曲线Ed25519


有人知道有什么成熟的实现吗?对于Java、.NET或任何其他流行平台?

到目前为止,最成熟和性能最好的平台是由Daniel Bernstein自己编写的。可以在中找到它

然而,它的API相当笨拙,需要相当多的挖掘/提取才能得到您想要的。为了节省别人的工作,我自己做了这件事,并把我的代码放在上面

但要注意确切的术语,Ed25519和Curve25519是相关的,但不同的东西。您应该知道的是Ed25519是一个公钥/私钥签名系统,而Curve25519是一个密钥交换系统。Ed25519键对可以转换为Curve25519键对,另一方面我不太确定。我在Github上的库所做的是将所有内容保存在Ed25519密钥对中,并转换为Curve2519进行密钥交换。

Curve2519与Ed25519 首先,曲线25519和Ed25519并不完全相同。它们基于相同的基础曲线,但使用不同的表示。大多数实现都是针对Curve25519或Ed25519的,但是可以在它们之间重用一些代码

可以将Ed25519公钥转换为Curve25519,但反过来会丢失符号位。i、 e.两个Ed25519公钥对应一个Curve25519公钥。私钥也非常相似


关于实现,区分实际实现和以可用形式打包它们的库是很重要的

实际实现 djb在中的实施

  • Ref
    用c编写,速度非常慢
  • djb的
    Ref10
    用c编写,性能良好
  • djb的
    amd64-64-24k
    amd64-51-30k
    ,以汇编方式编写,速度大约是
    Ref10
他还用NaCl写了一个早期的、不兼容的原型,不要用那个

实施

包含多个变体,包括assembly和c。有些优化了64位,有些优化了32位

图书馆
  • C库,当前使用
    Ref10
    实现

    有。这可能是最流行的版本,也是我向大多数人推荐的版本

    包含来自NaCl的一系列其他加密函数,如身份验证加密(XSalsa20Poly1305)、哈希、Curve25519密钥交换

  • C库,使用
    Ref10
    实现

    这个库最有趣的特性是它支持使用Ed25519公钥进行密钥交换。但它不会散列共享密钥,因此不会产生与Curve25519相同的共享密钥

    包含Win32和Win32 64的预构建二进制文件

  • 我的

    纯托管代码,在32位和64位平台上工作不变。基于参考文献10。比c实现慢一点,但差异非常小

    支持使用Curve2519和Ed25519密钥与NaCl兼容的密钥交换,并包含NaCl的一系列其他加密函数。我的目标是一个类似LibNasdium的功能集

    Ed25519签名函数可以工作,并且已经进行了大量测试,但是库的其他部分有点粗糙

  • 直接使用SUPERCOP或Floodyberry代码中的实现

    构建可能需要更多的工作,但您将获得更高的性能(~2x),并且不需要携带不需要的代码



我建议现在就用利伯纳。它比较受欢迎,而且保养得很好。性能良好,只会在真正签名密集的应用程序中导致性能问题。

添加到CodesInChaos的答案:

图书馆
  • 我的

    基于Ref 10,并提供标准JCA API,因此可以将其添加到加密提供程序中

嵌入式实现
  • ,以及描述其性能的
    • 将附带一个

      见:

      此更改将取代 使用来自的代码,大大加快了速度,更加安全, 经过良好测试(超过1600条新测试线,99%的测试覆盖率),以及 更好地记录(600行新注释)实施

      一些亮点:

      • 针对64位优化的非饱和51位肢体字段实现 体系结构和
        math/bits.Mul64
        intrinsic
      • 使用多宽度更有效的可变时间标量乘法 非相邻表单,具有较大的固定基查找表
      • 用于标量、点和field.Element的安全math/big.Int类API 具有完全抽象归约不变量的类型
      • 测试套件,包括探索边缘情况的测试/快速模糊器 不可能随机命中的值,以及系统测试 用于参数和接收器别名
      • 严格匹配原始逻辑的点解码规则 crypto/ed25519/internal/edwards25519,以避免共识问题
      • AssemblyPolicy兼容arm64和amd64的程序集核心 前者不足20行,后者由程序生成基于 这可以逐行对照 通用实现

      如果我正确理解了网站,那么密钥交换与sqlr无关,因此需要Ed25519。它基于黄道曲线=)曲线2519和Ed25519的实现通常是不同的。它们使用相同的底层曲线,但表示方式不同。对于c实现,对于.net来说,最好的版本可能是我自己的,但它还没有真正成熟。对于Curve25519的稳定.net实现,您可以尝试我自己的版本。我一直在生产中使用它,没有任何问题。@quadfinity,它不是一个固定时间的实现