Скалярное умножение с Ed25519 дает неверные результаты - PullRequest
0 голосов
/ 29 августа 2018

Я использую библиотеку Ed25519-java для выполнения скалярного умножения на «точке Эдвардса в Java. библиотека, однако я не смог получить те же результаты.

Вот мой код с открытым ключом и хешем. Открытый ключ представляет собой сжатую «точку Эдвардса», которую я затем распаковываю с помощью функции createPoint. Затем я пытаюсь скалярное умножение с помощью хэша. Наконец, я вывел значение T точки и сравнил его с реализацией Rust.

byte[] key = {
    (byte) 0x95, (byte) 0x5d, (byte) 0x39, (byte) 0x4a, (byte) 0x17, (byte) 0xe5, (byte) 0x10, (byte) 0x73,
    (byte) 0x4c, (byte) 0xa0, (byte) 0x6b, (byte) 0xdf, (byte) 0x5d, (byte) 0x39, (byte) 0x0f, (byte) 0x45,
    (byte) 0x24, (byte) 0x2c, (byte) 0x0b, (byte) 0x68, (byte) 0x9a, (byte) 0xad, (byte) 0x0d, (byte) 0xbd,
    (byte) 0x46, (byte) 0xef, (byte) 0x16, (byte) 0x0f, (byte) 0x32, (byte) 0xf1, (byte) 0xc5, (byte) 0x33
};

byte[] hash = {
    (byte) 0xf8, (byte) 0x66, (byte) 0x0d, (byte) 0xd9, (byte) 0x08, (byte) 0xd8, (byte) 0xc3, (byte) 0x76,
    (byte) 0x26, (byte) 0x67, (byte) 0xac, (byte) 0x8e, (byte) 0x53, (byte) 0xf1, (byte) 0x28, (byte) 0x74,
    (byte) 0x17, (byte) 0xc3, (byte) 0x4b, (byte) 0x36, (byte) 0xa9, (byte) 0xbb, (byte) 0xae, (byte) 0x3d,
    (byte) 0x72, (byte) 0x00, (byte) 0x61, (byte) 0x2d, (byte) 0x3b, (byte) 0x8b, (byte) 0xc4, (byte) 0x73
};

GroupElement publicKey = EdDSANamedCurveTable.ED_25519_CURVE_SPEC.getCurve().createPoint(key, true);
System.out.println(publicKey.scalarMultiply(hash).getT().toString());

После умножения этот код выводит значение T 5ebf9c4a82f484e236a4c39752161d58c2b1a9c41cf9394334479e849640ba1a. Однако в реализации Rust аналогичный фрагмент кода выводит 6dd63e5f98fec68b8666444a7aa599bcd56406bfc9c0f82864e5a457f8dccc6a. Я проверил, что ключи декодируются одинаково; они идентичны вплоть до шага скалярного умножения.

Я не смог разобраться, почему это не так, но, похоже, различия в реализациях между этими двумя библиотеками кривой25519. Это также может быть связано с порядком байтов, хотя я попытался изменить порядок байтов хэша, но безуспешно.

...