Какие существуют версии Ed25519?

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

Кто-нибудь знает о каких-либо зрелых, реализациях? Для Java,.NET или любой другой популярной платформы?

Ответы

Ответ 1

Curve25519 против Ed25519

Прежде всего, Curve25519 и Ed25519 не совсем то же самое. Они основаны на одной и той же базовой кривой, но используют разные представления. Большинство реализаций предназначены либо для Curve25519, либо для Ed25519, но есть возможность повторного использования некоторого кода между ними.

Можно конвертировать открытые ключи Ed25519 в Curve25519, но наоборот, пропускает знаковый бит. то есть два открытых ключа Ed25519 соответствуют одному открытому ключу Curve25519. Частные ключи тоже очень похожи.


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

Фактические реализации

реализация djb в SUPERCOP

  • Ref написанный c, очень медленный
  • djb Ref10 написан в c, достойная производительность
  • djb amd64-64-24k и amd64-51-30k, написанные на сборке, примерно в два раза быстрее, чем Ref10

Он также написал более ранний, несовместимый прототип в NaCl, не используйте этот

Внедрение Floodyberry donna

Содержит несколько вариантов, как сборки, так и c. Некоторые оптимизированы для 64 бит, некоторые оптимизированы для 32 бит.

Библиотеки

  • LibSodium

    Библиотека C, в настоящее время использует реализацию Ref10

    Имеет привязки для многих языков программирования. Это, вероятно, самая популярная версия и то, что я рекомендую большинству людей.

    Содержит кучу других криптографических функций из NaCl, такое аутентифицированное шифрование (XSalsa20Poly1305), хэши, ключ-обмен Curve25519.

  • Nightcracker Ed25519

    C, использует реализацию Ref10.

    Наиболее интересной особенностью этой библиотеки является то, что она поддерживает обмен ключами с использованием открытых ключей Ed25519. Но это не hash общий ключ, поэтому он не создает тот же общий секрет, что и Curve25519.

    Содержит предварительно созданные двоичные файлы для Win32 и Win64.

  • Мой Порт С#

    Чистый управляемый код и работает без изменений на 32- и 64-разрядных платформах. На основании Ref10. Немного медленнее реализации c, но разница на удивление мала.

    Поддерживает обмен ключами, совместимый с NaCl, используя ключ Curve25519 и Ed25519, и содержит кучу других криптографических функций из NaCl. Я нацелен на аналогичный набор функций, такой как LibSodium.

    Функции подписки Ed25519 работают и видели разумное количество тестов, но другие части библиотеки немного грубые.

  • Непосредственно использование реализации из SUPERCOP или кода Floodyberry.

    Вероятно, требуется немного больше работы для создания, но вы получите более высокую производительность (~ 2x) и не должны переносить код, который вам не нужен.


Я рекомендую пойти с LibSodium сейчас. Он относительно популярен и ухожен. Производительность является достойной, она должна вызывать только проблемы с производительностью в действительно тяжелых приложениях.

Ответ 2

Добавление в CodesInChaos ответ:

Библиотеки

  • Мой порт Java

    Основываясь на Ref 10 и предоставляет стандартные API JCA, поэтому его можно добавить к поставщику криптования.

Ответ 3

Самым зрелым и исполнительным является тот, который сам Даниэль Бернштейн написал. Его можно найти в SUPERCOP.

Однако API его довольно неудобен, и для получения того, что вы хотите, требуется довольно много копания/извлечение. Чтобы сохранить работу других людей, я сделал это сам и поместил свой код в Github.

Остерегайтесь ваших точных терминов, хотя Ed25519 и Curve25519 связаны, но разные вещи. Что вы должны знать, так это то, что Ed25519 является системой подписи с открытым/закрытым ключом, а Curve25519 - это обмен ключами. Ed25519 keypairs можно преобразовать в Curve25519 keypairs, наоборот, я не уверен. То, что делает моя библиотека в Github, - это все в клавиатурах Ed25519 и конвертировать в Curve25519 для обмена ключами.