文章目錄
- 1.哈希函數
- 1.1 哈希函數的性質
- 1.2 常見哈希算法
- 1.3 Merkle Tree(默克爾樹)
- 1.4 HMAC(哈希消息認證碼)
- 2. 公鑰密碼學
- 2.1 對稱加密 vs 非對稱加密
- 2.2 RSA 算法
- 2.3 ECC(橢圓曲線密碼學)
- 2.4 Diffie-Hellman 密鑰交換
- 3. 常見的加密算法與協議
- 3.1 AES(高級加密標準)
- 3.2 TLS(傳輸層安全協議)
- 4. 區塊鏈特有的密碼學技術
- 4.1 Merkle Patricia Tree(MPT)
- 4.2 多重簽名(Multisig)
- 4.3 環簽名(Ring Signature)
- 4.4 zk-SNARKs(零知識簡潔非交互式論證)
- 5. 加密中的智能合約安全
- 5.1 Commit-Reveal 機制
- 5.2 可驗證延遲函數(VDF)
1.哈希函數
哈希函數是一種輸入長度不定、輸出長度固定的函數,廣泛用于數據完整性校驗、密碼存儲、區塊鏈中的區塊鏈接等。
1.1 哈希函數的性質
1.2 常見哈希算法
算法 | 輸出長度 | 安全性現狀 |
---|---|---|
MD5 | 128 位 | 已被破解,不安全 |
SHA-1 | 160 位 | 已被破解,不安全 |
SHA-256 | 256 位 | 仍然安全 |
SHA-3 | 224/256/384/512 位 | 目前安全 |
BLAKE2 | 256/512 位 | 速度快,安全性高 |
MD5算法已被破解,例圖:
1.3 Merkle Tree(默克爾樹)
Merkle 樹是一種基于哈希函數的樹結構,常用于數據完整性驗證,區塊鏈中的交易數據存儲采用 Merkle 樹。
Merkle 樹的構造如下:
1.將交易數據分別進行哈希運算。
2.以配對方式對哈希值再次進行哈希,直到生成一個根哈希值(Merkle Root)。
3.只需存儲根哈希,即可驗證某個交易是否在區塊中,無需存儲完整數據。
示例:
Root/ \H12 H34/ \ / \H1 H2 H3 H4
在比特幣區塊中,Merkle 根用于證明一筆交易是否包含在某個區塊里。
假設一個區塊有 4 筆交易,Merkle 樹結構如下:
Root = H12_34/ \H12 H34/ \ / \
H1 H2 H3 H4
假設你要驗證 H3 是否在樹中,只需要知道:
1.交易的哈希值 H3。
2.同層的兄弟哈希 H4(用于計算 H34)。
3.上層的兄弟哈希 H12(用于計算 Root)。
通過如下計算:
1.計算 H34 = Hash(H3 || H4)
2.計算 Root = Hash(H12 || H34)
3.比對 Root 是否等于區塊頭中的 Merkle Root,即可判斷 H3 是否在樹中。
這樣做的好處是:
1.節省存儲空間,區塊鏈上的輕客戶端(如 SPV 客戶端)不需要存儲完整交易,只存 Merkle Root。
2.只需要下載根哈希,比直接下載整個區塊更快,特別適用于移動設備或存儲受限的節點。
3.如果交易數據被篡改,Merkle Root 也會變,保證了數據的不可篡改性。
1.4 HMAC(哈希消息認證碼)
HMAC(Hashed Message Authentication Code)是一種基于哈希函數的消息認證機制,用于數據完整性和認證。例如,TLS 1.2 使用 HMAC-SHA256 進行消息完整性驗證。
公式:
其中:
- ( K ) 是密鑰
- ( M ) 是消息
- ( opad ) 和 ( ipad ) 是填充常數
認證流程:
1.發送方選擇一個密鑰K(雙方預先共享)。
2.發送方通過公式,帶入消息M來計算HMAC值
3.發送方發送消息M與HMAC值,如圖:
4.接收方收到消息M后,帶入消息M,使用相同的密鑰K計算HMAC值
5.比較接收到的HMAC值和計算出的HMAC值
6.如果匹配,說明消息未被篡改,驗證通過。
7.如果不匹配,說明消息可能被修改或密鑰錯誤,驗證失敗。
這樣做的好處是
1.攻擊者即使攔截消息并修改內容,也無法偽造正確的 HMAC(除非他知道密鑰)。
2.即使攻擊者知道HMAC值,也無法反推出密鑰K。
2. 公鑰密碼學
公鑰密碼學(非對稱加密)使用一對密鑰(公鑰和私鑰),廣泛用于加密、數字簽名和身份驗證。
2.1 對稱加密 vs 非對稱加密
類別 | 加密方式 | 密鑰 | 速度 | 應用 |
---|---|---|---|---|
對稱加密 | 加密和解密使用相同密鑰 | 需要共享密鑰 | 速度快 | AES、DES |
非對稱加密 | 公鑰加密,私鑰解密 | 公私鑰對 | 速度慢 | RSA、ECC |
看一個對稱加密的場景:
1.假設 Alice 想給 Bob 發送加密消息,她使用 AES 對稱加密。
2.Alice 和 Bob 事先共享一個密鑰 K(密鑰必須保密)。
3.Alice 使用 AES 加密明文 M,得到密文 C
4.Alice 發送密文 C 給 Bob。
5.Bob 收到密文 C 后,使用相同的密鑰 K 進行解密:
6.Bob 得到原始消息 M。
可以看到,對稱加密的缺點是:如果密鑰泄露,攻擊者可以解密所有通信內容;不適用于身份認證,無法確認是誰發送的消息。
非對稱加密使用一對密鑰(公鑰 + 私鑰),雖然數據加密速度慢,但適用于安全通信和身份認證。流程如下:
1.假設 Alice 需要向 Bob 發送一條加密消息。
2.Bob 生成 RSA 公私鑰對:
- 公鑰 PK_B(公開給所有人)。
- 私鑰 SK_B(只有 Bob 自己知道)。
3.Alice 獲取 Bob 的公鑰 PK_B。
4.Alice 使用 PK_B 加密消息 M,得到密文 C:
5.Bob 使用私鑰 SK_B 解密 C,恢復明文 M
6.Bob 得到原始消息 M。
此時密鑰泄露的可能降低,同時可以看出,非對稱加密可用于身份認證(如數字簽名)。
在實際應用中,可以使用非對稱加密傳輸對稱密鑰,再用對稱加密進行數據加密,典型的案例是HTTPS:
1.客戶端(瀏覽器)使用服務器公鑰加密 AES 密鑰,并發送給服務器。
2.服務器用私鑰解密,得到 AES 密鑰。
3.后續通信使用 AES 進行對稱加密,提高速度。
2.2 RSA 算法
RSA 是最早的公鑰加密算法之一,基于大數因子分解問題。
RSA 加密流程:
2.3 ECC(橢圓曲線密碼學)
ECC(Elliptic Curve Cryptography)是一種基于橢圓曲線數學的公鑰加密算法,相比 RSA,提供相同安全性時,所需密鑰更短,計算速度更快,因此廣泛應用于區塊鏈和現代密碼系統。
基于 ECC 的數字簽名算法:
- ECDSA(橢圓曲線數字簽名算法):比特幣和以太坊使用的簽名算法。
- EdDSA:更快、更安全的數字簽名算法。
2.4 Diffie-Hellman 密鑰交換
用于在不安全信道上安全地共享密鑰,區塊鏈中的 P2P 加密通信常用該協議。
交換流程:
3. 常見的加密算法與協議
3.1 AES(高級加密標準)
AES 是最常用的對稱加密算法,支持 128、192、256 位密鑰。
其模式有:
- ECB(電子密碼本)- 不安全
- CBC(密碼塊鏈接)- 需要 IV
- GCM(Galois/Counter Mode)- 高效且支持認證
3.2 TLS(傳輸層安全協議)
TLS 1.3 采用 ECDHE(橢圓曲線 Diffie-Hellman 交換)進行密鑰交換,使用 AES-GCM 進行加密。
4. 區塊鏈特有的密碼學技術
4.1 Merkle Patricia Tree(MPT)
以太坊采用 MPT 存儲賬戶狀態,每次狀態更新都會更新 Merkle 根,保證數據完整性。
4.2 多重簽名(Multisig)
多重簽名(Multisig,Multi-Signature) 允許一個交易需要多個私鑰簽名才能生效,提升安全性,常用于共享錢包、智能合約等場景。
N-of-M 簽名模式:
- M:總共有 M 個授權方(持有私鑰的人)。
- N:需要至少 N 個私鑰簽名才能執行交易。
例如,2-of-3 多重簽名表示:3 個人持有私鑰,但至少需要 2 人簽名,交易才能生效。
比特幣支持多重簽名,交易流程如下(以 2-of-3 為例):
這樣做的好處是:
1.共享錢包,實現公司賬戶或DAO組織的安全性,防止單點風險。
2.買賣雙方將資金托管(Escrow)在第三方,確保公正交易。
3.即使一個私鑰泄露,攻擊者仍無法盜取資金。
4.3 環簽名(Ring Signature)
環簽名是一種群體簽名技術,在一組公鑰(混合了其他人的公鑰)中,只有一個是真正的簽名者,但無法區分是誰。
簽名流程如下:
這樣做的好處是:
1.外部觀察者無法確定資金的真正來源。
2.去中心化匿名性,不依賴第三方。
3.即使攻擊者分析鏈上數據,也無法還原真實交易路徑。
4.4 zk-SNARKs(零知識簡潔非交互式論證)
zk-SNARKs 是一種 零知識證明(Zero-Knowledge Proof)技術,在 Zcash 等隱私幣中被用來保護交易隱私,確保交易有效性同時隱藏交易細節(如交易金額和發送方、接收方信息)。
特點:只有參與交易的雙方知道具體的交易細節,第三方無法從區塊鏈上獲得任何信息。
工作原理:
5. 加密中的智能合約安全
5.1 Commit-Reveal 機制
前瞻攻擊指的是在某些交易或競拍環境中,惡意用戶通過提前得知即將提交的交易或出價信息,在其之前進行自己的交易或操作,從而獲得不公平的優勢。例如,在一個去中心化交易所(DEX)中,攻擊者可能會提前看到用戶的交易訂單,然后在交易執行之前先行交易,從而操控市場價格,獲取額外利潤。
Commit-Reveal 機制通過以下兩步實現防止前瞻攻擊:
1.提交(Commit)階段
在提交階段,用戶在提交他們的實際交易數據或出價之前,會先提交一個加密哈希值(commitment),這個哈希值是通過哈希函數對交易數據進行加密處理得到的。例如,用戶想要競拍某項物品,先通過某個算法(如哈希)生成該競拍信息的哈希值,然后將該哈希值提交到區塊鏈上。哈希值本身并不暴露用戶的真實意圖或交易數據,因此即使其他用戶看到這個哈希值,他們也無法知道具體的交易內容。這樣就避免了惡意用戶根據即將發生的交易進行前瞻攻擊。
2.揭示(Reveal)階段
用戶在合適的時間(通常是經過一定的延遲)后,將其實際交易內容或出價公開。系統會將提交的哈希值與用戶揭示的實際數據進行匹配。如果兩者匹配,則證明該用戶在提交階段的承諾是合法且真實的。如果不匹配,則交易將被認為是無效的。
5.2 可驗證延遲函數(VDF)
可驗證延遲函數(Verifiable Delay Function, VDF) 是一種加密技術,旨在生成一個需要一定時間來計算的值,但一旦計算完成,任何人都可以快速驗證其正確性。其主要特點是,它不僅要求計算時間延遲,而且這個延遲是不可并行化的,意味著必須按順序逐步計算,無法通過并行處理來加速。
Sybil 攻擊(女巫攻擊)的成功通常依賴于節點能夠快速而低成本地生成大量虛假身份,從而影響網絡的共識過程。VDF 通過引入計算延遲,使得攻擊者無法快速生成大量有效的身份或簽名。攻擊者必須消耗一定的時間來進行計算,這個過程對他們來說是昂貴且緩慢的,從而有效減少了攻擊的可能性。