Ответ 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, не используйте этот
Содержит несколько вариантов, как сборки, так и c. Некоторые оптимизированы для 64 бит, некоторые оптимизированы для 32 бит.
Библиотеки
-
Библиотека C, в настоящее время использует реализацию
Ref10
Имеет привязки для многих языков программирования. Это, вероятно, самая популярная версия и то, что я рекомендую большинству людей.
Содержит кучу других криптографических функций из NaCl, такое аутентифицированное шифрование (XSalsa20Poly1305), хэши, ключ-обмен Curve25519.
-
C, использует реализацию
Ref10
.Наиболее интересной особенностью этой библиотеки является то, что она поддерживает обмен ключами с использованием открытых ключей Ed25519. Но это не hash общий ключ, поэтому он не создает тот же общий секрет, что и Curve25519.
Содержит предварительно созданные двоичные файлы для Win32 и Win64.
-
Мой Порт С#
Чистый управляемый код и работает без изменений на 32- и 64-разрядных платформах. На основании Ref10. Немного медленнее реализации c, но разница на удивление мала.
Поддерживает обмен ключами, совместимый с NaCl, используя ключ Curve25519 и Ed25519, и содержит кучу других криптографических функций из NaCl. Я нацелен на аналогичный набор функций, такой как LibSodium.
Функции подписки Ed25519 работают и видели разумное количество тестов, но другие части библиотеки немного грубые.
-
Непосредственно использование реализации из SUPERCOP или кода Floodyberry.
Вероятно, требуется немного больше работы для создания, но вы получите более высокую производительность (~ 2x) и не должны переносить код, который вам не нужен.
Я рекомендую пойти с LibSodium сейчас. Он относительно популярен и ухожен. Производительность является достойной, она должна вызывать только проблемы с производительностью в действительно тяжелых приложениях.