Development

比特幣私鑰,ECC 曲線上的位置

  • March 4, 2019

在 ECDSA 算法中,比特幣私鑰應該是圖上的一個點(或者是嗎?)。但私鑰是一個整數,而不是 x,y 座標。整數本身是 x 值還是 y 值?如果是x,那麼y是什麼?如果是y,那麼x是什麼?

基本的橢圓曲線操作是點相加。重複應用這個加法的操作稱為一個點與一個整數的標量乘法。

私鑰是“標量”,相乘的點是“生成器”點,結果是公鑰。

標量乘法基本上是重複加法。將Generator點乘以5的意思是:計算G+G+G+G+G。

首先計算 G2=G+G,然後 G4=G2+G2,然後 G5=G4+G。

曲線公式

比特幣計算使用的曲線公式如下:

y^2 == x^3 + 7   ( mod p )

在哪裡p = 2^256 - 2^32 - 977

曲線上的點

如果點 (x,y) 與上述方程匹配,則它在曲線上

曲線加法

曲線相加最好以幾何方式視覺化

曲線加法

圖片來自certicom

橢圓曲線密碼學不使用浮點值作為它的座標,所有計算都是以整數模大素數(上面提到的,命名為 p )。但計算 2 點之和的方法保持不變。

加分

將點 P1=(x1,y1) 和 P2=(x2,y2) 相加,得到 Psum= (xsum, ysum)

slope = (y1-y2)/(x1-x2)
xsum = slope^2 - (x1+x2)
ysum = slope*(x1-xsum)-y1

加倍點

如果 P1 和 P2 是同一個點,上面的加法會涉及除以零,所以需要不同的公式來計算 P+P

slope = 3 * x^2 / (2*y)
xdbl = slope^2 - 2*x
ydbl = slope *(x-xdbl)-y

ecdsa鍵

對於 ECDSA,選擇了一個生成點G

私鑰只是一個整數,我們來命名它k。公鑰是生成點添加到自身k的次數。換句話說,乘以k

如果你不明智地選擇了你的私鑰,比如 1,你的公鑰將等於生成點,這個地址:1EHNa6Q4Jz2uvNExL497mE43ikXhwF6kZm

如您所見,它甚至最近也被使用過。

使 ECDSA 成為一個有用的加密系統的原因在於,它很容易從私鑰計算出公鑰,但反之則不然。另一種說法是乘法很容易,但橢圓曲線上沒有(簡單的)除法算法。

範常式式碼

請參閱此要點以獲取 python 中的範例

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