查看原文
其他

分组密码的隐秘密文分组链接模式

The following article is from 信息安全与通信保密杂志社 Author Cismag



针对分组较小的分组密码算法在安全方面存在的某些设计缺陷,以及因明文组空间较小可能引发的明文格式特征泄露问题,设计了一种能适用于较小分组长度的分组密码工作模式。对长段明文进行分组加密时,通过将前一组密文与系统参数及密钥因素混合产生一组伪随机向量,并将该向量以加扰形式作用到当前明文组,然后对被加扰的明文组做多轮迭代式分组加密。由于被加扰后的明文组具有不可预测性,可有效地防止已知明文或选择明文攻击。给出了一种产生认证标签的方法,使得该工作模式可提供数据加密和报文完整性检验功能。


内容目录:

1 隐秘密文分组链接模式

1.1   隐秘密文分组链接模式加密方法

1.2   隐秘密文分组链接模式解密过程

1.3   隐秘密文分组链接加密认证模式

2 隐秘密文分组链接模式性能分析

3 结 语


为防止一些敏感信息被人偷窥,信息加密是一种较好的应对措施。但有些情形并不需要对大量明文进行加密,比如有一些表格,每张表格上只有手机号、身份证号和电子邮箱地址等内容是较为敏感的信息,其他内容无须加密。为了让密文可方便地书写在表格内,自然希望加密后的密文能够保持明文的数据类型和长度。这就使得一些保留格式加密(Format Preserving Encryption,FPE)算法  应运而生。


此外,近几年轻量级密码学研究开始活跃,因为轻量级算法具有功率消耗少、内存占用少等特点,易被用于嵌入式系统中。有些轻量级分组密码算法的分组长度只有 32 比特,当数据量较大时,数据中容易存在密文组重复。例如,当每一个密文组的出现概率均为 1/232 时,按照生日攻击模型,只要有 77 164 个密文组,在这些密文组中两两比对,存在密文组重复的概率理论上可以大于 0.5。实际应用中,将长段明文按 32 比特分组后,各个明文组的出现机会一般是不均匀的,如果使用电子密本(Electronic Code Book,ECB)模式会导致各个密文组的出现概率也不均匀,更容易存在密文组重复。


分组较小的分组密码算法和保留格式加密算法可能需要面对明文组(密文组)空间较小引发的安全隐患 。例如,用 ECB 模式加密长段报文后,由于分组小,也许在密文中可以找到相同的密文组,由此可推测明文段中相距某长度有重复明文,这有助于验证或猜测某长段明文是否由某段密文译出,或者猜测某段密文的底码会不会是文字、数字流、某类图片或文档等,进而攻击者能够以一定的概率获得部分明文组与密文组的对应。同样,如果攻击者对 A行密文猜设了明文,当无法为 B 行密文猜设明文时,若发现 B 行与 A 行有一个相同密文组,则有可能以已知 B 行一个明文组为线索,综合场景信息和上下文关联,而合理地猜出 B 行其他密文组的明文。


为了规避因明文组空间较小引发的这类安全问题,或者弥补分组密码安全方面的设计缺陷,本文提出一种能增强算法安全性的工作模式——分组密码隐秘密文分组链接模式。


1

隐秘密文分组链接模式

密文分组链接(Cipher Block Chaining,CBC)是当今广泛应用的分组密码工作模式,也是最受欢迎的分组密码工作模式之一。对于一些较小分组的分组密码算法或保留格式加密算法,理论上也可以使用 CBC 模式。不过,若出现了密文组碰撞,有可能会暴露明文格式特征,甚至导致分明文泄露。因此,当明密文空间较小时,尤其选用了保留格式加密算法时,使用 CBC 或者 ECB 工作模式可能存在安全缺陷。

为了防止攻击者获得明密对,沿用 CBC 模式的设计理念和指导思想,设计了一种类似于CBC 的专用工作模式,因前一个密文组以被加密形式参与其中,故称其为分组密码隐秘密文分组链接模式。

在介绍具体方法之前,先定义 3 个术语。

