[英]curve25519 base point multiplication using Crypto++
当我们将curve25519的curve25519
乘以标量数时,将引发异常。
Integer gx(group.GetSubgroupGenerator().x);
Integer gy(group.GetSubgroupGenerator().y);
ECP::Point g(gx, gy);
ECP::Point P(group.GetCurve().ScalarMultiply(g, 3));
Exception thrown at 0x005B4412 in CryptoExample.exe: 0xC0000005: Access violation reading location 0x00000000.
除了该曲线的基点外,我们如何获取发电机?
Integer gx(group.GetSubgroupGenerator().x); Integer gy(group.GetSubgroupGenerator().y); ECP::Point g(gx, gy); ECP::Point P(group.GetCurve().ScalarMultiply(g, 3));
由于未设置曲线,因此group.GetCurve()
可能返回NULL
。 但是,使用标准的处理方式,curve25519齿轮可能无法正常工作(如使用Crypto ++的secp521r1的标量乘法所示)。 实际上,如果您运行以下代码:
GroupParameters group;
group.Initialize(ASN1::X25519());
然后,代码将导致异常,因为eccrypto.h
和eccrypto.cpp
中缺少域参数:
$ ./test.exe
terminate called after throwing an instance of 'CryptoPP::UnknownOID'
what(): BER decode error: unknown object identifier
curve25519齿轮在Crypto ++中是特殊的。 它没有使用库的底层Integer
类和通过GroupParameters
对象进行典型的字段操作,而是使用了来自Andrew Moon的称为Donna的恒定时间实现。 该库然后包装Moon的Donna代码,并使用PK_Signer
和PK_Verifier
类的Crypto ++对象提供大多数预期的操作。
但是, “ ...并提供最期望的操作”恰好在您尝试使用的接口DL_GroupParameters_EC
类的较低级对象处停止。
您可能还想看看donna.h
提供的功能:
int curve25519_mult (byte publicKey[32], const byte secretKey[32])
Generate a public key. More...
int curve25519_mult (byte sharedKey[32], const byte secretKey[32], const byte othersKey[32])
Generate a shared key. More...
这些是您要查找的标量乘法。 第一条curve25519_mult
使用的基点为9。第二条curve25519_mult
允许您指定任意基点。
donna.h
应该是一个私有头文件,但是由于缺少曲线操作,我们不得不公开它。 但是,Donna仍然缺少Add
和Double
函数,尽管如果需要可以将其导出。
另请参见Crypto ++ Wiki上的x25519
和ed25519
; 在堆栈溢出上使用Crypto ++对secp521r1进行标量乘法 。
x25519
和ed25519
Wiki页面实际上讨论了您的问题:
Crypto ++库使用Andrew Moon的恒定时间ed25519-donna。 Curve25519齿轮似乎与Crypto ++库中的其他大多数可比较的公钥对象相似,但主要是外观。 Crypto ++类只是Moon的代码的包装,这些代码为调用者提供了一些预期的接口。 集成的副作用是,没有通用的Point,Curve或GroupParameters,因此您无法使用curve25519执行任意计算。
curve25519之所以与众不同,是因为我们需要提供齿轮,但要避免为正确支撑齿轮而进行大量更改。 该库很好地支持短Weierstrass曲线,但几乎不支持Edwards和Twisted Edward曲线。
最终,curve25519将被正确添加到库中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.