Ресурсы: техническое описание TLS, LaTeX - в картинки (img), криптографическая библиотека Arduino, шифр "Кузнечик" на ассемблере AMD64/AVX и ARM64
OpenAI, следом за другими корпорациями в области AI/ИИ, предлагает “ИИ-агента”, который будет управлять компьютером пользователя при помощи рассматривания скриншотов и отправки команд через (виртуальные) клавиатуру и мышь. Тем самым, по мнению маркетинга OpenAI, агент будет автоматизировать типовые повторяющиеся пользовательские задачи, типа “бронирования отеля”. Непосредственно с компьютера пользователя, контролируя этот компьютер с центрального сервера по скриншотам. Такой вот “бот” для “ботнета” или новая Скрепка из MS Office.
То есть, если задуматься, то вот какое забавное развитие технологий силами ИИ-корпораций мы можем наблюдать, на примере “бронирования отеля”: с сервисом, доступным через Интернет, и находящимся в одном дата-центре, при помощи скриншотов браузерных окон взаимодействует сервис, потребляющий ресурсы в другом дата-центре.
При этом, заметьте, пользователю предлагается подтверждать действия ИИ-агента. Чтобы внести изменения в одном интерфейсе – пользователь подтверждает действия в другом интерфейсе, который специально надстроен над предыдущим, – через скриншоты, – но ещё и с использованием кучи вычислительных ресурсов в отдельном дата-центре. Попутно отправляются в этот дата-центр сведения о том, что делается в первом дата-центре, но через компьютер пользователя. Вспомните, что в браузере при этом работает какое-нибудь многомегабайтное “приложение” с Node.js, собранное из кучи “фреймворков”, в которой куче для раскрашивания одной кнопки в интерфейсе используется тысяча верхнеуровневых вызовов и два десятка внешних библиотек, и это всё без учёта работы операционной системы. Ну и ещё на стороне сервера системы бронирования всяких слоёв накручено аналогичным образом.
Предполагается, что “капчу” решает “ИИ-агент” самостоятельно, что забавно. На практике, наверное, будет переспрашивать пользователя.
Несомненно, код для сервиса бронирования – тоже будет переписан силами чат-бота с LLM.
Конечно, на строительство потребляемых дата-центров потребуются те самые “базиллионы вашингтонов” (денег, то есть).
Лет пятнадцать назад, в 2010 году, я писал про “суперизбыточные технологии”, на примере использования Google в качестве калькулятора:
Для проведения одной элементарной операции с целыми числами задействуется огромное число компьютеров: начинается всё на локальном ПК с браузером, выполняющим сотни тысяч арифметических операций (аналогичных по сложности исходной операции) для формирования http-запроса; дальше работают десятки маршрутизаторов, пересылающих пакеты, каждый из которых опять же выполняет сотни арифметических действий; пыхтит коммуникационное оборудование на более низких уровнях модели OSI, и это оборудование тоже много вычисляет, упаковывая пакеты в каналах, кодируя и декодируя данные; лишь потом приходит черёд серверов Google, которые запрашивают базы данных (потому что всё равно идёт поисковая выдача).
Что ж, теперь вычислить, сколько будет 3*7, при помощи Google, используя браузер в качестве проксирующего узла со скриншотами, сможет ИИ-агент OpenAI. В результате получится, скажем, 137, а пользователю будет предложено подтвердить, что ответ верный.
Комментировать »
В статье Ars Technica об очередном штатовском проекте ИИ Stargate “на сотни миллиардов”, ожидаемой целью которого заявлено создание AGI (что бы это ни значило), в соседних параграфах, на соседних строках удачно даны занятные цитаты из материалов OpenAI: [AGI] “превосходит людей в экономически наиболее ценной деятельности” и “инфраструктура […] создаст сотни тысяч американских рабочих мест”. В разных фантастических произведениях и в видеоиграх неоднократно описаны сеттинги, где каких-нибудь роботов, в изолированных “инфраструктурных объектах”, обучают массы людей, в этих “объектах” же запертые.
Комментировать »
Даниэль Бернштейн (Daniel J. Bernstein) опубликовал большую статью (англ.) с критикой некоторых возражений, относящихся к возможности создания универсальных квантовых компьютеров. Вообще, основной посыл статьи такой: нужно немедленно повсеместно внедрять постквантовую криптографию, потому что, исходя из анализа ситуации, не удаётся найти веских причин для уверенности в том, что АНБ уже не строит активно (или построило) квантовый компьютер, пригодный для практического криптоанализа.
В статье есть странный частный момент: в качестве примера, поясняющего, почему проблема огромного количества состояний, с которым должен работать квантовый компьютер, – это совсем не проблема, приводится работа обычного, классического компьютера с тысячей битов. То есть, обычный компьютер без труда может сгенерировать тысячу случайных битов, а потом провести с ними преобразование, которое изменит распределение вероятностей. Поэтому и тысяча кубитов, якобы, не создаёт теоретических проблем теоретическим квантовым компьютерам.
Бернштейн тут же прямо отмечает, что квантовые вычисления на кубитах это не то же самое, что и вычисления с обычными битами, но, тем не менее, подчёркивает, что практическая возможность обрабатывать отдельные состояния в тысячу битов любым классическим ноутбуком каким-то образом отменяет и проблему с огромной размерностью пространства состояний гипотетического квантового компьютера на тысячу кубитов. Цитата:
I’m not saying that computation on qubits is the same as computation on random bits. When you look at the details, you see that quantum computation allows a useful extra trick, setting up interference patterns between positive and negative variables. But an argument saying “quantum computing is impossible because there are so many variables” can’t be right: it also says that your laptop is impossible.
(“Я не утверждаю, что вычисление на кубитах это то же самое, что и вычисление на случайных битах. Если посмотреть детально, то можно увидеть, что квантовое вычисление позволяет провести дополнительный полезный трюк, задав схемы интерференции между положительными и отрицательными переменными. Однако аргумент, говорящий, что “квантовые вычисления невозможны, так как там настолько много переменных”, не может быть верным, поскольку этот же аргумент говорит, что ваш ноутбук невозможен.”)
Вообще, именно возможность “интерференции между переменными”, это не просто трюк, а она таки составляет смысл квантовых вычислений, которые, собственно, вычислениями, в привычном смысле, и не являются. Чтобы интерференция состояний стала возможной, логично допустить, что эти состояния где-то “должны размещаться”. То есть, это не обязательно так, не является необходимым условием. Потому что можно, скажем, посчитать, что соответствующие потоки вероятностей и составляют некоторую над-реальность, а наблюдается только её “срез”, вызванный представлением экспериментатора (возможны ли при этом квантовые вычисления – другой вопрос). Однако, сама идея, что для 2^1000 состояний используемые модели “квантовой механики” не работают, не только не выглядит нелогичной, но уж точно не разрушается возможностью обработать тысячу битов классическим ноутбуком: в классическом ноутбуке другие состояния битовой строки возникают как программное представление после выполнения преобразования, а не являются фундаментом физической реализации алгоритма в некотором аналоговом вычислителе.
Комментировать »
В самом начале этого года некоторые пользователи Apple шумели по поводу неожиданно и незаметно включившейся новой функции “Улучшенного визуального поиска” (Enhanced Visual Search), использование которой требует отправки информации об изображениях на серверы Apple, но, конечно, с “полным сохранением” “приваси” пользователей.
Тут интересно даже не то, что опять очень настойчиво привязывают к центральным серверам данные локальных устройств, но то, как хорошо это укладывается в очень модную канву ИИ-агентов. Эти ИИ-агенты, как утверждается, готовы решить кучу насущных задач активными действиями, вплоть до ведения переписки и телефонных переговоров от имени пользователя – типичный пример: запись автомобиля на автосервис. Но ИИ-агенты не могут полностью работать на устройстве – им не хватает вычислительной мощности, да и эта доступная мощность сильно различается на устройствах разных типов.
Поэтому агенты “должны использовать центральный сервер”, называемый “безопасным облаком”, чтобы выполнять полезные агентские функции: пересказывать сообщения из мессенждеров, читать почту, готовить ответы на сообщения и письма, просматривать фотографии и прослушивать разговоры (не только телефонные, конечно). Обработка сообщений, разговоров и фотографий проводится на устройстве. А чтобы лучше выполнять задачи, эти ИИ-агенты обязательно станут собирать информацию о пользователях, что забавно – непосредственно при помощи устройств, этими же пользователями приобретённых, – смартфонов, “умных колонок“, фитнес-браслетов и так далее, – но хоть агент и работает локально, он должен консультироваться с “большим ИИ”, чтобы проводить “поиск на центральных серверах”, потому что “ИИ нужны миллионы процессоров, а то оно не работает”.
Понятно, что ИИ-агент, размещённый непосредственно на устройстве, как часть операционной системы, – а то и и аппаратуры, – получает полный доступ к информации, вне зависимости от того, как эта информация защищалась при передаче по каналам связи: всё может быть качественно зашифровано в очередном протоколе мессенджера, вплоть до полной невидимости на промежуточных узлах, но зато смартфонный ИИ-агент, являющийся необходимой частью устройства, всё полученное и отправленное изучит в открытом виде, а потом, – конечно же, в “сжатой форме”, – передаст на сервер “большого ИИ”. Если что, и если вдруг какой-то информации недостаточно, то сервер агенту про это тут же намекнёт, и агент, не сомневайтесь, уточнит свой отчёт, – нет, не отчёт, а “сжатый запрос”. И нельзя сбрасывать со счетов возможность следующего шага, на котором намёки-запросы агенту поступают хоть и через сервер, но уже от третьей стороны.
Комментировать »
На тестовом сервере tls13.1d.pw сделал некоторые обновления: 1) детализировал вывод шифротекста ML-KEM-768, разбив блок на представления отдельных полиномов; 2) добавил поддержку SecP256r1MLKEM768 – это гибридная криптосистема с постквантовой стойкостью, состоящая из ECDH на кривой P-256 и ML-KEM-768.
Я не так давно писал про статистику соединений с постквантовыми криптосистемами на тестовом сервере, и в той записке обозначил, что SecP256r1MLKEM768 поддерживается сервером, но это оказалось преждевременным, так как в действительности сервер поддерживал ECDH на P-256 только в старом варианте, с Kyber768. А про вариант ECDH с ML-KEM я как-то забыл. Впрочем, на основное утверждение упомянутой записки о том, что с SecP256r1MLKEM768 (идентификатор 0x11EB) на сервер в начале января никто не приходил, этот момент никак не повлиял: понятно, что если никто не пытался подключиться с этой криптосистемой, то и соединения быть не могло, вне зависимости от поддержки сервером.
(Если кто-то из читающих не знает, то данный тестовый сервер TLS 1.3 это достаточно специальный инструмент, позволяющий подключиться по TLS 1.3, отправить HTTP-запрос и получить очень подробные сведения о соединении в ответ. Это можно проделать браузером, чтобы, например, увидеть, работает ли какой-то низкоуровневый элемент TLS, типа обмена ключами с постквантовой стойкостью.)
Кстати, забавно, что в SecP256r1MLKEM768 ключи и секреты объединяются в другом порядке, относительно X25519MLKEM768, описанной в том же черновике RFC. То есть, эти гибридные криптосистемы используют объединение значений, соответствующих работе двух криптосистем. Объединение – при помощи простой конкатенации байтов. Например, объединяется запись открытого ключа ECDH (65 байтов) и запись открытого ключа ML-KEM-768 (1184 байта): одни байты приписываются к другим и получается блок в 1249 байтов. Ничего необычного. Но вот для X25519 и ML-KEM, если смотреть слева направо, в сетевом порядке, то сперва идёт ключ ML-KEM, а потом – ключ X25519. Для ECDH и ML-KEM, определяемой в следующем же абзаце черновика, указан другой порядок: сперва параметр ECDH, а потом – ключ ML-KEM. То же самое с общими секретами. Зачем так делать? Загадка. Какая-то “популярная квантовая механика” на пустом месте. (Никакого криптографического смысла в этом нет и быть не может: криптосистемы, составляющие гибрид, работают независимо.)
Комментировать »
TLS-сертификаты с очень коротким сроком действия должны решить проблему отзыва сертификатов в вебе: то есть, так как отзыв, фактически, не работает, выполнение его функции переносится на штатное истечение срока действия. Это не отменяет возможности по выпуску “быстрых” подменных сертификатов для активного перехвата соединений, но есть и ещё некоторые занятные технические особенности. Короткоживущий сертификат, вообще говоря, оказывается существенно эффективнее механизмов отзыва.
Предположим, что сертификаты начали впускать на 48 часов максимум, а базовым удостоверяющим центром для них всё так же является один централизованный сервис, типа Let’s Encrypt. Например, основная доля веб-узлов зоны .RU “подписана” этим УЦ. Если потребуется быстро отозвать миллионы сертификатов штатным образом, – что через обязательные CRL, что через опциональный OCSP, – то возникнет большая сопутствующая нагрузка на системы УЦ. В случае же с короткоживущими сертификатами – никакой дополнительной нагрузки не возникает, более того, нагрузка уменьшается: отзывать ничего не требуется, а УЦ просто перестаёт выпускать новые сертификаты для заданных имён (и IP-адресов).
Конечно, то же самое произошло бы и с “долгими” сертификатами, но там осталось бы больше времени для манёвра. Не то чтобы это ключевой фактор, но, всё же, особенность занятная, поскольку “короткие” сертификаты не только строго привязывают к некоторой автоматической технологии, но и дополнительно увеличивают степень централизации, вводя очень эффективный, “самосбывающийся” механизм быстрого отключения.
Комментировать »
Шестидневные TLS-сертификаты Let’s Encrypt планирует выпускать и для IP-адресов, что несколько необычно. Тут имеется в виду, что такие сертификаты будут валидными при обращении к узлу без использования DNS-имени, а только по IP-адресу. Такие сертификаты являются редкостью, но выпускались они и раньше – например, сертификат, выпущенный DigiCert 02.01.2025 для сервиса Cloudflare 1.1.1.1, содержит несколько IP-адресов в поле SAN (Subject Alternative Name). Этот сертификат выпущен не на шесть дней, а на срок более года: он действует до 21.01.2026.
Понятно, что DNS для подтверждения управления IP-адресами не подходит. Поэтому проверяется только факт управления узлом под заданным IP-адресом. Let’s Encrypt будет проводить такую проверку по HTTP и через TLS-ALPN (а это довольно экзотический метод, реализующий “прозрачную” проверку на уровне TLS: то есть, на уровне веб-сервера её даже не видно; возможно, я как-нибудь напишу про этот протокол подробнее).
Активный перехват трафика, адресованного некоторому IP, конечно, возможен, – в том числе, через BGP-атаки, – но тогда он же, формально, закрывает и все прочие случаи: например, для DNS-проверки можно перехватывать трафик в направлении авторитативных серверов. Другое дело, что в DNS, обычно, серверов несколько и они даже должны бы находиться в разных автономных системах. Это кроме того, что можно проверять DNSSEC (но это редкость).
Однако сертификаты на IP-адреса позволяют запускать доверенные сервисы, обращение к которым не раскрывает имён уровня приложений. Представьте, что некоторая “точка входа” постоянно мигрирует по IPv6-адресам, автоматически выпуская “короткие” сертификаты с подтверждением через TLS-ALPN – то есть, HTTP там вообще нет. Получается гибкое и скрытное решение. В общем, интересное развитие технологий.
(Я недавно подробно описывал то, как срок действия сертификатов в TLS связан с проблемой компрометации ключей.)
Комментировать »
Небольшое пояснение к предыдущей записке, что там имелось в виду: так как в результате “очередного сбоя” для большинства затронутых пользователей фильтровались соединения 80/tcp (udp, вероятно, тоже) и 443/tcp (udp, вероятно, тоже), то у этих пользователей не открывались привычные веб-сайты – причина понятна: веб штатно работает на этих номерах портов (номера – только один из признаков, но для веба – достаточно). Сервисы, использующие другие номера – оказались не затронуты. Но кто ж про эти сервисы знает, и задумывается, что они тоже “через Интернет”?
А “Интернет” – равно “веб”. Отсюда и странные восклицания: «не работает “Интернет”, но работает Telegram» (приложения последнего могли использовать другие номера портов). Конечно, работал не только Telegram, но и, скажем, Jabber. Ходил ICMP (ping, грубо говоря), что, с одной стороны, затрудняло быструю диагностику, но, с другой стороны, позволяло быстрее же понять, что именно происходит “на сетевом уровне”.
(Да, понятно, что это никак не нивелирует значение самого сбоя, а Интернет в целом, конечно, при этом поломался ещё больше, поскольку штатная работа протоколов оказалась нарушена. Но так-то Интернет сломан уже давно.)
Комментировать »
На примере очередного масштабного сбоя (в Рунете) можно очередной же раз убедиться, что за “Интернет” – пользователи повсеместно принимают веб, поэтому СМИ и пишут, что “работал только Telegram”.
Комментировать »
А тип криптосистемы ML-KEM (она же – Kyber) на русском лучше писать так: “модуль-решёточная криптография”.
Вообще, определить ML-KEM, как прикладную криптосистему, можно совсем не используя соответствующее понятие решётки. Без модулей и колец – определить не выйдет, поскольку векторы и многочлены непосредственно служат элементами алгоритмических структур (достаточно того, что открытый текст представляется в виде многочлена). Но решётки, как один из мощных инструментов теоретической криптографии, тут возникают при доказательстве предположений о стойкости криптосистемы. Ну, или в другую сторону: выбор базовой задачи данной криптосистемы основан на оценках вычислительной сложности задач “на решётках”.
То есть, как ни крути, а решётки имеют определяющее значение, но с точки зрения базовой задачи, которая напрямую в ML-KEM не используется. Так же, кстати, написано и в стандарте NIST, где термин “решётка”, если не считать употребление его в названии, используется всего пару раз. (При этом, кстати, не совсем корректно писать, что используемая криптография “основана на задачах из теории решёток” – на этих задачах основаны предположения о стойкости, а не криптографические алгоритмы; не то чтобы радикальное изменение смысла, но существенные детали теряются.) И необходимо учитывать, что математический термин “решётка” (русский) и математический термин lattice (английский) – различаются в трактовках, даже если смотреть узкую интерпретацию, поэтому для строгих определений всё равно потребуются уточнения.
“Модулярная решётка” – явно не подходит, поэтому пусть будет “модуль-решёточная”. Ведь главное тут – чтобы криптосистема не оказалась решетчатой, но от слова “решето”.
Комментировать »
Исследователями из Watchtowr опубликовано подробное описание того, как обнаружили возможность и реализовали удалённое исполнение кода (RCE) в свежей CVE-2025-0282 (Ivanti Connect Secure – это, как нередко случается, корпоративный продукт для “защищенного корпоративного VPN”).
Описание по ссылке выше – довольно техническое, требует специальных знаний для понимания. Если кратко, то основой данной уязвимости является типовое переполнение буфера из-за перепутанных в исходном коде значений максимального размера массива, но вот для успешной реализации – потребовались не самые прямолинейные техники.
Как справедливо замечают в тексте описания исследователи, исходную ошибку, приводящую к переполнению буфера, смог бы обнаружить даже простой статический анализатор кода. Но, в принципе, понятно, почему статический анализатор не был здесь должным образом использован компанией-разработчиком. Дело в том, что применение таких инструментов не на бумаге требует высокой квалификации от применяющего, так как сам по себе стат. анализатор мало что даёт – ещё нужен редкий специалист, понимающий, что именно происходит, с разных сторон: со стороны ИБ, со стороны устройства компиляторов и разработки ПО, со стороны устройства аппаратуры и практики “сетевых технологий”, и т.д. Ещё один пример, показывающий, что так называемая “безопасная разработка”, как принцип, в целом, интересна, но практическое значение соответствующих инструментов в корпоративной среде сильно преувеличено. Впрочем, вернёмся к описанию уязвимости.
Прямолинейной эксплуатации через перезаписывание стека помешало наличие в этом стеке указателя на блок памяти, который должен был освобождаться перед возвратом из атакуемой функции (то есть, вызов конструкции с free() приводил бы к преждевременному возникновению исключения). Но исследователи смогли найти точку модификации таблицы Vtable, которая содержит указатели на функции (это типовая конструкция для “виртуализации” “методов” в C++), а потом ещё успешно нашли в коде гаджет*, модифицирующий указатель стека. Причём, поиск гаджета был затруднён тем, что требовалось найти точку для входа, которая совпадала бы не только по подобранному значению указателя, но и по значению смещения, жёстко зафиксированного в исполняемом коде. А это стало возможно потому, что исследуемое приложение использует много библиотек: “It’s a good thing that the Ivanti web binary contains so many libraries”. Как говорится, принцип разработки с созданием минималистичного и простого собственного кода мог бы здесь помочь. Ну, раз не помог стат. анализатор.
* – дополнение от 13.01.2025: гаджет – фрагмент машинного кода с нужными свойствами, оканчивающийся командой передачи управления, см. комментарии к записке.
Комментарии (2) »
Новый