(1)字符模加:分组密码的明文组一般由若干个字符构成,例如 AES 算法的明文组由 16个 ASCII 字符构成。保留格式加密算法的明文可以是若干个十进制符、十六进制符或小写英文字母等。依据字符集合大小的不同,字符模加的模数是不一样的,例如 ASCII 字符的字符相加是模 256 加,十进制符的字符相加是模 10 加,小写英文字母的字符相加是模 26 加等。下文将这种字符集合有多大就模多少的加法称为字符模加,用运算符表示。例如,明文为十进制符,模数为(无进位)。

(2)字符模减:字符模加的逆运算被称为字符模减,用表示。例如,模数为 10,(无借位)。

(3)隐秘种子:用当前密钥将加解密双方约定的某特定数据组(系统参数)加密,产生的加密结果记作隐秘种子。它将频繁地作用于每一个数据组的加密或解密。

1.1 隐秘密文分组链接模式加密方法

设明文字符集大小为 m,分组长度为 N 个字符。用 Enc(P,K) 表示使用密钥 K,将明文组 P以 ECB 模式加密。对整个明文段的加密可以有初始向量,也可以不用初始向量。如图 1 所示,隐秘密文分组链接模式加密方法如下:

(1)将明文数据按分组长度分成若干个组,记作

(2)商定参数 f 并计算隐秘种子 R, 即R=Encf,K),可默认 f=1。

(3)加密第一个明文组时,由于未产生过密文组,默认前一个密文组为 IV,如果不使用 IV,则默认前一个密文组为“0”。先对加 密, 即 得 到 中 间 变 量或者明文组与 V 按位字符模加,得然后将 P加密得到第一组密文,即

(4)对于第 i 个明文组先计算中间变量再 计 算

图 1 隐秘密文分组链接模式加密

注 1:图中表示按位字符模加,“分组加密”是指调用分组算法的 ECB 模式。其中的参数 f 为加解密双方事先协商为某固定常数(可以默认 f=1),或者选定某个类似于 Hash算法的函数,双方以密钥为输入参数由函数算出 f 值。该 f 值不是 IV,约定了 f 值还可以照常使用 IV。该 f 值既可以是公开常数,也可以是密钥的一部分。

注 2:为什么方案中采用字符模加,而不采用异或呢?这是因为本工作模式要顺应保留格式加密。当保留格式加密的字符集大小为 10 或26 等非 2 的方幂数值时,不方便做异或运算。

1.2 隐秘密文分组链接模式解密过程

该工作模式的解密方法与加密方法相似,需要由相同的 f 参数计算出相同的隐秘种子 R。解密情形的步骤(1)至步骤(3)与上节的加密情形相同。步骤(4)相应地变为这 里表 示字符模减,是字符模加的逆运算),如图 2 所示。


图 2 隐秘密文分组链接模式解密


上述图 1 和图 2 均为明文段长度恰好是分组长度的整倍数情形。当明文段长度不是分组长度的整倍数时,会出现末尾组是一个不满组。常见的不满组加密处理方法包括协议填充和密文偷垒等多种方法。本工作模式采用弱处理法,即省去末尾组的分组迭代。也就是说,设分组长度为N个字符,末尾明文组的字符个数为m,对第组密文做加密运算,即计算中间变量取 V 的左边(高权位)m 个字符与做字符模加,产生不满密文组,即(这里 MSC 为 Most Significant Character 的缩写)。解密时依据末尾密文组是否满组,并选择合适的解密方式。

1.3 隐秘密文分组链接加密认证模式

与分组密码工作模式 CBCMAC、XCBC、OCB 等类似,隐秘密文分组链接模式也可以用于产生具有完整性校验用途的 MAC 码,将上述模式改造成隐秘密文分组链接加密认证模式,如图 3 所示。设分组长度为 N 个字符,加密方法如下文所述。

(1)将明文数据按分组长度分成若干个组,记作

(2)清空一批单元用于存放明文累加和,即令数据组 M=0。

(3) 商 定 参 数 f 并计算隐秘种子 R, 即R=Encf,K),可默认 f=1。

(4)约定密文组是满组,则对计算:

图 3 隐秘密文分组链接加密认证模式

①将明文组以字符模加形式累加到 M 中,即

