secp256k1に関するメモです。 後ろから二番目のkは数学者Neal Koblitzのkらしいです。
曲線
法素数
= 0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F
= 115792089237316195423570985008687907853269984665640564039457584007908834671663
256ビット、10進で78桁
ベースポイント:
Bx = 0x79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798
= 55066263022277343669578718895168534326250603453777594175500187360389116729240
256ビット、10進で77桁
By = 0x483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8
= 32670510020758816978083085130507043184471273380659243275938904335757337482424
256ビット、10進で77桁
ベースポイントの位数(=素数)
L = 0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141
= 115792089237316195423570985008687907852837564279074904382605163141518161494337
256ビット、10進で78桁
ゼロ点は無限遠点(O)となる。
python実装上は、無限遠点はx=0, y=0で表現する。
BをL倍すると最初に無限遠点になる。
コファクターは1なので、Lがこの曲線上の有理点の数(無限遠点を含む)であり、巡回群の位数である。
の加法公式
1) PとQのどちらかが無限遠点の場合、加算結果はもう片方の点。
2) Qが-Pと等しい、つまりの場合、加算結果は無限遠点。
3) PとQが同一点での場合、曲線の接線は垂直線になるので、加算結果は無限遠点。
4) PとQが同一点での場合、次の2倍公式。
5) 上記以外()は次式。
参考
Recommended Elliptic Curve Domain Parameters
http://www.secg.org/SEC2-Ver-1.0.pdf
X9.62-1998 Draft
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.202.2977&rep=rep1&type=pdf
python implementation
https://github.com/warner/python-ecdsa
[asin:4061538314:detail]