hash函式有一類基於密碼學,稱為cryptographic hash function.
crypto-hash有兩個很重要的性質:
1.collision resistance
x ≠y
,h(x
)=h(
y)
x\neq y ,h(x)=h(y)
x̸=y,
h(x)
=h(y
)這個性質帶來了乙個好處。當輸入為m
mm時,難以用特定的方法求乙個m′m'
m′,使得h(m
)=h(
m′
)h(m)=h(m')
h(m)=h
(m′)
,即可以用來digest.
注意這是乙個經驗性質,而不是被證明的性質.比如md5,原來普遍認為它擁有很好的collision resistance的性質,後來有人找到了製造碰撞的方法,所以md5現在不再擁有collision resistance的性質了.
2.hidding
這個性質告訴我們h是單向而不可逆的.給定乙個h(m
)h(m)
h(m)
很難找到原像mmm.
這兩個性質使得這類hash函式可以被應用於digital commitment或digital equivalent of sealed envelope.
實際的hash方法:
x →h
(x∥n
once
)x\to h(x\vert nonce)
x→h(x∥
nonc
e)位元幣這類區塊鏈還需要乙個性質:
3.puzzle friendly
這個性質給予了hash函式proof of work(pow)的性質.
同時hash函式的性質還使得這些puzzle difficult to solve, but easy to verify.
在位元幣中,建立賬戶的方法是建立乙個公私鑰對,這種方法**於非對稱加密(asymmetric encryption algorithm).
注意hash函式的這三個性質都是基於定義域足夠大,我們在定義域中選取了乙個足夠隨機的值這個前提的.
現在我們可以講一講區塊鏈關於在資料結構上的定義了:
blockchain is a linked list using hash pointer.所謂hash pointer,就是這個數值既是指向乙個區塊的位址,又是驗證這個區塊內容的hash值.
hash函式將上乙個區塊的內容連同上乙個區塊的hash pointer一起hash,形成新的hash pointer. 這樣的好處是不易修改.相比傳統的鍊錶,blockchain形成的鍊錶中,深度越淺(越靠近煉表頭)的節點越不易修改.從而blockchain資料結構可以作為tamper-evident log.
在這個鍊錶中,我們將blockchain的第乙個生成的塊稱為genesis block,把blockchain最後乙個生成的塊稱為most recent block.
但事實上,區塊鏈不總是鏈狀形式,而更廣義地會以merkle tree的形式存在.
merkle tree is a binary tree using hash pointermerkle tree可以提供merkle proof.所謂merkle proof,是一種零知識證明,無需洩露資訊便可證明某個物體具有某種性質.這個性質**於hash函式hidding的性質.
區塊一般由兩個部分構成.乙個是block header,它負責作為鏈的一部分對各區塊進行連線.
block header:
class
blockheader
另乙個是block body,它負責記錄交易的資訊.block body不參與到結構的構成中,但因為hash將整個block包括在內,所以block body中的資訊可以保證不被篡改(以概率的意義上).
1.採用非對稱加密方式生成賬戶.
按照位元幣的標準,只要按照ecc加密生成公鑰和私鑰,就相當於生成了乙個位元幣賬戶.公鑰可以為大家所知,這樣任何人都可以轉賬給這個賬戶,而私鑰一般只屬於賬戶的擁有者.
2.按照區塊鏈方式組織賬本.
每一條區塊鏈只會有乙個genesis block.每個genesis block都會產生一定量的位元幣,所以拿到第乙個genesis block的人擁有鑄幣權.擁有鑄幣權的人,會在genesis block中附有他賬戶的公鑰,表明這些位元幣屬於這個公鑰代表的賬戶.
除了genesis block,任何其他交易的貨幣必須指明**,並簽上自己的私鑰(按照hash方法加密過的私鑰).我們假設a發起了乙個交易,他要向b轉x個位元幣,所以他發布了乙個交易請求:「a(賬戶的公鑰)向b(賬戶的公鑰)轉了x個位元幣,**是(區塊1,區塊2,…),sign:a(賬戶的私鑰)」.**有兩種.一種是genesis block中憑空產生的位元幣,這時只需要比對公鑰和私鑰,就能驗證這些位元幣確實是屬於a的.另一種是非genesis block中經他人轉賬獲得的位元幣,這時候只需要利用merkle tree的性質就能夠驗證這些位元幣是正常交易,並且被掌握在a手中,所以也能驗證這些位元幣確實是屬於a的.
3.採用經濟博弈淘汰惡意區塊.(可以看一點其他的資料,不是很了解)
membership of votes
longest valid chain
orphan block
block reward
transaction-based ledger
utxo(unspent transaction output)
total inputs=total outputs
transaction fee
1.double spending attack
對於參與到區塊鏈網路中的任意乙個節點都能夠競爭發布區塊的權力.當乙個節點同時發布了兩個交易,其中包含有相同的位元幣**.
這個攻擊可能會造成兩個後果:
a.乙份位元幣被花兩次.由於區塊鏈的性質,最終一定會有乙個交易無效.
b.被捨棄的那個交易已經為攻擊者謀得了利益.這個是區塊鏈無法保證的,所以區塊鏈又提出了穩定性的原則,當交易的區塊後面已經綴連了六個區塊時,我們認為這個交易已經基本不可篡改.
2.sybil attack
乙個使用者同時註冊多個賬戶意圖掌握網路控制權.
我們後面會講到,位元幣的pow機制使得控制區塊鏈的能力和該使用者掌握的算力成正比,所以乙個使用者註冊多個賬戶並不會實際提高該使用者控制區塊鏈的能力.
3.forking attack
乙個節點在同乙個區塊後面插入多個區塊,意圖分散誠實節點的算力.
這種攻擊在位元幣區塊鏈中的實現的機率比較小,因為位元幣區塊鏈重新整理的時間是10分鐘.
zero confirmation
selfish mining: 回滾交易,
區塊鏈技術 位元幣
位元幣 btc 是一種數字貨幣,去中心化 p2p網路 加密解密技術,區塊鏈分布式記賬 公開 透明 可追溯特點 等技術實現 位元幣怎麼產生的呢?挖礦產生的。那麼其他節點怎麼判斷這個廣播區塊是不是這個鏈上的呢?他們可以拿到新生產區塊的未知數和上乙個區塊的hash值帶入上面的公式可以進行驗證。怎麼保證礦工...
區塊鏈技術 位元幣
位元幣 btc 是一種數字貨幣,去中心化 p2p網路 加密解密技術,區塊鏈分布式記賬 公開 透明 可追溯特點 等技術實現 位元幣怎麼產生的呢?挖礦產生的。那麼其他節點怎麼判斷這個廣播區塊是不是這個鏈上的呢?他們可以拿到新生產區塊的未知數和上乙個區塊的hash值帶入上面的公式可以進行驗證。怎麼保證礦工...
區塊鏈 位元幣執行原理
目錄 在位元幣的交易中,位元幣的擁有者需要先擁有乙個位址,這個位址就相當於是位元幣的錢包,位元幣就是錢包裡的錢。每一次的位元幣交易其實就是位元幣從乙個錢包轉向另外乙個錢包,即從乙個位址轉向另乙個位址。這個位址的生成同我們在現實世界的身份沒有任何關聯,也就是說在位元幣交易中,儘管知道交易者的位址,但並...