“密码是国之重器,没有自主算法,就像把城门钥匙交给外人。”,当每一笔支付、每一次刷脸、每一条政务数据都用国密算法守护—— 我们守护的不仅是数据,更是数字时代的国家主权。作为一个中国人,尤其是安全从业者,我们一定要清楚以下国密算法的基础知识!
一、什么是国密算法?
为了进一步保障密码算法的可控性和我国的信息安全,我国国家密码管理局自主研发了一套国产密码学算法,即国密(又称商用加密算法,即商密SM,SM就是ShangMi的简写)。就像每个国家都有自己的语言一样,密码算法也有“国籍”之分。
《中华人民共和国密码法》将密码分为核心密码、普通密码和商用密码:
-
核心密码、普通密码用于保护国家秘密信息,核心密码保护信息的最高密级为绝密级,普通密码保护信息的最高密级为机密级。 -
商用密码用于保护不属于国家秘密的信息。公民、法人和其他组织可以依法使用商用密码保护网络与信息安全。
二、国密算法家族有哪些成员?
国密算法并不是指某一种算法,而是一个算法集合。 其中最常用的包括:
-
SM1: 一种分组密码算法,用于数据加密。该算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。 -
SM2: 一种非对称密码算法,包括数字签名、密钥交换和公钥加密等功能。 -
SM3: 一种密码杂凑算法,用于生成数据的摘要(类似于指纹)。 -
SM4: 另一种分组密码算法,也用于数据加密。 -
SM9: 一种基于标识的密码算法(简称标识密码),简化了密钥管理。 -
ZUC: 名称源于古代数学家祖冲之,体现中国科技传承,是唯一被3GPP采纳为国际标准的中国密码算法(4G/5G安全核心)。
Note:标识密码(Identity-Based Cryptography,IBC) 是一种直接用用户身份标识(如邮箱、手机号)作为公钥的公钥密码体系。其核心思想是消除传统数字证书的复杂性,实现“无证书加密”。
国密算法的应用非常广泛,只要涉及到信息安全的地方,几乎都能看到它们的身影。
举个例子:
你有没有想过,为什么你的银行卡在ATM机上能安全地取钱? 这背后就有国密算法的功劳。 银行卡芯片中存储着你的身份信息和密钥,这些信息都经过了国密算法的加密保护,防止被不法分子窃取和篡改。
三、国密算法 vs 国际通用密码算法:有什么不同?
我们平时听到的密码算法,比如AES、RSA、SHA-256等,大多是国际通用的密码算法。 那么,国密算法和它们有什么不同呢?
-
设计理念: 国密算法在设计上充分考虑了我国的信息安全需求和密码应用环境,更加注重自主可控。 -
算法结构: 国密算法在算法结构上与国际通用算法有所不同,例如SM4算法采用了与AES不同的S盒设计。 -
安全性: 国密算法经过了严格的安全评估和测试,在特定场景下具有更高的安全性。 -
知识产权: 国密算法拥有自主知识产权,避免了潜在的知识产权风险。
下图为国密码算法全家福(可保存图片收藏),并列出了各自对标的国际密码算法:
我国自研的SM2/3/4/9算法均已成为国际认可的国际算法:
-
SM2和SM3密码算法已于2018年正式成为数字签名ISO/IEO和哈希函数ISO/IEO国际标准中的一部分。 -
SM4分组密码算法也于2021年正式成为分组加密ISO/IEO国际标准中的一部分。 -
2021年10月,ISO/IEC JTC1/SC27会议宣布,我国SM9密钥交换协议作为国际标准ISO/IEC 11770-3:2021《信息技术密钥管理第3部分:使用非对称技术的机制》的一部分,由国际标准化组织ISO/IEC正式发布。
四、为什么要使用国密算法?
《中华人民共和国密码法》第二十五条明确指出“国家推进商用密码检测认证体系建设,制定商用密码检测认证技术规范、规则,鼓励商用密码从业单位自愿接受商用密码检测认证,提升市场竞争力。”,使用国密算法,不仅仅是为了支持国产,更是为了保障国家的信息安全。
-
自主可控: 避免受制于人,掌握信息安全的主动权。 -
安全可靠: 针对国内应用环境进行优化,安全性更高。 -
合规要求: 在某些行业和领域,使用国密算法是强制性要求。
举个例子: 如果你是一家银行,使用国密算法可以更好地保护客户的资金安全,同时也能满足监管部门的合规要求。
另外,在技术演进方面,后量子SM算法研发已进入工程验证阶段,抗量子计算攻击的SM10算法(可抵御量子计算机的Shor算法)预计2026年完成标准化。政策牵引力持续增强,《网络安全审查办法》将SM算法支持度作为关键。
五、如何使用国密算法?
使用国密算法并不难,现在有很多成熟的国密算法库和工具可以使用。
-
软件开发: 可以使用OpenSSL的国密引擎、Bouncy Castle等开源库。 -
硬件开发: 可以使用支持国密算法的芯片和安全模块。
实践案例: 假设你要开发一个安全的通信应用,可以使用SM2算法进行身份认证和密钥交换,使用SM4算法对通信内容进行加密。
代码示例(Python):
from gmssl import sm4, sm3
# SM4 CBC模式加密解密
key = b'1234567890abcdef'

iv = b'abcdef1234567890'
data = b'hello world'
# 加密
cipher = sm4.CryptSM4()
cipher.set_key(key, sm4.SM4_ENCRYPT)
encrypted_data = cipher.crypt_cbc(iv, data)
# 解密
cipher = sm4.CryptSM4()
cipher.set_key(key, sm4.SM4_DECRYPT)
decrypted_data = cipher.crypt_cbc(iv, encrypted_data)
print('原始数据:', data)
print('加密后的数据:', encrypted_data)
print('解密后的数据:', decrypted_data)
# SM3哈希
data = b'hello world'
hashed_data = sm3.sm3_hash(list(data))
print('哈希后的数据:', hashed_data)
总结
国密算法是保障我国信息安全的重要基石。 了解国密算法,不仅能提升我们的网络安全意识,也能更好地保护我们的个人信息和财产安全。 希望通过今天的介绍,你能对国密算法有一个更清晰的认识。
以下是一张图+一句口诀的极简记忆法,助你3秒记住国密全家福:
记忆口诀:“一四七守数据,二三九验身份,十抗量子,五六八锁深宫,祖冲之护5G”