3

素体上の楕円曲線で減点をしたいです。減算するポイントを取ってみまし(x,-y log(p))たが、私の答えは一致していないようです。

これは私が減算をしようとした方法です:

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

ここs9では、s6s8がすべて 2 つの構造になってい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

除算 mod p に関する GregS のコメントを参照してください。分母の逆数を求めて乗算する必要があります。モジュラー逆数を計算するには、拡張ユークリッド アルゴリズムを使用できます。

また、y座標を否定してから211を追加する方法は少し奇妙です。引数として渡すときは、フィールド要素を適切な範囲に保つのが最善です。たとえば、-y mod p を取得するには、py を使用します。

非常に小さなフィールドを使用しているため、これは単なる学習演習であると思います:)

于 2013-03-16T21:37:26.000 に答える
1

あなたがそこで何をしているのか、あなたのlog(p)が何を意味するのか、ドメインパラメータがどこに入るのかはわかりませんが、引き算は簡単です:y座標を否定し(-Y =係数-y)、いつものように追加。

計算の参照が必要な場合は、このリンクから私のオープン ソース ソフトウェア「Academic Signature」を使用できます。 これは、計算が非常に透過的であり、人間が読み取れる 16 進数表記で ECDSA 署名の結果などを生成します。現時点では、あなたが扱っているような短い係数で計算できるかどうかはわかりません。

ECC 操作を正しくプログラムする方法とソフトウェアの使用方法を説明したマニュアルがあります。 ecc マニュアルへのリンク

よろしくマイケル・アンダース

于 2013-03-17T13:43:02.163 に答える