Ресурсы: техническое описание TLS, LaTeX - в картинки (img), криптографическая библиотека Arduino, шифр "Кузнечик" на ассемблере AMD64/AVX и ARM64
Как с максимальной точностью ответить на вопрос “Что ты сейчас читаешь?”, заданный в мессенджере? Можно ответить, что “читаю сообщение в мессенджере”. Но ведь можно же и ещё точнее: “Сейчас я читаю слово это”. И нажать Enter. Но и тут есть тонкость: слово “сейчас” стоит в самом начале, так что к моменту начала чтения слова “это” – “сейчас” уже устареет. Соответственно, максимально строгий вариант такой: “Я читаю последнее слово этого предложения сейчас”. Особенно продвинутые читатели спросят, почему же речь о слове, а не о последней букве, например. Очень просто: читать можно минимум слово, а отдельную букву читать нельзя (если, конечно, она не является словом). Этому есть много причин, основных две: во-первых, попробуйте прочитать “ъ” (твёрдый знак, а не сходная по начертанию газета или мнемонический знак, обозначающий некоторое сложное понятие); во-вторых, чтение, как процесс, определяется свойством сборки букв в слова (мы рассматриваем классическое фонетическое письмо, а не пиктограммы и специальные конструкции вроде трансцендентной алгебры). Так что разумно ограничиться словом “сейчас” в конце предложения. Без точки, это допустимо для чатика.
(Этот текст я как-то уже публиковал, но не здесь.)
Комментировать »
Продолжаем небольшую серию записок про TLS-сервер на tls13.1d.pw. Этот сервер передаёт несколько сертификатов, в том числе и один необычный сертификат, увидеть который можно только в выдаче той или иной специальной утилиты (например, s_client из OpenSSL) или упомянутым сервисом SSLLabs. Этот сертификат сервер генерирует (и даже подписывает, но это тут не важно) в самом начале установления соединения, а в поля Subject и Issuer записываются, соответственно, IP-адрес с номером порта клиента и имя выбранной криптосистемы обмена ключами. Это такой экзотический способ “посигналить” в (закрытой) части TLS-сообщений. Клиенты должны бы игнорировать неподходящий сертификат в процессе валидации (но могут и ошибку выдать, конечно).
Комментировать »
Кстати, индекс 0x6399, который позволяет отличить ключи криптосистемы X25519Kyber768Draft00 в TLS-сообщениях, внесён в соответствующий реестр номеров IANA, в раздел под именем TLS Supported Groups. Название раздела – ещё один пример исторически сложившихся особенностей спецификаций: понятно, что X25519Kyber768 – никакая ни группа, а сразу две криптосистемы, построенные на различном математическом аппарате (но, естественно, группы нетрудно найти и в X25519, и в Kyber768). Изначально, упомянутый раздел параметров TLS содержал индексы именованных эллиптических кривых, то есть, сочетаний из параметров, определяющих конкретную кривую в прикладном смысле. Но так как для криптосистем существенны были именно операции в группе, а кроме эллиптических кривых ещё использовались (и используются) мультипликативные группы колец вычетов, то раздел, довольно давно, переименовали в “Поддерживаемые группы”, теперь туда записывают наборы криптосистем.
Комментировать »
Развивающаяся “битва за банхаммер” приводит к тому, что в “этих интернетах” появляются новые плоскости для осуществления сегментации, поскольку блокирование сейчас модно делать на достаточно высоком уровне – на уровне приложений. Недавний пример – стена (временная) регистрации в Twitter. Есть масса других примеров, где администраторы вроде бы “глобального” массового сервиса ограничивают к нему доступ для некоторых IP-адресов, но не на уровне транспорта, а средствами HTTP или внутри приложения на смартфоне. Вообще, может показаться, что, с точки зрения “маршрутов” и BGP – ничего не меняется: пакеты если ходят, то так и ходят, как ходили. Для инженера NOC, допустим, прежде всего важно, что отправленный по заданному адресу пакет до этого адреса добрался, а что там происходит на уровнях, которые строятся из пакетов, HTTP это или QUIC какой-нибудь, – дело десятое.
Однако, хоть популярное нынче блокирование и выполняется на один или два уровня выше, чем IP, это самое блокирование может спуститься ниже, но уже в виде технологического спагетти. Это происходит в тот момент, когда просят как-то повзаимодействовать с этим блокированием (неважно, в какую сторону) на сетевом уровне. Всем знакомый пример: VPN-доступ, позволяющий прийти на сервис с другим (географически) сетевым адресом. IP заворачивается внутрь UDP, а туннели неожиданным образом проходят между логическими уровнями. А IP в туннеле используется для создания TLS-соединения со скрытым сервисом. Туннелирование туннелей. Сегментация на уровне приложений спускается в маршрутизацию, где порождает неожиданные эффекты доставки пакетов, особенно, если пересекается с anycast-узлами. Попробуйте зарисовать логику на листочке бумаги – получится путаница из спагетти, напоминающая нехорошую практику в области кабельных соединений.
Дело в том, что хоть блокировать многие предпочитают на разных уровнях, но привычный идентификатор, по которому ставят задачи блокирования, это всё равно IP-адрес (не всегда, но очень часто). Конечно, никто не отменял локального блокирования на уровне физических портов, на уровне приёма BGP-анонсов, однако для массовых и популярных сервисов, которые работают поверх Интернета, – это всё ещё применяется редко. Напротив, сейчас видно, как довольно быстро выстраивается новый перемешивающий уровень (хороший пример – технология ECH, создающая каналы “TLS внутри TLS”). Это нивелирует возможности прицельного блокирования на уровне базового транспорта или, условно, “физических портов”, но позволяет построить банхаммер уровня приложений. Если, конечно, сохранится связность Сети, пусть и через спагетти-коммутацию транспортного уровня.
Комментировать »
Исходные тексты программ – ценный источник информации о возможной работе этих программ. Относится и к другим текстам. Ниже – два варианта записи одного и того же фрагмента из “Физики” Аристотеля на “языке оригинала”, то есть, это древнегреческий, но, конечно, переписанный много позднее Аристотеля и по другим источникам. В данном фрагменте Аристотель объясняет, что поскольку при падении через “пустоту” нет причин для того, чтобы разные тела набирали разную максимальную скорость падения, потому что отсутствует сопротивление среды, то и все тела будут “одинаково быстро” падать, а это, как считает Аристотель, невозможно – поскольку он так объясняет, что не может быть пустоты. Но это другая история, а здесь текст служит примером того, как могут различаться записи. Красными точками я отметил начало и конец фрагмента. Первый скриншот – из манускрипта, датируемого 12 веком:

Второй – из манускрипта, который “посвежее” и датируется, как я понимаю, чуть позже, то есть, 13 веком:

Хорошо, что сейчас много манускриптов качественно оцифровано крупнейшими библиотеками и опубликовано. Конкретно эти два – из Ватиканской апостольской библиотеки (снова). Не то чтобы первый вариант был легко доступен для чтения, но второй – прочитать гораздо сложнее: там и хитрых “скорописных” сокращений очень много, и шрифт замысловатый (между строками – там ещё и комментарии, кроме специальных знаков). Удивительно, что переписанные тексты в таких непростых конфигурациях вообще совпадают в деталях. Можно даже предположить, что библиотечное дело в 13 веке усложнилось, а в скрипториях поменялся технической распорядок. Но понятно, что это просто манускрипты разного происхождения, типа, класса и предназначения, а ошибки, связанные с неверной расшифровкой сокращений – вполне себе встречались (это отдельная тема).
Комментировать »
Иногда приходится слышать, что “нейросети и машинное обучение работают с действительными (вещественными) числами”. Звучит занимательно, потому что практически никакое действительное число в отдельный компьютер или даже в дата-центр, набитый специализированными “тензорными процессорами”, по записи не уместится. Более того, если бы действительные числа были доступны на этом технологическом направлении, то почему бы тогда не взять десятичную запись π и, вместо “обучения”, не найти там уже готовый набор коэффициентов под нужную задачу?
А процессоры для “машинного обучения”, в лучшем случае, работают с небольшим подмножеством целых чисел, даже когда используется надстройка в виде арифметики с плавающей точкой – что-нибудь из разряда bfloat16, FF32 и т.п. Эта арифметика максимально далека от действительных чисел, в которых, кстати, арифметику вообще очень сложно, если вообще возможно, построить даже теоретически. Свойства привычных “вычислений с погрешностью” уже для целых значений приводят ко всяким дополнительным хитростям, это кроме известных эффектов расщепления одного и того же числа на несколько представлений.
Можно было бы предположить, что использование в вычислениях некоторых математических констант выражается в том, что соответствующие этим константам бесконечные процессы как раз и позволяют системам машинного обучения достигать всё большей и большей точности, но и это не так: в современных многослойных “нейросетях” разрядность имеет совсем другое значение, а лучшая “сходимость” (что бы это ни значило) может достигаться при убывающей точности записи коэффициентов.
Комментировать »
Известно, что греческая буква “о-мега” это, в каком-то смысле, дважды буква “о-микрон”. Если точнее, то “о-микрон” – краткое О (“микро-о”), а “о-мега” – большое или долгое О. Занятно, что в некоторых старинных рукописных начертаниях омега как раз и записывается как два омикрона. Подтверждающий скриншот из манускрипта Urb.gr.15 (“Слова” Григория Богослова, десятый век):

