Diffie-Hellman算法:这个算法不是用来加密和解密信息的,它的主要作用是用来交换用户对称加密算法的密钥的。
算法描述:假设用户A要与用户B通讯,在这个过程中有4个参数是公开的用户A的公钥PA,用户B的公钥PB,随机素数P和整数a,两个参数是非公开的用户A的私钥SA,用户B的私钥SB,他们的对称加密算法的密钥K= (PB)^SA mod p = (PA)^SB mod q 。
参数来源:其中素数p是随机生成的,整数a是随机生成,SA是用户A选取的自己的密钥,PA是通过PA = a^SA mod p计算出来的,SB是用户B选取的自己的密钥,PB是通过PB = a^SB mod p 计算出来的。其中SA ,SB要求小于P.
安全性保证:由于其他第三方人员只能通过互联网获取P、a、PA、PB没法计算出来他们两个之间的对称通讯密钥K。
Digital Signature Algorithm算法:这个算法也不是用来加密和解密信息的,它的主要作用是用来对信息进行签名的。
算法描述:假设用户A要对信息进行签名,用户B要对签名进行验证,在这个过程中有4个公开变量,一个选定的哈希算法,以及一个秘密变量。公开变量分别为一个随机大质数q(q的位数N要小于等于哈希函数的输出长度)。一个大质数P(p的位数N长度要大于2048比较安全且是64的倍数),要求p-1是q的倍数。一个数g,g=h^((p-1)/q) mod p ,其中h是随机数且要求 1<h<p-1,如果计算出来g等于1,则要重新选取h,常用的h=2。秘密变量为用户的私钥SA,另一个公开变量为用户公钥PA,其中PA=g^SA mod p.
安全性保证:由于其他人只能获取用户 p q g PA ,且无法从这四个参数中导出SA。
数字签名过程:
1.选取随机数K使得0<K<q
2.计算r,r=(g^k mod p) mod q 如果r=0重新选取k
3.计算s,s=1/k(H(m) + SA.r) mod q 如果s=0重新选取k,H(m)为信息m的哈希值
签名信息为(r,s)
签名验证过程:
1.如果0<r<q 且0<s<q签名无效
2. 计算w,w=1/s mod q
3. 计算u1,u1=H(m).w mod q
4. 计算u2,u2=r.w mod q
5. 计算v,v=(((g^u1).(PA^u2))mod p)mod q
6. 确认签名有效如果v=r
RSA算法:该算法既能用户数据加密也能用于数字签名。
算法描述:假设用户A使用RSA算法进行加密或签名,B用户解密或确认。在这一过程中有2个变量时公开的一个变量是秘密的。公开变量n是两个大质数的乘积(这两个大质数分别是p、q,其中p q要求位数一直且相距不能太近)。一个秘密变量SA,SA可以随机产生,但是要求SA与(p-1)*(q-1)互质。另一个公开变量PA, 要求 SA*PA mod (p-1)*(q-1) =1.
安全保证:已知n和PA很难计算出SA,大数分解很。
加密过程: 明文A,密文B
B= A^PA mod n;
解密过程: 明文A,密文B
A=B^SA mod n;
签名过程:信息A,签名以后信息B
B= A ^SA mod n;
验证签名:信息A,签名以后信息B;
如果A==B^PA mod n,签名呗确认。