區(qū)塊鏈技術(shù)入門理解

背景

想象一個場景, Joe是你最好的朋友鲤妥。他正在海外旅游佳吞。他給你一個電話, “Dude棉安,我把錢花光了底扳,江湖救急〈谷” 你回答”馬上匯款“然后掛掉電話花盐。然后你打電話給你銀行賬戶的經(jīng)理,”請從我的賬戶轉(zhuǎn)1000美元到Joe的賬戶上“菇爪。你的賬戶經(jīng)理回復(fù)算芯,”收到,先生“凳宙。他打開賬簿熙揍,查看你的賬戶以確定你有足夠的余額轉(zhuǎn)出1000美元給Joe。因為你是個土豪氏涩,賬上還有大量余額届囚,因此有梆,他在賬簿上登記了一個條目,像這樣:

image

你打電話給Joe意系,告訴他泥耀,“我已經(jīng)轉(zhuǎn)賬了。下一次你去銀行的時候蛔添,你就可以取出我剛剛轉(zhuǎn)過去的1000美元痰催。”

上面的過程中, 你和Joe都委托銀行來管理你們的錢迎瞧。并沒有物理票據(jù)的實際流動來轉(zhuǎn)移你們的錢夸溶。所需的一切不過是賬簿上的一個條目⌒坠瑁或者更準確一點缝裁,賬簿上的一個既不受你和Joe控制、也不被你們所擁有的條目足绅。

這就是現(xiàn)有體系的問題捷绑。

為了在我們之間建立互信,我們依賴于獨立第三方氢妈。

你也許會問胎食,“依賴他們有什么毛病允懂?” 毛病在于,它們清一色只是數(shù)字衩匣。如果其中第三方的一個人或者一個機構(gòu)有意識地或無意識地走向貪腐墮落, 即可在社會上引發(fā)一場混亂蕾总。

  • 要是記錄下這筆轉(zhuǎn)賬的賬簿在一場大火中燒成灰燼了呢?
  • 要是琅捏,你的銀行經(jīng)理搞錯了生百,寫了個1500美元而不是1000美元呢?
  • 要是柄延,他根本就是有意為之呢蚀浆?

提出問題

會有這樣一個系統(tǒng)嗎,在那里我們無需銀行就可以轉(zhuǎn)賬搜吧?

想一下市俊,轉(zhuǎn)賬意味著什么?只是賬簿上的一個條目而已滤奈。那么更好的問題將是——是否有某種手段摆昧,可以在我們中間維護那本賬簿,而不是讓其他人來為我們操作蜒程?

它就是一種在我們中間維護賬簿而非依賴其他人來為我們代勞的方法绅你。這一方法的要求是:必須有足夠的人不想依賴第三方伺帘。只有這樣,這群人才能靠自己來維護他們的賬簿忌锯。

多少人才算是夠伪嫁?至少要3個。打個比方偶垮,我們假設(shè)有10個人想拋棄銀行以及任何第三方张咳。根據(jù)相互之間的協(xié)議,他們可以一直擁有彼此的賬號信息——但不知道其他人的真實身份针史。

在沒有獨立第三方情況下晶伦,需要一個去中心化的系統(tǒng),這個系統(tǒng)保證不能輕易被攻擊啄枕,才能保證資產(chǎn)是安全的婚陪。這樣的去中心化系統(tǒng)對用戶來說是一個去中介化的安全可靠的系統(tǒng)。

解決問題的思路

通過一個記賬簿的例子频祝,可以大致看出區(qū)塊鏈的實現(xiàn)原理泌参。

  1. 一開始的時候,每個人都掌握著一個空文件夾常空。正如我們要進行的那樣沽一,這10個人都將持續(xù)向他們的當前的文件夾中添加紙張。而這些紙張的集合將形成追蹤交易的賬簿漓糙。每個人都準備著記錄下該系統(tǒng)內(nèi)部發(fā)生的任何交易铣缠。

文件夾代表chain,紙張代表一個block

  1. 假設(shè)#2想要轉(zhuǎn)10美元 給#9昆禽。為了完成這次交易蝗蛙,#2吼了一嗓子,告訴每個人醉鳖,“我想轉(zhuǎn)10美元給#9捡硅。大家都在自己的小本本上記下來!”

生成交易并廣播

  1. 每個人都瞄一下#2是不是有足夠的余額可以轉(zhuǎn)10美元給#9盗棵。如果她有足夠的錢壮韭,每個人都在自己的空白頁上為這筆交易做了一個記錄。
image

所有參與者檢查交易是否有效纹因,并記錄到本地交易池

  1. 這樣喷屋,一筆轉(zhuǎn)賬就被認為是成功發(fā)起。
  2. 這個網(wǎng)絡(luò)中的更多人想要轉(zhuǎn)賬給其他人瞭恰。無論什么時候他們想要做一筆交易逼蒙,他們就向其他所有人宣告這筆交易。無論是誰,一聽到這個宣言是牢,就在他/她自己的紙張上寫下來僵井。這樣的實踐持續(xù)進行,直到每個人都用完了他們當前頁的空間驳棱。假設(shè)1頁紙可以記錄10筆交易批什,一旦10筆交易完成,每個人就都用完了空間社搅。紙張被寫滿的時候, 那么驻债,是時候該將這頁紙存到文件夾里面,然后拿出一張新的紙形葬、重復(fù)上述步驟2了合呐。

寫滿的紙張組成一個block笙以,準備全網(wǎng)確認封存

  1. 在你將這頁紙存入我們的文件夾之前淌实,我們需要使用該網(wǎng)絡(luò)中每個人都同意的唯一一把鑰匙來密封它。通過密封猖腕,我們可以保證拆祈,一旦該頁紙的備份已經(jīng)被存入每一個人的文件夾,沒有人能夠?qū)λ鞒鋈魏胃摹恢菇裉焯雀校恢姑魈旆呕担膊恢故且荒暌院蟆?/li>

這把鑰匙可以看做是交易的metkle證明,密封表示將block寫入chain

  1. 一旦放入文件夾中老玛,它將永遠呆在文件夾里面——被封存起來淤年。而且,如果每個人都信任這個封條蜡豹,那么每個人都會相信該頁紙中的內(nèi)容互亮。而這頁紙的封存手法,就是這一方法的關(guān)鍵余素。

早些時候,第三方/中介為我們賦予信任炊昆,其形式是:無論它們在賬簿上已經(jīng)寫了什么桨吊,都永遠不可變更。在一個分散式的凤巨、去中心化的系統(tǒng)中视乐,就像上述我們的系統(tǒng)一樣,這種封條將提供信任替代敢茁。

沒有中介的系統(tǒng)佑淀,誰也不信任對方,找誰來封存彰檬?選定封存者后他不愿意做這個人事怎么辦伸刃?什么樣的封存方法可以保證已封存的數(shù)據(jù)幾乎不可能被修改谎砾?

解決問題的工程實現(xiàn)

要解決上面的問題,需要涉及一些技術(shù)上的概念:

  1. hash算法:比如sha3. 對明文進行數(shù)字摘要,得到一串無法逆向破解的hash數(shù)據(jù), hash算法可以證明明文沒有被修改, 或者無法被修改, 因為一旦被修改就無法得到相同的hash數(shù)據(jù).
  2. hash算法另一個特點是輸入數(shù)據(jù)只要稍有變化(比如一個1變成了0)則將得到一個千差萬別的結(jié)果捧颅,且結(jié)果無法事先預(yù)知; 那么, 要想得到三個0開頭的一串hash數(shù)據(jù), 怎么得到他的明文是什么?
  3. 以目前密碼學技術(shù),以及計算機的算力, 只有一個笨方法,就是一個接一個地遍歷宇宙中所有數(shù)字景图,直到我們得到一個三個0開頭的一串字符. 經(jīng)過幾千次嘗試之后,我們最終會得到將在右邊產(chǎn)生要求的輸出值的一個數(shù)字碉哑。
  4. 雖然要找到這樣的明文不容易, 但是要驗證這個明文是否符合hash數(shù)據(jù)是3個0開頭是非常容易的: 再進行一次sha3運算即可.

總結(jié)上面的hash算法: “給定一個輸出值挚币,要算出輸入值是極端困難的。但是扣典,給定輸入值和輸出值妆毕,要檢驗該輸入是否會導(dǎo)致該輸出,卻是非常容易的贮尖〉颜常”

  1. 如何用上面的hash算法來加密一份文件?想象我給你了一頁紙远舅。寫著數(shù)字20893闰蛔。然后我問你,“你能不能找出一個數(shù)字图柏,加上數(shù)字20893以后序六,進行hash運算,最終會給我們一個以三個0開頭的字符蚤吹?”例诀,我們已經(jīng)知道,算出這樣一個數(shù)字的唯一方法就是窮舉整個宇宙中每一個可能的數(shù)字裁着。又是幾千次嘗試之后繁涂,我們會偶然發(fā)現(xiàn)一個數(shù)字21191符合我們要求.

這個“碰運氣”的過程就是“挖礦”的過程,注意:以太坊的挖礦不僅要求計算二驰,還對內(nèi)存大小有要求扔罪,因為他要生成一個很大的DAG數(shù)據(jù),在里面找這個幸運隨機數(shù)字桶雀。

  1. 為了密封這個(比如:使得沒有人能更改這頁紙上的內(nèi)容)矿酵,我們將蓋一個帶有標簽‘21191’的徽章在上面。一旦密封數(shù)字(比如:21191)被戳在紙上矗积,這個紙就被密封了全肮。

密封數(shù)字又被稱為“工作量證明”,意思是棘捣,這一數(shù)字證明了為了計算出它來已經(jīng)付出的努力辜腺。蓋戳的過程就是對這個block生成一個hash的過程。

  1. 蓋戳后這頁紙(該block)就可以廣播給網(wǎng)絡(luò)中的其他人了。代表宣稱我已經(jīng)找到幸運數(shù)字了评疗。
  2. 任何人想驗證這頁紙是否已經(jīng)被替換了测砂,他需要做的一切不過是——這頁紙上的內(nèi)容與密封數(shù)字加在一起、把和值進行hash計算壤巷。如果給出了一串三個0開頭的字符邑彪,那么內(nèi)容就沒有被改變。如果出現(xiàn)的字符不能滿足我們的要求胧华,我們就可以丟掉這頁紙了寄症,因為它的內(nèi)容已經(jīng)有了水分,沒有任何用處了矩动。

上述計算工程也是一個驗證的過程有巧。

  1. 在網(wǎng)絡(luò)中,每個人都進行這個計算悲没,而最早算出密封數(shù)字的那個人會向其他所有人宣布這個數(shù)字篮迎。聽到密封數(shù)字之后,每個人都立即驗證它是否能產(chǎn)生要求的輸出值示姿。如果是的甜橱,每個人都為他們的紙張標上這個數(shù)字,然后把紙張放入文件夾中栈戳。

驗證無誤后岂傲, 將該block鏈接到鏈上:取鏈上最新的block的hash作為本block的父hash。

  1. 但是子檀,如果對某人镊掖,比如#7來說,那個被宣布的密封數(shù)字無法產(chǎn)生要求的輸出值褂痰,怎么辦亩进?這種情形可并不少見∷跬幔可能的原因有:
  • 他可能聽錯了之前在網(wǎng)絡(luò)中宣布的交易
  • 他可能寫錯了之前在網(wǎng)絡(luò)中宣布的交易
  • 他可能在記錄交易的時候試圖作弊归薛,為了謀私,或串通好網(wǎng)絡(luò)中的某些人

無論原因是什么匪蝙,#7只有一個選擇——放棄他的記錄主籍、從其他人處獲得拷貝,以使他也可以將紙張放入文件夾骗污。除非他不將他的紙張放入文件夾,他也就無法繼續(xù)記錄進一步的交易沈条,這會因此禁止他成為網(wǎng)絡(luò)中的一員需忿。

大部分人同意的密封數(shù)字,無論是它是什么,都會成為那個可信的密封數(shù)字屋厘。誰放棄帶這個密封數(shù)字的block涕烧,他將無法繼續(xù)“挖礦”。因為封存下一個block時需要鏈上最新block的hash汗洒。

上面的過程解決了第一個問題:找誰來封存议纯,答案是誰先找到幸運數(shù)字就是誰來封存。

  1. 可是溢谤, 如果他們知道其他人會算出它然后宣布它瞻凤,為什么每個人都要耗費資源來進行計算呢? 為什么不坐視不理世杀、等著抱大腿呢阀参?這就是激勵加入的原因。每一個區(qū)塊鏈的成員都有資格獲得獎勵瞻坝。第一個計算出密封數(shù)字的人將得到免費的金錢作為對他的努力(比如:付出的CPU算力和電力)的獎勵蛛壳。
  2. 這就是比特幣變?yōu)楝F(xiàn)實的方式。它是在區(qū)塊鏈(比如:分散式的賬簿)上被用來交易的第一種貨幣所刀。同時衙荐,人們被獎勵以比特幣作為回報,以使在網(wǎng)絡(luò)上計算密封數(shù)字的努力會繼續(xù)進行浮创。

有了激勵忧吟,很多人愿意成為礦工投入到挖礦行列,這就解決了挖礦動機問題:“無利不起早”蒸矛。

  1. 上面沒有提到的一個點是: 想象文件夾中已經(jīng)有5頁紙——都被一個密封數(shù)字加密了瀑罗。如果我回溯到第二頁紙、改動交易記錄以謀私雏掠,為修改后的交易記錄計算出了一個新的密封數(shù)字, 會怎么樣斩祭?密封數(shù)字會讓任何人察覺到交易記錄中的矛盾嗎?
  2. 首先來看一下這個密封數(shù)字是怎么生成的乡话。這個密封數(shù)字不僅包含一個隨機數(shù)字, 還包括上一頁紙的輸出數(shù)據(jù), 有了這個優(yōu)雅的小心機摧玫,我們可以保證,每一頁紙張都依賴于它之前的紙張绑青。因此诬像,如果有人要修改一張歷史記錄,他將同樣必須改變該頁以后所有紙張的內(nèi)容和密封數(shù)字闸婴,以使這條鏈保持一致坏挠。
  3. 如果某個人,不屬于我們在一開始設(shè)想的10個人邪乍,試圖作弊降狠,修改區(qū)塊鏈(保存了所有交易記錄清單紙張的文件夾)中的內(nèi)容对竣,他將不得不調(diào)整多頁紙張、為所有這些紙張計算新的密封數(shù)字榜配。我們都知道計算密封數(shù)字有多么困難否纬。因此,這網(wǎng)絡(luò)中的一個壞蛋欺負不了九個老實人蛋褥。
  4. 實際上临燃,從這個不誠實的家伙嘗試作弊的那一夜開始,他將要在這網(wǎng)絡(luò)中創(chuàng)造另一個區(qū)塊鏈烙心,但那個區(qū)塊鏈將永遠無法趕上可信的區(qū)塊鏈——僅僅因為一個家伙的努力和速度不可能戰(zhàn)勝九個人積累起來的努力和速度膜廊。因此,這保證了在一個網(wǎng)絡(luò)中弃理,最長的鏈就是可信的鏈溃论。
  5. 萬一,不是一個痘昌,而是六個人搞事情呢钥勋?在這種情況下,這個協(xié)議將會落空辆苔,流于表面算灸。它就是人們所知的“51%攻擊”。如果該網(wǎng)絡(luò)中的大部分人決定變得不誠實并且欺騙網(wǎng)絡(luò)中剩下的人驻啤,這個協(xié)議將無法實現(xiàn)它的目標菲驴。這就是其脆弱性的唯一原因。知道了這一點骑冗,它也就不太可能發(fā)生了赊瞬。但是,我們所有人都必須知道這個系統(tǒng)的這個弱點贼涩。它建立在這樣的假設(shè)之上:一群人中的大部分都總是誠實的巧涧。

上面為方便理解,使用人數(shù)進行攻擊說明, 實際上51%的攻擊指的是全網(wǎng)計算機的算力。上面的假設(shè)就是著名的“拜占庭容錯”遥倦。

這種以block的hash為紐帶將全部block鏈接在一起的鏈結(jié)構(gòu)谤绳,保證了已封存的數(shù)據(jù)幾乎不可能被修改,至此袒哥, 解決了上面的全部3個問題缩筛。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市堡称,隨后出現(xiàn)的幾起案子瞎抛,更是在濱河造成了極大的恐慌,老刑警劉巖却紧,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件桐臊,死亡現(xiàn)場離奇詭異钞艇,居然都是意外死亡,警方通過查閱死者的電腦和手機豪硅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挺物,“玉大人懒浮,你說我怎么就攤上這事∈短伲” “怎么了砚著?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長痴昧。 經(jīng)常有香客問我稽穆,道長,這世上最難降的妖魔是什么赶撰? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任舌镶,我火速辦了婚禮,結(jié)果婚禮上豪娜,老公的妹妹穿的比我還像新娘餐胀。我一直安慰自己,他們只是感情好瘤载,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布否灾。 她就那樣靜靜地躺著,像睡著了一般鸣奔。 火紅的嫁衣襯著肌膚如雪墨技。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天挎狸,我揣著相機與錄音扣汪,去河邊找鬼。 笑死伟叛,一個胖子當著我的面吹牛私痹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播统刮,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼紊遵,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了侥蒙?” 一聲冷哼從身側(cè)響起暗膜,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鞭衩,沒想到半個月后学搜,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體娃善,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年瑞佩,在試婚紗的時候發(fā)現(xiàn)自己被綠了聚磺。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡炬丸,死狀恐怖瘫寝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情稠炬,我是刑警寧澤焕阿,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布椭豫,位于F島的核電站茄靠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏温眉。R本人自食惡果不足惜毅桃,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一褒纲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧钥飞,春花似錦外厂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至论悴,卻和暖如春掖棉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背膀估。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工幔亥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人察纯。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓帕棉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親饼记。 傳聞我的和親對象是個殘疾皇子香伴,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容