文章目录
现代密码学
第一章 引言
1. Kerckhoffs 原则
系统的保密性不依赖于对加密体制或算法的保密,而依赖于密钥。(p6)
所以现代密码学(基于柯克霍夫原则)的安全性,是密钥而非算法的安全性。
2.数字证书的作用
- 身份认证作用,由于在网络中传递信息的双方互相不能见面,利用数字证书可确认双方身份,防止他人冒充。
- 保密性作用。通过使用数字证书对信息加密,只有接收方才能阅读加密的信息,从而保证信息不会被他人窃取。
- 完整性作用。利用数字证书可以校验传送的信息在传递的过程中是否被篡改过或丢失。
- 防抵赖作用。利用数字证书进行数字签名,可准确标示签名人身份及验证签名内容,因此签名人对签名及签名内容具有不可否认性,其作用与手写签名具有同样的法律效力。
3. 古典密码
古典密码的加密是将明文的每一个字母替换成字母表中另一个字母,替换前先把字母用十进制表示并带入计算
-
仿射密码(单表代换)
加密:
c = a ∗ m + b ( m o d 26 ) c = a*m + b(mod 26) c=a∗m+b(mod26)
解密:
m = a − 1 ( c − b ) ( m o d 26 ) m = a^-1(c-b)(mod26) m=a−1(c−b)(mod26)
a,b是密钥,0 <= a <= 25;0 <= b <= 25。且 gcd(a,26) = 1,表示a,26 互素, a^-1 是 a 关于模 26 的乘法逆元,a^-1*a mod 26 = 1;
eg:
-
playfair密码(多表代换)
-
- eg:
如果明文是:P=playfair cipher
明文两个一组: pl ay fa ir ci ph er
对应密文为: LA YF PY RS MR AM CD
加密方法:
P1、P2同行:
对应的C1和C2分别是紧靠P1、P2右端的字母。其中第一列被看作是最后一列的右方。(解密时反向)
P1、P2同列:
对应的C1和C2分别是紧靠P1、P2下方的字母。其中第一行看作是最后一行的下方。(解密时反向)
P1、P2不同行、不同列:
C1和C2是由P1和P2确定的矩形的其它两角的字母,并且C1和P1、C2和P2同行。(解密时处理方法相同)
P1=P2:
则插入一个字母于重复字母之间,并用前述方法处理。
若明文字母数为奇数时:
则在明文的末端添加某个事先约定的字母作为填充。
第二章 流密码
线性反馈移位寄存器
反馈函数 f 是 a1 … an 的 n 元布尔函数,也就是说每次向右移位一位,输出 a1, 然后 an 由 f() 补上
看一道非线性的例题:
a3 | a2 | a1 | 输出 |
---|---|---|---|
1 | 0 | 1 | 1 |
1 | 1 | 0 | 0 |
1 | 1 | 1 | 1 |
0 | 1 | 1 | 1 |
1 | 0 | 1 | 1 |
1 | 1 | 0 | 0 |
输出序列为:1011 10… 可以发现序列为 4。
线性反馈移位寄存器通式:
f = cna1 ^ cn-1a2 ^ ... ^ c1an
第三章
DES
DES(Data Encryption Standard)是迄今为止世界上最为广泛使用和流行的一种分组密码算法,它的分组长度为64比特,密钥长度为56比特
加密流程
1.初始置换,逆初始置换
64 比特明文按位放入初始置换表中
16轮结构结束后逆初始置换,同样有个逆初始置换表
我们也可以发现,这两个置换是互逆的。(1放在40,40又放回1去)
2.轮结构
F(Ri-1,Ki)
=> 32 位 Ri-1 进入 E 盒扩展
和这一轮的密钥 Ki 异或 运算。
=> 然后进入 S 盒压缩回 32 位
=> 进入 p 盒再置换
由8个S盒组成,每个S盒的输入长为6比特、输出长为4比特。
对每个盒Si,其6比特输入中,第1个和第6个比特形成一个2位二进制数,用来选择Si的四个行中的一个。6比特输入中,中间4位用来选择列。行和列选定后,得到其交叉位置的十进制数,将这个数表示为4位二进制数即得这一S盒的输出。例如,S1 的输入为011001,行选为01(即第1行),列选为1100(即第12列),行列交叉位置的数为9,其4位二进制表示为1001,所以S1 的输出为1001。
参考 S1 盒
3.密钥的选择
- 56比特密钥首先经过一个置换运算,然后将置换后的56比特分为各为28比特的左、右两半,分别记为C0和D0
- 在第i 轮分别对C i-1和Di-1进行左循环移位,所移位数由下表给出
- 移位后的结果做为求下一轮子密钥的输入,同时也作为置换选择2的输入。通过置换选择2产生的48比特即为本轮的子密钥
然后作为函数 F 的输入。
下一轮密钥的获取 重复 第2 第3 步骤即可
第四章
模运算
模运算有以下性质:
(1)
(2)
。
(3)
。
模指数运算
费尔马(Fermat)定理
欧拉函数
设 n 是一正整数,小于 n 且与 n 互素的正整数的个数称为 n 的欧拉函数,记为
。
性质:
!
欧拉定理
若 a 与 n 互素,则
中国剩余定理
ei = Mi ^ -1 % mi
eg:
a1 = 2,a2 = 3,a3 = 2; m1 = 3,m2 = 5,m3 = 7
M = 3*5*7 = 105
M1 = 35
M2 = 21
M3 = 15
e1 = 35 ^ -1 % 3 = 2
e2 = 21 ^ -1 % 5 = 1
e3 = 15 ^ -1 % 7 = 1
所以 x mod 105 = 35 * 2 * 2 + 21 * 1 * 3 + 15 * 1 * 2 mod 105 = 233 mod 105 = 23
x = 105 * k + 23
RSA
RSA算法是1978年由R. Rivest, A. Shamir和 L. Adleman提出的一种用数论构造的、也是迄今为止理论上最为成熟完善的公钥密码体制,该体制已得到广泛的应用。
算法描述
密钥的产生
-
两个保密大素数 p,q
-
n = p*q,φ(n) = (p-1)*(q-1)
-
选一整数 e ,1 < e < φ(n),gcd{φ(n),e} = 1
-
计算 d ,d 满足 d*e mod φ(n) = 1 mod φ(n)
也就是说 d 为 e 的乘法逆元,可以用扩展欧几里得计算出
-
{e,n} 为公开钥,{d,n} 为秘密钥
加密
解密
椭圆曲线密码体制
密码中普遍采用的是有限域上的椭圆曲线,其中最为常用的是由方程
那么如何计算 Ep(a,b) 呢?
-
对每一 x( 0 <= x < p) ,计算 y mod p = (x^3 + ax + b ) mod p
-
决定 (1) 中求得的值在模 p 下是否有平方根,如果没有,则曲线上没有与这一 x 相对应的点。
如果有,则求出两个平方根(y =0 时只有一个平方根)。
eg:
p = 23,a = 1,b = 1, P =(3,10),Q =(9,7),求 2P,P+Q
λ mod 23 = -1/2 mod 23
-2* λ mod 23 =1 mod 23
λ = 11;
P + Q = (17,20)
λ = 6;
2P = (7,12)
ElGamal密码体制
其密钥产生过程如下:首先选择一素数 p 以及两个小于 p 的随机数 g 和 x ,计算
以(y,g,p)作为公开密钥,x 作为秘密密钥。
加密过程如下: 设欲加密明文消息 M ,随机选一与 p - 1 互素的整数 k,计算
密文为:C = (C1,C2)
解密过程如下:
利用椭圆曲线实现ElGamal密码体制。
取 Ep(a,b) 的一个生成元 G, Ep(a,b) 和 G 作为公开参数
密文:用户 A 选Na作为秘密钥,并以 PA = NaG 作为公开钥。任一用户 B 若想向 A 发送消息 随机正整数k,将明文消息 m嵌入到曲线上得点Pm
A 解密时,以密文点对中的第二个点减去用自己的秘密钥与第一个点的倍乘,即
第五章 密钥分配与密钥管理
公钥加密体制的密钥管理
Diffie-Hellman 密钥交换
Diffie-Hellman密钥交换是W. Diffie和M. Hellman于1976年提出的第一个公钥密码算法,已在很多商业产品中得以应用。算法的惟一目的:使得两个用户能够安全地交换密钥,得到一个共享的会话密钥,算法本身不能用于加、解密。
算法的安全性基于求离散对数的困难性
算法:
p 是大素数,a 是 p 的本原根(a ^ φ§ mod p = 1),p 和 a 作为公开的全程元素。
用户 A 选择一保密的随机整数 XA ,并将 YA = a ^ XA mod p 发送给用户 B 。类似地,用户 B 选择一保密的随机整数 XB ,并将 YB = a ^ XB mod p 发送给用户A。
然后 A 和 B 分别由 K = YB ^ XA mod p 和 k = YA ^ XB mod p 计算出的就是共享密钥
第六章 消息认证和哈希函数
SHA
下面说明如何由当前的输入分组(512比特长)导出 Wt(32比特长)。前16个值(即 W0 - W15 )直接取为输入分组的16个相应的字,其余值(即 W16 - W79 )取为: