Нуралиев Д.С.

Евразийский Национальный университет им. Л.Н.Гумилева, Казахстан

Использование  алгоритма ECDSA

"Стойкость криптосистем, основанных на эллиптических кривых, недостаточно изучена, во многом из-за переусложненного взгляда на природу самих эллиптических кривых. Очень немногие криптографы понимают, что такое эллиптические кривые, поэтому, в отличие от RSA, нет широкого понимания и консенсуса относительно стойкости, обеспечиваемой их использованием при шифровании. Со временем ситуация может измениться, но сейчас получить оценку стойкости криптосистемы, основанной на эллиптических кривых, - все равно что получить оценку недавно обнаруженной древневавилонской поэзии"

Рональд Ривест, создатель RSA,

комментарии к предлагаемому стандарту FIPS, 1997

Немного истории

В недавно начавшемся XXI веке системы телекоммуникации и обработки цифровой информации играют все более и более значительную роль в различных видах деятельности человека. Они уже сейчас исключительно важны для нормального существования целых государств. В указанных условиях проблема защиты телекоммуникационных систем и систем обработки информации от внешних воздействий, имеющих целью внести искажения в их работу, приобретает не просто важное, а критическое значение - от нее зависит безопасность и само выживание людей.

Одним из ключевых инструментов защиты информационных систем является криптография. Ее сущность заключается в использовании преобразований информации, доступных законным сторонам информационного цикла и недоступных всем остальным. В отличие от множественных других подходов стойкость криптографических методов защиты может быть надежно обоснована, а в отдельных случаях и формально доказана теоретико-информационными методами.

ECDSA (Elliptic Curve Digital Signature Algorithm) — алгоритм с открытым ключом для создания цифровой подписи, аналогичный по своему строению DSA, но определённый в отличие от него не над полем целых чисел, а в группе точек эллиптической кривой.

Стойкость алгоритма шифрования основывается на проблеме дискретного логарифма в группе точек эллиптической кривой. В отличие от проблемы простого дискретного логарифма и проблемы факторизации целого числа, не существует суб-экспонециального алгоритма для проблемы дискретного логарифма в группе точек эллиптической кривой. По этой причине «сила на один бит ключа» существеннее выше в алгоритме, который использует эллиптические кривые. Алгоритм ECDSA в 1999 г. был принят, как стандарт ANSI, в 2000 г. — как стандарт IEEE и NIST. Также в 1998 г. алгоритм был принят стандартом ISO. Несмотря на то, что стандарты ЭЦП созданы совсем недавно и находятся на этапе совершенствования, одним наиболее перспективных из них на сегодняшний день является ANSI X9.62 ECDSA от 1999 — DSA для эллиптических кривых.

Практическая реализация

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

Свою реализацию я выполнил в среде Microsoft Visual Studio 2008, язык программирования  - C#. В платформе .NET имеется много библиотеки по криптографии. Нас же интересует именно ECDsa и ECDsaCng классы, которые находятся в пространство имен - System.Security.Cryptography. (Предоставляет криптографические службы, включающие безопасное кодирование и декодирование данных, а также целый ряд других функций, таких как хэширование, генерация случайных чисел и проверка подлинности сообщений.)

ECDsa - Предоставляет абстрактный базовый класс, инкапсулирующий алгоритм цифровой подписи DSA на эллиптических кривых.

ECDsaCng - Обеспечивает реализацию CNG алгоритма цифровой подписи DSA на эллиптических кривых.

В среде Visual Studio можно увидеть параметры и артибуты класса ECDsaCng. (см. Рис.1.)

Рис.1.

 

 

Самый обычный пример использование алгоритма с открытым ключом для создания цифровой подписи представлен ниже:

            byte[] data = Encoding.Default.GetBytes("Encrypted text");

            ECDsaCng ecDsaCng = new ECDsaCng();

            byte[] sign = ecDsaCng.SignData(data);

            MessageBox.Show(Convert.ToBase64String(sign));

После того как мы запустим нашу программу в компиляцию, можно получить цифровую подпись ECDsa:

Рис.2.

 

Литература:

1.     Библиотека MSDN Library for Visual Studio 2008

2.     D. Brown Generic groups, collision resistance, and ECDSA. «Codes and Cryptography»