ANYKS
EN
в разработкеC++ · пространство имён nts

A-NTS — ANYKS Network Transport Security

Криптографическая библиотека и реализация TLS, написанная с листа по текстам стандартов: ни строчки из OpenSSL и BoringSSL. Отечественные алгоритмы, мировая классика и постквантовая стойкость — в одном коде. Станет основной библиотекой шифрования AWH.

01 Коротко

Полный защищённый транспорт, а не набор шифров

140 757строк самой библиотеки
1 053автоматические проверки
89RFC в журнале соответствия
0строк чужого криптографического кода
ИзданиеСтандартСостояние
TLS 1.3RFC 8446полностью, обе роли, билеты и 0-RTT
TLS 1.2RFC 5246полностью, включая PSK и билеты
DTLS 1.3RFC 9147залпы, окна, номера записей
DTLS 1.2 и 1.0RFC 6347сервер без состояния, HelloVerify
QUICRFC 9001рукопожатие по уровням, выдача секретов уровней
ECH и HPKERFC 9849 · 9180зашифрованное приветствие: имя сайта не видно наблюдателю

Внутри — свои X.509, ASN.1, OCSP, PEM, кодеки ключей и доверие цепочке. Библиотека не опирается ни на какую чужую часть: ни на разбор сертификатов, ни на арифметику больших чисел.

02 Алгоритмы

Три мира криптографии в одной библиотеке

Отечественные

КузнечикМагмаMGMСтрибог-256Стрибог-512ГОСТ Р 34.10-2012VKOTLSTREE

Полные наборы шифрования ГОСТ для TLS — в составе, а не отдельным провайдером.

Мировая классика

AES-GCMChaCha20-Poly1305X25519Ed25519ECDSARSASHA-2SHA-3BLAKE2Argon2HKDF

Связь с внешним миром без оговорок: наши узлы говорят с чужими серверами на общепринятых наборах.

Постквантовые

ML-KEM-512ML-KEM-768ML-KEM-1024X25519MLKEM768PQNoise

ML-KEM по FIPS 203 и гибридная группа в TLS — та же, что в браузерах. Перехваченное сегодня не расшифровывается завтра.

Умолчания связи — как у браузеров: гибрид X25519MLKEM768, AES-256-GCM, ECDSA. Наборы ГОСТ потребитель объявляет сам — как поддержку или как единственный вариант; порядок перечня и есть предпочтение.

03 Замеры

ГОСТ против ГОСТ: быстрее эталона

Сличать честно можно только одно и то же. На Astra Linux у OpenSSL подключён провайдер gostprov с теми же алгоритмами, на «Эльбрусе» — gost-engine: «Кузнечик» против «Кузнечика», подпись против подписи.

РаботаA-NTSЭталонИтог
Кузнечик-MGM48,514,2×3,4
Кузнечик-CTR110,566,9×1,65
Магма-MGM24,214,6×1,66
Магма-CTR50,245,5×1,10

МБ/с · Astra Linux 1.8.6, OpenSSL 3.4.0 с gostprov

  • Подпись ГОСТ Р 34.10-2012 — в 2,6–2,8 раза быстрее эталона ГОСТ, сличение подписи — в 1,8–2,2 раза, обмен ключами VKO — в 2,5 раза.
  • Против ассемблерного P-256 OpenSSL подпись ГОСТ быстрее на всех стендах в 2,0–2,3 раза, а сличение и обмен — не медленнее нигде.
  • Стрибог на «Эльбрусе» в 1,65 раза быстрее движка ГОСТ, на x86-64 вровень с его вариантом на SSE2.
04 Замеры

На мировых алгоритмах — вровень с OpenSSL

Против OpenSSL той же машины, с его машинными командами ускорения. Там, где эталон впереди, указано, насколько и почему.

  • ML-KEM-768 быстрее OpenSSL по всем трём действиям — на Apple M4 (0,48 / 0,64 / 0,52 времени эталона) и на x86-64.
  • Рукопожатие TLS 1.3 с умолчаниями — вровень с эталоном на M4, FreeBSD и Windows.
  • Записи TLS на M4 — быстрее эталона на пакетах по 1 200 байт.
  • Случайные байты — быстрее RAND_bytes в 6 раз на M4 и в 11–46 раз на x86-64.

