簡介
在上文中,我們實現了基本的交易。我們知道了,在比特幣中沒有賬戶,用戶電話等用戶相關信息,區(qū)塊鏈并不保存?zhèn)€人信息。但是,在比特幣中仍然有一些信息證明誰擁有這些Coin,這個信息就是地址。在上一文中,我們的地址使用的是自己定義的字符串,比如zhangsan、lisi、wangwu、zhaoliu等。本文將實現真正的地址。
比特幣地址
這是一個比特幣地址:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa。這是第一個比特幣地址,據稱該地址屬于Satoshi Nakamoto。比特幣地址是公開的。如果你想要轉幣給某個人,你必須直到他的比特幣地址。每一個比特幣地址都是獨一無二的,該地址并沒有指定誰是該地址的擁有者。實際上,這些地址只是一個(可讀性比較好的)公鑰。在比特幣中,你擁有一對公私鑰。比特幣根據加密算法生成這些密鑰,并且保證只有擁有了這對key,才能使用該地址的幣。
公鑰密碼學
公鑰加密算法使用一對密鑰:公鑰和私鑰。公鑰可以展示給其他人,私鑰不可展示給其他人。在比特幣中,私鑰就代表著你本人。
比特幣錢包就是這樣的一個密鑰對。當你使用錢包或客戶端創(chuàng)建地址時,就會生成一個這樣的密鑰對。擁有私鑰的人,就擁有該地址的幣。公鑰和私鑰僅僅是一些隨機的字節(jié)序列,因此比特幣使用一個算法將公鑰轉換為一個可讀的字符串。
現在我們直到如何認定address所屬,但是比特幣又是如何校驗交易輸出(儲存coin的地方)的所屬呢?
數字簽名
在數學和密碼學中,數字簽名保證:
1.數據由發(fā)送人發(fā)給接受人的過程中,數據不可更改。
2.數據由確定的發(fā)送人發(fā)送。
3.發(fā)送人不能否認發(fā)送過數據。
對數據進行簽名,可以得到簽名數據(signature),我們可以對該簽名數據進行驗證。當我們使用私鑰時,我們需要進行數字簽名,當我們進行簽名驗證時,我們使用公鑰。為了對數據進行簽名,我們需要一下參數:
1.需要簽名的數據
2.私鑰
對數據進行簽名后生成一個簽名數據(signature),該數據存儲在input中,想要驗證該簽名,需要以下參數:
1.數據
2.簽名
3.公鑰