區塊鏈與位元幣

2022-08-18 17:03:12 字數 3670 閱讀 8877

我對位元幣的理解分為兩個方面,既是一種交易體系,也是貨幣單位。而區塊鏈是是一種分布式資料庫,具有高度安全性。我先從區塊鏈談起,再介紹位元幣。

區塊鏈技術是一種分布式資料庫。我們生活中經常與分布式資料打交道,例如雲儲存,伺服器架構等等。對於這種應用,安全性的考量都是出自於硬體安全,例如一台伺服器崩了,資料要保正安全。所以資料一般是多個伺服器冗餘儲存,但不會要求全網每台伺服器都要求儲存乙份。這種方式可以規避硬體風險,但對於人為攻擊就會產生漏洞。如果我想要破壞資料,可以採用兩種方案。一種是針對資料存放的位置,也就是攻擊少數幾台伺服器,把這些資料全部毀壞,或者修改部分資料,讓資料發生混亂。另一種是針對資料傳播的途徑。我可以在你想要獲取資料時截獲你的包,或者發動中間人攻擊,冒充伺服器傳送虛假的資料。

區塊鏈技術可以解決第一種攻擊模式。區塊鏈的資料單位是block,每個block採用鍊錶的結構彼此相連,同時保證全網的資料一致。也就是每一台加入區塊鏈網路的伺服器都保留有乙份完整的全網資訊。block分為head和body。body通過哈西運算獲得hash編碼,head會加入body的hash以及上一塊block的head的hash,當然還有時間等一些重要資訊,然後生成自己的hash以供下一塊block呼叫。這樣的結構保證了區塊鏈中的資料都是完整的,相互聯絡。

說完了資料結構,我們談談區塊鏈資料的產生方式。區塊鏈的資料是競爭產生的!注意,區塊鏈和網際網路不同,對資料的發布有嚴格的要求,必須通過大量的計算得到符合要求的hash後才能向全網發布。假設我想向整個網路寫入乙個資訊,例如「明天是我的生日,大家要送禮物給我喲!」。那麼我先獲取上乙個block的hash,再計算內容body的hash,再計算head的hash。看這個結果是不是滿足網路中的發布要求,如果不滿足那麼重新計算。可是如果我的計算機沒別人的快,也就是我還在計算時有人已經發布了乙個新的block!不好意思,已經做的計算白費了,你得用新的block的hash重新計算。同時還要說明這個網路對hash計算難度是動態調整的。當初設計是控制在每十分鐘產生乙個新的block。也就是如果最近一段時間,加入網路的伺服器效能強進,導致8分鐘或者9分鐘就能有乙個block產生,那麼網路會加大難度,讓這個時間回歸到10分鐘。所以hash演算法難度和全網的計算資源相關,你不太可能超越全網的計算能力,在短期內計算出結果。

區塊鏈技術之所以要設定必須做出大量計算之後才能發布block,主要是為了給處理分布資料的同步留出時間。假設在區塊鏈中很簡單就能計算出滿足要求的hash,那麼資訊的傳遞就像幼兒園一樣嘈雜,每個人都在發布自己的資訊。a的話還沒等到b,c......接收到,h已經發布了新的資訊,聽誰的?先做一些計算再去發言,且嚴格控制計算難度,一定程度避免了資訊同時發布,也為全網資訊同步留出了處理時間。

但是如果有兩台伺服器同時發布了結果,要知道乙個資料報全網傳遞時需要時間的,等到所有伺服器都拿到資料,應該也是有兩份滿足要求的block。那麼這個時候就產生了分叉,解決方案是讓這兩個分叉自由增長,看誰先達到6塊,就確定保留誰的。那麼這時候計算新block就像是賭博,有的從a分叉的hash計算下乙個block,有的從b分叉的hash計算下乙個block。等到a方達到6個block,保留a,刪除b。押b的伺服器所做的計算全部作廢。

現在假設有一台伺服器出了問題,沒關係,資料大家都有,等這台伺服器修好了加入進來copy其他人的就行了。再假設其中隨機一塊block壞了,或者資料「莫名其妙」變了。沒關係,解算第乙個block的hash一直到最新的block,看hash能不能前後相依,如果不能,那麼資料被修改了,再從其他人那裡copy乙份就好了。再假設機緣湊巧,資料「莫名其妙」變了,但是hash還能連在一起。那麼全網公投,少數服從多數!

以上就是區塊鏈的技術介紹。現在我們來攻擊這個網路。我們不需要偷取資料,因為區塊鏈中的資料是全網透明的。但是我們想修改其中乙份資料,那麼我們得過兩個關口。第一,我們要計算從修改的block到最新block的全部hash,使得自己的資料滿足規則。我們也知道,hash的計算難度是全網最好的計算平台用10分鐘計算出來的!假設你有錢,把神威-太湖之光買下來了。那麼可以修改全部資料,還要第二個關口——全網公投。你得想辦法把整個網路中51%的伺服器都黑了,才能贏得這場投票!如果這個網路足夠大,那麼能做到這一點的無論是計算能力還是網路技術,應該沒有人能把它怎麼樣了!

至此我想你明白這個網路中的資料為什麼是安全的了吧。但是用神威-太湖之光計算出來的hash只是為了告訴大家給我送禮物,恐怕太奢侈了!這種網路現在最大的用途是構建去中心的交易平台,此時的block裡儲存的是平台中所有的交易資訊,而位元幣是網路規模最大的一種例項。

