區(qū)塊鏈技術(shù)中的哈希函數(shù)解析
掃描二維碼
隨時(shí)隨地手機(jī)看文章
想進(jìn)一步了解區(qū)塊鏈技術(shù)和比特幣的小伙伴,不得不翻越技術(shù)的圍墻,從技術(shù)的角度,“睜眼”看看區(qū)塊鏈?zhǔn)澜缋锏谝粋€(gè)殺手級(jí)成功應(yīng)用比特幣,看看中本聰為什么能被稱為外星人等等,而提到區(qū)塊鏈的技術(shù)這就不得不提到,學(xué)習(xí)區(qū)塊鏈技術(shù)經(jīng)常被使用到的一個(gè)知識(shí)——哈希函數(shù)。
哈希函數(shù)是一種從任何一種數(shù)據(jù)中創(chuàng)建小的數(shù)字指紋的方法。哈希函數(shù)把消息或數(shù)據(jù)壓縮成摘要,使得數(shù)據(jù)量變小,將數(shù)據(jù)的格式固定下來。該函數(shù)將數(shù)據(jù)打亂混合,重新創(chuàng)建一個(gè)叫做散列值的指紋。
百度百科和維基百科真有別稱的話,應(yīng)該叫(專業(yè)到讓人)看不懂百科。給哈希函數(shù)一個(gè)簡(jiǎn)潔的白話定義:哈希函數(shù)是一系列復(fù)雜的但輸出值位數(shù)固定的數(shù)學(xué)變換。
變換不能亂變換,要照著如下過程來:
1、任何長(zhǎng)度的內(nèi)容(數(shù)據(jù))
2、經(jīng)過這系列復(fù)雜但固定的數(shù)學(xué)變換后
3、會(huì)輸出一個(gè)固定長(zhǎng)度和格式的數(shù)據(jù)(數(shù)值)
腳注:數(shù)學(xué)領(lǐng)域會(huì)用 H() 表示這經(jīng)過變化后輸出的數(shù)值,中文名叫消息摘要或數(shù)字指紋。
比如,在比特幣中,公鑰生成地址時(shí)用到的哈希函數(shù) SHA256,后面的“256”的意思是輸出是固定 256 位長(zhǎng)度的數(shù)據(jù)。
這數(shù)學(xué)變換不是任意變換都能被稱之為哈希函數(shù),一個(gè)數(shù)學(xué)變換要升級(jí)為哈希函數(shù)必須符合三個(gè)條件:唯一性、單向性、暴力求解:
1、哈希函數(shù)的唯一性
直觀的理解就是:只有輸入 X,才能得到H(X)。理解這個(gè)特性時(shí),可以把哈希函數(shù)理解成你和你的指紋,你是輸入,你的指紋是輸出,唯一性就是指只有你才能有你的指紋,在比特幣里就是指,你轉(zhuǎn)賬用的比特幣地址,只有你的公鑰才能生成,就像你的指紋是獨(dú)一無二的一樣,世界上沒有任何其他人能生成和你一樣的轉(zhuǎn)賬地址。
2、哈希函數(shù)的單向性
哈希函數(shù)的單向性是指H(X)是無法反向推導(dǎo)X。
如果給你一個(gè)指紋,僅有一個(gè)指紋的你,是絕對(duì)想象不出指紋的主人到底是男是女,到底長(zhǎng)什么樣,只能知道這是個(gè)指紋。
哈希函數(shù)的單向性可以用一個(gè)不準(zhǔn)確但十分形象的類比來直觀理解——來猜猜下巴的主人是誰?
這 Man 味十足的迷人下巴主人是白宇?是張震?還是趙又廷?
謎底揭曉:是我們喜愛的坤坤,不是蔡徐坤,而是鄉(xiāng)村 F4 謝廣坤↓
因?yàn)楣:瘮?shù)的單向性,所以在比特幣里,即使我們的收款地址是公開的,但是沒人能知道我們生成收款地址的公鑰是什么,更無法知道生成公鑰的私鑰是什么。
市面上有一種言論說,量子計(jì)算機(jī)的出現(xiàn)會(huì)讓比特幣一文不值,但現(xiàn)在你應(yīng)該知道,即使量子計(jì)算機(jī)出現(xiàn)可,目前也難以攻破哈希函數(shù),哈希函數(shù)是中本聰為比特幣設(shè)置的一道安全鎖,希望比特幣有充足的時(shí)間升級(jí)到抗量子的加密算法。
3、哈希函數(shù)的暴力求解
如果知道哈希值H(X)真想找到輸入值 X,只能從源頭出發(fā),一個(gè)數(shù)一個(gè)數(shù)去嘗試,每個(gè)數(shù)都套到哈希函數(shù)里,然后看看輸出的哈希值是不是等于H(X)。
就像如果你真想知道某個(gè)指紋是誰的指紋,你只能全世界一個(gè)個(gè)人找過去,去對(duì)比每一個(gè)手里的指紋和這個(gè)指紋,是不是完全相同,沒有絲毫偏差。 02
哈希函數(shù)因?yàn)檫@三個(gè)特性變成了中本聰手里的利器,幫助他在設(shè)計(jì)比特幣的路上解決了多個(gè)難題,在比特幣白皮書中,除了簡(jiǎn)介和結(jié)論的 10 個(gè)章節(jié)里,幾乎每個(gè)章節(jié)都能看到哈希函數(shù)的使用。
用哈希函數(shù)的唯一性用來防止作假——數(shù)字簽名
用哈希函數(shù)的唯一性來提升效率——默克爾樹檢索交易記錄
用哈希函數(shù)的單向性用來保密——公鑰生成比特幣的地址
用哈希函數(shù)的暴力求解來設(shè)計(jì)比特幣的工作量證明——當(dāng)范圍足夠大的時(shí)候,拿著指紋去找指紋擁有人是不可能的事情,但如果把范圍縮小呢,比如在一個(gè)只有幾百萬人的城市里找,難度就會(huì)小很多,這就是比特幣的挖礦難度調(diào)整機(jī)制,想要難度高一點(diǎn)那就把范圍擴(kuò)大一點(diǎn),想要難度低一點(diǎn)就把范圍縮小一點(diǎn)。
1953 年哈希函數(shù)出現(xiàn),1970 年哈希函數(shù)蓬勃發(fā)展,2001 年 SHA-256 出現(xiàn),在 2008 年時(shí),哈希函數(shù)卻在中本聰手里被玩出了花,成為了區(qū)塊鏈技術(shù)里不可撼動(dòng)的基石。
從這個(gè)角度看,多少讓人理解了為什么專家和大牛都忍不住夸贊中本聰天才,甚至懷疑中本聰是不是外星人。
至此,雖然比特幣白皮書中技術(shù)原理你只是懂了一個(gè)基礎(chǔ)知識(shí)哈希函數(shù),但這一點(diǎn)都不妨礙你理解了比特幣白皮書里 50%想要表達(dá)的內(nèi)容。