比特幣、暴雪和下載盜版電影都應(yīng)用了同一種算法:哈希算法

2 評(píng)論 4311 瀏覽 14 收藏 10 分鐘

哈希算法是如何保護(hù)比特幣和其他數(shù)據(jù)的?通過文章一起來了解下~

在ICO泡沫迅速涌起和迅速破滅后,比特幣仍然一路高歌,在最近突破了9600美金的大關(guān)。作為一種獨(dú)立于貨幣體系的數(shù)字加密幣,比特幣成功的本質(zhì)還是要?dú)w功于技術(shù)——區(qū)塊鏈的安全和隱私支撐起了比特幣最核心的價(jià)值。

提到區(qū)塊鏈,非對(duì)稱加密算法和哈希算法是兩個(gè)不能避開的技術(shù)名詞。尤其是哈希算法,在區(qū)塊鏈相關(guān)的技術(shù)文章中總能看到這個(gè)名字,卻很難真正理解它的奧秘。今天,我們就來看看哈希算法是如何保護(hù)比特幣和其他數(shù)據(jù)的?

學(xué)好哈希算法,用腦子儲(chǔ)存比特幣

如果你準(zhǔn)備購(gòu)買比特幣,你就會(huì)擁有一個(gè)“比特幣錢包”。通常來講,比特幣錢包會(huì)是一個(gè)移動(dòng)/本地客戶端,用戶可以通過客戶端進(jìn)行交易。但是還有一種更高端的玩法:腦錢包。

我們知道,比特幣實(shí)際上是一種“資源”,它并不是像文檔一樣躺在誰的U盤里,而想要確立這種資源的所有權(quán),則需要由用戶自己生成一串?dāng)?shù)字密鑰并儲(chǔ)存到某個(gè)地方。交易時(shí),先生成一套只能由交易中某一方用來解密的私有密鑰,再根據(jù)私有密鑰單向加密生成雙方都能看到的共有密鑰。

由于密鑰的生成是獨(dú)立于比特幣協(xié)議和區(qū)塊鏈的,所以如何保護(hù)好自己的密鑰成了一個(gè)大問題,以前甚至發(fā)生過黑客破解比特幣錢包客戶端獲取比特幣的事件。

為了避免這種問題,就有人想出了一個(gè)新方法:自己生成一段比特幣密鑰,然后記在自己腦子里。

生成比特幣密鑰的方式并不難,最初始的密鑰只是一串256位的二進(jìn)制數(shù)字,拋二百多次硬幣即可得到。但想記住二百多個(gè)0和1實(shí)在是太復(fù)雜了,腦錢包概念的關(guān)鍵在于,用哈希算法SHA-256對(duì)密鑰進(jìn)行校驗(yàn),讓256位二進(jìn)制數(shù)字變成更短的編碼,就可以保證讓這串字符適合人腦記憶。

來自國(guó)家安全局,怪不得哈希算法很安全!

不管是拋二百次硬幣用腦子記憶的腦錢包,還是在移動(dòng)端、PC端作為客戶端的電子錢包,基本都繞不開用SHA-256算法校驗(yàn)這一步驟。

其實(shí)SHA-256算法發(fā)明的最初目的和比特幣毫無關(guān)系,1993年,美國(guó)國(guó)家安全局設(shè)計(jì)了一套用于安全加密的密碼散列函數(shù)——Secure Hash Algorithm,翻譯過來就是安全散列算法。人們更愿意把它叫做SHA,1993年推出的版本名為SHA-0,后來隨著算法不斷的被破解又不斷自我修正,最終推出了數(shù)個(gè)SHA算法的變體,其中就包括SHA-256。

SHA最主要的特性就是,接收到二進(jìn)制數(shù)字消息時(shí)會(huì)形成一串“數(shù)字摘要”,而這一摘要還可以用來驗(yàn)證數(shù)字消息的完整性。如上文所示,SHA-256就意味著算法可以把256位的二進(jìn)制數(shù)字進(jìn)行壓縮。

很多人會(huì)感到疑惑的是,哈希算法對(duì)數(shù)字進(jìn)行壓縮、摘要,那么為什么不可以根據(jù)這些摘要反向“破解”呢?

哈希算法與其說是“加密”,其實(shí)更接近于“壓縮”。這其中涉及到一個(gè)“映射”的概念。所謂映射,我們可以理解為“代表”。舉個(gè)例子,可以用ABC這樣的字符去代表10001101這樣的數(shù)字,字符A可以代表1、001、0001等等,但只得到字符A時(shí),我們無法得知加密前的數(shù)字究竟是1還是001還是0001還是……

用更簡(jiǎn)單的案例解釋一下:在比特幣交易中,交易雙方都能得知的共有密鑰是“100”,但只有其中一方知道加密前的私有密鑰是2+78+5+5+10。

得到100這個(gè)共有密鑰的人,想要破解私有密鑰只能去挨個(gè)去排列“1+0+0+0+99”、“1+1+0+0+98”……如果變成256位的密鑰,幾乎是一個(gè)不可能完成的任務(wù)。而想要驗(yàn)證公有密鑰也很簡(jiǎn)單,既然加密前的私有密鑰是2+78+5+5+10,那么99、98這些公有密鑰就都是錯(cuò)誤的。

