? ? ? ?前面兩篇文章我們簡單說了下什么是區(qū)塊鏈,區(qū)塊鏈和比特幣的關(guān)系以及比特幣的交易機(jī)構(gòu)垮媒,今天想簡單聊下比特幣中是如何驗證交易的埠通,也就是說怎樣保證整個交易是真實可信的骑祟。
? ? ? ?如上一篇文中所描述的內(nèi)容,交易已經(jīng)按照約定好的輸入态贤,輸入等字段打包成一個數(shù)據(jù)結(jié)構(gòu)舱呻。以交易003小牛轉(zhuǎn)給小王1個比特幣為例,我們怎么樣確定這筆交易的兩個主體是小牛和小王而不是其他人呢悠汽。目前銀行體系要求箱吕,所有的銀行卡開戶時都需要本人攜帶身份證進(jìn)行實名開戶。那么在區(qū)塊鏈的世界中柿冲,是通過非對稱密碼學(xué)茬高,數(shù)字摘要,數(shù)字簽名來完成的假抄。
? ? ? ?下面我們先來依次介紹下這幾個密碼學(xué)概念
非對稱加密算法
? ? ? ?在比特幣的世界里怎栽,每個人都一個公鑰-私鑰對,這也是非對稱加密算法的特點宿饱。大家可以將其理解成兩把鑰匙熏瞄,只不過比特幣世界中的每一個人都有一把你的公鑰鑰匙,而私鑰鑰匙只有你一個人擁有谬以。通過公鑰進(jìn)行加密的信息强饮,只有與其配對得私鑰可以解開,同理为黎,通過私鑰進(jìn)行簽名的信息邮丰,也只有對應(yīng)的公鑰可以解開行您。
? ? ? ?而真實情況下,公鑰和私鑰其實就是一串無規(guī)則的數(shù)字字母組合剪廉。當(dāng)我們注冊比特幣錢包后娃循,會擁有一個比特幣錢包地址,這個地址其實就是對我們的公鑰重新編碼后獲得的斗蒋,很多文章中還將公鑰和錢包地址混用淮野,如果想進(jìn)行比特幣交易首先就必須擁有自己的比特幣錢包地址。
數(shù)字摘要
? ? ? ?數(shù)字摘要是指一段信息吹泡,一個文件等通過哈希函數(shù),摘要成一段固定長度的字符串经瓷。數(shù)字摘要的特點是爆哑,文件或者信息中有任何小的改動,都會使摘要結(jié)果完全不同舆吮。同一個信息或文件揭朝,摘要多少次都是一樣的結(jié)果。
數(shù)字簽名
? ? ? ?數(shù)字簽名是數(shù)字摘要和非對稱加密算法的一種應(yīng)用色冀。就是只有信息的發(fā)送者才能產(chǎn)生的別人無法偽造的一段數(shù)字串潭袱,這段數(shù)字串同時也是對信息的發(fā)送者發(fā)送信息真實性的一個有效證明。用發(fā)送者私鑰進(jìn)行的簽名锋恬,只有發(fā)送者的公鑰才可以解開屯换。
? ? ? ?那么了解了這幾個密碼學(xué)概念后,我們來看下在區(qū)塊鏈中是如何確定轉(zhuǎn)賬這和收款人身份的与学。
如何確定是小牛發(fā)起的交易
1彤悔、小牛將該筆交易進(jìn)行哈希運(yùn)算,得到該筆交易的數(shù)字摘要索守,在用自己的私鑰對數(shù)字摘要進(jìn)行加密晕窑。并將自己的公鑰附在消息的末尾。
2卵佛、小牛將交易杨赤,數(shù)字簽名和自己的公鑰一同廣播到網(wǎng)絡(luò)中,收到該消息的節(jié)點用小牛的公鑰解密出消息的摘要A截汪,在通過講消息進(jìn)行哈希運(yùn)算得到摘要B疾牲,對比A和B若相同遍可以得知該交易確實是小牛發(fā)起的。整個過程如下圖所示
如何確定小牛有權(quán)使用這些輸入
? ? ? ?在比特幣交易中每一筆輸入的交易都有唯一的哈希值和索引能夠唯一的指向該筆交易挫鸽,輸入交易的輸出內(nèi)容说敏,我們可以將其理解為是一個腳本,類似:
OP_DUP OP_HASH160abcd1234...9876OP_EQUALVERIFY OP_CHECKSIG
? ? ? ?其中abcd1234...9876就是小牛的公鑰丢郊,整個腳本的意思是誰能讓這個腳本運(yùn)行通過盔沫,誰就能花費(fèi)這筆交易医咨。
? ? ? ?那么同樣的,當(dāng)小王準(zhǔn)備花費(fèi)這筆交易時架诞,也需要進(jìn)行相同的驗證拟淮。驗證通過后,交易才被認(rèn)為是有效的交易谴忧。
? ? ? ?被確認(rèn)的交易被放入本地的交易池中很泊,等待被打包確認(rèn)。
? ? ? ?通過以上的敘述沾谓,我們大概理解了在比特幣的世界中交易是如何實現(xiàn)的委造,那么我們常說,交易是存儲在區(qū)塊上的均驶,區(qū)塊又練成了鏈昏兆,那么交易在區(qū)塊上是如何存儲的呢。下一篇文章我們就聊一下區(qū)塊鏈的數(shù)據(jù)結(jié)構(gòu)和挖礦到底是怎么一回事