【问题标题】:Point subtraction in elliptic curve cryptography椭圆曲线密码学中的点减法
【发布时间】:2013-03-16 11:02:42
【问题描述】:

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

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

【问题讨论】:

  • 不要忘记标记您在 Jowin 中执行计算的语言,如果只是为了增加查看次数。我猜到了 C,但你可以重新编辑你的问题来改变它。
  • Jowin, "division" mod p 意味着你必须计算一个modular inverses=(((y1-y2)/(x1-x2)) % 211) 不是正确的做法。
  • GregS,我知道我必须编辑我的代码才能使用模块化逆方法进行除法.. 但我想知道即使是正常除法我得到的任何点都在椭圆曲线上!.. 非常感谢为您解答!在我的程序中,必须为椭圆考虑一个无穷大点,我可以为此取什么点?

标签: c cryptography elliptic-curve


【解决方案1】:

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

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

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

【讨论】:

  • 能否请您详细说明一下,我觉得 p-y 是我在我的程序中发现的替换 -y mod(p) 的东西,如果我错了,请纠正我。
  • 是的,我认为你的情况没问题。我只是说使用相同字段元素的不同表示是自找麻烦。假设您将 x1=210 和 x2=-1 传递给 point_addition。检查 if((x1-x2)!=0) 不起作用。
【解决方案2】:

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

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

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

问候 迈克尔·安德斯

【讨论】:

  • 感谢迈克尔的回复。我想要做的是在 c dkrypt.com/home/ecc 中实现以下教程 p 是椭圆曲线方程中的 p { y2 mod p= x3 + ax + b mod p } 我下载了你的程序,这令人印象深刻程序能够找到这个 1 给定椭圆曲线方程 y^2 mod(211) = (x^3 - 4) mod(p) 私钥为 4,生成点为 (2, 2) 映射数字 0-200曲线上使用教程中的方法加密发送的数字 4,5,6 发送可以告诉加密点和解密点
猜你喜欢
  • 2015-05-09
  • 1970-01-01
  • 2015-07-05
  • 2021-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 2022-10-25
相关资源
最近更新 更多