公鑰私鑰是現代密碼學分支非對稱性加密裏面的名詞,通常都是用公鑰加密信息,用私鑰解密信息,為什麽要這樣? 因為妳看電視劇的時候,發電報那種都是對稱性加密,這種加密方式缺點是顯而易見的,如果被人知道了密鑰和加密方法,於是按照加密方法反著來就能解密。 壹直到非對稱性加密這種情況才有所改觀,公鑰就是可以對全世界公開的密鑰,比如妳和google通訊,用google給的1024位的公鑰加密,送到google那裏只有他有對應的私鑰,只有他能解密,於是就保證了通訊安全
2.比特幣主要用了ECDSA,也就是橢圓曲線簽名算法,這個算法有兩個特性,註意這兩點對下面至關重要
a.只要知道私鑰,可以算出相應的公鑰;
b.妳用私鑰簽名過的東西,可以用公鑰算壹下是不是妳簽的;
3.知識準備完了,下面開始講比特幣的交易,比特幣其實沒有錢包,只有交易賬單,整個比特幣就是壹大堆交易賬單
比如:
賬單1 從A轉到B 轉了XXX比特幣
賬單2 從B轉到C和D 轉了XXX比特幣
賬單3 從C轉到E 轉了XXX比特幣
。。。。任何人只要下載了客戶端都能接收到從比特幣成立那壹天起的所有賬單,所以,只要把所有賬單都下載全了自然知道每個賬戶上應該剩多少錢(這裏仔細思考下)
4.比特幣的賬戶,就是剛才講的壹段公鑰
5.下面我開始貼壹個比特幣的賬單,這裏是核心部分了!!! 每個賬單都是壹段數據,妳簽完了以後會發送到全網,把數據結構逆向成易懂的中文解釋如下:
FROM(誰發送的,包括兩部分)
Previous tx: 妳要花的這筆錢的那個賬單的id, 也就是說,妳花的任何壹筆錢都應該有人轉給妳過,需要出示那個賬單的id
scriptSig: 妳對這筆交易的簽名,就是把單子用妳的私鑰做hash,只有妳能做這個hash
TO(誰接受,包括兩部分)
Value: 要發多少
scriptPubKey: 對方的公鑰,比特幣賬戶就是壹段公鑰
6.等妳簽完單子以後,開始往全網發送,怎麽發呢? 比特幣通訊沒那麽復雜,妳可以類比成IRC頻道,但和普通的“IRC”不同的是,任何壹個客戶端都是壹臺“IRC”服務器,當妳啟動客戶端的時候,會接收到周圍的有公網IP的客戶端地址,就是“服務器”列表,這個列表也不斷的刷新,都是其他的比特幣用戶,於是妳在這個“IRC”喊壹句話的時候,周圍的人會聽到,進而擴散的全世界。
7.把簽單發送到全世界以後,所有收到這個單子的客戶端會效驗妳這個單子對不對,比如會效驗妳的簽名,是不是妳發的,會效驗妳是否有那麽多錢(根據歷史交易可以推算出妳有多少錢可以花)
如果這個交易大家算過沒問題了,基本上就算轉賬成功了。
8.實際上現在對方已經接受了比特幣,但是要想花的話,他得有那個地址(公鑰)對應的私鑰。於是他就能填下壹個單子的 FROM頭部,Previous tx就是剛才這筆交易的序號,scriptSig填用他私鑰簽名過的hash
如此往復。。。