备注
幻灯片放映
大纲
1
DES 与 RSA 加解密算法
  • 李开祥 郭雪丽 马高峰 杨洋 孙凤英 陈静


  • Copyright © 2007 西安交通大学电子商务系
2
两种加密算法
  • 对称加解密算法:
    通信双方(通信主体)同时掌握一个钥匙,加解密都由这一个钥匙完成。
  • 公私钥加解密算法:
    通信双方(通信主体)彼此掌握不同的钥匙,不同方向的加解密由不同钥匙完成。
3
对称加解密算法
  • 通信双方通信前共同拟定一个密钥,不对第三方公开。
  • 消息发送前都通过该密钥加密,到达后也通过该密钥解密。
  • 不具有个体原子性,一个密钥被共享,泄露机率加大。
4
对称加解密过程
  • 通信双方甲、乙共同拟定一个密钥,共享。
  • 任何一方发信时都以该共享密钥加密再发送。
  • 收信方同样以该密钥解密。
  • 复信同上。
5
公钥与私钥
  • 权威数字认证机构(CA)给所有通信主体(个人或组织)颁发公钥和私钥,彼此配对,分别唯一。
  • 私钥好比数字指纹,同时具有解密和加密功能。个人保管,不公开。
  • 公钥好比安全性极高的挂号信箱地址,公开。
6
公私钥加解密举例
  • 设若甲有一份需保密的数字商业合同发给乙签署。经过如下步骤:
    1. 甲用乙的公钥对合同加密。
    2. 密文从甲发送到乙。
    3. 乙收到密文,并用自己的私钥对其解密。
    4. 解密正确,经阅读,乙用自己的私钥对合同进行签署。
    5. 乙用甲的公钥对已经签署的合同进行加密。
    6. 乙将密文发给甲。
    7. 甲用自己的私钥将已签署合同解密。
    8. 解密正确,确认签署。
7
公私钥加解密说明
  • 从以上步骤,我们知道:
    1. 用公钥加密的密文能且只能用与其唯一配对的私钥才能解开。
    2. 如果某份密文被解开,那么肯定是密文的目标信息主体解开的。
    3. 私钥因其唯一标识所有者的属性,被用于数字签名,具有法律效力。
8
DES 与 RSA 加解密算法
  • DES 是一种单一密钥加解密算法。通信主体之间只有一个密钥,该密钥不对第三方公开。
  • RSA 则是公钥/私钥系统。该系统比 DES 系统更原子化,具有普遍应用意义。
9
DES 加解密算法
  • DES (Data Encryption Standard),是IBM在上个世纪70年代开发的单密钥对称加解密算法。
  • 该算法利用一个56+8奇偶校验位(第8, 16, 24, 32, 40, 48, 56, 64位)=64位的密钥对以64位为单位的块数据进行加解密。


10
DES 加解密算法:In Action
  • 有明文M(64位) = 0123456789ABCDEF,即
    M(64位) = 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
  • L(32位) = 0000 0001 0010 0011 0100 0101 0110 0111
    R(32位) = 1000 1001 1010 1011 1100 1101 1110 1111
11
DES 加解密算法:In Action
  • 有密钥K(64位) = 133457799BBCDFF1,即
    K(64位) = 00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001
  • 其中红色标注为奇偶校验位,即实际密钥为56位。
12
第一步:生成16个子钥(48位)
  • 对K使用PC-1(8×7)
    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
13
第一步:生成16个子钥(48位)
  • 从而,由K(64位) = 00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001
  • 得到K+(56位) = 1111000 0110011 0010101 0101111 0101010 1011001 1001111 0001111
  • 进而,
    C0(28位) = 1111000 0110011 0010101 0101111
    D0(28位) = 0101010 1011001 1001111 0001111
14
第一步:生成16个子钥(48位)
15
第一步:生成16个子钥(48位)
  • 从而得到C1D1 ~ C16D16:
  • C1 = 1110000110011001010101011111
    D1 = 1010101011001100111100011110
  • C2 = 1100001100110010101010111111
    D2 = 0101010110011001111000111101
  • C3 = 0000110011001010101011111111
    D3 = 0101011001100111100011110101
  • C4 = 0011001100101010101111111100
    D4 = 0101100110011110001111010101
  • …
    …
  • C15 = 1111100001100110010101010111
    D15 = 1010101010110011001111000111
  • C16 = 1111000011001100101010101111
    D16 = 0101010101100110011110001111
16
第一步:生成16个子钥(48位)
  • Kn(48位) = PC-2( CnDn(56位) )
  • PC-2(8×6)
  • 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
17
第一步:生成16个子钥(48位)
  • 最终得到所有16个子钥,每个48位:


    K1 = 000110 110000 001011 101111 111111 000111 000001 110010
    K2 = 011110 011010 111011 011001 110110 111100 100111 100101
    K3 = 010101 011111 110010 001010 010000 101100 111110 011001
    K4 = 011100 101010 110111 010110 110110 110011 010100 011101
    K5 = 011111 001110 110000 000111 111010 110101 001110 101000
    K6 = 011000 111010 010100 111110 010100 000111 101100 101111
    K7 = 111011 001000 010010 110111 111101 100001 100010 111100
    K8 = 111101 111000 101000 111010 110000 010011 101111 111011
    K9 = 111000 001101 101111 101011 111011 011110 011110 000001
    K10 = 101100 011111 001101 000111 101110 100100 011001 001111
    K11 = 001000 010101 111111 010011 110111 101101 001110 000110
    K12 = 011101 010111 000111 110101 100101 000110 011111 101001
    K13 = 100101 111100 010111 010001 111110 101011 101001 000001
    K14 = 010111 110100 001110 110111 111100 101110 011100 111010
    K15 = 101111 111001 000110 001101 001111 010011 111100 001010
    K16 = 110010 110011 110110 001011 000011 100001 011111 110101
18
第二步:用子钥对64位数据加密
  • 对明文M使用IP(8×8)
  • 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
19
第二步:用子钥对64位数据加密
  • 由于M(64位) =0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
  • 对M运用IP,故有
    IP(64位) = 1100 1100 0000 0000 1100 1100 1111 1111 1111 0000 1010 1010 1111 0000 1010 1010
20
第二步:用子钥对64位数据加密
  • IP(64位) = L0(32位) + R0(32位)
  • 故
  • L0 (32位) = 1100 1100 0000 0000 1100 1100 1111 1111
    R0 (32位) = 1111 0000 1010 1010 1111 0000 1010 1010
21
第二步:用子钥对64位数据加密
  • 从L0和R0开始,循环16次,得出L1R1到L16R16,依据递推公式:
  • Ln = R(n-1)
    Rn = L(n-1) + f (R(n-1),Kn)
  • 其中除了Kn为48位,其他变量及函数均为32位。
  • 其中+号表示异或XOR运算,函数f 从一个32位的数据块R(n-1)和一个48位子钥Kn得到一个新的32位数据块。(算法从略)
22
第二步:用子钥对64位数据加密
  • 到此为止,我们得到了16对32位的数据块,即
    L1R1, L2R2, L3R3, …, L16R16
  • 最后一对L16R16就是我们需要的。


23
第二步:用子钥对64位数据加密
  • 继续对R16L16(64位)运用一次重排列:
    IP-1(8×8)
  • 40 8 48 16 56 24 64 32
  • 39 7 47 15 55 23 63 31
  •  38 6 46 14 54 22 62 30
  •  37 5 45 13 53 21 61 29
  •  36 4 44 12 52 20 60 28
  •  35 3 43 11 51 19 59 27
  •  34 2 42 10 50 18 58 26
  •  33 1 41 9 49 17 57 25
24
第二步:用子钥对64位数据加密
  • 即在
    L16(32位) = 0100 0011 0100 0010 0011 0010 0011 0100
    R16(32位) = 0000 1010 0100 1100 1101 1001 1001 0101
    R16L16(64位) = 00001010 01001100 11011001 10010101 01000011 01000010 00110010 00110100
  • 时,对R16L16运用IP-1,得
    IP-1(64位) = 10000101 11101000 00010011 01010100 00001111 00001010 10110100 00000101 = 85E813540F0AB405
  • 从而,经过以上步骤,最终从明文
    M = 0123456789ABCDEF
    得到密文
    C = IP-1 = 85E813540F0AB405
  • 以上为加密过程,要解密,依次反向计算即可。
25
多层 DES
  • DES 算法可能是运用最广的对称加解密算法,但由于密钥长度较短,导致安全性不高。
  • 故在安全性占首要地位的应用场合如金融业等,采用多个不同密钥(K1, K2, K3)的多层DES加解密。
  • 这些多层DES系统被广泛应用,由此衍生出Triple DES, G-DES, DES-X, LOKI89和ICE等对称加解密系统。
26
多层 DES 加解密过程
  • 以Triple DES为例说明。
  • 加密过程:
    1. 以 K1 加密
    2. 以 K2 解密
    3. 以 K3 加密
  • 解密过程 (密钥顺序及应用方向与加密过程相反):
    1. 以 K3 解密
    2. 以 K2 加密
    3. 以 K1 解密


27
多层 DES 衍生
  • 如果令K1=K3,则实际进行了双密钥加解密,即Triple DES加解密。
  • 如果令K1=K2=k3,则实际进行了普通单密钥加解密。
28
RSA 加解密算法
  • 与DES不同,RSA算法中,每个通信主体都有两个钥匙,一个公钥一个私钥。
  • 一般应用过程为:
29
RSA 一般应用过程
30
RSA 具体算法:公私钥生成
  • 随机选定两个大素数p, q.
  • 计算公钥和私钥的公共模数 n = pq .
  • 计算模数n的欧拉函数 φ(n) .
  • 选定一个正整数e, 使1 < e < φ(n) , 且e与φ(n)互质.
  • 计算d, 满足 de ≡ 1  (mod φ(n) ), (k为某个正整数).
  • n与e决定公钥, n与d决定私钥.
31
RSA 具体算法:加解密
  • 小张欲给小李发一个消息M, 他先把M转换为一个大数m < n, 然后用小李的公钥(n & e)把m加密为另一个大数:
    c = me    mod n
  • 小李收到小张发来的大数c, 着手解密. 通过自己的私钥(n & d), 得到原来的大数m:
    m = cd    mod n
  • 再把m转换为M, 小李即得到小张的原始消息.
32
RSA 具体算法原理
  • 这个过程之所以能通过, 是因为有如下等式:
  • cd ≡(me)d ≡med    (mod n)


33
The End