區(qū)塊鏈:
-區(qū)塊鏈就是一個(gè)不斷增長(zhǎng)的全網(wǎng)總賬本
-每個(gè)完全節(jié)點(diǎn)都擁有完整的區(qū)塊鏈
-節(jié)點(diǎn)總是信任最長(zhǎng)的區(qū)塊鏈
-偽造區(qū)塊鏈需要擁有超過(guò)51%的全網(wǎng)算力
區(qū)塊鏈為什么不可篡改亿虽?
區(qū)塊鏈的結(jié)構(gòu):區(qū)塊鏈?zhǔn)怯梢粋€(gè)個(gè)區(qū)塊,構(gòu)成的有序鏈表劫拗,每一個(gè)區(qū)塊,都記錄了一系列交易早像,并且每個(gè)區(qū)塊都指向前一個(gè)區(qū)塊桨踪,從而形成一個(gè)鏈條。
如果我們觀察一個(gè)區(qū)塊掀亩,就會(huì)發(fā)現(xiàn)每個(gè)區(qū)塊都有一個(gè)唯一的哈希標(biāo)識(shí)(區(qū)塊哈希)舔哪;同時(shí)區(qū)塊通過(guò)記錄上一個(gè)區(qū)塊的哈希,來(lái)指向上一個(gè)區(qū)塊槽棍;
Merkle Hash用來(lái)確保該交易的所有交易記錄無(wú)法被篡改捉蚤;
區(qū)塊的主要數(shù)據(jù)就是一系列交易,第一條交易是Conbase交易(礦工的挖礦獎(jiǎng)勵(lì))炼七,后面的交易都是用戶的交易缆巧。
區(qū)塊鏈的不可篡改特性是怎么保證的?
是通過(guò)哈希算法(又稱散列算法)
? -哈希算法是一個(gè)單向函數(shù):h = H(x)
? -它把任意長(zhǎng)度的輸入數(shù)據(jù)轉(zhuǎn)化為固定長(zhǎng)度的輸出
例如對(duì)“morning”和“bitcoin”進(jìn)行某種哈希運(yùn)算豌拙,得到的結(jié)果是固定長(zhǎng)度的數(shù)字(通常用16進(jìn)制表示哈希的輸出)
哈希算法的特點(diǎn):
? ? ? ?--單項(xiàng)函數(shù):
通過(guò)輸入可以很容易地計(jì)算輸出
通過(guò)輸出無(wú)法反推輸入陕悬,只能暴力窮舉
? ? ? ?--碰撞率低:
如果x ≠ y,而H(x) = H(y),則發(fā)生碰撞(輸入數(shù)據(jù)不同按傅,卻計(jì)算出相同的哈希值)
因?yàn)檩斎霐?shù)據(jù)的長(zhǎng)度是不固定的捉超,所以輸入的數(shù)據(jù)是一個(gè)無(wú)限大的集合,而輸出數(shù)據(jù)的長(zhǎng)度是固定的唯绍,所以輸出數(shù)據(jù)是一個(gè)有限的集合拼岳。把一個(gè)無(wú)限集合中的每一個(gè)元素變成到一個(gè)有限的集合中,就必然存在某些不同的輸入好得到相同的輸出况芒。
? ? ? --輸出無(wú)規(guī)律
輸入數(shù)據(jù)任意一個(gè)bit的改動(dòng)惜纸,會(huì)導(dǎo)致輸出完全不同
哈希算法的作用:
假設(shè)我們相信一個(gè)安全的哈希算法:如果H(x)=H(y),則x = y,如果兩個(gè)文件或數(shù)據(jù)的hash相同,說(shuō)明文件相同堪簿,沒(méi)有被改動(dòng)過(guò)痊乾。
比特幣使用哈希算法來(lái)保證所有交易的不可篡改,就是計(jì)算并且記錄交易的哈希椭更,如果交易被篡改那么哈希驗(yàn)證將不能通過(guò)哪审,說(shuō)明這個(gè)區(qū)塊是無(wú)效的。
常用的哈希算法:
Merkle Hash:本區(qū)塊的交易的hash
Merkle Hash字段虑瀑,他記錄了本區(qū)塊所有交易的Merkle Hash湿滓。
Merkle Hash是一系列數(shù)據(jù)的哈希,通過(guò)一個(gè)簡(jiǎn)單算法舌狗,變成一個(gè)匯總的哈希
如果交易的數(shù)量不恰好是4個(gè)叽奥,如只有三個(gè)時(shí),三筆交易計(jì)算出a1痛侍,a2朝氓,a3,a1和a2可計(jì)算出b1主届,a3和誰(shuí)組合計(jì)算赵哲?沒(méi)關(guān)系再把a(bǔ)3復(fù)制一份即可,a3和a3計(jì)算出b2君丁》愣幔總之,在每層的計(jì)算中绘闷,如果存在單數(shù)橡庞,就把最后一份數(shù)據(jù)復(fù)制在計(jì)算。
從merkle hash的計(jì)算方法可以得出結(jié)論:修改人一個(gè)交易印蔗,哪怕一個(gè)字節(jié)或者交換兩個(gè)交易的順序扒最,都會(huì)導(dǎo)致Merkle hash驗(yàn)證失敗,也就會(huì)導(dǎo)致這個(gè)區(qū)塊本身是無(wú)效的喻鳄,所以Merkle Hash記錄在區(qū)塊頭部扼倘,它的作用就是保證交易記錄永遠(yuǎn)無(wú)法被修改。
區(qū)塊本身用Block Hash來(lái)標(biāo)識(shí)除呵,block hash并沒(méi)有記錄在區(qū)塊頭部再菊,而是計(jì)算區(qū)塊頭部所記錄的所有哈希得到的。
區(qū)塊頭部的Prev Hash記錄了上一個(gè)區(qū)塊的哈希颜曾,這樣就可以追蹤到上一個(gè)區(qū)塊纠拔,這樣每個(gè)prev hash都指向上一個(gè)區(qū)塊,這樣串起來(lái)就形成了區(qū)塊鏈泛豪。
如果一個(gè)攻擊者修改了區(qū)塊中的某個(gè)交易稠诲,這樣這個(gè)區(qū)塊的Merkle hash就不會(huì)驗(yàn)證通過(guò)侦鹏,所以攻擊者只能重新計(jì)算和修改區(qū)塊頭部的Merkle hash,這時(shí)候區(qū)塊本身的hash就變了臀叙,所以下一個(gè)區(qū)塊指向它的鏈接就斷掉了略水,由于比特幣區(qū)塊的哈希值要滿足一個(gè)難度值,因此攻擊者必須重新計(jì)算這個(gè)區(qū)塊的哈希劝萤,然后把后續(xù)所有區(qū)塊全部重新計(jì)算并且偽造出來(lái)渊涝,才能偽造整個(gè)區(qū)塊鏈。
修改一個(gè)區(qū)塊的成本就已經(jīng)非常非常高了床嫌,偽造區(qū)塊鏈需要擁有超過(guò)51%以上的全網(wǎng)算力才行跨释,所以修改區(qū)塊鏈的難度是非常非常大的,并且區(qū)塊鏈在不斷的增長(zhǎng)厌处,修改它的難度會(huì)隨著時(shí)間的推移而不斷的增加鳖谈。
得出結(jié)論:
--區(qū)塊鏈依靠安全的哈希算法保證所有區(qū)塊數(shù)據(jù)不可更改
--工作量證明機(jī)制保證修改區(qū)塊鏈的難度非常巨大從而無(wú)法實(shí)現(xiàn)