科技創新
 
區塊鏈技術財富說
發布時間:2019/10/23 11:28:06     點擊: ( 512 )


不久前的壹條新聞,將區塊鏈技術再次推上了風口浪尖。中共中央政治局1024日下午就區塊鏈技術進行了集體學習,強調要加快推進區塊鏈技術和產業創新。央視網緊跟著就喊出:“誰掌握了區塊鏈技術,誰就掌握了財富!”區塊鏈技術財富說再次風靡。


區塊鏈技術源自比特幣。2008年,化名中本聰(Satoshi Nakamoto)的人在網上發表了《比特幣:壹種點對點的電子現金系統》(Bitcoin:A Peer-to-Peer Electronic Cash System)的文章,他建成比特幣網站後就銷聲匿跡了,任人在網上註冊比特幣錢包,進行“挖礦”、交易。2010年首次流通時,比特幣僅為0.03美元/枚,當時有人用10000枚比特幣買了壹個披薩餅。到 20131130日,比特幣的價格達到1242美元/枚,超過壹盎司黃金的價格。從2014年開始,比特幣價格壹飛沖天,巔峰時曾達到19000美元/枚。看來,比特幣詮釋了區塊鏈技術財富說。區塊鏈的英文是Block Chain,其字面意思就是用鏈條連接在壹起的塊塊,像火車車廂的樣子:


其實這些區塊(Block)是交易信息記錄,鏈(Chain)是指這些區塊信息從頭到尾都是關聯的,就好比用鏈條串起來壹樣。區塊鏈就是賬本,其中的區塊就是記錄比特幣產生、交易過程和目前誰有多少枚比特幣的賬目,區塊鏈技術其實是壹種記賬方法。每壹枚比特幣動輒價值成千上萬美元,它既不是黃金、鉆石這樣的實物寶貝,又不是高度防偽印刷的紙幣,而只是壹條電子數據記錄,人們憑什麽相信這條記錄的信用?如果這條電子數據記錄是大銀行的計算機保管的,由大銀擔保,妳心裏也許會踏實壹些;如果這條電子數據記錄是國家央行的計算機保管的,由國家擔保,妳心裏會更踏實壹些;再來,假如有壹種技術,使得這個記錄不由任何權威保管,而是同時保管在所有用戶的本地計算機,每個用戶電腦中都有壹模壹樣的賬本,而且還絕對不可能被篡改,妳心裏是不是就徹底踏實了?這樣的記賬方法就是區塊鏈技術。

要弄清楚區塊鏈技術,必須先弄清楚以下幾個算法。請讀者盡可能耐心地弄懂這些算法。

哈希算法

針對信息的所謂算法,其實就是壹種轉換方法:



通常用z = H(x)表示哈希算法,其中z就是信息x的哈希值。哈希算法萌芽於上世紀五十年代,當時的想法是給任意長度的信息做壹個長度固定且簡短方便的標記(token),但直至上世紀末它才成熟應用於網絡。

假如我們如下設計壹種哈希算法給全班同學做標記:



讀者壹定猜到了,上面的方法就是用學生的生日來做標記。11日出生的徐健就用0101標記,1111日出生的王美麗就用1111標記。這樣做確實長度固定且簡短方便。但是,這種方法會遇到“生日碰撞”。所謂生日碰撞就是2個或多個學生的生日相同。概率論可以算出,班級多於7人,生日碰撞概率大於5%;班級多於23人,生日碰撞概率大於50%;班級多於60人,生日碰撞概率大於99%“生日碰撞問題”表明,用學生的生日標記每壹位學生不是壹個好的哈希算法,容易產生碰撞。哈希算法不僅要簡短,方便,還要盡可能減少碰撞。科學家已經找到了符合如下要求的許多種哈希算法:



所謂抗沖突性就是碰撞可能性極低;抗原像性就是盡管z = Hx)是確定而且唯壹的,但是,要通過z找到原像x是非常困難的。

