密码学的期末复习

1 DES

1.1 简介

用56位的密钥加密64位的明文数据,将所有的被加密后的64位明文数据块串联在一起即为密文输出

  • 对称密码体制
  • 分组加密算法
    • 每一组长度为64位
  • 密钥长度为64位,但是实际上只有56位参与运算
    • 第8、16、24、32、40、48、56、64位是校验位

1.2 算法概述

1.2.1 总体结构

  1. 输入64位明文
  2. 初始置换,将输入的64位明文经初始置换表置换后分为2个32位长度的L0、R0部分输出
  3. 16轮轮函数迭代处理
  4. 逆初始置换
  5. 输出64位密文

1.2.2 单轮结构

以第一轮为例

  1. 将输入的数据等分为左右两个部分
  2. 将输入的右侧数据R0直接发送到输出的左侧部分,即L1=R0
  3. 轮函数根据右侧数据R0和子密钥subkey,计算出结果
  4. 将上一步所得的结果与左侧数据L0进行异或,并将所得的结果作为加密后的右侧数据即R1
  5. 之后依次轮替进行

1.3 加密步骤1:初始IP置换

利用初始置换表对明文进行顺序打乱,得到一个乱序的64位比特序列

  1. 初始置换表是给定的

    58 50 42 34 26 18 10 2
    60 52 44 36 28 20 12 4
    62 54 46 38 30 22 14 6
    64 56 48 40 32 24 16 8
    57 49 41 33 25 17 9 1
    59 51 43 35 27 19 11 3
    61 53 45 37 29 21 13 5
    63 55 47 39 31 23 15 7

1.3.1 输入与输出

  1. 输入:64位明文
  2. 输出:两部分的32位经过置换的密文(不是最终密文)

1.4 加密步骤2:子密钥生成

在DES的每一轮中,需要从56位密钥中产生出不同的48位子密钥。也就是说,在DES整个加密算法中,需要从56位的原始密钥中,扩展出16个48位的子密钥

  1. 置换:主要操作方法类似于初始IP置换

    57 49 41 33 25 17 9 1 58 50 42 34 26 18
    10 2 59 51 43 35 27 19 11 3 60 52 44 36
    63 55 47 39 31 23 15 7 62 54 46 38 30 22
    14 6 61 53 45 37 29 21 13 5 28 20 12 4
    • 目的是为了去掉原始长度为64比特中的8比特的校验值
    • 置换出的结果分为左右两部分,各为28比特
  2. 循环左移:根据轮数对这两部分分别循环左移

    轮数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
    位数 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1
  3. 压缩置换:从第2步循环左移得到的两组28位的数据(共56比特)中选出48位作为子密钥

    14 17 11 24 1 5 3 28 15 6 21 10
    23 19 12 4 26 8 16 7 27 20 13 2
    41 52 31 37 47 55 30 40 51 45 33 48
    44 49 39 56 34 53 46 42 50 36 29 32

1.4.1 输入与输出

  1. 输入原始长度为64位的密钥
  2. 去掉8位校验值(第1步,带有置换操作)
  3. 循环左移,长度未变
  4. 压缩,将56位比特序列压缩为48位比特序列

1.5 加密步骤3:轮函数

  1. E扩展:32->48
  2. 异或:48->48
  3. S盒:48->32
  4. P置换:32->32

