將 X,Y 轉換為 EC 點的雅可比表示時,是否有任何理由搜尋 1 以外的 Z 值?
交換公鑰時,我通常會收到一些壓縮形式的
X,Y
座標。要使用一些加速,我需要以 Jacobeanx,y,z
形式表示。
Z=1
滿足一切並查看速度提升(https://en.wikibooks.org/wiki/Cryptography/Prime_Curve/Jacobian_Coordinates,http://www.hyperelliptic.org/EFD/g1p/auto-shortw-jacobian.html)我看不出為什麼會比其他任何東西都慢(或快?)的明顯原因,這是一個合理的問題嗎?您能否指出一些關於“尋找 1 以外的內容是否有意義?”的方向。Z=1``Z``Z
加倍點(Wiki 連結)需要
Z^4
並且當與加倍算法(公共點計算、ECDH 和基於 EC 的簽名所需)一起使用時,使用 $ Z=1 $ 簡化計算,Z^4
否則可能需要 3 次加倍。res
不固定的雙加法以節省時間。雙加維基百科版本;let bits = bit_representation(s) # the vector of bits (from MSB to LSB) representing s let res = O # point at infinity for bit in bits: res = res + res # double if bit == 1: res = res + P # add i = i - 1 return res
這是漫長故事的開始。“ m-fold double”(重複加倍)計算 $ [2^m]P $ 並且只計算
Z^4
一次。當你需要 $ [k]P $ ,你可能需要代表 $ k $ 在二進制形式中,然後在必要時使用 m 倍加倍。要從中受益,必須在決定是否使用 m-fold double 之前計算成本。答案並不簡單和完整,因為這需要額外的 Wiki 版本是有
Z1=Z2
成本的。仍然有乘法,如果它的成本為零。5M + 2S``12M + 4S``5M + 2S``Z1``Z1=1
在一個簡短的句子中,一般來說,
Z1=1
簡化了方程。自從 $ (X_1:Y_1:Z_1) $ 代表 $ (Z/Z^2,Y/Z^3) $ 和 $ (X_1:Y_1:Z_1) $ 是一個等價關係$$ (X_1:Y_1:Z_1) \sim (\lambda X_1:\lambda Y_1:\lambda Z_1) $$可以簡單地轉換 $ Z_1 =1 $ 和$$ (X_1/Z_1:Y_1/Z_1:1) $$
請記住,這
1/Z1
不是除法,而是Z1
定義欄位的倒數。
Z1
另一方面,是不留在那裡與下Z1=1
操作。要從中受益,必須找到逆並執行兩次乘法。另一方面,求逆是我們不想要的,因為它代價高昂。因此,至少在標量乘法開始時有好處。