进阶秘密钥匙系统

 

进阶秘密钥匙系统

3-1 密码系统的安全性

·         破解因素:『计算上的安全(Computationally Secure)

·         密码系统的抗拒能力:

o        算法的复杂度:

§         混淆 (Confusion):密文与钥匙之间的复杂度。

§         扩散 (Diffusion):明文与密文之间的复杂度。

o        分布式暴力攻击法:

·         『增加钥匙长度』

o        提高破解的困难度。

o        可能导致传输效益降低。

o        美国出口管制。

3-2 秘密钥匙系统之摘要

·         基本模型 (Festel 模型)

·         相关参数:

o        区块大小:64 bits

o        初始排列

o        排列格式:交叉排列

o        S-替代盒

o        钥匙长度

o        子钥匙数量

o        重复回合次数

o        输出转换

3-3 Triple DES 密码系统

·         2 把钥匙:56 bits * 2

o        加密:C = EK1[DK2[EK1[P]]]

o        解密:P =  DK1[EK2[DK1[C]]]

o        钥匙:K = K1 || K2 (排列组合)

·         3 把钥匙:56 bits *3

o        加密:C = EK3[DK2[EK1[P]]]

o        解密:P = DK1[EK2[DK3[C]]]

o        钥匙:K = K1 || K2 || K3

3-4 IDEA (International Data Encryption Algorithm) 

      密码系统

·         特点:

o        区块长度64 bits

o        初始转换:分为 4 个群组,每群组 16 bits (DES 为 2 群组)。

o        钥匙长度128 bits (DES 为 56 bits)。

o        子钥匙52 把/16 bits (DES 16 把/48 bits)

o        重复次数8 次,每次 6 把子钥匙 (DES 16 次/1 把)

o        S-替代盒3 种运算器。

o        输出转换:类似 S-替代盒,使用 4 把子钥匙。

3-4-1 加密运作程序

3-5-1 IDEA 子钥匙产生

·   128 bits 母钥匙分为 8 个群组,每组 16 bits。

·   取出 8 把子钥匙

·   左旋 25 bits

·   再取出 8 把子钥匙,再左旋 25 bits。

3-5-2 编码器的设计

·   XOR 运算子:位之间的 XOR 运算。

·   216 余数』加法运算子:加法取 216 的余数。

·   :加法取 216 +1 的余数。

·         输出转换器

3-5-3 IDEA 操作模式

·         DES 系统相同:

·   电子密码书模式

·   密文区段反馈模式

·   J-位密文反馈模式

·   J-位输出反馈模式

3-6 RC5 密码系统

·   RSA Data Security Inc. 公司主要产品。

·   允许使用者自行定义:

o      钥匙长度

o      区段大小

o      重复编码次数

3-6-1 RC5 参数

·   由三个参数所描述,如 RC5-w/r/b 表示:

·   w :表示每字的位数 (两个字符),如区块长度为 64 bits,则 w = 32。

·   r :编码回合次数,由 0, 1, ..., 255。越高混淆程度越高。

·   b :钥匙长度,以字节表示。

·   譬如:RC5-32/12/16,则表示区块为 64 bits、编码为 12 次、钥匙长度为 128 bits。

3-6-2 编码程序

·   子钥匙数目t = 2r +2,S[0], S[1], ..., s[t-1]。

·   钥匙长度w (如 32 bits)

·   初始排列与每一回合都使用到 2 把钥匙

·   五种运算子:

o      加法运算子

o      减法运算子

o      XOR 运算子

o      左移旋转运算子

o      右移旋转运算子

·   加密运算程序:

LE0 = A + S[0]

RE0 = B + S[1]

For n = 1 to r do

LEn = ((LEn-1 REn-1) <<< REn-1 ) + S[2 n ]

REn = ((REn-1 LEn ) <<< LEn ) + S[2 n +1];

·   解密运算程序:

for n = r down to 1 do

RDn-1 = (((RDn – S[2n+1]) >>> LDn) LDn)

LDn-1 = (((LDn – S[2n]) >>> RDn-1) RDn-1);

B = RD0 – S[1];

A = LD0 – S[0];

3-7 RC5 操作模式

·   RC5 区块加密:电子密码书模式 (DES-ECB 模式)

·   RC5-CBC :密文区块串接模式 (DES-CBC 模式)

·   RC5-CBC-pad:可处理任意长度的明文,不足 2w 部份以空白长度表示,并将其补满。

·   RC5-CTS:密文盗用 (Cipher Text Stealing) 模式。

3-7-1 RC5-CTS 模式

·         可处理任意长度的明文,并且明文与密文长度相同。

·         加密程序:

1.  利用传统的 CBC 技巧,对前面(N-2)个区段加密。

2.  PN-1 与前一回合所产生的密文区段 CN-2 执行 XOR 运算,所产生的结果为 XN-1

3.  XN-1 加密编码成为 YN-1

4.  选取 YN-1 的前面 L 个位成为 CN,并舍弃其它未选入的位。

5.  将讯息最后部分(PN)以 0 补足区块的长度(2w - L),再与前一回合所产生的密文区块 YN-1 执行 XOR 运算,所产生的结果为 XN

6.  XN 加密编码成为 CN-1

7.   则所生的密文为 C1 || C2 || … || CN-2 || CN-1 || CN

·         解密程序:

1.  利用传统的 CBC 技巧,对前面(N-2)个区块解密。

2.  CN-1 解密编码后成为 YN-1

3.  YN-1 与前一回合的 CN-2 执行 XOR 运算后成为 XN-1

4.   选取 XN-1 前面的 L 个位成为 PN,并抛弃未选取部分。

5.   将密文最后部分(CN)以 0 补足区块的长度(2w - L),再经过解密编码成为 YN

6.   YN 与前一回的密文区块 CN-1 执行 XOR 运算,所产生的结果为 PN-1

7.  则所解密出来的明文为 P1 || P2 || … || PN-2 || PN-1 || PN

 

3-8 进阶加密标准 

     (Advanced Encryption Standard, AES)

·   美国 NIST 标准

·   采用 Rijndael 算法

·   合乎条件:

o      加密编码法必须是非保密的。

o      算法必须是公开的。

o      加密编码法必须是自由使用的。

o      至少 128 bits 的加密区块。

o      钥匙长度做少需要 128, 192, 256 个位。

·   Rijndael 算法特性:

o      区块长度:128, 192, 256 个位。

o      钥匙长度:AES-128、AES-192、AES-256 密码系统。

o      编码算法:『反复区段编码』(Iterated Block Cipher, IBC)

3-9-1 AES 算法参数

·   明文区段数目 (Nb) 32 bits 加密区段的数目。

·   钥匙区段数目 (Nk) 32 bits 钥匙区段的数目。

·   重复次数 (Nr) :加密/解密编码的次数。

Nr = 6 + max (Nb, Nr)

·   标准规范:

o      AES-128

o      AES-192

o      AES-256

o      明文及密文长度:128 bits

3-9-2 AES-128 范例

·   明文区块:128 bits,Nb = 4

·   钥匙长度:128 bits,Nk = 4

·   重复次数:Nr = 6 + max (Nb, Nr) = 10

·         AES-128 加密算法架构

3-9-3 运作程序

·   每区段为 8 bits

·   输入数组 in

·   状态数组 (State) S

·   输出数组 out

3-10 AES 加密编码

·   回合钥匙加法运算:AddRoundKey()

·   字节取代:SubBytes()

·   列移位运算:ShiftRows()

·   混合行运算:MixColumns()

Cipher (byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)])

/* in 为输入数组、out = 输出数组、w = 钥匙字符数组 */

Begin

Byte state[4, Nb]

/* 明文数组复制到状态数组上 */

state = in

