區塊鏈專題

本文屬非商業用途,文中借鑑他人處均已註明出處,若侵犯原做權益,請聯繫刪除,謝謝php

 

簡介

    近兩年火起來的除了人工智能(機器學習),P2P還有區塊鏈。做爲IT從業者也須要緊跟潮流,瞭解下技術動態。簡單整理了網上一些瑣碎資料,加上我的理解,做爲一篇小報告吧。html

    爲何火?我的感受是比特幣的火爆,尤爲前幾天的黑客事件,勒索的是比特幣而非法訂貨幣。問題來了,爲什麼勒索比特幣?這就是他的匿名性,目前凡電子形式法訂貨幣都是比較容易追蹤的,這也有好處,好比把錢打錯人了,理論上是能夠追回的。因爲比特幣的這種特殊性質,成爲理想的「電子黃金」(黃金顯然也是不記名的)。算法

        做爲技術人員,不關係其應用,關心下技術框架吧(技術細節也不關係,不然要整個專題了,推薦圖書《精通比特幣》,若不打算從事此方向,沒必要深究)。安全

 

要講比特幣,先說區塊鏈。網絡

 

什麼是區塊鏈?

 

標題:什麼是「區塊鏈」?框架

做者:懶貓機器學習

地址:http://8btc.com/forum.php?mod=viewthread&tid=24008&page=1#pid273016分佈式

這篇文章講很是棒,像做者致敬,同時配圖也很精彩,老小皆宜^_^。學習

 

 

原始村莊案例
在這個世界上某個原始的封閉小村莊裏,目前還處在用金條做爲貨幣來進行商品交換的時期。區塊鏈

 

然而金條這麼重,抱着金條跑來跑去很不方便,金條儲存在家裏又佔地方。

 

 

因而有一天,村長想出了一個好主意。

這年的年初,村長在某村的村口召開全體大會,宣佈要在本身家設立一個大帳本,村民們上交金條,村長就在帳本上作記錄。

 

 

此後好比小張拿兩個金條換小李的一頭牛的時候,就給村長打個電話說明狀況。村長看看帳本,先得肯定小張是否真的有兩個金條,若是有就劃歸到小李名下,再打個電話告訴小李。而小李得知轉帳成功後,再把牛給小張。

 

 

村民們都很信任德高望重的村長,因而紛紛把金條交給村長家,村長家的大帳本正式運營起來了。


一個春天過去了,一切交易都井然便利地進行着,只是村長一我的漸漸應付不了繁多的記帳和電話,就僱傭了幾個賬房先生管理帳本。

 

 

但是沒想到夏天的時候出了個事故,一個賬房先生被人抓住偷偷把別人家的金條記在本身家的帳上,民情激憤之下村長只得當機立斷開除了這個賬房先生,並宣佈本身親自監督和審查每一筆交易,這才穩住了民心。


秋天收穫了,盛產莊稼的某村和盛產水果的隔壁東村開始有了頻繁的商品交易,村民們懶得換現金,就請求村長把帳本業務拓展到隔壁村。沒想到,當村長拿着帳本到了東村的地界,東村村長根本不認村長的帳:「俺們村也有帳本,但不是這麼記的。大家這種記法俺們看不懂。」這時候,村民們開始有點沮喪。

 

 

冬天的時候,村長的門口忽然來了個小孩,聲稱本身的母親王翠花意外過世,想把媽媽存着的金條所有拿走,另謀生路。村長這下犯難了,以前歷來沒有見過這小子啊,莫不是翠花的私生子?可又萬一是個騙子呢?因而村長只好說:只有你證實翠花是你媽了,我才能把錢給你。小孩拿出一張他媽的書信,村長撓頭,這字跡是能夠僞造的啊!萬般無奈之下,小孩憤而離去。

雖然經歷了種種波折,但終於捱到了過年,在年夜這天傍晚,村長又在村口召開了一次村民聯歡晚會,想要回顧一下這一年的帳本計劃,重振一下村民對帳本模式的口碑。但是還沒等他說完,他家寶貝小兒子就由於玩炮仗把他家給炸了,帳本也給毀了……

 

 

