加密貨幣常見加密算法
0x00 密碼學
互聯網世界,密碼無處不在。中心化的系統存在賬戶,有賬戶就有賬戶名和密碼,密碼可以說是標識賬號歸屬的最重要手段之一。
我們來看維基百科怎么闡釋 密碼學 。
密碼學(英語:Cryptography)可分為古典密碼學和現代密碼學。在西歐語文中,密碼學一詞源于希臘語 kryptós“隱藏的”,和 gráphein“書寫”。古典密碼學主要關注信息的保密書寫和傳遞,以及與其相對應的破譯方法。而現代密碼學不只關注信息保密問題,還同時涉及信息完整性驗證(消息驗證碼)、信息發布的不可抵賴性(數字簽名)、以及在分布式計算中產生的來源于內部和外部的攻擊的所有信息安全問題。古典密碼學與現代密碼學的重要區別在于,古典密碼學的編碼和破譯通常依賴于設計者和敵手的創造力與技巧,作為一種實用性藝術存在,并沒有對于密碼學原件的清晰定義。而現代密碼學則起源于 20 世紀末出現的大量相關理論,這些理論使得現代密碼學成為了一種可以系統而嚴格地學習的科學。[1]
使用密碼學可以達到以下目的:
- 保密性:防止用戶的標識或數據被讀取;
- 數據完整性:防止數據被更改;
- 身份驗證:確保數據發自特定的一方。
題圖來自: ? Sabarinath / Meltdown and Spectre / techlog360.com
0x01 分類
在講解加密算法之前,我們來看下 Base64 編碼 。Base64 編碼可對傳輸中的數據進行簡單處理,使之不易被辨認,它并不是一種加密算法,它只是一種編碼方式。
比如讀者在終端執行如下命令就可以獲取到我的郵箱:
echo ZGJhcm9iaW53ZW5AZ21haWwuY29tCg== | base64 –decode |
根據密鑰類型不同將現代密碼技術分為兩類: 對稱加密算法(秘密鑰匙加密) 和 非對稱加密算法(公開密鑰加密) 。對稱鑰匙加密系統是加密和解密均采用同一把秘密鑰匙,而且通信雙方都必須獲得這把鑰匙,并保持鑰匙的秘密。非對稱密鑰加密系統采用的加密鑰匙(公鑰)和解密鑰匙(私鑰)是不同的。[2]
0x02 對稱加密算法
對稱加密算法用來對敏感數據等信息進行加密,常用的算法包括:
- DES(Data Encryption Standard) :數據加密標準,速度較快,適用于加密大量數據的場合;
- 3DES(Triple DES) :是基于 DES,對一塊數據用三個不同的密鑰進行三次加密,強度更高;
- AES(Advanced Encryption Standard) :高級加密標準,是下一代的加密算法標準,速度快,安全級別高。
2.1 DES 加密算法
DES 加密算法是一種分組密碼,以 64 位為分組對數據加密,它的密鑰長度是 56 位,加密解密用同一算法。DES 加密算法是對密鑰進行保密,而公開算法,包括加密和解密算法。這樣,只有掌握了和發送方相同密鑰的人才能解讀由 DES 加密算法加密的密文數據。因此,破譯 DES 加密算法實際上就是搜索密鑰的編碼。對于 56 位長度的密鑰來說,如果用窮舉法來進行搜索的話,其運算次數為 256。
隨著計算機系統能力的不斷發展,DES 的安全性比它剛出現時會弱得多,然而從非關鍵性質的實際出發,仍可以認為它是足夠的。不過,DES 現在僅用于舊系統的鑒定,而更多地選擇新的加密標準。
2.2 AES 加密算法
AES 算法基于排列和置換運算。排列是對數據重新進行安排,置換是將一個數據單元替換為另一個。AES 使用幾種不同的方法來執行排列和置換運算。
AES 是一個迭代的、對稱密鑰分組的密碼,它可以使用 128、192 和 256 位密鑰,并且用 128 位(16 字節)分組加密和解密數據。與公共密鑰密碼使用密鑰對不同,對稱密鑰密碼使用相同的密鑰加密和解密數據。通過分組密碼返回的加密數據的位數與輸入數據相同。迭代加密使用一個循環結構,在該循環中重復置換和替換輸入數據。
2.3 3DES 加密算法
3DES 是三重數據加密,且可以逆推的一種算法方案。但由于 3DES 的算法是公開的,所以算法本身沒有密鑰可言,主要依靠唯一密鑰來確保數據加解密的安全。到目前為止,仍沒有人能破解 3DES。
3DES 和 AES 有什么區別呢?AES 加密算法使用的對稱 block 密碼,密鑰長度有 128、192 和 256 位密碼,加密速度快,解密時間(假設機器每秒嘗試 255 個密鑰)大約需要 1490000 億年,資源消耗低;而 3DES 加密算法使用的是對稱 feistel 密碼,密鑰長度有 112 位或 168 位,加密速度慢,同等條件下解密時間大約需要 46 億年,資源消耗中等。
0x03 非對稱加密算法
常見的非對稱加密算法如下:
- RSA :由 RSA 公司發明,是一個支持變長密鑰的公共密鑰算法,需要加密的文件塊的長度也是可變的;
- DSA(Digital Signature Algorithm) :數字簽名算法,是一種標準的 DSS(數字簽名標準);
- ECC(Elliptic Curves Cryptography) :橢圓曲線密碼編碼學。
3.1 RSA 加密算法
RSA 加密算法是一種非對稱加密算法。在公開密鑰加密和電子商業中 RSA 被廣泛使用。RSA 是 1977 年由羅納德 · 李維斯特(Ron Rivest)、阿迪 · 薩莫爾(Adi Shamir)和倫納德 · 阿德曼(Leonard Adleman)一起提出的。當時他們三人都在麻省理工學院工作。RSA 就是他們三人姓氏開頭字母拼在一起組成的。
對極大整數做因數分解的難度決定了 RSA 算法的可靠性。換言之,對一極大整數做因數分解愈困難,RSA 算法愈可靠。假如有人找到一種快速因數分解的算法的話,那么用 RSA 加密的信息的可靠性就肯定會極度下降。但找到這樣的算法的可能性是非常小的。今天只有短的 RSA 鑰匙才可能被強力方式解破。到目前為止,世界上還沒有任何可靠的攻擊 RSA 算法的方式。只要其鑰匙的長度足夠長,用 RSA 加密的信息實際上是不能被解破的。[3]
3.2 ECC 加密算法
橢圓曲線密碼學(英語:Elliptic curve cryptography,縮寫為 ECC),一種建立公開密鑰加密的算法,基于 橢圓曲線數學 。橢圓曲線在密碼學中的使用是在 1985 年由 Neal Koblitz 和 Victor Miller 分別獨立提出的。
ECC 的主要優勢是在某些情況下它比其他的方法使用更小的密鑰——比如 RSA 加密算法——提供相當的或更高等級的安全。ECC 的另一個優勢是可以定義群之間的雙線性映射,基于 Weil 對或是 Tate 對;雙線性映射已經在密碼學中發現了大量的應用,例如基于身份的加密。不過一個缺點是加密和解密操作的實現比其他機制?
來自:https://dbarobin.com/2018/01/16/blockchain-cryptography/