Безопасность
Noise Protocol Framework
Криптографический фреймворк для построения handshake-протоколов: DH + симметричное шифрование + аутентификация. Основа WireGuard, Lightning Network, WhatsApp.
Определение
Noise Protocol Framework — это спецификация для построения криптографических handshake-протоколов из набора базовых примитивов: Diffie-Hellman (Curve25519), симметричное AEAD-шифрование (ChaCha20-Poly1305 или AES-GCM) и hash-функция (SHA-256 / SHA-512 / BLAKE2). Создан Trevor Perrin в 2016 году. Открытый стандарт, текущая ревизия — Revision 34 (2018).
Цель — дать разработчикам proven-design «строительные блоки» для безопасных протоколов, чтобы не изобретать handshake заново и не повторять ошибки прошлых лет (Heartbleed, BEAST, POODLE — все были последствиями кастомных TLS-расширений).
Как работает
Noise задаёт «handshake patterns» — последовательности обмена сообщениями. Каждый паттерн — это набор букв, описывающих, какие действия делает каждая сторона:
e— отправить ephemeral public key.s— отправить static public key (зашифрованным, если уже есть ключ).ee,es,se,ss— Diffie-Hellman между указанными парами ключей.
Пример — паттерн Noise_IK (используется в WireGuard):
<- s (out-of-band: клиент знает static key сервера)
...
-> e, es, s, ss (initiator handshake)
<- e, ee, se (responder handshake)
После handshake обе стороны имеют общий симметричный ключ chain (выводится из хэша всех handshake-сообщений и DH-результатов). Дальше — application data шифруется AEAD c этим ключом и счётчиком nonce.
Семейство паттернов:
Noise_N— anonymous, только сервер аутентифицирован.Noise_K— known, mutual authentication из обоих static keys.Noise_I— interactive, mutual auth + identity protection.Noise_X— extended, дополнительные guarantees.Noise_NN,Noise_NK,Noise_NXи т.д. — комбинации.
Производительность: один handshake — это 2–4 DH-операции (~50µs на современном CPU) + один AEAD-encrypt. На порядок быстрее TLS 1.3 handshake.
Почему это важно для пользователя VPN
Noise — это «движок» под капотом WireGuard. Конкретно WireGuard использует Noise_IK для handshake (initiator → responder, both authenticated by static keys). Это даёт WireGuard несколько ключевых свойств:
- Минимальный handshake — 2 сообщения (initiator + responder).
- Perfect Forward Secrecy. Сессионный ключ выводится из ephemeral DH, не из long-term. Компрометация static private key не раскрывает прошлые сессии.
- Identity hiding на стороне responder. Responder’а нельзя «спросить» — кто он. Without правильного static key initiator получит только handshake-failure без идентификации сервера.
- Малая cryptographic surface. WireGuard использует всего 4 примитива: Curve25519, ChaCha20-Poly1305, BLAKE2s, SipHash24. По объёму кода — на порядок меньше OpenSSL.
Помимо WireGuard, Noise используется:
- WhatsApp — для end-to-end-шифрования групповых сообщений (Signal Protocol использует расширенный Noise).
- Lightning Network — для шифрования каналов между нодами.
- Concordium / Aleo / Mina — ряд blockchain-протоколов для p2p messaging.
- I2P (исторически рассматривался для NTCP2-транспорта).
Юзеру: вы не настраиваете Noise напрямую. Но когда вы видите «WireGuard handshake», под капотом — это Noise_IK. Если вы read code WireGuard / AmneziaWG / Outline servers и видите функции вроде NoiseExpand, NoiseDH, NoiseHash — это framework Perrin’а.
Связанные термины
WireGuard — основной потребитель. Perfect Forward Secrecy — свойство, которое даёт Noise. AEAD — слой шифрования над handshake. ChaCha20 — конкретный шифр. TLS 1.3 — функционально похожий handshake.
Источники
- The Noise Protocol Framework — основная спецификация Trevor Perrin.
- WireGuard whitepaper (Donenfeld, 2017) — описание Noise_IK в контексте VPN.
- Signal Protocol documentation — расширения Noise для end-to-end-messaging.
- Dowling et al. — A Cryptographic Analysis of the WireGuard Protocol (ACNS 2018).