全村人都傻眼了,連村長都不值得信任了,從此到底該咋辦?

 

 

這時候,一個叫中本聰的聰明人忽然不知道從哪裏冒了出來,賊兮兮的說:「我來給大家出個解決方案吧,我叫它區塊鏈。這個方法我已經在我開發的比特幣體系中實踐和應用了,恰好能夠拿來解決大家村的問題。」

 

 

中本聰的提議並不複雜,各家仍是把現金轉化成帳上的記錄,可是今後就再也不在大帳本上記帳了。
當張三要拿兩個金條換李四的一頭牛時,中本聰懸賞必定的金額讓你們幫着檢驗記帳,第一個驗證出「張三確實有兩個金條而且確實把兩個金條給了李四」的人被授予「礦工」稱號並得到必定獎賞。「礦工」須要把這一筆交易寫在一張編號001的紙條上;次日李四拿出一個金條找王二買一隻雞,村民們便搶着翻閱大帳本和編號001的紙條,驗證成功後把交易內容寫在編號002的紙條上,並在紙條上寫上「以前交易內容見001」,以此類推。這時候,只要帳本的「初始狀態肯定」,每一張紙條的記錄「公開可驗證並有時序」,當前每一個人持有的錢數都是能夠推算出來的。

 

因而,咱們發現,在這種機制下,問題迎刃而解了。

區塊鏈方案全部的規則都是公開透明的(創建的數學算法上),因此村民們得到了共識,能夠相互之間達成信任;
帳簿只在村長或者帳房先生手上,造假的可能性就很是高,但每一個人手裏都有一本帳簿,除非你說服了整個村裏超過51%的人都更改某一筆帳目,不然你的篡改都是無效的。另外,就算某我的手裏的帳本損壞,其它人手裏都有副本,徹底不用擔憂。
更進一步,除了帳目,還能夠把我的身份按照一樣的原則記錄在案,在須要覈實的時候進行查詢,實現自證的目的。
        聽到這裏,村民們明白區塊鏈的本質了:一個公開透明的可信賴的賬務系統,它能安全的存儲交易數據,而且無需任何中心化機構的審覈,由於這個過程徹底是由整個網絡來完成的。

 

 

從比特幣的角度再次理解區塊鏈

        在以上這個故事的前提下咱們再來講說比特幣,因爲區塊鏈是伴生着比特幣出現的,這樣能夠加深對區塊鏈的理解。
        和全體村民共同擁有的帳本同樣,比特幣只有一個區塊鏈——那就是在全球擁有的,沒有任何主權國家去管理它,也沒有任何中心 機構能夠管理它,並且幾乎沒有哪一個國家可以傷害它,不只黑客沒法傷害比特幣區塊鏈,政府也沒法傷害比特幣區塊鏈。
        咱們將比特幣的交易過程和上文中村民搶着記帳的過程進行類比:若是你在區塊鏈上,把比特幣從A賬戶付到B賬戶,每一個賬戶有一把公鑰、私鑰,採用非對稱的加密方法,因此你公鑰是能夠解碼的,可是私鑰到如今爲止,沒有人有這個能力,無論是政府仍是黑客。
        你只須要向全網廣播:我要從這個賬戶匯一筆錢到B賬戶去,而後把B賬戶的公鑰也公佈了,這事情就結束了,跟你沒有關係了,剩下的就是由在網絡上其餘的人去搶,搶到這個把你這筆交易記賬的權利。
        怎麼搶呢?開始對你公佈的這兩個公鑰進行解密,因此須要擁有很大的計算能力,纔可以把它解開,對公鑰解密,確認A賬戶裏面確實有100個比特幣,而後再把B賬戶的公鑰解開,你把錢寄到他那裏去,這就是咱們俗稱的挖礦,你把這個事情作了,每一個區塊會產生25個新的比特幣(獎勵每四年會減半,比特幣到現在已經7個年頭了),你就能夠獲得這個獎勵。

        你們應該看過這樣的一個段子:數年前,A借了B君20000塊,可是到了期限沒有現金還給B,只好給了B君2000個比特幣,B君當時不知道比特幣是什麼玩意兒,也就把這事兒忘了。某一天忽然看到新聞說比特幣大漲,多麼多麼值錢,趕忙回去看了眼本身的帳戶,因而,轉眼他就變成百萬富翁了........
        且不論這個事情的真假,至少說明,幾年前挖比特幣是很賺錢的,可是鑑於目前比特幣快被挖完了,挖的難度也愈來愈大,沒有原來那麼好賺了而已.....
        當前比特幣交易的一次確認時間大約平均是10分鐘,這個特色跟現有銀行體系和企業的結算方法有很大的差異。銀行下午5點鐘一定關門,不可能24小時營業,由於天天要結算,因此大部分的金融欺詐就這樣產生淨額交收當中——由於你事情已經記了,可是錢還在途,每家銀行次日必定要對頭一天的賬進行修正,沒有一家銀行可以在下午5點鐘截止以後,把事情和賬作平的,必定有錢在途而銀行尚未收到,可是那個賬銀行得先記,錢是沒來的。次日也許錢來了,你就要對頭一天的賬從新平衡,也許這個賬就沒收到,出現差錯,這是必然的現象,可是比特幣的區塊鏈是24小時的,每10分鐘結一次賬,比特幣區塊鏈上,10分鐘的比特幣交易變成一個區塊,結一次賬一個區塊就造成了,10分鐘一個區塊,任何一個區塊,任何這10分鐘的區塊結賬的時候,基本上有三方面的內容:
  

 

 

 

  • 上一個10分鐘的全部比特幣交易的摘要。
  • 10分鐘內比特幣區塊鏈上全部比特幣交易的詳細記錄。 
  • 網絡上蓋一個時間戳,表現是這一段時間全部的賬。


  
那麼這個區塊就完成了,接着再進行下一個區塊。

 

 

 

        看完上文,應該能對區塊鏈,比特幣有個大概的認識了。一句話來描述,區塊鏈就是分佈式帳本,而比特幣就是分佈式帳本的一個具體應用(能夠理解爲,用帳本記金錢能夠,記錄時間也能夠,記錄誰欠你幾拳頭也沒問題。同時也能夠發明出牛特比,頓特幣)

 

 

區塊鏈對若干核心問題的處理

做者:Alex Zhao
連接:https://www.zhihu.com/question/27687960/answer/38301765
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

把區塊鏈想象成一個比特幣的公共帳本,這個帳本:
1.存放在互聯網的各個比特幣節點上,每一個節點都有一份完整的備份
2.裏面記錄着自比特幣誕生以來的全部比特幣轉帳交易
3.帳本是分區塊存儲的,每一塊包含一部分交易記錄。每個區塊都會記錄着前一區塊的id,造成一個鏈狀結構,於是稱爲區塊鏈
4.當你要發起一筆比特幣交易的時候只需把交易信息廣播到p2p網絡中,礦工把你的交易信息記錄成一個新的區塊連到區塊鏈上,交易就完成了。

這裏有幾個問題:
1.如何保證用戶有足夠的餘額,例如你只有十個幣,而你竟然發起了一筆轉20個幣的交易怎麼辦。
        回溯全部的和你帳戶相關的歷史交易就能知道你這個帳戶上到底有多少餘額,餘額不對礦工是會拒絕記錄你的交易的

2,最初的比特幣是從哪裏來的呢? 

        最初的比特幣是由系統獎勵給記錄區塊的礦工的。每個區塊在生成的時候就會在生成這個區塊的礦工的帳戶上生成必定數量的新比特幣做爲獎勵。

3,如何保證你的帳戶不被冒名頂替
        數字簽名技術。每一個比特幣帳戶都有公鑰和私鑰。你發起交易的時候用私鑰對交易信息簽名,礦工收到信息後用公鑰檢查一下簽名就行了。因此你的錢不必定是你的錢,而是你的私鑰的前,私鑰沒了,錢就沒了。即便你從其餘地方偷到了比特幣,別人也沒法追蹤或討回,除非你泄露私鑰。

