區塊鏈《Blockchain》是一種很早就被學界提出但近幾年才被比特幣帶火的一個概念。
比特幣是基於區塊鏈技術的一種實現,比特幣是一種加密貨幣,或者叫數字貨幣也可以。
我們先以比特幣入手談談比特幣是怎麼利用區塊鏈技術的。
假設06年世界杯決賽期間,兩個互相不認識的足球迷碰到了,意大利打法國,法國球迷說我們法蘭西有齊達內肯定贏你們意大利,意大利球迷不服氣說我們意大利是戰無不勝的,不信咱倆賭100歐元。
現實世界裡,怎麼辦呢?
我之前講過我們搞計算機的,90%以上的時間都在處理異常情況,如果人類都很講信用的話,那這個世界可能就不是現在這樣了。
秦國當年許給楚懷王那600裡地就不是6裡了,說不定統一中國的就是楚國了呢也說不定。
如果把錢交到第三方手裡,萬一第三方也跑了怎麼辦?把錢私吞了。
所以現實的陌生世界單靠一顆善良的心是靠不住的,必須有手段穩穩地保證這個承諾,法律契約等。
如今很通用的做法是第三方要找權威機構,比如政府,銀行等,要麼找個有頭有臉的人或組織,歸根結底還是找個有公信力的機構或人。
但一般情況下這個第三方肯定會『雁過拔毛』,收取一定比例的手續費。
那麼到底還有沒有辦法來解決這個難題呢?這就是比特幣最初設計的一個初衷,解決兩個陌生人之間的信任問題。
加密算法 + 多人記賬
首先說加密算法,這裡又要我之前提過的非對稱加密,即公鑰私鑰。
每個人都可以有一對或多對公鑰私鑰,但一個公鑰隻能有對應的私鑰,反之亦然。
其原理就是兩個非常大的質數《p和q》相乘得一個數字《n》,如果要根據公鑰破解私鑰的話理論上必須暴力破解,算出這個數字是由哪兩個大質數相乘得來的。
目前世界上沒有公佈可以破解1024位以上的私鑰,所以采用1024或者2048甚至更長的私鑰是非常安全的。
那麼有了公鑰私鑰,我作為個人就可以用私鑰加密,然後發佈公鑰,任何人都可以用我的公鑰解密來確定這就是我本人發佈的東西。
同理別人給我的轉賬我也可以用他的公鑰解密,從而判斷這個就是某人的身份,這也叫數字簽名。
原理都是一樣的,都是加密算法,利用數學歐拉公式,質數相乘等原理得到的。
這是個非常偉大的算法,叫RSA,由3個數學家提出,我們普通人只要理解到公鑰私鑰的概念和用處就好了。
之前傳統模式裡,銀行或者政府機構都有自己單獨的賬本,比如張三轉給了李四100塊,那賬本裡怎麼記?張三的賬戶裡扣除100, 李四的賬戶裡增加100,對吧?
多人賬本也是一樣的道理,隻不過從之前的中心化機構變成了分佈式,去中心化的多個機構甚至個人。
好比李白給杜甫轉了100兩銀子,以前是財政部記賬,區塊鏈裡則是唐太宗,楊玉環,張小靜,賀知章等多個人一起記賬,記到李太白轉給了杜子美100兩銀子,以此為證,後面附有李白的印章。
這樣一來,有了多個賬本,想要篡改那就難於登天了,李白可以放心的轉給杜甫並且不擔心他會篡改金額或者抵賴。
這樣做就可以解決開始提到的球迷打賭的問題,但還有個問題,別人為什麼要幫我們記賬?
答案是有報酬,這符合人性,不然誰肯幫忙記一筆跟自己沒關系的賬呢?
但最終記賬的人有且隻有一個,不然就要亂套了。
有好處的前提下,如何保證哪一個人來記賬呢?這裡要涉及到一個數學知識,每個要記賬的人,其實也就是所謂的礦工他在記賬錢必須要解一個數學問題,這個數學問題沒有取巧的辦法,隻能通過把數字帶入公式裡硬算,算法就是一個Hash《哈希》算法,類似於算一串數字出來,礦工隻可以猜,除此之外別無他法。
而且目前比特幣裡這個猜到的概率是萬億分之一,大概一臺普通計算機要持續不斷的猜一年才可以猜出來這個數字。
但世界上有成千上萬臺計算機,它們如果一起算的話速度會快很多,因為從概率上講肯定會有一個計算機算出來,現實情況也確實如此。
看個比特幣真實的例子。
除此之外,還可以看到Miner《挖礦人》是誰, 這個塊裡包含了多少比交易《Number of Transactions》。
如果這個礦工是個別有用心的人,他在算出來後,私自篡改轉賬記錄和金額怎麼辦?
A. 篡改交易記錄 / 金額
前面我們介紹了公私鑰加密技術,礦工本身理論上是沒有發款人或收款人的私鑰的,所以他篡改過的交易記錄在用正確的公鑰解密的時候會出錯,最終被認定為非法《這裡作者本人不太確定是在什麼時間點做的鑒定,但確定這個記錄是可以被證偽的》。
B. 刪除交易記錄
假設一個場景,張三要在北京4環買一個兩室一廳的房子,但張三不想出這錢還想白占房子,想到了一種偷雞摸狗的辦法就是篡改交易記錄。
理論上,在張三付款後,這個記錄產生但並未確認,記錄需要等到一個解出謎題的礦工來做,假設這個礦工是他自己人,他讓礦工把這條記錄抹掉,沒有問題。
但做法有幾種:
眾所周知比特幣挖礦需要很長一段時間,因為要做提到很麻煩的數學題,現在這個周期大概是10分鐘所有,這是基於全世界幾十萬礦機同時滿負荷工作的前提下。
也就是說每十分鐘有上萬筆交易會被統一確認並放到一個不可改變的區塊裡,並且這幾十萬臺礦機同時更新自己本地的記錄。
2.1 如果這筆交易剛生成,房東看到了,然後下一秒就把產權過戶給張三,那麼張三如果想篡改這個付款記錄他必須滿足幾個條件:
成功的難度取決於在篡改的記錄之後有多少塊被確認過的區塊。
如果隻有一個,那麼太簡單了,因為區塊鏈算法默認礦工在發佈新的區塊時,采用第一個收到且較長的區塊。
所以這次修改後就一勞永逸,因為所有的賬本都會背同步,但也有一個問題,就是這次同步會被記錄,如果房東查不到賬,張三最終還是會被抓起來的。
如果有很多個,比如張三轉賬完後,房東在確認轉賬後1小時才做的產權過戶,那麼張三就必須篡改之前差不多6塊左右的區塊信息,這個很麻煩,因為每一個區塊都會指向上一個區塊,並且每個區塊都會有一個摘要《Hash》,這是當前區塊所有交易記錄的匯總。
所以如果試圖修改一個很久前的區塊,那麼後面的區塊的摘要都會變掉,這就是哈希樹《MerkleTree》。
其他節點是可以報告區塊鏈被篡改的信息的。
這就要涉及到最重要的一點,經常有人提到的51%算力,就是說如果張三擁有了超過50%的賬本都承認這次修改,那麼其他節點按照算法設計也會承認這次修改。
不過,先不談世界上基本沒人可以同時做到以上兩點,就算做到了,如果有人對此有疑問,依然可以把系統強制修復,之前以太坊就出過類似的問題,結局是以太坊篡改了整個區塊,追回了被盜取的財產。
以太坊分叉事件 。
以上隻是粗淺的介紹了應用區塊鏈技術實現的比特幣的特征,它可以很好的實現公開,公正,中立和平等。
世界上任意兩個陌生人可以依賴比特幣或者其他區塊鏈技術實現互相信任。