文章目錄
- 1.比特幣中用到的密碼學的功能
- 2. hash
- 3. 簽名
1.比特幣中用到的密碼學的功能
比特幣中用到密碼學中兩個功能: hash、 簽名。
2. hash
hash函數的三個特性:抗碰撞性(Collision Resistance)、隱蔽性(Hiding)、謎題友好性(Puzzle Friendly)。
- 抗碰撞性(Collision Resistance):很難找到兩個不同的輸入a和b、使得它們的哈希值相同,即a≠b,但H(a)=H(b)。
- 隱蔽性(Hiding):hash函數的計算過程是單向的,是不可逆的,給定一個輸入x可以算出他的哈希值H(x),但是不能從哈希值H(x)中反推算出來x。
- 謎題友好性(Puzzle Friendly):難以找到特定的輸入使得輸出滿足某些條件,必須通過隨機嘗試來找到符合條件的解。Puzzle Friendly是比特幣工作量證明機制的核心密碼學基礎。
hash碰撞是不可避免的,因為輸入空間是遠遠大于輸出空間。碰撞是客觀存在的,沒有什么高效的方法人為的去制造hash碰撞,硬是要找的話可以用蠻力求解的方法。
抗碰撞性(Collision Resistance)理論上是不可證的。只是實踐中的經驗。有些hash函數以前認為是抗碰撞性后來找到了人為制造hash碰撞的方法著名的例子是MD5,MD5曾經是一個很流行的hash函數。現在已經可以人為制造hash碰撞安全性下降。Md5在一些對定全性要求不高的內部系統中仍可能用于簡單的數據標識和校驗。
比特幣依賴SHA-256、RIPEMD-160和HMAC-SHA512等哈希函數,實現了區塊鏈不可篡改性,地址隱私性,交易驗證高效性以及去中心化共識。
隱蔽性(Hiding)成立的前提:① 輸入空間足夠大使蠻力破解不可行、② 輸入分布比較均勻,各種取值的可能性差不多。
如果輸入空間不夠大。常用的方法是在后面拼接n位隨機數。比如預測股市,可以把預測的信息拼接n位隨機數取hash發布到區塊鏈上,等公布后再發布出原始信息。
工作量證明(POW):在挖礦的過程中,礦工的任務是找到一個隨機數(Nonce),使得區塊頭的hash值滿足H(區塊頭)≤目標值(target),礦工無法預測哪個Nonce能生成符合條件的hash值,必須通過海量計算(試錯法)來找到有效Nonce,這需要消耗大量算力。挖礦很難,驗證很容易(difficult to solve, but easy to verify)。
3. 簽名
簽名(Digital Signature):基于非對稱加密技術(如橢圓曲線加密算法),對需要加密的信息(如比特幣交易內容)進行hash運算(如SHA-156),生成固定長度的hash值。用發送者的私鑰對哈希值加密,生成數字簽名。這樣既保證了效率又增加了安全性。
簽名=私鑰加密(交易哈希)
驗證簽名:獲取原始信息(比如比特幣交易內容)簽名和發送方的公鑰。對原始信息重新計算哈希值。用發送方的公鑰解密簽名,得到原始哈希值。若解密后的哈希值與重新計算的哈希值一致。則簽名有效。
驗證結果=(公鑰解密(簽名)==交易哈希)
簽名用私鑰,驗證用公鑰。
注:產生公私鑰要有好的隨機源,簽名時也要有好的隨機源,如果隨機源不好就有可能泄露私鑰。
- 對稱加密:加解密用同一個密鑰。缺點是密鑰的分發不方便。得有安全的渠道把密鑰分發給通訊的雙方。網絡是不安全的可能會被竊聽。
- 非對稱加密:一對公私鑰 ,加密用公鑰,解密用私鑰。私鑰要保密可保存在本地,比如A發送信息給B,A用B的公鑰加密信息后傳輸給B,B收到信息后,用B的私鑰解密得到原來的信息.。加密解密用的是同一個人的公私鑰,都是接收方的公私鑰。非對稱加密解決了對稱加密密鑰分發不方便的問題。