中国密码算法与NIST标准对比

文章讨论了中国的SM系列密码算法,包括SM2的签名效率、SM3的哈希速度和SM4的加密性能,指出SM4比AES慢,可能因缺乏处理器加速。NIST的AES安全性引起关注,SM系列作为备选方案被提及。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 引言

NIST定义AES为标准的对称密钥加密算法。但NIST被指出可能在加密算法中添加NSA后门。为此,在中国,ShāngMì (SM) 系列密码算法,作为TLS 1.3集成和无线认证的备选方案:

  • SM2:定义了认证(签名)
  • SM3:定义了哈希函数
  • SM4:定义了加密。由Lü Shuwang于2007年发明,并于2016年称为国标(GB/T 32907-2016)。同时定义在RFC 89998中:
    在这里插入图片描述

2. SM2

SM2是与ECDSA、EdDSA、RSA等价的签名方案:
在这里插入图片描述
最快的签名方案是ECDSA(P256),其签名速度比CurveSM2快10倍多。但SM2的签名速度也还可以,要比RSA签名速度快10倍。而验签速度,ECDSA的验签速度要比SM2快2倍。【下图源自https://asecuritysite.com/openssl/openssl3_b2
在这里插入图片描述

3. SM3

SM3提供了256位哈希:
在这里插入图片描述
SM3是主流哈希中最慢的哈希算法之一,其速度约为SHA-1的37%:【下图源自https://asecuritysite.com/openssl/openssl_full2b
在这里插入图片描述
以“Hello”哈希为例

echo -n "Hello" | openssl dgst -sm3
dc74f051ad5bc19ba721bf0023e10de03bae29bbe013c43988bae55828bceb

4. SM4

SM4加密算法,其block size为128为,加密密钥为128位:
在这里插入图片描述
每个block数据有32轮处理。此外,可在IV(Initialisation Vector)中添加128位的salt值。
总体来首,SM4的性能不如AES和Cha-Cha20。AES-128-ECD的速度约是SM4-ECB的100倍:【下图源自https://asecuritysite.com/openssl/openssl3_b
在这里插入图片描述
SM4示例代码为

import os
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.primitives import padding
import sys
message="Hello"
keysize=16
iv = os.urandom(16)
mode=0
if (len(sys.argv)>1):
 message=str(sys.argv[1])
if (len(sys.argv)>2):
 mode=int(sys.argv[2])
key = os.urandom(keysize)
padder = padding.PKCS7(128).padder()
unpadder = padding.PKCS7(128).unpadder()
cipher=None
if (mode==0): 
 cipher = Cipher(algorithms.SM4(key), modes.CBC(iv))
if (mode==1): 
 cipher = Cipher(algorithms.SM4(key), modes.OFB(iv))
if (mode==2): 
 cipher = Cipher(algorithms.SM4(key), modes.CFB(iv))
if (mode==3): 
 cipher = Cipher(algorithms.SM4(key), modes.CTR(iv))
if (mode==4): 
 cipher = Cipher(algorithms.SM4(key), modes.ECB())
encryptor = cipher.encryptor()

str=padder.update(message.encode())+padder.finalize()
ciphertext = encryptor.update(str ) + encryptor.finalize()
# Now decrypt
decryptor = cipher.decryptor()

rtn=unpadder.update(decryptor.update(ciphertext) + decryptor.finalize())+unpadder.finalize() 
 
print("Type:\t\t\t",cipher.algorithm.name)
print("Mode:\t\t\t",cipher.mode.name)
print("Message:\t\t",message)
print("Message with padding:\t",str)
print("\nKey:\t\t\t",key.hex())
if (mode!=4): print("IV:\t\t\t",iv.hex())
print("\nCipher:\t\t\t",ciphertext.hex())
print("Decrypt:\t\t",rtn.decode())

运行示例为:

Type:    SM4
Mode:    CBC
Message:   Hello
Message with padding:  b'Hello\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b'
Key:    ff010929f29f618ea5181a6a2e9de7a0
IV:    56f8a40da11cd93a67172311470879c3
Cipher:    292994cf3bf587e2b9f020a6c94026c1
Decrypt:   Hello

SM4也是OpenSSL 3.X的核心组件
在这里插入图片描述

5. 结论

  • SM2签名算法,签名速度要比ECDSA(P256)慢10倍。
  • SM3哈希算法,哈希运算用时是SHA-1的3倍。
  • SM4对称加密算法,比AES要慢很多。原因可能在于对AES有很多处理器加速。

参考资料

[1] How Do The Chinese Ciphers Compare with NIST Standards?

### Dilithium算法国内外研究进展 #### 国外研究进展 Dilithium作为一种基于格的数字签名方案,在国外受到了广泛的关注和深入的研究。研究表明,Dilithium的安全性得到了显著提升,尤其是在量子随机预言机模型(QROM)中的安全性已经得到证明[^3]。具体来说,[DFMS19]的工作显示,只要底层的Σ-协议具备collapse特性以及特定的声音性(special soundness),那么经过Fiat-Shamir转换后的签名机制在QROM中就是安全的。 此外,针对Dilithium的具体实现优化也在不断推进。例如,为了提高效率并减少带宽消耗,研究人员探索了如何利用更高效的采样技术来加速密钥生成过程,并通过改进模块化运算方法降低计算开销。这些努力使得Dilithium不仅保持了高水平的安全保障,而且在实际部署时也能展现出良好的性能表现。 #### 国内研究进展 在国内,随着后量子密码(PQC)领域的发展,对于Dilithium的研究同样取得了重要突破。一方面,国内学者积极参到国际标准制定的过程中;另一方面,围绕着Dilithium的实际应用展开了大量实验分析和技术攻关。特别是近年来提出的新型攻击手段——如陈一镭所设计的用于破解格密码系统的量子算法——促使更多科研人员投入到对抗此类潜在威胁的研究当中,旨在进一步巩固和完善Dilithium的设计原理及其变体版本[^4]。 同时,国内团队还致力于开发适用于中国国情的信息安全保障体系,这其中包括但不限于对Diluthium在内的多种PQC候选算法进行全面评测,确保它们能够满足国家信息安全战略需求的同时兼顾高效性和易用性。 #### 最新研究成果安全性评价 最新的研究结果显示,Dilithium作为NIST第三轮评选中最优秀的几个公钥加密算法之一,已经在多个维度上获得了认可: - **安全性**:得益于其坚实的理论基础和支持多层防护措施的能力,即使面对未来可能出现的强大量子计算机,Dilithium依然可以提供足够的保护力; - **性能对比**:其他竞争者相比,Dilithium表现出色的地方在于它能够在保证高安全等级的前提下维持较低的时间复杂度和空间占用率,这对于资源受限环境下的设备尤其有利。 综上所述,无论是从学术界还是工业界的视角来看,Dilithium都展现出了极高的潜力和发展前景。 ```python # Python伪代码展示Dilithium签名验证流程简化版 def dilithium_verify(public_key, message, signature): # 验证消息摘要是否匹配给定的签名 hash_value = hash_function(message) # 使用公共密钥恢复原始数据并hash值比较 recovered_data = public_key.recover(signature) return hash_value == recovered_data ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值