X25519(Curve25519)椭圆曲线参考资料

图片发自App

问题0:几种著名的椭圆曲线的方程和对应的实际应用

  1. 魏尔斯特拉斯曲线和基于魏尔斯特拉斯曲线的若干种椭圆曲线公钥算法

  2. 蒙哥马利曲线 https://en.wikipedia.org/wiki/Montgomery_curve
    和基于蒙哥马利曲线的Curve25519密钥协商算法 https://en.wikipedia.org/wiki/Curve25519
    \begin{align} 蒙哥马利曲线  By^2 &= x^3+Ax^2+x 其中A, B ∈ K 且 B(A^2 − 4) ≠ 0 \\ Curve25519曲线 y^2 &= x^{3} + 486662x^{2} + x ,由素数 2^{255}-19定义素数域 \end{align}

  3. 爱德华曲线 https://en.wikipedia.org/wiki/Edwards_curve
    和基于爱德华曲线的Ed25519数字签名算法 https://ed25519.cr.yp.to/index.html

问题1:25519曲线和ECC曲线的联系和区别是什么?

问:Curve25519、X25519和Ed25519分别是什么?

  • Curve25519(X25519)是进行蒙哥马利曲线(Montgomery Curve)迪菲赫尔曼秘钥交换的椭圆曲线算法。
  • Ed25519是进行爱德华曲线(Edwards Curve)数字签名的椭圆曲线算法。

问:25519曲线与其他ECC曲线是否兼容?

25519曲线与SECG(Standards for Efficient Cryptography Group)工作组所指定的魏尔斯特拉斯曲线(Weierstrass Curve)在曲线的公式上有所不同,因此他们不兼容。
蒙哥马利曲线和爱德华曲线的算法,能做到“Time-constant”,也就是说不论他们进行运算的数值是多少,他们所花的时间是相同的,因此“时间旁路”(Time side channel)攻击就对它们无效。

问题2: 25519具体算法是什么?

见RFC7748和RFC8032。

作者:Niut Scamander
链接:https://www.zhihu.com/question/290541183/answer/529676502
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


问题3: openssl是否支持25519曲线?

答: 支持

查询openssl当前版本支持的椭圆曲线类型(该列表虽并不包括x25519,实际上是支持的)

$ openssl ecparam -list_curves
  secp256k1 : SECG curve over a 256 bit prime field
  secp384r1 : NIST/SECG curve over a 384 bit prime field
  secp521r1 : NIST/SECG curve over a 521 bit prime field
  prime256v1: X9.62/SECG curve over a 256 bit prime field

生成Curve25519椭圆曲线密钥(该密钥专门用于ECDH密钥协商)

For X25519 and X448, it's treated as a distinct algorithm but not as one of the curves listed with ecparam -list_curves option. You can use the following command to generate an X25519 key:

openssl genpkey -algorithm X25519 -out xkey.pem

生成Ed25519椭圆曲线签名密钥(专用于数字签名)

备注:The ability to generate X25519 keys was added in OpenSSL 1.1.0. The ability to generate X448, ED25519 and ED448 keys was added in OpenSSL 1.1.1.

openssl genpkey -algorithm ED25519 -out xkey.pem

SM2椭圆数字签名/加解密密钥

The SM2 algorithm supports sign, verify, encrypt and decrypt operations. For the sign and verify operations, SM2 requires an ID string to be passed in.
Sign some data using an SM2(7) private key and a specific ID:

openssl pkeyutl -sign -in file -inkey sm2.key -out sig -rawin -digest sm3 -pkeyopt sm2_id:someid

Verify some data using an SM2(7) certificate and a specific ID:

openssl pkeyutl -verify -certin -in file -inkey sm2.cert -sigfile sig -rawin -digest sm3 -pkeyopt sm2_id:someid

参考资料:

  • https://github.com/openssl/openssl/blob/master/doc/HOWTO/keys.txt
  • https://www.openssl.org/docs/manmaster/man1/genpkey.html
  • https://www.openssl.org/docs/manmaster/man1/ecparam.html
  • https://www.openssl.org/docs/manmaster/man1/pkeyutl.html

你可能感兴趣的:(X25519(Curve25519)椭圆曲线参考资料)