Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

强烈建议给加密函数开放更多的可选项 #1651

Open
lizheng2018CC opened this issue Apr 3, 2024 · 3 comments
Open

强烈建议给加密函数开放更多的可选项 #1651

lizheng2018CC opened this issue Apr 3, 2024 · 3 comments

Comments

@lizheng2018CC
Copy link

lizheng2018CC commented Apr 3, 2024

在使用gmssl的过程中,由于开发需求,我们不能使用der编码,私钥不能用密码加密,sm2加密需要支持长数据加密,以及sm4分组加密算法需要支持任意长度数据加密。然而!这些特性在gmssl库中都没有,而一个非密码学领域的软件开发者研究怎么从原有的gmssl库中修改这些特性是很困难的。
也许这些需求既不安全也不合理,但这就是上面的需求,我们只能按这个做。
我看Issues中也有好几个人提出了类似的问题,我不是唯一有此需求的人。我不是一个密码学领域的开发者,相信很多使用gmssl的人也是。
作者出于安全性考虑必然出发点是好的,但是我还是强烈建议选择权交给使用者,在函数中调用中增加参数控制这些特性会极大地方便开发者使用。

@punkvv
Copy link

punkvv commented Apr 9, 2024

sm2加密需要支持长数据加密+1

@guanzhi
Copy link
Owner

guanzhi commented Apr 11, 2024

实际上GmSSL设计时考虑了这个需求,默认就不必须做DER编码。SM2_KEY, SM2_SIGNATURESM2_CIPHERTEXT这几个类型的内部数据已经做了序列化了,可以直接复制到内存里或者复制到文件里,即使在大小端不同的CPU之间传输也不会出现错误。

@lizheng2018CC
Copy link
Author

实际上GmSSL设计时考虑了这个需求,默认就不必须做DER编码。SM2_KEY, SM2_SIGNATURESM2_CIPHERTEXT这几个类型的内部数据已经做了序列化了,可以直接复制到内存里或者复制到文件里,即使在大小端不同的CPU之间传输也不会出现错误。

可是源码里面并没有直接将SM2_CIPHERTEXT 暴露给用户,用户还是需要阅读和修改源码才能得到非der编码的数组,不妨给函数参数加一个控制der编码的标志位,控制输出数组中的内容是否是der编码过的。并且还是希望1、sm2加密需要支持长数据加密;2、对私钥的加密也可关闭;3、sm4 EBC加密(虽然我已经实现了);

int sm2_encrypt(const SM2_KEY *key, const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen)
{
	SM2_CIPHERTEXT C;

	if (!key || !in || !out || !outlen) {
		error_print();
		return -1;
	}
	if (!inlen) {
		error_print();
		return -1;
	}

	if (sm2_do_encrypt(key, in, inlen, &C) != 1) {
		error_print();
		return -1;
	}
	*outlen = 0;
	if (sm2_ciphertext_to_der(&C, &out, outlen) != 1) {
		error_print();
		return -1;
	}
	return 1;
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants