區塊鏈技術筆記:比特幣等電子貨幣生成公鑰

以一個隨機生成的私鑰k為起點,我們將其與曲線上已定義的 生成點G相乘以獲得曲線上的另一點,也就是相應的公鑰K。生成點是secp256k1標準的一部分,比特幣密鑰的生成點都是相同的:

{K = k * G}

其中k是私鑰,G是生成點,在該曲線上所得的點K是公鑰。因為所有比特幣用戶的生成點是相同的,一個私鑰k乘以G將得到相同的公鑰K。k和K之間的關係是固定的,但只能單向運算,即從k得到K。這就是可以把比特幣地址(K的衍生)與任何人共享而不會洩露私鑰(k)的原因。

因為其中的數學運算是單向的,所以私鑰可以轉換為公鑰,但公鑰不能轉換回私鑰。

為實現橢圓曲線乘法,我們以之前產生的私鑰k和與生成點G相乘得到公鑰K:

K = 1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD * G

公鑰K 被定義為一個點 K = (x, y):

K = (x, y)
其中,
x = F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A
y = 07CF33DA18BD734C600B96A72BBC4749D5141C90EC8AC328AE52DDFE2E505BDB

為了展示整數點的乘法,我們將使用較為簡單的實數範圍的橢圓曲線。請記住,其中的數學原理是相同的。我們的目標是找到生成點G的倍數kG。也就是將G相加k次。在橢圓曲線中,點的相加等同於從該點畫切線找到與曲線相交的另一點,然後映射到x軸。

區塊鏈技術筆記:比特幣等電子貨幣生成公鑰

上圖顯示了在曲線上得到 G、2G、4G 的幾何操作。

大多數比特幣程序使用OpenSSL加密庫進行橢圓曲線計算。例如,調用EC_POINT_mul() 函數,可計算得到公鑰。


分享到:


相關文章: