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 進行簽名和驗證操作的速度更快。