Public-Key

這個公式是如何工作的(aG+bG)=(a+b)G(一個G+bG)=(一個+b)G(aG + bG) = (a + b) G在 ECDSA 中?

  • November 11, 2019

請解釋這個公式如何 $ (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 $$

為什麼這個總和的答案不是這個值:

橢圓曲線上的加法不同於整數,它們具有幾何意義

Weierstrass 曲線上加法的幾何解釋

然而,我們可以在算術上將仿射座標中的加法規則定義為:

讓 $ P=(x_1,x_2) $ 和 $ Q=(x_2,y_2) $ 是橢圓曲線上的兩點。

  1. $ P+O=O+P=P $
  2. 如果 $ x_1 = x_2 $ 和 $ y_1 = - y_2 $ 和 $ Q =(x_2,y_2)=(x_1,−y_1)=−P $ 然後 $ P + (-P) = O $
  3. 如果 $ 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

請注意,此加法和加倍規則是通用的。根據曲線和使用的座標,可以使用更快的版本。

引用自:https://crypto.stackexchange.com/questions/75602