RSA与ElGamal原理理解

  • Post author:
  • Post category:其他




RSA原理以及计算逻辑

RSA基于的基础数学难题是大质数分解难题

计算原理如下:



1. 寻找两个大质数



p

p






p





,



q

q






q





,如超过200位的大质数

基于素数定理可知,素数的分布规律在趋于无穷大的时候



π

(

x

)

\pi(x)






π


(


x


)





渐近于



x

/

l

o

g

x

x/logx






x


/


l


o


gx







所以在数字接近



1

0

200

10 ^ {200}






1



0











200













的时候,随机选择一个200位长度的数字是质数的概率是



1

/

l

n

(

1

0

200

)

1 / ln(10^{200})






1/


l


n


(


1



0











200










)







很显然,我们是不回去选择偶数的,所以概率可以扩大一倍,

于是大约有



1

/

(

2

/

l

n

(

2

0

200

)

)

=

230

1/(2 / ln(20^{200}))=230






1/


(


2/


l


n


(


2



0











200










))




=








230





个数中会找到一个质数。

基于拉宾概率素性检验可知,随机找一个正整数,只要通过100次米勒检验,那么该数字是合数的概率不足



(

1

/

4

)

100

<

1

0

60

(1/4)^{100}<10 ^ {-60}






(


1/4



)











100












<








1



0














60













。这个时候我们就可以基本认定改数字是质数了。

于是上述操作在计算机中可以极为轻松的得到。于是我们就有了两个大质数



p

,

q

p,q






p


,




q






2. 生成公私钥

  • 获得



    n

    =

    p

    q

    n=p \cdot q






    n




    =








    p













    q




  • 计算



    n

    n






    n





    的欧拉函数



    ϕ

    (

    n

    )

    =

    (

    p

    1

    )

    (

    q

    1

    )

    \phi(n) = (p-1)(q-1)






    ϕ


    (


    n


    )




    =








    (


    p













    1


    )


    (


    q













    1


    )






    注意:这是因为欧拉函数



    ϕ

    (

    n

    )

    \phi(n)






    ϕ


    (


    n


    )





    是一个乘性函数

  • 根据步骤1的方法再生成一个大于



    p

    ,

    q

    p,q






    p


    ,




    q





    的素数



    e

    e






    e






    这样即满足了



    (

    e

    ,

    ϕ

    (

    n

    )

    )

    =

    1

    (e,\phi(n))=1






    (


    e


    ,




    ϕ


    (


    n


    ))




    =








    1




  • 目标为找到 关于



    e

    e






    e





    的一元一次同余方程式



    e

    d

    1

    (

    m

    o

    d

     

    ϕ

    (

    n

    )

    )

    ed \equiv 1 (mod \ \phi(n))






    e


    d













    1


    (


    m


    o


    d




    ϕ


    (


    n


    ))





    ,求逆元



    d

    d






    d






    一次丢番图方程,代码形式类似递归,思路应该是连分数求解

  • 此时得到公钥



    (

    e

    ,

    n

    )

    (e,n)






    (


    e


    ,




    n


    )





    ,私钥



    d

    d






    d






3. 加解密逻辑

明文信息为



P

P






P






加密为



E

(

P

)

=

C

P

e

(

m

o

d

 

n

)

E(P)=C \equiv P^e(mod \ n)






E


(


P


)




=








C














P










e









(


m


o


d




n


)






解密为



D

(

E

(

P

)

)

=

E

(

P

)

d

(

m

o

d

 

n

)

P

e

d

(

m

o

d

 

n

)

D(E(P))= E(P)^d (mod \ n) \equiv P^{ed} (mod \ n)






D


(


E


(


P


))




=








E


(


P



)










d









(


m


o


d




n


)














P











e


d










(


m


o


d




n


)




因为



e

d

1

(

m

o

d

 

ϕ

(

n

)

)

ed \equiv 1 (mod \ \phi(n))






e


d













1


(


m


o


d




ϕ


(


n


))





,所以 ed 可以写成



k

ϕ

(

n

)

+

1

k\phi(n)+1






k


ϕ


(


n


)




+








1





,其中



k

k






k





是正整数

所以有



D

(

E

(

P

)

)

P

k

ϕ

(

n

)

P

 

(

m

o

d

 

n

)

D(E(P)) \equiv P^{k\phi(n)} \cdot P \ (mod \ n)






D


(


E


(


P


))














P











k


ϕ


(


n


)





















P




(


m


o


d




n


)






以及欧拉定理可知



P

k

ϕ

(

n

)

1

(

m

o

d

 

n

)

P^{k\phi(n)} \equiv 1 (mod \ n)







P











k


ϕ


(


n


)





















1


(


m


o


d




n


)






所以



D

(

E

(

P

)

)

P

(

m

o

d

 

n

)

D(E(P)) \equiv P (mod \ n)






D


(


E


(


P


))













P


(


m


o


d




n


)






针对RSA的攻击



哈氏广播攻击(Hastad broadcast attack)

用不同的密钥针对同一段明文加密

防御方式:针对明文信息填充不同的随机数在进行加密






p

,

q

p,q






p


,




q





满足



q

<

p

<

2

q

q<p<2q






q




<








p




<








2


q





的时候解密



d

d






d





的次数小于



n

1

/

4

/

3

n^{1/4}/3







n











1/4










/3





这表明在生成



p

,

q

p,q






p


,




q





的时候 二者距离不能过近



得知大质数



p

,

q

p,q






p


,




q





的部分信息



