這個公式是如何工作的(aG+bG)=(a+b)G(一個G+bG)=(一個+b)G(aG + bG) = (a + b) G在 ECDSA 中?
請解釋這個公式如何 $ (aG + bG) = (a + b) G $ 在 ECDSA 工作?
$ a $ 和 $ b $ 是不同的私鑰
認為
$ a = 3 $
$ b = 4 $
那麼公鑰是 $ Q = aG $ 和 $ W = bG $ (secp256k1)
Q = F9308A019258C31049344F85F89D5229B531C845836F99B08601F113BCE036F9 W = E493DBF1C10D80F3581E4904930B1404CC6C13900EE0758474FA94ABE8C4CD13
現在我們採用公式 $ (a + b)G $
$ (3 + 4)G $
$ 7g $
$ c = 7 $
公鑰 $ P = cG $
P = 5CBDF0646E5DB4EAA398F365F2EA7A0E3D419B7E0330E39CE92BDDEDCAC4F9BC
現在取公式 $ (aG + bG) $
$ (Q + W) $
以及公鑰數量 $ (Q + W) $ 將會
DDC465F353664403A152988A8BA8662FC6EEFEEEE3076EF93B2A2732D56EC2CB
為什麼會這樣:
DDC465F353664403A152988A8BA8662FC6EEFEEEE3076EF93B2A2732D56EC2CB
為什麼這個總和的答案不是這個值:
5CBDF0646E5DB4EAA398F365F2EA7A0E3D419B7E0330E39CE92BDDEDCAC4F9BC
..這個公式如何 $ (aG+bG) = (a+b)G $ 在 ECDSA 工作?
非常好。它由以下定義得出 $ kG $ 作為 $ \overbrace{G+\cdots+G}^{k\text{ times}} $ ,點加法的結合性和交換性。請注意,運算符 $ + $ 在 $ (aG+bG) $ 和 $ G+\cdots+G $ 是橢圓曲線點加法,而運算元 $ + $ 在 $ (a+b) $ 添加在 $ \Bbb Z $ (有符號整數)或 $ \Bbb Z_n $ (整數模 $ n $ , 在哪裡 $ n $ 是順序 $ G $ ).
有信心 $ 3G+4G=7G $ 成立,如果 $ Q=3G $ , $ W=4G $ , $ P=7G $ 然後 $ Q+W=P $ .
問題是在什麼論據上最後的點加法 $ + $ 被計算。
在問題中,後面顯示
Q =
的是X座標 $ Q_x $ 點的 $ Q $ . 缺少 Y 座標。因此,以下內容Q =
不在兩點之間解決: $ Q $ 座標 $ (Q_x,Q_y) $ 和 $ -Q $ 座標 $ (Q_x,Q’_y) $ 和 $ (Q_y)^2=(Q_x)^3+7\bmod p $ (根據secp256k1的方程)和 $ Q’_y=p-Q_y $ . 同樣的問題 $ W $ 和 $ P $ .為什麼這個總和的答案不是這個值(..)
這個值最終成為 X 座標 $ Q-W $ (或等效地 $ -Q+W $ ) 代替 $ Q+W $ 正如所想,由於上述原因。這也是基點的 X 座標 $ G $ , 因為 $ Q-W=3G-4G=(3-4)G=(-1)G=-G $ .
這個公式如何在 ECDSA 中工作 (aG+bG)=(a+b)G?
這是由於橢圓曲線的標量乘法的定義。
$$ [a]g = \overbrace{g+\cdots+g}^{{a\hbox{ - }times}} $$ $$ [b]g = \overbrace{g+\cdots+g}^{{b\hbox{ - }times}} $$
然後$$ [a+b]g = \overbrace{g+\cdots+g}^{{a+b\hbox{ - }times}} = \overbrace{g+\cdots+g}^{{a\hbox{ - }times}} + \overbrace{g+\cdots+g}^{{b\hbox{ - }times}} = [a]g+[b]g $$
為什麼這個總和的答案不是這個值:
橢圓曲線上的加法不同於整數,它們具有幾何意義。
然而,我們可以在算術上將仿射座標中的加法規則定義為:
讓 $ P=(x_1,x_2) $ 和 $ Q=(x_2,y_2) $ 是橢圓曲線上的兩點。
- $ P+O=O+P=P $
- 如果 $ x_1 = x_2 $ 和 $ y_1 = - y_2 $ 和 $ Q =(x_2,y_2)=(x_1,−y_1)=−P $ 然後 $ P + (-P) = O $
- 如果 $ Q \neq -P $ 然後加法 $ P+Q = (x_3,y_3) $ 並且可以通過以下方式計算座標;
$$ \begin{align} x_3 = & \lambda^2 -x_1 - x_2 \mod p\ y_3 = & \lambda(x_1-x_3) -y_1 \mod p \end{align} $$
$$ \lambda = \begin{cases} \frac{y_2-y_1}{x_2-x_1}, & \text{if $P \neq Q$} \[2ex] \frac{3 x_1^2+a}{2y_1}, & \text{if $P = Q$} \[2ex] \end{cases} $$
所以, $ [3]P $ 可以計算為 $ ([2]P)+P $ ,一次加倍,一次加法。這實際上是對double 和 add 算法的提示。下面是一個簡單的 Python 函式來顯示這一點,這是重複平方方法的加法版本。
def double_and_add(n, x): result = 0 double = x for bit in bits(n): if bit == 1: result += double double *= 2 return result
請注意,此加法和加倍規則是通用的。根據曲線和使用的座標,可以使用更快的版本。