Open jjjighg opened 11 months ago
在aarch64环境下编译GmSSL-v2,测试sm9算法的功能时,发现对签名或加密的结果追加数据,仍然能验签或解密成功,这不符合预期。 测试命令如下:
# 签名 gmssl sm9utl -inkey user_priv.key -keyform der -sign -in file.txt -out sm9_signed.out # 验签 gmssl sm9utl -paramfile master_public.key -paramform der -verify -id "Alice" -in file.txt -sigfile sm9_signed.out # 给签名文件追加数据 cp sm9_encrypted.out sm9_signed.out.change && echo "append " >> sm9_signed.out.change # 对追加数据的签名文件验签 gmssl sm9utl -paramfile master_public.key -paramform der -verify -id "Alice" -in file.txt -sigfile sm9_signed.out.change 结果为验签成功,不符合预期。 # 加密 gmssl sm9utl -paramfile master_public.key -paramform der -encrypt -id "Alice" -in file.txt -out sm9_encrypted.out # 解密 gmssl sm9utl -inkey user_priv.key -keyform der -decrypt -in sm9_encrypted.out -out recover.txt # 对追加数据的加密文件进行解密 cp sm9_encrypted.out sm9_encrypted.out.change && echo "append " >> sm9_encrypted.out.change # 对追加数据的加密文件进行解密 gmssl sm9utl -inkey user_priv.key -keyform der -decrypt -in sm9_encrypted.out.change -out recover.txt.change cmp file.txt recover.txt.change 结果为解密成功,不符合预期。
这个问题似乎是没有对验签或加密后的数据长度做验证?请问可以修复吗?
你的数据追加属于非侵入式的追加,不生效的,生成的数据是asn1封装的,向后追加数据,程序正常按asn1规则取N个字符,追加的自然就被忽略了, 要是在前面或是中间加点数据,就报错了。
这种类似的序列化都会有这样的问题,如PHP 的 serialize 序列化,也存在这个问题,向后追加照样解析,只是忽略了后面的数据
那么请问这个问题可以修复吗?
我只是热心网友,你可以提PR给管理员
在aarch64环境下编译GmSSL-v2,测试sm9算法的功能时,发现对签名或加密的结果追加数据,仍然能验签或解密成功,这不符合预期。 测试命令如下:
这个问题似乎是没有对验签或加密后的数据长度做验证?请问可以修复吗?