常见密码算法计算
2022-12-16 10:14:24 0 举报
AI智能生成
常见密码算法计算
作者其他创作
大纲/内容
RSA:公私钥生成
解 释:
该计算方法用于RSA公私钥生成,其中P、Q为两个大素数,E为公钥,D为私钥。
计算过程:
1、选择两个随机的大素数P、Q,并计算φ(N)=(P-1)(Q-1)
2、选择E,需满足E与φ(N)互为素数(即两者的公约数只有1),且1<E<φ(N)
3、根据公式E*D mod φ(N) =1,且1<D<φ(N),求D
实 例:
1、选择P=3、Q=11,则φ(N)=(P-1)(Q-1)=2*10=20
2、选择E=3
3、根据3*D mod 20 =1,得D=7,27,47等;然后根据1<D<20,得D=7
RSA:签名和验证
解 释:
使用RSA私钥(D,N)、公钥(E,N)进行消息或消息的杂凑值签名和验证。注:模数N=P*Q
计算过程:
1、已知私钥(D,N)、公钥(E,N)、消息M
2、对消息进行杂凑计算,Z=H(M)
3、签名:S=Z^D mod N
4、验证:Z'=S^E mod N
5、比较Z'=Z,验证签名
实 例:
1、已知私钥(7,33)、公钥(3,33)、消息M
2、假设消息M的杂凑值Z=H(M)=13
3、签名:S=Z^D mod N=13^7 mod 33=7
4、验证:Z'=S^E mod N=7^3 mod 33=13
5、Z'=Z=13,验证成功
RSA:加密和解密
解 释:
使用RSA私钥(D,N)、公钥(E,N)进行数据加密和解密。注:模数N=P*Q
计算过程:
1、已知私钥(D,N)、公钥(E,N)、明文M
2、加密:密文C=M^E mod N
3、解密:明文M'=C^D mod N
4、比较M'=M,验证结果
实 例:
1、已知私钥(7,33)、公钥(3,33)、明文13
2、加密:密文C=M^E mod N=13^3 mod 33=19
3、解密:明文M'=C^D mod N=19^7 mod 33=13
4、比较,M'=M,解密成功
DH密钥协商
解 释:
通信双方仅通过交换一些可以公开的信息就能够生成出对称密钥。
计算过程:
1、通信双方Alice、Bob 中的任意一方生成两个素数P、G,并发送给对方
2、Alice生成一个1~P-2 之间随机数A,并计算G^A%P发送给Bob
3、Bob生成一个1~P-2 之间随机数B,并计算G^B%P发送给Alice
4、Alice计算的对称密钥=(G^B%P)^A%P=G^(A*B)%P , Bob计算的对称密钥=(G^A%P)^B%P=G^(A*B)%P ,公式相同
实 例:
1、P=23、G=5
2、A=6,则G^A%P=5^6%23=8
3、B=15,则G^B%P=5^15%23=19
4、对称密钥=G^(A*B)%P =5^(6*15)%23=2
SM2:公私钥生成
计算过程:
1、随机产生一个秘密变量dA,1<d<n-2
2、公钥PA=[dA]G= (xA,yA)
SM2:签名和验证
解 释:
使用SM2私钥dA和公钥PA=(xA,yA)进行消息或消息的杂凑值签名和验证。
计算过程:
1、签名流程
1)ZA=SM3(ENTLA || IDA || a || b || xG || yG|| xA || yA)
2)杂凑值e=SM3(ZA || M)
3)签名者选取随机数k,k满足1<k<n-1
4)计算kG= (x1,y1)
5)计算r=(e+x1) mod n,若r=0或r+k=n,则重新选取随机数k
6)计算s = (1 + dA)^(-1)(k - r*dA) mod n,若s=0,则重新选取随机数k
7)组合r和s成签名值
2、验证流程
1)1<r<n-1、1<s<n-1且r+s≠n
2)计算(x'1,y'1)=sG+(r+s)P
3)ZA=SM3(ENTLA || IDA || a || b || xG || yG|| xA || yA)
4)杂凑值e'=SM3(ZA || M')
5)计算r'=(e'+x'1) mod n,若r'=r,则签名验证通过
对称算法填充方式
解 释:
在对称加算法的分组加密模式中,要求明文必须是加密块的整数倍,这就要求必须对明文进行填充。备注:对密钥的填充都按照密钥长度采用Zero填充。
填充方式:
1、Zero:先获取需要填充的字节长度 = (块长度 – (数据长度 % 块长度)),再填充字节序列中所有字节填充为0x00
2、ANSIX923 :在填充时首先获取需要填充的字节长度 = (块长度 – (数据长度 % 块长度)),在填充字节序列中最后一个字节填充为需要填充的字节长度值, 填充字节中其余字节均填充数字零。
3、PKCS7/PKCS5:在填充时首先获取需要填充的字节长度 = (块长度 – (数据长度 % 块长度)),在填充字节序列中所有字节填充为需要填充的字节长度值。
4、ISO10126:在填充时首先获取需要填充的字节长度 = (块长度 – (数据长度 % 块长度)),在填充字节序列中最后一个字节填充为需要填充的字节长度值,填充字节中其余字节均填充随机数值。
实 例:
1、Zero:假定块长度为16,数据长度为13,则填充字节数等于3,
数据为: FF FF FF FF FF FF FF FF FF FF FF FF FF
填充结果为:FF FF FF FF FF FF FF FF FF FF FF FF FF 00 00 00
2、ANSIX923 :假定块长度为16,数据长度为13,则填充字节数等于3,
数据为:FF FF FF FF FF FF FF FF FF FF FF FF FF
填充结果为:FF FF FF FF FF FF FF FF FF FF FF FF FF 00 00 03
3、PKCS7/PKCS5:假定块长度为16,数据长度为13,则填充字节数等于3,
数据为: FF FF FF FF FF FF FF FF FF FF FF FF FF
填充结果为:FF FF FF FF FF FF FF FF FF FF FF FF FF 03 03 03
4、ISO10126:假定块长度为16,数据长度为13,则填充字节数等于3,
数据为:FF FF FF FF FF FF FF FF FF FF FF FF FF
填充结果为:FF FF FF FF FF FF FF FF FF FF FF FF FF 81 A6 03
0 条评论
下一页