RSA 非对称加密 原理解析

  加密算法是现在IT互联网,区块链的重要基石构建,在讲非对称加密算法之前,我们先了解下密码学中的对称加密。所谓的对称加密就是在加密和解密的过程中使用相同的密钥,即信息的发送方和接收方使用同一个密钥去加密和解密数据。

  对称加密的优势是加解密速度快,但由于密钥是介于加解者之间共享使用,所以安全性就没有保障,一旦密钥泄露那加密的文件就相当于是明文。常见的对称加密算法有:DES、3DES、AES、Blowfish、IDEA、RC5、RC6。

    

密码学历史

    1976年,美国的两位计算机科学家Whitfield Diffie和Martin Hellman在论文“密码学新方向”介绍了一种分发加密密钥的全新方法,它有助于解决密钥分发 - 这种技术被称为 Diffie-Hellman密钥交换

    其中DH密钥交换协议的Whitfield Diffie 迪菲教授今年在浙大公开讲授密码学课程,同时他还是区块链网络公链NKN的顾问。

    

 

非对称加密

    受DH密钥交换协议的启发,后来人们认识到,加密和解密可以使用不同的规则,只要这两种规则之间存在某种对应关系即可,这样就避免了直接传递密钥。这种新的加密方式叫"非对称加密算法"

    非对称加密算法,需要一组密钥对,一个是公开密钥(Public key)公开对外发布,另一个是私有密钥(Private key)用户自己保存。信息发送者用公钥去加密,而信息接收者则用私钥去解密。由于加密和解密需要两个不同的密钥,故被称为非对称加密。在这里需要解释下:加密和签名的概念。加密:是对明文做加密处理。签名:是一种身份证明的签署。其中加密的过程,是用公钥加密,私钥解密。而签名是私钥签名,公钥验证。

 

下图是公私钥加密和签名的过程

    

    常用的非对称加密算法有 RSA、Elgamal、ECC(椭圆曲线加密),其中最著名的就是RSA加密算法,ECC也处于强势发展当中,本篇主要介绍RSA非对称加密算法。

 

RSA

    RSA算法是1977年由 MIT 的 Ron Rivest、Adi Shamir 和 Leonard Adleman 一起提出,以他们三人姓氏开头字母命名,是一种获得广泛使用的非对称加密算法。像服务器登录用的SSH密钥对,https中SSL协议都是使用RSA非对称加密算法。下面看下日常用的百度https安全证书,使用的就是RSA加密算法。

 

要深入理解RSA算法过程,需要从小学的质数开始说起。

 

质数

    在正整数中除了1和它本身没有其他公约数的数叫质数,如1,2,3,5,7,11,13..... 

互质:指两个整数只有1是公约数的两个数称为互质。如,2,3,5,7... 可以看出任意两个质数都互质。

 

欧拉函数

    瑞士数学家,自然科学家 莱昂哈德·欧拉(Leonhard Euler),在数论中引入了它的欧拉函数。是这样定义的:对于正整数n,在小于n的正整数中与n互质的数的个数。函数以欧拉命名叫:Euler's totient function ,又称φ函数。例如:φ(8)=4,因为1,3,5,7均和8互质。对于欧拉φ函数,其中的n有几种情况。本篇只介绍跟下文与RSA算法解析相关的性质。

(1)  n为质数时。φ(n)=n-1,因为质数与小于他的每个数都构成互质的关系。如φ(5)=4

(2)  n为质数的幂次方时。    如:  

 

(3)  n为质数的乘积。n=p*q,其中p与q互质(p⊥q),应用(1)的性质:φ(p*q)=φ(p)*φ(q)=(p-1)*(q-1) 如:φ(15)=φ(3*5)=φ(3)*φ(5)=8

 

模(mod)

    模就是余数,如:n = a%p 或 (a mod p) 表示a除以p余数是n,这个过程就是取模。当一个整数a被m除时,得到商k1 和唯一一个余数r,另一个整数b也被m除时,得到商k2,得到的唯一余数也是r,其中(0≤r<m),则有:

                     