下圖是壹種廣泛應用的哈希算法的流程圖:


此圖源自清華大學出版社《深入淺出密碼學》。該書譯自【美】ChristofPaarJan Pelzl著《UnderstandingCryptographyA Textbook for Students and Practitioners

任意長度的信息:X1X2X3X4……從上圖的左上角輸入,經過計算機運算輸出固定長度的哈希值H1H2H3……上面那種看似復雜的運算,對於計算機來說卻不難。讀者可以這樣理解:任意輸入信息經過計算機反復“攪拌”後就得到了哈希值。這樣的哈希算法,可以使得壹本書的哈希值只有幾個字節,但是,哪怕書中只改變壹個標點符號,其哈希值就不同!

英文Hash有“剁肉餡”的意思,用這個詞表示哈希算法是蠻貼切的。互聯網上的URL就是哈希值,瀏覽器、搜索引擎、保密通信技術都離不開哈希算法。區塊鏈技術也離不開哈希算法。

非對稱加密算法

直覺會告訴讀者,區塊鏈需要高水平的保密通信技術。

保密通信的歷史大概可以追溯到兩千多年前,相傳古羅馬的凱撒(JuliusCaesar)為了防止敵方截獲情報,將明文轉化成密文傳送。凱撒的做法就是對二十幾個羅馬字母建立壹張對應表(密碼本),例如:

明碼

密碼

A

B

B

E

C

A

D

F

E

K

……

……

R

P

S

T

……

……

這也稱為密鑰,明文通過密鑰變成密文,比如明文CAESAR用上面的密鑰就成為密文ABKTBP,即使敵方截獲了也看不懂,而自己人卻可以用密鑰將密文還原。這個原理壹直沿用到上世紀70年代。

隨著網絡時代的到來,傳統保密通信原理遇到了挑戰:海量的用戶如何通過網絡分發密鑰?假如網絡用戶之間只有網絡通信手段,而網絡環境會被竊聽,那麽如何通過網絡安全地分發密鑰?

1976年,兩位美國計算機學家Whitfield Diffie Martin Hellman,提出了壹種嶄新構思,被稱為“Diffie-Hellman密鑰交換算法”。人們開始知道加密和解密可以使用不同的密鑰——公鑰和私鑰。公鑰公開給所有人,私鑰自己保管。AB的公鑰加密壹條電文發給B,只有B的私鑰才能夠解密。這種加密算法由於加密和解密用了不同的密鑰,因此被稱為"非對稱加密算法"讀者會認為,這簡直就是異想天開嘛!其實,人們在日常生活中壹直在使用這種加密原理:如果把加密看作鎖門,解密看作開鎖。所有門都可以采用壹種公開的鎖門方法——帶上門,而開鎖卻需要各家的門鑰匙。這就是壹種非對稱加密方法。

1977年,三位數學家RivestShamir Adleman 真就設計出了RSA非對稱加密算法。RSA就是他們三人名字的首字母。直到現在RSA算法壹直是網上最廣為使用保密通信算法,區塊鏈也采用了RSA算法。

RSA算法為什麽會由數學家發明呢?因為這個算法的核心是數論。作者在這裏簡述如下:

1.質數與互質關系

質數是大於1的整數,它除了1和自己以外不能被其它整數整除。例如:2357111317……如果兩個整數,除了1以外,沒有其他公因子,我們就稱這兩個數是互質關系。比如,1532

2.mod運算

也稱求余運算,記為X mod Y =Z,其中XYZ是三個整數,mod是運算符號,這個數學表達式的意思是X除以Y的余數是Z,例如 5 mod 2 =1,表示5除以2余數等於1

3.來自於費爾馬小定理的數學定理:

如果:PQ是兩個質數,N = P × QM = P - 1) ×(Q - 1

M與E互質,E × D mod M = 1

那麽以下兩個公式成立:

X E mod N = Y

Y D mod N = X

現在我們來看看,數學家是如何設計出SHA加密算法的。

1.網絡用戶B自己選擇2個質數PQ,計算N = P × QM = P - 1)×(Q - 1);

