Выполнение вычисления открытого ключа EC для данного секретного ключа дает неправильные результаты.

Я пытался понять расчет открытого ключа EC для данного секретного ключа. После этого вопроса я нашел хорошо объяснил ответ, но (как это часто бывает) что-то пошло не так. Согласно предыдущему ответу и этому документу я использую следующий Perl-скрипт для выполнения вычислений:

#!/usr/bin/perl

use strict;
use warnings;

use Math::BigInt;

my $d_hex = "18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A206321725";
my $d_num = Math::BigInt->new("0x$d_hex");

my $g_hex = "0479BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8";
my $g_num = Math::BigInt->new("0x$g_hex");

my $q_num = $d_num->copy()->bmul($g_num);
my $q_hex = $q_num->as_hex();

# Expect: 0x0450863ad64a87ae8a2fe83c1af1a8403cb53f53e486d8511dad8a04887e5b23522cd470243453a299fa9e77237716103abc11a1df38855ed6f2ee187e9c582ba6
# Result: 0x479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798611c24f290d443a7c839f40d5512f071e48c9c424b038039d222fa320142ebdd

print "$q_hex\n";

Здесь ожидаемый результат означает результат вычисления с использованием кода, написанного на C из ранее найденного ответа. Как видите, результаты разные. Что я делаю неправильно?


person Kechup    schedule 24.08.2015    source источник


Ответы (2)


Я не привык к Perl, но не могу представить, чтобы вы инициализировали или использовали циклическую группу. Операции на эллиптических кривых и асимметричное шифрование в целом (в основном) всегда выполняются в циклической группе.

person Paul Bastian    schedule 24.08.2015
comment
Спасибо, я нашел хорошую библиотеку, написанную на PHP, где я нашел, как с этим бороться. Я опубликую правильный ответ там, когда закончу. - person Kechup; 24.08.2015

Итак, я нашел PHP библиотеку, которая может генерировать адреса из закрытого ключа, и написал пример кода на Perl, основанный на этом коде PHP. Это странно, но работает в некоторых случаях. Во всяком случае, этого достаточно, чтобы понять, как это работает.

person Kechup    schedule 24.08.2015