非对称加密属于密码学范畴,是一种可以对信息进行加密和解密的算法。它的运行需要一个公钥和一个私钥,公钥用于公开给其他人,私钥需要自己保存,两个密钥可以互相加密、解密。由于加密的密钥与解密的密钥不是同样的而产生了非对称性,因此被称为非对称加密。
与之对应是加密解密使用同一密钥的算法,对称加密算法。比如把单词“gate”使用AES对称加密算法加密可以得到字符串U2FsdGVkX18fop1iGBPzNdnADZ57AJxOn+wEBSIUAG4。反之密文也可以通过AES对称加密算法解密得出原字符串gate。在早期,发送加密电报使用的就是这种对称加密算法。这种方式解密过程简单且速度快,但加密方法被泄露后,很容易将截获的信息破译出来,安全性不高。
非对称加密算法的安全性相比对称加密算法要高,但是由于运行复杂,效率比对称加密算法要低一些。我们通过一个例子来简单理解:假设Jim想给Bob使用非对称加密的方式发送一条信息,需要经过以下过程:
1.Jim与Bob都需要产生一对公钥和私钥;
2.Jim的公钥发送给Bob,私钥自己保存;Bob的公钥发送给Jim,私钥自己保存;
3.Jim向Bob发信息时,使用Bob的公钥加密信息;
4.Bob收到消息后,使用自己的私钥即可解密查阅。
非对称加密在区块链中的应用
非对称加密算法是区块链中主要应用的加密算法,它的应用场景主要包括信息加密、数字签名、登录认证及数字证书等,其在区块链中的价值是公钥和私钥来识别发信者和接收者的身份。
信息加密:确保信息的安全性。发信者手里的是公钥,其它人知道公钥没有关系,因为其它人发来的信息对收信者没有影响。而收信者手里的是私钥,且是唯一能够解开加密信息的人。比特币交易的加密技术即属于此场景。
数字签名:确保信息的归属性。为了表明信息没有受到伪造且确实是信息拥有者发出来的,数字签名附在信息原文的后面。就像手写的签名一样,具有唯一性性和简洁性。
登录认证:是由客户端使用私钥加密登录信息后,发送给服务器,后者接收后采用该客户端的公钥解密并认证登录信息。
数字证书:确保公钥的合法性。为了发信者验证从网上获取的公钥是真的,而生成的第三方机构CA (Certificate Authority)来保障公钥合法性。信息原文的所有者在发布信息时,除了需要带上自己的数字签名外还需要数字证书,这才能确保信息不被篡改。
比特币的非对称加密算法如何运行
在比特币区块链中使用的非对称加密算法为椭圆曲线加密算法。这也是目前区块链常用的一种非对称加密算法,简称ECDSA,其中EC是“椭圆曲线”的简称,DSA是“数字签名算法”的简称。
在对椭圆曲线的参数确定上,比特币系统又使用了名为SECP256k1的曲线参数,这样在运作中系统随机得出32个字节的私钥,然后通过椭圆曲线数字签名算法(使用SECP256k1曲线)得出公钥,再运作多次哈希算法得出公钥哈希,并结合版本号等形成了最终的账户地址。
用一个简单的例子来说。
比如随机生成两个质数(152,891)拼成一个6位数的“私钥”152891,而生成“公钥”的规则是这两个质数相乘152x891=135432。这时网络上的人都可以拿到这个“公钥”。当你想让这个数据仅被你一人修改时,可以在这个数据「“公钥”135432」后面加一个说明:只有私钥的左三位数字乘以右三位的数字等于公钥,才可以被修改。
如果网络上有黑客想要不经过同意篡改数据,即使他知道“私钥”生成“公钥”的方式是两个质数相乘,但他也不知道是哪两个质数。因此他为了找到“公钥”135423的私钥只能用最直接的方式一个个尝试:001x02,......,998x999等。当质数很大时这个过程是很困难的。
这样的例子是比较简单的,用计算机可以直接从“公钥”算出来上述例子的“私钥”。但比特币系统使用的椭圆曲线算法从“私钥”产生“公钥”是现有技术很难破解的。因为其质数很大。并且,比特币系统中私钥解密过程是通过一种逆波兰表示法的堆栈执行语言实现的。
椭圆曲线
私钥可以推导出公钥和公钥哈希,但公钥和公钥哈希却不能推导出私钥。因此私钥需要使用者好好保管,一旦丢失私钥,就相当于账户里的资产拿不回来了。
常见的非对称加密算法
非对称算法是区块链运行的基础。除了比特币及以太坊等区块链使用的椭圆曲线加密算法外,以下几种不同的加密算法也在区块链中较为常见。
RSA(Rivest Shamir Adleman)算法:因其难以破解的特点在数字加密和数字签名领域被广泛应用。在RSA算法中,使用公钥私钥都可以对信息加密,公钥加密(防止信息被盗取)则私钥解密,私钥加密(防止信息被篡改)则公钥解密(数字签名)。理论上,RSA算法中密钥位数越长,其破解难度越高(未排除量子计算)。所以目前业界普遍使用的密钥不低于2048位。
DSA数字签名算法(Digital Signature Algorithm):这种算法无法对信息进行加密或者解密,主要运用于对加密信息进行签名和认证。安全程度和RSA算法一样高,但处理速度更快。
ECC椭圆曲线加密算法(Elliptic-curve Cryptography):加密过程源于数学中的椭圆曲线。相较于RSA算法,ECC算法加密和解密速度更快,单位安全强度更高。同样的密钥长度,ECC算法具有最高的安全性。
结语
密码学是支撑区块链系统运行的基础技术之一,现已成为现代计算机安全中不可或缺的一部分,也是日益发展的加密货币生态系统的关键组成部分。随着密码学的不断发展,在未来的计算机安全及加密货币安全验证方面,对称与非对称加密算法在抵御各类威胁上会有更大的作用。