比特幣雜湊函式簡述

買賣虛擬貨幣

對比特幣感興趣的人或多或少應該都聽說過“加密雜湊函式(cryptographic hash function)”這個術語。但是它究竟是什麼意思,與又有什麼聯絡?

雜湊函式不僅是比特幣協議的重要部分,還是也是整個資訊保安的重要部分。

我們將在下文中透過一些簡單的例子來展示雜湊函式的工作原理。

什麼是雜湊函式? 

從理論上講,雜湊函式就是一種數學流程,將任意大小的輸入資料放入該流程,然後返回固定大小的輸出資料。

更具體地講就是,提取任意長度的字母序列作為輸入——我們將其稱為string——然後返回一個固定長度的字母序列。無論這個輸入string是一個單一的字母,單詞,句子還是整部小說,而輸出的長度——叫做摘要(digest)——永遠都是相同的。

這種型別的雜湊函式的常見用例就是儲存密碼。

當你使用任何一種網路服務建立一種需要密碼的使用者賬戶時。這種密碼都是透過雜湊函式執行的,儲存的就是該密碼資訊的雜湊摘要。當你輸入密碼來登入賬號時,然後相同的雜湊函式就會去執行你輸入的密碼,然後伺服器就會檢查其結果是否與儲存的摘要相匹配。

這就意味著即使駭客能夠訪問用於儲存雜湊的資料庫,他們也不可能立即破壞所有使用者賬戶,因為無法輕易找到生成某一特定雜湊的密碼。

Python簡單雜湊函式

你可以使用Python(Mac和Linux作業系統在預設情況下安裝的程式語言)來實驗雜湊值。(本教程假設使用了某種版本的OSX或者Linux系統,因為Windows使用Python會更加複雜)

首先,開啟終端,輸入python並點選Enter。

然後你將進入Python REPL,在這種環境下,你可以直接試用Python命令,而不是在單獨的檔案中編寫程式。

然後輸入以下數值,在每行之後敲擊Enter,並在標記處輸入TAB:

import hashlib
def hash(mystring):
[TAB] hash_object = hashlib.md5(mystring.encode())
[TAB] print(hash_object.hexdigest())
[ENTER]
這樣你就建立了一個函式——hash(),該函式將計算出某一特定的使用MD5雜湊演算法的字串的雜湊值。將字串插入上述的括號()中便可執行該函式。例如:
hash(“CoinDesk rocks”)按下Enter並檢視該字串的雜湊摘要。你將看到在同一字串上呼叫該雜湊函式將會總是生成相同的雜湊,但新增或改變其中的某一個字元將會生成一種完全不同的雜湊值:
hash("CoinDesk rocks") => 7ae26e64679abd1e66cfe1e9b93a9e85
hash("CoinDesk rocks!") => 6b1f6fde5ae60b2fe1bfe50677434c88
比特幣雜湊函式
在比特幣協議中,雜湊函式是區塊雜湊演算法的一部分,區塊雜湊演算法可以用來透過挖礦流程將新的交易編寫到區塊鏈中。在比特幣挖礦過程中,函式的輸入都是來自於最近的尚未確認的交易(以及一些與前一個區塊相關的時間戳和引用一些額外輸入)在以上程式碼示例中,我們已經看到改變雜湊函式中的一小部分會導致產生一種完全不同的輸出。這個屬性與挖礦過程中的“工作量證明(POW)”演算法至關重要:為了成功“解決”一個區塊,礦工需要以這種方式將所有輸入與他們自己的輸入資料結合,由此產生的雜湊將以某些0開頭。作為一種基礎的演示,我們可以透過在“CoinDesk rocks!”後面手動新增嘗試感嘆號(!),以此嘗試使用我們的Python雜湊函式來進行“挖礦”,知道我們找到以單個0開頭的雜湊。
>>> hash("CoinDesk rocks!!")
66925f1da83c54354da73d81e013974d
>>> hash("CoinDesk rocks!!!")
c8de96b4cf781a6373766c668ceac0f0
>>> hash("CoinDesk rocks!!!!")
9ea367cea6a2cc4a6f5a1d9a334d0d9e
>>> hash("CoinDesk rocks!!!!!")
b8d43387d98f035e2f0ac49740a5af38
>>> hash("CoinDesk rocks!!!!!!")
0fe46518541f4739613b9ce29ecea6b6 => SOLVED!
當然,為比特幣區塊解決雜湊——編寫該文時,必須以18個0開頭——需要一個非常大的計算量(比特幣網路的所有計算機處理能力結合在一起仍舊需要接近10分鐘才能解決一個區塊)。
需要大量的處理能力就意味著新比特幣的挖掘需要一個長期的過程才能完成,而無法一次性將所有的比特幣全部挖出。為了能夠從挖礦中賺取比特幣,你需要投入大量的工作來解決區塊——透過獲得這種獎勵,你將所有的新交易鎖入區塊中,也就是新增到之前所有交易的永久性記錄中:區塊鏈。更多區塊鏈數字貨幣資訊:http://www.qukuaiwang.com.cn/news

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;