可以通过解密时间来进行攻击

可以在解密的时候随机等待时间



拉宾密码系统

一种RSA密码系统的变种



ElGamal密码系统原理以及计算逻辑

lGamal基于的基础数学难题是求模大素数的离散对数的困难性

计算原理如下:



1. 寻找一个大素数



p

p






p





和 这个素数的原根



r

r






r





这里找大素数不止依靠拉宾素性检验就可以了,因为我们还需要寻找相对应的原根,所以需要进行以下操作

  • (1) 寻找一个200位长度的大素数



    q

    q






    q




  • (2) 去计算



    2

    q

    +

    1

    2q+1






    2


    q




    +








    1





    是否通过拉宾素性检验,通过则将其定义为



    p

    p






    p





    否则重新寻找大素数



    q

    q






    q




  • (3) 此时拥有了一个大素数



    q

    q






    q





    和另一个大素数



    p

    =

    2

    q

    +

    1

    p=2q+1






    p




    =








    2


    q




    +








    1




  • (4) 注意,这样



    ϕ

    (

    p

    )

    =

    p

    1

    =

    2

    q

    \phi(p) = p-1 = 2q






    ϕ


    (


    p


    )




    =








    p













    1




    =








    2


    q





    ,于是乎,只要随机找一个大数



    r

    r






    r





    使其满足





    r

    ϕ

    (

    p

    )

    /

    2

    =

    r

    q

    ≢

    1

    (

    m

    o

    d

     

    p

    )

    r^{\phi(p)/2} = r^q \not \equiv 1 ( mod \ p)







    r











    ϕ


    (


    p


    )


    /2












    =









    r










    q











































    1


    (


    m


    o


    d




    p


    )






    以及





    r

    ϕ

    (

    p

    )

    /

    q

    =

    r

    2

    ≢

    1

    (

    m

    o

    d

     

    p

    )

    r^{\phi(p)/q} = r^2 \not \equiv 1 ( mod \ p)







    r











    ϕ


    (


    p


    )


    /


    q












    =









    r










    2











































    1


    (


    m


    o


    d




    p


    )







    即可判定



    r

    r






    r









    p

    p






    p





    的原根,此时完成大素数与原根的计算(依据定理9.1.1)



2. 生成公私钥

随机生成一个大数



a

a






a





作为私钥,计算



r

a

b

(

m

o

d

 

p

)

r^a \equiv b ( mod \ p)







r










a




















b


(


m


o


d




p


)





,此时,公钥为



(

p

,

r

,

b

)

(p,r,b)






(


p


,




r


,




b


)





,私钥为



a

a






a






3. 加解密逻辑

明文信息为



P

P






P






加密为



E

(

P

)

=

(

γ

,

δ

)

E(P) = (\gamma, \delta)






E


(


P


)




=








(


γ


,




δ


)






其中 先生成一个随机整数



k

k






k





得到





γ

=

r

k

(

m

o

d

 

p

)

,

0

γ

p

1

\gamma = r^k ( mod \ p), \qquad 0 \leq \gamma \leq p-1






γ




=









r










k









(


m


o


d




p


)


,






0













γ













p













1







以及





δ

=

P

b

k

(

m

o

d

 

p

)

,

0

δ

p

1

\delta = P \cdot b^k ( mod \ p), \qquad 0 \leq \delta \leq p-1






δ




=








P














b










k









(


m


o


d




p


)


,






0













δ













p













1





解密为



D

(

C

)

=

γ

a

δ

D(C) = \overline{\gamma^a}\delta






D


(


C


)




=

















γ










a






























δ






其中



γ

a

\overline{\gamma^a}















γ










a

































代表



γ

a

\gamma^a







γ










a












的逆

依据欧拉定理可知,因为



p

p






p





是素数,



γ

<

p

\gamma<p






γ




<








p





所以



(

γ

,

p

)

=

1

(\gamma,p)=1






(


γ


,




p


)




=








1





,于是有



γ

ϕ

(

p

)

1

(

m

o

d

 

p

)

\gamma^{\phi(p)} \equiv 1 ( mod \ p)







γ











ϕ


(


p


)





















1


(


m


o


d




p


)






这样我们计算



γ

a

\overline{\gamma^a}















γ










a

































即可通过



γ

a

=

γ

ϕ

(

p

)

a

=

γ

p

1

a

\overline{\gamma^a} = \gamma^{\phi(p)-a}=\gamma^{p-1-a}















γ










a
































=









γ











ϕ


(


p


)





a












=









γ











p





1





a













得到

于是解密



D

(

C

)

=

γ

p

1

a

δ

(

m

o

d

 

p

)

D(C)=\gamma^{p-1-a} \cdot \delta (mod \ p)






D


(


C


)




=









γ











p





1





a





















δ


(


m


o


d




p


)






在正确性上有




D

(

C

)

=

γ

a

δ

=

r

k

a

P

b

k

=

(

r

a

)

k

P

b

k

=

b

k

b

k

P

P

(

m

o

d

 

p

)

D(C)= \overline{\gamma^a}\delta = \overline{r^{ka}} \cdot Pb^k=\overline{(r^a)^k} \cdot Pb^k=\overline{b^k} \cdot b^k \cdot P\equiv P (mod \ p)






D


(


C


)




=

















γ










a






























δ




=

















r











ka

































P



b










k











=
















(



r










a










)










k









































P



b










k











=

















b










k

































b










k




















P













P


(


m


o


d




p


)






版权声明:本文为hbr365原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。