Разработчики VPN WireGuard представили новую криптографическую библиотеку Zinc
Как сообщает opennet.ru для включения в основной состав ядра Linux предложены патчи с реализацией VPN-интерфейса от проекта WireGuard, который развивается последние три года, прошел аудит применяемых методов шифрования и хорошо зарекомендовал себя в ряде крупных внедрений, обрабатывающих большие объемы трафика. До сих пор WireGuard поставлялся в виде отдельного модуля к ядру, но сейчас разработчики считают, что проект достиг готовности для включения в основное ядро. WireGuard сочетает применение проверенных современных методов шифрования с предоставлением минималистичной реализации, очень быстрой, простой в использовании и лишенной усложнений. Подробнее о проекте можно прочитать в первом анонсе.
Обновленная реализация WireGuard примечательна созданием новой криптографической библиотеки Zinc, в которую вынесены все применяемые проектом криптоалгоритмы. Отмечается, что при разработке создатели Zinc попытались избежать усложнений и на основе написанных для WireGuard криптографических примитивов подготовили решение, которое было бы меньше библиотеки, но больше просто набора файлов с кодом.
Zinc предлагает криптографический API, более минималистичный и низкоуровневый, чем текущее crypto API ядра. Zinc может дополнить текущий crypto API, предоставить основу для его реализации и со временем вытеснить его. Zinc предоставляет готовый к применению, протестированный и верифицированный набор криптографических примитивов, код которых собран в одном месте и представлен как lib/zinc/ (без выноса ассемблерного кода в arch/). Код оптимизирован для достижения высокой производительности и автоматически задействует инструкции SIMD для ускорения вычислений.
Из основных принципов построения нового API отмечается желание избежать лишних высокоуровневых абстракций, которые становятся источником проблем при некорректном использовании разработчиками. В Zinc предоставляется только простой набор готовых функций, которые можно применять только по прямому назначению без неоднозначных трактовок.
В текущем виде предлагаются следующие криптографические примитивы:
- Потоковые шифры ChaCha20 и HChaCha20 (реализованы оптимизации для x86_64 SSSE3, x86_64 AVX-2, x86_64 AVX-512F, x86_64 AVX-512VL, ARM NEON, ARM64 NEON, MIPS);
- Алгоритм аутентификации сообщений (MAC) Poly1305 (оптимизации x86_64, x86_64 AVX, x86_64 AVX-2, x86_64 AVX-512F, ARM NEON, ARM64 NEON, MIPS, MIPS64);
- Протокол Диффи-Хеллмана на эллиптических кривых в реализации Curve25519, используемый для генерации совместного секретного ключа (оптимизации x86_64 BMI2, x86_64 ADX, ARM NEON);
- Алгоритм хэширования BLAKE2s (RFC7693) (оптимизации x86_64 AVX, x86_64 AVX-512VL);
- Механизмы аутентифицированного шифрования ChaCha20-Poly1305 и XChaCha20-Poly1305.