网络与信息安全-第三章-对称秘钥加密算法

密码学的基本概念

  • 密码编码:通过信息编码使信息保密

  • 密码分析:用分析方法(破解)解密信息

  • 密码解码:用(正常手段,如拥有密钥)将密文转换成明文

  • 基本术语

    • 明文(plain text);密文(cipher text)
    • 加密(encrypt,encryption),解密(decrypt,decryption)
    • 密码算法(Algorithm),密码(Cipher):用来加密和解密的数学函数
      c=E(m),m=D( c ),D(E(m))=m
    • 密钥(Key):算法中的一个变量[kd加密密钥,ke解密密钥]
      c=Eke(m),m=Dkd( c ),Dkd(Eke(m))=m
  • 密码学基本模型
    在这里插入图片描述
    各国在密码分析上投入的资源最多

  • 简单加密系统模型
    在这里插入图片描述

  • 什么是密码?就是一组含有参数K的变换E。设已知消息m,通过变换Ek得密文C,即,这个过程称为加密,E为加密算法,k不同,密文C亦不同。传统的保密通信机制:
    在这里插入图片描述

  • 理论安全和实际安全

    • 理论安全,或无条件安全 Theoretical Security(or Perfect Security):
      攻击者无论截获多少密文,都无法得到足够的信息来唯一地决定明文。Shannon(香农)用理论证明:欲达理论安全,加密密钥长度必须大于等于明文长度,密钥只用一次,用完即丢,即一次一密,One-time Pad,不实用。
    • 实际安全,或计算上安全 Practical Secure(or Computationally Secure):
      如果攻击者拥有无限资源,任何密码系统都是可以被破译的;但是,在有限的资源[指人类所能掌握的资源总和]范围内,攻击者都不能通过系统地分析方法来破解系统,则称这个系统是计算上安全的或破译这个系统是计算上不可行(Computationally Infeasible)。
      考虑到时间资源 Shannon假定给定一个n位的密文,必有一个最小的工作时间来破解这个系统,这个工作时间为W(n).
      当n趋于无穷,则W(n)>W(∞);当n大到一定程度,具有有限资源的攻击者在合理的时间内不能破译系统,该系统就被称为是Practical Secure 或Computationally Secure。现在的问题是,W(n)多大系统才安全?
      例:N1=n5,N2=2n,N3=n!假定每秒可以计算100万次,即10-6 sec/compute
    nn52nn!
    100.1s0.001s3.6s
    100104 s = 2.8h1030 s = 101610186 s = 10176
    1000109s=10年10286 s102974世纪

    所以,n=100,2n=1030sec=1016年,W(n)>1030才安全。

密码学的演变历史

  • 演变史

    • 1949,Claude Shannon’s The Communication Theory of Secrecy System,成为理论基础
    • 1976-1977,美国国家标准局正式公布实施DES,Data Encryption Standard
    • 1977-1978,Rivest,Shamir,Adelman 第一次提出公开密钥密码系统的实现方法RSA
    • 1981,成立International Association for Cryptology Research
    • 1985,EIGamal 提出概率密码系统EIGamal方法
    • 1990-1992,Lai Xuejia and James:IDEA,The International Data Encryption Algorithm
    • 2000,AES,Advanced Encryption Standard
  • 古罗马:Caesar密码(公元前100年)

    • 替代技术(Substitution)
      改变明文内容的表示形式,保持内容元素之间相对位置不变。单表替换如恺撒密码(Caesar Cipher)
      明文字母用密文中对应字母代替,例:
      明文字母表P={p0, p1, …, pn-1}
      密文字母表C={c0, c1…,cn-1}

    CAESAR密码:c=(p+3) Mod 26

    密码本ABCDEFGHIGKLMNOPQRSTUVWXYZ
    密文DEFGHIGKLMNOPQRSTUVWXYZABC
    明文Caesar was a great soldier
    密文Fdhvdu zdv d juhdw vroglhu
  • 美国南北战争 1861

    • 置换技术:改变明文内容元素的相对位置,保持内容的表现形式不变。
    • 一维变换:横向输入,纵向输出
    CANY
    OUUN
    DERS
    TAND

    明文:Canyouunderstand
    密文:codtaueanurnynsd

    • 二维变换 — 图形转置
