0%

基本概念

混淆

混淆(Confusion)就是改变数据块,使输出位与输入位之间没有明显的统计关系。通过混淆,即使攻击者知道一些明文和密文对,也难以推断出密钥或其他关键信息。(代替、XOR)

扩散

扩散(Diffusion)就是确保明文中的每个位影响到尽可能多的密文位,以便在明文的微小改变时产生大范围的密文变化。(置换、移位)

代替(代换)

代替(Substitution)是指将明文字母替换成其它字母、数字或符号的方法。代替常用于将明文中的值映射到密文中的值,以实现混淆。代替操作可以是字节级的,也可以是位级的,通常会使用S盒(Substitution Box)来实现非线性的代替操作。

  • 输入数据与输出数据:
    • 未必一样长(压缩,等长,扩展)
    • 未必一一对应(一对一,多对一)
  • 混淆:不同的输入,导致相同的(或者部分相同的)输出
  • 扩散:输入数据中的1bit变化,将导致输出数据中的多bit变化
  • 操作:算术/逻辑运算,非线性映射
  • 由于计算机字长和计算能力的限制,代替所处理的数据宽度很有限,所以在处理长明文块时,需要多个代替模块,且各代替模块之间没有关联

置换(换位)

置换(Permutation)保持明文的所有字母不变,只是打乱明文字母的位置和次序。置换用于实现扩散,以确保每个输入位的改变都会影响到尽可能多的输出位。置换可以是固定的,也可以是基于密钥的动态置换。

  • 交错各个子代替,使混淆和扩散效果在更大的范围内实施
  • 代替和置换使数据变得混杂,难以反向推测
  • 通过对包含密钥的数据进行代替和置换,可以获得混杂的数据,可以当做密钥流,加密明文数据

一次一密

“一次一密”(One-Time Pad,简称OTP)是一种特殊的加密技术,也被称为“绝对安全加密”或“信息论加密”。它是一种理论上具有完美保密性的加密方法,前提是一些关键条件得到满足,如:(a)密钥必须足够长,以保证一次性使用;(b)密钥必须真正随机且安全地分发给通信双方。这种方法的基本思想是使用与明文长度相等的随机密钥来进行加密,每个密钥值只使用一次。

Feistel网络结构

  • 一次加密

  • 多次加密

密码攻击的主要方法

穷举攻击

穷举攻击(Brute Force Attack)是指攻击者采用依次试遍所有可能的密钥对所获得的密文进行解密,直至得到正确的明文;或者依次选用一个确定的密钥对所有可能的明文进行加密,直至得到所获得的密文,从而得知所选密钥就是正确的密钥。

穷举攻击所花费的时间等于尝试次数乘以一次解密(加密)所需的时间。显然可以通过增大密钥量或加大解密(加密)算法的复杂性来对抗穷举攻击。当密钥量增大时,尝试的次数必然增大。当解密(加密)算法的复杂性增大时,完成一次解密(加密)所需的时间增大。从而使穷举攻击在实际上不能成功。

差分攻击

差分攻击(Differential Cryptanalysis)是一种基于观察明文对及其对应密文对之间差异的攻击方法。攻击者通过观察不同明文对之间的差异,分析这些差异在加密算法的各个步骤中如何传播,以及如何与密钥相关联。通过统计不同差异的出现频率,攻击者可以推测出密钥的一部分或全部,从而降低加密算法的安全性。差分攻击通常需要大量的明文对来进行分析,因此它适用于已经有大量加密和解密数据的情况。

线性攻击

线性攻击(Linear Cryptanalysis)是一种基于线性逼近的攻击方法,它尝试找到一些线性关系,这些关系在明文和密文之间以及密钥的某些位之间成立。攻击者通过观察线性关系的统计分布情况,逐渐推测出密钥的部分或全部。与差分攻击类似,线性攻击也需要大量的明文对来构建线性逼近,这两种攻击方法都属于已知明文攻击。

数学攻击

所谓数学攻击是指密码分析者针对加解密算法的数学基础和某些密码学特性,通过数学求解的方法来破译密码。对于基于数学的密码来说,设计一个密码本质上就是设计一个数学函数、而破译一个密码本质上就是求解一个数学难题。如果这个难题是理论上不可计算的,则这个密码就是理论上安全的。如果这个难题虽然是理论上可计算的,但是由于计算复杂性太大而实际上不可计算,则这个密码就是实际安全的,或计算上安全的。

到目前为止,在基于数学的密码中,只有“一次一密”密码是理论上安全的密码,其余的密码都只能是计算上安全的密码。

物理攻击

所谓物理攻击是指密码分析者根据密码系统或密码芯片的物理特性,通过物理和数学的分析来破译密码。物理攻击的理论依据是,任何密码算法在以硬件的形式工作时,必然与其工作环境发生物理交互,相互作用,相互影响。于是,攻击者就可以主动策划实施并检测这种交互、作用和影响,从而获得有助于密码分析的信息。这类信息被称为侧信道信息 SCI(Side Channel Information)。基于侧信道信息的密码攻击被称为侧信道攻击或侧信道分析 SCA ( Side Chanel Altack/ Analysis)。

密码攻击的类型

仅知密文攻击

仅知密文攻击(Ciphertext-only attack),仅根据截获的密文来破译密码,这是对攻击者最不利的情况。

已知明文攻击

已知明文攻击(Known-plaintext attack),攻击者根据已经知道的某些明文-密文对来破译密码。例如,加密成密文的数据库文件中,对于特定类型的数据库文件的字段及其取值往往具有规律性,攻击者可以合理的猜测它们,如学生成绩数据库文件中一定会包含姓名、学号、成绩等字段,且成绩的取值范围为0~100。近代密码学认为,一个密码仅当其能经得起已知明文攻击时才是可取的。

选择明文攻击

选择明文攻击(Chosen-plaintext attack),攻击者能够选择明文并获得相应的密文,这是对攻击者十分有利的情况。如果攻击者能够选择明文并获得密文,那么他将会特意选择那些最有可能恢复出密钥的明文。

选择密文攻击

选择密文攻击(Chosen-ciphertext attack),攻击者能够选择密文并获得相应的明文,这也是对攻击者十分有利的情况。这种攻击主要用来攻击公开密钥密码体制,特别是攻击其数字签名。