码迷,mamicode.com
首页 > 其他好文 > 详细

公钥系统之RSA原理验证

时间:2015-07-31 14:58:36      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:

在公钥系统中,我们采用公钥加密,私钥解密的方式,使得报文能够比较安全的传输。

假设A和B通信,但他们之间不通过对称密钥,B有一个公钥K+B和一个私钥K?B。为了与B实现通信,A首先需要获得B的公钥K+B对报文m进行加密,即K+B(m);B收到A的加密报文后用私钥K?B进行解密,即K?B(K+B(m))=m。其中的加解密算法通常使用RSA(RSA取创始人Ron Rivest, Adi Shamir, Leonard Adleman的姓氏首字母)。

RSA工作方式

加密时,首先把报文m做e次的幂运算,然后做模n的算数运算,即me%n;解密则先把上述密文值做d次幂,再做模n运算,即(me)d%n=m(ed)%n

RSA工作原理推导

为了解开RSA工作原理的神秘面纱,需要使用数论中的一个神奇结论:如果p和q是素数,且有n=pq,则xy%nx(y%(p?1)(q?1))%n相等。应用这个结论,那我们的私钥解密为:

(me)d%n=m(ed%(p?1)(q?1))%n

注意,m<n,并且我们是这样选择e和d的:ed?1能被(p?1)(q?1)整除,等价地说ed%(p?1)(q?1)=1,由此可得:

(me)d%n=m1%n=mm<nn=pq,ed%(p?1)(q?1)=1,pq

于是乎,就得到了我们希望的结果:先对m做e次幂(加密)再做d次幂(解密),然后做模n的算数运算,就可得到原始报文m。另外通过颠倒上述公式的加解密次序,一样能得到原来的m。

(me)d%n=m=(md)e%n?K?B(K+B(m))=m=K+B(K?B(m))

因此B对外公开的公钥K+B为二元组(n,e),私钥K?B为二元组(n,d)

举例验证

条件:

m<nn=pq,ed%(p?1)(q?1)=1,pq

取简单的值:

p=5,q=7

那么可以推导出:

n=pq=5?7=35,(ed?1)%(p?1)(q?1)=0?(ed?1)%(5?1)(7?1)=0?(ed?1)%24=0

于是,我们可以简单起见,为了减少计算量,设ed?124的1倍,那么我们可取值

e=5,d=5

假设传输明文为:

m=3

那么综上所述,我们可以得出:

  • 加密,me%n=35%35=33

  • 解密,(me%n)d%n=335%35=3=m,因此对RSA加密后的密文解密得到的就是原始的明文m

版权声明:本文为博主原创文章,未经博主允许不得转载。

公钥系统之RSA原理验证

标签:

原文地址:http://blog.csdn.net/xplee0576/article/details/47162465

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!