3

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

程序似乎没有给我正确的坐标请帮助我进行椭圆曲线密码学的编码。

4

2 回答 2

2

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

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

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

于 2013-03-16T21:37:26.000 回答
1

我不明白你在那里做什么,你的 log(p) 应该是什么意思以及你的域参数输入的位置,但是减法很容易:否定 y 坐标(-Y = 模数 - y)然后简单地说像往常一样添加。

如果你想为你的计算提供参考,你可以使用我的开源软件“学术签名”, 的计算非常透明,并以人类可读的十六进制表示法生成 ECDSA 签名的结果。不过,我目前不确定它是否可以使用您正在使用的如此短的模数进行计算。

手册中介绍了如何正确编程 ECC 操作以及如何使用该软件: 链接到 ecc 手册

问候迈克尔安德斯

于 2013-03-17T13:43:02.163 回答