В копилку примеров реального использования ИИ/LLM.

Попробовал тут выяснить, можно ли через ChatGPT узнать о группах для протокола FFDH (“мультипликативного” Диффи-Хеллмана, DH), используемых в TLS 1.3. Довольно специальный вопрос. Но зато вполне конкретный. Удивительно, но ChatGPT 5.2 тут же верно сообщило и номер RFC, где описаны эти группы, – RFC 7919, – и о том, что группы строго зафиксированы, что их всего пять. Это всё верно. Но, как обычно в таких делах, не будем торопиться с выводами.

То есть, подразумеваем, что ChatGPT тут использует человек, хорошо знакомый с математической частью, но который хочет узнать технические детали DH конкретно в TLS 1.3. Первая выдача ChatGPT, пусть и содержала какие-то домыслы про HSM и пр., но оказалась бы в таком сценарии полезной: номер RFC, информация о том, что используется зафиксированный набор групп, в общем – по теме и неплохо. В этом-то и кроется ловушка, как будет видно далее: данная система легко, с первого шага, производит впечатление “информированной”, но таковой не является.

Следующим запросом я попробовал выяснить значение конкретного модуля конкретной группы (основной параметр, задающий группу для FFDH, – простое число, называемое модулем). Опять же, удивительно, но ChatGPT даже смогло “понять” и корректно обработать опечатку в моём запросе: я пропустил одну цифру, написав ffdhe372 вместо ffdhe3072.

“В TLS нет группы под названием ffdhe372” – верно сообщило ChatGPT (здесь и далее я перевожу с исходного английского). “Вы наверняка имели в виду ffdhe3072 (RFC 7919, Group 15)” – уточнило ChatGPT. Что это за “Group 15” – непонятно, но, ладно, в остальном – очень верно. Именно ffdhe3072 и имелась в виду. Опять же, выглядит, как ответ очень “информированной” системы. Не то чтобы исправление подобных опечаток с использованием статистики корпуса текстов представляло какую-то техническую трудность, но, тем не менее, создаёт впечатление “подлинности”.

Ещё более удивительно, но ChatGPT распечатало абсолютно верное значение модуля – цифра к цифре. Это, конечно, улучшение, если сравнивать с тем, что было пару лет назад. Но дело тут не в данном улучшении, как вы, думаю, уже догадались: ChatGPT и сейчас легко генерирует несуществующие цитаты – я недавно сталкивался с тем, например, что оно сгенерировало ложную цитату “из труда Бомбелли”. Опять же – очевидно, что внутри ChatGPT нет никакой точной “базы знаний”, откуда оно могло бы извлекать подобную информацию универсальным образом – значение модуля, в данном случае. Но если смотреть узко, то складывается впечатление, что такая база там есть, что ChatGPT сходило в сохранённый текст RFC и скопировало оттуда значение модуля.

Нет. Всё не так, несмотря на непрерывное маркетинговое давление.

Дальше я спросил, как доказывается, что это – простое число. (Модуль должен быть простым числом, это базовое требование.) И тут ChatGPT кинулось в рассказы о тестах на простоту, о “доказуемо простых” числах и т.д., заявив, что использовался “алгоритм Маурера” (Maurer) и написав тому подобные техничные слова. Проблема в том, что это всё общие методы, не имеющие отношения к конкретному RFC и к конкретному модулю.

То есть, ChatGPT заявило, что простые модули в RFC 7919 выбирались методом Маурера (или по алгоритму, это не важно), начиная с некоторого небольшого известного простого. Это совсем не верно, но звучит очень похоже на правду, если только вы уже не знаете технических деталей. Такой вот ловкий обман. Естественно, тут же ChatGPT добавило показательный, по своему ложному положению, текст: “если бы в TLS использовались простые числа, похожие на случайные, но без доказательств, то злонамеренная сторона-генератор могла бы встроить бэкдор”. Этот фрагмент дословно верный, но только если его рассматривать вне контекста обсуждения и исходного запроса. А если в контексте, то под “доказательствами” тут имеются в виду “сертификаты” (“свидетели”) простоты числа, и это не имеет отношения к методу “защиты от бэкдоров”, который должен быть направлен на исключение возможности получения числа специального вида – доказательства тут должны доказывать то, что алгоритм не позволяет выбрать произвольное простое число, а числа там всегда простые. (Да, математически, наличие “сертификатов”, доказывающих простоту, – вычислительно ограничивает возможности по сводобной генерации простых, но тут речь точно не об этом, да и ограничения там не являются блокирующими.)

