![](https://csdnimg.cn/release/download_crawler_static/87976509/bg7.jpg)
3、求得ƒ=(p-1)*(q-1);
4、寻找一个整数 n,使得 gcd(n,ƒ)=1;
5、寻找一个整数 s,0<s<ƒ,使得(n*s)=1(modƒ)。
(n,s)是公钥,他用来对消息进行加密;s 是私钥,用来对加密消息进行解密。如
果我们要对整数 a 进行 RSA 加密解密,其加密解密过程如下;
(1)利用公钥(n,z)对 a 进行加密,得到 c=a
n
(mod z),然后对 c 进行传输。
(2)利用公钥 s 对接受到的消息 c 进行解密,得到 d=c
s
(mod z)。那么 d 就是消息
a,即 d=a。
由于此过程之中私钥的保密性和对于大整数 z 的因式分解是困难的,这就保证了罅隙
传递过程中的安全性。
相比较对称密码算法,RSA 算法效率较低,速度较慢。因此 RSA 算法不适合在硬件实
现,同时也不适合加密大量数据信息。另外,随着大数分解算法的不断改进和高性能计算
机以及 Intennet 分布式计算机的不断提高,RSA 的安全性已受到严重的挑战。为了提高
RSA 算法的安全性,通常的办法就是使用更长的密钥。从而增加大整数分解的难度,延长
破解 RSA 私钥的时间。但是长密钥的使用会进一步降低它的加密效率和减慢其运算速度,
应用范围将受到影响。因此 RSA 算法一般用于较少的加密和数字签名。
1.3.2. DSA 算法
数字签名算法是由美国安全局开发并有美国国家标准技术研究所作为数字签名标准
的有一个部分进行发布烦人 DSA 是 Schnor 和 Gamal 算法的变形。
密钥长度是 512~1024 位。密钥长度越长,签名速度越慢,制约运算速度的主要因素
是大数的模指数运算。
DSA 签名中的参数描述:p 位 512~1024 位的大素数(可以在一组用户中共享);q 位 160
位长,并与(p-1)互素的因子(可以在一组用户中共享);g=h
p-1/q
modp,其中 h 小于
(p-1)且(h
p-1/q
mod p)>1;x 为用户秘密密钥,想 x<q,x≠0;y 为用户公开密钥,y=g
k
mod
p;m 为待签名数据;k 为小于 q 的随机数。(不同的 m 签名时不同)。
签名:r(签名)=(g
k
mod p)mod q;s(签名)=(k
-1
(H(m)+xr))mod q 。
验证:w=s
-1
modq、u
1
=(H(m).w)mod q 、u
2
=(r.w)mod q ; v=((g
u1
.y
u2)
mod p)mod
q。
如果 v=r,则验证成功。