2013-03-16 66 views
2

我想对素数场上的椭圆曲线进行点减法。我试着把积分扣除为(x,-y log(p)),但我的答案似乎不匹配。椭圆曲线密码术中的点减法

这是我尝试做减法:

s9=point_addition(s6.a,s6.b,((s8.a)%211) ,-((s8.b)%211)); 

这里s9s6s8是两个int所有结构。

,这是我的函数不加分:

structure point_addition(int x1, int y1, int x2, int y2) 
{ 
    int s,xL,yL; 
    if((x1-x2)!=0) 
    { 
     if ((((y1-y2)/(x1-x2)) % 211)>0) 
       s=(((y1-y2)/(x1-x2)) % 211); 
     else 
       s=(((y1-y2)/(x1-x2)) % 211) + 211; 
     if ((((s*s)-(x1+x2)) % 211)>0) 
       xL= (((s*s)-(x1+x2)) % 211) ; 
     else 
       xL= (((s*s)-(x1+x2)) % 211) + 211; 
     if(((-y1+s*(x1-x2)) % 211)>0) 
       yL= ((-y1+s*(x1-xL)) % 211); 
     else 
       yL= ((-y1+s*(x1-x2)) % 211) + 211; 
    } 
    else 
    { 
     xL= 198 ; 
     yL= 139; 
    } 

    s7.a= xL; 
    s7.b= yL; 

    return s7 ; 
} 

的程序似乎并没有给我正确的坐标,请帮我这个编码椭圆曲线加密。

+0

不要忘记标记正在执行的语言在Jowin中计算,如果只是增加观点的数量。我猜C了,但你可以重新编辑你的问题来改变它。 –

+0

Jowin,“division”mod p表示您必须计算[模块反转](http://en.wikipedia.org/wiki/Modular_inverse)。 s =(((y1-y2)/(x1-x2))%211)'不是正确的方法。 –

+0

GregS,我看到我必须编辑我的代码,用模块化的逆方法进行分割..但是我想知道如何进行正常分割无论我得到的是椭圆曲线上的哪些点!..非常感谢您的回答!在我的程序中,无限点必须考虑椭圆,我可以采取什么措施? –

回答

2

请参阅GregS关于division mod p的评论。你需要找到分母的倒数,然后乘。要计算模逆,你可以使用扩展的欧几里得算法。

此外,你的方式是否定y坐标,然后加211后有点奇怪。以参数形式传递时,最好将字段元素保持在适当的范围内。得到-y mod p,使用p-y。

而且我认为这仅仅是一个学习的过程,因为你使用的是非常小的领域:)

+0

请您详细说明我认为p-y是我发现要替换的-y mod(p)在我的程序中纠正了我,如果我在此上错了。 –

+0

是的,我认为你的情况没问题。我只是说,使用同一个字段元素的不同表示方式会造成麻烦。假设你将x1 = 210和x2 = -1传递给point_addition。检查if((x1-x2)!= 0)是否不起作用。 – Frank

1

我不`吨明白你究竟在做什么有,应该是什么意思你的日志(P)以及您的域参数输入的位置,但减法很容易: 取反y坐标(-Y =模 - y),然后照常添加。

如果你想为你的计算基准,则可以使用我的开放源码软件“学术签名” 从this link 它与它的计算相当透明的,例如产生ECDSA签名的结果以人类可读的十六进制符号表示。但目前我还不确定,如果它可以用你正在使用的这种短模量进行计算。

特色如何ECC的操作正确,以及如何使用软件程序的说明手册有: Link to ecc Manual

问候 迈克尔·安德斯

+0

感谢您的回复迈克尔。我想要做的是在c http://www.dkrypt中实现以下tutuorial。COM /家庭/ ECC的P为椭圆曲线方程 {Y2模p = X 3 + AX + B模p} P和我下载的程序是令人印象深刻的可程序能够找到这个 1中给出椭圆曲线方程y^2模(211)=(X^3 - 4)MOD(p)的私钥是4个发电机点是(2,2)的数字0- 200上的曲线号码被映射到使用方法中被加密教程和发送4,5,6发送它可以告诉加密点和decypted点 –