比特幣又稱加密貨幣,但其實加密貨幣並沒有加密:區塊鏈中的所有信息都是公開的,包括交易的內容、交易的金額以及交易賬戶的地址。之所以稱之為加密貨幣,主要是因為交易的雙方在不與真實世界發生關聯的情況下,雙方的身份是無法獲知的。
比特幣中主要用到了密碼學中的“哈希”和“簽名”。
密碼學中用的哈希被稱作Cryptographic Hash Function
,它有兩個重要的性質:
- Collision resistance:抗碰撞性。哈希碰撞是指給定\(x \neq y\),但經過哈希運算后,\(H(x) = H(y)\),這種情況被稱為“哈希碰撞”。哈希碰撞是不可避免的,輸出空間是有限的,但輸入空間是無限的。假如一個256位的哈希值,那么它的輸出空間為\(2^{256}\),即它的輸出有\(2^{256}\)種可能,但它的輸入空間是無限大的。按照“鴿籠原理”(又稱抽屜原理),必然會出現不同輸入映射到同一輸出的情況。Collision resistance並不是說不會出現哈希碰撞,而是說沒有高效的方法來人為地制造哈希碰撞,即給定一個\(x\),沒有高效的方法找到一個\(y\),使\(H(x) = H(y)\)。這一性質可以防止消息被篡改。
- Hiding:隱匿。即哈希函數的計算過程是單向、不可逆的。給定一個\(x\),可以計算出\(H(x)\),但無法從\(H(x)\)逆推出\(x\)。其成立的條件是輸入空間必須足夠大且均勻分布的。與
Collision resistance
性質結合,可以實現digital commitment
(數字承諾)。
鴿籠原理:如果有5只鴿子籠,養鴿人養了6只鴿子,那么當鴿子飛回籠中后,至少有一個籠子中有2只鴿子。
除了上述的兩個性質之外,比特幣中的哈希函數還要求:
- Puzzle friendly:即哈希值的計算是不可預知。Difficult to solve, but easy to verify.
BTC中用的哈希函數:SHA-256
BTC中賬戶的創建與現實中創建銀行賬戶不同。在BTC中,任何人都可以隨時隨地地創建賬戶,用戶只需在本地創建一個公私鑰對,即一個公私鑰對即為一個賬戶。公私鑰對是非對稱加密算法中的概念。公鑰加密,私鑰解密是常見的公私鑰加密用法。私鑰加密,公鑰解密就是“簽名”的過程。
在BTC系統中,用戶的公鑰即為其地址,發布交易時,用戶需要用其私鑰對交易進行簽名,其他用戶可以用其公鑰對該交易進行驗證。生成公私鑰時需要有個好的隨機源,否則容易造成私鑰泄露。
聲明:本作品采用署名-非商業性使用-相同方式共享 4.0 國際 (CC BY-NC-SA 4.0)進行許可,使用時請注明出處。