②计算若 不 是 满 组, 设  只 有 m 个 字 符,m<N,则对计算:

①将明文组 Pi 以字符模加形式累加到 M 中,即

②计算

对于第 n 组,可以形式化地在右边(低位)补 N-m 个“0”,并将补“0”后的以字符模加形式累加到 M 中,即不满组密文为

(5)将数据组 M(明文累加和)加密。若是满组,则计算 Cn+1=Enc(Enc(Cn ◎ R,K) ◎ M,K)。若 不是满组,只有 m 个字符,则通过在右 边( 低 位) 补 N-m 个“0”, 然 后 计 算

除此之外,也可根据约定的认证标签长度,只输出的左边若干个字符。比如使用 AES或者 SM4 算法时,收发双方可约定只输出第n+1 组 16 个字节中的左边 8 字节、10 字节或者12 字节等作为认证标签。

解密方在解密过程中也要计算明文累加和M,解密完 n 组明文后将数据组 M 加密,将加密结果与认证标签(第 n+1 密文组)进行比对,检验密文是否被篡改。如果输出整个第 n+1密文组作为认证标签,则解密方也可以在解密认证标签后,比对明文累加和与解密出来的累加和是否相同。

依据约定的认证标签长度和接收到的密文长度,解密之前需要注意密文倒数第二组是否为不满组。由此可见,这种简单的不满组处理方法可能不适用于接收方在线同步解译的场景中。

2

隐秘密文分组连接模式性能分析

本文给出的隐秘密文分组链接模式与传统的分组密码 CBC 模式有些相似。尽管 CBC 模式被许多人公认为“完美的分组密码算法工作模式”,但它还是有一个小小的缺陷。例如,在不变更密钥的情况下,若密文中出现了相同的密文组,不妨将第一份密文的第 i-1 个和第 i 个密文组分别记作对应的明文组是第二份密文的第 k-1 个和第 k 个密文组分别记作对应的明文组是那么,若出现了数据组相同,则攻击者可以知其中符号“⊕”表示两个数据组做异或。探知了两明文组间的距差,可能会有助于攻击者猜出明文组以及进行更为深入的密码分析和攻击行为。

如果将隐秘种子 R 看作初始向量,隐秘密文分组链接模式可以描述为以 R 为初始向量将前一个密文组作类 CBC 模式加密,得到一组更加难以预测的实用初始向量或称乱数(因为 R原本已经难以预测),又基于这个秘密的难以预测的实用初始向量,用类 CBC 模式将明文组加密为密文组。这里所述的类 CBC 模式与 CBC 模式略有不同,CBC 模式是前一组密文(或 IV)与明文组异或后做分组迭代,而类 CBC 模式是一组码符与明文组字符模加后做分组迭代。

设想 Eve 偷偷地复制了 Alice 发给 Bob 的一段密文,试图破解 Alice 与 Bob 之间的共享密钥。正当 Eve 冥思苦想地猜测报文内容的时候,Bob公开了全部明文,Eve 欣喜若狂,因为这恰好是他想要的明文。可是,Eve 的笑容很快就会消失,因为明文段与密文段对准后,明文组与密文组之间没有“确定的”对应关系,也不能用通常的相关分析方法求取密钥。

隐秘密文分组链接模式的分组加密过程也可以描述为“产生乱数并对明文组做自同步序列加密,然后对已加密的数据组又做了一次 ECB模式分组加密”。破译复合加密体制的方法通常是分割分析,各个击破。Eve 将明文段与密文段对准后,如果他想攻击序列密码,需要拥有一段乱数序列,通过研究序列特征取得进展。可是,在实际中获取不到乱数。如果 Eve 想攻击分组密码,需要有若干个明密对,通过研究分组迭代变换输入与输出之间的相关特性或函数关系求取密钥。可是,取不到明密对,因为没有办法去除加在明文上的扰码。结论:对这样的分组序列混合加密体制不能有效地实施各个击破攻击。

对于分组密码的输出反馈(Output Feedback Mode,OFB)和计数器 CTR 等工作模式,IV 重用会导致信息泄露。而隐秘密文分组链接模式的 IV 重用不会对安全性产生影响,最坏情形的安全性仍优于 ECB 模式。

