• 主页
  • 相册
  • 随笔
  • 目录
  • 存档
Total 244
Search AboutMe

  • 主页
  • 相册
  • 随笔
  • 目录
  • 存档

密码学备忘录-分组密码

2020-08-05

1. 块密码(block cipher)定义

将明文消息编码表示后的二进制序列,划分成固定大小的块,每块分别在密钥的控制下变换成等长的二进制序列。

  • 密文块的任意一位与明文块的所有位相关,从而如果明文的单个位发生了变化,那么平均将有一半的密文块的位也要发生变化
  • 区别于夺标代换密码:维吉尼亚密码中,明文块中单个字符的改变只是导致密文块中单个字符的改变。

1.1. Number of keys for ideal block cipher

2. 设计原则

Shannon:混淆原则和扩散原则 (**Confusion and Diffusion**)

  • 混淆
    • 所设计的密码应使得密钥和明文以及密文之间的依赖关系相当复杂,以至于这种依赖性对密码分析者来说是无法利用的
    • 代换
  • 扩散
    • 所设计的密码应使得密钥的每一位数字影响密文的许多位数字,以防止对密钥进行逐段破译
    • 置换

SP网络(Substitution Permutation Network)

  • 代换-置换网络
  • 迭代密码的一种

3. Feistel密码结构

要素

  1. 分组长度
  2. 密钥长度
  3. 轮函数复杂性
  4. 迭代轮数
  5. 子密钥的生成方法

3.1. construction detail

4. DES(数据加密标准)

  • 明文组长度:64比特
  • 密钥长度:64比特
    • 实际只使用56比特
    • 其它用作奇偶校验
  • 加密过程包括16轮编码
  • 在每轮编码中,DES从56位密钥中产生出一个48位的临时密钥,并用这个密钥进行这一轮的加密

过程

  1. Key schedule
  • (选择置换1)从64位输入密钥中选出56位的密钥—剩下的8位要么直接丢弃,要么作为奇偶校验位
  • 56位分成两个28位的半密钥
  • 两个半密钥都被左移1或2位(由回次数决定)
  • (选择置换2)将两个28结合,并选择置换后产生48位子密钥Subkey
  1. Expansion Permutation
  1. S-box Substitution

具体算法

  1. P-box permutation
  1. XOR and swap

4.1. 安全性

  • 密钥的长度问题
    • 1999年在超级计算机上只要22小时
  • 弱密钥
    • 在产生密钥时初始密钥分成两半,以后各自独立地移位
    • 若每一半都是0或都是1,则所有密钥都是相同的
  • DES密码有良好的雪崩效应(Avalanche Effect)
    • 输入1bit变化会导致一半输出的变化
  • DES不能抵御时序工具差分分析、线性分析
      • 时序攻击:Timing Attacks

        攻击者试图通过分析执行密码算法所需的时间来破坏一个密码系统。计算机中的每一个逻辑操作都需要时间来执行,而时间可以根据输入而不同;有了对每个操作时间的精确测量,攻击者就可以倒推到输入。通过时间信息寻找秘密可能比使用已知明文、密码文本对的密码分析要容易得多

    • 差分分析: differential cryptanalysis. 一种选择明文攻击,系统地研究明文中的一个细小变化是如何影响密文的
    • 线性密码分析: Linear Cryptanalysis. 寻找明文、密文和密钥间的有效线性逼近,当该逼近的线性偏差足够大时,就可以由一定量的明密文对推测出部分密钥信息

4.2. 2DES

  • Meet-in-the-middle attack
  • 对二重DES的攻击:中途相遇攻击
  • 抵抗中途相遇攻击的一种方法是使用3个不同的密钥做3次加密一一三个密钥的三重DES

4.3. 3DES Triple DES(TDEA)

  • ede mode Encrypt-decrypt-encrypt (EDE)
    • 还有另一种eee mode Encrypt-encrypt-encrypt
  • 密文 = EK3(DK2(EK1(明文))),也就是说,使用K1为密钥进行DES加密,再用K2为密钥进行DES“解密”,最后以K3进行DES加密。
  • 三重资料加密算法(3DES)使用了三把56 bits的秘钥(168 bits),却只有两把秘钥的强度(112 bits)

加密-解密-加密(EDE)是首选的方法,因为如果一个单一的密钥被用于所有3个操作,它相当于常规的56位DES。也就是说,一个56位的DES实现可以解密该信息。这使得这个版本的3DES与DES向后**兼容(即k1=k2)**。

不过,加密-加密-加密(EEE)也是一种有效的方法。它的有效性不比EDE高或低。然而,由于上述原因,EDE通常是首选。

  • 另外一个点是:ede只用2个密钥,eee需要3个

5. AES(高级加密标准)

  • 数据分组长度为128位
  • 密钥长度为128/192/256位
  • AES没有使用Feistel密码结构,解密过程和加密过程是不同的
  1. AES加密过程是在一个4×4的字节矩阵上运作,这个矩阵又称为“体(state)”,其初值就是一个明文区块(矩阵中一个元素大小就是明文区块中的一个Byte)。各轮AES加密循环(除最后一轮外)均包含4个步骤
  2. SubBytes:透过一个非线性的替换函数,用查找表的方式把每个字节替换成对应的字节
  3. ShiftRows:将矩阵中的每个横列进行循环式移位
  4. MixColumns:使用线性转换来混合每内联的四个字节
  5. AddRoundKey:矩阵中的每一个字节都与该次回合密钥(round key)(相当于Subkey)做XOR运算
    1. 最后一个加密循环中省略MixColumns步骤
  • key schedule
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
密钥扩展过程说明:

1) 将种子密钥按图(a)的格式排列,其中k0、k1、……、k15依次表示种子密钥的一个字节;排列后用4个32比特的字表示,分别记为w[0]、w[1]、w[2]、w[3];

2) 按照如下方式,依次求解w[j],其中j是整数并且属于[4,43];

3) 若j%4=0,则w[j]=w[j-4]⊕g(w[j-1]),否则w[j]=w[j-4]⊕w[j-1];

函数g的流程说明:

a) 将w循环左移8比特;

b) 分别对每个字节做S盒置换;

c) 与32比特的常量(RC[j/4],0,0,0)进行异或,RC是一个一维数组,其值如下。(RC的值只需要有10个,而此处用了11个,实际上RC[0]在运算中没有用到,增加RC[0]是为了便于程序中用数组表示。由于j的最小取值是4,j/4的最小取值则是1,因此不会产生错误。)

RC = {0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1B, 0x36}

5.1. DES vs AES

6. 参考

  • 密码算法详解——AES - ReadingLover - 博客园
  • Note
  • Security
  • Cryptography
密码学备忘录-序列密码
密码学备忘录-古典密码与现代密码简介
  1. 1. 1. 块密码(block cipher)定义
    1. 1.1. 1.1. Number of keys for ideal block cipher
  2. 2. 2. 设计原则
  3. 3. 3. Feistel密码结构
    1. 3.1. 3.1. construction detail
  4. 4. 4. DES(数据加密标准)
    1. 4.1. 4.1. 安全性
    2. 4.2. 4.2. 2DES
    3. 4.3. 4.3. 3DES Triple DES(TDEA)
  5. 5. 5. AES(高级加密标准)
    1. 5.1. 5.1. DES vs AES
  6. 6. 6. 参考
© 2024 何决云 载入天数...