在《Warp Future Security Zone》上一篇文章提到的拜占庭协议中,如果10个将军中的几个同时发射消息,必然会造成系统混乱,导致攻击时间计划不同,行动难以达成一致。任何人都可以发起攻击的消息,但是谁来发呢?其实这只需要增加一个成本,即一段时间内只有一个节点可以传播信息。当一个节点发出统一的攻击消息时,每个节点都必须对来自发起者的消息进行签名和盖章,以确认各自的身份。
现在的非对称加密技术完全可以解决这个签名问题。
非对称加密技术在当前网络中被广泛使用。加密技术是数字货币的基础。
所谓不对称,就是算法需要一对密钥。如果一个(公钥)用于加密,另一个(私钥)需要用于解密。非对称加密,加密和解密使用不同的密钥,其中一个是公钥,另一个是只有所有者知道的私钥。
用公钥加密的信息只能用私钥解密,而用私钥加密的信息只能用公钥解密(签名验证)。
代表:RSA算法。速度慢,适合少量数据加密。对称加密算法不能实现签名,所以签名只能是非对称算法。
RSA算法原理
RSA算法是基于两个大素数相乘得到的大数很难被因式分解的数学事实。比如大质数P和Q,很容易算出N,这样N=p * q,但是给定N,就很难求出p q(没有好办法,只能不断尝试)。
这其实就是单向函数的概念。
让我们来看看数学微积分的过程:
选择两个大素数p和q,计算N=p * q和 (N)= (p) * (q)=(p-1) * (q-1)。
质数:又称素数,在大于1的自然数中,除了1和它本身之外,没有其他因素。
互质关系:如果两个正整数除了1之外没有公因数,我们称这两个数为互质关系。
(n):称为欧拉函数,指任意给定的正整数n,在小于等于n的正整数中,有多少个与n有互质关系.
1.欧拉函数
定义:对于正整数n,小于n且与n互质的正整数(包括1)的个数记为(n)。然后
证明:
如果n是素数,那么(n)=n-1。
如果n是素数p的幂,即n=p^k,那么 (n)=p k-p (k-1)=(p-1) * p (k-1)。
欧拉函数是一个乘积函数。当n和m互质时,(n*m)=(n)*(m)。
2.欧拉定理
1.定义:若两个正整数A和N互质,则N的欧拉函数(n)可以成立如下方程:
a^(n)%n=1
证明:
2.选择一个大于1小于(N)的数E,使E和(N)互质。
3.计算d,使de=1 mod (N)等价于方程ed-1=k (N)求一组解。
4.(N,e)封装为公钥,(N,d)封装为私钥。假设m是明文,加密就是计算密文C: M e mod n=C(明文m用公钥e加密,除以随机数n得到密文c)解密就是:c^d mod N=m(密文c用密钥解密,除以随机数n得到明文m)。
加密和解密步骤
下面我们来详细看一下步骤。例如,假设Alice和Bob想要再次相互通信。
爱丽丝随机取一个大素数P1=53,P2=59,那么N=53*59=3127,(N)=3016。
取一个e=3,算出d=2011。
只有N=3127和e=3作为公钥发送给Bob(公钥泄露)。
假设鲍勃需要加密明文m=89,c=89^3 mod 3127=1394,那么鲍勃返回c=1394。(公钥加密过程)
爱丽丝可以通过使用c^d模N=1394^2011模3127得到明文m=89。(私钥解密过程)
证券分析
那么,在已知n和e的情况下,有没有可能推导出d呢?
如果n可以因式分解,就可以计算出d,所以RSA的安全性是建立在n的因式分解上的,大整数的因式分解是一件非常困难的事情。只要密钥长度足够长,用RSA加密的信息是无法解密的。
RSA核心算法
快速模幂算法
算法1:乘法算法,时间复杂度O(n)
算法2:快速幂算法,时间复杂度O(logn)
算法3:快速模幂算法,时间复杂度O(logn)
素数确定算法:
由于非对称加密算法的运算速度比对称加密算法慢很多,所以当我们需要加密大量数据时,我们建议使用对称加密算法来提高加解密速度。
对称加密算法不能实现签名,所以签名只能是非对称算法。
由于对称加密算法的密钥管理是一个复杂的过程,密钥管理直接决定了其安全性,所以当数据量较小时,可以考虑使用非对称加密算法。
在实际操作过程中,我们通常使用非对称加密算法来管理对称算法的密钥,然后使用对称加密算法来加密数据。这样我们就融合了两类加密算法的优点,既实现了快速加密的优点,又实现了安全便捷的密钥管理的优点。(注:本文内容由区块链安全公司WF经线未来(WarpFuture.com)编译。请注明它来自WF曲速未来。本文仅代表作者观点,不代表链家官方立场。)