现代密码学复习笔记(四) 分组密码

分组密码

  • 概述
    • 地位&作用
    • 应用中的要求
    • 定义
    • 分组密码的设计问题
    • 分组密码应满足条件
    • 分组密码设计准则
    • 代换网络
    • 代换结构
  • Feistel网络
    • 概述
    • 过程
    • Feistel网络实现与一下参数和特性有关:
    • F-函数
  • SP网络(SP结构)
    • SP型密码优缺点
    • 轮数的确定
  • DES密码
    • 算法
    • 三种比特置换:
    • 轮结构
    • 子密钥生成算法
    • 解密

概述

  • 地位&作用

    • 是当今国际商用的主流密码
    • 可用于构造
      • 伪随机数生成器
      • 流密码
      • 消息认证码(MAC)和杂凑函数
      • 消息认证技术、数据完整性机制、实体认证协议以及单钥数字签名体制的核心组成部分
  • 应用中的要求

    • 安全性
    • 运行速度
    • 存储量(程序长度、数据分组长度、高速缓存大小)
    • 实现平台(硬、软件、芯片)
    • 运行模式

定义

  • 分组密码是将明文消息编码后表示的数字序列 x 0 , x 1 , x 2 . . . , x i , . . . . x_0,x_1,x_2...,x_i,.... x0,x1,x2...,xi,.... 划分为长为n的组 x = ( x 0 , x 1 , . . . x n − 1 ) x=(x_0,x_1,...x_{n-1}) x=(x0,x1,...xn1),各组(长为n的矢量)分别在密钥 k = ( k 0 , k 1 , . . . , k n − 1 ) k=(k_0,k_1,...,k_{n-1}) k=(k0,k1,...,kn1)控制下变换成等长的输出数字序列 y = ( y 0 , y 1 , . . . y m − 1 ) y=(y_0,y_1,...y_{m-1}) y=(y0,y1,...ym1)(长为m的矢量),其加密函数 E : V n × K → V m , V n E:V_n\times K \to V_m,V_n E:Vn×KVm,Vn V m V_m Vm分别是n维和m维矢量空间,K为密钥空间。它与流密码的不同之处在于输出的每一位数字不是只与相应时刻输入的明文数字有关,而是与一组长为n的明文数字有关。在相同密钥下,分组密码对长为n的输入明文组所实施的变换是等同的,所以只需研究任一组明文数字的变换规则。这些密码实质上是字长为n的数字序列代换密码
    现代密码学复习笔记(四) 分组密码_第1张图片
  • 通常取n=m
  • n < m n<m n<m,则为有数据扩展的分组密码
  • n > m n>m n>m,则为有数据压缩的分组密码

分组密码的设计问题

详见书本P32

  • 分组密码的设计问题在于找到一种算法,能在密钥控制下从一个足够大且足够好的置换子集中,简单而迅速地选出一个置换,用来对当前输入的明文的数字组进行加密变换。
    • 分组密码应满足条件

      1. 分组长度n要足够大:
        防止,明文穷举攻击
      2. 密钥量要足够大:
        尽可能消除弱密钥并使所有密钥同等地好,以防止密钥穷举攻击。
      3. 由密钥确定置换的算法要足够复杂:
        实现明文与密钥的扩散和混淆,没有简单的关系可循,要能抗击各种已知的攻击。
      4. 加密和解密运算简单,易于硬件和软件高速实现。
      5. 数据扩展尽可能小。
      6. 差错传播尽可能小。
      • 分组密码设计准则

        • 混淆:人们所设计的密码应使得密钥和明文以及密文之间的依赖关系相当复杂以至于这种依赖性对密码分析者来说是无法利用的。
        • 扩散:人们所设计的密码应使得密钥的每一位数字影响密文的许多位数字以防止对密钥进行逐段破译,而且明文的每一位数字也应影响密文的许多位数字以便隐藏明文数字统计特性。
        • 软件实现的原则: 使用子块和简单的运算。如将分组n化分为子段,每段长为8、16或32。在以软件实现时,应选用简单的运算,使作用于子段上的密码运算易于以标准处理器的基本运算,如加、乘、移位等实现,避免用以软件难于实现的逐比特置换。
        • 硬件实现的原则:加解密之间的过程差别应仅在由秘密密钥所生成的密钥不同而已,以便于加密解密可用同样的器件来实现。
      • 代换网络

        • 代换是输入集A到输出A’上的双射变换:
          f k : A → A ′ f_k: A\to A' fk:AA
          k是控制输入变量,密码学中为密钥。
        • 实现代换 f k f_k fk的网络称作代换网络。双射条件保证在给定k下可从密文惟一地恢复出原明文。
        • 代换 f k f_k fk集合:
          S = { f k ∣ k ∈ K } S=\{f_k|k\in K\} S={fkkK}
        • K是密钥空间。如果网络可以实现所有可能的 2 n ! 2^n! 2n!个代换,则称其为全代换网络。
        • 全代换网络密钥个数必须满足条件:
          # { k } ⩾ 2 n \# \{k\} \geqslant 2^n #{k}2n
        • 代换结构

        现代密码学复习笔记(四) 分组密码_第2张图片
        • 密码设计中需要先定义代换集S,而后还需定义解密变换集,即逆代换网络 S − 1 S^{-1} S1,它以密文y作为输入矢量,其输出为恢复的明文矢量x
        • 一般的,对n比特的代换结构,密钥大小是 n × 2 n n\times 2^n n×2n比特。n太大,密钥会太大而难以处理。实际中常将n分成较小的段,例如可选 n = r ⋅ n 0 n=r \cdot n_0 n=rn0。其中r和n都是正整数,将设计n个变量的代换变为设计r个较小的子代换,而每个子代换只有n0个输入变量。一般n0都不太大,称每个子代换为代换盒,简称s盒。例如DES中将输入48比特,输出32比特的代换用8个S盒来实现,每个S盒的输入端仅为6比特,输出端仅为4比特。

