當前位置:
首頁 > 最新 > 加密貨幣常見加密演算法

加密貨幣常見加密演算法

本文由幣乎社區(bihu.com)內容支持計劃獎勵。

這是「區塊鏈技術指北」的第 20 篇文章。

0x00 密碼學

互聯網世界,密碼無處不在。中心化的系統存在賬戶,有賬戶就有賬戶名和密碼,密碼可以說是標識賬號歸屬的最重要手段之一。

我們來看維基百科怎麼闡釋密碼學。

密碼學(英語:Cryptography)可分為古典密碼學和現代密碼學。在西歐語文中,密碼學一詞源於希臘語 kryptós「隱藏的」,和 gráphein「書寫」。古典密碼學主要關注信息的保密書寫和傳遞,以及與其相對應的破譯方法。而現代密碼學不只關注信息保密問題,還同時涉及信息完整性驗證(消息驗證碼)、信息發布的不可抵賴性(數字簽名)、以及在分散式計算中產生的來源於內部和外部的攻擊的所有信息安全問題。古典密碼學與現代密碼學的重要區別在於,古典密碼學的編碼和破譯通常依賴於設計者和敵手的創造力與技巧,作為一種實用性藝術存在,並沒有對於密碼學原件的清晰定義。而現代密碼學則起源於 20 世紀末出現的大量相關理論,這些理論使得現代密碼學成為了一種可以系統而嚴格地學習的科學。[1]

使用密碼學可以達到以下目的:

0x01 分類

在講解加密演算法之前,我們來看下Base64 編碼。Base64 編碼可對傳輸中的數據進行簡單處理,使之不易被辨認,它並不是一種加密演算法,它只是一種編碼方式。

比如讀者在終端執行如下命令就可以獲取到我的郵箱:

根據密鑰類型不同將現代密碼技術分為兩類:對稱加密演算法(秘密鑰匙加密)和非對稱加密演算法(公開密鑰加密)。對稱鑰匙加密系統是加密和解密均採用同一把秘密鑰匙,而且通信雙方都必須獲得這把鑰匙,並保持鑰匙的秘密。非對稱密鑰加密系統採用的加密鑰匙(公鑰)和解密鑰匙(私鑰)是不同的。[2]

0x02 對稱加密演算法

對稱加密演算法用來對敏感數據等信息進行加密,常用的演算法包括:

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 非對稱加密演算法

常見的非對稱加密演算法如下:

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 對;雙線性映射已經在密碼學中發現了大量的應用,例如基於身份的加密。不過一個缺點是加密和解密操作的實現比其他機制花費的時間長。[4]

3.3 ECC 與 RSA 比較

ECC 和 RSA 相比,在許多方面都有對絕對的優勢,主要體現在以下方面:

關於 ECC 與 RSA 的測試和分析,可以參考 公鑰加密演算法那些事RSA 與 ECC 系統對比.

0x04 散列演算法

散列是信息的提煉,通常其長度要比信息小得多,且為一個固定長度。加密性強的散列一定是不可逆的,這就意味著通過散列結果,無法推出任何部分的原始信息。任何輸入信息的變化,哪怕僅一位,都將導致散列結果的明顯變化,這稱之為雪崩效應。散列還應該是防衝突的,即找不出具有相同散列結果的兩條信息。具有這些特性的散列結果就可以用於驗證信息是否被修改。

單向散列函數一般用於產生消息摘要,密鑰加密等,常見的有:

4.1 MD5

MD5 為計算機安全領域廣泛使用的一種散列函數,用以提供消息的完整性保護。對 MD5 加密演算法簡要的敘述可以為:MD5 以 512 位分組來處理輸入的信息,且每一分組又被劃分為 16 個 32 位子分組,經過了一系列的處理後,演算法的輸出由四個 32 位分組組成,將這四個 32 位分組級聯後將生成—個 128 位散列值。

MD5 被廣泛用於各種軟體的密碼認證和鑰匙識別上。MD5 用的是哈希函數,它的典型應用是對一段信息產生信息摘要,以防止被篡改。MD5 的典型應用是對一段 Message 產生 fingerprint 指紋,以防止被 「篡改」。如果再有—個第三方的認證機構,用 MD5 還可以防止文件作者的 「抵賴」,這就是所謂的數字簽名應用。MD5 還廣泛用於操作系統的登陸認證上,如 UNIX、各類 BSD 系統登錄密碼、數字簽名等諸多方。

4.2 SHA-1

SHA-1 是一種數據加密演算法,該演算法的思想是接收一段明文,然後以一種不可逆的方式將它轉換成一段(通常更小)密文,也可以簡單的理解為取一串輸入碼(稱為預映射或信息),並把它們轉化為長度較短、位數固定的輸出序列即散列值(也稱為信息摘要或信息認證代碼)的過程。

單向散列函數的安全性在於其產生散列值的操作過程具有較強的單向性。如果在輸入序列中嵌入密碼,那麼任何人在不知道密碼的情況下都不能產生正確的散列值,從而保證了其安全性。SHA 將輸入流按照每塊 512 位(64 個位元組)進行分塊,併產生 20 個位元組的被稱為信息認證代碼或信息摘要的輸出。

該演算法輸入報文的最大長度不超過 264 位,產生的輸出是一個 160 位的報文摘要。輸入是按 512 位的分組進行處理的。SHA-1 是不可逆的、防衝突,並具有良好的雪崩效應。

通過散列演算法可實現數字簽名實現,數字簽名的原理是將要傳送的明文通過一種函數運算(Hash)轉換成報文摘要(不同的明文對應不同的報文摘要),報文摘要加密後與明文一起傳送給接受方,接受方將接受的明文產生新的報文摘要與發送方的發來報文摘要解密比較,比較結果一致表示明文未被改動,如果不一致表示明文已被篡改。

4.3 SHA-1 與 MD5 的比較

因為二者均由 MD4 導出,SHA-1 和 MD5 彼此很相似。相應的,他們的強度和其他特性也是相似,但還有以下幾點不同:

0x05 加密貨幣加密演算法

筆者根據 加密電子貨幣列表 整理了如下的加密演算法:

5.1 SHA-256

安全散列演算法(英語:Secure Hash Algorithm,縮寫為 SHA)是一個密碼散列函數家族,是 FIPS 所認證的安全散列演算法。能計算出一個數字消息所對應到的,長度固定的字元串(又稱消息摘要)的演算法。且若輸入的消息不同,它們對應到不同字元串的機率很高。[5]

SHA 家族包含 SHA-0、SHA-1、SHA-2、SHA-3,由於比特幣白皮書 2008 年才發布,彼時 SHA-3 還未問世,所以比特幣採用的是 SHA-2 家族的SHA-256 加密演算法。

SHA-256 演算法使用了一組 6 個邏輯函數及一組常數 KT , 採用 512 比特的消息塊,每一個消息塊 Xi 分成 16 個 32 比特的字 M0, M1...M15。Hash 函數的安全性很大程度上取決於抗強碰撞的能力,即攻擊者找出兩個涓息 M 和 MtM≠Mt,使得 H(M)=HMt , 因此,評價一個 Hash 函數的安全性,就是看攻擊者在現有的條件下,是否可以找到該函數的一對碰撞。目前已有的對 Hash 函數攻擊的方法包括生日攻擊、彩虹表攻擊、差分攻擊等。[6]

5.2 scrypt

scrypt 是由著名的 FreeBSD 黑客 Colin Percival 為他的備份服務Tarsnap開發的。剛開始只是用於防止網路攻擊用的,但是後來逐漸延用到虛擬貨幣的技術上。

scrypt 加密演算法不僅計算所需時間長,而且佔用的內存也多,使得並行計算多個摘要異常困難,因此利用 rainbow table 進行暴力攻擊更加困難。scrypt 沒有在生產環境中大規模應用,並且缺乏仔細的審察和廣泛的函數庫支持。但是,scrypt 在演算法層面只要沒有破綻,它的安全性應該高於 PBKDF2 和 bcrypt。並且以特幣將 scrypt 演算法用於挖礦演算法中,將 scrypt 演算法的優勢充分發揮出來。[7]

5.3 ETHASH

Ethash(之前被稱為 Dagger-Hashimoto),是基於一個大的、瞬時的、任意生成的、形成 DAG(Dagger-part)的資料組規定,嘗試解決它一個特定的約束,部分通過區塊標題散列來決定。

它被設計用於在一個只有慢 CPU 的環境中來散列快速驗證時間,但在被提供大量高帶寬內存時,為挖礦提供大量的加速。大量內存需求意味著大規模礦工獲得相對少的超線性利益。高帶寬需求意味著從堆在很多超速處理單元、分享同樣內存的加速在每個單獨的單元給出很少的利益。[8]

5.4 ECDSA

橢圓曲線數字簽名演算法(ECDSA)是使用橢圓曲線密碼(ECC)對數字簽名演算法(DSA)的模擬。ECDSA 於 1999 年成為 ANSI 標準,並於 2000 年成為 IEEE 和 NIST 標準。它在 1998 年既已為 ISO 所接受,並且包含它的其他一些標準亦在 ISO 的考慮之中。與普通的離散對數問題(discrete logarithm problem DLP)和大數分解問題(integer factorization problem IFP)不同,橢圓曲線離散對數問題(elliptic curve discrete logarithm problem ECDLP)沒有亞指數時間的解決方法。因此橢圓曲線密碼的單位比特強度要高於其他公鑰體制。[9]

5.5 X11

X11 是由達世幣核心研發者Evan Duffield發明,並得到廣泛應用的哈希演算法。它的鏈式哈希演算法運用了一系列共 11 個科學哈希演算法,作為工作量證明。這樣不僅確保了信息處理分配的公正,還保留了比特幣原有的特性。不過,與之適配的專用集成電路的製造難度更大,生產時間甚至長達數年。[10]

藉助鏈式哈希,高端 CPU 的平均轉速達到了與 GPU 相似的水平。此外,這種演算法的另一個好處是,與 Scrypt 相比,鏈式哈希演算法下的 GPU 耗電量減少了 30%,溫度降低了 30-50%。

X11 是一種鏈式工作量證明 (PoW) 演算法。2014 年 1 月 18 日,它被首次應用在暗黑幣上。這種演算法受到 Quark 鏈式哈希演算法的啟發,在其基礎上進行了深度和複雜度的拓展。此外,它與 Quark 演算法的不同點在於:X11 哈希演算法的回合數量是預先確定的,而不是像 Quark 那樣隨機選定。

X11 採用了 11 輪哈希演算法,包括 blake, bmw, groestl, jh, keccak, skein, luffa, cubehash, shavite, simd 和 echo。這使得它成為現代加密數字貨幣中最安全和最複雜的演算法之一。

X11 的優勢在於:

0x06 小結

加密技術是加密貨幣的核心支撐。本文首先介紹了密碼學,然後介紹加密演算法的分類,接著列舉了常見的對稱加密演算法和非對稱加密演算法,然後講解了加密貨幣使用的加密演算法。我們可以看到,加密貨幣使用的加密演算法有別於傳統的加密演算法,基本上會在傳統的加密演算法基礎上做改進。

對於個人而言,需要了解的是,密碼越複雜,被破解的難度越高,概率越低。之前筆者所寫的區塊鏈資產安全攻略一文中提到,需要設置訪問密碼的錢包,建議設置至少 64 位的密碼,筆者設置了 128 位,並且包含大寫字母、小寫字母、數字和特殊符號。筆者使用 Python 編寫了一個生成隨機密碼的腳本,本地運行,生成密碼的數據字典是 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!#$%&』()*+,-./:;?@[]^_`{}~。此條密碼策略,重要交易所賬號同樣適用。

理解加密技術對理解加密數字貨幣會有很大的幫助,後續筆者再根據不同的加密演算法做深入探討。

0x07 參考

「區塊鏈技術指北」同名知識星球,點擊加入。BTW,李笑來老師也加入了。

李笑來老師也加入的知識星球

「區塊鏈技術指北」同名 Telegram Channel:https://t.me/BlockchainAge,歡迎訂閱。

同時,本系列文章會在以下渠道同步更新,歡迎關註:

原創不易,讀者可以通過如下途徑打賞,虛擬貨幣、美元、法幣均支持。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 全球大搜羅 的精彩文章:

TAG:全球大搜羅 |