WireGuard
WireGuard — коммуникационный протокол и бесплатное программное обеспечение с открытым исходным кодом, который реализует зашифрованные виртуальные частные сети (VPN). Он был разработан для простого использования технологии VPN, высокой производительности и низкой поверхности атаки[3]. WireGuard нацелен на лучшую производительность и большую мощность, чем IPsec и OpenVPN, два других распространенных протокола туннелирования[4]. Протокол WireGuard передаёт трафик по протоколу UDP[5].
В марте 2020 года версия программного обеспечения для Linux достигла стабильного производственного выпуска и была включена в ядро Linux 5.6, а также была перенесена на более ранние ядра Linux в некоторых дистрибутивах Linux. Компоненты ядра Linux распространяются под лицензией GNU General Public License 2-й версии (GPLv2). Другие реализации также находятся под GPLv2 или другими бесплатными лицензиями с открытым исходным кодом[3].
Общие сведения
| WireGuard | |
|---|---|
| Тип | виртуальная частная сеть |
| Автор | Джейсон А. Доненфельд |
| Разработчик | Джейсон А. Доненфельд |
| Написана на |
C (Linux, модули ядра FreeBSD, NetBSD, драйверы ядра OpenBSD), Go (реализация пользовательского интерфейса) |
| Операционные системы | Linux, Android, iOS, FreeBSD, NetBSD, OpenBSD, macOS и Microsoft Windows |
| Первый выпуск | 2015[1] |
| Последняя версия | |
| Репозиторий | git.zx2c4.com/wireguard-… |
| Лицензия | cвободное и открытое программное обеспечение |
| Сайт | wireguard.com |
Протокол
WireGuard использует[6]:
- Curve25519 для обмена ключами
- ChaCha20 для симметричного шифрования
- Poly1305 для кодов аутентификации посланий
- SipHash для ключей хеш-таблицы
- BLAKE2s для криптографической хеш-функции
- Только на основе UDP[7]
В мае 2019 года исследователи из INRIA опубликовали проверенное машиной доказательство протокола WireGuard, созданное с помощью помощника по проверке CryptoVerif[8].
Дополнительный режим общего симметричного ключа
WireGuard поддерживает режим заранее установленного ключа совместного использования, который обеспечивает дополнительный уровень симметричного шифрования для предотвращения уязвимостей перед будущими достижениями в области квантовых вычислений. Это устраняет риск того, что трафик может храниться до тех пор, пока квантовые компьютеры не смогут взломать Curve25519. Как это произойдёт, трафик может быть расшифрован. Заранее установленные ключи совместного использования «обычно хлопотные с точки зрения управления ключами и могут быть украдены», но в краткосрочной перспективе, если симметричный ключ скомпрометирован, ключи Curve25519 по-прежнему обеспечивают более чем достаточную защиту[9].
Нетворкинг
WireGuard использует только UDP[10][6] из-за чего он не работает в сетях, которые блокируют UDP-трафик. Это отличает WireGuard от его альтернатив, таких как OpenVPN, из-за множества недостатков маршрутизации TCP-over-TCP[10].
WireGuard полностью поддерживает IPv6 как внутри, так и снаружи туннеля. Он поддерживает только третий уровень как для IPv4, так и для IPv6 и может инкапсулировать v4-in-v6 и наоборот[11].
WireGuard поддерживает несколько топологий:
- Точка-точка (сеть)
- Звезда (сервер/клиент)
- Конечную точку клиента не нужно определять до того, как клиент начнет отправлять данные
- Конечные точки клиента могут быть статически предопределены
- Mesh (сеть)
Поскольку WireGuard поддерживает сеть точка-точка, можно делать и другие топологии, но не в том же туннеле.
Расширяемость
WireGuard предназначен для расширения сторонними программами и скриптами. Расширенные функции WireGuard включают в себя: более удобные интерфейсы управления (включая более простую настройку ключей), ведение журнала, динамические обновления брандмауэра и интеграцию с LDAP.
Исключение таких сложных функций из минимальной кодовой базы повышает её стабильность и безопасность. Для обеспечения безопасности WireGuard ограничивает варианты реализации криптографических элементов управления, выбор процессов обмена ключами, а также сопоставляет алгоритмы с небольшим подмножеством современных криптографических примитивов. Если в каком-либо из примитивов обнаружена ошибка, может быть выпущена новая версия, которая устраняет проблему. Кроме того, непривилегированные пользователи не могут изменять параметры конфигурации, влияющие на безопасность всего приложения[12].