D
T A N
N D E R S
C A N Y O U U

在此处明文按照从左到右从下往上的顺序填入,密文按照斜右下向左的层次输出
明文:can you understand
密文:dnsu aru teo dy nn a c

古典密码和现代密码

  • 古典密码

    • 代替密码(Substitution Cipher)
    • 换位密码(transposition Cipher)
    • 代替密码与换位密码的组合
  • 古典密码(受限密码)的缺陷

    • 密码体制的安全性在于保持算法本身的保密性
    • 受限算法的缺陷
    • 不适合大规模生产
    • 不适合较大的或者人员变动较大的组织
    • 用户无法了解算法的安全性
  • 现代密码算法

    • 把算法和密钥分开
    • 密码算法可以公开,密钥保密
    • 密码系统的安全性在于保持密钥的保密性
      在这里插入图片描述
  • 图灵(计算机之父)

    • Alan Mathison Turing,1912-1954.英国数学家。一生对智能与机器之间的关系进行着不懈探索。
    • 1936年,24岁的图灵提出“图灵机”的设想。二战期间成功地参与破译了纳粹德国的密码Enigma,设计并制造了COLOSSUS,向现代计算机迈进了重要一步
    • 1952年,图灵遭到警方拘捕,原因是同性恋。1954年6月8日,服毒自杀,年仅42岁
    • 图灵去世12年后,美国计算机协会以他的名字命名了计算机领域的最高奖"图灵奖"
  • 转子加密机(Rotor Machine):转轮密码机ENIGMA,由Arthur Scherbius于1919年发明,4轮ENIGMA在1944年装备德国海军
    在这里插入图片描述

  • 英国的TYPEX打字密码机,是德国3轮ENIGMA的改进型密码机。它在英国通信中使用广泛,且在破译密钥后帮助破解德国信号
    在这里插入图片描述

  • 一个简单的加密算法——异或 ⊕
    异或运算(不进位加法)

加密   明文
⊕密钥
------------
   密文
    0 0 1 1
⊕ 0 1 0 1
-------------
    0 1 1 0
解密   密文
⊕密钥
------------
   明文
    0 1 1 0
⊕ 0 1 0 1
-------------
    0 0 1 1

明文P,密文C,密钥K间的转换规则:
C = P ⊕ K
P = C ⊕ K
K = C ⊕ P

对称密码算法和非对称密码算法

  • 对称密钥密码算法,又称传统密码算法、秘密密钥密码算法
    • 加密和解密使用相同的密钥 Ke=Kd
    • 常用算法:DES,IDEA,Blowfish,RC2等
    • 优点
      • 加密速度快,便于硬件实现和大规模生产
    • 缺点
      • 密钥分配:必须通过保密的信道
      • 密钥个数:n(n-1)/2
      • 无法用来签名和抗抵赖(没有第三方公证时)
  • 非对称密码,又称公开密钥密码算法
    • 加密和解密使用不同的密钥(Kp,Ks),把加密密钥公开,解密密钥保密:c=EKp(m),m=DKs(c)
    • 常用算法:RSA,DSA,背包算法,ElGamal,椭圆曲线等
    • 优点:
      • 密钥分配:不必保持信道的保密性
      • 密钥个数:n pair
      • 可以用来签名和抗抵赖
    • 缺点
      • 加密速度慢,不便于硬件实现和大规模生产

分组密码和序列密码

  • 分组密码(Block Cipher)
    • 一次加密或解密操作作用于一个数据块,比如64位
  • 序列密码(Stream Cipher)
    • 一次加密或解密操作作用于一位或者一个字节

对称密钥算法

  • 加密和解密使用相同的密钥:KE=KD
  • 密钥必须使用秘密的信道分配
    在这里插入图片描述
  • 常用对称密钥密码算法
    • DES(Data Encryption Standard)及其各种变形
    • IDEA(International Data Encryption Algorithm)
    • RC2,RC4,RC5,
    • AES(Advanced Encryption Standard)
    • CAST-128-Blowfish

DES算法原理

  • IBM公司,70年代初提出,80年代成为国家标准
  • DES是一种对称密钥算法,密钥长度为56bits(加上奇偶校验,通常写成64bits)
  • 是一种分组加密算法,64bits为一个分组
  • 基本思想:
    – 混乱(Confusion)和扩散(Diffusion)
  • 使用标准的算术和逻辑运算

DES加密过程

首先把明文分成以64bit为单位的块m,对于每个m,执行如下操作
DES(m)=IP-1·T16·T15…T2·T1·IP(m)

  • 初始置换,IP
  • 16轮迭代(每轮迭代思路相同),Ti,i=1,2…16
  • 末置换,IP-1

重点在于初始置换、其中一轮迭代和末置换
在这里插入图片描述

初始换位 IP

置换表:

585042342618102
605244362820124
625446383022146
645648403224168
57494133251791
595143352719113
615345372921135
635547393123157

初始序列:
M=m1,m2,m3…,m62,m63,m64
置换后序列:
M’=IP(M) = m58,m50,m42,…,m23,m15,m7

一轮迭代

在这里插入图片描述
子密钥Ki长度48bit,总密钥长度64bit

  1. E-盒(extend)置换:对明文的任何变化都会扩散到密文的每一处
  • 将Ri从32位扩展到48位

  • 目的:输入的一位影响下一步的两个替换,使得输出对输入的依赖性传播得更快,密文的每一位都依赖于明文的每一位
    在这里插入图片描述

    原位置1234567893132
    映射到2,48345,76,891011,1312,144647,1
  1. 置换结果 和 子密钥Ki 异或
  • 子密钥的生成
    密钥K共64bits,其中第8,16,24,32,40,48,56,64用做奇偶校验位,实际上密钥长度为56位
    在这里插入图片描述
    在这里插入图片描述

拆分:56bits 的密钥分成两部分, Ci , Di , 各28bits
循环左移:根据迭代的轮数,分别左移一位或两位

迭代轮数12345678910111213141516
左移位数1122222212222221

压缩置换PC(置换选择):按照下表的指导,从56bits中选择48bits

14171124153281562110
23191242681672720132
415231374755304051453348
444939563453464250362932
  1. S-盒代替
    将48比特压缩成32比特
    在这里插入图片描述
  • 输入6bit:b1b2b3b4b5b6
  • 输出4bit:S(b1b6, b2b3b4b5)

假定S1盒为:

0123456789101112131415
S10
1
2
3
14
0
4
15
4
15
1
12
13
7
14
8
1
4
8
2
2
14
13
4
15
2
6
9
11
13
2
1
8
1
11
7
3
10
15
5
10
6
12
11
6
12
9
3
12
11
7
14
5
9
3
10
9
5
10
0
0
3
5
6
7
8
0
13

可以求得 S1(100110) = 1000
注意到:b1b6=10(2) = 2(10),b2b3b4b5=0011(2) = 3(10)
在S1盒中查出 (2,3)中的数据为8,转为二进制为1000

  1. P-盒置换

32比特输入,32比特输出
P盒的输出:

12345678910303132
16720212912281711511425

置换是为了还原

末置换

末置换表(IP):

408481656246432
397471555236331
386461454226230
375451353216129
364441252206028
353431151195927
342421050185826
33141949175725

对比初始置换表(IP-1):

585042342618102
605244362820124
625446383022146
645648403224168
57494133251791
595143352719113
615345372921135
635547393123157

IP-1(IP(M)) = M
经过初始置换后,第1位跑到了40位,末置换将第40位还原为第1位
两个置换并不能提升密码强度,却带来大量计算消耗,因此实际使用的时候并不做初始置换和末置换。

