Wireguard на страже коммуникаций

Тенденции последних лет однозначны: не шифрованный трафик стал считаться, по крайней мере, дурным тоном. Об этом свидетельствует и рост доли HTTPS в web-трафике — по последним данным, эта доля превысила 66% — и то, что сайты, отвечающие по HTTP, характеризуются браузерами как небезопасные, и успех стандарта DNS-over-HTTPS, и усилия Electronic Frontier Foundation по защите трафика между почтовыми серверами. Шифрование стало сравнительно дёшево — аппаратная поддержка AES присутствует почти во всех сколь-нибудь мощных современных процессорах. Но по большей части шифрование осуществляется на уровне приложений, а не на уровне операционной системы. Обнародованные в начале августа 2018 года предложения разработчиков VPN, известного как Wireguard, могут запустить новый виток процесса по всеобщей защите трафика в сети.

Сами авторы характеризуют своё решение как попытку переизобрести протокол IPSec без «излишеств». Сам по себе IPSec — попытка сделать безопасную версию низкоуровнего протокола IP, где есть шифрование, аутентификацияю и подтверждение целостности передаваемых пакетов. Действительно, то, что изначальная спецификация этого протокола включает в себя 12 RFC, позволяет предположить, что не все возможности критичны, если ставить задачу предельного упрощения. Wireguard реализован для Linux, для BSD-систем, в том числе и для MacOS, для Android и для Windows. Используются сравнительно новые, но считающиеся надёжными алгоритмы — Curve25519 для обмена ключами, хеш-функция BLAKE2s, ChaCha20 и Poly1305 для шифрования и защиты трафика от искажений. Приняты меры против стандартных DoS и replay-атак. Протокол подвергнут формальной верификации, и простота дизайна сыграла в этом не последнюю роль.

Минимизация возможностей протокола позволила сделать очень хороший дизайн. Стоит отметить, например, что кодовая база Wireguard — около 4000 строк без учёта реализации криптографии, в то время, как, скажем, исходный код OpenVPN составляет около 100 000 строк. Малый объём кода позволил создателю протокола Джейсону Доненфельду (Jason Donenfeld) сделать следующий шаг — предложить набор патчей для интеграции Wireguard в ядро Linux. Даже если эта идея будет отвергнута, Wireguard всё равно можно будет инсталлировать в систему в качестве модуля ядра. При этом создаётся управляемый стандартным для Linux способом сетевой интерфейс. Кроме того, при переподключении к другой мобильной сети пользователю Wireguard не потребуется переустанавливать VPN-соединение.

Производительность нового решения заявлена вчетверо лучше, чем у OpenVPN, и это ожидаемо — Wireguard работает на уровне ядра операционной системы, что существенно сокращает накладные расходы на передачу данных. Разрыв в производительности с IPSec гораздо меньше — всего на 10-11%, а при более тщательном измерении было замечено, что этот разрыв еще меньше, и объясняется он отличием в протоколах передачи — разницу можно списать на экономию при шифровании нескольких байт на пакет.

Надо сказать, что криптографические эксперты пока скептически смотрят на предложения Wireguard, и основания для этого у них есть. Малый объём кода связан с тем, что реализована малая часть функциональности других VPN-решений — не важно, сравнивать ли с решениями на базе IPSec или с OpenVPN. А с неизбежным ростом функциональности вырастет и кодовая база. То, что спецификация фиксирует ровно один алгоритм шифрования, порождает вопрос, как будет осуществляться совместимость между различными версиями в случае необходимости замены используемых криптоалгоритмов — а этот момент рано или поздно настанет. Но то, что идея не отвергается с порога, означает, что вскоре мы можем увидеть подобное решение в ядре Linux. В конце концов, это может дать повод для отбрасывания лишней функциональности из криптопротоколов — именно этот подход уже применили при дизайне TLS 1.3.


Автор:  Дмитрий Белявский (ТЦИ)

Возврат к списку