非對稱加密屬於密碼學範疇,是一種可以對信息進行加密和解密的算法。它的運行需要一個公鑰和一個私鑰,公鑰用於公開給其他人,私鑰需要自己保存,兩個密鑰可以互相加密、解密。由於加密的密鑰與解密的密鑰不是同樣的而產生了非對稱性,因此被稱爲非對稱加密。
與之對應是加密解密使用同一密鑰的算法,對稱加密算法。比如把單詞“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算法具有最高的安全性。
密碼學是支撐區塊鏈系統運行的基礎技術之一,現已成爲現代計算機安全中不可或缺的一部分,也是日益發展的加密貨幣生態系統的關鍵組成部分。隨着密碼學的不斷發展,在未來的計算機安全及加密貨幣安全驗證方面,對稱與非對稱加密算法在抵御各類威脅上會有更大的作用。
分享
目錄
非對稱加密屬於密碼學範疇,是一種可以對信息進行加密和解密的算法。它的運行需要一個公鑰和一個私鑰,公鑰用於公開給其他人,私鑰需要自己保存,兩個密鑰可以互相加密、解密。由於加密的密鑰與解密的密鑰不是同樣的而產生了非對稱性,因此被稱爲非對稱加密。
與之對應是加密解密使用同一密鑰的算法,對稱加密算法。比如把單詞“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算法具有最高的安全性。
密碼學是支撐區塊鏈系統運行的基礎技術之一,現已成爲現代計算機安全中不可或缺的一部分,也是日益發展的加密貨幣生態系統的關鍵組成部分。隨着密碼學的不斷發展,在未來的計算機安全及加密貨幣安全驗證方面,對稱與非對稱加密算法在抵御各類威脅上會有更大的作用。