#private-key #public-key #ecdsa #secp256k1
#закрытый ключ #открытый ключ #ecdsa #secp256k1
Вопрос:
Я просто пишу небольшую тестовую программу, используя secp256k1 C lib, предназначенную для генерации различных случайных пар ключей ecdsa, используя secp256k1-zkp API, просто следуйте некоторому примеру в tests.c.
Однако, немного удивленный, я обнаружил, что не могу получить различную пару ключей, каждый раз, когда я запускаю тестовую программу, я получаю точно такой же закрытый ключ (впоследствии тот же открытый ключ).
Это не имеет смысла, но я не могу понять, в чем проблема, кто-нибудь может любезно помочь и предложить?
Ниже приведен пример кода, который я использую:
random_scalar_order_test(amp;rand);
secp256k1_scalar_get_b32(privkey, amp;rand);
CHECK(secp256k1_ec_seckey_verify(ctx, privkey) == 1);
CHECK(secp256k1_ec_pubkey_create(ctx, pubkey, amp;pubkeylen,
privkey, (secp256k1_rand32() amp; 3) != 0) == 1);
После компиляции, каждый раз, когда я запускаю тест, первые две строки кода всегда предоставляют один и тот же приватный ключ, поэтому открытый ключ также будет исправлен.
Существует ли какой-либо начальный API rand, который можно использовать для генерации разных закрытых ключей при каждом вызове?
Ответ №1:
Открытые ключи кривой всегда будут разными, даже если для одного и того же закрытого ключа. Это нормальное поведение.
Комментарии:
1. Спасибо за ответ, я не могу вспомнить, каким было решение моего первоначального вопроса, но это должно быть что-то рандомизированное generate pubkey. Что касается вашего ответа — я НЕ думаю, что это правильно, как только у вас есть фиксированный и действительный закрытый ключ, у вас должен быть точно зафиксированный открытый ключ — это правило должно применяться ко всем механизмам шифрования с открытым ключом.