027.
比特幣地址、公鑰、私鑰都是什么?
從2009年至今,全球所有的比特幣交易記錄對所有人都是可見的。交易記錄中包括交易流水單號、發幣人的發幣地址、收幣人地址、發幣人的找零地址。也就是說,全球所有用戶的地址都可以被任何人知道。由此可知,如果中本聰在設立比特幣機制時,僅使用“告訴錢包地址是多少”的方式就能完成交易,那么整個交易機制就是危險的,任何人都可以隨便將別人的地址假裝成自己的地址,跟別人進行交易。于是在整個機制中,也就有了私鑰和公鑰的概念。
私鑰主要用來證明這筆交易的發起人確實是比特幣的所有者,它是一串很長的隨機數,比如,4KeZdDEu11z3gPrtuX3phjwGnNP4RFd7yyrCVC1j2W LBB9ZXMCJ,就是由錢包替用戶隨機生成的。一定不能將私鑰隨意泄露給別人,否則別人就可以輕松地將你的比特幣轉走,再也拿不回來。所以,使用錢包交易的前提是相信錢包不會盜取你的私鑰。
公鑰是由私鑰通過算法生成的,通過私鑰可以計算出唯一一個公鑰,但公鑰并不能逆向推導出私鑰;地址是由公鑰通過算法生成,通過公鑰可以計算出唯一一個地址,但地址并不能逆向推導出公鑰。中本聰設計了如下機制:錢包先將私鑰通過加密算法A加密,再將加密后的字符串(也叫作簽名)、公鑰一起發送給礦工;礦工收到信息后,將簽名、公鑰帶入一個驗證函數F中,如果得出的結果為“true”,礦工就會認為這個交易發起人確實是持幣者發起的。
比特幣地址、公鑰、私鑰有什么用呢?
在交易流程中,錢包會用張三的私鑰通過加密算法生成一段加密過的私鑰,然后與公鑰一起寫到交易信息里,再發給全球礦工。此時,礦工收到了這筆交易信息,信息里包括:交易流水單號、發幣人地址、收幣人地址、發幣人提供的加密過的私鑰、發幣人的公鑰。礦工將加密過的私鑰、公鑰帶入上面提到的公式中,等待程序驗證。如果程序反饋給礦工“true”,即可表明這筆交易確實是持幣者發起的;如果程序反饋給礦工“false”,說明這筆交易存在問題,不能被驗證通過。如此,張三就不用將自己的私鑰發給礦工了,這樣既能讓礦工簡單地驗證這筆交易是否由持幣者發起,又能保證自己的私鑰不外泄。