4.那麼多礦工,如何決定該由哪一個礦工生成下一個區塊?
解決方案是這樣的:
        中本聰設計了一個數學問題,這個數學問題會耗費大量的計算機cpu時間才能得出答案,同時每一次得出的答案都會做爲下一次計算的初始條件進行技術。全世界的礦工一塊兒來計算這個問題,誰先得出答案,他就能夠用這個答案生成一個新的區塊,再廣播到網絡中。收到這個新塊數據的礦工會當即中止當前的計算,用新塊裏的數據從新進行下一次計算。這就是所謂的「挖礦」。礦工產生的區塊一旦被網絡接受,他就能得到一筆比特幣做爲酬勞。

        這時要考慮一種狀況:若是同時有兩個礦工各自獲得一個正確答案,並各自生成了一個區塊廣播出去會發生什麼呢?

這時候在區塊鏈上同一個位置就有了兩個區塊,所謂的「分叉」就出現了。
        分叉是絕對不容許的,因此當礦工發現區塊鏈分叉以後,會選擇最長的一條繼續計算,短的那條區塊鏈會被丟棄。因爲會有丟棄現象,因此就存在隱患。所謂51%攻擊。

5,仔細思考下這個體系,你會發現它幾乎無懈可擊。首先你不能憑空造出比特幣,只能挖礦得到;其次你沒法僞造交易,沒法控制不屬於你的帳戶。一旦交易被確認,幾乎沒法取消。我這裏說「幾乎」,是由於有「51%攻擊」的存在。51%攻擊條件很是苛刻,這裏就不擴展開講了。感興趣的朋友能夠自行查閱相關資料。

 

51%攻擊

        所謂51%攻擊,就是利用比特幣使用算力做爲競爭條件的特色,使用算力優點撤銷本身已經發生的付款交易。方式就是上文提到過的,利用長鏈替代短連接,這樣短鏈交易會被清除。

標題:什麼是比特幣51%攻擊?

地址:http://8btc.com/article-1949-1.html

 

他可以:

一、修改本身的交易記錄,這可使他進行雙重支付

二、阻止區塊確認部分或者所有交易

三、阻止部分或所有礦工開採到任何有效的區塊

可是他沒法作到:

一、修改其餘人的交易記錄

二、阻止交易被髮出去(交易會被髮出,只是顯示0個確認而已)

三、改變每一個區塊產生的比特幣數量

四、憑空產生比特幣

五、把不屬於他的比特幣發送給本身或其餘人

 

一個典型51%攻擊案例

比特幣發動51%攻擊具體思路大體以下:

 

準備工做:

1. 既然是51%攻擊,就必須首先掌握足夠的算力,不管是控制礦池,仍是利用其它計算資源,總之必須使你的算力領先與如今網絡總算力,領先的幅度越大,成功的可能性越高;

2. 拿到足夠的BTC做爲籌碼,不管是本身挖到的,仍是從任何渠道買的,均可以;

 

攻擊步驟:

1. 將手中的BTC充值各大交易所,而後賣掉,提現;或者也能夠直接賣給某人或某一羣人;

2. 運用手中的算力,從本身對外付款交易以前的區塊開始,忽略本身全部對外的付款交易,從新構造後面的區塊,利用算力優點與全網賽跑,當最終建立的區塊長度超過原主分支區塊,成爲新的主分支,至此,攻擊完成;

 

攻擊結果: 

因爲撤銷了全部對外付款交易,等於收回來因此已賣掉的比特幣。

可行性評估: 如今比特幣全網算力差很少90T,並且還會快速增加,如今看來只有如今的幾大礦池聯合,才具備發動51%攻擊的實力,普通我的或機構實施此攻擊的可能性愈來愈小。

 

 

其實關於51%攻擊,我的仍是存在疑惑的。

第一點,爲什麼是全網算力的51%,我的理解的每一個節點獨立算題,因此只須要比其餘玩家快就ok了。

第二點,重複交易的比特幣爲什麼沒法被比特幣的自我校驗邏輯發現,因爲比特幣建立也會記錄帳目的,因此經過回溯全部交易實際上是能夠發現 「支出!=收入」的現象的。