Открыть сервис

Noise Protocol Framework

Noise Protocol Framework (шумовой протокольный фреймворк) — это криптографический каркас для построения защищённых протоколов связи, основанный на комбинациях асимметричного шифрования (Diffie-Hellman), симметричного шифрования и хеш-функций. Разработан Тревором Перрином (Trevor Perrin) и опубликован в 2014 году. Noise не является готовым протоколом, а предоставляет набор правил и шаблонов (handshake patterns), из которых разработчик может собрать собственный протокол, гарантирующий конфиденциальность, целостность и аутентификацию передаваемых данных.

История

Идея Noise возникла как попытка упростить и стандартизировать процесс создания криптографических протоколов, избежав при этом сложности и избыточности таких решений, как TLS (Transport Layer Security) или IPsec. Тревор Перрин, известный также участием в разработке протокола Signal (используемого в мессенджере Signal), стремился создать минималистичный, но гибкий инструмент, который можно было бы легко аудировать и внедрять в различные приложения.

Первая спецификация Noise была опубликована в 2014 году. В 2018 году фреймворк был формализован в виде RFC 7748 (частично) и в 2020 году — в виде RFC 9180 (Hybrid Public Key Encryption), однако основная спецификация Noise остаётся в виде черновика (draft) и поддерживается сообществом. Noise быстро привлёк внимание разработчиков мессенджеров, VPN-решений, блокчейн-проектов и систем Интернета вещей (IoT) благодаря своей простоте и высокой производительности.

Основные принципы

Noise Protocol Framework базируется на нескольких ключевых концепциях:

  • Минимализм: протокол использует только три криптографические примитива — функцию Diffie-Hellman (DH), хеш-функцию (HASH) и симметричное шифрование (AEAD). Все остальные операции (например, генерация ключей, проверка подписей) строятся на их основе.
  • Композиция: рукопожатие (handshake) состоит из последовательности раундов DH-обменов, перемежающихся с обновлением состояния (state). Каждый раунд может включать отправку открытого ключа, эфемерного ключа или их комбинации.
  • Идентификация: протокол не требует централизованной инфраструктуры сертификатов (PKI). Аутентификация сторон может быть статической (на основе долговременных ключей) или эфемерной (на основе временных ключей, создаваемых на сеанс).
  • Секретность: Noise обеспечивает совершенную прямую секретность (PFS) — компрометация долговременного ключа не позволяет расшифровать ранее перехваченные сеансы, так как каждый сеанс использует уникальные эфемерные ключи.

Структура протокола

Протокол в Noise описывается двумя компонентами:

1. Шаблон рукопожатия (Handshake Pattern)

Шаблон определяет последовательность сообщений, которыми обмениваются стороны, и типы ключей, используемых на каждом шаге. Каждый шаг может быть:

  • e — отправка эфемерного открытого ключа;
  • s — отправка статического открытого ключа;
  • ee — DH-обмен между эфемерными ключами;
  • es — DH-обмен между эфемерным и статическим ключами;
  • se — DH-обмен между статическим и эфемерным ключами;
  • ss — DH-обмен между статическими ключами.

Примеры базовых шаблонов:

  • Noise_N: односторонняя аутентификация инициатора (инициатор отправляет свой статический ключ, но не получает ключ ответчика). Обеспечивает только аутентификацию инициатора.
  • Noise_KK: взаимная аутентификация с использованием статических ключей обеих сторон. Обе стороны знают статические ключи друг друга заранее.
  • Noise_IK: инициатор знает статический ключ ответчика, но ответчик не знает ключ инициатора. Инициатор отправляет свой статический ключ в первом сообщении.
  • Noise_XX: взаимная аутентификация без предварительного знания ключей. Обе стороны отправляют свои статические ключи в процессе рукопожатия.

2. Криптографические примитивы (Cipher Suite)

Разработчик выбирает конкретные алгоритмы для каждого из трёх примитивов:

Комбинация этих примитивов называется «набором шифров» (cipher suite). Noise поддерживает до 255 различных наборов, но на практике используются 2-3 наиболее распространённых.

Процесс рукопожатия

