现在密码学基础-分组密码

初识现代密码体制

现代共享密钥密码体制的加解密算法是公开的,只要密钥不泄露就行了。它有两个目标:

  • 扩散:打乱明文,使得明文和密文之间的统计关系尽量复杂,即从密文不能获得明文的统计特性
  • 混乱:打乱明文,使得从密文中不能获得密钥的任何统计特性

分组密码

      分组密码(block cipher)是现代密码学中的重要体制之一,也是应用最广泛、影响最大的一种密码体制。其主要任务是提供数据保密性,也可以用在伪随机数生成器、序列密码、认证码和哈希函数的构造中。
      分组密码又称为对称密码,具有加解密速度快、安全性好的特点。得到了许多密码芯片的支持,在许多研究和应用领域中得到了广泛的应用
      分组密码的原理是将明文消息经过编码表示后的二进制序列 P 1 , P 2 . . . P i P_1,P_2...P_i P1,P2...Pi划分为若干个固定长度(长为m)的组 p = ( p 0 , p 1 , . . . , p m − 1 ) p=(p_0,p_1,...,p_{m-1}) p=(p0,p1,...,pm1),各组分别在密钥 k = ( k 0 , k 1 , . . . , k t − 1 ) k=(k_0,k_1,...,k_{t-1}) k=(k0,k1,...,kt1)的控制下转换成长度为n的密文分组 c = ( c 0 , c 1 , . . . c n − 1 ) c=(c_0,c_1,...c_{n-1}) c=(c0,c1,...cn1)。其本质是一个从明文空间(m长的比特串的集合)P到密文空间(n长的比特串的集合) C C C的一一映射
现在密码学基础-分组密码_第1张图片

分组密码的要求

1、分组长度要足够打
      当分组长度较小时,攻击者可以通过穷尽明文空间,得到密码变换的规律,难以抵挡选择明文攻击
2、密钥量要足够大
      密钥量小,攻击者可以有效通过穷尽密钥,对密文进行解密,以得到有意义的明文,难以抵御唯密文攻击
3、密码变换要足够复杂
      使攻击者除了穷尽攻击以外,找不到其他有效的数学破译方法
4、加密和解密运算要简单
      便于软件和硬件实现,性能好
5、无数据扩展或压缩


分组密码的设计思想

  • 扩散

      扩散,是指要将算法设计成明文每一个比特的变化尽可能地影响到输出密文序列地变化,以便隐蔽明文地统计特性,形象地称为雪崩效应。
扩散的另一个意思是密钥每一位的影响尽可能迅速地扩展到较多的密文比特中去。即扩散的目的是希望密文中的任一比特都要尽可能与明文、密钥相关联,或者说明文和密钥中任何一比特值发送改变,都会在某种程度上影响到密文值得变化,以防止将密钥分解成若干个孤立得小部分,然后被各个击破

扩散技术差的举例
00000000 -->  00000001
00000001 -->  00000011

扩散技术好的举例
00000000 -->  01001101
00000001 -->  10110111
  • 混乱

      混乱,指在加解密变换过程中明文、密钥以及密文之间的关系尽可能地复杂化,以防密码破译者采用解析法(即通过建立并求解一些方程)进行破译攻击
      混乱可以用“搅拌机”来形象地解释,将一组明文和一组密钥输入到算法中,经过充分混合,最后变成密文。同时要求,执行这种“混乱”作业地每一步都必须是可逆的,即明文混乱以后能得到密文,反之,密文经过逆向的混乱操作后能恢复出明文(按照混乱原则,分组密码算法应有复杂的非线性因素)
现在密码学基础-分组密码_第2张图片

  • 乘积密码

      乘积密码就是扩散和混乱两种基本密码操作的组合变换,这样能够产生比各自单独使用时更强大的密码系统。选择某个较为简单的密码变换(包含多个基本密码),在密钥控制下以迭代方式多次利用它进行加密变换,就可以达到预期的扩散和混乱效果。乘积密码有助于利用少量的软硬件资源实现较好的扩散和混乱效果,再通过迭代方法,达到预期设计效果,这种思想在现代密码设计中使用非常广泛

分组密码中的迭代结构

  • Feistel网络

      用简单算法的乘积来近似表达复杂的替代变换
优点
      加解密相似,只需要一个逆转的密钥编排算法,加解密算法部分完全一致
      轮函数不必可逆(轮函数是分组密码中单轮加解密函数)

Feistel网络结构介绍(F表示轮函数,ki表示每一轮的子密钥)
加密过程(i 代表轮数)
将明文分割成左右两半:( L 0 , R 0 L_0, R_0 L0,R0)
L i + 1 = R i L_{i+1} = R_i Li+1=Ri
R i + 1 = L i ⊕ F ( R i , K i ) R_{i+1} = L_i ⊕ F(R_i,K_i) Ri+1=LiF(Ri,Ki)

解密过程(i = n, n-1, … , 0)
R i = L i + 1 R_i = L_{i+1} Ri=Li+1
L i = R i + 1 ⊕ F ( L i + 1 , K i ) L_i = R_{i+1} ⊕ F(L_{i+1},K_i) Li=Ri+1F(Li+1,Ki)
( L 0 , R 0 L_0, R_0 L0,R0)为解密后的明文

Feistel 网络结构的雪崩效应如下图
现在密码学基础-分组密码_第3张图片

  • SP网络

      SP网络是由多重S变换和P变换组合成的变换网络,它是乘积密码的一种,其基本操作时S变换(代换)和P变换(置换),前者称为S盒,后者称为P盒。S盒起到混乱作用,P盒起到扩散的作用,SP网络的构造及S盒、P盒的构造如下图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pMuyoqdv-1650801527730)(./images/10/10-4.png)]

      SP网络也具有雪崩效应,雪崩效应指输入明文或密钥即使只有很小的变化,也会导致输出(密文)产生巨大的变化现象。
现在密码学基础-分组密码_第4张图片

分组密码的特点

  • 分组长度
          需要抵抗选择明文攻击
  • 密钥长度
          需要可以抵抗唯密文攻击
  • 子密钥
          子密钥的生成时迭代分组算法的一个重要组成部分,是从初始密钥产生各轮迭代要使用的子密钥的算法。轮函数的功能是在子密钥的参与和控制下实现的,所以子密钥的生成是非常重要的,其评价指标有:① 实现简单 ②初始密钥的所有比特对每个子密钥比特的影响应该大致相同 ③没有弱密钥或者弱密钥容易确实
  • 轮函数
          轮函数是分组密码的核心,是分组密码中单轮加解密函数,其基本要求有:①非线性 ② 可逆(实现解密) ③ 具有雪崩效应
  • 迭代
    bsp;   轮函数是分组密码的核心,是分组密码中单轮加解密函数,其基本要求有:①非线性 ② 可逆(实现解密) ③ 具有雪崩效应
  • 迭代
          分组密码一般采用简单的,安全性弱的密码函数进行多轮迭代运算,使其安全性增强。一般来说,分组密码迭代轮数越多,密码分析越困难,但也不能盲目增多迭代轮数,轮数太多会使得加解密算法都性能下降,而实现得安全性增强得不明显。决定迭代轮数得准则:密码算法分析得难度大于穷举搜索攻击的难度。分组密码迭代轮数一般采用8、10、12、16、20居多

你可能感兴趣的:(密码学,网络安全)