簡(jiǎn)介
在上文中俄精,我們實(shí)現(xiàn)了基本的交易询筏。我們知道了,在比特幣中沒有賬戶竖慧,用戶電話等用戶相關(guān)信息嫌套,區(qū)塊鏈并不保存?zhèn)€人信息。但是圾旨,在比特幣中仍然有一些信息證明誰擁有這些Coin灌危,這個(gè)信息就是地址。在上一文中碳胳,我們的地址使用的是自己定義的字符串,比如zhangsan沫勿、lisi挨约、wangwu、zhaoliu等产雹。本文將實(shí)現(xiàn)真正的地址诫惭。
比特幣地址
這是一個(gè)比特幣地址:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa。這是第一個(gè)比特幣地址蔓挖,據(jù)稱該地址屬于Satoshi Nakamoto夕土。比特幣地址是公開的。如果你想要轉(zhuǎn)幣給某個(gè)人,你必須直到他的比特幣地址怨绣。每一個(gè)比特幣地址都是獨(dú)一無二的角溃,該地址并沒有指定誰是該地址的擁有者。實(shí)際上篮撑,這些地址只是一個(gè)(可讀性比較好的)公鑰减细。在比特幣中,你擁有一對(duì)公私鑰赢笨。比特幣根據(jù)加密算法生成這些密鑰未蝌,并且保證只有擁有了這對(duì)key,才能使用該地址的幣茧妒。
公鑰密碼學(xué)
公鑰加密算法使用一對(duì)密鑰:公鑰和私鑰萧吠。公鑰可以展示給其他人,私鑰不可展示給其他人桐筏。在比特幣中纸型,私鑰就代表著你本人。
比特幣錢包就是這樣的一個(gè)密鑰對(duì)九昧。當(dāng)你使用錢包或客戶端創(chuàng)建地址時(shí)绊袋,就會(huì)生成一個(gè)這樣的密鑰對(duì)。擁有私鑰的人铸鹰,就擁有該地址的幣癌别。公鑰和私鑰僅僅是一些隨機(jī)的字節(jié)序列,因此比特幣使用一個(gè)算法將公鑰轉(zhuǎn)換為一個(gè)可讀的字符串蹋笼。
現(xiàn)在我們直到如何認(rèn)定address所屬展姐,但是比特幣又是如何校驗(yàn)交易輸出(儲(chǔ)存coin的地方)的所屬呢?
數(shù)字簽名
在數(shù)學(xué)和密碼學(xué)中剖毯,數(shù)字簽名保證:
1.數(shù)據(jù)由發(fā)送人發(fā)給接受人的過程中圾笨,數(shù)據(jù)不可更改。
2.數(shù)據(jù)由確定的發(fā)送人發(fā)送逊谋。
3.發(fā)送人不能否認(rèn)發(fā)送過數(shù)據(jù)擂达。
對(duì)數(shù)據(jù)進(jìn)行簽名,可以得到簽名數(shù)據(jù)(signature)胶滋,我們可以對(duì)該簽名數(shù)據(jù)進(jìn)行驗(yàn)證板鬓。當(dāng)我們使用私鑰時(shí),我們需要進(jìn)行數(shù)字簽名究恤,當(dāng)我們進(jìn)行簽名驗(yàn)證時(shí)俭令,我們使用公鑰。為了對(duì)數(shù)據(jù)進(jìn)行簽名部宿,我們需要一下參數(shù):
1.需要簽名的數(shù)據(jù)
2.私鑰
對(duì)數(shù)據(jù)進(jìn)行簽名后生成一個(gè)簽名數(shù)據(jù)(signature)抄腔,該數(shù)據(jù)存儲(chǔ)在input中,想要驗(yàn)證該簽名,需要以下參數(shù):
1.數(shù)據(jù)
2.簽名
3.公鑰