Home 公钥密码学和RSA
公钥密码学和RSA
取消

公钥密码学和RSA

(一)公钥密码学

一、注意点

1、和以往的密码学的根本不同:不是基于置换和替代,而是基于数学函数

2、公钥密码和只使用一个密钥的传统密码学不同,它是非对称的,使用两个独立的密钥

3、公钥密码学仅限于用在密钥管理和签名中。

 

二、概念

1、非对称密钥:

2、公钥证书:

3、公钥密码(非对称密码):

4、公钥基础设施:


三、密钥分配问题

Diffie Hellman算法

四、数字签名问题

 

五、公钥密码体制

 

1、公钥密码体制之——保密性

流程如下:A产生公钥和私钥,并把公钥发给B,B用公钥加密,并把密文发给A,A用私钥解密得到明文

即:B:Y = E(PUb, X)        A:X = D(PRb, Y)        其中B产生PRb,PUb

2、公钥密码体制之——认证

流程如下:A向B发送消息前,先用A的私钥对消息进行加密,B则用A的公钥进行解密

数字签名原理:由于是用A的私钥对消息加密,所以只有A才能够加密,因此,整个加密后的消息就是数字签名

认证源和数据完整性:因为只有A的私钥才能产生上述的消息,因此该消息可以用于认证消息源和数据完整性

3、加密认证函数部分

只对认证符这一小块数据进行加密,它是整个消息的函数,确保对消息的任何修改都会引起认证符的变化

防止对消息的修改,但是不能防止对消息的窃听

4、保密性和认证

发送方用自己的私钥对消息加密,得到数字签名,再用对方的公钥加密,得到保密性

这样就同时满足了保密性和认证。但是需要执行四次复杂的加密算法

5、公钥密码体制的应用

        加解密

        数字签名

        密钥交换

6、四种常见的公钥密码

                                    加解密                数字签名                密钥交换

RSA                                @                        @                            @

椭圆曲线(ECC)                 @                        @                            @

Diffie Hellman                                                                           @

DSS                                                            @

7、对公钥密码的要求(凭什么人家无法解密破解)

有三点

1、已知公钥求不了私钥

2、已知公钥和密文求不了明文

3、加解密的顺序可交换(即,两个密钥都能成为公钥,另一个为私钥)

实现:

单向陷门函数    单向函数(求见数论部分)

8、攻击

1、穷举攻击(应对:可使用长密钥)

2、找出上述第二点的函数(反正现在还没找到)

3、密文匹配攻击:使用公钥加密所有可能的明文然后和密文匹配(明文后面加一个随机数你就凉了)

 

 


 

(二)RSA算法

一、注意

1、是分组密码

2、明文和密文都是0-n-1之间的整数,n通常问1024二进制,即n<2^1024

2、使用乘积(乘方)运算

 

二、求解过程

1、选择两素数p=17,    q=11

2、计算    n=pq = 187

3、计算    φ(n) = (p-1)(q-1) = 160

4、选择    e    作为公钥,其中 e 要和 φ(n) 互素,这里选择    e=7

5、确定    d,其中de ☰ 1 mod 160

6、得到公钥:{e, n}    私钥:{d, n}

7、假设明文M= 88,则密文C = M^e mod n   = 88^7 mod 187 = 11

 

其中如果p,q足够大,攻破是不可行的

 

三、攻击

穷举攻击:选择大位数的e,d即可

数学攻击:

计时攻击

基于硬件的故障攻击

选择密文攻击

 

 

四、证明

证明就是证M = C^d mod n    (假设是用e加密)

    C^d mod n

= (M^e)^d mod n

= (M^ed) mod n

因为φ(n) = (p-1)(q-1)

        ed mod φ(n) = 1

所以有ed = kφ(n) + 1

原式 = M^(kφ(n)+1) mod n

        = M^(k(p-1)(q-1)+1) mod n

        = M^(k(p-1)(q-1)+1) mod pq

 首先证明M^(k(p-1)(q-1)+1) mod p = M mod p

情况一:

            M不和p互素,则式子两边的值都为0

情况二:

            M和p互素

            M^(k(p-1)(q-1)+1) mod p

        = (M mod p)* ((M^(p-1))^k(q-1) mod p) mod p

由费马定理可知,当M 和 p 互素时M^(p-1) mod p = 1

        = M mod p

所以M^(k(p-1)(q-1)+1) mod p - M mod p = 0

       (M^(k(p-1)(q-1)+1) - M) mod p = 0'

同理(M^(k(p-1)(q-1)+1) - M) mod q = 0 

所以(M^(k(p-1)(q-1)+1) - M) mod pq = 0 

       (M^(k(p-1)(q-1)+1) - M) mod n = 0  

       存在k,使得 (M^(k(p-1)(q-1)+1) - M) = kn

        即M^(kφ(n)+1) mod n = M

 

 

 

 

 

 

 

 

 

 

 

该博客文章由作者通过 CC BY 4.0进行授权。