之所以说隐秘密文分组链接模式可以增强分组算法的安全强度,是因为它限制了攻击者有效地获取和形成数据条件。数据条件是密码分析及密码破译的基本素材,也是攻击成功的必备基础。没有适度的数据条件,就不能实施有效的攻击。

隐秘密文分组链接模式能够弥补分组密码算法在安全性上存在的不足或缺陷。例如,用户使用了一种有缺陷的分组密码算法,比如使用只迭代 8 轮的 DES 算法,其中的 8 个 48 比特的轮密钥是由 128 比特密钥派生的(因 56 比特时存在密钥穷尽攻击,故密钥加长到 128 比特)。

因存在可供利用的高概率差分路径,只要几万个已知明密对就可用差分攻击方法求取密钥可是,如果用户不使用 ECB 或 CBC 模式,而是用了本文的隐秘密文分组链接模式,攻击者就不能做差分攻击。每个密文组会与明文组、前一个密文组和隐秘因子三者相关。如果将不可见的隐秘因子看作长期不变的秘密常数或者密钥的一部分,那么一个 64 比特密文组由明文组和前一个密文组共同确定。如果研究输出比特与输入比特间的相关关系,需要寻找一比特密文与 128 比特输入状态之间的相关性。因为前一个密文组与隐秘因子模加后被 8 轮 DES 加密,所以,相关程度与 16 轮 DES 相近,但相关关系利用会更加困难。

如果报文充分长,在密文中按前一个密文组状态归类,在同一类内密文组完全由明文组确定,若某一类内能够存在上万个已知明文,则可用该类数据实施基于 8 轮DES 的差分攻击。这样优厚的数据条件与实际应用相差太远。由此可见,如果选对了工作模式,有缺陷的密码算法是可以使用的。

在信道上传输密文时,如果因干扰而发生了一比特误码,那么会导致当前密文组译出错误明文组,且影响下一个密文组的正确解密。这与 CBC 模式的错误扩散率等同,即密文中的一比特错误通常会导致两个明文组解译出错。

由于隐秘密文分组链接模式分组加密约等于进行了两次普通分组加密迭代,因此,它的加解密效率大约相当于通常 CBC 模式的 1/2。对于许多实际应用情形,不会带来较大影响。

在分组密码算法和算法工作模式设计方面,算法安全与加解密效率通常是相互制约的两个方面。对于分组长度较短的分组密码算法和保留格式加密算法,可能需要弥补算法设计和使用上潜在的不足,当需要面对的安全问题比效率问题更为突出时,有必要采用隐秘密文分组链接工作模式。

3

结语

自 20 世纪 80 年代以来,人们的密码学认知水平有了长足进步。随着国际上有关分组密码和序列密码标准征集活动的陆续开展,以及形形色色密码学术会议的召开,使现代密码算法设计和分析水平有了质的飞跃。

因此,对于实际使用的分组密码算法或序列密码算法,唯密文攻击 几乎没有成功希望。从密码破译所需要的数据角度来看,较为现实可行的分组密码攻击类型当属已知明文攻击和选择明文攻击,较为现实可行的序列密码攻击类型当属基于较长乱数序列的密码分析或攻击。

为了能够形成攻击所需要的数据条件,攻击者必须设法搜索和猜设一定数量的明密对或者剥取一定长度的乱数序列。隐秘密文分组链接模式让攻击者难以获取明密对,也难以获取乱数,从而使得攻击者既不能有效地实施分组密码破译,也不能有效地实施序列密码破译。

密码学的更多相关知识可以点击以下链接: 密码学的100个基本概念(上)密码学的100个基本概念(下)

END

往期推荐


1.笔记分享 | 组队学习密码学(2)——密码学在联邦学习中的应用
2.笔记分享 | 冯登国院士MPC讲座(3)——基于混淆电路方法的安全多方计算协议3.会议信息 | 2023年6月截稿的密码学与信息安全会议整理4.密码学中的模乘算法——蒙哥马利模乘(Montgomery Modular Multiplication)


继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存