Итак, следующий мой вопрос был о том, как же именно был получен модуль ffdhe3072.

Метод вычисления всех модулей из RFC 7919 описан в самом этом RFC. Буквально. Я как-то даже писал об этом подробно. В основе вычисления – запись числа e. В этом весь смысл: числа взяты “из записи” e, а не придуманы “с бэкдорами”. Схема называется NUMS – Nothing Up My Sleeve (“ничего в моём рукаве”).

То есть, если бы в ChatGPT был интеллект, – пусть и искусственный, – то этот “интеллект” взял бы RFC и прочитал. Тем более, что так хорошо всё начиналось. Но нет. ChatGPT стало продолжать в красках расписывать, что модули для RFC 7919 были получены по “детерминированному алгоритму Маурера”, прямо приводя фальшивый способ получения исходной константы: seed = SHA-256(“TLS FFDHE 3072”). Да. Настолько детально. И так далее, и тому подобное. Никакого отношения к RFC и к оригинальному источнику значений модулей – в этом не было (в RFC, ещё раз, написана конкретная формула, но она вообще не имеет отношения к “Мауреру”).

Это очередной пример большой проблемы: данные системы AI/LLM генерируют огромное количество текста с глубокими фактическими ошибками; на это тратится много энергии в дата-центрах; результат – затапливает; результат – уже встраивают не только в программный код реально используемых систем, но и в те же RFC. Если вы не специалист, который уже в деталях знает то, что пытается “выяснить” через LLM, то шанс обнаружить дефект и подмену минимальными усилиями – совсем не велик: требуется потратить много сил и времени.

P.S. А число, полученное как SHA-256(“TLS FFDHE 3072”), – составное: 0xd73d45623a7a52d11ea654956e701554a137fafd3545d46379891d7c4c79f545 = 3^2 * 7 * 3719447821 * 27939151181 * 3616471485699239 * 4111907187916820252669152053322571860357.



Комментарии (2) »

Из Ars Technica отозвали статью (англ.) про AI-бота, из-за наличия в той статье поддельных цитат, сгенерированных другим AI/LLM-ботом.

Уровень даже технической журналистики, к сожалению, продолжает падать. Хотя – казалось бы. Но нет, при поддержке LLM – ускорить падение уровня нетрудно. Естественно, написано, что редакционная политика Ars Technica запрещает использование текстов, сгенерированных ИИ/LLM, кроме как в качестве примеров того, что может сгенерировать LLM. Это не помогло.



Комментировать »

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

Многолетний хайп вокруг квантовой криптографии даёт тут хороший пример того, как можно всё перепутать, решив, что модель, используемая в вычислениях, обращается и обобщается максимально сильным образом. Например, какие-нибудь учебные задачи по физике решаются в режиме “трением пренебречь”, но из этого не следует, что трения действительно нет в реальной конфигурации, соответствующей задаче. Вообще, из того, что при построении вычислительной модели были сделаны какие-то допущения, но модель позволяет получать достаточно точные предсказания, не следует, что допущения модели перестали быть допущениями модели и превратились уже в явления исходного феномена.

Во-первых, применительно к квантовой криптографии, квантовая механика предоставляет собой способ подсчёта вероятностей исхода эксперимента (например, результат измерения при приёме фотона с той или иной поляризацией). Однако из этого не следует обратное утверждение: что распределение вероятностей – это и есть фундаментальное, “физическое” свойство. То есть, “переворот” вывода инструмента подсчёта вероятностей – это слишком сильное действие.

