guanzhi / GmSSL

支持国密SM2/SM3/SM4/SM9/SSL的密码工具箱
http://gmssl.org
Apache License 2.0
5.05k stars 1.65k forks source link

请教sm2密钥交换的实现 #76

Closed junfx closed 3 years ago

junfx commented 7 years ago

关于sm2密钥交换, 我看了sm2_kap.c这个文件, 似乎在这里实现, 但是那几个函数除了在sm2test.c中调用外, GmSSL中其它地方似乎没用到. ECDH_compute_key等也没有被修改. 所以请教一下, sm2的密钥交换在哪里实现, 哪里被调用.

guanzhi commented 7 years ago
  1. SM2密钥交换在sm2.h中定义,在sm2_kap.c中实现,目前除了测试代码之外,没有其他模块调用该功能。
  2. SM2的双证书密钥交换和ECDH接口不是完全兼容。
  3. GmSSL密码库会尽可能支持所有公布的国密算法和标准,至于这些算法和标准怎么用,以及是否有人用,我们也不了解。但是SM2密钥交换这部分代码确实是在有用户询问之后才加入的。
gujinqiangggs commented 7 years ago

@guanzhi 国密局规定的sslvpn的协议是不是还没有实现?有没有这方面的计划? 另外,我说一点我自己的看法 其实对于国密的sslvpn 网关来说,主要的功能是实现ssl的建立,当然缺乏不了国密算法sm系列算法的支持,这只是一块块的砖,如果要建起可以居住的房子,还是需要像ssl国密协议的实现这样的钢筋、混凝土等组成一个整体。如果要让gmssl发扬光大,真正为广大用户和厂商使用,还是要实现这些基本的协议的,当然我是出于我们的产品要符合国密局的检测这方面考虑的。我是密码机公司的,这些sm系列的算法在我们的密码机里都已经实现了,我们现在急需要实现国密的ssl协议,而且国密的ssl协议和标准的ssl协议好像有一些差异,而且容易让人弄混。目前我的着手点是ECC_SM4_SM3这个密码套件的实现,这个相对来说简单些,感觉有点像RSA的秘钥交换,但和标准的RSA秘钥交换又多了一个Server_key_exchang交互,而且目前比较缺少的是这方面的例子。前段时间搞了一阵子,又忙别的去了,最近又来看看,发现有更新了,gmssl的网站也好了,拍手称快啊,哈哈

guanzhi commented 7 years ago

目前没有实现国密的SSL VPN协议。最近主要的工作在支持国密硬件和SM9,完成后会开始SSL VPN协议的开发。

zhangshuang01 commented 7 years ago

@guanzhi 我想问一下,gmssl/crypto/sms4 是不是就是sm4算法?

gujinqiangggs commented 7 years ago

@zhangshuang01 是的,记得首页介绍里有说明

zhangshuang01 commented 7 years ago

@gujinqiangggs 好的,谢谢!

guanzhi commented 7 years ago

SMS4这个名字更早,很多文献都用的这个名字不是SM4,因此GmSSL用SMS4命名,后续可以考虑增加一些SM4的宏。

junfx commented 7 years ago

@guanzhi 您好, 最近去了解了下sm2密钥交换的部分, 以下几个结果想请您指点或探讨:

  1. sslvpn标准中提到了交换, 但是只有对称加密只有sm1 (找不到sm1标准), 如果通信双方要使用其它的套件, 比如sm4的, 那怎么约定呢, 目前没找到标准. 也不知除了sslvpn到底有没有其它标准.
  2. sm2的密钥交换似乎不需要双证书 (即加密和签名证书), 这个过程的输入是双方的公钥和双方的临时(随机)公钥.
guanzhi commented 7 years ago

分组密码支持SM1和SM4,SM1算法是不公开的。 SSL VPN标准中要求双证书,GmSSL v1不支持SSL VPN,只支持IETF的TLS标准。

junfx commented 7 years ago

在<SSL VPN技术规范 3.1节> (2010年8月) 中提到:

本规范中使用的是签名证书或者具有签名能力的证书。

看来是我手上的规范太老了.

罗俊的一个PPT中提到了 (2014). 这个PPT中也说到了与tls1.1/1.2不兼容.

github-actions[bot] commented 3 years ago

Marked as stale issue. Will be closed later if no activity for a while.

xiguamee commented 1 year ago
  1. SM2密钥交换在sm2.h中定义,在sm2_kap.c中实现,目前除了测试代码之外,没有其他模块调用该功能。
  2. SM2的双证书密钥交换和ECDH接口不是完全兼容。
  3. GmSSL密码库会尽可能支持所有公布的国密算法和标准,至于这些算法和标准怎么用,以及是否有人用,我们也不了解。但是SM2密钥交换这部分代码确实是在有用户询问之后才加入的。

没有找到该sm2_kap.c,请问有没有教程文档或者视频呢