Перейти к содержимому
ecdsa.com

Nonce (k в ECDSA)

Число, используемое один раз; в подписях ECDSA, DSA и Schnorr — секрет k каждой подписи, который также должен быть непредсказуемым и равномерно распределённым.
Другие написанияECDSA noncek valueper-message secret numberephemeral key k

В ECDSA подписант выбирает k в диапазоне 1…n−1, вычисляет точку kG и берёт её координату x по модулю n в качестве r; затем вычисляет s = k⁻¹·(z + r·d) mod n, где z — усечённый хеш сообщения, а d — закрытый ключ (FIPS 186-5, § 6.4.1). Поскольку s линейно зависит и от k, и от d, достаточно узнать k для одной подписи, чтобы вычислить закрытый ключ: d = (s·k − z)·r⁻¹ mod n. Поэтому FIPS 186-5 (§ 6.3) требует нового k для каждой подписи, защищённого так же, как сам ключ.

Повторное использование так же фатально и легко обнаруживается: две подписи одним ключом с одинаковым r дают k = (z₁ − z₂)·(s₁ − s₂)⁻¹ mod n, а затем и d. Именно так в 2010 году был извлечён ключ подписи PlayStation 3 и так были опустошены многие кошельки в блокчейнах. Nonce даже не обязан повторяться: нескольких битов смещения или утечки на подпись, собранных по достаточному числу подписей, хватает, чтобы редукция базиса решётки решила задачу о скрытом числе и восстановила ключ.

Современные библиотеки выводят k детерминированно из закрытого ключа и хеша сообщения (RFC 6979; это допускает FIPS 186-5, § 6.3.2) или используют вариант с подмешанной случайностью (hedged), который добавляет в то же вычисление свежие случайные данные. EdDSA встраивает эту идею в сам алгоритм: nonce в Ed25519 — это SHA-512 от половины секретного ключа и сообщения (RFC 8032, § 5.1.6). Проверка повторного использования nonce ищет повторяющиеся значения r в наборе подписей.

За пределами подписей «nonce» означает любое значение, которое используется один раз: 96-битный IV в AES-GCM, утверждение nonce в OpenID Connect, заголовок Replay-Nonce в ACME. Таким значениям нужны уникальность и свежесть, а не секретность; nonce подписи необычен тем, что ему нужно и то и другое.

Стандарты и ссылки

Все термины