现代密码学:分组密码-期末复习大纲

本文详细介绍了分组密码的工作原理,包括代换、置换、Feistel结构、AES和SM4算法等,强调了安全性要素如密钥长度、分组大小、轮数和复杂性。同时讨论了不同加密模式如ECB、CBC、CFB、OFB和它们的应用场景。
摘要由CSDN通过智能技术生成
  1. ​分组密码概述

    1. 加密:Vn*K→Vm,输出的每一位密文不仅与相应的明文有关,还和一组长为n的明文有关。通常,n=m。

    2. 要求
      1. 分组长度n要足够大
        1. 防止明文穷举攻击法奏效

      2. 密钥量要足够大
        1. 置换子集中的元素足够多

        2. 尽可能消除弱密钥

        3. 防止密钥穷举攻击奏效

      3. 密钥不能过长
        1. 方便密钥管理

      4. 由密钥确定置换的算法足够复杂
        1. 充分实现明文和密文的扩散和混淆

        2. 抗击各种已知的攻击

        3. 使对手除了穷举法外,无其他捷径可循

      5. 加密解密运算简单
        1. 易于软件和硬件高速实现

        2. 加密和解密在同一器件实现

        3. 设计的算法采用规则的模块结构

        4. 差错传播,数据扩展尽可能小

  2. 代换和置换

    1. 代换
      1. n位明文密文有2的n次方个取值。

      2. 明文的每一个分组产生唯一对应的密文分组,且变化可逆。

      3. 不同的可逆代换个数有2^{n}!个。

      4. 使用代换表来定义明文和密文之间任何可逆映射

      5. 问题
        1. 如果分组长度太小,容易因统计分析而被攻破

      6. 解决
        1. 如果n足够大,那么明文的统计特性将被隐藏。

    2. n比特的代换结构,密钥的大小是n*2^{n} 比特。

      1. 实际中将n分成小段,设计较小的子代换(S盒)

    3. 置换
      1. 进行数据位置的交换。

  3. 扩散和混淆

    1. 实现了分组密码的本质属性

    2. 目的
      1. 抗击敌手的统计分析,以使敌手无法得到密钥。

    3. 扩散
      1. 将明文的统计特性散布到密文

      2. 使明文和密文之间的统计关系变得复杂

      3. 实现方式是让密文的每一位由多位明文产生

      4. 实现:重复执行某个置换,再对置换作用以一个函数

    4. 混淆
      1. 使密文和密钥之间的统计关系变得复杂

      2. 使用复杂的代换算法可得预期的混淆效果

    5. 理想密码:密文的统计特性与使用的密钥独立

  4. Feistel密码结构

    1. 利用乘积密码得到简单的代换密码。

      1. 乘积密码:顺序地执行多个基本密码系统,使得最后的密码强度高于基本密码系统的结果

    2. Feistel加密结构
      1. 输入长度为2ω的明文和一个密钥K。

      2. 进行相同结构的n轮迭代(代换)后,左右两半再合并到一起(置换)

      3. 代换过程
        1. Li=Ri-1

        2. Ri=Li-1⊕F(Ri-1,Ki)

      4. 置换过程
        1. 交换左右两半数据

    3. 参数和特性
      1. 分组大小
        1. 分组越大,安全性越高,加密速度越慢(常见64bit)

      2. 密钥大小
        1. 密钥越长,安全性越高,加密速度越慢(通常128bit)

      3. 轮数
        1. 多轮结构可提供足够多安全性(典型16轮)

      4. 子密钥产生算法
        1. 复杂度越高,分析难度越大

      5. 轮函数
        1. 复杂性越高,分析难度越大

    4. 考虑的问题
      1. 快速的软件实现
        1. 大多数算法被嵌套在应用程序中

      2. 算法容易分析
        1. 为容易地分析算法抵抗攻击的能力

    5. Feistel解密结构
      1. 和加密采用同一算法

  5. DES

    1. 最广泛使用和流行的分组密码算法

    2. 构成
      1. 分组长度64比特
      2. 密钥长度56比特
      3. 初始置换IP
        1. 重排明文分组的64比特数据

        2. 第IP[i][j]个数放在第i行第j列的位置

      4. 相同功能的16轮变换(每轮均有代换和置换)
        1. 函数F(R,K)

          1. Ri-1通过扩展/置换(E表)得到48比特

          2. 输出与48比特的轮密钥Ki异或

          3. 通过8个代换/选择(S盒)得到32比特(输入6比特,输出4比特)

            1. 每个S盒给出了4个可逆代换

            2. 第一个和第六个比特选择4个代换中的一个

          4. 通过置换(P)得到32比特

        2. 输出与Li-1异或,得到Ri

        3. Li=Ri-1

      5. 轮末置换
        1. 16轮的输出被交换次序

      6. 逆初始置换IP-
    3. 密钥的产生
      1. 置换选择1
      2. 16次变换
        1. 将密钥分成两部分Ci和Di,分别进行左移位

          1. 通过置换选择2(每轮都相同),得到48位比特Ki,送入F函数

        2. 将Ci和Di传给下一轮

    4. 二重DES
      1. 中途相遇攻击
        1. 可以攻击任何分组密码

        2. 如果有C=Ek2[Ek1[P]],则X=Ek1[P]=Dk2[C],穷举k1,k2,找到相等项

      2. 产生的映射不会等价于单DES加密。

      3. 使用的密钥长度为112比特

      4. P=Dk1[Dk2[C]]

      5. C=Ek2[Ek1[P]]

    5. 三重DES
      1. 三个密钥

        1. C=Ek3[Dk2[Ek1[P]]]

        2. 过于笨重

        3. 加密-解密-加密

      2. 两个密钥

        1. C=Ek1[Dk2[Ek1[P]]]

        2. 加密-解密-加密:EDE

  6. 差分密码分析

    1. 攻击迭代密码最有效的方法之一

    2. 通过分析明文对的差值对密文对的差值的影响来恢复某些密钥比特

    3. 详见P45

  7. 线性密码分析

    1. 对迭代密码的已知明文攻击

    2. 利用密码算法中的不平衡的线性逼近

    3. 详见P46

  8. 分组密码的运行模式

    1. 电码本模式ECB(分组密码)
      1. 加密
        1. 一次对一64比特的分组加密,每个分组独立地以同一密钥加密

      2. 作用
        1. 传送短数据

      3. 问题
        1. 同一明文分组对应同一密文分组

        2. 如果消息有固定的结构,密码分析者能找到这种关系

        3. 如果消息有重复的元素且重复的周期是64的倍数,则密码分析者能识别这些元素

    2. 密码分组链接模式CBC(分组密码)
      1. 重复的明文分组产生不同的密文分组

      2. 加密
        1. 加密算法的输入是明文组与上一个密文组的异或

        2. 在产生第一个密文分组时,使用一个初始向量IV

        3. IV应像密钥一样保护(可使用ECB来发送)

      3. 作用
        1. 对加密长于64比特的消息非常合适

        2. 能够用于传送数据分组,用于认证

    3. 密码反馈模式CFB(流密码)
      1. 不需要消息填充,且运行是实时的。

      2. 明文和密文一样长,否则造成浪费。

      3. 加密
        1. 每次只处理j比特

        2. 将加密算法的输出,反馈到移位寄存器,以产生伪随机输出

        3. 输出的最左j比特与明文异或

      4. 解密
        1. 解密时采用加密的加密算法。

      5. 作用
        1. 用于传送数据流,用于认证

    4. 输出反馈模式OFB(流密码)
      1. 与CFB类似,不过将密文单元,反馈到移位寄存器

      2. 传输过程中的比特错误不会被传播

      3. 作用
        1. 用于在有扰信道上传送数据流

      4. 问题
        1. 更易受到对消息流的篡改攻击

  9. AES算法

    1. 非Feistel结构

    2. 有限域GF(2的8次方)
      1. 将一个字节的每位,构成一个多项式,最高次为7次。

      2. 对于多项式加法,为多项式每个系数的比特异或。

      3. 对于多项式乘法,选择的8次不可约式系数为100011011(即11B)。

        1. 满足分配律、交换律,有单位元01

      4. x乘法

        1. 实际上是将系数左移一位,即乘以0x02,简称“x”。

        2. 如果最高次为8次,则减去一次8次不可约多项式。即求乘积结果与m(x)的异或

        3. 实际上,可以通过先左移一位系数,如果b7=1,则再与1B做异或实现。

        4. 记作b=xtime(a)。

          1. 在专用芯片中,xtime只需要4个异或

          2. x的幂乘运算可以重复用xtime实现

    3. 设计思想
      1. 抵抗所有已知的攻击

      2. 速度快,编码紧凑

      3. 设计简单

      4. 其轮函数由三个不同的可逆均匀变换组成:线性混合层,非线性层,密钥加层。

        1. 线性混合层:确保高度扩散

        2. 非线性层:将S盒并行使用

        3. 密钥加层:子密钥简单地异或到中间状态上,实施一次掩盖

        4. 均匀:每个比特用类似的方法处理

    4. 算法说明
      1. 迭代型分组密码,分组长度Nb和密钥长度Nk可变,可分别为16,24,32字节。

      2. 状态:算法的中间结果可表示为一个矩阵阵列(分组),矩阵为4行Nb列,一个元素代表一个字节。第n个元素,和元素坐标的关系为:n=i+4j(0≤n≤4Nb-1)。

      3. 种子密钥:矩阵为4行Nk列,一个元素代表一个字节。

      4. 若把分组当做一维数组,每个数组由一列组成,则数组长度可为4,6,8。

      5. 迭代轮数Nr,和Nb与Nk有关

    5. 初始轮
      1. 仅有一个密钥加过程。

      2. 目的:在不知道密钥的情况下,对最后一个密钥加后的任一层可简单地剥去

      3. 对安全性无意义

    6. 轮函数
      1. 字节代换
        1. 非线性变换,使用Nb个相同的可逆的S盒实现。

        2. 首先将字节映射到乘法逆元

        3. 对字节做GF(2)上的可逆放射变换

      2. 行移位
        1. 对状态阵列的各行进行循环移位。

        2. 为进一步扩散,本身没有扩散作用。

      3. 列混合
        1. 扩散作用。

        2. 每列与一个固定的多项式c(x)进行模x^{4}+1乘法

        3. c(x)为可逆多项式(与x^{4}+1互素),否则列混合不可逆

        4. 通过两轮迭代,能实现完全扩散。

      4. 密钥加
        1. 轮密钥简单地和状态进行异或

        2. 轮密钥长度等于分组长度Nb

    7. 结尾轮
      1. 没有列混淆过程。

    8. 密钥产生
      1. 种子密钥被扩展成扩展密钥
        1. 轮密钥依次取扩展密钥的前Nb个字,也即4*Nb个字节

        2. 扩展密钥是4字节字为元素的一维阵列,表示为W[Nb*(Nr+1)],前Nk个字取种子密钥

      2. 选取轮密钥
        1. 轮密钥i由轮密钥缓冲字W[Nb*i]到W[Nb*(i+1)-1]给出

        2. 末轮轮密钥起始为Nb*Nr

      3. 密钥扩展
        1. 扩展算法(P66)

          1. i/k为整数时,有和轮常数有关的特殊处理。

          2. k≤6时

          3. k>6时

    9. 结尾轮
      1. 没有列混淆过程。

    10. 解密算法
      1. 引理3.1

        1. 字节代换和行移位的逆变换,顺序不变

      2. 引理3.2

        1. 列混合和密钥加的逆变换,顺序不变

      3. 解密算法初始密钥加和结尾轮密钥分别是k(Nr),k(0),而中间轮的密钥为InMixColumn(k(Nr-i))

      4. 说明:如果把加密过程简称为ABCD则解密过程为D逆C逆B逆A逆。但是这样需要另一种计算网络,如何使用和加密相同的计算网络?实际分析ABCD的特征,发现解密过程可以调换为C'逆D'逆A'逆B'逆,但是这样依旧是从C过程开始,而非从A过程开始。那解密过程的CD/ABCD/ABCD/AB....CD/ABD,如果把第一轮的C去掉,把第一轮的D作为初始轮另外计算,则就成为了和加密过程一样的计算网络。其中最后一个D并非是这Nr轮存在的操作,而是加密过程的初始轮进行的D操作。(注意,第一个D,和最后一个D,未通过列混淆操作)实际上,加密过程为D/ABCD/ABCD/AB...ABCD/ABCD,把最后一轮的C去掉,把第一轮的D作为初始轮另外算,就和解密过程一致。那为什么要对一个C,和一个D进行单独处理?这是因为解密过程的首次操作中,C,D必然在A之前。我们需要首先进行A来保证过程的一致性。

  10. IDEA算法

    1. 明文和密文为64比特,密钥为128比特。

    2. 密码强度
      1. 有效的混淆和扩散特性
      2. 混淆使用三种运算获得(16比特输入输出)
        1. 比特异或

        2. 模65536整数加法,输入输出为无符号整数

          1. 为保证和乘法的分配律,结合律不成立

        3. 模65537整数乘法,全0的做全1处理

          1. 为保证构成一个群,故模数为素数

        4. 三个运算任意两个不满足交换律,结合律

      3. 扩散是由乘加结构MA实现(重复使用8次)
        1. 输入两个16比特的子段,两个16比特的子密钥

        2. 输出为两个16比特的子段

    3. 实现
      1. 软件:软件实现16比特子段的处理,实现3个运算

      2. 硬件:加解密用同一器件实现

    4. 加密
      1. 将64比特分为4个16比特的子分组
      2. 连续的8轮迭代
        1. 每轮开始时有一个变换(4个子段和4个子密钥)

          1. 使用两个乘法和两个加法

          2. 输出的4个子段,经过异或形成2个16比特的子段

        2. MA结构(2个子段和2个子密钥)

        3. 变换的4个子段,和MA结构的输出经过异或,得到4个输出子段

        4. 交换中间的两个子段,目的在于进一步混淆

      3. 输出变换
        1. 输入的四个子段中间的两个子段,交换位置,目的在于撤销交换

        2. 需要4个子密钥

    5. 子密钥的产生
      1. 前8个子密钥从加密密钥中获得

      2. 加密密钥循环左移25位,再取8个子密钥

    6. 解密
      1. 解密密钥
        1. 用于变换的第一个和第四个子密钥

          1. 取加密密钥的mod 65536乘法逆元

        2. 用于变换的第二个和第三个子密钥

          1. 取第3个和第2个子密钥的mod 65535加法逆元

          2. 首尾轮取第2个和第3个子密钥的mod 65535加法逆元

        3. 用于MA结构的子密钥

          1. 不变

          2. 解释:将MA及其上半的两个异或,和其下半的四个异或看作一个区块。加密时,设输入分别是A,B,C,D,输出分别是D,E,F,G。则D,E,F,G由A,B,C,D与f(A异或C,B异或D,Zi,Zj)的部分结果异或得到。而解密时,输入是D,E,F,G,而f(D异或F,E异或G,Zi,Zj),因为D和F由A和C异或同一个数得来,故D异或F=A异或C。这样,解密时,MA就有和加密时相同的输出,而这相同的输出再部分异或上D,E,F,G,便能得到A,B,C,D。总的来说,密钥不发生变化,是为了保证,解密和加密时候,都异或上同一组数。也即A异或M=Y时,Y异或M也=A。如果密钥发生变化,则该区块不可逆。

        4. 正确性证明

          1. P57

  11. 中国商用密码算法SM4

    1. 结构
      1. 数据分组长度128比特

      2. 密钥分组长度128比特

      3. 32轮迭代结构,每轮一个32位密钥

    2. 基本运算
      1. 模2加

      2. 循环移位

    3. 基本密码部件
      1. S盒
        1. 字节为单位的非线性替换

        2. 作用为混淆

      2. 合成变换T
        1. 为单位的变换

        2. T(X)=L(τ(X))

        3. 非线性变换τ
          1. 为单位的非线性替换

          2. 由4个S盒并置构成,一个S盒处理一个32位的字,作用是混淆

          3. τ(A)=(S(a0),S(a1),S(a2),S(a3))

        4. 线性变换L
          1. 为单位的线性变换

          2. 作用是扩散

          3. C=L(B)

    4. 加密/解密算法
      1. 32轮迭代
        1. X4=X0⊕T(X1⊕X2⊕X3⊕rk)

      2. 一个反序处理R
        1. (Y0,Y1,Y2,Y3)=R(Y3,Y2,Y1,Y0)

    5. 密钥扩展算法
      1. 4个常数FK
      2. 固定参数CK(32个32比特)
        1. 产生方法:ck(i,j)=(4i+j)*7(mod 256)

      3. 密钥扩展算法
        1. 32轮迭代

        2. rk0=K4=Ki⊕T'(K1⊕K2⊕K3⊕CK0),其中K1,K2,K3由MKi和FKi异或得到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值