Bill Allombert on Sat, 16 Dec 2023 14:26:29 +0100


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: Some comments on Isogenous Curves, algebraic points on those curves and SHA


On Fri, Dec 15, 2023 at 11:58:32AM +0100, Bill Allombert wrote:
> On Thu, Dec 14, 2023 at 04:56:51PM -0800, American Citizen wrote:
> Let us start here.
> 
> E=ellinit([0,-9271247,0,-659737307363904,0]);
> P = [-119064,8855385000];
> [S,M]=ellisomat(E);
> C=apply(e->ellinit(e[1]),S);
> L=lfun(E,1,1);
> Q=vector(#S,i,ellisogenyapply(S[i][2],P));
> F=vector(#S,i,ellsaturation(C[i],[Q[i]],2)[1]);
> F==Q
> round(vector(#S,i,L/ellbsd(C[i])/ellheight(C[i],F[i])))
> [1,1,1,4,4,4,64,64]
> 
> The conclusion is that, assuming P is indeed a generator of E, the
> Sha of the twists are 1,1,1,4,4,4,64,64.
> 
> Practically speaking you should search points on the curve which has the largest
> ellbsd. Note that this does not require to compute L.

In this case:

B=apply(ellbsd,C)
[16.194555031523637396914183858019918121,8.0972775157618186984570919290099590607,4.0486387578809093492285459645049795303,1.0121596894702273373071364911262448826,2.0243193789404546746142729822524897652,2.0243193789404546746142729822524897652,0.063259980591889208581696030695390305162,0.063259980591889208581696030695390305162]

So the first curve is the best.

If you start by the second one instead, you get
E=C[2];P=F[2];

[S,M]=ellisomat(E);
C=apply(e->ellinit(e[1]),S);
Q=vector(#S,i,ellisogenyapply(S[i][2],P));
F=vector(#S,i,ellsaturation(C[i],[Q[i]],2)[1]);
bestappr(vector(#S,i,ellheight(C[i],Q[i])/ellheight(C[i],F[i])))

%18 = [1,1,1,4,4,4,4,4]
That is, the image points are not all generators
(what you call entanglement).

PARI has a function ellisotree which can be useful too:

? E=ellinit([0,-9271247,0,-659737307363904,0]);
? ellisotree(E)[2]
%5 =
[0 0 0 0 2 2 0 0]

[2 0 0 2 0 0 0 0]

[0 2 0 0 0 0 0 0]

[0 0 0 0 0 0 0 0]

[0 0 0 0 0 0 0 0]

[0 0 0 0 0 0 2 2]

[0 0 0 0 0 0 0 0]

[0 0 0 0 0 0 0 0]

Cheers,
Bill