區塊鏈是位元幣的基礎架構,它保證了已經生成的資料是安全的。如果有人想修改某筆交易的資訊必然要花費巨大的代價。可是在資料傳遞的過程中?也就是第一種攻擊模式失敗,嘗試第二種攻擊模式,我截獲正在傳遞的交易資訊或者向平台發布虛假的交易資訊!要處理這種問題就要應用資訊加密技術!

雙鑰加密,就是同時生成兩個對立的數字金鑰(兩串數字)——公鑰和私鑰。如果用公鑰加密的內容必須用私鑰才能解密,用私鑰加密的內容必須用公鑰才能解密。公鑰是公開的,私鑰只有個人知道。現在假設a生成了這對金鑰——公鑰x和私鑰y,並把x交給了b,c,d三個人。現在b用x加密資訊發給a,只有用y才能解密資訊,所以其他人即使截獲信件也不知道信件內容。可是a不能也用x加密回信,那麼b也不能解讀。所以a只能用y加密,可是c,d就能知道回信內容。這沒辦法,所以a乾脆不加密了。但是a留了一手,他把信件內容生成了乙個hash,而且用y加密了(這個加密的hash就是數字簽名),和信件一起送給b。這樣c和d即使知道了信件也不能修改信件,因為內容一旦修改,b用x解算出來的hash和信件內容就對不上了。即使c和d想連同hash一起修改也不可能,因為沒有私鑰y,無法加密hash。這種加密機制能保證b向a是加密不可見,a向b是可見但不可修改的。通過對資訊內容的特殊處理就能保證整個通訊過程是不可見的(例如b提問,a只回答是還是不是)。

位元幣交易平台也是採用雙鑰加密技術確保每筆交易資訊都是真實有效的。首先加入位元幣交易平台,都會生成一對私鑰公鑰,公鑰太長了不便與傳播,又用哈西計算得到對應的hash,稱為公鑰指紋或者錢包位址。你的公鑰或者公鑰指紋大家都能獲取。

現在假設a和b發生了一筆交易,用位元幣解算,a要支付b乙個位元幣。如果這個交易要生效必須讓全網都知道。那麼a和b必須把這個資訊寫進下乙個block裡面才行。可是憑我們的筆記本根本跑不過神威-太湖之光,所以a和b把自己的交易資訊發布到網路上,承諾如果誰能把他們的資訊寫進下乙個block裡,就支付一筆手續費。剛好c是個土豪,有十台超算,沒事就幫人算hash。c接到訊息,先是讓a用私鑰加密資訊的hash傳送過來(數字簽名),自己用a的公鑰解密,確認這個訊息是a發過來的。再在全網資料中檢查以往的交易記錄,確認a有這麼多的位元幣可以支付。現在支付人和支付能力都確認了,所以c把a和b的交易資訊以及數子簽名還有其他幾千筆同樣的資訊都寫進block並第乙個發布到網路上了。之後c得到了幾千筆手續費,還根據規則凡是發布block的人都可以獲得10個位元幣。其中c我們稱之為」礦工「,這種幫其他人算hash的行為成為」挖礦「。

現在我們想在資訊傳遞中造假,例如向礦工傳遞虛假交易。但是我們沒有支付方的私鑰,這條資訊根本不成立,礦工直接就能辨識。而且我們也沒傻到用自己的私鑰,那等於送錢給別人。所以乙個普通人是不能在位元幣交易平台中作弊的。那麼假設我們是礦工,且算出了下乙個block,那麼我們能不能加入虛假的資訊呢?注意礦工算出了hash,不代表這個block就能被別人認證。因為block含有支付方的數字簽名,礦工也沒有私鑰,不能偽造。而且如果隨意編造,其它的伺服器也很容易辨識這個block是乙個虛假交易,不採用這個block。這意味著造假的礦工損失了一次賺錢的機會!

所以這個網路中如果沒有掌握絕對優越的計算資源是不可能造假的!

區塊鏈入門教程

位元幣入門教程

數字簽名是什麼

加密貨幣的本質

區塊鏈 位元幣與區塊鏈學習

什麼是位元幣 位元幣是中本聰2009年提出的乙個點對點的數字加密貨幣系統。但是,這個定義背後的內涵和外延非常豐富。遠不是這一句話能夠概括的。我們可以從多種不同的視角,不同的方面,不同的層次去看它,看到不一樣的東西。打個比方,就像乙個建築物,可以從物理,力學,建築學,文化,社會等等角度去看它,都可以看...

位元幣 區塊鏈

區塊鏈 一種實時記錄全部交易的去中心化公開資料 庫,在區塊鏈上進行支付時全網計算機共同查詢區塊鏈資料,共同驗證這筆支付交易是否有效。確認支付後將寫入區塊鏈並產生一條不可篡改記錄。區塊 區塊大小是1m,包含父雜湊 merkle根 時間戳 難度目標 隨機數。程式上近似每10分鐘增加乙個block,blo...

大話區塊鏈與位元幣

區塊鏈 blockchain 是分布式資料儲存 點對點傳輸 共識機制 加密演算法等計算機技術的新型應用模式。區塊鏈是位元幣的乙個重要概念,它本質上是乙個去中心化的資料庫,同時作為位元幣的底層技術。2008年由中本聰第一次提出了區塊鏈的概念。位元幣 英文原版其實並未出現 blockchain 一詞,而...