0

楕円曲線 EC があり、その座標が曲線上のすべての点の最小の非負の整数である EC の点 G を見つける必要があります。ECOH ハッシュ アルゴリズムの実装に必要です。この目標を達成するためにopensslを使用しようとしていましたが、これまでのところ、そのような点を見つける方法がわかりません。私はこれをやろうとしていました:

EC_POINT *G = EC_POINT_new(ec);
for(int i = 1; i < 1024; i++)
{
    itoa(i, str, 10);
    BN_dec2bn(&x, str);
    EC_POINT_set_affine_coordinates_GFp(ec, G, x, y, ctx);
    if(EC_POINT_is_on_curve(ec, G, ctx))
        printf("%s\n", str);
}

ただし、(x, y) の座標を持つ点が曲線上にあるかどうかのみをチェックします。どうすれば見つけられますか?

4

2 に答える 2

3

まず、ジェネレーターecが提供されていない場合は、ジェネレーターを見つけます。最小の x 座標を持つジェネレーターが必要だと思います。次のようなことができます。

// Suppose you've found a generator point G, and a BIGNUM context bn_ctx 
// has been created and initialized

BIGNUM x, y, x_min, y_min;
BN_init(&x); BN_init(&x_min);
BN_init(&y); BN_init(&y_min);

EC_POINT *P = EC_POINT_new(ec);
EC_POINT_copy(P,G);
EC_POINT_get_affine_coordinates_GFp(ec,P,x_min,y_min,bn_ctx);
do{
    EC_POINT_add(ec,P,P,G,bn_ctx);
    EC_POINT_get_affine_coordinates_GFp(ec,P,x,y,bn_ctx);
    if (x < x_min) {
        BN_copy(x_min, x);
        BN_copy(y_min, y);
    }
}while(!EC_POINT_is_at_infinity(ec,P));

次に、最小の x 座標を持つジェネレーター (x,y) を取得します。そもそも発電機を見つける方法については、別の話です。

于 2013-02-06T08:05:09.617 に答える
0

EC_POINT_set_affine_coordinates_GFpと の両方を必要xとするyを使用する代わりEC_POINT_set_compressed_coordinates_GFpに、 を使用します。これは、 が曲線のドメイン内にある場合に、2 つの値 (偶数または奇数) のどちらを使用するかyy_bit表す を使用します。yxx

x次に、最初のいくつかをループして、最小の座標を見つけることができるはずxです.

于 2013-01-01T20:38:22.177 に答える