Где ещё уступаем

  • RSA — в 2,2–3,1 раза: остаток в ядре умножения Монтгомери, ассемблер запланирован.
  • Poly1305 на M4 — в 1,56 раза против ручного расписания OpenSSL.
  • AES-GCM на больших буферах x86-64 — в 1,27 раза.

У «Кузнечика» и «Стрибога» машинных команд нет ни на одном процессоре; поэтому против AES с аппаратным ускорением разрыв велик, а без ускорения — лишь 1,3–1,9 раза.

05 Эльбрус

Родная сборка под «Эльбрус»

Библиотека собирается компилятором lcc и работает на Эльбрус-8С2. Векторные ветви x86-64 открыты и под e2k: lcc переводит их в свои 128-разрядные команды. Эталон здесь — OpenSSL 1.1.1n без ассемблера под e2k, и сличение честнее, чем на x86 и ARM.

РаботаA-NTSOpenSSLИтог
ChaCha20, МБ/с651122×5,3
ChaCha20-Poly1305, МБ/с428109×3,9
ECDH P-256, раз/с1 469256×5,7
Подпись ГОСТ, раз/с15 8206 186 (gost-engine)×2,6
AES-256-GCM, МБ/с6082×0,73
06 Сверх TLS

То, чего нет почти ни у кого

Noise, WireGuard, PQNoise

Полная ревизия каркаса Noise и тринадцать узоров рукопожатий — основание для собственных защищённых протоколов помимо TLS. Кадры WireGuard сходятся с эталоном байт в байт. Постквантовый Noise с гибридным механизмом ключей.

Мелочи, на которых ломается совместимость

Отпечатки приветствия, GREASE, сжатие цепочки сертификатов, сшивка ответа OCSP, пределы длины записи, метки времени сертификата, ALPS. Без этого чужой сервер просто не отвечает — поэтому всё это есть.

07 Правильность

Сверено с теми, кого заменяем

Официальные векторы

  • RFC 8448 на рукопожатие TLS 1.3
  • FIPS 202 и FIPS 203 на SHA-3 и ML-KEM
  • отказные векторы BoringSSL на постквант

Живой обмен

  • рукопожатие с настоящими openssl s_server и s_client
  • замороженные корпуса записей OpenSSL 3.0 и 3.3
  • кадры WireGuard против эталона

Журнал соответствия

Отдельный документ: требование стандарта → место в коде → проверка. Требование без проверки считается непроверенным, даже если код на вид ему отвечает.

  • Аудит кругами до нулевой находки. Независимые проходы по зонам кода; каждая находка закрепляется проверкой, чтобы не вернуться.
  • Ворошитель с заданным зерном. Искажение любого байта потока связи не устанавливает; находка воспроизводима.
  • Постоянное время. Секретные действия идут без ветвлений по секрету.
  • Слабое отвергается. Подписи SHA-1 и MD5, ключи RSA короче 2048 разрядов не принимаются вовсе.
08 Сборка

Один CMake и один компилятор

У OpenSSL в основании сборки Perl, у BoringSSL — Go и собственный CMake. Здесь нет ни того, ни другого. Для закрытого контура это не мелочь: чем меньше инструментов надо завезти и аттестовать, тем быстрее система проходит приёмку.

Компиляторы от g++ 10 до g++ 16 и clang — без единого предупреждения сборки; на «Эльбрусе» — lcc.

macOSFreeBSDNetBSDOpenBSDAlpineDebianAstra LinuxSolarisOpenIndianaWindowsЭльбрусx86-64ARM64e2k
09 План

Что дальше

Производительность

Ядра Монтгомери на ассемблере для RSA, ядра на восемь слов для ГОСТ-512 под x86-64 и «Эльбрус», интринсики e2k.

Постквантовые подписи

ML-DSA и SLH-DSA, постквантовый HPKE — вровень с OpenSSL 4.

Под SSH и связь

Обмен DH по p и g, sntrup761, ключи openssh-key-v1; DTLS 1.3 против эталона OpenSSL 4.1, журнал ключей.

Где работает: в AWH — HTTPS, WebSocket, QUIC и HTTP/3 своим кодом от начала до конца; в умном контейнере Crisper — шифрование файлов на нескольких получателей и подпись автора; в ABS — хранилище с нулевым знанием.