Private-Key

使用 ecc 從私鑰生成公鑰,並明確描述 k=k*g

  • April 7, 2020

根據這個答案:https ://bitcoin.stackexchange.com/a/63996/100526 當他想從 中生成一個public keyprivate key,他使用了K=k*G. 但我無法理解它的結果。如果我們假設我們private key是(根據答案):

0F479245FB19A38A1954C5C7C0EBAB2F9BDFD96A17563EF28A6A4B1A2A764EF4

根據Secp256k1 G點是:

- Compressed form (prefix 02)
02 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 

- Uncompressed form (prefix 04)
04 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798
483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8 

所以為了計算我使用這個網站的公鑰:https ://www.boxentriq.com/code-break/big-number-calculator

我用過compressed formprivate key0279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798 * 0F479245FB19A38A1954C5C7C0EBAB2F9BDFD96A17563EF28A6A4B1A2A764EF4

結果是:

25d355ebb23e6ce0fd5463bf40e6da2ccc4e2e8ce654db6a8a8e5a275f0d2266005569112cfda60d14f9b6d0c0218cc072047a3b2fcf97aee95a437b4bb6cce0

但在那個答案中,結果是:

02E8445082A72F29B75CA48748A914DF60622A609CACFCE8ED0E35804560741D29

怎麼了?

It was my fault.

G是橢圓曲線上的一個點。這意味著G有一個數字 forX和另一個 for Y。所以未壓縮的 G inSecp256k1G(x,y)

- Uncompressed form (prefix 04)
04 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798
483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8 

X = 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798

Y = 483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8 

為了04證明這是一個未壓縮的G.

這一點是Base pointGenerator point它用於k=K*G.

*不像是*在數學裡似的2*2 = 4。它是a sign在曲線上顯示運算符之一。

我們在一條曲線上有 3 個運算符:

-Addition
-Negation
-Doubling

加法是加兩點。根據我們有一個點like P1(x1,x2),還有一個點like Q1(x2,y2),所以不能用2+2 = 4,需要另外計算,P+Q. 結果P+Q是曲線上的另一個點,我們可以稱之為R

Doubling是曲線上一個點的兩倍,結果也是曲線上的一個點。所以P+P=R.

當我們說k*G,我們要multiple我們private keya point on the curve

我們需要做這些: 將我們的轉換private keybinary base.

對於所有位,我們開始檢查:對於每個位,我們做一些doublePointaddPoints。這是一個預定義的角色,我們必須遵循它。

但是我們如何計算addition兩個點的 a 呢?

λ = ( yq – yp ) / ( xq – xp)
xR = λ2 – xp – xq
yR = λ(xp – xR) – yP

有了這個。首先我們需要計算λ,它是我們的slope

然後我們可以計算新點的 x 和 y。結果是我們的

p+q = R

那麼doubling呢?:

λ = (3x2) +a / (2y) 
xR = λ2 - 2x 
yR = λ(x - xR) – y

有了這些,現在我們可以計算K=k * G.

還有許多其他的計算技巧Public keyPrivate key

這是一個很好的實現PHPhttps ://github.com/BitcoinPHP/BitcoinECDSA.php/blob/master/src/BitcoinPHP/BitcoinECDSA/BitcoinECDSA.php#L350

當使用曲線談論數學時,當我們使用加法和乘法等術語時,我們並不是指正常的加法和乘法。我們指的是曲線上具有類似於加法和乘法的性質的操作。為了得到正確的結果,你必須使用曲線上的實際操作,而不是正常的加法和乘法。

引用自:https://bitcoin.stackexchange.com/questions/95081