/* 0 回合编码 */

AddRoundKey(state, w[0, Nb-1])

/* 1 Nr – 1 回合编码 */

for round = 1 step 1 to Nr-1

SubBytes(state)

ShiftRows(state)

MixColumns(state)

AddRoundKey(state, w[round*Nb, (round+1)*Nb-1])

end for

/* Nr 回合编码 */

SubBytes(state)

ShiftRows(state)

AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])

/* 密文数组输出 */

out = state

end

 

  •  字节取代运算 (Byte Substitution Operation)
    • S-Box 取代盒

  • 位移列运算 (Shift Row Operation)

  • 混合行运算 (Mix Column Operation)

  • 回合钥匙加法 (Round Key Addition)

3-11 AES 钥匙扩充

·   钥匙字符单位:W[i],  32 bits

·   钥匙字符数量:Nb * (Nr + 1)

·   AES-128 需要:44 个钥匙字符

·   每一回合使用 4 个字符

  • 算法

KeyExpansion(byte key[4*Nk], word w[Nb * (Nr+1)], Nk)

/* 主钥匙输入 key[],子钥匙字符输出 w[],钥匙字符数量输入 Nr */

/*Nk = 4AES-128),Nk = 6AES-192),Nk = 8AES-256*/

(1)begin

(2)   word temp

(3)   i = 0

(4)   while (i < Nk)   /*将主钥匙填入钥匙区块,第 0 回合使用 */

(5)      w[i] = word(key[4*i], key[4*i + 1], key[4*i +2], key[4*i + 3])

(6)      i = i +1

(7)   end while

(8)  i = Nk   

(9)  while (i < Nb * (Nr + 1))  /* 演算第 1 Nr 回合所需钥匙 */

(10)      temp = w[i –1]

(11)      if (i mod Nk = 0)   /* 子钥匙区块周期的开始,如图 3-18 所示 */

(19)                            temp = SubWord(RotWord(temp)) XOR Rcon[i/Nk]

(19)                 else if (Nk > 6 and I mod Nk = 4)  /* AES-256 适用 */

(19)                            temp = SubWord(temp)

(19)                 end if

(19)                 w[I] = w[I – Nk] XOR temp

(19)                 I = I +1

(18) End while

(19)end

  • 算法摘要

3-12 AES 解密算法

·   InvShiftRows():ShiftRows() 的反函数

·   InvSubBytes():SubBytes() 的反函数

·   InvMixColumns():MixColumns() 的反函数

·   AddRoundKey()

  • 算法

InvCipher(byte in[4*Nb], byte out[4*Nb], word w[Nb *(Nr+1)])

Begin

byte state[4, Nb]

/* 明文数组填入状态数组中 */

state = in

/* 0 回合编码 */

AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])

/* 1 Nr -1 回合编码 */

for round = Nr-1 step –1 downto 1

InvShiftRows(state)

InvSubBytes(state)

AddRoundKey(state, w[round*Nb, (round+1)*Nb – 1])

InvMixColumns(state)

end for

/* Nr 回合编码 */

InvShiftRows(state)

InvSubBytes(state)

AddRoundKey(state, w[0, Nb-1])

/* 密文区块输出 */

out = state

End begin

 

3-11 其它密码系统

·   CAST-128 加密算法:

o      典型 Feistel 架构

o      RFC 2144 标准

o      明文/密文区块:64 bits

o      钥匙长度: 40 ~ 128 bits

o      编码处理:16 回合

·   Blowfish 加密算法:

o      明文/密文区块:64 bits

o      钥匙长度:32 ~ 448 bits

·   RC2 加密算法

o      明文/密文区块:64 bits

o      钥匙长度:8 ~ 1024 bits

o      适合 16 bits 微处理机处理

·   RC4 加密算法

o      串流加密算法

o      钥匙长度:8 ~ 1024 bits

 

你可能感兴趣的:(算法,加密,解密,byte,encryption)