椭圆曲线密码学中的点减法

时间:2013-03-16 11:02:42

标签: c cryptography elliptic-curve

我想在素数场上的椭圆曲线上进行点减法。我尝试将这些点减去(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 ;
}

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

2 个答案:

答案 0 :(得分:2)

参见GregS关于分裂模式的评论。你需要找到分母的倒数然后乘以。要计算模逆,您可以使用扩展的欧几里德算法。

另外,你否定y坐标然后再添加211的方式有点奇怪。最好在传递参数时将字段元素保持在适当的范围内,例如要获得-y mod p,请使用p-y。

我认为这只是一个学习练习,因为你使用的是一个非常小的领域:)

答案 1 :(得分:1)

我完全不了解你在做什么,你的日志(p)应该是什么意思以及你的域名参数输入的地方,但减法很简单: 取消y坐标(-Y =模数-y),然后照常添加。

如果您想要计算参考,可以使用我的开源软件“学术签名” 来自this link 它的计算非常透明,并产生例如人类可读十六进制表示法中ECDSA签名的结果。我现在不确定,如果它可以用你正在使用的这么短的模数进行计算。

手册中包含有关如何正确编程ECC操作以及如何使用该软件的说明: Link to ecc Manual

此致   迈克尔安德斯