RSA密码系统

RSA是在Diffe-Hellman算法问世两年之后,由Rivest、Shamir和Adelman在MIT研究出的,并于1978年公布。


RSA系统利用这样的事实:模运算中冥的自乘数是容易解的。RSA的加密方程为:

C=memodn

这里,密文C是信息m自乘指数幂e并除以模数n后的余数。这可以由任何一个知道信息m、模数n和加密指数e的计算机迅速完成。另一方面,将这一个过程反过来,根据 em 根求膜n。对任何一个不知道n因子的人来说,这是很困难的。
RSA系统非常适合用于制作用于制作数学特征和某些加密应用。但是,常常要求制作保密密钥,以便直接用于保存密钥保密系统,这需要使用另外一个单向函数。
y=gxmodp

(在g自乘幂x后,然后除以p,x为余数)

RSA特点

  1. 密钥配发十分方便,用户的公用密钥可以像电话号码一样公开,使用方便。这对网络环境众多用户的系统,密钥管理更加便捷。每个用户只需要只有一对密钥即可实现与网路中任何一个用户的保密通信。
  2. RSA加密原理基于单向函数,非法接受者利用公用密钥不可能在有限的时间内推算出秘密密钥,这种算法的保密性好。
  3. RSA在用户确认和实现数组签名方面优于现有的其他加密机制。
  4. RSA的加密速度是一个缺陷。由于进行的都是大数运算,使得RSA最快的情况也比DES慢上好几倍。由于这些限制,RSA目前主要用于网络环境中少量的数据加密。
  5. RSA数字签名是一种强有力的认证鉴别方式,他可以确保接收方能够判断发送方的真实身份。

是不是有点一头雾水?别急,前面的都不重要,到这里我们只需要脑子里有一点概念,RSA实现原理是于一个单向函数就OK了。下面我们将以例子的形式来进行分析说明。

RSA公开密钥密码系统

首先我们先梳理RSA的使用机制。

RSA要求每一个用户拥有自己的一种密钥。
* 公开的加密密钥,用来加密明文
* 保密的解密密钥,用来解密密文
这是一对非对称密钥,又称为公用密钥体制(Public Key Cryptosystem )。

在RSA密钥体制运行中,当A用户发送文件给B用户时,A用户用B用户公开的密钥加密明文,B用户则用解密密钥解读密文。

下面将用一个简单的例子来说明RSA公开密钥密码系统的工作原理。

  1. 随机取两个质数。
    例如p=11,q=13.(实际应用中,着两个质数越大,越难破解)
  2. 计算p和q的乘积n。
    n = p*q = 11*13 = 143
    (此时n的长度就是密钥的长度,此时n=143,转化成二进制为1000 1111 ,一共是8位,实际应用中一般用1024-2048位)
  3. 计算n的欧拉函数φ(n)。
      由公式φ(n) = (p-1)(q-1)
      可得出此时φ(n) = 120。
  4. 随机选择一个与φ(n)互质的数,取值范围为1~φ(n)。
    例如这里我们随机选择 e = 7。(称为“公开指数”)
  5. 计算e对于φ(n)的摸反元素d。
    d的值需要满足 e×d=1mod(φ(n)) 这个等式相当于 (e×d)mod(φ(n))=1 ,可得出d = 103。其实7*103 = 721除以120确实余1。
    到此,我们的公开密钥和私有密钥都已经计算完毕。此时最开始取的两个质数已经没有作用了,但是不能泄露。
  6. 分装密钥
    其实(n,e)就是公开密钥(n,d)就是私密密钥
    那么此时的公开密钥是(143,7),私密密钥是(143,103)
  7. 利用公开密钥加密明文
    设想需要发送机密信息(明文,即未加密的报文)s = 85 ,已经获得了上面的公钥(n,e) = (143,7)。于是算出加密值:
    c=Semodn=857mod143=123
  8. 利用解密密钥解密密文
    在收到上面加密后的密文c = 123 后,在利用上面的私密密钥(n,d) = (143,103)来还原本来的信息。
    s=cdmodn=123103mod143=85

    通过上面的私密密钥的解密,我们就得到了真正的信息s=85。
  9. 私钥解密的证明
    有没有好奇,为什么我们通过私密密钥还原密文就可以得到原来的信息。下面来我们来进行证明:
    就本例而言:其实也就是证明:
    cd=s(mod(n))

    根据加密规则: se=cmod(n) ,可以得到:
    c=Sek×n

    将c代入解密规则,得:
    (sek×n)d=s(mod(n))

    化简,得:
    Sed=S(mod(n))

    由于 e×d=1(mod(φ(n))) ,有
    e×d=hφ(n)+1

    将ed代入,得:
    Shφ(n)+1=s(mod(n))

    接下来,分成两种情况证明上面的式子:
    (1) s与n互质。
    根据欧拉定理,此时:
    sφ(n)=1(mod(n))

    得到:
    (sφ(n))h=s(mod(n))

    得证。
    (1) s与n不互质。
    比较复杂,就不做详细证明。具体请参考博客
    关键一点,设s = kp;然后运行欧拉定理。

在上面的例子中,n= 143只是示意的,用来说明RSA的计算过程。从143找出他的质数因子11和13不困难。但对于巨大的指数q和p,计算乘积 n=p×q 非常简单,但是逆运算却是非常难的。这是一种“单向性”的预算。相应的函数称为“单向函数”。任何单向函数都可以作为某一种公开密钥密码系统的基础,而单向函数的安全性也就是这种公开密钥密码系统的安全性。

还是不是很理解?没关系,可以参考源码:

待添加

或者,下载加密演示exe

–资源预计明天上传,正在编写中。

猜你喜欢

转载自blog.csdn.net/Reoger/article/details/71159903
RSA