Во-вторых, концепция тут же предполагает, что атакующая сторона может действовать только в строго определённых рамках. То есть, атакующий, прослушивающий канал, якобы может делать это только перехватом фотонов-носителей, да ещё и таким способом, который “гарантированно нарушит состояние системы”. Но ведь атакующий может прослушивать электромагнитные утечки, возникающие при работе оборудования, которое эти самые фотоны-носители генерирует и принимает. В описываемой схеме квантовой криптографии, так или иначе, но информация о том, какую конфигурацию имело оборудование, сохраняется в электромагнитных полях, генерируемых оборудованием. Необходимая защита от таких утечек – только подчёркивает то, что квантовая “криптография” – это технический метод защиты каналов передачи информации, а не настоящая криптография (несмотря на название). Но почему-то постоянно постулируется, что атакующий должен пытаться перехватывать “квантовые носители” строго так, как задумано в теории. Это тоже слишком сильное действие, которое отличает предмет от чисто математической криптографии: нельзя заранее выносить за скобки неустранимый технологический эффект (побочные излучения), искусственно сужая возможности атакующего в физической реализации. Очень похоже на то, как в задаче про “скользящий брусок” предлагается пренебречь трением, только масштабы пренебрежения сильно больше.

Да, в настоящей, математической криптографии, тоже есть допущения, но тут необходимо делать акцент на обсуждаемой “физической невозможности”, якобы гарантированной “законами физики”. К математике это “физическое” отношения не имеет. Кроме того, никакие “законы” физики вообще ничего не “гарантируют”, по определению. Это всё лишь способ описания результатов экспериментов, использующий язык, предоставленный математикой.

Более того, – это в-третьих, – в описаниях сценариев применения квантовой криптографии рутинно пропускают момент аутентификации полученных по “квантовому каналу” ключей: ведь для этого потребуется вполне себе классическая схема цифровой подписи, с асимметричной криптосистемой.

Так что нельзя забывать о том, что “квантовая криптография” – только называется “криптографией”, но является техническим методом защиты информации. Это, так сказать, более продвинутый способ создания системы сигнализации о вторжении в канал передачи данных, снижающий, на некоторых направлениях, доступный атакующему уровень скрытности утчеки.



Комментировать »

Плакат про лыжи и пятерых лыжников, США, 1957 год: “Join National Ski Association”.

Join NSA, poster

Источник: LoC.
(АНБ создано в 1952 году.)



Комментарии (2) »

Колонка Дмитрия Буркова про реальные принципы построения NAT (это преобразование адресов, массово используемое сейчас для доступа к глобальной Сети), цитата:

По сути, NAT — это не столько про адреса, сколько про трансляцию идентификаторов между разными доменами управления. Адрес в этом смысле — всего лишь удобный носитель.

Рекомендую почитать. Потому что, действительно, о том, какая именно логика соответствует NAT, постоянно забывают.



Комментировать »

На сайте Gramota.ru опубликовали “слова 2025 года”, что бы это ни значило, и слово-победитель в области “Информационных технологий” – “вайбкодинг”.

Хайп. Тут показателен не столько сам выбор слова, сколько его неловкое определение, которое там приводят: “подход в программировании, при котором человек ставит задачу на естественном языке, а искусственный интеллект пишет код”.

“Кодинг”, как явление, к программированию вообще имеет отношение крайне отдалённое. Я бы сказал, что “кодинг” – противопоставляется “программированию”. Ну а уж “вайбкодинг”, это, как бы, вообще не про программирование, и тем более, не “подход в программировании”. “Вайбкодинг” – это способ задавать контекст выдачи кодогенератора, без формирования представления о самой задаче, для решения которой пишется код – откуда, собственно, “вайб‐”: это “промптинг” по наитию, а не “подход в программировании”.

(Ссылка выше – ведёт на страницу без разметки стилей, но так сделано на сайте; возможно, тоже “вайбкодинг”; как сослаться на нормальную страницу за 2025 год – непонятно.)



Комментировать »

Очередное хайп-продолжение со стороны компаний, продвигающих ИИ/LLM в разработке программного кода. Пишут (англ.), что Anthropic нынче заявляет о написании “с нуля” на Rust компилятора C, всё силами “шестнадцати ИИ-агентов”. Компилятор – во много десятков тысяч строк кода. Вообще, как это нужно понимать, если выкинуть хайп-составляющую?

Понимать нужно так:
тысячи людей-разработчиков десятилетиями тщательно писали реализацию алгоритмов на языках высокого уровня (и не только высокого), готовили детальнейшую документацию к полученному коду, писали и отлаживали программные тесты и тестовые примеры (речь ведь про C-компилятор, не забывайте);
потом, несколько лет, потратив огромное количество гигаватт электроэнергии, результаты работы людей “упаковывали” в многоуровневый набор функционалов синонимайзера-переростка;
потом человек-инженер, при помощи подкручивания тестов вручную, приспосабливал к логической модели компилятора псевдослучайную выдачу машины перебора и генерации текста, которая машина построена на многотерабайтной базе “упакованного” в токены исходного программного кода, и которая машина извлекает из этой “упакованной” базы цепочки, похожие на кусочки записи программ, реализующих какие-то алгоритмы;
на такой “перебор с подкручиванием” потрачено, опять же, колоссальное количество процессорного времени и памяти;
в результате – получен в огромном количестве некий мутный код на Rust, реализующий (в некоторых случаях) преобразование программ на C в машинный код (дополнение от 13.02.2026: оказалось, что даже не в машинный код: это был очередной обман – там даже нет собственного встроенного ассемблера, а для демонстрации использовали ассемблер из GCC).

Да и то – с оговорками: не нужно так уж верить всем бравурным заявлениям в СМИ про “компиляцию ядра Linux” – кто там его знает, как оно реально “компилируется”, если компилируется вообще. Но при этом пишут, что “ИИ создал компилятор с нуля“. “С нуля”, “создал”. Конечно. Поэтому-то и хайп – не остановить.

А компилятор для подмножества C, – с куда меньшими оговорками, чем в случае ИИ/LLM выше, – можно уложить в 512 байтов, если что. И даже без Rust. Вот только с хайпом в СМИ на этом направлении будет сложновато.



Комментировать »

Корень глобальной DNS сейчас подписан, в рамках DNSSEC, криптосистемой RSA. В ICANN – организации, определяющей требования к работе глобальной DNS, – некоторое время назад запустили процесс перехода корневой зоны с RSA на ECDSA (P-256/SHA-256, это алгоритм номер 13 в DNSSEC). В текущей версии предложения ICANN планируется переход в течение четырёх лет. То есть, переход должен завершиться в 2030 году (традиционная дата, да).

Сейчас среди зон ниже первого уровня мало что подписано, мало где есть DNSSEC. Например, в .RU – это какие-то доли процента. Тем не менее, DNSSEC касается всех валидирующих резолверов, и если DNSSEC сломается, то сломается всё дерево ниже подписанной точки, в которой DNSSEC отвалилась. Например, так как подписана сама зона .RU, то когда в .RU сломались подписи DNSSEC, отвалились абсолютно все домены второго (и ниже) уровня внутри .RU, вне зависимости от того, есть в каком-то из этих доменов DNSSEC или нет. Ещё раз подчеркну, это касается только валидирующих резолверов, однако сейчас самые массовые публичные резолверы (Google Public DNS, Cloudflare и др.) – валидирующие. Да и вообще – в 20-х годах 21 века нужно использовать только валидирующий резолвер. Соответственно, если отвалится DNSSEC в корневой зоне – DNS сломается, фактически, для всего Интернета.

DNSSEC в корне DNS полностью внедрили в 2010 году, естественно, на RSA. Так как при вводе DNSSEC в эксплуатацию никто не озаботился тем, чтобы не только согласовать процесс ротации корневого ключа, но и хотя бы предусмотреть такой процесс, замена корневого ключа состоялась только в 2018 году. Впрочем, вряд ли это как-то повлияло на практическую стойкость: практические возможности по взлому RSA-ключей из подписей – сильно расходятся с теоретическими предположениями. А тем более эффект сомнителен, если учитывать реальность использования DNS и DNSSEC и схему подписывания самой корневой зоны. Для подписи зоны используются дополнительные ключи, которые, в свою очередь, удостоверяются корневым. Процесс генерирования новых ключей подписи зоны и удостоверения этих ключей изначально предполагал серьёзные шаги по обеспечению безопасности криптографических данных: защищённые помещения, доверенные люди, физические сейфы, физические ключи, аппаратные модули (HSM) и так далее.

