A-NTS — ANYKS Network Transport Security
Криптографическая библиотека и реализация TLS, написанная с листа по текстам стандартов: ни строчки из OpenSSL и BoringSSL. Отечественные алгоритмы, мировая классика и постквантовая стойкость — в одном коде. Станет основной библиотекой шифрования AWH.
Полный защищённый транспорт, а не набор шифров
| Издание | Стандарт | Состояние |
|---|---|---|
| TLS 1.3 | RFC 8446 | полностью, обе роли, билеты и 0-RTT |
| TLS 1.2 | RFC 5246 | полностью, включая PSK и билеты |
| DTLS 1.3 | RFC 9147 | залпы, окна, номера записей |
| DTLS 1.2 и 1.0 | RFC 6347 | сервер без состояния, HelloVerify |
| QUIC | RFC 9001 | рукопожатие по уровням, выдача секретов уровней |
| ECH и HPKE | RFC 9849 · 9180 | зашифрованное приветствие: имя сайта не видно наблюдателю |
Внутри — свои X.509, ASN.1, OCSP, PEM, кодеки ключей и доверие цепочке. Библиотека не опирается ни на какую чужую часть: ни на разбор сертификатов, ни на арифметику больших чисел.
Три мира криптографии в одной библиотеке
Отечественные
Полные наборы шифрования ГОСТ для TLS — в составе, а не отдельным провайдером.
Мировая классика
Связь с внешним миром без оговорок: наши узлы говорят с чужими серверами на общепринятых наборах.
Постквантовые
ML-KEM по FIPS 203 и гибридная группа в TLS — та же, что в браузерах. Перехваченное сегодня не расшифровывается завтра.
Умолчания связи — как у браузеров: гибрид X25519MLKEM768, AES-256-GCM, ECDSA. Наборы ГОСТ потребитель объявляет сам — как поддержку или как единственный вариант; порядок перечня и есть предпочтение.
ГОСТ против ГОСТ: быстрее эталона
Сличать честно можно только одно и то же. На Astra Linux у OpenSSL подключён провайдер gostprov с теми же алгоритмами, на «Эльбрусе» — gost-engine: «Кузнечик» против «Кузнечика», подпись против подписи.
| Работа | A-NTS | Эталон | Итог |
|---|---|---|---|
| Кузнечик-MGM | 48,5 | 14,2 | ×3,4 |
| Кузнечик-CTR | 110,5 | 66,9 | ×1,65 |
| Магма-MGM | 24,2 | 14,6 | ×1,66 |
| Магма-CTR | 50,2 | 45,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.
На мировых алгоритмах — вровень с 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 раза.
Родная сборка под «Эльбрус»
Библиотека собирается компилятором lcc и работает на Эльбрус-8С2. Векторные ветви x86-64 открыты и под e2k: lcc переводит их в свои 128-разрядные команды. Эталон здесь — OpenSSL 1.1.1n без ассемблера под e2k, и сличение честнее, чем на x86 и ARM.
| Работа | A-NTS | OpenSSL | Итог |
|---|---|---|---|
| ChaCha20, МБ/с | 651 | 122 | ×5,3 |
| ChaCha20-Poly1305, МБ/с | 428 | 109 | ×3,9 |
| ECDH P-256, раз/с | 1 469 | 256 | ×5,7 |
| Подпись ГОСТ, раз/с | 15 820 | 6 186 (gost-engine) | ×2,6 |
| AES-256-GCM, МБ/с | 60 | 82 | ×0,73 |
То, чего нет почти ни у кого
Noise, WireGuard, PQNoise
Полная ревизия каркаса Noise и тринадцать узоров рукопожатий — основание для собственных защищённых протоколов помимо TLS. Кадры WireGuard сходятся с эталоном байт в байт. Постквантовый Noise с гибридным механизмом ключей.
Мелочи, на которых ломается совместимость
Отпечатки приветствия, GREASE, сжатие цепочки сертификатов, сшивка ответа OCSP, пределы длины записи, метки времени сертификата, ALPS. Без этого чужой сервер просто не отвечает — поэтому всё это есть.
Сверено с теми, кого заменяем
Официальные векторы
- 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 разрядов не принимаются вовсе.
Один CMake и один компилятор
У OpenSSL в основании сборки Perl, у BoringSSL — Go и собственный CMake. Здесь нет ни того, ни другого. Для закрытого контура это не мелочь: чем меньше инструментов надо завезти и аттестовать, тем быстрее система проходит приёмку.
Компиляторы от g++ 10 до g++ 16 и clang — без единого предупреждения сборки; на «Эльбрусе» — lcc.
Что дальше
Производительность
Ядра Монтгомери на ассемблере для 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 — хранилище с нулевым знанием.