Использование Curve25519 в ECDSA

в настоящее время я изучаю использование curve25519 для подписания. оригинальный дистрибутив и реализация Cвторая реализация C).

Бернштейн предлагает использовать ECDSA для этого, но я не смог найти никакого кода.

4 ответов


ECDSA определяется ANSI X9.62. Этот стандарт определяет вид кривых, на которых определяется ECDSA, включая подробные уравнения кривых, ключевые представления и так далее. Они не соответствуют Curve25519: часть оптимизаций, которые делают Curve25519 быстрее, чем стандартные кривые того же размера, полагаются на специальное уравнение кривой, которое не входит в X9.Формализм. Соответственно, не может быть никакой реализации ECDSA, которая и соответствует ANSI X9.62, и использует Curve25519. В практика, я не знаю никакой реализации алгоритма, подобного ECDSA, на Curve25519.

чтобы быть кратким, вы сами по себе. Возможно, вы захотите реализовать ECDSA над реализацией Curve25519, следуя X9.62 (существует проект 1998 года, который можно загрузить из нескольких мест, например здесь, или вы можете потратить сто долларов и получить подлинную версию 2005 от Techstreet). Но имейте в виду, что вы идете вне тщательно протоптанных тропинок анализируемая криптография; другими словами, я явно отрицаю какую-либо гарантию того, насколько безопасным будет этот вид ECDSA.

мой совет был бы придерживаться стандартных кривых (таких как NIST P-256). Обратите внимание, что, хотя Curve25519 быстрее, чем большинство кривых одинакового размера, меньшие стандартные кривые будут быстрее и все же обеспечат достаточную безопасность для большинства целей. NIST P-192, например, обеспечивает "96-битную безопасность", несколько похожую на 1536-битную RSA. Кроме того, стандартные кривые уже производительность порядка нескольких тысяч сигнатур в секунду на маленьком ПК, и мне трудно представить сценарий, где требуется больше производительности.


чтобы использовать Curve25519 для этого, вам нужно будет реализовать множество функций, которые AFAIK в настоящее время нигде не реализованы для этой кривой, что означало бы очень существенно в математику криптографии эллиптических кривых. Причина в том, что существующие функции отбрасывают координату "y" точки и работают только с координатой "x". Без координаты " y " точки P и-P выглядят одинаково. Это прекрасно для ECDH, для которого предназначен Curve25519, потому что |x (yG)| = |x (- yG)|. Но для ECDSA нужно вычислить aG + bP, а |aG + bP / вообще не равно |aG-bP|. Я изучил, что будет участвовать в расширении curve25519-donna для поддержки таких вычислений; это выполнимо, но далеко не тривиальная.

Так как вам больше всего нужна быстрая проверка, я рекомендую схема Рабина-Уильямса Бернштейна.


недавно я поделился библиотекой curve25519, которую я разработал некоторое время назад. Он размещен на https://github.com/msotoodeh и обеспечивает больше функциональности, более высокую безопасность, а также более высокую производительность, чем любая другая библиотека portable-C, с которой я тестировал. Он превосходит curve25519-donna почти в 2 раза на 64-битных платформах и почти в 4 раза на 32-битных целях.


сегодня, спустя много лет после того, как этот вопрос был задан, правильным ответом является схема подписи Ed25519.