忘記比特幣,下載過盜版電影的你早就認(rèn)識(shí)了哈希算法

所以,目前看來哈希算法的壓縮功能最大的用處是在比特幣交易加密上?

實(shí)際上哈希算法最大的用處還是壓縮數(shù)據(jù),之所以被用在比特幣上,是因?yàn)槠渲邪拇罅窟\(yùn)算貼合了以“消耗資源來獲取比特幣”的規(guī)則。在其他領(lǐng)域中,哈希算法也能發(fā)揮很大作用。

一個(gè)比較典型的例子是游戲公司暴雪推出的“One Way Hash”算法。

作為手握魔獸爭(zhēng)霸、星際等等數(shù)款大型游戲的企業(yè),暴雪和其他企業(yè)一樣,擁有一個(gè)巨大的數(shù)據(jù)庫(kù)。而當(dāng)數(shù)據(jù)庫(kù)太大時(shí),從中檢索就成了一個(gè)巨大的麻煩。

通常情況下在數(shù)據(jù)庫(kù)中尋找數(shù)據(jù)就像在KTV點(diǎn)歌,數(shù)據(jù)庫(kù)是曲庫(kù),想要找到自己要點(diǎn)的歌,只能把曲庫(kù)從頭到尾翻個(gè)遍。但也有一種更簡(jiǎn)單的方法,那就是建立一種代表關(guān)系,把歌曲名字《小星星》簡(jiǎn)寫成XXX,并把這種對(duì)應(yīng)關(guān)系儲(chǔ)存在數(shù)據(jù)庫(kù)中。尋找歌曲時(shí),如果連XXX都找不到,說明曲庫(kù)中不可能存在《小星星》這首歌。

同理,《小星星》=XXX、《愛我中華》=AWZH,這種文字轉(zhuǎn)化成拼音、拼音取首字母的對(duì)應(yīng)方式在現(xiàn)實(shí)應(yīng)用時(shí)可能會(huì)涉及到函數(shù)、坐標(biāo)等等數(shù)學(xué)問題,總之這種對(duì)應(yīng)方式被稱作“哈希表”。

但我們?cè)贙TV點(diǎn)歌時(shí),搜索XXX得出的結(jié)果不光有《小星星》、還有《笑哈哈》,面對(duì)這種同一字符串在哈希表上位置相同的問題,暴雪的程序猿們想出了一種絕妙的解決辦法——在哈希表中用三個(gè)哈希值來校驗(yàn)位置。

也就是說在暴雪KTV的曲庫(kù)中,《小星星》(xiaoxingxing)的哈希值可以分別是XXX、OGG和III,這時(shí)再搜索歌曲,就幾乎不會(huì)遇到《小星星》和《笑哈哈》同時(shí)出現(xiàn)的情況了。

同樣的作用也體現(xiàn)在P2P(點(diǎn)對(duì)點(diǎn))傳播上。如果是上古時(shí)代的互聯(lián)網(wǎng)用戶,可以對(duì)emule(電驢)這款下載軟件有印象,在eMule上可以從全球所有eMule用戶手中接收某一件文件的數(shù)據(jù)上行和下載。

其原理就是,當(dāng)你想下載電影《戰(zhàn)狼2》時(shí),系統(tǒng)會(huì)提取《戰(zhàn)狼2》的哈希值,通過對(duì)這一哈希值的搜索,可以發(fā)現(xiàn)所有擁有《戰(zhàn)狼2》的用戶,大家一起進(jìn)行點(diǎn)對(duì)點(diǎn)的數(shù)據(jù)傳送,eMule本身也不用建立數(shù)據(jù)庫(kù),只搭建平臺(tái)就可以了。因?yàn)楣K惴ǖ膲嚎s特性,使得“全球搜索”這件事變的低成本并可行。

雖然那個(gè)具備共享精神的好時(shí)代一去不復(fù)返,但即使是今天哈希算法也依然活躍在我們的視野中,即使有很多人聲稱自己破解了哈希算法,卻也沒有發(fā)生過因?yàn)樗惴ū黄平舛斐蓳p失的情況。

目前來看,哈希算法如果被拋棄,無非是出現(xiàn)以下兩種情況:

  • 第一,量子計(jì)算開始應(yīng)用,哈希算法和已知的所有密碼、加密方式都被強(qiáng)大的計(jì)算能力和速度打敗。
  • 第二,出現(xiàn)了更好用的壓縮算法,比如美劇《硅谷》中的魔笛手成真,哈希算法由于不好用而被開發(fā)者拋棄。

評(píng)估一下以上這兩種情況出現(xiàn)的可能性,相信大家就能知道哈希算法還會(huì)陪伴我們多久了。

 

本文由 @腦極體 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。

題圖來自u(píng)nsplash,基于CC0協(xié)議

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. :mrgreen:

    來自上海 回復(fù)