2.找壹個與M互質的整數E

3.找壹個整數D,使得E × D mod M = 1

以上三步用計算機計算都非常簡單快速。然後B對外公布(EN)為公鑰,自己保管好(DN)作為私鑰。別人要發信息給B,比如數字X,只要用公式計算X E mod N = Y,然後發YBB收到Y以後,計算Y D mod N =X就可以恢復出明文X。這兩個公式的計算非常簡單快速。假如別人也收到了Y,能不能也用公式Y D mod N = X算出明文X呢?因為別人不知道私鑰D,因此沒有辦法計算。那麽別人知道公鑰(EN),能不能推算出私鑰(DN)呢?這個問題相當於知道了N能不能找到PQ。實際上只要PQ足夠大,想用它們的乘積反演出PQ幾乎是不可能的。舉例來說,妳可以對整數3233進行計算機搜索,找到3233=61×53,但是妳沒法找到整數: 123018668453011775513049495838496272077285356959533479219732245215172640050726

365751874520219978646938995647494277406384592519255732630345373154826850791702

6122142913461670429214311602221240479274737794080665351419597459856902143413

它等於

334780716989568987860441698482126908177047949837137685689124313889828837938780

02287614711652531743087737814467999489

×367460436667995904282446337996279526322791581643430876426760322838157396665112

79233373417143396810270092798736308917

後面的兩個質數的乘積等於前面的數不難計算。但是,以目前的計算機算力,花費50年時間也無法在知道前面的數的條件下,搜索得到後面兩個質數。這種“不可逆”計算是非對稱加密算法的關鍵。

非對稱加密算法還有壹個極好的功能:A用自己的私鑰加密壹條信息,別人只能用A的公鑰解密。這個功能有什麽用呢?下面我們舉壹個例子說明。

假設徐健發“我是徐健,我愛妳”給王美麗,他用王美麗公布的公鑰加密這份電文發給王美麗。由於RSA算法,這份電文只有王美麗的私鑰能解密,別人即使截獲了這份電文也讀不懂。但是,劉德斌可以冒充徐健,也用王美麗的公鑰加密壹份電文“我是徐健,我恨妳”發給王美麗,企圖壞了徐健的好事,這怎麽避免呢?方法如下:

徐健先算出“我是徐健,我愛妳”的哈希值,再用私鑰加密這個哈希值,再將這段密文放在“我是徐健,我愛妳”明文後面,再將這個信息用王美麗的公鑰加密發給王美麗。王美麗收到這個密文,首先用自己的私鑰解密,知道了是徐健發的“我是徐健,我愛妳”,那麽到底是不是徐健發的呢?電文有沒有被別人篡改過?王美麗只要用徐健公布的公鑰,就可以解密徐健用自己私鑰加密的哈希值。王美麗也計算“我是徐健,我愛妳”的哈希值,與解密的徐健的哈希值比對,如果完全壹致,就說明“我是徐健,我愛妳”確實是徐健發的,而且沒有被篡改過。由於劉德斌不知道徐健的私鑰,因此是無法冒充、篡改電文的。因此,哈希算法也是壹種數字簽名算法。

區塊鏈技術就是采用這樣的非對稱加密算法。

共識算法

1982年,圖靈獎獲得者萊斯利 · 蘭伯特(Leslie Lamport)發表了壹篇論文《拜占庭將軍問題》(TheByzantine Generals Problem),開啟了共識算法研究。

萊斯利·蘭伯特是這樣描述拜占庭將軍問題的:

9位拜占庭將軍各率領壹支軍隊圍困敵方城堡,如果部分將軍進攻、部分將軍撤退會導致失敗,因此將軍們要通過某種方法達成共識,要麽壹起進攻,要麽壹起撤退。因為將軍們分散在敵方城堡周圍,不能碰頭開會,只能通過信使聯系。在協調過程中每位將軍都將自己“進攻”還是“撤退”的投票通過信使分別通知其他將軍,每位將軍根據自己的投票和其他將軍送過來的投票判決,達成進攻還是撤退的共識。


拜占庭將軍問題

問題的復雜性就在於:將軍中有叛徒,叛徒不僅可以不投票,還可以給不同的將軍選擇性投出“進攻”或者“撤退”的票,還可以將其他將軍“進攻”的投票篡改成“撤退”轉發出去,幹擾達成共識。還有壹種情況,因為將軍之間只能通過信使交流,即便所有的將軍都是忠誠的,派出去的信使也可能被敵軍截殺,或者被間諜替換,也就是說將軍之間進行交流的信道也不可靠。因此,原本將軍們可以通過投票達成共識,因為以上復雜的情況而無法達成共識。

我們如果把將軍看作計算機,信使看作網絡信道。將軍叛變代表計算機程序出錯;信使被截殺,代表網絡不可靠。這樣,拜占庭將軍問題其實就是分布式計算機網絡的共識算法問題。直到比特幣出現,人們才較好地解決了這個問題。

比特幣的解決方法

比特幣是讓所有節點都做壹個數字猜謎題,誰先猜對才有權發起提案,同時還獲得比特幣作為獎勵。其它節點只能驗證結果正確,然後轉發結果。這種方法被稱為“基於工作量證明(Proof of Work)的共識算法”,也就是坊間所謂的“挖礦”。不同區塊鏈技術可以基於不同策略的共識算法,這些算法被統稱為“拜占庭容錯(Byzantine failures)”,意思是能夠容忍拜占庭問題困難的共識算法。其實,只要“壞”將軍的數量少於將軍總數1/3,許多共識算法都是可行的。

比特幣工作量證明(PoW)機制:

PoW機制是比特幣的區塊鏈技術用來選拔誰來構建區塊(記賬)的選拔機制,感興趣的讀者可以了解壹下。

比特幣區塊鏈示意圖:



每壹個區塊,實際上就是壹個賬目。這些賬目區塊通過哈希值構成壹個鏈式結構,將比特幣交易數據記錄下來。

其中的Nonce(隨機數)與PoW機制或者“挖礦”緊密相關。“挖礦”計算機被稱為礦工。礦工的工作其實就是搜索壹個獨特的Nonce數字,它加入區塊能使得最終生成的當前區塊哈希值的前十位都是0。誰先搜索到這個數字,那麽誰將獲得區塊的構建權利,打包比特幣交易數據,新生成的壹個區塊,然後將廣播給其他礦工驗證。當驗證Nonce值和交易內容都沒有問題後,那麽這壹區塊就得到了社區的共識,被加入到區塊鏈最新的位置。與之同時,勝出的礦工得到壹定數量比特幣獎勵。由於哈希算法的抗原像性,搜索Nonce是非常耗費計算機資源的。數字猜謎過程示意:



比特幣屬於第壹代區塊鏈技術,是所謂的“公有鏈”,即全世界任何人在任何時間、任何地點都可以加入,可以任意讀取數據、發送交易、獲得有效確認與認可的區塊鏈。後面還發展出壹系列“私有鏈”、“聯盟鏈”、“側鏈”、“互聯鏈”等等,以適應不同的應用場景。由維塔利克.布特林(Vtalik Buterin)構建的以太坊是第二代區塊鏈技術,采用了所謂的PoSProof of Stake)權益證明機制代替PoW機制,性能也從比特幣的每秒幾次交易大幅度提升。

有了以上算法知識鋪墊,區塊鏈技術就呼之欲出了。為了便於理解,我們還是以區塊鏈技術鼻祖比特幣為例描述。

01比特幣開戶

妳去網上的比特幣交易所開戶,軟件會自動替妳生成壹個比特幣錢包(wallet)。這個錢包是用來存放妳的公鑰和私鑰。公鑰也是妳的比特幣錢包地址,如圖:


