2014.04.14 15:00

比特幣的架構、演算與經濟,為什麼AMD比NVIDIA還好挖?安全有什麼漏洞

ADVERTISEMENT

章節目錄:

第一章:

第二章:

第三章:

ADVERTISEMENT

第四章:

第五章:

挖礦靠SHA-256運算

比特幣網路中負責撰寫邪惡歷史本文的就是礦工,礦工要做的事有很多,包括確認每筆交易的正確性,保持歷史資料串的走向是正確的,以及最麻煩的就是為每個資料塊加上Hashcash的解。事實上礦工就是比特幣的運作中心,而挖礦有許多種合作模式,包括了加入礦池(mining pool)或者私人協同挖礦,或者是單獨挖礦。

ADVERTISEMENT

比特幣的挖礦採用了SHA-256運算法,因此要單獨靠自己挖礦必定要很久才可能挖到礦,甚至永遠不可能挖到。你想想別人的礦池中有一堆大型專用機在運算,每次一有新的block出來,大部分的運算量都被別人搶去了,要剛好搶到有正確解答的區段來運算,又要比別人快,那難度有多高啊?使用CPU和GPU挖礦在最近也變困難,因為有些專用挖礦機使用ASIC(Application Specific Integrated Circuit,特定應用積體電路)來做Hash,效能可以達到600GHash/s,足足是CPU的50000~100000倍,一般小ASIC的2000倍。所以近來的挖礦熱潮也稍減,畢竟能投資數10萬元買挖礦機的人也不多。挖礦程式在您買挖礦機時應該都會隨機附贈,大多也都是由主版本改來,在Bticoins http://forum.bitcoin.org/?topic=3878.0也可以下載。

若是您希望有較高的機率分到比特幣,水電工建議您當然要加入礦池去,因為礦池中的人一旦有人挖到,就會按照大家的貢獻來分了這25個比特幣(未來會愈來愈少),同時也放棄靠CPU或GPU的想法。當然比特幣的原始設計中沒有礦池這東西,也就是分配的動作是靠礦池主人自動自發做的,因此是有可能被礦池主人吞掉的。幸好至目前為止大多數礦池主人仍然維持菁英主義和無政府主義下的最高道德標準,沒有什麼糾紛發生過。不過水電工必需要說這種道德標準,在網路發展史上也很常見到就是了。

為什麼AMD挖比較快?

目前有在挖礦的人都知道,靠GPU 挖礦比CPU 快了很多倍。而且大家還發現AMD 的Redon 79xx 高階顯卡比NVIDIA 的高階顯卡快了許多,但是在其它的表現上又剛好常常是顛倒的,這點讓許多支持不同品牌的玩家引起爭論。水電工在此也順便探討一下為何HD 7970甚至會比NVIDIA Tesla M2070 都還快的原因。附帶一提,Tesla M2070 並不是單純顯卡,Tesla系列都是超級運算專用的硬體。

ADVERTISEMENT

挖礦所使用的演算法當然就是Hashcash的方式,所謂的Hash就是把某個向量空間的向量,也就是一群數字,透過演算法映射到另一個向量空間去,它和線性代數中的映射不一樣的地方在於不保證一對一的映射,空間大小也不相同。好比有個最簡單的Hash法就是個人的身分證字號最後一碼檢查碼,它能保證在一定程度下別人無法憑空瞎編一個字號出來,或者輸入不小心的錯誤。用在密碼學上的當然複雜許多,好比MD5就長達128bit,而比特幣使用的Hashcash 更長,達到了256bit。基本上前段提到了礦工就是不斷地在找個解,那是什麼解呢?我們看Hash的運作方式基本上就是一串數字資料經過某個演算法而在另一個空間中得到另一個數字,如圖所示:

Hash雜湊演算法就是把空間一中的數字經由一個演算法映射到空間二中, 在大多數情況下空間二都比空間一小,所以未必是一對一的映射。

ADVERTISEMENT

Hashcash的做法就是在那串資料前面加上某個數字,然後把整大段數字丟進Hash中,看看映射出來的數字,前面帶有幾個零。如果對方要求您要找到某個數字,代入Hash後得到的結果只有1個零,那麼還算簡單的,如果要高達10多個0那麼難度就很高了。這個演算法當年設計出來是為了防止亂發廣告信的人,因為每發1封信就得重算1次,所以支援Hashcash的email伺服器就可以要求來信者每封信都算一次Hash,這對真的要寄信的人沒什麼差別,頂多等待個幾秒鐘,但是對要發送極大量廣告信的人來說問題就大了,電腦可沒辦法在幾分鐘內算出數千個Hash解。

目前常用的雜湊函數幾乎都是單向的,也就是我們可以從空間一中的數值套公式找到空間二的對映數,但無法由空間二中的數值找到空間一的對應數值,就算找到了,恐怕也不只有1組解。所以我們無法自己創造前面帶有一堆0的數字,然後去反推空間一中的數值應該為何。也就是如果有人告訴你:空間一中的數值A 可以產生空間二中的數值B,而且這個數值B滿足前面有20個0。那麼就代表了這個人在空間一龐大的數字中(可能要試超過數億次),真的1個1個地找才找到了這個可以產生數值B的A值。因此每秒能計算多少次SHA2雜湊運算就成了挖礦的唯一指標。

無心插柳造成效能落差

回到GPU的層面來看,在許多效能測試中能發現AMD的HD 7970 比GTX TITAN快了一截,但是在採礦時則是差得更多,就演算法分析來看,比特幣使用的雜湊運算主要基於SHA256,其中會用到大量的32位元整數位元旋轉計算,就專家的看法,目前都認為差異之處就在此。AMD架構中可以使用1道指令就做完這個位元旋轉的動作,而NVIDIA的架構中則要3道指令才能達成同樣的動作。而且顯然NVIDIA 做完這3道指令所花的總時脈數也比AMD多了不少。

水電工認為此事實屬不幸的巧合,或者說AMD在設計GCN(Graphic Core Next)架構時,很巧合地符合密碼演算的需求,或者這原本就是研發團隊的本意也說不定。各位可以注意數據中NVIDIA的GTX TITAN因為針對了位元偏移指令改過了ALU(Arithmetic Logic Unit,算數邏輯單元)設計,因此效能馬上就和HD 7970拉近了不少。不過因為GTX TITAN的SMX(Streaming Multiprocessor)只有14個,而HD 7970的CU(Compute Unit)有32個,因此在平行化的程度上HD 7970仍然大勝GTX TITAN,反應在效能上,我們也可以發現HD 7970仍然比GTX TITAN快了近1倍。但是這些數字和現在專門為計算Hash而設計的挖礦機相比,都是滄海中的一粟而已。

下一頁:比特幣的必然的通貨緊縮現象

ADVERTISEMENT