Feistel网络

  • 概述

    1. 很多分组密码结构从本质上说都是基于此网络结构
    2. 最初由Horst Feistel在其设计的Lucifer算法中首次使用,后来许多算法都采用了这种结构或其变形
    3. 一般轮输取为16,随后解释。
    4. 基本模块:F-函数
    5. 乘积密码指顺序地执行两个或多个基本密码系统,使得最后结果的密码强度高于每个基本密码系统产生的结果.
    6. 思想实际上是Shannon提出的利用乘积密码实现混淆和扩散思想的具体应用。
  • 过程

    1. 加密算法的输入是分组长为2w的明文和一个密钥K。将每组明文分成左右两半 L 0 和 R 0 L_0和R_0 L0R0,在进行完n轮迭代后,左右两半再合并到一起以产生密文分组。其中第i轮迭代的输入为前轮输出的函数:
      L i = R i − 1 L_i=R_{i-1} Li=Ri1 R i = L i − 1 ⊕ F ( R i − 1 , K i ) R_i=L_{i-1}\oplus F(R_{i-1},K_i) Ri=Li1F(Ri1,Ki)
      其中 K i K_i Ki是第i轮用的子密钥,由加密密钥K得到。一般各轮的密钥彼此不同且都与K不同。
    2. 每轮结构中,右半部分数据被用于轮函数F后,再与左半部分异或,这一部分是为代换。每轮结构相同,但以不同结构的子密钥Ki作为参数。代换完成后,再交换左右两半数据,称为置换。这种结构称为代换-置换网络(Substitution-Permutation Network,SPN)。
      现代密码学复习笔记(四) 分组密码_第3张图片
单轮加密过程
  1. 逆过程
    现代密码学复习笔记(四) 分组密码_第4张图片
单轮加密过程的逆

现代密码学复习笔记(四) 分组密码_第5张图片

  • Feistel网络实现与一下参数和特性有关:

  1. 分组大小: 分组越大则安全性越高,但加密速度就越慢。常用64比特。
  2. 密钥大小:密钥越长则安全性越高,但加密速度就越慢。普遍认为64比特或更短不安全,常用128比特
  3. 轮数:单轮结构远不足以保证安全性,但多轮结构可提供足够的安全性。典型地,轮数取为16。
  4. **子密钥产生算法:**该算法的复杂性越大,则密码分析的困难性就越大。
  5. 轮函数:轮函数的复杂性越大,密码分析的困难性也越大。

F-函数

F-函数具体内容暂不具表,可使用DES的F函数,随后将做补充。大致如下:

现代密码学复习笔记(四) 分组密码_第6张图片

SP网络(SP结构)

即替换-置换网络,Feistel网络是它的一种特殊类型

  • 应用类型:AES
  • 这种密码每一轮包括两种变换:
    • 由轮密钥控制的可逆代换(S-操作)
    • 和密钥无关的操作(P-操作)
  • SP型密码优缺点

    • 在明确S-盒和P-置换的某些密码指标后,设计者能估计出SP型密码抵抗差分密码分析和线性密码分析的能力
    • 比Feistel网络具有更好的扩散性
    • 缺点是加解密通常不相似
      现代密码学复习笔记(四) 分组密码_第7张图片
      一 轮 S P 型 密 码 的 加 密 过 程 一轮SP型密码的加密过程 SP
      现代密码学复习笔记(四) 分组密码_第8张图片
      常 用 的 一 轮 S P 型 密 码 的 加 密 过 程 常用的一轮SP型密码的加密过程 SP
  • 轮数的确定

现代密码学复习笔记(四) 分组密码_第9张图片

DES密码

算法

  • 是Feistel型迭代分组密码算法
  • 明文分组长度为64 bits(8bytes)
  • 密文分组长也是64 bits
  • 密钥长64bits,有8bits奇偶校验,有效密钥长56bits
  • 加密算法主要包括
    1. 初始置换IP
    2. 16轮迭代的乘积变换
    3. 逆初始置换 I P − 1 IP^{-1} IP1
    4. 16个子密钥产生器

现代密码学复习笔记(四) 分组密码_第10张图片

DES加密算法框图

图片左边是明文处理过程,分三个阶段:

  1. 一个初始置换IP,用于重排明文分组的64比特数据
  2. 具有相同功能的16轮变换,每轮都有置换和代换运算 ,第16轮变换的输出分为左右两半,并被交换次序。
  3. 最后经一个逆初始置换(末置换) I P − 1 IP^{-1} IP1(为IP的逆)从而产生64比特的密文。除初始置换和逆初始置换外,DES的结构和下图的Feistel密码结构完全相同。现代密码学复习笔记(四) 分组密码_第11张图片
    现代密码学复习笔记(四) 分组密码_第12张图片
DES算法框图

三种比特置换:

  1. 一般置换:打乱原有比特的排列顺序
  2. 扩展置换:打乱原有比特顺序并重复插入某些比特
  3. 压缩置换:删减某些比特后打乱原有比特的顺序
    这三种置换可以用一个置换矩阵表示

轮结构

现代密码学复习笔记(四) 分组密码_第13张图片

子密钥生成算法

64bits密钥经过置换运算PC-1变为56bits,再分左右两半CD,对CD分别进行左循环移位,移位位数按表走。通过置换PC2变48bits,即为本轮子密钥。

解密

同加密算法一致,子密钥顺序相反。

你可能感兴趣的:(密码学复习)