比特幣私鑰,公鑰和地址的關係是什麼?

買賣虛擬貨幣

比特幣私鑰,公鑰和地址的關係是什麼?雜湊函式(Hash Function),也稱為雜湊函式,給定一個輸入x,它會算出相應的輸出H(x)。雜湊函式的主要特徵是:1.輸入x可以是任意長度的字串2.輸出結果即H(x)的長度是固定的3.計算H(x)的過程是高效的(對於長度為n的字串x,計算出H(x)的時間複雜度應為O(n))

橢圓曲線加密演算法

橢圓曲線在密碼學中的使用是在1985年由Neal Koblitz和Victor Miller分別獨立提出的。它的主要優勢是在某些情況下它比其他的演算法(比如RSA)使用更小的金鑰但提供相當的或更高等級的安全性。比特幣使用了基於secp256k1橢圓曲線數學的公鑰密碼學演算法。

它包含私鑰與公鑰,私鑰用於對交易進行簽名,將簽名與原始資料傳送給整個比特幣網路,公鑰則用於整個網路中的節點對交易有效性進行驗證。簽名演算法保證了交易是由擁有對應私鑰的人所發出的。

BASE58編碼Base58是用於Bitcoin中使用的一種獨特的編碼方式,主要用於產生Bitcoin的錢包地址相比Base64.Base58不使用數字"0",字母大寫"O",字母大寫"I",和字母小寫"l",以及"+"和"/"符號1.比特幣所用字母表:

123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

2.Monero所用字母表:

123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

3.Ripple所用字母表:

rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz

私鑰

實際上是長度為256bit的二進位制數,256 bit = 1.15e+77宇宙中所有原子的總數大概是10的80次方。如果我們進行2256+1次隨機生成私鑰,那麼必然會生成一個此前出現過的私鑰;甚至從概率的角度看,進行2130次私鑰生成就會有99%的可能得到已有私鑰,但是這個情況目前極難出現。

公鑰

使用橢圓曲線加密演算法(ECDSA-secp256k1)計算私鑰所對應的非壓縮公鑰,該過程不可逆。公鑰的長度為65bytes:頭部標識:1byte(0x04)X-integer:32bytes(BE)Y-integer:32bytes(BE)

地址

將公鑰經過多次雜湊雜湊及處理生成btc地址。非壓縮公鑰生成地址的過程:1.將完整公鑰(頭部標識 + X-integer + Y-integer)進行一次sha256()運算, 在對結果進行一次ripemd160()運算,結果a的長度為20bytes2.在步驟1得到的結果前加上Network ID Byte:Main Network: 0x00Test Network: 0x6fNamecoin Net: 0x34得到的b長度為21bytes3.對步驟2得到的結果進行連續兩次的sha256()運算,然後只取運算結果的前4bytes作為Checksum4.在步驟2的b末尾新增上步驟3得到的Checksum, 得到c, 長度為25bytes5.對步驟4生成的c進行Base58編碼, 即得到地址步驟圖示:

對於壓縮公鑰生成地址時,在步驟一中只取公鑰的標識頭+X-integer部分即可。

私鑰,公鑰和地址在比特幣轉賬中的作用

在發起比特幣的轉賬時,把私鑰看作賬戶的密碼,賬單填寫完畢後,需要用私鑰對賬單的內容簽名,得到簽名資訊SIG ,然後將SIG附加在賬單上:

SIG = H(detail, PRIVATE_KEY)

已知SIG和賬單內容,是無法反推出私鑰的。那麼,別人在拿到賬單資訊和SIG後,如何驗證該SIG確實是由傳送方地址對應的私鑰簽署的呢?這就是公鑰的作用,賬單上還要附加上公鑰,別人在拿到賬單時,可以驗證SIG是否合法true = VALIDATE(detail, SIG, PUBLIC_KEY)私鑰->公鑰->地址是單向不可逆的過程, 在簽署交易資訊時只會暴露公鑰, 私鑰是安全的:

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;