【Agorans 征文】国密加密杂谈——道路千万条,安全第一条

近两年,美国以“涉嫌威胁美国国家安全”为由不断对华为、抖音等中国企业进行打压。但其实我国对安全还是下了功夫的,自研的加密算法就是很好的体现。

国密加密

经历过大量网站被篡改、安全漏洞不断出现等互联网安全威胁,国家密码局想明白了,用国外的加密算法是不靠谱的。一是“国际通用”的加密算法太容易被破解了,二是非自研算法我们想修复漏洞也没那权限。索性自己主宰,走上了漫漫自研路。

我们所说的国密加密算法,就是由国家密码局制定的一系列算法。自 2010 年起,国家密码局先后公布了 8 类算法,最受欢迎的是国密四兄弟:SM1(对称密码算法)、SM2(椭圆曲线公钥密码)、SM3(密码杂凑算法) 和 SM4(分组密码算法)。

@note SM 是商密(商业密码)的简拼。商业密码是指对不涉及国家秘密内容的信息进行加密保护或者安全认证所使用的密码技术和密码产品。

SM1

SM1 是位神秘的大哥,资料栏中只有一句:对称密码算法,分组长度和密码长度均为 128 bit。SM1 至今未被公布具体算法,也是四兄弟中唯一应用于国家政务、警务的幸运儿。SM1 虽然神秘,但却不高冷,它会以 IP 核的形式存在于芯片中,与我们的生活息息相关。我们日常使用的智能 IC 卡、智能密码钥匙都有可能用到了 SM1 算法芯片。

SM2

SM2 是一种椭圆曲线公钥密码算法,于 2010 年 12 月 17 日发布。在 SM2 问世前,常用的非对称加密算法为 RSA。该算法中保密强度和加解密速度不可兼得,而 SM2 很好地解决了这个问题。在保障密码复杂度的前提下, SM2 的密码生成速度可以达到 RSA 的百倍以上,是 RSA 算法的完美替代。

既然 SM2 这么优秀,那要如何实现该算法呢?

  1. 确定椭圆曲线并指定基准点 G
    SM2 以椭圆曲线 y2=x3 + ax + b 为基准,通过指定 a 和 b 参数即可确定椭圆曲线。此外,还需指定椭圆上的基准点 G,用于确定倍点和倍数,即公钥和私钥。

  2. 生成密钥对
    用随机数发生器产生整数 d,即私钥;以 G 为基准点,计算点 P,即公钥。

生成密钥对后,我们可以将其应用于签名、加密等。为了让非对称密码算法的使用原理更容易理解,我们以实际生活为例:小明想给小李送机密文件,不能让其他人知道,于是他们相约在 S 楼的 5 号房间传递文件。S 楼的密码由物业管理,需进入 S 楼的人可以向物业获取密码,该密码相当于公钥。使用公钥进入 S 楼后,小明需要进入 5 号房间, 5 号房间的密码是小明和小李一致协商的,没有任何其他人知晓,该密码相当于私钥。如此一来,小明可以安心在 5 号房间放好文件,之后小李可以经过类似的步骤拿到文件。

SM3

SM3 是一种密码杂凑算法,和 SM2 同期发布。在 2017 年 SHA-1 算法被攻击后,国家密码局发文呼吁全面支持和应用 SM3 等国产密码算法。SM3 的设计较 SHA 更为复杂,受到的攻击较少。

SM3 的实现步骤如下:

  1. 预处理
    以 64 字节(512 bit) 为消息分组长度,对消息进行分组和填充处理。

  2. 迭代压缩
    采用增强型的 Merk1e-Damgård 结构,对消息进行迭代压缩。迭代压缩包含迭代过程、消息扩展和压缩算法。

  3. 计算杂凑值
    经历以上步骤后,最终会得到长度为 256 bit 的杂凑值。

SM3 常应用于数字签名和验证、消息认证码的生成与验证以及随机数的生成。

SM4

SM4 是一种分组对称密码算法,于 2012 年 3 月发布。该算法的优点是软件和硬件实现容易,运算速度快。

SM4 的实现步骤如下:

  1. 预处理
    以 16 字节(128 bit)为消息分组长度,对消息进行分组和填充处理。

  2. 密钥扩展
    通过 32 bit 常数或固定参数,你可以对密钥进行扩展。

  3. 生成密钥
    通过 32 轮非线性加密轮函数,你可以生成密钥,并迭代控制。

写在最后

本文为近期我对国密加密的一点学习,感谢互联网让我有机会向素未谋面的大佬们学习~以下为参考文章:

推荐阅读
相关专栏
开发者实践
186 文章
本专栏仅用于分享音视频相关的技术文章,与其他开发者和声网 研发团队交流、分享行业前沿技术、资讯。发帖前,请参考「社区发帖指南」,方便您更好的展示所发表的文章和内容。