DES解密过程

  • DES解密过程与加密过程完全相似,只不过将16次迭代的子密钥顺序倒过来,即
    m = DES-1(c)=IP-1·T1·T2…T15·T16·IP(c)
  • 可以证明 DES(DES-1(m)) = m

DES算法工作模式

电子密码本模式(ECB)
  • 基本的DES算法就是ECB模式
  • 相同的输入永远产生相同的输出
  • 相当于加密、解密双方各有一个密码本,对于一个密钥,密码本有264个表项(我们可以穷举2^64中输入以及对应产生的输出,形成密码本,从而通过直接查找实现加解密,由此可以直接销毁密钥)
  • 存在重放(Replay)类型的攻击,特别是对于结构化的报文
    • 攻击者可以在不知道密钥的情况下修改被加密过的消息
      在这里插入图片描述
密码分组链模式(CBC)

在这里插入图片描述
Ci是第i组密文,Pi是第i组明文
    Ci = E(Ci-1 ⊕ Pi)
    Pi = Ci-1 ⊕ E-1(Ci)
如上图左边,三块数据链之间的加密有依赖关系,想破解全部信息需要获取所有密钥,特别是破解后面的信息需要拿到前面所有的密钥。

DES的安全性和速度

  • 弱密钥
    • 产生的子密钥相同,4个,如0000…00,11111…111,0101010101…01,101010…10
  • 半弱密钥
    • 用不同的密钥加密产生相同的密文,即用一个密钥加密的信息可以用其他密钥解开,12个

DES密钥长度

  • 关于DES算法的另一个最有争议的问题就是担心实际56比特的密钥长度不足以抵御穷举式攻击,因为密钥量只有256≈1017
  • 早在1977年,Diffie和Hellman已建议制造一个每秒能测试100万个密钥的VLSI芯片。每秒测试100万个密钥的机器大约需要一天就可以搜索整个密钥空间。他们估计制造这样的机器大约需要2000万美元
  • 在CRYPTO’93上,Session和Wiener给出了一个非常详细的密钥搜索机器的设计方案,这个机器基于并行运算的密钥搜索芯片,所以16次加密能同时完成。花费10万美元,平均用1.5天左右就可找到DES密钥
  • 美国克罗拉多洲的程序员Verser从1997年2月18日起,用了96天时间在Internet上数万名志愿者的协同工作下,成功地找到了DES的密钥,赢得了悬赏的1万美元
  • 1998年7月电子前沿基金会(EFF)使用一台25万美元的电脑在56小时内破译了56比特密钥的DES
  • 1999年1月RSA数据安全会议期间,电子前沿基金会用22小时15分钟就宣告破解了一个DES的密钥

DES的变形

三重DES加密,密钥长度为112比特,k=k1k2
在这里插入图片描述
密钥长度2112 = 256+56

软硬件实现的速度

硬件实现:商业DES芯片

  • VLSI公司VM0091993年制造200M Bytes/s

软件实现:

  • 80486,CPU66Hz,每秒加密43000个DES分组,336K Bytes/s
  • HP9000/887,CPU125Hz,每秒加密196,000个分组,1.53M Bytes/s

高级加密标准(AES)

AES的起源

  • 1997年9月,NIST征集AES方案,以替代DES。
  • 1999年8月,以下5个方案成为最终候选方案:MARS,RC6,Rijndael,Serpent,Twofish。
  • 2000年10月,由比利时的Joan Daemen和Vincent Rijmen提出的算法最终胜出。(Rijndael 读成Rain Doll)
  • http://www.esat.kuleuven.ac.be/~rijmen/rijndael/

AES的设计原则

  • 能抵抗所有(算法发明之前)已知的攻击;
  • 在各种平台上易于实现,速度快;
  • 设计简单

Rijndael是一个分组密码算法,其分组长度和密钥长度相互独立,都可以改变
在这里插入图片描述

AES算法描述

