Ресурсы: техническое описание TLS, LaTeX - в картинки (img), криптографическая библиотека Arduino, шифр "Кузнечик" на ассемблере AMD64/AVX и ARM64
Вот ещё весьма показательный момент, про всё это современное ИИ/LLM. Бот от корпорации OpenAI выполняет на dxdt.ru больше тысячи запросов (GET, по адресам записок) в сутки с разных IP, в User-Agent написано: “Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.2; +https://openai.com/gptbot)”. Очевидно, цель – загрузка всё большего количества текстов в синонимайзер-переросток, который потом продвигают в СМИ как уникальный “интеллект”. Вычислительных ресурсов там много, несмотря на “проблемы изменения климата”, поэтому об оптимизации не задумываются – сканируют всё повторно, по много раз.
Приходит этот бот с IP-адресов Microsoft. Однако, игнорируя не только слово “Open” в названии, но и даже минимальные представления об адекватной разработке ботов-сканеров, информационный URL, указанный в User-Agent, недоступен для российских IP-адресов: возвращает HTTP 403 и страничку с надписью “Sorry, you have been blocked”. (С IP-адресов, которые Cloudflare пока что считает не российскими, доступ есть, так что можно убедиться, что это действительно OpenAI.)
P.S. Обратите, кстати, внимание, что тут уже GPTBot/1.2, а не GPTBot/1.1, как у них на сайте указано в описании.
Комментировать »
Недавно, в заметке про TLS-сертификаты для IP-адресов, я упоминал метод проверки права управления узлом через TLS-ALPN, который может использоваться в рамках ACME (протокол автоматического взаимодействия с Удостоверяющим Центром – УЦ). Надо заметить, это самый экзотический способ проверки из сейчас используемых. Вообще, понятно, что для IP-адресов проверять административные права через DNS – не самый разумный вариант, поскольку DNS надстроена над IP-адресным пространством и проверить не получится. В этом случае даже общепринятое название процесса DCV – Domain Control Validation – не подходит, ведь проверки “управления доменом” тут нет, а есть проверка управления узлом. Поэтому-то даже и обратная зона не сгодится: возможность внесения записей в обратную зону означает, что оператор (предположительно!) управляет соответствующим префиксом, но не обязательно управляет интернет-узлами, попадающими в адресное пространство префикса.
Схема TLS-ALPN работает в типовом варианте “запрос – подтверждение”, но выполняется на самом низком уровне TLS. Логика следующая:
проверяющая сторона, – то есть, сервис УЦ, – устанавливает с проверяемым узлом TLS-соединение, указывая в начальном сообщении (ClientHello) специальное значение в расширении ALPN – это запрос;
проверяемый узел в ответном сообщении TLS (Certificates) отправляет в качестве сигнала специально сконструированный TLS-сертификат, содержащий нужные для подтверждения параметры в расширении SAN (это дополнительные имена и IP-адреса) и в специальном расширении acmeIdentifier.
Сами значения согласуются заранее, в ходе подготовительных шагов ACME.
ALPN – Application-Layer Protocol Negotiation – это штатный инструмент TLS, но в данном случае используется уникальный идентификатор, предназначенный именно для этой схемы: “acme-tls/1”. Использование же TLS-сертификата в роли средства доставки специального сигнала – механизм пусть и причудливый, но всё же иногда используемый. Например, я в своём тестовом сервере TLS передаю сигнальный сертификат, который генерируется каждый раз в ходе установления соединения и содержит сведения об IP-клиента и выбранном способе согласования симметричных ключей. (Но в браузере вы этот сертификат увидеть не сможете, хоть он и всегда есть в сессии.)
Конечно, основной особенностью данного метода является то, что он требует достаточно низкоуровневого взаимодействия с TLS-сервером и срабатывает до того, как запросы вообще доберутся до веб-сервера. Собственно, веб-сервер тут вовсе и не участвует в процессе.
Да, в принципе, используя тот момент, что для TLS-ALPN-подтверждения сертификат нужно сгенерировать заранее, и то, что указание ALPN и имени сервера позволяет воспользоваться программным интерфейсом той или иной TLS-библиотеки, возможно прозрачно подставить сигнальный сертификат в TLS-ответ даже в том случае, когда полного контроля над TLS-сессией нет. Но схема от этого не перестаёт быть низкоуровневой и экзотической.
Комментировать »
Пишут, что после очередного обновления iOS Apple на iPhone в Штатах появилась поддержка доступа к Starlink, как к “телефонному сервису”, через идентификаторы оператора T-Mobile. Что там в обновлении – не ясно: возможно, новая прошивка для радиомодуля, возможно – нет, и прошивка была обновлена заблаговременно, а теперь включили именно конкретные параметры для данного радиоканала.
Пусть для того, чтобы принимать произвольные сигналы смартфона спутниками Starlink – обновление прошивки и какое-то участие со стороны смартфона не нужны, однако, если смартфон с новой прошивкой радиомодуля активно выполняет команды, поступающие со спутников, в кооперативном режиме участвует в радиообмене, то это заметно расширяет возможности и по доступу к смартфону, и по наблюдению. И тут не важно, поддерживаются ли пользовательские функции, доступные на уровне ОС, и какой именно оператор сотовой связи прописан в обозначениях: сигналом спутников всё равно управляет оператор спутников, а не “титульный” для пользователя провайдер. То же самое относится и к радиообмену – сама “сеть сотового оператора”, как феномен, начинается на уровень выше технических сигналов, особенно, если речь про спутниковый доступ.
Кстати, если в процессе геолокации радиопередатчика участвует сам радиопередатчик, то расширяется спектр доступных инструментов, что, понятно, повышает точность. Но прежде всего интересны возможности по сбору состояния радиоэфира приёмником смартфона: это вполне себе штатная функция, которая в так называемых “сетях 5G” получила большое развитие, и если радиомодуль смартфона активно взаимодействует с сетью спутников, то это означает, что по запросу спутниковой сети радиомодуль может передавать сведения о принимаемых им сигналах. Обратите внимание: речь тут вовсе не только о “сигналах спутников”, а, например, о сигналах локальных точек доступа/базовых станций (это, опять же, штатный механизм) и прочих устройств, которые “видит” смартфон, но не видит спутник.
Комментировать »
Воскресное чтение манускриптов. Классический способ оформления цитируемых фрагментов в переписке по электронной почте основан на знаке “больше” – “>”, – который ставится в начале строки, с нужным количеством повторов, когда цитата оказывается внутри цитаты. Нередко этот же знак используется для обособления цитат и вне электронной почты, например, при переписке в чате.
Схожие знаки встречаются и в средневековых манускриптах (и не только там). Пусть метод очевидный, но всё равно занятный. Вот, например, встретился такой фрагмент манускрипта Urb.gr.15 (“Слова” Григория Богослова, десятый век, Ватиканская Апостольская библиотека):

И здесь знаками, напоминающими “>”, отмечена цитата из книги пророка Михея (Мих.2:10), использованная в тексте Григория Богослова (Слово 9), который ссылается на соответствующий стих так (самое начало текста на скриншоте): […]”Μιχαίας λέγειν, χαμόθεν ἡμᾶς ἀνέλκων ἐπι τὰ ἡμέτερα ὕψη” (“[…]Михей говорит, от земли нас поднимая на нашу (собственную) высоту”).
А более близкий к “>” по начертанию знак называется “дипле” (διπλῆ), и в дополнение к нему нередко, – но не всегда, – шли точки, расположенные сверху и снизу. Знак, конечно, не обязательно обозначал библейскую цитату, как и цитату вообще. Пример из Venetus A:

Этот фрагмент “про птицеведов”, кстати, недавно встречался в заметке про квантовые вычисления у Гомера.
Комментировать »
Забавно читать вежливые утверждения, что, мол, “возможно, эти LLM/AI всё же не размышляют, потому что вот – система считается одной из лучших, но не способна корректно умножить два девятизначных натуральных числа” (разрядность тут условная). То есть, утверждается, что данные системы обучены на текстах из Интернета, и что даже уже “текстов из Интернета” не хватает для дальнейшего обучения (наверное, теперь заказывают копирайтерам и рерайтерам тематические “опусы”). Однако, если в рамках “обучения” в систему загнали все тексты, скажем, “Википедии”, то, вообще говоря, этих текстов достаточно, чтобы научиться перемножать числа. Буквально – уже сведений из англоязычной “Википедии”, совершенно точно, достаточно для того, чтобы некий “интеллект” изучил базовые арифметические действия с натуральными числами и, если он “размышляет”, сообразил бы, как нужно их перемножать. Это очевидное наблюдение относится далеко не только к умножению чисел. Казалось бы. Но нет, это не так, если строится очередная “говорилка на цепочках”.
Комментарии (5) »
Всё ж, оказался очень открытым сервис LLM/AI DeepSeek – регистрация требовалась только для веб-интерфейса чата, а так-то все базы, похоже, были открыты, как говорится, “без SMS”. Цитата из сообщения OpenNET:
В ходе изучения публично доступных поддоменов deepseek.com исследователи обратили внимание на хосты оoauth2callback.deepseek.com и dev.deepseek.com, на сетевых портах 9000 и 8123 которых находился сервис хранения, основанный на СУБД ClickHouse. Сетевой порт 9000 использовался для подключения приложений, а через порт 8123 предоставлялся web-интерфейс, дающий возможность отправить любой SQL-запрос.
Выставленные настройки СУБД предоставляли полный контроль над операциями в БД, при доступе без прохождения аутентификации. По мнению исследователей, имеющегося доступа было достаточно для организации атаки, не ограничивающейся СУБД и позволяющей получить привилегированный доступ к инфраструктуре DeepSeek.
Комментировать »
Пример из серии про неявные преобразования и компьютерную алгебру. Табличный процессор Google Spreadsheets в браузере, скриншот:

