RSA密码算法是密码领域的一个重要算法。
这是一种于 1977 年发明的非对称加密算法,用于加密或签名信息。
特别是在加密领域,它至关重要,因为它允许签署交易请求,从而使其合法化。
RSA是该算法三位发明者姓氏的首字母,分别是Ronald Rivest 、Adi Shamir、Leonard Adleman。
RSA 算法是一种公钥加密系统。它之所以被定义为“非对称加密”,是因为它基于一种使用一对数学上相关但不同的密钥的加密方法:私钥和公钥。
公钥是与他人共享的,而私钥显然必须绝对保密。公钥用于加密数据,但要解密数据,则必须使用私钥。
在经典的对称密码学中,加密和解密使用同一个密钥,因此该密钥必须保密,不能公开。而非对称密码学则允许任何人安全地交换公钥。
该方法被认为是安全的,因为它基于数学原理:虽然将两个非常大的素数相乘相对简单,但将结果分解为其原始素因数却极其困难(并且计算成本高昂)。
实际上,用户会与任何人共享他们的公钥,这样任何人都可以使用它来加密消息并发送给他们。当他们收到加密消息时,用户必须使用自己的私钥来解密。
这样,只有拥有私钥的用户才能读取它,而其他任何人都会看到它被加密,但无法真正解密它。
事实上,解密信息并非完全不可能,因为如果有人随机猜出私钥,信息就能被解密。然而,找到私钥的难度非常高,要么几乎不可能,要么需要付出巨大的努力,绝对不是任何人都能做到的。
RSA 算法最广泛的用途可能是安全的在线浏览。
现在,访问网站时通常使用 HTTPS 协议,其中最后一个 S 代表“安全”。
该安全协议使用 SSL/TLS 协议对服务器与用户之间交换的数据进行加密。这些协议在连接的初始阶段(称为握手)使用 RSA 算法来建立安全的通信通道。
具体来说,当通过 HTTPS 连接到网站时(如今几乎总是如此),服务器会发送其 SSL/TLS 证书,其中包含其公钥,通常使用 RSA 算法生成。您的浏览器会生成一个用于对称加密的临时密钥,并使用服务器的 RSA 公钥对其进行加密。
此时,浏览器将加密的密钥发送给服务器,服务器使用自己的 RSA 私钥解密。这样可以确保浏览器和服务器都拥有相同的密钥,后续数据包将使用对称加密进行加密,因为对于传输大量数据而言,对称加密速度更快、更高效。
RSA算法也用于数字签名。
但它是以相反的方式进行的,使用私钥进行签名(即加密),使用公钥进行验证(即解密)。
这正是非对称加密算法在密码领域的常见用途。
当您想要执行链上交易时,必须对其进行签名,以便节点将其识别为合法,这意味着它仅源自发送资金的地址的所有者。
一旦生成交易,它就会由哈希函数进行处理,从而创建交易本身的唯一数字指纹。
当发送者将其发送到节点进行确认时,他们会使用他们的私钥对其进行有效的签名,这样就有数学证明证明它只是由资金的合法所有者请求的。
节点可以使用发送者的公钥(对应于发起交易的钱包地址)来验证签名的有效性。如果验证成功,则该交易被接受并添加到区块中。
此外,每个人(不仅仅是节点)都可以执行此验证,因为公钥是众所周知的,因为它对应于交易发送者的公共地址,而该地址也是公开的。
说实话,包括比特币和以太坊在内的许多加密协议都使用另一种非对称加密算法来签署交易。
这就是椭圆曲线数字签名算法(ECDSA),其操作概念上与 RSA 相同。
ECDSA 比 RSA 更受欢迎,因为它更高效、更安全,而且它使用的密钥更短,同时又能保持与 RSA 相同的安全级别。例如,256 位 ECDSA 密钥的安全性堪比 3072 位 RSA 密钥。
这减少了交易数据的大小,节省了区块链上的空间并降低了费用。
此外,使用 ECDSA 进行签名和验证操作的计算速度比使用 RSA 进行签名和验证操作的速度更快。