ECDSA генерирует разную подпись

291
15 июня 2018, 05:30

Использую алгоритм ECDSA и библиотеку Bouncy Castle. Ключи беру из .pem файла, кривая, соответственно, тоже записана в файле.

При каждом выполнении алгоритма генерируется новая подпись. Почему так? Ведь должна же быть одинаковая, где ошибка?

StreamReader sr = new StreamReader("MYKEY.pem");
AsymmetricCipherKeyPair keyPair = (AsymmetricCipherKeyPair)new PemReader(sr).ReadObject();
ISigner signer = SignerUtilities.GetSigner("SHA1withECDSA");
signer.Init(true, keyPair.Private);
signer.BlockUpdate(message, 0, message.Length);
byte[] signature = signer.GenerateSignature();

Если сгенерить подпись открытым ключом и сравнить их, они одинаковые.

signer = SignerUtilities.GetSigner("SHA1withECDSA");
signer.Init(false, keyPair.Public);
signer.BlockUpdate(message, 0, message.Length);
bool ok = signer.VerifySignature(signature);
Answer 1

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

READ ALSO
Масштабирование переменных в Modbas

Масштабирование переменных в Modbas

Столкнулся с проблемой маштабирования в Modbus tcpЧитаю данные на скаду

253
Как использовать UserControl в проекте VS2010

Как использовать UserControl в проекте VS2010

Подскажите как добавить пользовательский контрол в проект VS 2010Пробовал контролы из этой ветки Стака и из репозитория для VS2012 от неизвестного...

239
Как отобразить MessageBox unity3d

Как отобразить MessageBox unity3d

Как показать окно, аналог MessageBox из Windows Forms, только на андроид?

274
Перемещение объектов по холсту

Перемещение объектов по холсту

Здравcтвуйте, подскажите в чем может быть проблема, при добавлении элемента (элемент представляет собой UserControl и эллипсы) на Canvas (холст), я могу...

296