TASSL-1.1.1k icon indicating copy to clipboard operation
TASSL-1.1.1k copied to clipboard

如何指定使用named group/curve SM2?

Open johnshajiang opened this issue 3 years ago • 5 comments

s_client ... -groups SM2 ...

执行上述形式的命令时报如下错误,

Error with command: "-groups SM2"

使用参数-curves SM2-curves curveSM2也是类似的错误。

请问,能否指定使用SM2的椭圆曲线?

johnshajiang avatar Jan 11 '22 08:01 johnshajiang

如果不使用-groups-curves,由s_client生成的ClientHello中的supported_groups扩展中并没有包含SM2的曲线。

extension_type=supported_groups(10), length=12
  ecdh_x25519 (29)
  secp256r1 (P-256) (23)
  ecdh_x448 (30)
  secp521r1 (P-521) (25)
  secp384r1 (P-384) (24)

这是否说明,TASSL还不能支持基于curveSM2ECDHE密钥交换算法? 或者,只是s_server/s_client这两个工具不支持?

johnshajiang avatar Jan 11 '22 08:01 johnshajiang

你在测试国密SSL还是RFC8998的国密套件?

  1. 国密SSL的client hello/server hello不需要supported_groups扩展;
  2. 至于rfc 8998国密套件TLS_SM4_GCM_SM3/TLS_SM4_CCM_SM3,因为supported_groups中的曲线id用来协商握手过程中的签名算法/密钥协商算法使用的曲线ID,这两个套件签名算法默认使用SM2_SM3,密钥协商算法使用的标准EC,都没有用到这个id,所以我们的实现中没有加。不过rfc 8998中明确了supported_groups出现的话就要加SM2 id,后面可能会考虑加上

yanshichao0226 avatar Jan 12 '22 03:01 yanshichao0226

我是在测试RFC 8998。

这两个套件签名算法默认使用SM2_SM3

      CipherSuite TLS_SM4_GCM_SM3 = { 0x00, 0xC6 };
      CipherSuite TLS_SM4_CCM_SM3 = { 0x00, 0xC7 };

根据TLS 1.3的规范,应该不能认为上述两个国密套件就必须与签名机制sm2sig_sm3绑定在一起。 它们可以与其它的签名机制,如ecdsa_secp256r1_sha256,共同工作。TASSL好像也是支持这种组合的。

密钥协商算法使用的标准EC,都没有用到这个id,所以我们的实现中没有加。

https://datatracker.ietf.org/doc/html/rfc8998#section-2

   *  The SM2 elliptic curve ID used in the Supported Groups extension
      is defined in Appendix B.3.1.4 of [RFC8446]:

         NamedGroup curveSM2 = { 41 };

密钥协商算法还是标准的ECDH,但named group是可选的。 现在TASSL没有把curveSM2加入supported_groups,那么只能使用别的曲线(如secp256r1)去协商密钥了。 从支持国密算法的角度,这算是一个缺失。

johnshajiang avatar Jan 12 '22 05:01 johnshajiang

嗯。TLS1.3套件不再定义签名算法和密钥交换算法,理论上来说RFC 8998的两个套件可以与任何签名算法及密钥交换算法组合。后续会在supported_groups中增加SM2 id

yanshichao0226 avatar Jan 14 '22 01:01 yanshichao0226

supported_groups已支持SM2,通过参数-groups SM2指定

yanshichao0226 avatar Jun 22 '22 10:06 yanshichao0226