ANSI X9.62
ANSI X9.62 — это американский национальный стандарт (American National Standard Institute), определяющий требования к реализации алгоритмов цифровой подписи на основе эллиптических кривых (Elliptic Curve Digital Signature Algorithm, ECDSA). Стандарт регламентирует математические основы, форматы ключей, параметры кривых, процедуры подписания и проверки, а также требования к безопасности для использования в финансовых и коммерческих приложениях. ANSI X9.62 является одним из ключевых документов, легитимизирующих применение криптографии на эллиптических кривых в сфере электронных платежей и документооборота.
История создания
Разработка стандарта началась в середине 1990-х годов в рамках деятельности комитета ANSI X9 (Financial Services), который занимается стандартизацией в финансовой сфере. Основной целью было создание универсального и безопасного механизма цифровой подписи, альтернативного традиционным алгоритмам RSA (Rivest–Shamir–Adleman) и DSA (Digital Signature Algorithm), но с меньшей длиной ключа при сопоставимом уровне стойкости. Первая версия стандарта была опубликована в 1998 году. Впоследствии документ неоднократно пересматривался: в 2005 году вышла версия ANSI X9.62-2005, а в 2019 году — ANSI X9.62-2019, которая является действующей на 2024 год. Параллельно с ANSI X9.62 разрабатывались международные стандарты ISO/IEC 14888-3 и национальные стандарты других стран, включая российский ГОСТ Р 34.10-2012, который также использует эллиптические кривые, но с иными параметрами и алгоритмами.
Основные положения
Математические основы
ANSI X9.62 базируется на теории эллиптических кривых над конечными полями. В стандарте рассматриваются два типа полей:
- Простые поля \( GF(p) \), где \( p \) — большое простое число.
- Поля характеристики 2 \( GF(2^m) \), где \( m \) — натуральное число.
Для каждого типа поля определены допустимые параметры кривой: коэффициенты \( a \) и \( b \) уравнения \( y^2 = x^3 + ax + b \) (для \( GF(p) \)) или \( y^2 + xy = x^3 + ax^2 + b \) (для \( GF(2^m) \)), а также базовая точка \( G \) и её порядок \( n \). Стандарт требует, чтобы порядок \( n \) был простым числом и не делился на характеристику поля.
Процедуры подписания и проверки
Алгоритм ECDSA, описанный в ANSI X9.62, состоит из трёх этапов:
- Генерация ключей: выбирается секретный ключ \( d \) (случайное число из интервала \( [1, n-1] \)), вычисляется открытый ключ \( Q = dG \).
- Подписание: для сообщения \( m \) вычисляется хеш-значение \( e = H(m) \), генерируется случайное число \( k \), вычисляется точка \( (x_1, y_1) = kG \), затем \( r = x_1 \mod n \) и \( s = k^{-1}(e + dr) \mod n \). Подпись — пара \( (r, s) \).
- Проверка: проверяется, что \( r \) и \( s \) находятся в допустимом диапазоне, вычисляется \( e = H(m) \), затем \( w = s^{-1} \mod n \), \( u_1 = ew \mod n \), \( u_2 = rw \mod n \), точка \( (x_1, y_1) = u_1G + u_2Q \). Подпись считается верной, если \( r \equiv x_1 \mod n \).
Форматы ключей и подписей
Стандарт определяет несколько форматов представления:
- Открытый ключ: может храниться в сжатом (только координата \( x \) и бит чётности \( y \)) или несжатом виде (обе координаты \( x \) и \( y \)).
- Подпись: обычно представляется в виде последовательности байтов, содержащей два целых числа \( r \) и \( s \), каждое длиной, равной длине порядка \( n \) в байтах.
Требования к безопасности
ANSI X9.62 устанавливает минимальные требования к длине ключей и параметрам кривых. Для обеспечения стойкости на уровне 112 бит (эквивалент ключа RSA 2048 бит) рекомендуется использовать кривые с порядком \( n \) длиной не менее 224 бит. Для более высоких уровней стойкости (128, 192, 256 бит) — соответственно 256, 384 и 512 бит. Стандарт также требует, чтобы кривая была криптостойкой: не содержала аномальных точек, имела большой простой порядок и не допускала атак на основе спаривания (pairing attacks).
Классификация и варианты
ANSI X9.62 не является единственным стандартом ECDSA, но он признан базовым для финансового сектора США. Существуют следующие модификации и связанные стандарты:
- ANSI X9.63 — расширение для протоколов обмена ключами на эллиптических кривых (ECKA, ECMQV).
- ISO/IEC 14888-3 — международный стандарт, включающий ECDSA как один из механизмов цифровой подписи.
- FIPS 186-5 — федеральный стандарт США, который также содержит спецификацию ECDSA, но с некоторыми отличиями в требованиях к генерации случайных чисел.
- ГОСТ Р 34.10-2012 — российский стандарт, использующий эллиптические кривые, но с другим алгоритмом (ECGOST) и иными параметрами.
Применение
ANSI X9.62 широко используется в следующих областях:
- Электронные платежи: подписание транзакций в системах EMV (Europay, Mastercard, Visa), в частности для карт с чипом и бесконтактных платежей.
- Криптовалюты: алгоритм ECDSA, основанный на ANSI X9.62, применяется в Bitcoin, Ethereum и многих других блокчейн-системах для подписания транзакций и управления адресами.
- Цифровые сертификаты: стандарт X.509 поддерживает использование ECDSA для подписи сертификатов, что регламентируется документами RFC 3279 и RFC 5480.
- Безопасность документооборота: подписание электронных документов в системах электронного документооборота (ЭДО) в США и других странах, где ANSI X9.62 признан национальным стандартом.
Критика и ограничения
Несмотря на широкое распространение, ANSI X9.62 подвергается критике по нескольким направлениям:
- Сложность реализации: корректная реализация ECDSA требует строгого соблюдения правил генерации случайных чисел \( k \). Утечка или повторное использование \( k \) приводит к полной компрометации секретного ключа (как это произошло в случае с Sony PlayStation 3 в 2010 году).
- Отсутствие постквантовой стойкости: алгоритмы на эллиптических кривых уязвимы перед атаками с использованием квантовых компьютеров (алгоритм Шора). В связи с этим ведутся работы по созданию постквантовых стандартов (например, CRYSTALS-Dilithium).
- Совместимость: разные реализации могут использовать различные форматы кодирования ключей (сжатый/несжатый, DER, PEM), что иногда приводит к проблемам интероперабельности.
- Юридические ограничения: в некоторых странах, включая Россию, использование зарубежных криптографических стандартов в государственных информационных системах запрещено или ограничено. В России для цифровой подписи обязателен ГОСТ Р 34.10-2012.
Интересные факты
- Стандарт ANSI X9.62 стал основой для алгоритма, используемого в Bitcoin. Однако разработчики Bitcoin выбрали конкретную кривую secp256k1, которая не входит в перечень рекомендованных ANSI X9.62 (стандарт рекомендует кривые семейства P-256, P-384, P-521), но удовлетворяет всем его математическим требованиям.
- В 2013 году в реализации OpenSSL была обнаружена уязвимость, связанная с неправильной проверкой подписи ECDSA, что позволяло подделать подпись для произвольного сообщения. После исправления стандарт был уточнён в части валидации точек на кривой.
- ANSI X9.62 является одним из немногих стандартов, который явно запрещает использование кривых с аномальными точками (то есть кривых, где число точек равно характеристике поля), так как они уязвимы для атаки Смарта-Семаева.
Источники
- ANSI X9.62-2019: Public Key Cryptography for the Financial Services Industry — The Elliptic Curve Digital Signature Algorithm (ECDSA).
- ISO/IEC 14888-3:2018: Information technology — Security techniques — Digital signatures with appendix — Part 3: Discrete logarithm based mechanisms.
- FIPS PUB 186-5: Digital Signature Standard (DSS), National Institute of Standards and Technology, 2023.
- RFC 3279: Algorithms and Identifiers for the Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile.
- ГОСТ Р 34.10-2012: Информационная технология. Криптографическая защита информации. Процессы формирования и проверки электронной цифровой подписи.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →