网络安全笔记2——单钥密码体制
文章目录
- 网络安全笔记2——单钥密码体制
- 古典密码
-
- 流密码
- 分组密码
-
- 概念
- Shannon的密码设计思想
- 数据加密标准(DES)
-
- 运算步骤
- 注意事项
- DES算法详细图解
- S盒和P盒
- DES的安全性
- 高级加密标准(AES)
-
- 算法简介
- AES加密算法详解(图文解释)
- AES对应用密码学的积极影响
- SM4密码算法
-
- 分组密码的工作模式分类
-
- 电码本模式(ECB)
- 密码分组链接模式(CBC)
- 密码反馈模式(CFB)
- 输出反馈模式(OFB)
- 计数器模式(CTR)
- 分组密码总结
密码体制的语法定义
- 明文消息空间M:可能的明文字母串集合
- 密文消息空间C:可能的密文字母串集合
- 加密密钥空间K:可能的加密密钥集合
- 解密密钥空间K’:可能的解密密钥集合
- 有效的密钥生成算法ζ:N → K × K’
- 加密算法E:M × K → C
- 解密算法D:C × K’ → M
- 密钥生成算法:∀整数1l,ζ(1l)输出长为l的密钥对:(ke,kd) ∈ K × K’
- 加密/解密过程:∀m ∈ M,c ∈ C
c = Eke(m)
m = Dkd(c) = Dkd(Eke(m))
密钥体制的分类
- 若ke=kd,则加密算法称为单钥加密体制(对称加密体制或私钥加密体制)
- 若ke≠kd,则加密算法称为双钥加密体制(非对称加密体制或公钥加密体制)
单钥密码按照加解密运算的特点分类
- 流密码(Stream Cipher):数据逐比特加密,即数据流与密钥流逐比特进行异或(XOR)运算;
- 分组密码(Block Cipher):对数据分组进行处理。
古典密码
古典密码学有两大基本方法
- 置换密码:明文字母保持不变,但顺序被打乱。
- 代换密码:明文字母被替换,但顺序保持不变。
代换密码主要包括:单表代换(一个明文字母对应的密文字母是确定的);多表代换(一个明文字母可以表示为多个密文字母);弗纳姆密码:将每消息比特和相应的密钥比特进行比特异或运算
代换密码
单表代换
凯撒密码(单表代换)
维吉尼亚密码(多表代换)
- 引入密钥的概念:根据密钥来决定用哪一行的密表来进行代换。
- 使用词组作为密钥:词组中每一个字母都作为索引来确定采用某个代换表,加密时需要循环使用代换表完成明文字母到密文字母的代换,最后所得到的密文字母序列即为密文。
弗纳姆密码(代换密码)
弗纳姆密码(Vernam Cipher)的基本原理是:将明文与密钥进行模2加法运算。如果M=C=K={0,1}*,则弗纳姆密码就是代换密码的特例;如果密钥串只使用一次,那么弗纳姆密码就是一次一密密码。
弗纳姆密码也可以看成序列密码(流密码)的雏形。
置换密码
置换密码又称换位密码,是通过重新排列明文中元素的位置而不改变元素本身来实现加密的体制,它广泛应用于现代分组密码的构造。
置换就是简单的换位,每次置换都可以用一个置换矩阵来表示,且都有一个与之对应的逆置换矩阵。
流密码
原理
- 明文m=m1,m2,… …ml
- 伪随机序列k=k1,k2,… …kl
- 密文ci = Eki(mi)
- 解密过程与加密过程相同且互逆
- 流密码的安全性完全依赖于伪随机数的强度
有限状态自动机
- 若密钥流是一个完全随机的非周期序列,则我们可以用它来实现一次一密体制。
- 但实用中的流密码大多采用有限存储单元和确定性算法,可用有限状态自动机(Finite State Automation)来描述。
- 因此,由有限状态机产生的序列是伪随机序列。
流密码的分类
同步流密码
自同步流密码
祖冲之密码
2011年,我国商用密码算法——祖冲之密码算法(ZUC)被批准成为新一代宽带无线移动通信系统(LTE)国际标准,即4G的国际标准
我国向3GPP提交的算法标准包含如下内容:
- 祖冲之密码算法(ZUC):用于产生密钥序列
- 128-EEA3:基于ZUC的机密性算法
- 123-EIA3:基于ZUC的完整性保护算法
分组密码
概念
分组密码(Block Cipher)是将明文消息编码表示后的数字序列x1,x2,…,xi,划分成长为m的组x = (x0,x1,…,xm-1),各组(长为m的矢量)分别在密钥k = (k0,k1,…,kt-1)控制下变换成输出长度为n的数字序列y = (y0,y1,…,yn-1)(长为n的矢量),其加密函数E:Vm × K → Vn,Vm和Vn是m、n维矢量空间,K为密钥空间。
设计要求
- 分组长度足够大(≥128~256比特,都是64的倍数,计算机总线长度为64位,便于计算)
- 密钥量要足够大(≥128~192~256比特)
- 算法足够复杂(包括子密钥产生算法)
- 加密、解密算法简单,易软、硬件实现
- 数据无扩展(只在引入同态置换和随机化加密时仍有扩展)
- 差错传播尽可能得小
Shannon的密码设计思想
- 扩散(diffusion)
将每位明文及密钥数字的影响尽可能迅速地散布到较多个输出的密文数字中,以便隐蔽明文数字的统计特性。产生扩散的最简单方法是通过“置换(Permutation)”(比如:重新排列字符)
- 混淆(confusion)
其目的在于使作用于明文的密钥和密文之间的关系复杂化,使明文和密文之间,密文和密钥之间的统计相关特性极小化,从而使统计分析攻击不能奏效。通常的方法是“代换(Substitution)”
数据加密标准(DES)
DES:Data Encryption Standard
DES数据加密标准是美国于1977年在全球范围内公开的第一个现代单钥加密算法,DES是一种分组密码,其输入的明文长度为64bit,密钥长度为56bit,输出的密文长度为64bit。
运算步骤
- 对输入分组进行固定的“初始置换”IP,可以将这个初始置换写为(L0,R0) ← IP(Input Block),注意:这里L0和R0称为左、右半分组,各为32比特。IP是固定的、公开的函数。
- 迭代运算,即将下面的运算迭代16轮:Li ← Ri-1;Ri ← Li-1 ⊕ f(Ri-1,ki)
- 将16轮迭代后得到的结果(L16,R16)输入到IP的逆置换IP-1中:Output Block ← IP-1(R16,L16)
注意事项
- DES算法的加密和解密均采用上述3个步骤。
- 初始置换过程实际上为香农信息论中的“扩散(Diffusion)”;迭代运算过程就是香农信息论中的“混淆(Confusion)”。
- 如果加密时使用的轮密钥次序为k1,k2,…,k16,那么解密时使用的轮密钥次序为k16,k15,…,k1。
- DES采用Feistel网络结构。Feistel密码结构是一种对称结构,满足对合性。采用此结构的密码,其好处是加解密可以使用同一个芯片。
DES算法详细图解
S盒和P盒
- S盒的作用是混淆(Confusion),主要增加明文和密文之间的复杂度(包括非线性度等)。DES的安全性直接取决于S盒的安全性。
- P盒的作用是扩散(Diffusion),目的是让明文和密钥的影响迅速扩散到整个密文中。即一位的明文或密钥的改变会影响到密文的多个比特。
- S盒和P盒的作用体现了Shannon的扩散和混淆的密码设计思想。
DES的安全性
1997年1月28日,美国RSA公司悬赏10000美元破译DES。美国程序员RockeVerser用140天破译成功。从此宣布了DES时代的终结。
2008年SciEngines公司的Rivyera将破解DES的时间缩减到1天以内,并一直保持着暴力破解DES的记录。
于是,有人提出了TripleDES算法。
DES、TripleDES算法(3DES)已经不再使用,需要提出新的、更安全的数据加密标准。
高级加密标准(AES)
AES: Advanced Encryption Standard
AES是美国联邦政府采用的一种用来替代DES的加密标准,其于2001年发布并在2002年成为有效的加密标准,已经被多方分析且广为使用。
Rijndael是分组长度和密钥长度均可变的分组密码,其密钥长度和分组长度可以独立指定为128/192/256bit(都是64的倍数)。
AES的密钥长度为128/192/256bit, 但分组长度固定为128bit。
算法简介
AES加密算法详解(图文解释)
AES对应用密码学的积极影响
- AES具有加长可变的密钥128/192/256b及数据分组长度128b,为各种应用要求提供了大范围可选的安全强度。
- 128/192/256b密钥对应的加密轮数为10/12/14。
- 避免了多重加密(例如3DES)的使用,减少了实际应用中的密钥数量,可以简化安全协议和系统的设计。
- AES的广泛使用将导致同样强度的新型杂凑函数的出现。
SM4密码算法
2006年,我国国家密码管理局公布了无线局域网产品使用的SM4 (原名SMS4)密码算法,这是我国第一次公布自己的商用密码算法,旨在加密与保护静态储存和传输信道中的数据。
特点
- 分组密码算法,分组长度和密钥长度128bit, 32轮迭代
- 以字节为单位对数据进行处理
- 解密算法与加密算法结构相同,轮密钥的使用顺序相反
基本运算
- 模2加和循环移位计算
32bit异或计算(⊕)和32bit循环左移(<<<)
- 置换运算: S盒(Sbox)
8bit输入、8bit输出的置换运算,起混淆作用
- 非线性变换τ
以字为单位的非线性变换,由4个并行的S盒构成
- 线性变换L
以字为单位的线性变换,起扩散作用
- 合成变换T
由τ和L复合而成,起扩散和混淆作用
- 轮函数F
非线性迭代结构,以字为单位进行加密运算
加密算法
解密算法
SM4的安全性
SM4广泛应用于无线局域网产品。从算法设计上看,SM4在计算过程中增加了非线性变换,理论上能大大加强算法的安全性。
近年来,国内外密码学者对SM4进行了充分的分析与实验,致力于SM4的低复杂度实现、混合加密技术的商用化、SM4抗攻击能力的增强等方面,这些研究成果对改进SM4密码和设计新密码都是有帮助的。
至今, 我国国家密码管理局仍然支持使用SM4密码
分组密码的工作模式分类
参考:分组密码的模式——ECB、CBC、CFB、OFB、CTR
分组密码算法只能加密固定长度的分组,但需要加密的明文长度可能会超过分组密码的分组长度,这就需要对分组密码算法进行迭代,以便将一段很长的明文全部加密。迭代的方法就被称为分组密码的工作模式。
分组密码的模式主要有以下5种:
- 电码本模式(ECB:Electronic CodeBook mode)
- 密码分组链接模式(CBC:Cipher Block Chaining mode)
- 密码反馈模式(CFB:Cipher FeedBack mode)
- 输出反馈模式(OFB:Output FeedBack mode)
- 计数器模式(CTR:CounTeR mode)
电码本模式(ECB)
对连续排列的消息进行加密(或解密)的最直接方式就是对它们逐段加密(或解密)。在这种情况下,消息分段恰好是消息分组。由于这种模式类似于在电报密码本中查找指定的码字,因此称为电码本模式(ECB, Electric Code Book)
- ECB加密: Ci ← E(Pi),i=1,2,…,m
- ECB解密: Pi ← D(Ci),i=1,2,…,m
注意: ECB模式是确定性的加密模式,也就是说,如果在相同的密钥作用下,将P1,P2,…Pm加密2次,那么输出的密文分组也是相同的。如果明文消息是可猜测的,那么攻击者就会用试凑法猜测出明文。
因此, 在大多数应用中, 建议不要使用ECB模式。
- 加密
- 解密
密码分组链接模式(CBC)
密码分组链接(CBC, Cipher Block Chaining)运行模式是分组密码算法。使用CBC模式,输出是密码分组的一个序列,这些密码分组链接在一起使得每个密码分组不仅依赖于所对应的原文分组,而且依赖于所有以前的数据分组。
- 加密
- 解密
初始化向量
当加密第一个明文分组时,由于不存在“前一个密文分组”,因此需要事先准备一个长度为一个分组的比特序列来代替“前一个密文分组”,这个比特序列称为初始化向量,通常缩写为IV。
- 一般来说,每次加密时都会随机产生一个不同的比特序列来作为初始化向量。
- 由于IV的随机性,密文分组Ci都将被随机化,因此CBC的密文输出是随机化的。
- 发送给接收者的密文消息应该包括IV。因此对于m个明文分组,CBC将输出m+1个密文分组。
分组损坏和比特缺失的影响
- 假设CBC模式加密的密文分组中有一个分组损坏了,例如由于硬盘故障导致密文分组的值发生了改变等,这种情况下,只要密文分组的长度没有发生变化,则解密时最多只会有2个分组收到数据损坏的影响。
- 假设CBC模式加密的密文分组中有一些比特缺失了,例如由于通信错误导致没有收到某些比特等,那么此时即使缺失1比特,也会导致密文分组的长度发生变化,此后的分组发生错位,这样一来,缺失比特的位置之后的密文分组也就全部无法解密。
密码反馈模式(CFB)
密码反馈模式(CFB,Cipher Feedback Mode)的特点是:将CFB模式输出的密码分组反馈至移位寄存器,作为分组密码算法的输入,经分组加密算法加密后形成密钥流分组,再与输入明文分组相异或。
- 加密
- 解密
输出反馈模式(OFB)
输出反馈模式(OFB,Output Feedback Mode)的特点是:将分组密码的输出分组反馈回去,这些反馈分组经分组加密后输出一个密钥流分组,再将密钥流分组与明文分组相异或。
- 加密
- 解密
OFB模式和CFB模式的区别仅仅在于密码算法的输入。
CFB模式中,密码算法的输入是前一个密文分组,也就是将密文分组反馈到密码算法中,因此被称为“密文反馈模式”;
OFB模式中,密码算法的输入是密码算法的前一个输出,也就是将输出反馈给密码算法,因此被称为“输出反馈模式”。
计数器模式(CTR)
计数器模式(CTR, Counter) 的特征是:将计数器从初始值开始计数,所得到的值馈送给分组密码算法。随着计数的增加,分组密码算法输出连续的密钥流分组,再将密钥流与明文分组相异或。
- 加密
- 解密
计数器的生成方法,前8个字节为nonce,这个值在每次加密时必须时不同的。后8个字节为分组序号,这个部分逐次累加。
OFB模式与CTR模式的对比
- 两者都是流密码。
- OFB模式是将加密的输出反馈到输入,CTR模式是将计数器的值用作输入。
分组密码总结
分组密码算法 |
分组长度 |
密钥长度 |
加密轮数 |
安全性 |
DES |
64 bits |
56 bits |
16 |
密钥太短且分组长度不适应64-bits总线 |
AES |
128 bits |
128/192/256 bits |
10/12/14 |
安全 |
SM4 |
128 bits |
128 bits |
32 |
安全 |