Да, это нормальная практика — генерировать подпись ECDSA из сообщения. $ млн $ (или это хэш $Ч(М)$ ), закрытый ключ $d_U$ и параметры кривой, без указания одноразового номера в качестве входных данных. одноразовый номер $к$ создается как часть процесса подписания одним из двух способов:
- Он генерирует секретное целое число $к$ равномерно в $[1,n)$ используя настоящий генератор случайных чисел с секретным выходом. Это стандартное определение ECDSA.
- Он генерирует секретное целое число $к$ в $[1,n)$ используя Псевдослучайная функция с ключом $d_U$, применительно к $Ч(М)$ и, возможно, другие данные, которые не должны быть секретными (такие как метка времени и/или случайное число). Это то что RFC6979 делает, прописывая PRF на основе HMAC.
Оба метода одинаково безопасны: по сути, $к$ секрет в $[1,n)$ что, для злоумышленников, которые не знают закрытый ключ $d_U$, неизвестно, а если бы было известно, то выглядело бы случайным (кроме второго варианта, если тот же $ млн $ переподписывается, а необязательные другие данные повторяются или отсутствуют).
Преимущество второго метода состоит в том, что он не требует настоящего генератора случайных чисел криптографического качества. Однако он использует закрытый ключ $d_U$ (и, что еще хуже, смешивает его с переменными данными, потенциально известными противнику), поэтому PRF должен быть защищен от атак по сторонним каналам.
Только второй метод может гарантировать, что двукратное подписание одного и того же сообщения одним и тем же закрытым ключом сгенерирует одну и ту же подпись, что в зависимости от обстоятельств желательно или нет.