公钥系统之RSA原理验证

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

假设A和B通信,但他们之间不通过对称密钥,B有一个公钥 K+B 和一个私钥 KB 。为了与B实现通信,A首先需要获得B的公钥 K+B 对报文m进行加密,即 K+B(m) ;B收到A的加密报文后用私钥 KB 进行解密,即 KB(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%n x(y%(p1)(q1))%n 相等。应用这个结论,那我们的私钥解密为:

(me)d%n=m(ed%(p1)(q1))%n

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

(me)d%n=m1%n=mm<nn=pq,ed%(p1)(q1)=1,pq

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

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

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

举例验证

条件:

m<nn=pq,ed%(p1)(q1)=1,pq

取简单的值:

p=5,q=7

那么可以推导出:

n=pq=57=35,(ed1)%(p1)(q1)=0(ed1)%(51)(71)=0(ed1)%24=0

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

e=5,d=5

假设传输明文为:

m=3

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

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

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

你可能感兴趣的:(公钥系统之RSA原理验证)