1.5.1 轮函数步骤1:E扩展

  1. 目的:将32位输入比特序列扩展为48位比特序列输出
  2. 对象:R0(1.3中经过初始IP置换输出的R0
32 1 2 3 4 5
4 5 6 7 8 9
8 9 10 11 12 13
12 13 14 15 16 17
16 17 18 19 20 21
20 21 22 23 24 25
24 25 26 27 28 29
28 29 30 31 32 1

1.5.2 轮函数步骤2:异或

经过E扩展(1.5.1)输出的48位比特序列

子密钥

1.5.3 轮函数步骤3:S盒

将1.5.2得到的48位数据送入8个S盒,进行代替运算

  1. 48位输入分为8个6位分组
  2. 每个S盒有6位输入4位输出

操作步骤

  1. 提取原始数据的头尾数据,转化为十进制数,作为行
  2. 提取原始数据的中间数据,转化为十进制数,作为列
  3. 在表中定位到对应数据,将该位置上的数据转换为二进制

1.5.4 轮函数步骤4:P盒

16 7 20 21 29 12 28 17
1 15 23 26 5 18 31 10
2 8 24 14 32 27 3 9
19 13 30 6 22 11 4 25

最后将经过P盒置换的结果与L0进行异或,作为R1

1.6 加密步骤4:逆置换

2 AES

2.1 简介

用128/192/256位的密钥加密128位的明文,生成128位的密文

  • 密钥长度的不同带来的是循环轮数的不同
    • 128位密钥循环10轮
    • 192位密钥循环12轮
    • 256位密钥循环14轮

2.1.1 明文字节排列算法

从上至下,从左至右

1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16

2.2 算法概述

  1. 初始变换
  2. 9轮循环运算
    • 字节代换
    • 行移位
    • 列混淆
    • 轮密钥加
  3. 1轮最终轮
    • 字节代换
    • 行移位
    • 轮密钥加

2.3 加密步骤1:初始变换

将明文矩阵(4*4)与子密钥矩阵进行异或

2.3.1 明文字节排列为输入状态

从上至下,从左至右

1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16

2.4 加密步骤2:9轮循环运算

2.4.1 轮函数步骤1:字节代换

通过S盒转换,将原始数据代换为S盒中的数据

操作方法为

  1. 前面1位为所在行,后面1位为所在列
  2. 定位即可

2.4.2 轮函数步骤2:行移位

  1. 第1行保持不变
  2. 第2行向左移动1个字节
  3. 第3行向左移动2个字节
  4. 第4行向左移动3个字节

2.4.3 轮函数步骤3:列混淆

输入矩阵与给定矩阵相乘

2.4.4 轮函数步骤4:轮密钥加

异或

2.5 密钥扩展

密钥扩展是以列为单位计算的

计算方法由列数i是否是4的倍数决定

  • 注:第1列为W0
  1. 如果i不是4的倍数,那么第i列由如下等式确定

    W[i] = W[i-4]⊕W[i-1]
    
  2. 如果i是4的倍数,那么第i列由如下等式确定

    W[i] = W[i-4]⊕T(W[i-1])
    
    • T函数包括
      • 字循环:将1个字中的4个字节循环左移1个字节
        • [1,2,3,4] -> [2,3,4,1]
      • 字节代换:将字循环的结果使用S盒进行字节代换
      • 轮常量异或:将上述步骤所得结果与轮常量Rcon[j]进行异或,其中j表示轮数

3 RSA

公钥加密算法

3.0 数学

3.0.1 同余

给定一个正整数m,如果两个整数a和b满足a-b能被m整除,即(a-b) mod m=0,那么就称整数a与b对模m同余,记作ab(modm),同时可成立a mod m = b

ab(mod m)仅可推出b = a mod m

3.0.2 欧拉函数

任意给定正整数n,计算在小于等于n的正整数之中,与n构成互质关系的值就叫做欧拉函数,以φ(n)表示

  1. 如果n可以分解成两个互质的整数之积,即n=p*q

    则φ(n) = φ(p)φ(q)

  2. φ(n) = (p-1)(q-1)

3.0.3 模反元素

欧拉定理在此处指的是:如果两个正整数a和n互质,则

a^φ(n)≡1(modn);a的φ(n-1)次方

3.1 加密步骤

  1. 随意选择两个大质数p、q,并计算乘积n=p*q

  2. 计算n的欧拉函数:φ(n) = φ(p)φ(q) = (p-1)(q-1)

  3. 选一个与φ(n)互质的整数e

    • e介于1与φ(n)之间
    • e通常取65537
  4. 计算出e对于φ(n)的模反元素d

    ed-1=kφ(n)
    a^φ(n) = 1(mod n);a的φ(n-1)次方
    
  5. 公钥(e,n):明文M,密文C

    M^e mod n = C
    
  6. 私钥(d,n)

    C^d mod n = M
    

    看不下去了看不下去了

4 ECC

posted @   Weird1522  阅读(202)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示