一、賬本如何驗證(哪乙個賬本是有效的)
假如有這樣乙個賬本
賬號收入
支出餘額
王二100
100張三
10030
李四120
90110
趙五300
600這樣的乙個賬本,分別存在於王
二、張三、李
四、趙五的電腦中。在這時可能有人會增加自己的餘額,比如張三偷偷把自己的餘額從30改為300,這樣網路中就出現了一些假的資料,那麼網路如何確認張三的資料是假的呢?這個問題就是賬本如何驗證的問題。有人就想到了一些方案:把賬本和其他人的賬本對比,如果出現不同,就採用少數服從多數的原則,若你的賬本和其他人的不一樣,就說明你的賬本有問題。但是如果每次我們轉賬的時候都去和數百萬個賬本進行對比,資料一一進行核對,那麼效率是無法忍受的。此處要提一下中心化的系統,在中心化的系統裡,資料是在乙個**伺服器中,若其中的資料被更改,是基本上無法驗證的,因為它只有一方擁有這個資料,其他人無法證明資料的真實性。但在去中心化的系統裡,這就是乙個問題,那麼位元幣是如何解決的呢?在介紹之前,先了解一下hash函式。
hash
雜湊函式是原始資訊通過hash函式之後可以得到乙個簡單的摘要資訊。即hash(原始資訊)=摘要資訊。
雜湊函式的特點:
1、同樣原始資訊,用同乙個雜湊函式總能得到相同的摘要資訊。
2、原始資訊任何微小的變化都會得到完全不同的摘要資訊。
3、從摘要資訊無法逆向推算出原始資訊。
我們熟悉的md5就是乙個雜湊函式。同樣的我們可以用雜湊函式驗證賬本的有效性。
hash函式如何驗證賬本有效性
例如上面的賬本,賬本一般包括賬本的序號,交易的時間和賬本中的資訊。將上面的賬本進行hash就會得到乙個摘要資訊,hash(賬本)=787835a(隨便編的數字),假如摘要資訊就是787835a,這樣我們去比較摘要資訊,如果摘要資訊和其他人的摘要資訊一樣的話,那麼根據hash的特點,就說明原始的資訊是正確的。這樣對比摘要資訊,就會比對比原始賬本資訊更加高效。將這樣的資訊(序號、時間戳、hash值、交易資訊)儲存下來,就形成了乙個區塊,並將序號、時間戳、hash值成為區塊的頭。如果此時來了另外的乙個序號為1賬本b,就將此賬本加入第乙個賬本的hash值:hash(787835a,賬本b)=454535b,就會得到乙個新的摘要資訊。此時進行對賬的時候,就對454535b進行對比,如果正確的話就說明賬本b的資訊和第乙個賬本的摘要資訊都正確,既然第乙個賬本的摘要資訊正確,那麼第乙個賬本資訊也就是正確的。因此賬本b也會形成乙個區塊包含了序號、時間戳、hash值和交易資訊的資訊,以此類推,就會產生第三個.......第n個區塊,所有這些塊串連的結構就成為區塊鏈。每個節點在核對資料是,只需要核對最後乙個區塊的摘要資訊,若最後乙個區塊的摘要資訊可以核對上的話,就說明整個區塊鏈的賬本是正確的,由此就可以完成高效的賬本驗證。
二、所有權問題(如何證明誰擁有這個貨幣)
在位元幣系統中,如何確定某個位元幣是屬於誰的呢?或者說,誰可以使用這個賬戶下的位元幣?我們對比銀行系統來理解這個問題。
當我們在銀行進行交易的時候,我們需要提供銀行卡和密碼,如果卡號和密碼和系統裡的一致,就可以進行交易付款。可是如果發生了盜刷怎麼辦呢?怎麼證明剛剛刷卡的不是我呢?銀行在開戶的時候,需要我們輸入自己的一些資訊和賬戶的密碼,因此在開戶的時候就確定了我們對這個賬戶的所有權。因此在發生盜刷時,銀行若確定交易資訊不是本人進行的,那麼銀行就可以撤銷此次交易。但是在位元幣系統裡是點對點的交易,如何在沒有第三方(如銀行)的參與下來確定賬戶的所有權呢?
在位元幣系統中,賬號是用位址來表示的,轉賬的過程是把位元幣從乙個位址轉移到另乙個位址的過程,賬本上是不儲存任何的個人資訊。下面的資訊就是一條轉賬資訊:表示從位址123轉到位址456,轉了0.2個位元幣。如果誰能夠用這個位址進行支付,那麼誰就擁有這個賬戶的所有權。
在位元幣系統中,賬戶是用位址來表示的,實際上乙個位址會有乙個對應的私鑰,誰擁有了這個私鑰,誰就擁有這個位址的所有權,誰就可以用這個位址進行支付,因此私鑰一定要保護好,若私鑰洩露,則位元幣可能就會丟失,私鑰也沒法重置或找回。位元幣的位址和私鑰是非對稱的關係,私鑰經過一系列的hash運算之後就可以得到位元幣的位址,但是位址並不能得到私鑰。
私鑰:abc
hash(hash(fun(abc)))-->123
因此,賬號所有權就變成如何在不洩露私鑰的情況下,來證明我們擁有某個位址的私鑰(而不是暴露私鑰來證明,因為若私鑰暴露賬號就不在安全)。這裡就需要用到非對稱加密技術對交易進行簽名,這個過程分為兩步:第一,先對交易進行hash得到摘要;第二,用私鑰對摘要進行簽名(要在安全環境下,避免私鑰洩露)。
簽名過程
簽名過程分為兩步:第一,對原始交易資訊進行hash運算得到摘要資訊,如下:
hash(,,
})-->"8a45edf" //摘要資訊
第二,用摘要資訊和私鑰進行簽名運算得到簽名資訊,如下:
#引數1為摘要資訊
#引數2為私鑰
#返回簽名資訊
sign("8a45edf","abc")-->"3d3d3d" //簽名資訊
在簽名運算後,付款的節點就會在整個網路中進行廣播,廣播的內容包含了交易原始資訊、交易的簽名資訊。當節點收到廣播並驗證通過後,就會再向其他節點發出廣播。節點收到廣播就會開始驗證,驗證簽名的資訊是否是付款方用私鑰對原始資訊簽名產生的,驗證如下:
#引數1是簽名資訊
#引數2是付款方位址
#返回交易的摘要
verify("3d3d3d","123")-->"8a45edf" //摘要資訊
若摘要資訊是付款方對交易資訊hash後的摘要資訊,則驗證通過,此時將交易資訊寫入賬本,然後在進行廣播(實際驗證時還會驗證賬戶餘額是否足夠,此處不作考慮)。
實際上,簽名和驗證是乙個逆運算,可以理解為簽名是乙個加密過程,驗證是乙個解密過程。付款方用私鑰對摘要資訊進行加密,其他節點用簽名資訊和付款方位址進行驗證,因此賬戶的所有權問題是由私鑰控制的,誰擁有私鑰,誰就擁有某個位址的所有權。
由於賬本裡是沒有個人資訊的,很好保證了私隱性,不管賬戶上有多少位元幣,也沒有人知道這個位元幣是我的,但我還可以用該賬戶的位元幣進行交易。另乙個保證了安全性,若是銀行卡,銀行可以凍結我們的賬戶,而在位元幣系統裡,只要我們不洩露私鑰,我們賬戶的錢就是安全的。
位元幣原理1
雜湊函式 原始資訊 摘要資訊同樣的原始資訊用同乙個雜湊函式總是能得到相同的摘要資訊,原始資訊的微小變化都會雜湊出面目全非的摘要資訊,從摘要資訊無法逆向推算出原始資訊。hash 序號,時間戳,交易資訊 雜湊值,雜湊函式的怎麼實現的?區塊 序號,時間戳,雜湊值 交易資訊10分鐘出塊雜湊值 hash ha...
位元幣原理詳解
一 什麼是位元幣 位元幣是一種電子貨幣,是一種基於密碼學的貨幣,在2008年11月1日由中本聰發表位元幣 文中提出了一種去中心化的電子記賬系統,我們平時的電子現金是銀行來記賬,因為銀行的背後是國家信用。去中心化電子記賬系統是參與者共同記賬。位元幣可以防止主權危機 信用風險。其好處不多做贅述,這一層面...
一段程式看懂位元幣原理
自從位元幣火起來以後,網上對位元幣的解釋可謂汗牛充棟,紛繁複雜。但對於程式設計師來說,最直接的方式莫過於直接看程式 了。嫌位元幣 龐雜沒關係,我找到一段簡明扼要的 用來理解位元幣再好不過了。以下這段程式 知乎上wu hao的回答。function mine function sendbtc amou...