時(shí)間:2023-08-14|瀏覽:285
首先看下它的定義——一種具有確定性的單向哈希函數(shù)。我們逐詞解釋一下:
1.「算法」就是執(zhí)行操作的一系列步驟/過(guò)程; 2.「哈希函數(shù)」是一種數(shù)學(xué)函數(shù),輸入的長(zhǎng)度可以是任意的,但輸出的長(zhǎng)度是固定的,可以把它理解為文件的數(shù)字指紋; 3.具有「確定性」的特征,意思是同一個(gè)輸入值,總能得到相同的輸出值。
SHA256是指輸出值為256位的安全的哈希算法,那「單向」是什么意思呢——單向代表了函數(shù)很難逆推。有些函數(shù)很容易逆推,比如加30,只需減30就可以逆推回來(lái);但如果你要逆推兩個(gè)大素?cái)?shù)的乘法公式就很難。
SHA256函數(shù)是一種單向散列算法,輸入值可以是任意類型和長(zhǎng)度,輸出值位數(shù)均為256位,可能是256個(gè)1和0——這是一個(gè)很長(zhǎng)的數(shù),所以通常會(huì)寫(xiě)成一段64位十六進(jìn)制數(shù)。
這個(gè)公式有兩個(gè)有趣又實(shí)用的特點(diǎn):
首先,如果你得到了同樣的哈希值,或者說(shuō)是數(shù)字指紋,就是因?yàn)槟爿斎肓送耆嗤妮斎胫?,兩個(gè)不同的輸入值不會(huì)得出同一個(gè)輸出值(數(shù)字指紋)。
那哈希值數(shù)量有多少呢——2的256次方。
另一個(gè)有趣的特點(diǎn)是蝴蝶效應(yīng),只要輸入值改變一點(diǎn)點(diǎn)輸出值就會(huì)變。舉個(gè)例子,我現(xiàn)在拍一張照片,像素:1000x1000,文件長(zhǎng)度:2400萬(wàn)位,用SHA256算法來(lái)運(yùn)行一下,得出一個(gè)哈希值?,F(xiàn)在來(lái)改變輸入值中的某一個(gè)小單位,放大這個(gè)電線桿的像素,把綠色值的0改為1,密碼學(xué)、數(shù)字簽名、認(rèn)證,以及比特幣。
SHA256在比特幣協(xié)議中發(fā)揮著關(guān)鍵的作用,任何人都可以在自己的計(jì)算機(jī)上運(yùn)行這個(gè)數(shù)學(xué)函數(shù),但沒(méi)有人能逆推它。如果你可以逆推這個(gè)算法,你就可以比其他人挖礦挖得更快,然后賺很多錢(qián)。
比特幣挖礦的過(guò)程,就是找到輸入值的過(guò)程,這個(gè)輸入值通過(guò)SHA256算法產(chǎn)生了一串開(kāi)頭帶有約70個(gè)零的輸出值。但是,因?yàn)闆](méi)有已知的公式,每個(gè)人能做的也只是通過(guò)蠻力一個(gè)數(shù)一個(gè)數(shù)去試,直到找到正確的輸入值。不過(guò)比特幣挖礦只需要找到一個(gè)接近的哈希值就好,不需要完全匹配。實(shí)際上,挖礦難度可以調(diào)整,保證大概每十分鐘能有礦工找到匹配的輸入值,然后賺取12.5比特幣的出塊獎(jiǎng)勵(lì),這就是為什么我認(rèn)為它是地球上最流行的算法,或者應(yīng)該說(shuō)是地球上最常用的算法。
為了跑贏比特幣挖礦的競(jìng)賽,人們專門(mén)使用了可以很快運(yùn)行SHA256算法的計(jì)算機(jī),有多快呢?
如果把全世界所有比特幣礦工加起來(lái),目前他們每秒正在運(yùn)算6千億億個(gè)哈希值,分秒不休,日復(fù)一日。
所以我說(shuō)SHA256是最流行的算法,這個(gè)結(jié)論還是很公道的。我覺(jué)得可能會(huì)有其它的字符處理算法和它競(jìng)爭(zhēng),比如傅里葉變換函數(shù),但是每秒能運(yùn)算超過(guò)6千億億次嗎?
我不知道...
Anyway,我說(shuō)這些就是想表明:沒(méi)有人能找到比特幣挖礦的捷徑,雖然找捷徑有巨大的經(jīng)濟(jì)動(dòng)力,或許有人能找到,但他們不會(huì)那樣做,只會(huì)選擇遵循規(guī)則...