Loading [MathJax]/jax/output/HTML-CSS/jax.js
Ask Your Question
0

Set a specific polynomial as a divisor of hyper elliptic curve

asked 7 years ago

sherifasagewad gravatar image

If I have a hyperelliptic curve of genus 2 = y2+( x2+x)y = x5+ x3 +1

and reduced divisor for the curve in Mumford is (x2+18x, 17x+1).

the two was given, I can construct the curve: as k. = GF(next_prime(2^160)); R.<x> = k[]

C = HyperellipticCurve(x^5 + x^3 + 1, x^2+x)

How to set (x2+18x, 17x+1) as it's divisor

Preview: (hide)

1 Answer

Sort by » oldest newest most voted
1

answered 7 years ago

dan_fulea gravatar image

References:

http://doc.sagemath.org/html/en/reference/curves/sage/schemes/hyperelliptic_curves/jacobian_morphism.html

https://en.wikipedia.org/wiki/Imaginary_hyperelliptic_curve

The question implicitly assumes there is such a divisor. In order to have a "normal situation" (small(er) prime p, so that the prints are suited to the width of this page, that still captures the solution, its idea, and where the claimed divisor is really a divisor) let us make a small computation in Z[x]:

R.<x> = ZZ[]
f, h = x^5 + x^3 + 1, x^2 + x
u, v = x^2 + 18*x, 17*x + 1
(f -h*v - v^2) % u

This gives:

sage: (f -h*v - v^2) % u
105283*x

Note that we have the factorization:

sage: factor(105283)
127 * 829

So let p be one of the two factors, my choice is 127. We will work with this prime a while. Finally there will be also the following bigger prime p involved in a small note:

sage: p = next_prime(2^160)
sage: p
1461501637330902918203684832716283019655932542983

Then we can initialize the corresponding divisor in Mumford coordinates as follows:

p = 127
K = GF(p)
R.<x> = K[]

f, h = x^5 + x^3 + 1, x^2 + x
C = HyperellipticCurve( f, h )
J = C.jacobian()
X = J(K)

u, v = x^2 + 18*x, 17*x + 1
D = X( [u,v] )
print D

This gives:

(x^2 + 18*x, y + 110*x + 126)

Observation:

sage: K(110/126)
17

Note that modulo p=127 we have the fulfilled condition that u divides v2+vhf.

sage: factor( v^2 +v*h - f )
(126) * x * (x + 18) * (x^3 + 109*x^2 + 54*x + 118)

Note: A more sophisticated way to get the divisor D among those with given u is as follows. The roots of u=x(x+18) are 0 and 18. We associate the corresponding points / lifts P,Q as follows:

CP, CQ = C.lift_x(0), C.lift_x(-18)
JP, JQ = J(CP), J(CQ)
print "JP     = %s" % JP
print "JQ     = %s" % JQ
print "+JP+JQ = %s" % (+JP+JQ)
print "+JP-JQ = %s" % (+JP-JQ)
print "-JP+JQ = %s" % (-JP+JQ)
print "-JP-JQ = %s" % (-JP-JQ)

This gives:

JP     = (x, y + 126)
JQ     = (x + 18, y + 1)
+JP+JQ = (x^2 + 18*x, y + 14*x + 126)
+JP-JQ = (x^2 + 18*x, y + 110*x + 126)
-JP+JQ = (x^2 + 18*x, y + 1)
-JP-JQ = (x^2 + 18*x, y + 96*x + 1)

One of the values is our D.

Note: As promised, let us also do some related computations for the bigger prime 1461501637330902918203684832716283019655932542983 . Same code, but this prime:

p = next_prime(2^160)
K = GF(p)
R.<x> = K[]

f, h = x^5 + x^3 + 1, x^2 + x
C = HyperellipticCurve( f, h )
J = C.jacobian()
X = J(K)

u, v = x^2 + 18*x, 17*x + 1
D = X( [u,v] )
print D

This runs immediately into the

ValueError: Argument polys (= (x^2 + 18*x, 17*x + 1)) must be divisor 
on curve Hyperelliptic Curve 
over Finite Field of size 1461501637330902918203684832716283019655932542983 
defined by y^2 + (x^2 + x)*y = x^5 + x^3 + 1.

The error was manually reshaped.

Note: We can construct now corresponding divisors with u=x2+18x in the same way:

CP, CQ = C.lift_x(0), C.lift_x(-18)
JP, JQ = J(CP), J(CQ)
print "JP     = %s" % JP
print "JQ     = %s" % JQ
print "+JP+JQ = %s" % (+JP+JQ)
print "+JP-JQ = %s" % (+JP-JQ)
print "-JP+JQ = %s" % (-JP+JQ)
print "-JP-JQ = %s" % (-JP-JQ)

To see why i preferred to use 127 instead, here is the result:

JP     = (x, y + 1461501637330902918203684832716283019655932542982)
JQ     = (x + 18, y + 1256459954126949149574270634668696857738035268857)
+JP+JQ = (x^2 + 18*x, y + 742142023287893335136809871805229629934516120054*x + 1461501637330902918203684832716283019655932542982)
+JP-JQ = (x^2 + 18*x, y + 1044137755672099120445471590403560727422734765797*x + 1461501637330902918203684832716283019655932542982)
-JP+JQ = (x^2 + 18*x, y + 417363881658803797758213242312722292233197777169*x + 1)
-JP-JQ = (x^2 + 18*x, y + 719359614043009583066874960911053389721416422912*x + 1)
Preview: (hide)
link

Comments

In +JP+JQ = (x^2 + 18x, y + 14x + 126) ->

can not use the same method u, v = x^2 + 18x, 14x + 126 but using

u, v = x^2 + 18x, K(14/126)x + 1

Why?

So this mean:

11 * (x^2 + 18x, 110x + 126) not equal 11 * (x2+18x, 17x+1)

so which is reduced divisor, which i use in calculations

sherifasagewad gravatar imagesherifasagewad ( 7 years ago )

Please give a clear comment. All you need is D = X( [u,v] ) if you have u and v. Unfortunately, in your post there was an error, since in order to have a correct Mumford representation the polynomials u,v have to satisfy an additional condition. If the condition is satisfied, use D = X( [u,v] ). If not, then in the process of searching the correct v for a given u may go through lifts as above. (If the corresponding lift exists on the hyperelliptic curve.) This was but not the subject of the post, but just a help to may clear why there was an error. Please start a new post with a clear message if threre are still issues.

Yes, the points on the curve given by (0,126) and (0,+126) are different. You should know yourself which divisor to use for which purpose.

dan_fulea gravatar imagedan_fulea ( 7 years ago )

I get the values from a research paper to ensure (u, v) are correct

A Secured Cloud System using Hyper Elliptic Curve and in sage: p = 4112543547855339322343814790708185367671872426434747235319998473455582535888229747778325047393413053

K = GF(p) R.<x> = K[]

f = x^5 + 7943193x^4 + 6521255x^3 + 1065528x^2 + 3279922x + 3728927 C = HyperellipticCurve( f ) J = C.jacobian() X = J(K)

u, v = x^2 + 22457213658579645161x + 62960708771725664757, 65279057408798633572x + 32004384923913711271 D = X( [u,v] )

"error"

sherifasagewad gravatar imagesherifasagewad ( 7 years ago )

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 7 years ago

Seen: 480 times

Last updated: Jan 07 '18