Development
比特幣私鑰,ECC 曲線上的位置
在 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 中的範例