比特幣的交易是一種無需信任中介參與的P2P(Peer-to-peer)交易。
傳統(tǒng)的電子交易,交易雙方必須通過銀行這樣的信任機構(gòu)作為中介,這樣可以保證交易的安全性,因為銀行記錄了交易雙方的賬戶資金,能保證在一筆交易中,要么保證成功,要么交易無效,不存在一方到賬而另一方?jīng)]有付款的情況:
但是在比特幣這種去中心化的P2P網(wǎng)絡(luò)中,并沒有一個類似銀行這樣的信任機構(gòu)存在,要想在兩個節(jié)點之間達(dá)成交易,就必須實現(xiàn)一種在零信任的情況下安全交易的機制。
創(chuàng)建交易有兩種方法:我們假設(shè)小明和小紅希望達(dá)成一筆交易,一種創(chuàng)建交易的方法是小紅聲稱小明給了他1萬塊錢,顯然這是不可信的:
還有一種創(chuàng)建交易的方法是:小明聲稱他給了小紅一萬塊錢,只要能驗證這個聲明確實是小明作出的,并且小明真的有1萬塊錢,那么這筆交易就被認(rèn)為是有效的:
數(shù)字簽名
何驗證這個聲明確實是小明作出的呢?數(shù)字簽名就可以驗證這個聲明是否是小明做的,并且,一旦驗證通過,小明是無法抵賴的。
在比特幣交易中,付款方就是通過數(shù)字簽名來證明自己擁有某一筆比特幣,并且,要把這筆比特幣轉(zhuǎn)移給指定的收款方。
使用簽名是為了驗證某個聲明確實是由某個人做出的。例如,在付款合同中簽名,可以通過驗證筆跡的方式核對身份:
而在計算機中,用密碼學(xué)理論設(shè)計的數(shù)字簽名算法比驗證筆跡更加可信。使用數(shù)字簽名時,每個人都可以自己生成一個秘鑰對,這個秘鑰對包含一個私鑰和一個公鑰:私鑰被稱為Secret Key或者Private Key,私鑰必須嚴(yán)格保密,不能泄漏給其他人;公鑰被稱為Public Key,可以公開給任何人:
當(dāng)私鑰持有人,例如,小明希望對某個消息簽名的時候,他可以用自己的私鑰對消息進行簽名,然后,把消息、簽名和自己的公鑰發(fā)送出去:
其他任何人都可以通過小明的公鑰對這個簽名進行驗證,如果驗證通過,可以肯定,該消息是小明發(fā)出的。
數(shù)字簽名算法在電子商務(wù)、在線支付這些領(lǐng)域有非常重要的作用:
- 首先,簽名不可偽造,因為私鑰只有簽名人自己知道,所以其他人無法偽造簽名。
- 其次,消息不可篡改,如果原始消息被人篡改了,那么對簽名進行驗證將失敗。
- 最后,簽名不可抵賴。如果對簽名進行驗證通過了,那么,該消息肯定是由簽名人自己發(fā)出的,他不能抵賴自己曾經(jīng)發(fā)過這一條消息。
數(shù)字簽名的三個作用:防偽造,防篡改,防抵賴。
數(shù)字簽名算法
常用的數(shù)字簽名算法有:RSA算法,DSA算法和ECDSA算法。比特幣采用的簽名算法是橢圓曲線簽名算法:ECDSA,使用的橢圓曲線是一個已經(jīng)定義好的標(biāo)準(zhǔn)曲線secp256k1:
y2\=x3+7y^2=x^3+7y2\=x3+7
這條曲線的圖像長這樣:
比特幣采用的ECDSA簽名算法需要一個私鑰和公鑰組成的秘鑰對:私鑰本質(zhì)上就是一個1~256的隨機數(shù),公鑰是由私鑰根據(jù)ECDSA算法推算出來的,通過私鑰可以很容易推算出公鑰,所以不必保存公鑰,但是,通過公鑰無法反推私鑰,只能暴力破解。
比特幣的私鑰是一個隨機的非常大的位整數(shù)。它的上限,確切地說,比要稍微小一點:
0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4140
而比特幣的公鑰是根據(jù)私鑰推算出的256位整數(shù)。
如果用銀行卡作比較的話,比特幣的公鑰相當(dāng)于銀行卡卡號,它是兩個256位整數(shù):
這句話我也沒理解
比特幣的私鑰相當(dāng)于銀行卡密碼,它是一個256位整數(shù):
18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A206321725
銀行卡的卡號由銀行指定,銀行卡的密碼可以由用戶隨時修改。而比特幣“卡”和銀行卡的不同點在于:密碼(實際上是私鑰)由用戶先確定下來,然后計算出“卡號”(實際上是公鑰),即卡號是由密碼通過ECDSA算法推導(dǎo)出來的,不能更換密碼,因為更換密碼實際上相當(dāng)于創(chuàng)建了一張新卡片。
- 由于比特幣賬本是全網(wǎng)公開的,所以,任何人都可以根據(jù)公鑰查詢余額,但是,不知道持卡人是誰。這就是比特幣的匿名特性。
- 如果丟失了私鑰,就永遠(yuǎn)無法花費對應(yīng)公鑰的比特幣!
- 丟失了私鑰和忘記銀行卡密碼不一樣,忘記銀行卡密碼可以拿身份證到銀行重新設(shè)置一個密碼,因為密碼是存儲在銀行的計算機中的,而比特幣的P2P網(wǎng)絡(luò)不存在中央節(jié)點,私鑰只有持有人自己知道,因此,丟失了私鑰,對應(yīng)的比特幣就永遠(yuǎn)無法花費。如果私鑰被盜,黑客就可以花費對應(yīng)公鑰的比特幣,并且這是無法追回的。
- 比特幣私鑰的安全性在于如何生成一個安全的256位的隨機數(shù)。不要試圖自己想一個隨機數(shù),而是應(yīng)當(dāng)使用編程語言提供的安全隨機數(shù)算法,但絕對不能使用偽隨機數(shù)。
- 絕不能自己想一個私鑰或者使用偽隨機數(shù)創(chuàng)建私鑰!
- 那有沒有可能猜到別人的私鑰呢?這是不可能的。是一個非常大的數(shù),它已經(jīng)遠(yuǎn)遠(yuǎn)超過了整個銀河系的原子總數(shù)。絕大多數(shù)人對數(shù)字大小的直覺是線性增長的,所以256這個數(shù)看起來不大,但是指數(shù)增長的是一個非常巨大的天文數(shù)字。
比特幣錢包
比特幣錢包實際上就是幫助用戶管理私鑰的軟件。因為比特幣的錢包是給普通用戶使用的,它有幾種分類:
本地錢包:是把私鑰保存在本地計算機硬盤上的錢包軟件,如Electrum;
手機錢包:和本地錢包類似,但可以直接在手機上運行,如Bitpay;
在線錢包:是把私鑰委托給第三方在線服務(wù)商保存;
紙錢包:是指把私鑰打印出來保存在紙上;
腦錢包:是指把私鑰記在自己腦袋里。
對大多數(shù)普通用戶來說,想要記住私鑰非常困難,所以強烈不建議使用腦錢包。
和銀行賬戶不同,比特幣網(wǎng)絡(luò)沒有賬戶的概念,任何人都可以從區(qū)塊鏈查詢到任意公鑰對應(yīng)的比特幣余額,但是,并不知道這些公鑰是由誰持有的,也就無法根據(jù)用戶查詢比特幣余額。
作為用戶,可以生成任意數(shù)量的私鑰-公鑰對,公鑰是接收別人轉(zhuǎn)賬的地址,而私鑰是花費比特幣的唯一手段,錢包程序可以幫助用戶管理私鑰-公鑰對。
交易
我們再來看記錄在區(qū)塊鏈上的交易。每個區(qū)塊都記錄了至少一筆交易,一筆交易就是把一定金額的比特幣從一個輸入轉(zhuǎn)移到一個輸出:
例如,小明把兩個比特幣轉(zhuǎn)移給小紅,這筆交易的輸入是小明,輸出就是小紅。實際記錄的是雙方的公鑰地址。
如果小明有50個比特幣,他要轉(zhuǎn)給小紅兩個比特幣,那么剩下的48個比特幣應(yīng)該記錄在哪?比特幣協(xié)議規(guī)定一個輸出必須一次性花完,所以,小明給小紅的兩個比特幣的交易必須表示成:
小明給小紅2個比特幣,同時小明又給自己48個比特幣,這48個比特幣就是找零。所以,一個交易中,一個輸入可以對應(yīng)多個輸出。
當(dāng)小紅有兩筆收入時,一筆2.0,一筆1.5,她想給小白轉(zhuǎn)3.5比特幣時,就不能單用一筆輸出,她必須把兩筆錢合起來再花掉,這種情況就是一個交易對應(yīng)多個輸入和1個輸出:
如果存在找零,這筆交易就既包含多個輸入也包含多個輸出:
在實際的交易中,輸入比輸出要稍微大一點點,這個差額就是隱含的交易費用,交易費用會算入當(dāng)前區(qū)塊的礦工收入中作為礦工獎勵的一部分:
計算出的交易費用:
交易費用 = 輸入 - 輸出 = (2.0 + 1.5) - (2.99 + 0.49) = 3.5 - 3.48 = 0.02
比特幣實際的交易記錄是由一系列交易構(gòu)成,每一個交易都包含一個或多個輸入,以及一個或多個輸出。未花費的輸出被稱為UTXO(Unspent Transaction Ouptut)。
當(dāng)我們要簡單驗證某個交易的時候,例如,對于交易
f36abd
,它記錄的輸入是3f96ab
,索引號是1
(索引號從0
開始,0
表示第一個輸出,1
表示第二個輸出,以此類推),我們就根據(jù)3f96ab
找到前面已發(fā)生的交易,再根據(jù)索引號找到對應(yīng)的輸出是0.5個比特幣,所以,這筆交易的輸入總計是0.5個比特幣,輸出分別是0.4個比特幣和0.09個比特幣,隱含的交易費用是0.01個比特幣:
文章來源:http://www.zghlxwxcb.cn/news/detail-607898.html
小結(jié)
比特幣使用數(shù)字簽名保證零信任的可靠P2P交易:文章來源地址http://www.zghlxwxcb.cn/news/detail-607898.html
- 私鑰是花費比特幣的唯一手段;
- 錢包軟件是用來幫助用戶管理私鑰;
- 所有交易被記錄在區(qū)塊鏈中,可以通過公鑰查詢所有交易信息。
到了這里,關(guān)于區(qū)塊鏈系統(tǒng):點對點交易原理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!