То есть, написана формула “-3^2”, но в ячейке получаем значение 9, что не обязательно-то верно, как ни странно. Почему? Вообще говоря, в этой формуле неявно подразумевается следующее выражение: -1*3^2. Так как операция возведения в степень имеет более высокий приоритет, чем умножение, должно получиться -9. Если в том же приложении Google так и написать, с минусом и единицей, то получим верный ответ: -9. С другой стороны, может оказаться, что подразумевается использование операции взятия обратного по сложению, обозначаемой знаком “минус”, и она имеет приоритет выше возведения в степень. Ну или это просто “минус три” написано, то есть, (-3)^2. Поэтому, скажем, Gnumeric – тоже выводит 9, но при этом автоматом дописывает в формулу скобки вокруг -3.
(Пример попался в Telegram-канале Бориса Трушина.)
Комментировать »
В IEEE Spectrum небольшая статья (англ.) об истории одной программы спутниковой радиоразведки из 60-70-х годов прошлого века, в её развитии до 90-х.
Речь про системы NRO (штатовское агентство технической разведки), которые служили для обнаружения, классификации и геолокации советских РЛС по сигнатурам передатчиков. Ну, соответственно, фиксировали излучение не только передатчиков РЛС, но и других передатчиков, а также и их носителей, например, кораблей. Схема описана привычная – несколько спутников с синхронным временем и приёмниками на низкой орбите. Отдельно отмечен такой важный момент, как оперативная доставка “подписчикам” обработанных сведений. Первые спутники, в 60-х годах, записывали сигналы на магнитный носитель, пролетая над наблюдаемой территорией, а потом выгружали записанное, когда оказывались в зоне приёма наземной станции, где полученные данные ещё и анализировали какое-то заметное время. Однако к середине семидесятых добились поступления содержательной информации, представленной в удобной для “конечного пользователя” форме (то есть, сведения об активности советских систем на карте), с задержкой всего в несколько минут.
Понятно, что это всё секретные системы. Но нетрудно предположить, что с тех пор возможности спутниковой разведки для низких орбит увеличились многократно. По крайней мере, должно быть очевидно, что результат, который позволяют получить работающие синхронно сотни спутников, оснащённых современной твёрдотельной микроэлектроникой и мощными специализированными вычислителями на ASIC, просто несравним с параметрами трёх или пяти старых спутников. Тут не следует забывать про ключевой аспект: спутники на низкой орбите находятся всего в нескольких сотнях километров от поверхности планеты, а чувствительность и избирательность передового оборудования сейчас на “три поколения”, так сказать, выше, даже если за точку отсчёта взять не семидесятые, а девяностые годы прошлого века.
Комментировать »
К сожалению, “открытость” LLM/AI DeepSeek оказалась преувеличенной: для входа на сайт там требуют регистрацию, но зарегистрировать аккаунт мне не удалось, так как “Error sending code. Your email domain is currently not supported for registration”. Попробовал пару почтовых доменов – один на серверах Google даже, – но не работает. В общем, можно наблюдать типовой результат для современных шумных сервисов, тем более, когда это про AI/LLM, СМИ и биржевые рынки.
P.S. Зарегистрировать аккаунт я там хотел для того, чтобы проверить, что же оно напишет в ответ на задачки для “тестирования искусственности интеллекта”. Типа, “сколько букв “а” в слове “тарапараслит”, если читать его слева направо”.
Комментарии (3) »
Нестрогое, краткое описание чисел и ключей, возникающих в ML-KEM (но без алгоритмов самой криптосистемы). Это описание, к тому же, не использует технических математических терминов, хоть и требует некоторых знаний из школьного курса алгебры (про такое описание нередко спрашивают).
ML-KEM – модуль-решёточная криптосистема с постквантовой стойкостью, носившая название Kyber до своей стандартизации. “Постквантовая стойкость” означает, что криптосистема не взламывается алгоритмом Шора на достаточно мощном универсальном квантовом компьютере (теоретическом). ML-KEM позволяет одной стороне передать другой стороне через открытый канал секрет, который становится для этих сторон общим секретом.
Схема называется KEM – Key Encapsulation Mechanism. KEM является обобщением, которое делает возможным формальный анализ стойкости криптосистем в криптологии. KEM – это не система “шифрования” и не система “цифровой подписи”. Логически, в случае ML-KEM, используется преобразование исходного значения секрета при помощи открытого ключа в шифротекст. Необходимые алгоритмические дополнения, превращающие асимметричную криптосистему в KEM, как говорится, снаружи всё равно не видны. Вполне можно упрощённо считать, что секрет здесь передаётся в зашифрованном асимметричной криптосистемой виде.
ML-KEM стандартизована для нескольких сочетаний параметров. Используемое сочетание отражается цифрами, которые приписывают к названию: ML-KEM-512, ML-KEM-768, ML-KEM-1024.
Эти числа из названия следует воспринимать как “длину секретного ключа”, выраженную в “базовых элементах” – но не в битах! Ключи в ML-KEM строятся из многочленов (полиномов), имеющих 256 коэффициентов. Многочлены образуют векторы и матрицы. То есть, элементами векторов и матриц являются многочлены, а не “отдельные числа”.
Так, ML-KEM-768 использует размерность 3 (параметр называется k), что соответствует трём многочленам или 3*256 == 768 коэффициентам. Если бы размерность ключей была бы ровно три, то взлом не составил бы труда и без всяких квантовых компьютеров. Для 768 коэффициентов – вычислительная сложность существенно выше (а квадратная матрица 3×3, являющаяся частью открытого ключа ML-KEM-768, будет, в итоге, содержать 256×9 коэффициентов: девять полиномов, каждый – по 256 коэффициентов). 256 – один из фиксированных параметров ML-KEM. Коэффициенты многочленов берутся по модулю 3329, то есть, берутся остатки от деления на 3329, поэтому коэффициенты лежат в интервале от 0 до 3328. Внутри ML-KEM используются представления, вводящие отрицательные значения, это нужно для процедур округления рациональных чисел, но на верхнеуровневую картину данный аспект не влияет. Заметьте, впрочем, что особенности округления используются при упаковке шифротекста (см. ниже). 3329 – простое число, второй фиксированный параметр ML-KEM.
Открытый ключ ML-KEM состоит из матрицы (обозначается A) и вектора (обозначается t). Однако ни матрица открытого ключа (обозначается A), ни многочлены, составляющие вектор, – не передаются в формате “как есть”: чтобы сократить количество используемых байтов в ML-KEM применяется ряд оптимизаций. Вместо матрицы – передаётся 256-битное инициализирующее значение, из которого матрица вычисляется при помощи хеш-функции и специального алгоритма. Многочлены передаются как кортежи битовых представлений коэффициентов, но биты упаковываются в байты особым образом. Так, для многочленов, входящих в открытый ключ (помимо матрицы), запись одного коэффициента (значение в интервале [0,3328]) требует не более 12 битов, биты можно объединить как биты и записать, например, два значения в три байта (если бы два значения передавались без “упаковывания”, то потребовалось бы четыре байта). При передаче коэффициентов многочленов, формирующих шифротекст, используются другие методы оптимизации, существенно сокращающие количество байтов, нужное для записи шифротекста.
Запись открытого ключа ML-KEM-768 имеет длину 1184 байта. ML-KEM-512 – 800 байтов, а ML-KEM-1024 – 1568 байтов. Шифротексты – ML-KEM-768 – 1088 байтов, ML-KEM-512 – 768 байтов, ML-KEM-1024 – 1568 байтов.
Попробуем понять, почему длина открытого ключа и широтекста совпали в ML-KEM-1024. Открытый ключ в ML-KEM это квадратная матрица и вектор. В ML-KEM-1024 параметр k, задающий размерность матрицы и вектора, равен четырём, но матрица всё равно передаётся в виде инициализирующего 256-битного значения, то есть, 32 байта, а вот вектор – состоит из 4×256 элементов (напомню, что 256 – количество коэффициентов каждого многочлена, в векторе их четыре). Получаем, для вектора, 1024 коэффициента, пара которых занимает три байта. Делим и умножаем: 1024/2×3 == 1536 байтов, плюс 32 байта, задающих матрицу, итого 1568 байтов занимает открытый ключ.
Шифротекст (то есть, “инкапсулированный” ключ) в ML-KEM состоит из вектора (обозначается u) и одного многочлена (обозначается v). В варианте параметров ML-KEM-1024, вектор – это четыре многочлена (k==4). То есть, тут всего пять многочленов, 256 коэффициентов в каждом. Однако для многочленов, составляющих шифротекст ML-KEM, применяются другие способы “сжатия”, использующие свойства округления значений коэффициентов. Это позволяет уменьшить количество битов. Поэтому запись каждого коэффициента в ML-KEM-1024 для вектора u использует 11 битов, а для многочлена v – всего 5 битов. Считаем в битах: 4×256×11 == 11264 бита или 1408 байтов; это вектор; дополнительный многочлен – 256×5 == 1280 битов или 160 байтов; итого: 1408 + 160 == 1568 байтов. Параметры сжатия для шифротекста отличаются от набора к набору: для ML-KEM-1024 это 11 и 5 битов, для ML-KEM-768/512 – 10 и 4 бита.
В спецификации ML-KEM есть ещё параметры, обозначаемые буквой η (их два). Эти параметры задают интервалы значений при случайной выборке (семплировании) коэффициентов многочленов, служащих в качестве секретного ключа и маскирующих элементов (то есть, многочлена, задающего “ошибку”, которая скрывает передаваемые данные от стороны, не знающей секретного ключа).
Общий секрет в схеме ML-KEM имеет длину 256 бит строго. Это не секретный ключ, а секрет, который согласуют стороны. При получении секрета используеются хеш-функции и значение, передаваемое внутри схемы инкапсуляции. То есть, передаётся не сам секрет, а начальное значение, из которого принимающая сторона вычисляет верный екрет только в том случае, когда прочие параметры совпали. Это позволяет сделать схему стойкой в соответствии с формальными критериями. Логика же передачи секрета такова, что каждый бит отображается в коэффициент полинома, соответствующего, таким образом, этому секрету (с точностью до функции вычисления конкретного значения). Здесь используется основной трюк ML-KEM: математическая схема позволяет передать только один элемент за одну “транзакцию”, это часто и описано в элементарных примерах, но в ML-KEM этот элемент – многочлен с 256 коэффициентами, поэтому, приняв коэффициенты за ноль и единицу, передать можно 256 бит. Для отображения в ноль и единицу криптосистема использует округление по заданному правилу: грубо говоря, если значение коэффициента меньше половины максимального, то это ноль, иначе – единица (но может быть и ошибка – см. ниже). Таким образом, длина получаемого секрета – 256 бит.
В TLS клиент передаёт свой открытый ключ серверу, сервер вычисляет общий секрет на своей стороне и передаёт параметр, нужный для вычисления общего секрета, клиенту в виде шифротекста, который вычисляет, используя открытый ключ. Клиенту известен секретный ключ, парный открытому, поэтому, получив шифротекст, клиент вычисляет общий секрет, который в большинстве случаев совпадёт с секретом, полученным сервером. В ML-KEM заложена очень небольшая вероятность ошибки, поэтому секреты могут не совпасть даже тогда, когда все операции выполнены верно. На практике, ошибка проявляться не должна.
Комментировать »
Новый