Однако в 2020 году вообще просто взяли и нагенерировали и подписали доверенные ключи для корневой зоны заранее, на будущее, сделав участие “криптоофицеров” дистанционным (да! это через эти же “подписываемые интернеты”), чтобы лишний раз не собираться – после этого уже стала окончательно понятна вся театральность действий по “защите” корня DNS, включающая посещение хранилищ и не менее церемониальную работу с аппаратными модулям при помощи отвёртки и молотка – и это не преувеличение. Ритуалы и уровень их исполнения – выходят на первый план, да. Прямо из ICANN и корня DNS. Театр, как социальное явление, очень важен. Главное, понимать, где именно театральное действо переходит в цирковое.

И всё же, вернёмся к ключам DNSSEC. Cледующая ротация корневого ключа намечена на октябрь 2026, но это опять будет RSA. Потому что, как нетрудно догадаться, механизма замены криптосистемы в корне DNS тоже не предусмотрели. Механизм разрабатывают сейчас.

Самое занятное, что в рамках перехода на ECDSA имеющиеся ключи RSA собираются сократить. Да. Собираются уменьшить их разрядность с 2048 бит до 1536 бит. Как бы, по нынешним временам, 1536 бит не считаются стойким вариантом. (Заметьте, впрочем, что для атаки на гипотетическом-фантастическом квантовом компьютере – 1536 битов RSA всё равно сильнее, чем 256 бит ECDSA, потому что теоретические алгоритмы квантового взлома прямо оперируют разрядностью, и для записи 256 бит может потребоваться меньше кубитов.) Естественно, снижение разрядности RSA обусловлено стремлением удерживать максимальный размер DNS-ответа ниже границы, доступной в UDP-транспорте: ниже 1232 байтов. Это позволяет избежать перехода на TCP со стороны резолверов. (DNS требует перехода на TCP в тех случаях, когда ответы не проходят по размеру в UDP.)

Согласно плану, уменьшение длины RSA-ключа в корне DNS намечено на 2027 год. А в первой четверти 2028 года запланирована публикация ECDSA-подписей. При этом, сами ECDSA-ключи в зоне публиковать сразу не собираются. Тоже занятное решение, обусловленное, скорее всего, тем, что DNSSEC требует подписывать зону всеми обозначенными криптосистемами, но не всеми ключами. Поэтому ключи опубликуют позже, во второй четверти 2027 года, когда ECDSA-подписи уже побывают в зоне. RSA-ключи отзовут в 2030. Если по плану. Потому что документ предварительный и пока что выставлен для публичного обсуждения.



Комментарии (1) »

Программный код, генерируемый при помощи LLM, и автоматическое применение средств анализа кода (но не тех, которые уже есть в LLM-сервисе) – принесут забавные результаты. А главное – массовые. О чём тут речь: например, если у вас внедрено что-то типа “безопасной разработки ПО”, то использование, как минимум, статического анализатора кода – оказывается обязательным; кроме того, понятно, есть ещё автоматические тесты разных типов.

Теперь предположим, что внедрена и новомодная (пусть и вымышленная) схема, в которой “разработчиков заменяет ИИ/LLM”. Тогда получается, что если для создания тестов и исправления кода по результатам тестирования используется одна и та же LLM, – как внешний сервис (и это, скорее всего, так и есть), – то эта LLM будет приспосабливаться к прохождению тестов ради прохождения тестов. Потому что провайдер свою систему “улучшает”. На очередной итерации такого приспособления – LLM сгенерирует код, который все тесты успешно пройдёт, но работать правильно не будет.

Как такое вообще возможно? Это возможно, так сказать, по определению, так как задача генератора кода – генерировать код, проходящий тесты, а не решать высокоуровневые задачи при помощи программирования. Чтобы применять программирование к высокоуровневым задачам, а не просто генерировать код, демонстрируя последнюю стадию “кодерства”, нужна та самая “ментальная модель” системы. А в случае применения новомодных LLM – такой модели нет ни у кого, так как задача, еще раз, состоит в генерировании кода. Её так и понимают апологеты перевода разработки ПО на LLM. Типа, если преподаватель студентам задал написать эссе, то, мол, преподавателю нужно эссе и именно эссе составляет смысл процесса обучения, поэтому, раз эссе может сгенерировать LLM, то нужно такое упражнение убрать из курсов. (Сейчас, кстати, вообще совсем не модно понимать картину, которая больше, чем некоторая деталь механизма, кем-то предоставленного.)

