一、51%攻擊
51%攻擊指的是,有人掌握了全網(wǎng)一半以上的算力,就可以和全網(wǎng)其他算力進(jìn)行對(duì)抗,更改區(qū)塊鏈記錄了。最根本的原因是比特幣區(qū)塊鏈采取的是最長鏈原則,即當(dāng)前最長的鏈被認(rèn)為是主鏈,是正確的鏈。51%具體能做什么呢?
1. 假設(shè)51%算力仍然是遵循比特幣的規(guī)則
這個(gè)時(shí)候,仍然需要簽名才能進(jìn)行轉(zhuǎn)賬交易等,那么51%攻擊,不能修改別人的賬戶下的金額,不能將別人賬戶金額轉(zhuǎn)到自己的賬戶下,只能對(duì)自己的賬戶進(jìn)行操作,比如雙重支付(雙重支付可以有兩種方式:要么是在交易被確認(rèn)之前,要么攻擊者通過塊鏈分叉來完成)、阻止確認(rèn)其他交易。
2. 假設(shè)51%算力不遵循比特幣的規(guī)則
這個(gè)時(shí)候,51%算力可以修改區(qū)塊鏈規(guī)則,比如,放棄非對(duì)稱加密的簽名機(jī)制,轉(zhuǎn)賬不需要簽名也可以進(jìn)行,51%算力就可以將其他賬戶下的金額轉(zhuǎn)到自己名下,因?yàn)樗莆樟艘话胍陨系乃懔Γ幸?guī)則都可以修改,不需要其他算力的參與(因?yàn)殚L遠(yuǎn)來看,他總是能跑贏其他算力)。
二、6個(gè)確認(rèn)數(shù)
為啥掌握51%的算力就能破壞比特幣網(wǎng)絡(luò)呢?從直觀感覺上確實(shí)如此,將攻擊節(jié)點(diǎn)算力和誠實(shí)節(jié)點(diǎn)算力當(dāng)作兩個(gè)人,挖礦行為就像賽跑一樣,當(dāng)然是速度快的人最終贏得比賽。其實(shí)中本聰在論文中做了數(shù)學(xué)上的分析。另外,現(xiàn)在比特幣轉(zhuǎn)賬,都建議等待6個(gè)確認(rèn)數(shù)之后,資金才認(rèn)為是安全的,在他的論文中也做了解釋。
首先,所有推導(dǎo)都有一個(gè)前提,就是區(qū)塊隨著時(shí)間按照大致恒定的速度產(chǎn)生,也就是說,每間隔T0(10分鐘)產(chǎn)生且只產(chǎn)生一個(gè)區(qū)塊。
假設(shè)當(dāng)前網(wǎng)絡(luò)算力是H,誠實(shí)節(jié)點(diǎn)算力是pH,攻擊節(jié)點(diǎn)算力是qH,p + q = 1。因?yàn)樗懔Ρ旧砭褪侵该總€(gè)固定時(shí)間間隔內(nèi)能計(jì)算Hash的次數(shù),在比特幣中,每10分鐘產(chǎn)生一個(gè)區(qū)塊,我們可以將10分鐘當(dāng)做一個(gè)最小的時(shí)間間隔,那么誠實(shí)節(jié)點(diǎn)算力和攻擊節(jié)點(diǎn)算力是說:每10分鐘發(fā)起一次計(jì)算的比賽,在這10分鐘內(nèi),誠實(shí)節(jié)點(diǎn)能計(jì)算k * p次,攻擊節(jié)點(diǎn)能計(jì)算k * q次(k只是一個(gè)系數(shù)而已,并不重要,重要的是比值),由前提可知:平均意義上,不存在誠實(shí)節(jié)點(diǎn)和攻擊節(jié)點(diǎn)都沒挖出區(qū)塊(某個(gè)10分鐘存在這個(gè)情況的話,那么下一個(gè)10分鐘會(huì)降低挖礦難度),也不存在誠實(shí)節(jié)點(diǎn)和攻擊節(jié)點(diǎn)都挖出區(qū)塊(某個(gè)10分鐘存在這個(gè)情況的話,那么下一個(gè)10分鐘會(huì)增加挖礦難度)。所以可以這樣認(rèn)為:誠實(shí)節(jié)點(diǎn)有概率p挖出一個(gè)區(qū)塊(此時(shí),攻擊節(jié)點(diǎn)沒有挖出區(qū)塊),攻擊節(jié)點(diǎn)有概率q挖出一個(gè)區(qū)塊(此時(shí),誠實(shí)節(jié)點(diǎn)沒有挖出區(qū)塊)!即使誠實(shí)節(jié)點(diǎn)和攻擊節(jié)點(diǎn)在兩條分叉鏈上互不影響的挖礦,整個(gè)區(qū)塊鏈網(wǎng)絡(luò)也符合這個(gè)速度上的特點(diǎn),這點(diǎn)是理解后面公式的關(guān)鍵。
關(guān)于某個(gè)交易得到多少個(gè)確認(rèn)數(shù)之后資金才是安全的這個(gè)問題,在中本聰?shù)恼撐闹校瑢⑦@個(gè)問題,分為兩步(假設(shè)是n個(gè)確認(rèn)數(shù)之后):
1) n是指,在該交易之后,誠實(shí)節(jié)點(diǎn)已經(jīng)挖出了n塊,也就是誠實(shí)節(jié)點(diǎn)對(duì)這個(gè)交易做了n次確認(rèn),因?yàn)楣艄?jié)點(diǎn)的目的是破壞這個(gè)交易,不會(huì)浪費(fèi)自己丁點(diǎn)兒的算力對(duì)這個(gè)交易做任何確認(rèn)。這個(gè)時(shí)候,攻擊節(jié)點(diǎn)挖出了多少塊?(可以理解為,該交易之后,攻擊節(jié)點(diǎn)就在暗地里將區(qū)塊鏈條分叉了,并且不將自己分叉之后的工作放到區(qū)塊上,而是一直在自己的鏈條上單獨(dú)挖礦,等到合適的時(shí)機(jī),才會(huì)公開自己的工作)
2) 假設(shè)這個(gè)時(shí)候,攻擊節(jié)點(diǎn)挖出了m塊,和誠實(shí)節(jié)點(diǎn)差距是z = n – m,攻擊節(jié)點(diǎn)彌補(bǔ)這個(gè)差距,追上誠實(shí)節(jié)點(diǎn)的可能性是多大?
先看第一個(gè)問題,中本聰從固定時(shí)間間隔的角度出發(fā),他認(rèn)為,誠實(shí)節(jié)點(diǎn)T0內(nèi)挖出一個(gè)區(qū)塊的概率是p,那么平均而言,T0 / p 的時(shí)間間隔肯定能挖出一個(gè)區(qū)塊,那么誠實(shí)節(jié)點(diǎn)挖出n塊,共消耗了To * n / p的時(shí)間間隔。攻擊節(jié)點(diǎn)T0內(nèi)挖出一個(gè)區(qū)塊的概率是q,那么T0 * n / p的時(shí)間間隔內(nèi),平均而言肯定能挖出q * n / p塊,而且每個(gè)T0 * n / p的時(shí)間間隔內(nèi),挖出的塊數(shù)差不多。將T0 * n / p當(dāng)做一個(gè)單位時(shí)間間隔,那么求解的問題是:單位時(shí)間內(nèi)隨機(jī)事件發(fā)生的次數(shù)的概率分布。而泊松分布就是描述這個(gè)概率的工具。可以參見:維基百科-泊松分布。λ 表示單位時(shí)間間隔內(nèi)發(fā)生的次數(shù),即為q * n / p。
而Analysis of hashrate-based double-spending這篇論文認(rèn)為,不應(yīng)該從固定時(shí)間間隔的角度進(jìn)行估算,認(rèn)為中本聰?shù)挠?jì)算只是一個(gè)簡化模型。該論文認(rèn)為,依然從塊數(shù)出發(fā),相當(dāng)于:攻擊節(jié)點(diǎn)在經(jīng)歷至少n次失敗(誠實(shí)節(jié)點(diǎn)挖出了n塊),能挖出的塊數(shù),而負(fù)二項(xiàng)分布就是描述這個(gè)問題的工具,可以參見:維基百科-負(fù)二項(xiàng)分布。這個(gè)概率公式很簡單,不做解釋,可以參見論文。該論文最后得出的概率值,和中本聰?shù)哪P偷母怕手荡笾孪喈?dāng),只是略有差別。
接著看第二個(gè)問題,這里再次說一下推導(dǎo)的前提,就是區(qū)塊隨著時(shí)間按照大致恒定的速度產(chǎn)生,也就是說,每間隔T0(10分鐘)產(chǎn)生且只產(chǎn)生一個(gè)區(qū)塊。明確了這個(gè)前提,就能發(fā)現(xiàn),其實(shí)誠實(shí)節(jié)點(diǎn)和攻擊節(jié)點(diǎn)是互斥的,每10分鐘只能有其中之一節(jié)點(diǎn)發(fā)現(xiàn)一個(gè)區(qū)塊,即使他們可能在兩個(gè)分叉上。那么這個(gè)問題就像中本聰在論文中說的,可以等同于賭徒破產(chǎn)問題,可以參見:維基百科-賭徒破產(chǎn)問題或者賭徒破產(chǎn)問題。其中的遞推公式
Pa= pPa+1+ q Pa-1,a=1,2,…,N-1
是說,假設(shè)初始有a個(gè),如果以概率p獲得一個(gè)金幣,那么就等同于初始有a + 1個(gè)金幣,如果以概率q失去一個(gè)金幣,那么就等同于初始只有a – 1個(gè)金幣。應(yīng)用到比特幣中,可以從誠實(shí)節(jié)點(diǎn)的角度出發(fā),理解為,初始的時(shí)候,誠實(shí)節(jié)點(diǎn)有z個(gè)金幣,怎么賭博而失去了所有z個(gè)金幣或者財(cái)富一直增加。具體請(qǐng)參照中本聰?shù)恼撐摹?/p>
下面是Analysis of hashrate-based double-spending中列出的,不同攻擊節(jié)點(diǎn)q概率和等待確認(rèn)數(shù)n的情況下,攻擊節(jié)點(diǎn)追趕上的概率(因?yàn)樵撜撐奶岢龅哪P秃椭斜韭斕岢龅哪P陀?jì)算結(jié)果相差不大,并且提供的數(shù)據(jù)比較全,所以使用這個(gè)表格)
6個(gè)確認(rèn)數(shù)是怎么得到的呢?是假設(shè)攻擊節(jié)點(diǎn)算力在10%左右,發(fā)起攻擊成功概率小于0.1%的確認(rèn)數(shù),從上表中可以看出是6。
-
區(qū)塊鏈
+關(guān)注
關(guān)注
111文章
15562瀏覽量
105927 -
比特幣
+關(guān)注
關(guān)注
57文章
7005瀏覽量
140511
原文標(biāo)題:比特幣 (9):51%攻擊和6個(gè)確認(rèn)數(shù)
文章出處:【微信號(hào):AI_shequ,微信公眾號(hào):人工智能愛好者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論