EdDSA
В криптографических системах с открытым ключом, Edwards-curve Digital Signature Algorithm (EdDSA) — схема цифровой подписи использующая вариант схемы Шнора основанной на эллиптической кривой Эдвардса[1].
Она спроектирована так, чтобы быть быстрее по сравнению с существующей схемой цифровой подписи без ущерба для её безопасности. Она была разработана Дэниелом Дж. Бернштейном, Нильсом Дуйфом, Таней Ланге, Питером Швабе и Бо-Инь Яном к 2011 году.
Дизайн
Ниже приведено упрощённое описание EdDSA, не включающее в себя детали кодирования целых чисел и точек кривой как битовых строк. Полное описание и детали данной реализации цифровой подписи можно найти в документации и соответствующих RFC[2][3][1].
В EdDSA используются следующие параметры:
- Выбор конечного поля порядка q:
- Выбор эллиптической кривой E над полем чья группа из рациональных точек
имеющих порядок, где l — большое простое число, а 2^с называется кофактором - Выбор базовой точки с порядком l
- И выбор защищенной от коллизии хеш функции H с 2b-битными выходами, где 2^(b-1)>q так что элементы конечного поля и точек кривой в могли бы быть представлены в виде строки длиной b бит.
Эти параметры минимально необходимые для всех пользователей схемы подписи EdDSA. Безопасность подписи EdDSA очень сильно зависит от выбора параметров, за исключением произвольного выбора базовой точки. Например, ро-алгоритм Поларда для логарифма должен принимать примерно кривые, перед тем как сможет вычислить логарифм,[4] поэтому l должно быть достаточно большим, чтобы это было невозможно и обычно должно превышать 2^200.[5] Выбор l ограничен выбором q, так как по теореме Хассе не должно отличаться от q+1 больше чем на
В рамках схемы подписи EdDSA
- Публичный ключ
- Открытый ключ в схеме EdDSA это точка кривой , закодированная в b битах.
- Подпись
- Подпись EdDSA в сообщении M посредством открытого ключа A является парой (R,S), закодированная в 2b битах, точкой кривой и целым числом , удовлетворяющим уравнению проверки
- Закрытый ключ
- Закрытым ключом в схеме EdDSA называется b-битовая строка k, которая должна быть выбрана равномерно случайным образом. Соответствующий отрытый ключ в данном случае это , где , является наименее значимым b-битом H(k), интерпретируемым как целое число в прямом порядке байтов. Подпись сообщения M это пара (R,S) где R=rB для и . Это удовлетворяет уравнению проверки
Ed25519
Ed25519 — схема подписи EdDSA использующая SHA-512 и Curve25519[2] где:
- — эллиптическая кривая Эдвардса
- and
- — уникальная точка чья координата — , а координата — положительная(если говорить в терминах битового кодирования),
- — SHA-512, с .
Кривая бирационально эквивалентна кривой Монтгомери, известной как Curve25519. Эквивалентность[6][2]
Команда Бернштейна оптимизировала Ed25519 для семейства процессоров x86-64 Nehalem/Westmere. Верификация может быть выполнена пакетами по 64 цифровые подписи для ещё большей пропускной способности. Ed25519 предназначена для обеспечения сопротивления атакам, сопоставимых с качеством 128-битных симметричных шифров. Публичные ключи — 256 битные в длину, а подпись имеет размер в два раза больше.
В качестве функции безопасности Ed25519 не использует операции ветвления и шаги индексации массивов, которые зависят от секретных данных, для предотвращения атак по сторонним каналам.
Так же как и другие дискретно логарифмические схемы подписи, EdDSA использует секретное значение, называемое одноразовым номером, уникальным для каждой подписи. В схемах подписи DSA и ECDSA этот одноразовый номер традиционно генерируется случайно для каждой сигнатуры, и, если генератор случайных чисел сломан или предсказуем во время формирования подписи, подпись может слить приватный ключ, что и случилось с ключом подписи обновления прошивки для приставки Sony PlayStation 3[7][8]. По сравнению с ними, EdDSA выбирает одноразовые номера детерминировано, как хеш закрытого ключа и сообщения. Таким образом, однажды сгенерировав приватный ключ, EdDSA в дальнейшем не нуждается в генераторе случайных чисел для того, чтобы делать подписи, и нет никакой опасности, что сломанный генератор случайных чисел, используемый для создания цифровой подписи, раскроет приватный ключ.
Известные применения Ed25519 включают в себя OpenSSH,[9] GnuPG[10] и различные альтернативы, а также инструмент значений от OpenBSD.[11]
- Референтная реализация SUPERCOP[12] (язык Си с применением ассемблерных вставок)
- Медленная, но лаконичная альтернативная реализация, не включающая защиту от атак по сторонним каналам (Python)
- NaCl / libsodium[13]
- Протокол криптовалюты CryptoNote
- wolfSSL[14]
- I2Pd имеет собственную реализацию EdDSA[15]
- Minisign и Minisign Miscellanea для macOS[16]
- Virgil PKI использует Ed25519 ключи по умолчанию
- Botan
- Dropbear SSH с теста 2013.61
- OpenSSL 1.1.1 (поддержка TLS 1.3 и SHA3 в дополнение к X25519/Ed25519)
- Hashmap Server and Client (язык Go и Javascript)
- Libgcrypt