Введение
Криптографический алгоритм для цифровых подписей
algorithm for digital signatures
In cryptography, the Elliptic Curve Digital Signature Algorithm (ECDSA) offers a variant of the Digital Signature Algorithm (DSA) which uses elliptic curve cryptography.
В криптографии алгоритм цифровой подписи на эллиптических кривых (ECDSA) является вариантом алгоритма цифровой подписи (DSA), использующим криптографию на эллиптических кривых.
algorithm for digital signatures
In cryptography, the Elliptic Curve Digital Signature Algorithm (ECDSA) offers a variant of the Digital Signature Algorithm (DSA) which uses elliptic curve cryptography.
Размер ключа и подписи
Как и в случае с криптографией на эллиптических кривых в целом, размер частного ключа ECDSA, который считается необходимым для обеспечения безопасности, примерно вдвое превышает уровень безопасности в битах. Например, при уровне безопасности 80 бит – то есть, для нахождения частного ключа злоумышленнику потребуется максимум около 2^80 операций – размер частного ключа ECDSA составит 160 бит. С другой стороны, размер подписи одинаков для DSA и ECDSA: примерно *n* бит, где *n* – показатель степени в формуле *q = 2^n*, то есть около 320 бит при уровне безопасности 80 бит, что эквивалентно 2^80 операциям.
Безопасность
В декабре 2010 года группа, называющая себя fail0verflow, объявила об извлечении закрытого ключа ECDSA, используемого Sony для подписи программного обеспечения для игровой консоли PlayStation 3. Однако эта атака сработала лишь из-за некорректной реализации алгоритма Sony, поскольку параметр *k* был статичным, а не случайным. Как указано в разделе, посвященном алгоритму генерации подписей, это делает параметр *k* вычислимым, сводя на нет эффективность всего алгоритма. 29 марта 2011 года два исследователя опубликовали статью в IACR, демонстрирующую возможность извлечения закрытого ключа TLS сервера, использующего OpenSSL для аутентификации с помощью Elliptic Curves DSA над двоичным полем, посредством атаки по времени. Уязвимость была устранена в OpenSSL 1.0.0e. В августе 2013 года стало известно, что ошибки в некоторых реализациях класса Java SecureRandom иногда приводили к коллизиям в значении *k*. Это позволило злоумышленникам восстановить закрытые ключи, предоставив им такой же контроль над транзакциями Bitcoin, как и законным владельцам ключей, используя тот же эксплойт, который был использован для раскрытия ключа подписи PS3 в некоторых реализациях Android-приложений, использующих Java и полагающихся на ECDSA для аутентификации транзакций. Эту проблему можно предотвратить, используя детерминированный способ генерации *k*, как описано в RFC 6979.