第十八問比特幣的加密與交易

只做行情預報,不做事後諸葛,以防失聯。

請在今日頭條關注幣圈諸葛亮,在這裡讀懂區塊鏈。

你好,歡迎收看幣圈諸葛亮推出的《區塊鏈通識課50問》。

第十八問比特幣的加密與交易


在第3講開始前,先簡單複習下第2講的內容,我們回顧了密碼學在區塊鏈誕生過程中所扮演的角色。可以說,沒有當代密碼學的發展,沒有之前那麼多密碼朋克們的偉大嘗試,區塊鏈是不會橫空出世的。作為區塊鏈的第一個成果,比特幣正是基於共享賬本和密碼學才誕生的!

今天,我們來學習第3講:比特幣的加密與交易。

每個人的比特幣賬本都有一個密碼,用更專業的名詞來說,這個密碼叫做私鑰,這個私鑰是比特幣錢包為每個賬本單獨生成的。有人會問了,如果持有賬本的人太多,會出現兩個人私鑰一樣的情況嗎?當然不會了,比特幣最多可以生成2的256次方這麼多個私鑰。可能大家對這個數的大小沒有概念,將其轉換成十進制的話,私鑰大約有10的77次方這麼大,而咱們可觀察的宇宙也只含有10的80次方個原子,二者僅相差1000倍。所以哪怕銀河系的每個行星上都住滿了人,每個人都手持一個比特幣賬本,每個賬本的私鑰也不會相同。

這個私鑰是每個人自己才知道的,千萬不能告訴別人。如果讓別人知道了私鑰,無異於將銀行賬戶的密碼告訴了別人。

僅僅有了私鑰還不夠,想讓別人向你的錢包裡轉賬的話,你還需要一個用來進行轉賬的公開地址,專業術語叫做公鑰。公鑰就像是銀行卡的賬戶號碼。不同的是,銀行的賬戶是銀行隨機分配給用戶的,用戶拿到銀行卡之後,可以在ATM機上設置新的密碼。

比特幣錢包賬戶恰恰相反,首先是有了私鑰,然後根據私鑰再生成公鑰,而且生成公鑰的過程,用戶是參與不了的。

公鑰是如何產生的呢?這就涉及到了加密學的知識。

為了更明白的解釋這個問題,我們岔個話題。

十七世紀,一位法國律師,同時也是一位業餘數學家和物理學家。在閱讀一本拉丁文的數學書時,在書的空白處寫了一道命題。並宣稱找到了一種美妙的證明,可惜空白太小,寫不下。此後的三百年裡,無數聰明人都試圖證明這個定理,可惜都沒有成功。可能有人猜到了,這位學者叫做費馬,這個命題就是著名的費馬大定理。費馬的父親是法國南部有名的批貨商,費馬這位“業餘”數學之王,堪稱“江南皮革廠”老闆的好兒子。

時間到了二十世紀末尾,費馬大定理終於被數學家懷爾斯證明了。而懷爾斯所用的數學工具之一就是橢圓曲線。而誕生於二十一世紀之初的比特幣和區塊鏈,恰恰是利用了基於橢圓曲線的加密算法,不得不讓人感嘆歷史事件的巧合。

言歸正傳,橢圓曲線加密算法有這麼一個特性,通過橢圓曲線乘法可以從私鑰計算得到公鑰,但這是一個不可逆的過程。也就是說,就算有人拿到了公鑰,他是無法反向算出對應的私鑰是什麼的。

有了公鑰之後,你就可以很方便的將公鑰公佈出去,這樣別人就可以往你的錢包轉賬了。

用比特幣錢包的密碼和賬戶和我們日常使用的銀行卡的差異,剛才我們講過了。那比特幣的交易和我們平常的交易會有不同嗎?

我們知道,銀行卡的支付系統是基於賬戶模型的,每個人都有一個賬戶,交易就是在賬戶中做數字的加減法。為了保證賬戶餘額準確,就需要保存他過去的所有交易數據。所以,如果要算賬戶餘額,把之前所有的交易數據做加減法就能算出來。

而比特幣不是基於賬戶模型,引入了輸入和輸出的概念。

每筆比特幣交易有資金來源,專業術語稱為交易輸入。也都有資金去向,專業術語稱為交易輸出。所有的資金來源都來自前面一個或者多個交易的輸出,就像接水管一樣,一個接一個,此出彼入,此入彼出,生生不息,錢就在交易之間流動起來了。也就是說,每一個比特幣我們都能通過交易輸出追溯到它的起源。

我們知道,通過銀行進行轉賬,如果銀行不收轉賬手續費,付款方付出的資金會和收款方收到的資金相等。和銀行轉賬類似,一筆比特幣的交易輸入的比特幣金額會略小於交易輸出的比特幣金額,其差值為比特幣交易手續費。比特幣的輸出有一個特別之處,一旦一個輸出被創建出來,那麼這個輸出就只能一次性都花出去。

聽到這裡,就會有人問了,假如A有10個比特幣,但是隻想將1個比特幣轉給B,是不是就沒有辦法?當然不是,在這筆交易中,比特幣錢包會自動創建兩個輸出,一個輸出是給收款人B轉1個比特幣,另一個輸出是給A自己轉9個比特幣,這裡忽略了交易手續費。如果下次再交易的話,A的交易就是一個9個比特幣的輸入了,而B的交易就會是1個比特幣的輸入。以此類推,這個過程就好比記賬一樣,每個賬目都有源頭和去處,保證了賬目的清晰和準確。

說個更直白的例子,比特幣的交易類似於現實世界中直接用支票進行交易。如A寫給B一張100元的支票,其中A是輸入,B是輸出。當B需要給C付50元時,B不是去銀行兌現支票然後付款給C,而是直接寫兩張新支票,一張50元給C,一張50元給自己,再將原來100元的支票作廢,即完成一次非基於賬戶模型的支付。

比特幣的這種賬戶模型被稱為UTXO模型,即只記錄未花費的比特幣輸出。採用這種模型的話,在驗證一筆交易是否有效時,效率要快很多。比如要驗證某人確實有10個沒有被花費掉的比特幣,只需要核查他在賬本上最近一次的交易記錄,而不需要從賬本建立之初的交易開始核查。

比特幣的私鑰和公鑰,以及比特幣的交易機制,保證了比特幣可以在不同人之間進行流通。

為了存儲每筆交易的信息,比特幣在存儲方面又做了哪些工作呢,咱們留到下次課再講。


分享到:


相關文章: