密碼學(xué)
比特幣中使用的密碼學(xué)主要包括:Hash 和 簽名
1. Hash
Cryptographic hash function:密碼學(xué)中使用的 hash 函數(shù)。
SHA-256(Secure Hash Algorithm):BTC 使用的 hash 函數(shù)。滿足以下幾個特性。
1.1 Collision Resistance
Hash Collision:hash 碰撞
由于 hash 函數(shù)可以將無限的數(shù)據(jù)集映射到有限的數(shù)據(jù)集中,因此必然存在不同的輸入會映射到同一個輸出結(jié)果,稱為 hash 碰撞
Collision Resistance:指很難通過人為的方式找出到兩個輸入,使得它們的 hash 值一樣。
目前無法通過數(shù)學(xué)的方法證明某一個 hash 函數(shù)是滿足 collision resistance 的特性,只能依靠實踐中的不斷檢驗。
花邊:md5 hash 函數(shù)已經(jīng)被找到人為制造 hash 碰撞的方法。
1.2 Hiding
Hiding:指 hash 函數(shù)的計算過程是單向的、不可逆的。給定一個輸入 X 可以計算出它的 hash 值 Y,但是由 Y 是沒有辦法反推出 X,即 Y 不會泄漏 X 的信息。
前提條件:輸入的空間足夠大且輸入的分布要求比較均勻。否則的話,可以暴力的嘗試輸入值得出結(jié)果。
最佳實踐:實際中一般可以給輸入值之后拼接一個隨機(jī)數(shù)(nonce),使得輸入空間足夠大,足夠均勻
1.3 Puzzle Friendly
Puzzle Friendly:指 hash 值的計算事先是很難預(yù)測的。如果想要使得計算出來的 hash 值落在指定的范圍,只能一個個嘗試輸入,沒有捷徑可走。
使用場景:「BTC 工作量證明」,比特幣要求獲得記賬權(quán)的節(jié)點,計算出來的 Hash 值滿足一定的條件(比如前面 N 位為 0)。根據(jù)這個特性,挖礦的節(jié)點只能一遍又一遍地嘗試 nonce 值,沒有它方。
注:后續(xù)內(nèi)容將介紹「BTC 挖礦的內(nèi)容」
2. 簽名
非對稱加密
對稱加密:通信雙方協(xié)定一個密鑰,發(fā)送方先用密鑰加密,接收方收到信息后,再用密鑰解密。注意:知道密鑰的人,就能解密。
對稱加密的痛:密鑰的分發(fā)是一個最大的痛點,不是很方便,如果密鑰在網(wǎng)絡(luò)上分發(fā),很有可能泄漏。
非對稱加密:引入公私鑰對。發(fā)送方 使用對方的公鑰(可以在網(wǎng)上公布)加密,接收方收到信息后,再用自己的私鑰解密。注意:同上,只要知道密鑰的人,就能解密,但是非對稱加密就不存在密鑰(私鑰)分發(fā)的問題。
BTC 賬戶
BTC 的賬戶創(chuàng)建:只需要在本地創(chuàng)建一對公私鑰對(來源于非對稱加密)
疑問:在自己本地產(chǎn)生的公私鑰對,會不會和別人產(chǎn)生的一樣。這樣就可以利用這個私鑰把區(qū)塊鏈上另一個同名賬戶的錢轉(zhuǎn)走?
答:實際中不可行,如果是 256 位的 hash 值,產(chǎn)生相同公私鑰對的概率是微乎其微的,比地球爆炸的概率還低。前提是,產(chǎn)生公私鑰對,需要一個好的隨機(jī)源。BTC 使用的簽名算法,要求生成公私鑰對的時候有好的隨機(jī)源,同時之后每一次簽名的時候,也需要有好的隨機(jī)源。
BTC 賬戶賬號:公鑰,相當(dāng)于銀行賬號
BTC 賬戶密碼:私鑰,相當(dāng)于銀行密碼