Cryptography Ed25519有哪些实施方案?
该方案依赖于Daniel Bernstein开发的曲线加密。然而,为了开始实施该方案,首先需要成熟地实施曲线Ed25519Cryptography Ed25519有哪些实施方案?,cryptography,curve-25519,sqrl,ed25519,Cryptography,Curve 25519,Sqrl,Ed25519,该方案依赖于Daniel Bernstein开发的曲线加密。然而,为了开始实施该方案,首先需要成熟地实施曲线Ed25519 有人知道有什么成熟的实现吗?对于Java、.NET或任何其他流行平台?到目前为止,最成熟和性能最好的平台是由Daniel Bernstein自己编写的。可以在中找到它 然而,它的API相当笨拙,需要相当多的挖掘/提取才能得到您想要的。为了节省别人的工作,我自己做了这件事,并把我的代码放在上面 但要注意确切的术语,Ed25519和Curve25519是相关的,但不同的东西。您
有人知道有什么成熟的实现吗?对于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在中的实施
用c编写,速度非常慢Ref
- djb的
用c编写,性能良好Ref10
- djb的
和amd64-64-24k
,以汇编方式编写,速度大约是amd64-51-30k
Ref10
-
C库,当前使用
实现 有。这可能是最流行的版本,也是我向大多数人推荐的版本 包含来自NaCl的一系列其他加密函数,如身份验证加密(XSalsa20Poly1305)、哈希、Curve25519密钥交换Ref10
-
C库,使用
实现 这个库最有趣的特性是它支持使用Ed25519公钥进行密钥交换。但它不会散列共享密钥,因此不会产生与Curve25519相同的共享密钥 包含Win32和Win32 64的预构建二进制文件Ref10
- 我的 纯托管代码,在32位和64位平台上工作不变。基于参考文献10。比c实现慢一点,但差异非常小 支持使用Curve2519和Ed25519密钥与NaCl兼容的密钥交换,并包含NaCl的一系列其他加密函数。我的目标是一个类似LibNasdium的功能集 Ed25519签名函数可以工作,并且已经进行了大量测试,但是库的其他部分有点粗糙
- 直接使用SUPERCOP或Floodyberry代码中的实现 构建可能需要更多的工作,但您将获得更高的性能(~2x),并且不需要携带不需要的代码
我建议现在就用利伯纳。它比较受欢迎,而且保养得很好。性能良好,只会在真正签名密集的应用程序中导致性能问题。添加到CodesInChaos的答案: 图书馆
- 我的 基于Ref 10,并提供标准JCA API,因此可以将其添加到加密提供程序中
- ,以及描述其性能的
- 针对64位优化的非饱和51位肢体字段实现
体系结构和
intrinsicmath/bits.Mul64
- 使用多宽度更有效的可变时间标量乘法 非相邻表单,具有较大的固定基查找表
- 用于标量、点和field.Element的安全math/big.Int类API 具有完全抽象归约不变量的类型
- 测试套件,包括探索边缘情况的测试/快速模糊器 不可能随机命中的值,以及系统测试 用于参数和接收器别名
- 严格匹配原始逻辑的点解码规则 crypto/ed25519/internal/edwards25519,以避免共识问题
- AssemblyPolicy兼容arm64和amd64的程序集核心 前者不足20行,后者由程序生成基于 这可以逐行对照 通用实现
- 将附带一个
见:
此更改将取代
使用来自的代码,大大加快了速度,更加安全,
经过良好测试(超过1600条新测试线,99%的测试覆盖率),以及
更好地记录(600行新注释)实施
一些亮点:
如果我正确理解了网站,那么密钥交换与sqlr无关,因此需要Ed25519。它基于黄道曲线=)曲线2519和Ed25519的实现通常是不同的。它们使用相同的底层曲线,但表示方式不同。对于c实现,对于.net来说,最好的版本可能是我自己的,但它还没有真正成熟。对于Curve25519的稳定.net实现,您可以尝试我自己的版本。我一直在生产中使用它,没有任何问题。@quadfinity,它不是一个固定时间的实现