妳向別人收比特幣時,只要告訴對方妳的錢包地址即可。妳是否擁有這個地址是由妳的私鑰證明的。

02比特幣交易過程

  • 上壹筆交易的 Hash(妳從哪裏得到這些比特幣)
  • 本次交易雙方的地址
  • 支付方的公鑰
  • 支付方的私鑰生成的數字簽名

驗證這筆交易需要兩步:

  • 用私鑰解密信息,確認支付方的比特幣來源等交易信息;
  • 用支付方公鑰解密數字簽名,確認支付方地址。

這種方法與徐健給王美麗發送情書采用的非對稱加密算法是壹樣的。

03交易寫入區塊鏈

確認交易的真實性以後,交易還不算完成。交易數據必須寫入區塊鏈才算成立。所有的交易數據都會傳送到礦工那裏。礦工負責把這些交易寫入區塊鏈。

根據比特幣協議,壹個區塊的大小最大是 1MB,而壹筆交易大概是500字節左右,因此壹個區塊最多可以包含2000多筆交易。礦工負責把這2000多筆交易打包成如圖的數據塊:


礦工們都做壹個數字猜謎題進行競爭(PoW機制),誰先完成猜謎誰才能有權利將新區塊寫入區塊鏈,其他礦工只能驗證結果,達成確認新區塊共識。

04礦工收益

交易寫入區塊鏈離不開礦工,礦工需要消耗大量的資源獲得算力,才能在數字猜謎競爭中勝出。為什麽有人願意做礦工呢?比特幣的PoW機制通過獎勵給礦工比特幣的方法來激勵礦工,這也是比特幣的鑄幣產生方式。但如果不斷發行新幣,會在將來產生通貨膨脹。所以系統規定獎勵隨著區塊數量達到壹定級別(210000)而半衰減,例如2008年開始時獎勵50枚比特幣,2018年只獎勵12.5枚。那麽隨著計算機技術的發展,會不會礦工的算力都能夠輕松猜對數字謎題呢?比特幣系統設計了根據平均算力調整猜謎的難度系數機制,無論算力如何提高,永遠使得平均10分鐘生成壹個區塊。因此比特幣的總數最終趨近於21000000枚(2040年時達到),除非改變現有的規則,否則比特幣不會多於21000000枚。這樣的模式雖然解決了通貨膨脹問題,但隨著時間遞增,挖礦收益將變得越來越低。當挖礦收益低於成本消耗後,挖礦的意義便不復存在。因此,在比特幣的設計中,除了挖礦收益,礦工還可以通過打包交易時收取手續費來獲取收益。這樣即便挖礦沒有了獎勵,也不至於引發礦工的“罷工運動”。而且比特幣的共識算法機制使得“暴民”即便劫持了50%以上的算力用以攻擊系統,其收益還是沒有當礦工挖礦的收益高,確實是壹種精妙的設計。

現在的區塊鏈技術盡管變化多端,但是其基本原理沒能跳出比特幣區塊鏈技術“掌心”。所有區塊鏈技術都有類似以上4方面的內容。耐心讀到這裏的讀者,應該知道區塊鏈技術大概是怎麽壹回事了。也許讀者反而會失望:看不出區塊鏈技術與財富有多大關系呵!確實,區塊鏈技術已經問世十幾年了,這樣的冷飯能有多香?網上都有開源軟件免費下載,區區幾個人不難弄出壹個XX幣來圈錢。假如以中本聰擁有的比特幣計算,他壹定富可敵國;早期挖礦或者炒比特幣的人,也可能獲得了巨額財富。但是現在無論是構建壹個新幣,還是挖礦或者炒幣,成功的概率與炒股可能差不多。而且,作者可以負責任地說,未來和過去壹樣,區塊鏈領域是騙子雲集之地,讀者反而要格外當心被騙——這就是作者的區塊鏈技術財富說。

?