Существуют аналоги криптосистемы Эль-Гамаля, в которых вместо проблемы дискретного логарифма в мультипликативных полях используется проблема дискретного логарифма в группах точек эллиптических кривых над конечными полями (обычно $GF(p)$ либо $GF(2^n)$). Математическое описание данных полей приведено в разделе 16.7. Нас же интересует следующий факт: для группы точек эллиптической кривой над конечным полем ${\mathbb{E}}$ существует быстро выполнимая операция – умножение целого числа $x$ на точку $A$ (суммирование точки самой с собой целое число раз):
И получение исходной точки $A$ при известных $B$ и $x$ («деление» точки на целое число), и получение целого числа $x$ при известных $A$ и $B$ являются сложными задачами. На этом и основаны алгоритмы шифрования и электронной подписи с использованием эллиптических кривых над конечными полями.
Схема ECIES (англ. Elliptic Curve Integrated Encryption Scheme) является частью сразу нескольких стандартов, в том числе ANSI X9.63, IEEE 1363a, ISO 18033-2 и SECG SEC 1. Эти стандарты по-разному описывают выбор параметров схемы [66]:
К параметрам относится выбор группы точек над эллиптической кривой ${\mathbb{E}}$, а также некоторой большой циклической подгруппы ${\mathbb{G}}$ в группе ${\mathbb{E}}$, задаваемой точкой-генератором $G$. Мощность циклической группы обозначается $n$.
Предположим, что в нашем сценарии Алиса хочет послать сообщение Бобу. У Алисы есть открытый ключ Боба $P_B$, а у Боба – соответствующий ему закрытый ключ $p_B$. Для отправки сообщения Алиса также сгенерирует временную (англ. ephemeral) пару из открытого ($P_A$) и закрытого ($p_A$) ключей. Закрытыми ключами являются некоторые натуральные числа, меньшие $n$, а открытыми ключами являются произведения закрытых на точку-генератор $G$:
В процессе расшифрования Боб последовательно получает общий секрет $s = p_b \times P_A$, ключи шифрования $k_{ENC}$ и имитовставки $k_{MAC}$, вычисляет тэг сообщения и сверяет его с полученным тэгом. В случае совпадения вычисленного и полученного тэгов Боб расшифровывает исходное сообщение $m$ из шифртекста $c$ с помощью ключа шифрования $k_{ENC}$.
Пусть имеются две стороны $A$ и $B$ и канал связи между ними. Сторона $A$ желает передать сообщение $M$ стороне $B$ и подписать его. Сторона $B$ должна проверить правильность подписи, то есть аутентифицировать сторону $A$.
$A$ формирует открытый ключ следующим образом.
Теперь сторона $A$ создаёт свою цифровую подпись $S(M)$ сообщения $M$, выполняя следующие действия.
Сторона $A$ передаёт стороне $B$ сообщение с подписью
Сторона $B$ проверяет подпись $(r,s)$, выполняя процедуру проверки подписи.
Рассмотрим вычислительную сложность вскрытия подписи. Предположим, что криптоаналитик ставит своей задачей определение закрытого ключа $d$. Как известно, эта задача является трудной. Для подтверждения этого можно привести такой факт. Был поставлен следующий эксперимент: выбрали число $p = 2^{97}$ и 1200 персональных компьютеров, которые работали над этой задачей в 16 странах мира, используя процессоры с тактовой частотой 200 МГц. Задача была решена за 53 дня круглосуточной работы. Если взять $p = 2^{256}$, то на решение такой задачи при наличии одного компьютера с частотой процессора 2 ГГц потребуется $10^{22}$ лет.
Схема цифровой подписи EdDSA использует эллиптическую кривую, представленную в скрученной форме Эдвардса (см. раздел 16.7.4). В данной схеме используются следующие параметры:
Параметр $l$ должен быть достаточно большим, чтобы $\rho$-метод Полларда для дискретного логарифмирования требовал большого количества операций для вычисления «логарифма» – не менее $\sqrt{l \pi / 4}$ сложений точек в группе. Рекомендуется, чтобы значение $l$ превышало $2^{200}$ – для получения не менее $\approx 2^{99{,}8}$ сложений точек в $\rho$-методе Полларда.
В качестве закрытого ключа каждый участник выбирает некоторую $b$-битовую строку $k$. Данная строка хешируется выбранной криптографической хеш-функцией $H$, после чего последние $b$-бит трактуются как целое число в кодировке little endian $s$ и формируется открытый ключ $A \in E$:
Электронная цифровая подпись $(R, S)$ вычисляется следующим образом:
Для валидации подписи получатель, знающий параметры схемы и открытый ключ отправителя $A$, проверяет выполнение равенства:
Корректность схемы можно проверить через раскрытие значения $S$:
Ed25519 задаёт конкретные параметры схемы EdDSA следующим образом ([45]):
Выбранная группа точек бирационально эквивалентна группе точек над эллиптической кривой в форме Монтгомери Curve25519 ([12]). Выбранная базовая точка также соответствует базовой точке, предложенной для Curve25519. Так как сложения в скрученной форме Эдвардса выполняются быстрее, чем в форме Вейерштрасса и в форме Монтгомери, группу Ed25519 можно использовать для ускорения вычислений в тех случаях, когда в качестве параметров выбрана группа точек кривой Curve25519.
Схема EdDSA с параметрами Ed25519 используется ([101]) в защищённых сетевых протоколах (SSH, I2P, IPSec, Tor), криптографических библиотеках (GnuPG, Java 15 JCE, OpenSSH 6.5) и стандартах (S/MIME 4.0).