Вернёмся к “безопасной разработке” и LLM-кодогенераторам. Первый этап преодоления проблем – статический анализатор. Здесь речь про внешний инструмент, применяемый отдельно, а не про анализатор, встроенный на стороне выдачи сервиса кодогенерации. Казалось бы, пусть возможности статических анализаторов сильно ограничены, но какую-то пользу они могут же принести? Могут, да. Вот только LLM-генератору “энергетически выгоднее” обфусцировать код так, чтобы его пропускал статический анализатор, а не удалить реальные ошибки. Это, вообще говоря, подтверждается общим очень низким качеством “патчей”, которые генерируют LLM-инструменты для исправления дефектов кода, найденных этими же LLM.

Второй этап – тесты. Unit-тесты, допустим, пишутся до разработки самого кода. Как же может не работать правильно код, который прошёл тесты? Тесты же для того и написаны, чтобы логически строго сформулировать требования к правильной работе. Да-да, всё так и могло бы быть, если бы написание тестов, как и код, не отдали на откуп LLM-генератору. Это ключевой момент. Кроме того, в тестах, в том числе, написанных человеком, нередко бывают ошибки. Тестам свойственна существенная неполнота, пусть и задумывались они как почти полные. Это нормально. Вот только LLM натренирована на преодоление тестов, пусть и через обнаружение в них ошибок и через выявление неполноты, а не на создание корректно работающего ПО. В случае, когда ИИ/LLM везде, такому преодолению эта LLM помогает с двух направлений, корректируя тесты под дефекты генератора кода, а код – под вносимые дефекты тестов.

И это кроме того, что сервис LLM ещё и объединяет весь код в общую “базу” для всех пользователей: на результаты разработки компании “Имярек А” влияют тесты компании “Имярек Б”, которые компании друг о друге не знают, но используют один и тот же новомодный ИИ/LLM-сервис.



Комментировать »

Блог: Suricata на сервере

По результатам наблюдений над логами – настроил на этом сервере, где работает dxdt.ru, Suricata (это что-то вроде IDS; использую в других проектах), вместе с некоторыми правилами бана IP-источника. Посмотрим. Надеюсь, ничего лишнего под бан не попадёт. Раньше я здесь блокировал только явно паразитный HTTP(S)-трафик с перебором логинов и “брутфорс” SSH-подключений. Теперь станет несколько шире, но, может, потом отключу обратно.



Комментировать »

На сайте Nature опубликовали (нужна регистрация) очередную статью, в которой к текущему состоянию ИИ/LLM прямо подводят “определение” универсального интеллекта (AGI – как теперь модно обозначать), чтобы, опять же, текущие системы, типа GPT, стали этим самым универсальным ителлектом, но по скорректированному определению.

В общем-то, всё обычно: сперва постулируют, что, мол, LLM-системы уже “демонстрируют уровень золотой медали на математических олимпиадах” (игнорируя все фокусы с перебором и маркетингом) и “LLM решают новые, ранее не опубликованные, математические задачи” (а что означает – ранее не опубликованные?), а потом подгоняют определение интеллекта под эти, – весьма спорные, – заявления, делая вывод, что “ещё пять лет назад у нас не было AGI, а теперь есть”. Да, так и сформулировано. (Кстати, о том, что достижение “суперинтеллекта” будет определяться через сообщения в ведущих газетах, я уже писал раньше.)

В статье на страницах Nature есть занятный момент и про калькулятор. Буквально, цитата:

“Люди – основные примеры универсального интеллекта; но его нет у карманного калькулятора, несмотря на сверхчеловеческие возможности в вычислениях”.

Якобы карманный калькулятор обладает сверхчеловеческими возможностями в вычислениях. Но калькулятор ничего не считает – он всего лишь переключает сегменты на индикаторе, в соответствии с нажатием на кнопки. Числа, процесс счёта – это всё образуется в представлении тех самых людей, которые объявлены носителями интеллекта. Собственно, это очень хорошая иллюстрация того, что же именно происходит: как калькулятор начинает вдруг “считать”, получая, автоматически, “сверхчеловеческую способность”, так вот и LLM-системам вдруг приписывают интеллект по удобному определению, начиная утверждать, что они “решают задачи” и “владеют языками”.



Комментировать »