区块链之非对称加密算法
非对称加密,在现在网络应用中,有这非常广泛的场景,更是加密货币的基础。本文主要介绍非对称加密、解密的原理和过程,以及在区块链中的使用。
一、非对称加密解密过程
- A要向B发送信息,A和B都要产生一对用于加密、解密的公钥和私钥
- A保管自己的私钥,把公钥告诉B;B保管自己的私钥,把公钥告诉A
- A要给B发送信息时,A用B的公钥加密信息,因为A知道B的公钥。
- A将这个消息发给B(已经用B的公钥加密消息)。
- B收到这个消息后,B用自己的私钥解密A的消息。其他所有收到这个报文的人都无法解密,因为只有B才有B的私钥。
二、如何理解公钥和私钥
非对称加密算法需要两个密钥:公开密钥(public key)和私有密钥(private key)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。
非对称密码的特点:算法强度复杂、安全性依赖于算法与密钥,但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。对称密码体制中只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥。所以保证其安全性就是保证密钥的安全,而非对称密钥体制有两种密钥,其中一个是公开的,这样就可以不需要像对称密码那样传输对方的密钥了。这样安全性就大了很多。
三、非对称加密解密原理
非对称加密算法中,常用的就是RSA算法了,以下就以RSA算法为例来讲解非对称加密算法的实现原理。
RSA算法的基于这样的数学事实:两个大质数相乘得到的大数难以被因式分解。
RSA加密过程
解释:也就是说RSA加密是对明文的E次方后除以N后求余数的过程。也就是说只要知道E(Encryption)和N(Number),任何人都可以进行RSA加密了。其中E、N是RSA加密的密钥,E和N的组合就是公钥,我们用(E,N)来表示公钥
不过E和N不并不是随便什么数都可以的,它们都是经过严格的数学计算得出的
RSA解密过程
也就是说对密文进行D次方后除以N的余数就是明文,这就是RSA解密过程。知道D和N就能进行解密密文了,所以D和N的组合就是私钥
从上述可以看出RSA的加密方式和解密方式是相同的,加密是求"E次方的mod N",解密是求"D次方的mod N"
知道上述的几个简单公式后,剩下就是计算各个参数对应的值了
-
求N。准备两个质数p,q,这两个数不能太小,太小则会容易破解,将p乘以q就是N。
-
求L。L为中间数,是 (p-1) 和 (q-1) 的最小公倍数,可用如下表达式表示
-
求E。E必须满足两个条件:E是一个比1大比L小的数,E和L的最大公约数为1,用gcd(X,Y)来表示X,Y的最大公约数则E条件如下:
之所以需要E和L的最大公约数为1是为了保证一定存在解密时需要使用的数D。现在我们已经求出了E和N也就是说我们已经生成了密钥对中的公钥了。 -
求D。D是由数E计算出来的。D、E和L之间必须满足以下关系:
至此,公钥和私钥都都计算出来了,大家可以自己试着计算下
四、为何非对称加密难以破解
破解RSA算法的关键就是计算N、p、q的值,给出两个很大的质数p、q,可以计算N,但知道N,去很难算出p、q,只能不停的尝试,这就是为什么当前RSA很难破解。
RSA算法的破解与密钥的长度有关,如果密钥的长度小于等于256位,一台较快的电脑可以在几个小时内成功分解其因子。位数越高因式分解所需时间也越长。例如破解RSA-2048(2048-bit)的密钥需要耗费传统电脑10亿年的时间,而量子计算机只需要100秒就可以完成。所以随着科技的发展,算法也会更新换代。