Rijndael密码系统的数学背景

  • Rijndael密码系统的运算都在有限域GF(28)
  • GF(28)的定义:
    假设字节b由b7b6b5b4b3b2b1b0组成,将bi当作一个7次多项式的系数。
    (57)16=(01010111)2表示成多项式为:x6+x4+x2+x+1
  • 算法定义了自己的 “加法”、“乘法”、“乘以”

AES算法的一般描述

在这里插入图片描述

加密步骤
  1. 字节替换SubBytes
    以字节的高四位为行索引,低四位为列索引,从S盒(16*16)中找出对应的字节进行替换

  2. 行移位ShiftRows
    第一行固定不动,第二三四行根据列数决定按字节循环左移多少位。
    当列数为4时,二三四行分别按字节循环左移1,2,3位。

  3. 列混合MixColumns
    将每一列作为列向量,左乘一个给定的矩阵(四阶方阵),计算结果覆盖原有的列。
    注意,这里采用的是有限域GF(28)上的乘法。
    算法的原理如下:

    1. GF(28)中任何数乘0x01都不变
    2. GF(28)中计算乘0x02,可以分两种情况考虑:
      • 原数值小于(1000 0000)2,即0x80的时候,乘2后第8个比特不会溢出,那么结果就是原数值左移一位;
      • 原数值大于(1000 0000)2,即0x80的时候,乘2后第8个比特会溢出,结果需要减去一个不可约多项式(x8+x4+x2+x+1),注意到GF(28)中的减法就是加法(异或相当于不进位加法或者不退位减法),那么结果就为原数值左移一位后(乘2)再与(0001 1011)2即0x1b进行异或 (这里假定x8已经溢出了,只需要再减去 x4+x2+x+1 ,如果计算器位数足够多导致x8没溢出,仍需与 x8+x4+x2+x+1 异或)。
    3. 类似第2点,可以得到GF(28)中计算乘4/乘8的结果;
    4. GF(28)中计算乘其它数时,可以表示为乘1、2、4、8的线性组合。

    在这里插入图片描述
    例如:计算上图左上角的04的步骤如下

    D4·02 ⊕ BF·03 ⊕ 5D·01 ⊕ 30·01
    = D4·02 ⊕ BF·02 ⊕ BF·01 ⊕ 5D·01 ⊕ 30·01
    = 1101 0100·0000 0010 ⊕ 1011 1111·0000 0010 ⊕ 1011 1111·0000 0001 ⊕ 0101 1101·0000 0001 ⊕ 0011 0000·0000 0001
    = (‭0001 1010 1000‬ xor 1 0001 0111) ⊕ (‭0001 0111 1110‬ xor 1 0001 0111)‬ ⊕ 1011 1111 ⊕ 0101 1101 ⊕ 0011 0000
    = ‭‭1011 1111‬ ⊕ ‭0110 1001‬ ⊕ 1011 1111 ⊕ 0101 1101 ⊕ 0011 0000
    = 0000 0100
    = 0x 04
    
  4. 轮密钥加
    将输入状态和轮次密钥按列求异或,计算结果放回到输入状态。

密钥轮转

初始密钥可以是128位 (4×4×16)、192位 (4×6×16)或256位 (4×8×16)

  1. 把初始密钥的最后一列取出,进行一次按字节循环上移(此处变成 CF 4F 3C 09)
    在这里插入图片描述
  2. 将得到的列用S盒做字节替换SubBytes运算(变为 8A 84 EB 01),称为变换列
  3. 从种子 Rcon中取出第一列,将初始密钥的第一列,变换列和Rcon的第一列做异或运算
    这里的Rcon一共有十列,是因为加密进行了10轮,每轮都要用到一组流转密钥
    在这里插入图片描述
    在这里插入图片描述
  4. 将计算结果填入第1步标出的Wi中。
  5. 计算第2、3、4列的轮转密钥,假定当前列是Wi,则向Wi中填入 Wi-4⊕Wi-1的运算结果
    在这里插入图片描述
  6. 回到步骤1,继续生成下一组密钥,直到Rcon的每一列均被使用,轮转密钥全部生成为止
    在这里插入图片描述
小结

快速演示AES加密过程

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值