比特幣哈希函數是什麼 | 金色百科

金色百科 哈希函數 比特幣 姚遠 2018-07-25

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

哈希函數不僅是比特幣協議的重要部分,還是也是整個信息安全的重要部分。

我們將在下文中通過一些簡單的例子來展示哈希函數的工作原理。

4s1rQZHHTZAN6IN0DfD1HaCrmcvaxBHqe9go0TAp.jpeg

什麼是哈希函數?

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

更具體地講就是,提取任意長度的字母序列作為輸入——我們將其稱為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.coindesk.com/bitcoin-hash-functions-explained/
作者:Corin Faife
編譯:Kyle
稿源(譯):巴比特資訊( http://www.8btc.com/bitcoin-hash-functions-explained)

比特幣哈希函數是什麼 | 金色百科
本文來源: 巴比特資訊 / 責任編輯:邸卉我要糾錯
聲明:金色財經登載此文出於傳遞更多信息之目的,並不意味著贊同其觀點或證實其描述。文章內容僅供參考,不構成投資建議。投資者據此操作,風險自擔。
比特幣實時價格 ¥57192.93(數據來源:火幣Pro)

相關推薦

推薦中...