Сёння Лінус перанёс да сябе галінку net-next з VPN-інтэрфейсамі. WireGuard. Пра гэтую падзею паведамілі у спісе рассылання WireGuard.
У дадзены момант працягваецца збор кода для новага ядра Linux 5.6. WireGuard – хуткі VPN новага пакалення, у якім рэалізавана сучасная крыптаграфія. Ён першапачаткова распрацоўваўся як прасцейшая і зручная альтэрнатыва існуючым VPN. Аўтар - канадскі спецыяліст па інфармацыйнай бяспецы Джэйсан Даненфілд (Jason A. Donenfeld). У жніўні 2018 года WireGuard ганараваўся пахвалы ад Лінуса Торвальдса. Прыкладна ў той час пачалася праца па ўключэнні VPN у ядро Linux. Працэс крыху зацягнуўся.
«Бачу, што Джэйсан зрабіў пул-рэквест для ўключэння WireGuard у ядро, - пісаў Лінус 2 жніўня 2018 года. - Магу я проста яшчэ раз заявіць аб сваім каханні да гэтага VPN і спадзявацца на хуткае зліццё? Можа, код і не ідэальны, але я прагледзеў яго, і ў параўнанні з жахамі OpenVPN і IPSec, гэты сапраўдны твор мастацтва».
Нягледзячы на пажаданне Лінуса, зліццё зацягнулася на паўтара гады. Асноўная праблема апынулася ў прывязцы да ўласных рэалізацый крыптаграфічных функцый, якія прымяняліся для павышэння прадукцыйнасці. Пасля працяглых перамоваў у верасні 2019 года было прынята кампраміснае рашэнне перавесці патчы на наяўныя ў ядры функцыі Crypto API, да якіх у распрацоўнікаў WireGuard ёсць прэтэнзіі ў вобласці прадукцыйнасці і агульнай бяспекі. Але вырашылі натыўныя крыптафункцыі WireGuard вылучыць у асобны нізкаўзроўневыя Zinc API і з часам партаваць іх у ядро. У лістападзе распрацоўшчыкі ядра стрымалі абяцанне і пагадзіліся перанесці ў асноўнае ядро частка кода з Zinc. Напрыклад, у Crypto API ўключаны падрыхтаваныя ў WireGuard хуткія рэалізацыі алгарытмаў ChaCha20 і Poly1305.
У рэшце рэшт, 9 снежня 2019 года Дэвід Мілер (David S. Miller), які адказвае за сеткавую падсістэму ядра Linux, прыняў у склад галінкі net-next патчы з рэалізацыяй VPN-інтэрфейсу ад праекта WireGuard.
А сёння 29 студзеня 2020 года змены сышлі да Лінуса для ўключэння ў ядро.
Заяўленыя перавагі WireGuard над іншымі VPN рашэннямі:
Просты ў выкарыстанні.
Выкарыстоўвае сучасную крыптаграфію: Noise protocol framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF і г.д.
Кампактны чытэльны код, прасцей даследаваць на ўразлівасці.
Уся асноўная логіка WireGuard займае менш за 4000 радкоў кода, тады як OpenVPN і IPSec гэта сотні тысяч радкоў.
«У WireGuard прымяняецца канцэпцыя маршрутызацыі па ключах шыфравання, якая мае на ўвазе прывязку да кожнага сеткавага інтэрфейсу закрытага ключа і прымяненне для звязвання адкрытых ключоў. Абмен адчыненымі ключамі для ўсталёўкі злучэння вырабляецца па аналогіі з SSH. Для ўзгаднення ключоў і злучэнні без запуску асобнага дэмана ў прасторы карыстача ўжываецца механізм Noise_IK з Noise Protocol Framework, падобны на падтрыманне authorized_keys у SSH. Перадача даных ажыццяўляецца праз інкапсуляцыю ў пакеты UDP. Падтрымліваецца змена IP-адрасы VPN-сервера (роўмінг) без разрыву злучэння з аўтаматычнай пераналадкай кліента, піша Opennet.
Для шыфравання выкарыстоўваецца струменевы шыфр ChaCha20 і алгарытм аўтэнтыфікацыі паведамленняў (MAC) Poly1305, распрацаваныя Дэніэлам Бернштэйнам (Даніэль Дж. Бернштэйн), Таняй Ланге (Tanja Lange) і Пітэрам Швабэ (Peter Schwabe). ChaCha20 і Poly1305 пазіцыянуюцца як больш хуткія і бяспечныя аналагі AES-256-CTR і HMAC, праграмная рэалізацыя якіх дазваляе дабіцца фіксаванага часу выканання без задзейнічання спецыяльнай апаратнай падтрымкі. Для генерацыі сумеснага сакрэтнага ключа прымяняецца пратакол Дыфі-Хеллмана на эліптычных крывых у рэалізацыі Curve25519, таксама прапанаванай Дэніэлам Бернштэйнам. Для хэшавання выкарыстоўваюцца алгарытм BLAKE2s (RFC7693).
Канфігурацыя WireGuard: 256-бітны ChaCha20 з Poly1305 для MAC
Першая канфігурацыя IPsec: 256-бітны ChaCha20 з Poly1305 для MAC
Другая канфігурацыя IPsec: AES-256-GCM-128 (з AES-NI)
Канфігурацыя OpenVPN: эквівалентны шыфрабор 256-бітнага AES з HMAC-SHA2-256, рэжым UDP
Прадукцыйнасць замяралася з дапамогай iperf3, паказаны сярэдні вынік за 30 хвілін.
Тэарэтычна, пасля інтэграцыі ў сеткавы стэк WireGuard павінен працаваць яшчэ хутчэй. Але ў рэальнасці гэта не абавязкова будзе так з-за пераходу на ўбудаваныя ў ядро крыптаграфічныя функцыі Crypto API. Магчыма, не ўсе з іх яшчэ аптымізаваны да ўзроўню хуткадзейнасці натыўнага WireGuard.
«З майго пункту гледжання, WireGuard увогуле ідэальны для карыстальніка. Усе нізкаўзроўневыя рашэнні прыняты ў спецыфікацыі, таму працэс падрыхтоўкі тыповай VPN інфраструктуры займае ўсяго некалькі хвілін. Наблытаць у канфігурацыі практычна немагчыма, - распавядаў на Хабры ў 2018 годзе. - Працэс усталёўкі дэталёва апісаны на афіцыйным сайце, асобна хочацца адзначыць выдатную падтрымку OpenWRT. Такі прастаты выкарыстання і кампактнасці кодавай базы ўдалося дасягнуць за кошт адмовы ад дыстрыбуцыі ключоў. Тут няма складанай сістэмы сертыфікатаў і ўсяго гэтага карпаратыўнага жаху, кароткія ключы шыфравання распаўсюджваюцца прыкладна як SSH-ключы».
Праект WireGuard развіваецца з 2015 года, ён прайшоў аўдыт і фармальную верыфікацыю. Падтрымка WireGuard інтэграваная ў NetworkManager і systemd, а патчы для ядра ўваходзяць у базавы склад дыстрыбутываў Debian Unstable, Mageia, Alpine, Arch, Gentoo, OpenWrt, NixOS, Subgraph і ALT.