Рукопожатие в Noise состоит из трёх фаз:

  1. Инициализация: каждая сторона создаёт локальное состояние (state), включающее буфер для хеша, цепочку ключей (chaining key) и временные ключи.
  2. Обмен сообщениями: стороны поочерёдно отправляют друг другу сообщения, содержащие открытые ключи и/или DH-обмены. Каждое сообщение шифруется с использованием текущего сеансового ключа.
  3. Финализация: после завершения всех раундов рукопожатия стороны получают общий сеансовый ключ (session key), который используется для симметричного шифрования последующих данных (транспортный режим).

Важно, что Noise не требует отдельного этапа подтверждения (confirmation) — аутентификация встроена в сам процесс DH-обменов.

Применение

Noise Protocol Framework нашёл широкое применение в различных областях:

  • Мессенджеры: протокол Signal (используемый в приложениях Signal, WhatsApp, Facebook Messenger — Meta признана экстремистской и запрещена в РФ) базируется на Noise. В России использование Signal и WhatsApp (продукт Meta, признанной экстремистской и запрещённой в РФ) не запрещено, но Meta (организация признана экстремистской, деятельность запрещена в РФ) признана экстремистской.
  • VPN-решения: WireGuard — один из самых популярных современных VPN-протоколов — полностью построен на Noise. WireGuard использует шаблон Noise_IK и набор шифров на основе Curve25519, ChaCha20-Poly1305 и BLAKE2s.
  • Блокчейн и криптовалюты: некоторые проекты, такие как Lightning Network (платёжный протокол поверх Bitcoin), используют Noise для установления защищённых каналов между узлами.
  • Интернет вещей (IoT): минималистичность Noise позволяет реализовывать протокол на устройствах с ограниченными ресурсами (микроконтроллеры, сенсоры).
  • Системы удалённого управления: SSH-подобные решения, например, noise-shell, используют Noise для аутентификации и шифрования.

Преимущества

  • Простота реализации: код Noise занимает всего несколько сотен строк на C или Rust, что упрощает аудит и снижает вероятность ошибок.
  • Высокая производительность: минимальное количество криптографических операций (обычно 2-3 DH-обмена) делает Noise быстрее TLS и IPsec.
  • Гибкость: разработчик может выбрать подходящий шаблон и набор шифров под конкретные требования (например, анонимность, взаимная аутентификация, предварительное знание ключей).
  • Совершенная прямая секретность: все стандартные шаблоны обеспечивают PFS.
  • Отсутствие централизованной инфраструктуры: не требуется сертификатов, центров сертификации или доверенных третьих сторон.

Недостатки и критика

  • Отсутствие встроенного управления ключами: Noise не предоставляет механизмов для распределения статических ключей или отзыва сертификатов. Разработчик должен реализовать это самостоятельно.
  • Сложность выбора шаблона: неправильный выбор шаблона может привести к уязвимостям (например, отсутствие аутентификации одной из сторон). Требуется глубокое понимание криптографии.
  • Ограниченная поддержка в стандартах: Noise не является стандартом ISO или IETF (хотя частично описан в RFC). Это может затруднить его внедрение в корпоративных или государственных системах.
  • Потенциальные атаки на реализацию: как и любой криптографический протокол, Noise уязвим к атакам на реализацию (например, timing attacks), если разработчик не соблюдает рекомендации по безопасному кодированию.

Примеры реализации

  • WireGuard: использует шаблон Noise_IK и набор шифров Curve25519, ChaCha20-Poly1305, BLAKE2s. Обеспечивает аутентификацию на основе статических ключей и PFS.
  • Signal Protocol: использует модифицированный шаблон Noise_XX с дополнительными раундами для обмена ключами и поддержки предварительных ключей (prekeys).
  • noise-c: эталонная реализация на языке C, разработанная Тревором Перрином.
  • noise-rust: реализация на Rust, популярная в блокчейн-проектах.

Источники

  • Trevor Perrin. The Noise Protocol Framework (спецификация, версия 34, 2018).
  • Jason A. Donenfeld. WireGuard: Next Generation Kernel Network Tunnel (2017).
  • RFC 7748: Elliptic Curves for Security (2016).
  • RFC 9180: Hybrid Public Key Encryption (2022).
  • M. K. Agrawal et al. Noise Protocol: A Survey of Applications and Security Properties (2020).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →