公钥密码算法是现代密码学发展过程中的一个里程碑。公钥密码算法中的密钥分为公开密钥和私有密钥。公开密钥与私有密钥是用户或系统产生的一对密钥,其中的一个公开,称为公钥,另一个自己保留,称为私钥。如果用公开密钥对数据进行加密,那么只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。
由于公钥与私钥之间存在依存关系,所以只有用户本身才能解密信息,而加密和解密使用的是两个不同的密钥,所以这种算法也被叫作非对称密码算法。
举例来说,如果A要使用公钥密码算法向B传输机密信息,则A首先要获得B的公钥,并使用B的公钥加密原文,然后将密文传给B,B使用自己的私钥才能解开密文。
公钥密码算法有两个重要原则:第一,要求在加密算法和公钥都公开的前提下,其加密的密文必须是安全的;第二,要求所有加密的人和掌握密钥的解密人的计算或处理比较简单,而其他不掌握密钥的人,破译极其困难。
在公钥密码算法的研究中,其安全性都是基于数学上难解的可计算问题,如:大数分解问题、计算有限域的离散对数问题、平方剩余问题、椭圆曲线的对数问题等。基于这些问题,公钥密码算法生成了各种公钥密码体制,椭圆曲线密码算法和RSA加密算法是其中的两个重要方面。
1.椭圆曲线密码算法
椭圆曲线是满足一个特殊方程的点集,注意,不要跟标准椭圆方程混淆,那根本就是两回事,椭圆曲线方程是这样的:y2=x3+ax+b。
在几何意义上,一个椭圆曲线通常是满足一个变量为2阶,另一个变量为3阶的二元方。按照这样的定义,椭圆曲线有很多种,而椭圆曲线密码算法是基于椭圆曲线数学的一种公钥密码算法,其主要的安全性在于利用了椭圆曲线离散对数难题。
椭圆曲线密码算法实现了数据加解密、数字签名和身份认证等功能,该技术具有安全性高、生成公私钥方便、处理速度快和存储空间小等方面的优势。相对于其他公钥密码算法,椭圆曲线密码算法在实际开发中运用得更广泛,比如,比特币就是使用了椭圆曲线中的SECP256k1算法,为比特币系统提供128位的安全保护。
2.RSA加密算法
RSA加密算法是以它的三个发明者罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)的名字首字母命名。RSA加密算法是一种常见的非对称加密算法,是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被国际标准化组织推荐为公钥数据加密标准。RSA的安全性基于一个十分简单的数论事实:将两个大素数相乘十分容易,但想要对其乘积进行因式分解却极其困难,因此可以将乘积作为加密密钥。RSA的公钥和私钥是一对大数,将一个公钥和密文恢复成明文,等价于分解两个大素数之积,这是公认的数学难题。
RSA的安全性基于大数因数分解难题,但并没有从理论上证明破译RSA的难度与大数因数分解难度等价,无法从理论上把握它的保密性是RSA的重大缺陷。不过,RSA从提出到现在三十多年,经历了各种攻击考验,被认为是当下最安全的公钥方案之一。当然,RSA也存在其他的缺点,比如产生密钥很麻烦、受限于素数产生的技术、分组长度太大、运算代价高、速度慢等。
与对称密码技术相比较,利用非对称密码技术进行安全通信,通信双方事先不需要通过保密信道交换密钥,安全性高,密钥持有量大大减少,易于管理,同时还能够提供对称密码技术很难提供的服务,比如与杂凑函数联合运用可生成数字签名等。
内容摘自《风口区块链》—— 顾炳文