Например, в конце второй (на скриншоте) строки, слово προθύμως – отчётливо видно, что буква ω построена в точности как пара склеенных ο. Такое же начертание омеги нетрудно обнаружить и в первой строке, в слове ἡμῶν (локализация границ самого слова, впрочем, может оказаться затруднительной, если оно не знакомо читателю). А вот пара “омикронов-окружностей”, придавленных сверху чертой – это тоже π.
При изучении скриншота может показаться, что там присутствуют некие “велосипедные” двойные омикроны в начале и в конце первой строки, но нет – это сигма и омикрон в слове ὅσοι.
Кстати, в палеографии этот вариант рукописного древнегреческого называется “минускулом типа bouletée”, а такая запись омеги – один из характерных признаков. (Наверное, скоро можно уже не отмечать записки про древнегреческий и палеографию как офтопики.)
Комментировать »
Кстати, очередной пример, почему ssh forwarding не такой безопасный вариант использования ключей на удалённых системах, как может показаться: при желании, через ssh-agent обратно может приехать исполнение кода на локальной системе, впрочем, с некоторыми дополнительными “плясками” – CVE-2023-38408. Авторы, естественно, не забывают упомянуть ASLR, PIE и NX:
“Surprisingly, by chaining four common side effects of shared libraries from official distribution packages, we were able to transform this very limited primitive (the dlopen() and dlclose() of shared libraries from /usr/lib*) into a reliable, one-shot remote code execution in ssh-agent (despite ASLR, PIE, and NX)”.
Комментировать »
Во вселенной Fallout (серия видеоигр, прежде всего) подземные бункеры (vaults), которые преподносятся публике как убежища на случай ядерной войны, на самом деле предназначены для проведения различных экспериментов над обитателями. Это и “социальные эксперименты”, запланированные для проверки тех или иных гипотез о выживании изолированных групп людей в разных условиях (социальная организация, недостаток ресурсов и т.д.), и биомедицинские эксперименты разной степени прямолинейности (например, поиск эффективных лекарственных средств методом “проб и ошибок”). Все эти эксперименты не ограничиваются какими-то “этическими рамками”, за исключением случаев, когда именно “этические рамки” различных версий и являются сутью эксперимента.
То есть, публичная версия о том, что бункеры – это защищённые автономные убежища, где люди могут долгие годы пережидать последствия массированных ядерных ударов, – являлась лишь прикрытием, а причина создания программы строительства бункеров была в другом: в обеспечении экспериментальной базы. При этом для успешного выполнения многих экспериментов бункеры действительно должны были быть автономными и действительно защищать своих многочисленных обитателей от “внешних воздействий”, а небольшая часть бункеров создавались как полноценные бункеры управления, без “экспериментальной части”. За всей этой программой в Fallout стоит секретная (и над-правительственная) организация Enclave (“Анклав”). И после того, как во вселенной Fallout наступило Событие (обмен ядерными ударами), эксперименты в бункерах действительно начались. Как, скорее всего, и планировалось.
Интересно, что в качестве “официальной” скрытой причины всей этой экспериментальной программы выступала идея об отправке колонистов с Земли на другие планеты в космическом корабле: дескать, эксперименты позволят нащупать оптимальный способ организации жизни и деятельности колонистов на борту корабля во время длительного полёта, а также выбрать представителей, наиболее подходящих на роль колонистов. Очень банальное обоснование. В том числе, с точки зрения художественной правды. Однако, насколько можно судить, тема с космическим кораблём и другими планетами, на самом-то деле, не была хорошо разработана, а тоже являлась прикрытием. Предполагался второй слой с объяснениями затеи: дело вовсе не в космическом перелёте, который может и не получиться, а в том, что нужно, при помощи научного подхода и экспериментальным способом, определить новые пути развития человеческого общества на Земле, и для этого нужны эксперименты в бункерах. При этом, вообще говоря, из сеттинга игр серии не очень-то понятно, получилось ли со “второй задачей” – понятно только, что колонисты к далёким планетам точно не полетели. Запутанная история.
Комментировать »
Почему-то нередко приходится сталкиваться с ошибочной интерпретацией отрицательных результатов в измерениях, применительно к разным интернет-протоколам. Типичный пример (условный, тем не менее): пусть к нашему тестовому серверу подключается (в терминах IP, например) узел, который, как предполагается, должен аутентифицироваться при помощи некоторого секретного ключа (открытый ключ – знает сервер), а в этой аутентификации – смысл измеряемого протокола. Если подключающийся узел успешно аутентифицирован, – положительный результат измерения, – то считаем, что этот узел корректно поддерживает данный протокол. Это более или менее понятно и более или менее надёжно. Но можно ли сделать вывод, что некоторый узел не поддерживает протокол, если этот узел не удалось аутентифицировать (отрицательный результат измерения)? Нет, нельзя сделать такой вывод. Если результат отрицательный, то можно предположить, что какой-то другой узел пытался подключиться вместо того узла, который предполагалось исследовать. Соответственно, в этом случае, нельзя сказать, есть на настоящем узле поддержка протокола или её нет. Конечно, если узлов много, можно сделать некоторые предположения, используя сопутствующую информацию. Например, на основе оценок того, был ли спуфинг IP и т.д. Однако судить об отсутствии поддержки протокола – нельзя. (Никакой “закон исключённого третьего”, понятно, тут не работает: мы не знаем, что там на подключающихся узлах и что это вообще за узлы, которые подключаются.)
Дополнение: речь в примере, естественно, идёт об исследовании узлов не по адресам, а относительно некоторого набора признаков, определяющих поддержку протокола, например, относительно набора ключей, известных серверу.
Комментировать »
Кстати, так как в проект “Рувики” автоматом и полностью скопированы статьи из “Википедии”, туда, в статью “Великая теорема Ферма“, успешно перешло и забавное “эллиптическое уравнение”, про (показательное) возникновение которого в “Википедии” я писал ранее. Исправления вносить тоже нельзя (да я и не планирую, если что). Естественно, и все прочие странности в статьях перешли вместе с ними. Поэтому сохранился, скажем, характерный пример про физику Аристотеля, который очень удобно приводить в качестве иллюстрации (так как там есть даже ссылка на источник, на перевод “Физики” Аристотеля, но при этом в источнике-то сказано совсем другое; однако, мало кто читает даже источники по ссылкам, тем более, что утверждение “Аристотель считал, что тяжёлые тела падают быстрее лёгких” – является слишком хорошо распространённым штампом).
Комментировать »
Новый