-
-
Save mcieno/f0c6334af28f60d244fa054f5a1c22d2 to your computer and use it in GitHub Desktop.
| # Setup curve | |
| p = 17 | |
| a, b = 1, -1 | |
| E = EllipticCurve(GF(p), [a, b]) | |
| G = E.gen(0) | |
| # Target secret key | |
| d = 8 | |
| # Public point | |
| P = d * G | |
| del d | |
| # Find the embedding degree | |
| # p**k - 1 === 0 (mod order) | |
| order = E.order() | |
| k = 1 | |
| while (p**k - 1) % order: | |
| k += 1 | |
| assert k <= 6 | |
| K.<a> = GF(p**k) | |
| EK = E.base_extend(K) | |
| PK = EK(P) | |
| GK = EK(G) | |
| d = 0 | |
| while P != d * G: | |
| QK = EK.random_point() | |
| if QK.order() != E.order(): | |
| continue | |
| AA = PK.tate_pairing(QK, E.order(), k) | |
| GG = GK.tate_pairing(QK, E.order(), k) | |
| d = AA.log(GG) | |
| print(F"{d=}") |
By the way, your code doesn t works on binary curves (even on isogeny 3).
It complains at line 23 that the parameter to GF isn t a prime power.
Feel free to suggest improvements :)
While I know how to compute bilinear pairings and I understand the aim, I’ve absolutely no idea about what :
EK = E.base_extend(K)
does (I’m meaning the function). Looks like you’ll have to find a SageMath alternative to do this.
By the way, did you test your code to see if it works on easy samples ?
Was tested on
p = 3009944491747103173592552029257669572283120430367
a, b = 1, 0
E = EllipticCurve(GF(p), [a, b])
G = E(2900641855339024752663919275085178630626065454884, 1803317565451817334919844936679231131166218238368)
P = E(10654737690719804518827220655939579230832010880, 1272308004685912947962139770717466018620937245516)which was a VolgaCTF 2020 Qualifier challenge.
@mcieno : and what about the case where the elliptic curve is binary curve ? In my case, I’ve
so obviously, as a result of the underlying finite field being a prime power, I can’t do something like point = E(integer,integer)
@ytrezq
Citing SafeCurves:
Hence,$k = 12$ is not considered "too large" in general, it's just very inefficient to do arithmetics on $F_{q^{12}}$ later.$k = 12$ and a "sextic twist" into $F_{q^{2}}$ .
For example, BLS12-381 is a pairing-friendly curve with
For fun, computing the base extension with$k = 1337$ for secp256k1 took me just a few seconds: