加密算法的中国特色

举报
码乐 发表于 2025/12/16 08:23:00 2025/12/16
【摘要】 1 背景简介在密码学Q领域,国密算法 SM4 是国内自主研发的分组对称加密 四算法,凭借 128 位分组长度、128 位密钥长度的设计,在金融、政务、物联网等领域广泛应用。但分组密码本身仅能处理固定长度(SM4 为 128 位)的明文数据,而现实中需要加密的文件、数据流、存诸块等往往是任意长度的。为解决这一问题,“工作模式”应运而生 – 它相当于分组密码的“应用框架”,定义了如何将固定长度...

1 背景简介

在密码学Q领域,国密算法 SM4 是国内自主研发的分组对称加密 四算法,凭借 128 位分组长度、128 位密钥长度的设计,在金融、政务、物联网等领域广泛应用。

但分组密码本身仅能处理固定长度(SM4 为 128 位)的明文数据,而现实中需要加密的文件、数据流、存诸块等往往是任意长度的。

为解决这一问题,“工作模式”应运而生 – 它相当于分组密码的“应用框架”,定义了如何将固定长度的分组加密逻辑扩展到仟意长度数据,同时兼顾安全性、性能与实际场景需求。本文将详细解读SM4的8种主流工作模式:ECB、CBCCFB、OFB、CTR、GCM、CCM 与 XTS.

2 分组密码工作模式的核心价值

工作模式的核心作用有三点:一是“长度适配”,将任意长度的明文拆分为符合 SM4 分组长度的块(最后一块需补全),或转化为流密码形式处理;二是“安全增强”。避免相同明文分组加密后产生相同密文(这是分组密码的天然隐患),通过引入初始化向量(NV)、随机数(nonce)等参数,抵御统计分析、重放攻击等风险;

三是“功能扩展”,部分模式(如 GCM、CCM)可同时实现“加密”与“认证”,确保数据不仅不被窃取,还不被篡改。
在了解具体模式前,需明确两个关键概念:

初始化向量(IV):用于打破明文分组的关联性,通常要求“随机且唯一”(部分模式仅需唯一),无需保密,但同一密钥下不可重复;

认证加密(AEAD):同时提供加密(机密性)与认证(完整性、防篡改)的能力,生成“认证标签”,解密时需验证标签有效性,代表模式为 GCM、CCM。

3 算法示例

使用SM4密码算法时,我们有一个128位的块大小,并且使用128位的加密密钥。每个数据块有32轮处理。总体而言,我们可以在初始向量(IV)中添加一个128位的盐值。

    Type:			 SM4
    Mode:			 CBC
    Message:		 Hello
    Message with padding:	 b'Hello\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b'

  Key:			 60be6868db307a6aa82cb81f39d28c00
  IV:			 b391c135bb6349758de37257b3e4d4a1

  Cipher:			 fee4e41af44bc387c4255d3527ca65c8
  Decrypt:		 Hello

GCM 提供了 MAC,用于消息认证。根据我阅读的资料和看到的代码片段,GCM 执行了一种类似于 CBC 的异或操作,但我不确定异或的对象是什么。

在 CBC 模式中,异或操作是明文与前一个密文块进行的,除了第一个块,它使用一个随机 IV。GCM 也是这样吗,还是异或是针对其他东西?如果是的话,有人能简单解释一下 GCM 如何使用 IV 以及异或操作是如何进行的吗?

4 GCM 和 CBC

GCM 和 CBC 模式在内部工作原理上有很大不同;它们都涉及分组密码和异或操作,但使用方式不同。在 CBC 模式中,你通过将当前的明文块与前一个密文块(或初始化向量 IV)进行异或,然后将结果传入分组密码来加密数据块;分组密码的输出就是密文块。

GCM 模式提供隐私(加密)和完整性。为了提供加密,GCM 维护一个计数器;对于每一块数据,它将当前计数器的值传入分组密码。然后,它将分组密码的输出与明文进行异或,从而形成密文。
注意两个关键区别:

正在进行异或运算的对象;在 CBC 模式下,明文会与攻击者已知的数据(IV 或前一个密文块)进行异或运算;因此,这本身并不提供任何固有的安全性(相反,我们这样做是为了尽量减少通过分组密码发送相同块的机会)。在 GCM 模式下,明文会与来自分组密码的输出进行异或运算;在安全模型中,这本身就是安全性的一部分,攻击者无法猜测该输出(除非他已经知道明文和密文)。

5 小结

通过分组密码处理的对象;在 CBC 模式下,明文会通过分组密码处理(在被异或“随机化”之后);在 GCM 模式下,通过分组密码处理的内容实际上并不依赖于被加密的数据,而只依赖于内部状态。

至于 GCM 如何使用 IV(我个人认为“nonce”更适合描述 GCM 所使用的,因为它强调了一个概念, 至于GCM如何使用IV(我个人认为“随机数”这个词更适合GCM使用的情况,因为它强调了在GCM中,不能对同一个密钥重复使用相同的随机数),它被用来初始化计数器。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。