编码密码学知识点回顾
距离学完编码密码学已经有一段时间了,当时只是将一些笔记和知识点记录在了纸质的本子上面,今天做一个回顾,也是做一个总结。
- 公钥密码 RSA
加密密钥与解密密钥不相同:(核心思想)
简化了密钥管理。
对公钥密码的管理要求:
1)接受方产生密钥容易
2)发送方用公钥对消息m产生密文c,
c=EpkB[m]
计算容易。
3)B用自己的密码对C解密,即:
m=DskB在计算上容易。
4)敌手对公钥pk_B求私钥SK_b在计算上不可行。
5)敌手有公钥PK_B和C恢复明文m在计算上不可行。
RSA算法:
- 选两个大素数
- 计算
n=p∗q,
ϕ(n)=(p−1)∗(q−1),
ϕ保密,n公开
- 随机选一整数
e∈(1,ϕ(n))满足:
gcd(ϕ(n),e)=1:gcd标识最大公约数。
- 计算
d,满足:
d∗e≡1(modϕ(n))(私钥d),
d∗e−kϕ(n)=1通过辗转相除可以求出
d
公开公钥
(e,n)
保密私钥
(d,n)
加密:
C=memod(n)
解密:
m=Cdmod(n)
- 哈希函数(单向哈希函数:MD5,MD4,SHA-1,SHA-256)
MD5
1)填充,最后一组的大小为512-64Bit,第一位填充1。其余后各位皆填充为0,填充为数1-512Bit
2)附加上消息的长度值。留出的64bit用来表示消息被填充前的长度值
3)缓冲区初始化。对4个寄存器A,B,C,D初始化
4)压缩函数处理。压缩函数有四轮处理过程。每一轮由16步迭代组成
5)输出消息摘要,产生128bit消息摘要。
消息M被分为512bit长的快,每个快又划分为十六个32bit的字块。
FF(A,B,C,D,M[K],S,T[I]):
B←B+((A+F(B,C,D)+M[k]+T[i])<<S)
GG,HH,II也都是类似的。使用Little-endian方式存储。
SHS-1:(输入消息长度为M)
1)压缩函数
:{A,B,C,D,E}←{(E+ft(B,C,D)+(A<<5)+Wt,A,(B<<30),C,D)},t是迭代步数
(0≤t≤79)
2)将输入消息块的16个字扩展成80个字以供压缩函数使用。
Wt=Mt,0≤t≤15
Wt=(Wt−3⨁Wt−8⨁Wt−14⨁Wt−16)<<1,16≤t≤79
使用Big-endian方式存储。
SHA产生160比特的消息摘要。
- 数字签名
Hash函数的安全要求。
1)单向性
2)抗弱碰撞
3)抗强碰撞
签名的特征:
1)能验证签名者的签名的日期和时间
2)能认证被签名的消息内容
3)能由第三方仲裁,以解决争执
数字签名标准(DSS),其核心是数字签名算法(DSA)
- DSA算法:ECDSA算法、RSA-PSS数字签名算法
ELGamal密码体制。
- 认证
双向:Denning协议[为了防止重放攻击,2,3中加入了时间戳]
NEUM93协议[为了防止时钟不同步,同时加入随机数和时间戳]
单向认证: