Для включения в основной состав ядра Linux предложены (https://lkml.org/lkml/2018/7/31/790) патчи с реализацией VPN-интерфейса от проекта WireGuard (https://www.wireguard.io/), который развивается последние три года, прошёл аудит применяемых методов шифрования и хорошо зарекомендовал себя в ряде крупных внедрений, обрабатывающих большие объёмы трафика. До сих пор WireGuard поставлялся в виде отдельного модуля к ядру, но сейчас разработчики считают, что проект достиг готовности для включения в основное ядро. WireGuard сочетает применение проверенных современных методов шифрования с предоставлением минималистичной реализации, очень быстрой, простой в использовании и лишенной усложнений. Подробнее о проекте можно прочитать в первом анонсе (https://www.opennet.ru/opennews/art.shtml?num=44695).
Обновлённая реализация WireGuard примечательна созданием (https://lkml.org/lkml/2018/8/1/136) новой криптографической библиотеки Zinc (https://git.kernel.org/pub/scm/linux/kernel/git/zx2c4/linux....), в которую вынесены все применяемые проектом криптоалгоритмы. Отмечается, что при разработке создатели Zinc попытались избежать усложнений и на основе написанных для WireGuard криптографических примитивов подготовили решение, которое было бы меньше библиотеки, но больше просто набора файлов с кодом.
Zinc предлагает криптографический API, более минималистичный и низкоуровневый, чем текущее crypto API ядра. Zinc может дополнить текущий crypto API, предоставить основу для его реализации и со временем вытеснить его. Zinc предоставляет готовый к применению, протестированный и верифицированный набор криптографических примитивов, код которых собран в одном месте и представлен как lib/zinc/ (без выноса ассемблерного кода в arch/). Код оптимизирован для достижения высокой производительности и автоматически задействует инструкции SIMD для ускорения вычислений.
Из основные принципов построения нового API отмечается желание избежать лишних высокоуровневых абстракций, которые становятся источником проблем при некорректном использовании разработчиками. В Zinc предоставляется только простой набор готовых функций, которые можно применять только по прямому назначению без неоднозначных трактовок.
В текущем виде предлагаются следующие криптографические примитивы:
- Потоковые шифры ChaCha20 (http://cr.yp.to/chacha.html) и HChaCha20 (https://cr.yp.to/snuffle/xsalsa-20081128.pdf) (реализованы оптимизации для x86_64 SSSE3, x86_64 AVX-2, x86_64 AVX-512F, x86_64 AVX-512VL, ARM NEON, ARM64 NEON, MIPS);
- Алгоритм аутентификации сообщений (MAC) Poly1305 (http://cr.yp.to/mac.html) (оптимизации x86_64, x86_64 AVX, x86_64 AVX-2, x86_64 AVX-512F, ARM NEON, ARM64 NEON, MIPS, MIPS64);
- Протокол Диффи-Хеллмана на эллиптических кривых в реализации Curve25519 (http://cr.yp.to/ecdh.html), используемый для генерации совместного секретного ключа (оптимизации x86_64 BMI2, x86_64 ADX, ARM NEON);
- Алгоритм хэширования BLAKE2s (RFC7693) (https://www.opennet.ru/opennews/art.shtml?num=35676) (оптимизации x86_64 AVX, x86_64 AVX-512VL);
- Механизмы аутентифицированного шифрования ChaCha20-Poly1305 и XChaCha20-Poly1305.
URL: https://lkml.org/lkml/2018/8/1/136
Новость: https://www.opennet.ru/opennews/art.shtml?num=49064