2.2 对称密码体制

对称密码体制是加密密钥和解密密钥相同的密码系统,建立在通信双方共享密钥的基础上。自1977年美国颁布DES(Data Encryption Standard)密码算法作为美国数据加密标准以来,对称密码体制迅速发展,得到了世界各国的关注和普遍应用。

2.2.1 对称密码加密模式

对称密码体制从工作方式上可以分为分组密码和序列密码两大类。

1.分组密码

分组密码(block cipher)是将明文消息编码后划分成固定大小的组,每组明文分别在密钥的控制下输出密文组。

n是一个分组密码的分组长度,k=(k0, k1, …, kt-1)是密钥。分组密码示意图如图2-4所示。x=(x0, x1, …, xn-1)为明文,其中,xi{0, 1},0≤in-1, y=(y0, y1, …, ym-1)为相应的密文,其中,yj{0, 1},0≤jm-1,则y=E(k, x), x=D(k, y),其中ED分别表示加密变换和解密变换。

图2-4 分组密码示意图

如果nm,则分组密码对明文加密后,有数据扩展。如果nm,则分组密码对明文加密后,有数据压缩。如果n=m,则分组密码对明文加密后,既无数据扩展也无数据压缩。我们通常考虑的分组密码都是这种既无数据扩展也无数据压缩的分组密码。

分组密码设计的两个基本技术是扩散和混淆,利用扩散和混淆可以有效地抵抗攻击者从密文的统计特性推测出明文或密钥。

所谓扩散,就是让明文中的每一位以及密钥中的每一位能够影响密文中的许多位,或者说让密文中的每一位受明文和密钥中的许多位的影响。

所谓混淆,就是将密文与明文、密钥之间的统计关系变得尽可能复杂,使得对手即使获取了关于密文的一些统计特性,也无法推测密钥。使用复杂的非线性代替变换可以达到比较好的混淆效果。

现代分组密码算法设计时通常利用乘积和迭代的方法来实现扩散和混淆。实际上,乘积密码就是扩散和混淆两种基本密码操作的组合变换,这样能够产生比各自单独使用时更强大的密码系统。选择某些较简单的受密钥控制的密码变换,通过乘积和迭代可以取得比较好的扩散和混淆效果。例如,代换—置换网络(substitution permutation network)简称SP网络(如图2-5所示),是由代换(也称S盒)和置换(也称P盒)交替进行多次而形成的变换网络。代换起到混淆的作用,置换起到扩散的作用。置换不等同于扩散,多轮迭代并同代换结合,置换能产生扩散作用。代换常被划分成若干子盒,它是许多密码算法唯一的非线性部件,决定了整个密码算法的安全强度。当前,绝大多数分组密码算法都使用了这种结构。

图2-5 代换—置换网络示意图

分组密码是将消息作为数据分组来加密或解密的,而实际应用中大多数消息的长度是不定的,数据格式也不同。当消息长度大于分组长度时,需要分成几个组分别进行处理。为了能灵活地运用基本的分组密码算法,人们设计了不同的处理方式,称为分组密码的工作模式,也称为分组密码算法的运行模式。四个常用的工作模式分别为:电子编码本(electronic code book, ECB)模式、密码分组链接(cipher block chaining, CBC)模式、输出反馈(output feedback, OFB)模式、密码反馈(cipher feedback, CFB)模式。

由于分组密码加解密速度较快,安全性好,以及得到许多密码芯片的支持,现代分组密码发展非常快,在许多研究领域和商用系统中得到了广泛的应用。

随着信息安全上升到国家安全,密码学作为保障信息安全的核心技术,各国政府均对此领域的发展予以极大的重视。除前文所介绍的几种国际上广泛使用的典型的密码算法外,我国国家商用密码管理办公室也制定了一系列密码标准。在金融领域目前主要使用公开的SM2、SM3、SM4三类算法,分别是非对称算法、哈希算法和对称算法。

SM4分组密码算法是我国自主设计的分组对称密码算法,用于实现数据的加密/解密运算,以保证数据和信息的机密性。要保证一个对称密码算法的安全性的基本条件是其具备足够的密钥长度,SM4算法与AES算法具有相同的密钥长度,分组长度128比特,因此在安全性上高于3DES算法。

2.序列密码

序列密码又称流密码,是指明文消息按字符(如二元数字)逐位地相加的一类密码算法。序列密码通常认为起源于20世纪20年代的Vernam密码,Vernam密码中的密钥序列要求是随机序列(“一次一密”密码体制),由于随机密钥序列的产生、存储以及分配等方面存在一定的困难,Vernam体制在当时并没有得到广泛的应用。序列密码示意图如图2-6所示,通常划分为同步序列密码和自同步序列密码两大类。

图2-6 序列密码示意图

如果密钥序列的产生独立于明文消息,则此类序列密码为同步序列密码。在同步序列密码中,密(明)文符号是独立的,一个错误传输只会影响一个符号,不影响后面的符号。但其缺点是:一旦接收端和发送端的种子密钥和内部状态不同步,解密就会失败,两者必须立即借助外界手段重新建立同步。

如果密钥序列的产生是密钥及固定大小的以往密文位的函数,则这种序列密码被称为自同步序列密码(或非同步序列密码)。自同步序列密码的优点是即使接收端和发送端不同步,只要接收端能连续地正确接收到一定数量的密文符号,就能重新建立同步。因此,自同步序列密码具有有限的差错传播,且较同步序列密码的分析困难得多。

在20世纪50年代,由于数字电子技术的发展,密钥序列可以方便地利用以移位寄存器为基础的电路来产生,从而促使线性和非线性移位寄存器理论迅速发展,再加上有效的数学工具,如代数和谱分析理论的引入,使得序列密码理论迅速发展,并逐步走向成熟阶段。同时由于具有实现简单、速度快,以及错误传播少的优点,序列密码在实际应用中,特别是在专用和机密机构中仍保持优势。

2.2.2 典型的对称密码算法

对称密码体制中的代表算法包括DES、3DES、AES,世界上应用较为广泛的对称加密方法还有Blowfish算法、IDEA算法、RC4算法、A5算法等。

1.数据加密标准DES

1977年1月,美国政府宣布:将IBM公司设计的方案作为非机密数据的正式数据加密标准(Data Encryption Standard, DES)。DES是第一个广泛用于商用数据保密的密码算法,其分组长度为64位,密钥长度也为64位(其中有8位奇偶校验位,故实际密钥长度为56位)。尽管DES目前因密钥空间的限制,已经被高级加密标准AES取代,但其设计思想仍有重要的参考价值。

DES加密算法的结构流程如图2-7所示。

图2-7 DES加密算法结构流程图

DES首先利用初始置换对明文进行换位处理,然后进行16轮迭代运算,每轮都由加密的两个基本技术——混淆和扩散组合而成,最后通过初始置换的逆置换获得密文。

(1)DES加密过程。

x=(x1,x2,…,x64)是一组待加密的明文块,其中xi {0,1},1≤i≤64。密钥k=(k 1, k 2, …, k 64),其中ki {0, 1},1≤i≤64。初始置换用于对明文x中的各位进行换位,目的在于打乱明文x中各位的次序。经过初始置换后,x变为x=x′1x′2x′64

DES中与密钥k有关的16轮迭代可以形式化地表示为:

其中,LiRi的长度都是32位,L 0=x′1x′2x′32, R0=x′33x′34x′64, f是一个轮函数(包括扩展置换、子密钥异或、S盒代换和P盒置换), Ki是由密钥k产生的一个48位的子密钥。

(2)DES解密过程。

DES算法是对称的,既可用于加密,又可用于解密。只不过在16次迭代中使用的子密钥的次序正好相反。解密时,第一次迭代使用子密钥K16,以此类推。解密过程的16次迭代可以形式化表示为:

(3)DES的安全性。

在DES中,初始置换和逆初始置换各使用一次,使用这两个置换的目的是把数据彻底打乱重新排列,它们对数据加密所起的作用不大。

在DES算法加密过程中,除了S盒是非线性变换外,其余变换均为线性变换。因此,S盒是DES算法安全的关键。任意改变S盒输入中的一位,其输出至少有两位发生变化。由于在DES中使用了16次迭代,所以即使改变明文或密钥中的1位,密文中都会大约有32位发生变化。

由于DES算法是公开的,因此其安全性完全依赖于所用的密钥。在算法使用过程中,每次迭代时都有一个子密钥供加密使用。子密钥的产生也很有特色,它确保密钥中各位的使用次数基本相等。实验表明,56位密钥中每位的使用次数在12次至15次之间。在实际使用中,需要注意的是DES算法存在一些弱密钥。所谓弱密钥,是指一个密钥产生的所有子密钥都是相同的,此时对消息加密两次就可以恢复出明文。虽然DES算法有弱密钥现象,但是弱密钥所占比例很小,可以在选取密钥时避开使用,因此对其安全性影响不大。

随着密码分析技术和计算能力的提高,DES的安全性受到质疑和威胁。密钥长度较短是DES的一个主要缺陷。DES的实际密钥长度为56位,密钥量仅为256≈1017,就目前计算设备的计算能力而言,DES不能抵抗对密钥的穷举搜索攻击。1998年7月,电子边境基金会(EFF)使用一台价值25万美元的计算机在56小时内成功地破译了DES。在1999年1月,电子边境基金会(EFF)仅用22小时15分就成功地破译了DES。

DES的密钥长度被证明不能满足安全需求,为了提高DES的安全性能,并充分利用有关DES的软件和硬件资源,人们提出一种简单的改进方案——使用多重DES。多重DES就是使用多个密钥利用DES对明文进行多次加密。如3DES可将密钥长度增加到112位或者168位,可以提高抵抗对密钥穷举搜索攻击的能力。除密钥长度因素外,DES加密算法还有一些其他缺陷,如在软件环境下实现效率较低。因此,美国实施高级加密标准AES算法用于取代DES算法。

2.高级加密标准AES

高级加密标准(advanced encryption standard, AES)是传统对称加密标准DES的替代。在AES标准规范中,分组长度是128位,也就是说,每个分组为16个字节(每个字节8位)。密钥的长度可以使用128位、192位或256位。密钥的长度不同,推荐加密轮数也不同,相应的推荐加密轮数分别是10、12、14轮。

AES的处理单位是字节,以AES-128为例,128位的输入明文分组P和输入密钥K都被分成16个字节。一般地,明文分组用字节为单位的正方形矩阵描述,称为状态矩阵。在算法的每一轮中,状态矩阵的内容不断发生变化,最后的结果作为密文输出。

在加密过程中,该算法会执行一个轮函数,并且执行10次这个轮函数。轮函数由4个变换组成:字节代换(S盒)、行移位、列混合和密钥加。这个轮函数的前9次执行的操作是一样的,只有第10次有所不同。这些运算都是要在相应的子密钥控制下完成的,需要将密钥进行扩展,产生每一轮的子密钥,共需要44个字的密钥。

AES的解密要使用加密变换相应的逆变换,逆变换使用的顺序也不一样,分别为:逆行移位、逆字节代换、轮密钥加和逆列混合。

在整体结构上,AES算法的轮函数与DES算法相似,都由三层构成,非线性层、线性混合层、子密钥异或,只是顺序不同。AES算法与DES算法的主要不同在于,AES的密钥长度是可变的,而DES的密钥长度固定为56位;DES是面向比特的运算,AES是面向字节的运算;AES的加密运算和解密运算不一致,因而加密器不能同时用作解密器,DES则无此限制。

在安全性方面,与DES相比,扩散的效果更快,即两轮可达到完全扩散。S盒使用清晰而简单的代数方法构造,避免任何对算法留有后门的怀疑。AES在设计上不是对称的,其加密和解密过程不一致,避免了弱密钥的存在。由于在设计时考虑了差分分析和线性分析的攻击方法,因此AES具有较好的抗击其攻击的能力。采用密钥穷举攻击,平均需要2127次AES运算,按目前的计算能力是不可能完成的。

比特币官方客户端就是使用AES算法中的AES-256-CBC来加密钱包文件,用户设置密码后,采用用户设置的密码通过AES算法对钱包私钥进行加密,确保客户端私钥的安全,从而保证资产的安全。