Разная подпись для каждого поколения подписи эллиптической кривой
Я использую эллиптическую кривую для генерации подписи. Проблема в том, что он генерирует разные сигнатуры каждый раз с одной и той же парой ключей. Я попробовал библиотеки Bouncy Castle, а также ECDsa
, Подпись проверяется с обоими, но я хочу, чтобы одна и та же подпись использовалась при использовании одной и той же пары ключей.
Что можно сделать, чтобы каждый раз генерировать одну и ту же подпись? Или это невозможно при использовании эллиптической кривой?
1 ответ
Нет, стандартный DSA недетерминирован, что для ECDSA означает, что он основан на криптографически безопасном генераторе случайных чисел (если быть точным, в шаге 3 в описании в Википедии).
Если константа используется с другим вводом, тогда ECDSA утечет закрытый ключ. Это то, что случилось с закрытым ключом Sony, который использовался для подписи игр, который был взломан немецким компьютерным клубом Chaos (но только на странице 122!). Конечно, ECDSA не может определить, используются ли одни и те же данные или нет.
Существует детерминированный способ генерации подписей ECDSA, указанный в RFC 6979, "Детерминированное использование алгоритма цифровой подписи (DSA) и алгоритма цифровой подписи эллиптической кривой (ECDSA)".
Вы можете сделать это, используя следующий код Bouncy Castle в C#:
ECDsaSigner signer = new ECDsaSigner(new HMacDsaKCalculator(new Sha256Digest()));
который, по-видимому, используется для технологии блокчейн, такой как биткойн.