同余式记作:a ≡ b%m 或者 a ≡ b(mod m),读作对于正整数a,b对m取模,他们的余数相同。对于上式,我们相减可以得到

                        a - b = (k1-k2) * m  ==> a - b = K * m

所以对于正整数a,b对m取模,则有:a - b = k * m

 

模逆元

   假设 ed ≡ 1(mod n),ed与1对n取模有同样的余数,已知e为3,求d。那么这里的d就是e取模n的模逆元。那么上式可以写成:

                      3*d ≡ 1(mod 11) ,记作:3*d = 11*k + 1

简单穷举下,3关于11的模逆元d 有 {...,-18,-7,4,15,26...},我们可以发现d是以11为公差的等差数列。

 

费马小定理

    法国律师和业余数学家 皮埃尔·德·费马(Pierre de Fermat),他有个猜想,说有个整数a∈z ,p是一个质数。则有: 

                     

记作:

                      

转换下可以得到

                      

模两边同时消去a  

                     

这就是费马最终的猜想,他说具体对不对呢?我就不证明了,后来欧拉在此基础上进行了验证。

 

欧拉-费马定理

    欧拉在费马的猜想基础上进行了拓展,他说有正整数a∈z,n∈z 并且a与n互质(a⊥n)

则有:        

                     

可以理解成:a的φ(n)次方减去1是n的倍数。

当n为质数时,上式可以记作:

                     

这个不就是上述的费马小定理吗?至此欧拉-费马定理形成:

                     

充分必要条件是:正整数a∈z,n∈z 并且a与n互质(a⊥n)

 

RSA公私钥生成

   介绍了这么多概念定理,下面就可以使用这些定理生成RSA公私钥了。

(1) 取两个大整数p,q 令N=p*q,其中p与q互质(p⊥q)

(2) 根据欧拉函数:r=φ(N)=φ(p*q)=φ(p)*φ(q)=(p-1)*(q-1)

(3) 选择一个正整数e, 其中e与φ(N)互质,并且e<φ(N)

(4) e*d≡1(mod φ(N)),在已知e和φ(N)的条件下求d。就是求e对于取模φ(N)的模逆元d

(5) 其中(N,e)作为公钥,上述解出来的d使用(N,d)作为私钥。公钥公开给发送方,私钥自己保存

(6) 将p和q销毁,密钥生成者只记录φ(N),N,e,d.当N足够大时,想要通过N做质数分解,是一件很困难的事

 

RSA加密与解密

    中国古代有梁山伯和祝英台,密码学的悄悄话有Alice和Bob。Alice已经使用了RSA算法生成了密钥对,将(N,e) 公钥给了Bob,Bob现在想要在不太可信的网络里给Alice发送消息m,他就需要用Alice的公钥(N,e)对m进行加密,这里m必须是整数(字符串可以取ascii值或unicode值),如果m消息比较长可以分成几段发送。并且m<N。

 

加密可得:         

           

通过加密后,Bob取得密文c,然后发给Alice。Alice拿到密文c后,使用自己保存的私钥d进行解密。

 

解密过程:

                     

那为什么Alice用私钥d,可以计算得出明文m呢?下面我们就来证明下

                      

简化下可得

                      

交换参数

                      

等式两边同时用指数d运算,k*N的d次方后其实大数还是k*N,将它记作(1)式    
                       

          

写成等式    
                       
将上式代入(1)式,并记作(2)式
            
等式拆解,记作(3)式
                     
由费马定理可知
                     
简化成等式
            
将上式代入(3)式
                   
简化等式
                    
简单记作
                    
转换成模形式
                    
最终得证解密的模运算算法。

 

    在这篇技术文章里涉及了很多数学定理公式,多位数学家、计算机专家。由于他们的卓越贡献研究,才有了今天较为安全可靠的“非对称加密算法”。因为加密使得信息传输安全可信,给互联网科技带来了蓬勃的发展,同时加密算法也是区块链科技发展的重要基石。如果你觉得本篇文章对你有帮助,请关注微信公众号“刻意链习”,持续带你理解更多的区块链技术。

    

 

转载于:https://www.cnblogs.com/sumingk/articles/10228373.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值