隨著比特幣、萊特幣礦機(jī)相繼出現(xiàn),大家已經(jīng)認(rèn)識(shí)到?jīng)]有不能開(kāi)發(fā)礦機(jī)的算法,想通過(guò)改進(jìn)算法來(lái)徹底阻止礦機(jī)和礦池的出現(xiàn)是不可能的。
區(qū)塊鏈核心算法一:拜占庭協(xié)定
拜占庭的故事大概是這么說(shuō)的:拜占庭帝國(guó)擁有巨大的財(cái)富,周?chē)?0個(gè)鄰邦垂誕已久,但拜占庭高墻聳立,固若金湯,沒(méi)有一個(gè)單獨(dú)的鄰邦能夠成功入侵。任何單個(gè)鄰邦入侵的都會(huì)失敗,同時(shí)也有可能自身被其他9個(gè)鄰邦入侵。拜占庭帝國(guó)防御能力如此之強(qiáng),至少要有十個(gè)鄰邦中的一半以上同時(shí)進(jìn)攻,才有可能攻破。然而,如果其中的一個(gè)或者幾個(gè)鄰邦本身答應(yīng)好一起進(jìn)攻,但實(shí)際過(guò)程出現(xiàn)背叛,那么入侵者可能都會(huì)被殲滅。于是每一方都小心行事,不敢輕易相信鄰國(guó)。這就是拜占庭將軍問(wèn)題。
在這個(gè)分布式網(wǎng)絡(luò)里:每個(gè)將軍都有一份實(shí)時(shí)與其他將軍同步的消息賬本。賬本里有每個(gè)將軍的簽名都是可以驗(yàn)證身份的。如果有哪些消息不一致,可以知道消息不一致的是哪些將軍。盡管有消息不一致的,只要超過(guò)半數(shù)同意進(jìn)攻,少數(shù)服從多數(shù),共識(shí)達(dá)成。
由此,在一個(gè)分布式的系統(tǒng)中,盡管有壞人,壞人可以做任意事情(不受protocol限制),比如不響應(yīng)、發(fā)送錯(cuò)誤信息、對(duì)不同節(jié)點(diǎn)發(fā)送不同決定、不同錯(cuò)誤節(jié)點(diǎn)聯(lián)合起來(lái)干壞事等等。但是,只要大多數(shù)人是好人,就完全有可能去中心化地實(shí)現(xiàn)共識(shí)。
區(qū)塊鏈核心算法二:非對(duì)稱(chēng)加密技術(shù)
在上述拜占庭協(xié)定中,如果10個(gè)將軍中的幾個(gè)同時(shí)發(fā)起消息,勢(shì)必會(huì)造成系統(tǒng)的混亂,造成各說(shuō)各的攻擊時(shí)間方案,行動(dòng)難以一致。誰(shuí)都可以發(fā)起進(jìn)攻的信息,但由誰(shuí)來(lái)發(fā)出呢?其實(shí)這只要加入一個(gè)成本就可以了,即:一段時(shí)間內(nèi)只有一個(gè)節(jié)點(diǎn)可以傳播信息。當(dāng)某個(gè)節(jié)點(diǎn)發(fā)出統(tǒng)一進(jìn)攻的消息后,各個(gè)節(jié)點(diǎn)收到發(fā)起者的消息必須簽名蓋章,確認(rèn)各自的身份。
在如今看來(lái),非對(duì)稱(chēng)加密技術(shù)完全可以解決這個(gè)簽名問(wèn)題。非對(duì)稱(chēng)加密算法的加密和解密使用不同的兩個(gè)密鑰.這兩個(gè)密鑰就是我們經(jīng)常聽(tīng)到的”公鑰”和”私鑰”。公鑰和私鑰一般成對(duì)出現(xiàn), 如果消息使用公鑰加密,那么需要該公鑰對(duì)應(yīng)的私鑰才能解密; 同樣,如果消息使用私鑰加密,那么需要該私鑰對(duì)應(yīng)的公鑰才能解密。
區(qū)塊鏈核心算法三:容錯(cuò)問(wèn)題
我們假設(shè)在此網(wǎng)絡(luò)中,消息可能會(huì)丟失、損壞、延遲、重復(fù)發(fā)送,并且接受的順序與發(fā)送的順序不一致。此外,節(jié)點(diǎn)的行為可以是任意的:可以隨時(shí)加入、退出網(wǎng)絡(luò),可以丟棄消息、偽造消息、停止工作等,還可能發(fā)生各種人為或非人為的故障。我們的算法對(duì)由共識(shí)節(jié)點(diǎn)組成的共識(shí)系統(tǒng),提供的容錯(cuò)能力,這種容錯(cuò)能力同時(shí)包含安全性和可用性,并適用于任何網(wǎng)絡(luò)環(huán)境。
區(qū)塊鏈核心算法四:Paxos 算法(一致性算法)
Paxos算法解決的問(wèn)題是一個(gè)分布式系統(tǒng)如何就某個(gè)值(決議)達(dá)成一致。一個(gè)典型的場(chǎng)景是,在一個(gè)分布式數(shù)據(jù)庫(kù)系統(tǒng)中,如果各節(jié)點(diǎn)的初始狀態(tài)一致,每個(gè)節(jié)點(diǎn)都執(zhí)行相同的操作序列,那么他們最后能得到一個(gè)一致的狀態(tài)。為保證每個(gè)節(jié)點(diǎn)執(zhí)行相同的命令序列,需要在每一條指令上執(zhí)行一個(gè)“一致性算法”以保證每個(gè)節(jié)點(diǎn)看到的指令一致。一個(gè)通用的一致性算法可以應(yīng)用在許多場(chǎng)景中,是分布式計(jì)算中的重要問(wèn)題。 節(jié)點(diǎn)通信存在兩種模型:共享內(nèi)存和消息傳遞。Paxos算法就是一種基于消息傳遞模型的一致性算法。706878
區(qū)塊鏈核心算法五:共識(shí)機(jī)制
區(qū)塊鏈共識(shí)算法主要是工作量證明和權(quán)益證明。拿比特幣來(lái)說(shuō),其實(shí)從技術(shù)角度來(lái)看可以把PoW看做重復(fù)使用的Hashcash,生成工作量證明在概率上來(lái)說(shuō)是一個(gè)隨機(jī)的過(guò)程。開(kāi)采新的機(jī)密貨幣,生成區(qū)塊時(shí),必須得到所有參與者的同意,那礦工必須得到區(qū)塊中所有大數(shù)據(jù)的PoW工作證明。與此同時(shí)礦工還要時(shí)時(shí)觀察調(diào)整這項(xiàng)工作的難度,因?yàn)閷?duì)網(wǎng)絡(luò)要求是平均每10分鐘生成一個(gè)區(qū)塊。
區(qū)塊鏈核心算法六:分布式存儲(chǔ)
分布式存儲(chǔ)是一種大數(shù)據(jù)存儲(chǔ)技術(shù),通過(guò)網(wǎng)絡(luò)使用每臺(tái)機(jī)器上的磁盤(pán)空間,并將這些分散的存儲(chǔ)資源構(gòu)成一個(gè)虛擬的存儲(chǔ)設(shè)備,大數(shù)據(jù)分散的存儲(chǔ)在網(wǎng)絡(luò)中的各個(gè)角落。所以,分布式存儲(chǔ)技術(shù)并不是每臺(tái)電腦都存放完整的大數(shù)據(jù),而是把大數(shù)據(jù)切割后存放在不同的電腦里。就像存放100個(gè)雞蛋,不是放在同一個(gè)籃子里,而是分開(kāi)放在不同的地方,加起來(lái)的總和是100個(gè)。
算法演進(jìn)之路
算法演進(jìn)
關(guān)于“算法”一詞,目前國(guó)內(nèi)用戶使用的比較模糊,有時(shí)指共識(shí)機(jī)制,比如POW算法,POS算法;有時(shí)指具體的Hash算法,比如SHA256,SCRYPT。應(yīng)該說(shuō)這是由于早期從外文資料翻譯過(guò)來(lái)概念模糊導(dǎo)致的錯(cuò)誤,后來(lái)人云亦云。共識(shí)機(jī)制(以前一般叫Proof,現(xiàn)在經(jīng)常使用Consensus)和算法(Algorithm)在英文資料里語(yǔ)義清晰,不能混為一談,兩者都是區(qū)塊鏈技術(shù)體系里的重要支柱。
因此當(dāng)我們說(shuō)“X幣使用Y算法”的時(shí)候,其實(shí)具體指的是采用何種Hash算法,而且隱含的前提條件是這個(gè)幣使用POW證明方式。只有在POW下討論選取何種算法才有意義,算法的各種復(fù)雜設(shè)計(jì)才能體現(xiàn)其用處。為什么呢,中本聰在設(shè)計(jì)比特幣的時(shí)候其實(shí)有很多地方用到Hash函數(shù),比如計(jì)算區(qū)塊ID,計(jì)算交易ID,構(gòu)造代幣地址等。我們說(shuō)的算法具體是指用何種Hash函數(shù)計(jì)算區(qū)塊ID,所謂算法創(chuàng)新也就是在這個(gè)地方下功夫。此外其他任何用到Hash函數(shù)的地方,對(duì)計(jì)算難度沒(méi)有要求,而且應(yīng)該選用可以快速運(yùn)算的算法,尤其在計(jì)算交易ID時(shí)候,不然影響區(qū)塊鏈同步速度。因此如果選用POS方式,計(jì)算區(qū)塊ID也應(yīng)該使用容易運(yùn)算的算法。
Hash函數(shù)
如上所言,我們經(jīng)常說(shuō)的POW算法本質(zhì)是一個(gè)Hash函數(shù)。Hash函數(shù)是一個(gè)無(wú)比神奇的東西,說(shuō)他替中本聰打下了半壁江山一點(diǎn)不為過(guò),學(xué)習(xí)比特幣應(yīng)該從學(xué)習(xí)Hash函數(shù)入手,理解了Hash函數(shù)再去學(xué)比特幣原理將事半功倍,不然將處處感覺(jué)混沌,難以開(kāi)竅。而中本聰也將Hash函數(shù)的所有特性使用得淋漓盡致:
已經(jīng)有很多Hash函數(shù)被設(shè)計(jì)出來(lái)并廣泛應(yīng)用,不過(guò)Hash函數(shù)一般安全壽命都不長(zhǎng),被認(rèn)為安全的算法往往沒(méi)能使用多久就被成功攻擊,新的更安全的算法相繼被設(shè)計(jì)出來(lái),而每一個(gè)被公認(rèn)為安全可靠的算法都有及其嚴(yán)格的審計(jì)過(guò)程。在幣圈中我們經(jīng)常說(shuō)某某幣發(fā)明了某種算法,其實(shí)主要都是使用那些被認(rèn)證過(guò)的安全算法,或是單獨(dú)使用,或是排列組合使用。
SHA256
SHA (Secure Hash Algorithm,譯作安全散列算法) 是美國(guó)國(guó)家安全局 (NSA) 設(shè)計(jì),美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究院 (NIST) 發(fā)布的一系列密碼散列函數(shù),經(jīng)歷了SHA-0,SHA-1,SHA-2,SHA-3系列發(fā)展。NSA于2007年正式宣布在全球范圍內(nèi)征集新新一代(SHA-3)算法設(shè)計(jì),2012年公布評(píng)選結(jié)果, Keccak算法最終獲勝成為唯一官方標(biāo)準(zhǔn)SHA-3算法,但還有四種算法同時(shí)進(jìn)入了第三輪評(píng)選,分別是:BLAKE, Gr?STL, JH和SKEIN,這些算法其實(shí)也非常安全,而且經(jīng)受審查,被各種競(jìng)爭(zhēng)幣頻繁使用。
比特幣采用SHA256算法,該算法屬于SHA-2系列,在中本聰發(fā)明比特幣時(shí)(2008)被公認(rèn)為最安全最先進(jìn)的算法之一。除了生成地址中有一個(gè)環(huán)節(jié)使用了REPID-160算法,比特幣系統(tǒng)中但凡有需要做Hash運(yùn)算的地方都是用SHA256。隨著比特幣被更多人了解,大家開(kāi)始好奇中本聰為何選擇了SHA256,同時(shí)對(duì)SHA256的安全性發(fā)表各種意見(jiàn),SHA256妥妥經(jīng)受了質(zhì)疑,到目前為止,沒(méi)有公開(kāi)的證據(jù)表明SHA256有漏洞,SHA256依然牢牢抗住保衛(wèi)比特幣安全的大旗。當(dāng)然大家心里都明白,沒(méi)有永遠(yuǎn)安全的算法,SHA256被替代是早晚的事,中本聰自己也說(shuō)明了算法升級(jí)的必要和過(guò)程。
SCRYPT
后來(lái)隨著顯卡挖礦以及礦池的出現(xiàn),社區(qū)開(kāi)始擔(dān)心礦池會(huì)導(dǎo)致算力集中,違背中本聰“一CPU一票”的最初設(shè)計(jì)理念。在那段時(shí)間,中心化的焦慮非常嚴(yán)重,討論很激烈,比特幣一次又一次“被死亡”,直到現(xiàn)在,針對(duì)礦池是否違背去中心化原則的爭(zhēng)論仍在繼續(xù)。
無(wú)論如何,有人將矛頭指向SHA256,認(rèn)為是算法太容易導(dǎo)致礦機(jī)和礦池出現(xiàn),并試圖尋找更難的算法。
恰逢其時(shí),使用SCRYPT算法的萊特幣(Litecoin)橫空出世。據(jù)說(shuō)SCRYPT是由一位著名的黑客開(kāi)發(fā),由于沒(méi)有得到諸如SHA系列的嚴(yán)格的安全審查和全面論證,一直沒(méi)被廣泛推廣使用。與SHA256算法相比,SCRYPT占用的內(nèi)存更多,計(jì)算時(shí)間更長(zhǎng),并行計(jì)算異常困難,對(duì)硬件要求很高。很顯然,SCRYPT算法具有更強(qiáng)的抵御礦機(jī)性,萊特幣還將區(qū)塊時(shí)間改為2.5分鐘,在那個(gè)山寨幣還鳳毛麟角年代,萊特幣依靠這兩點(diǎn)創(chuàng)新大獲成功,長(zhǎng)期穩(wěn)坐山寨幣第一寶座位置。
后來(lái)有人在SCRYPT的基礎(chǔ)上稍作修改形成Scrypt –N算法,改進(jìn)思路都一樣,都是追求更大的內(nèi)存消耗和計(jì)算時(shí)間,以有效阻止ASIC專(zhuān)用礦機(jī)。
很快,萊特幣的成功催生了各種各樣的算法創(chuàng)新,2012至2014年間,算法創(chuàng)新一直都是社區(qū)討論的熱門(mén)話題,每一個(gè)使用創(chuàng)新算法的幣種出現(xiàn),都能刮起一陣波瀾。
串聯(lián)算法
重新排列組合是人類(lèi)一貫以來(lái)最常用的創(chuàng)新發(fā)明方法。很快,有人不滿足于使用單一Hash函數(shù),2013年7月,夸克幣(Quark)發(fā)布,首創(chuàng)使用多輪Hash算法,看似高大上,其實(shí)很簡(jiǎn)單,就是對(duì)輸入大數(shù)據(jù)運(yùn)算了9次hash函數(shù),前一輪運(yùn)算結(jié)果作為后一輪運(yùn)算的輸入。這9輪Hash共使用6種加密算法,分別為BLAKE, BMW, GROESTL, JH, KECCAK和SKEIN,這些都是公認(rèn)的安全Hash算法,并且早已存在現(xiàn)成的實(shí)現(xiàn)代碼。
這種多輪Hash一出現(xiàn)就給人造成直觀上很安全很強(qiáng)大的感覺(jué),追捧者無(wú)數(shù)?,F(xiàn)今價(jià)格依然堅(jiān)挺的達(dá)世幣(DASH,前身是暗黑幣,Darkcoin,)接過(guò)下一棒,率先使用11種加密算法(BLAKE, BMW, GROESTL, JH, KECCAK, SKEIN, LUFFA, CUBEHASH, SHAVITE, SIMD, ECHO),美其名曰X11,緊接著X13,X15這一系列就有人開(kāi)發(fā)出來(lái)了。
S系列算法實(shí)際是一種串聯(lián)思路,只要其中一種算法被破解,整個(gè)算法就被破解了,好比一根鏈條,環(huán)環(huán)相扣,只要其中一環(huán)斷裂,整個(gè)鏈條就一分為二。
并聯(lián)算法
有人串聯(lián),就有人并聯(lián),Heavycoin(HVC)率先做了嘗試。HVC如今在國(guó)內(nèi)名不見(jiàn)經(jīng)傳,當(dāng)時(shí)還是名噪一時(shí),首次實(shí)現(xiàn)鏈上游戲,作者是俄羅斯人,后來(lái)不幸英年早逝,在幣圈引起一陣惋惜。
HVC算法細(xì)節(jié):
之所以首先進(jìn)行一輪HEFTY1 哈希,是因?yàn)镠EFTY1 運(yùn)算起來(lái)極其困難,其抵御礦機(jī)性能遠(yuǎn)超于SCRYPT。但與SCRYPT一樣,安全性沒(méi)有得到某個(gè)官方機(jī)構(gòu)論證,于是加入后面的四種安全性已經(jīng)得到公認(rèn)的算法增強(qiáng)安全。
對(duì)比串聯(lián)和并聯(lián)的方法,Quark、X11,X13等雖使用了多種HASH函數(shù),但這些算法都是簡(jiǎn)單的將多種HASH函數(shù)串聯(lián)在一起,仔細(xì)思考,其實(shí)沒(méi)有提高整體的抗碰撞性,其安全性更是因木桶效應(yīng)而由其中安全最弱的算法支撐,其中任何一種Hash函數(shù)遭遇碰撞性攻擊,都會(huì)危及貨幣系統(tǒng)的安全性。
HVC從以上每種算法提取64位,經(jīng)過(guò)融合成為最后的結(jié)果,實(shí)際上是將四種算法并聯(lián)在一起,其中一種算法被破解只會(huì)危及其中64位,四中算法同時(shí)被破解才會(huì)危及貨幣系統(tǒng)的安全性。
比特幣只使用了一種Hash算法,假如未來(lái)某日SHA256被證明不再安全時(shí),雖然可以更該算法,但考慮到如今“硬分叉猛于虎”的局面,屆時(shí)引發(fā)動(dòng)蕩不可避免,但如果使用并聯(lián)算法,就可以爭(zhēng)取平靜的硬分叉過(guò)渡時(shí)間。
PRIMECOIN
正當(dāng)一部分人在算法探索之路上進(jìn)行的如火如荼之時(shí),另一部分人的聲音也非常刺耳,那就是指責(zé)POW浪費(fèi)能源(彼時(shí)POS機(jī)制已經(jīng)實(shí)現(xiàn))。POW黨雖極力維護(hù),但也承認(rèn)耗費(fèi)能源這一事實(shí)。這一指責(zé)打開(kāi)了另一條探索之路,即如果能找到一種算法,既能維護(hù)區(qū)塊鏈安全,這些Hash運(yùn)算又能在其他方面產(chǎn)生價(jià)值,那簡(jiǎn)直更完美。
在這條探索之路上最讓人振奮人心的成果來(lái)自于Sunny King(這大神之前已經(jīng)開(kāi)發(fā)了Peercoin,點(diǎn)點(diǎn)幣)發(fā)明的素?cái)?shù)幣(Primecoin)。素?cái)?shù)幣算法的核心理念是:在做Hash運(yùn)算的同時(shí)尋找大素?cái)?shù)。素?cái)?shù)如今已被廣泛應(yīng)用于各個(gè)領(lǐng)域,但人類(lèi)對(duì)他的認(rèn)識(shí)還是有限。素?cái)?shù)在數(shù)軸上不但稀有(相對(duì)于偶數(shù)而言),而且分布不規(guī)律,在數(shù)軸上尋找素?cái)?shù)只能盲目搜索探測(cè),這正是POW的特征。
POW還有另一個(gè)要求是容易驗(yàn)證,這方面人類(lèi)經(jīng)過(guò)幾百年探索已經(jīng)獲得一些成果。素?cái)?shù)幣使用兩種方法測(cè)試,首先進(jìn)行費(fèi)馬測(cè)試(Fermat Test),通過(guò)則再進(jìn)行歐拉-拉格朗日-立夫習(xí)茲測(cè)試(Euler-Lagrange-Lifchitz Test),還通過(guò)測(cè)試則被視為是素?cái)?shù)。需要指出的是,這種方法并不能保證通過(guò)測(cè)試的數(shù)百分百是素?cái)?shù),不過(guò)這并不影響系統(tǒng)運(yùn)行,即便測(cè)試結(jié)果錯(cuò)誤,只要每個(gè)節(jié)點(diǎn)都認(rèn)為是素?cái)?shù)就行。
素?cái)?shù)幣其實(shí)找的是素?cái)?shù)鏈-坎氏鏈,存在三個(gè)特定類(lèi)型的坎氏素?cái)?shù)鏈:第一類(lèi)坎氏鏈,第二類(lèi)坎氏鏈和雙坎氏鏈。
舉第一類(lèi)來(lái)說(shuō)明,規(guī)則是:素?cái)?shù)鏈中每個(gè)數(shù)都是前一個(gè)數(shù)的兩倍減一,比如:
1531,3061,6121,12241,24481
數(shù)列的下一個(gè)數(shù)48961(24481*2-1)不是素?cái)?shù),因而這個(gè)坎氏鏈的長(zhǎng)度是5,素?cái)?shù)幣的目標(biāo)就是探索更長(zhǎng)的坎氏鏈(以上三類(lèi)都可以)。
那么現(xiàn)在最重要的問(wèn)題來(lái)了,如何用坎氏鏈來(lái)驗(yàn)證一個(gè)區(qū)塊是否合格呢?素?cái)?shù)幣實(shí)現(xiàn)的細(xì)節(jié)是這樣的:
獲取originNum之后就可以測(cè)試并計(jì)算素?cái)?shù)鏈長(zhǎng)度的整數(shù)部分,小數(shù)部分的計(jì)算與坎氏鏈最后一個(gè)非素?cái)?shù)的跨度相關(guān)。
每個(gè)區(qū)塊的乘積因子Multiplier各不相同,計(jì)算過(guò)程和hashBlockHeader相關(guān),素?cái)?shù)幣為此對(duì)區(qū)塊頭進(jìn)行修改,專(zhuān)門(mén)增加一個(gè)字段(bnPrimeChainMultiplier)來(lái)存放這個(gè)乘積因子。但是以上第一步計(jì)算hashBlockHeader時(shí)輸入大數(shù)據(jù)并不包含這個(gè)乘積因子,這也是為啥特別指出中本聰區(qū)塊頭。
由于素?cái)?shù)在數(shù)軸上分布不均勻,且根據(jù)目前掌握的知識(shí)來(lái)看,數(shù)越大,素?cái)?shù)越稀有,尋找難度并不是線性遞增,耗時(shí)也就不可預(yù)估,但是區(qū)塊鏈要求穩(wěn)定出塊。正因?yàn)檫@點(diǎn),素?cái)?shù)幣算法沒(méi)有得到熱捧,但這種探索并非沒(méi)有意義,利用POW工作量的“幻想”并沒(méi)有停止,探索還在繼續(xù)。
ETHASH
以太坊(Ethereum)一開(kāi)始就打算使用POS方式,但由于POS設(shè)計(jì)存在一些問(wèn)題,開(kāi)發(fā)團(tuán)隊(duì)決定在以太坊1.0階段使用POW方式,預(yù)計(jì)在Serenity階段轉(zhuǎn)入POS。
以太坊POW算法叫Ethash,雖只是一個(gè)過(guò)渡算法,但開(kāi)發(fā)團(tuán)隊(duì)一點(diǎn)也不含糊,一如既往發(fā)揚(yáng)其“簡(jiǎn)單問(wèn)題復(fù)雜化,繁瑣細(xì)節(jié)秀智商”的設(shè)計(jì)風(fēng)格。Ethash 是最新版本的 Dagger-Hashimoto改良算法,是Hashimoto算法結(jié)合Dagger算法產(chǎn)成的一個(gè)新變種。Ethash設(shè)計(jì)時(shí)就明確兩大目標(biāo):
抵御礦機(jī)性能(ASIC-resistance),團(tuán)隊(duì)希望CPU也能參與挖礦獲得收益。
輕客戶端可快速驗(yàn)證(Light client verifiability)。
基于以上兩個(gè)目標(biāo),開(kāi)發(fā)團(tuán)隊(duì)最后倒騰出來(lái)的Ethash挖礦時(shí)基本與CPU性能無(wú)關(guān),卻和內(nèi)存大小和內(nèi)存帶寬成正相關(guān)。不過(guò)在實(shí)現(xiàn)上還是借鑒了SHA3的設(shè)計(jì)思路,但是使用的”SHA3_256” ,”SHA3_512”與標(biāo)準(zhǔn)實(shí)現(xiàn)很不同。
Ethash基本流程是這樣的:對(duì)于每一個(gè)塊,首先計(jì)算一個(gè)種子(seed),該種子只和當(dāng)前塊的信息有關(guān);然后根據(jù)種子生成一個(gè)32M的隨機(jī)大數(shù)據(jù)集(Cache);緊接著根據(jù)Cache生成一個(gè)1GB大小的大數(shù)據(jù)集合(DAG),DAG可以理解為一個(gè)完整的搜索空間,挖礦的過(guò)程就是從DAG中隨機(jī)選擇元素(類(lèi)似于比特幣挖礦中查找合適Nonce)再進(jìn)行哈希運(yùn)算。可以從Cache快速計(jì)算DAG指定位置的元素,進(jìn)而哈希驗(yàn)證。此外還要求對(duì)Cache和DAG進(jìn)行周期性更新,每1000個(gè)塊更新一次,并且規(guī)定DAG的大小隨著時(shí)間推移線性增長(zhǎng),從1G開(kāi)始,每年大約增長(zhǎng)7G左右。
EQUIHASH
最近在國(guó)內(nèi)發(fā)展勢(shì)頭最猛的莫過(guò)于Zcash,該幣種最大的特點(diǎn)是使用零知識(shí)證明實(shí)現(xiàn)隱私交易。距離發(fā)布還有幾天,但從社區(qū)討論來(lái)看,各方礦工都已在磨刀霍霍。Zcash對(duì)于算法的選擇非常慎重,在先后考量了SHA256D,SCRYPT,CUCKOO HASH以及LYRA2等算法后,最終選擇Equihash。
Equihash算法由Alex Biryukov 和 Dmitry Khovratovich聯(lián)合發(fā)明,其理論依據(jù)是一個(gè)著名的計(jì)算法科學(xué)及密碼學(xué)問(wèn)題——廣義生日悖論問(wèn)題。Equihash是一個(gè)內(nèi)存(ARM)依賴(lài)型算法,機(jī)器算力大小主要取決于擁有多少內(nèi)存,根據(jù)兩位發(fā)明者的論文描述,該算法執(zhí)行至少需要700M內(nèi)存,1.8 GHz CPU計(jì)算30秒,經(jīng)Zcash項(xiàng)目?jī)?yōu)化后,目前每個(gè)挖礦線程需要1G內(nèi)存,因此Zcash官方認(rèn)為該算法在短時(shí)間內(nèi)很難出現(xiàn)礦機(jī)(ASIC)。此外,Zcash官方還相信該算法比較公平,他們認(rèn)為很難有人或者機(jī)構(gòu)能夠?qū)λ惴ㄍ低颠M(jìn)行優(yōu)化,因?yàn)閺V義生日悖論是一個(gè)已經(jīng)被廣泛研究的問(wèn)題。此外,Equihash算法非常容易驗(yàn)證,這對(duì)于未來(lái)在受限設(shè)備上實(shí)現(xiàn)Zcash輕客戶端非常重要。
Zcash官方團(tuán)隊(duì)選擇Equihash完全出于抵御礦機(jī)性能的需求,他們?cè)诠俜讲┛椭幸渤姓J(rèn)并不敢確保Equihash一定是安全的,并表示如果發(fā)現(xiàn)Equihash存在問(wèn)題,或者發(fā)現(xiàn)更優(yōu)算法,Zcash會(huì)改變POW算法。
總結(jié)
隨著比特幣、萊特幣礦機(jī)相繼出現(xiàn),大家已經(jīng)認(rèn)識(shí)到?jīng)]有不能開(kāi)發(fā)礦機(jī)的算法,想通過(guò)改進(jìn)算法來(lái)徹底阻止礦機(jī)和礦池的出現(xiàn)是不可能的。另外,從近幾年的發(fā)展來(lái)看,礦池也沒(méi)有之前想的那么可怕,甚至已經(jīng)有人論證了礦池并沒(méi)有破壞去中心化。但除了安全性,POW往往伴隨分發(fā)代幣功能,從這個(gè)角度來(lái)說(shuō),CPU算法更具公平性,用戶門(mén)檻更低,這也是算法創(chuàng)新的驅(qū)動(dòng),從Ethash以及Equihash設(shè)計(jì)來(lái)看,目前的算法創(chuàng)新仍然是以追求內(nèi)存高消耗為主。以此同時(shí),社區(qū)在共識(shí)機(jī)制的探索之路上也取得很多成果??v觀當(dāng)前區(qū)塊鏈核心技術(shù)發(fā)展全局,算法創(chuàng)新熱潮已經(jīng)有所消退,但也未停止,于比特幣,于區(qū)塊鏈,于算法探索而言,都還在路上。