Снова пишут о том, что пользователи TOR могут быть “деанонимизированы” при помощи анализа параметров трафика с сопоставлением по времени. Почему-то, иногда такая особенность преподносится как новость. Но это весьма старый метод. Например, я писал об этом почти десять лет назад на dxdt.ru:
Внутри сети TOR пользовательский трафик зашифрован, “вложенным” шифрованием. Известно, что параллельный анализ трафика, наблюдаемого на входном и выходном узлах (то есть, трафика, входящего в TOR и выходящего из этой сети), позволяет деанонимизировать источник трафика.
P.S. В той записке есть ссылки на два внешних ресурса: PDF с исходным описанием на сайте издания Spiegel и ссылка на сайт журнала “Доменные имена”, в котором я публиковал статью по теме. Показательно, что ни одна из ссылок нынче не ведёт на документы и тексты: обращение по адресу на сайте издания Spiegel – возвращает HTTP 404, а ссылка на сайт “Доменных имён” – переадресует на главную страницу nic.ru. В последнем случае, это связано с тем, что RU-CENTER вообще удалил сайт журнала – мне до сих пор непонятно по какой такой причине, поскольку, хоть сам журнал и закрыли, но на сайте был весьма полезный архив номеров.
Комментировать »
Вот ещё один занятный пример про неверное описание “квантовых технологий” и криптографии. На сайте IBM, – вроде бы, профильной технологической корпорации, – размещена справка о том, что же это такое – “квантовая криптография”. В самом начале справки утверждается, будто “у квантовой криптографии есть потенциал стать более надёжной/стойкой (secure), чем предыдущие виды криптографических алгоритмов, и она невзламываемая (unhackable) даже теоретически”. Этот момент про исключительную надёжность, весьма традиционный, базируется на не менее расхожем утверждении, что в основе стойкости квантовой криптографии, как бы, лежат некие “физические законы” или “законы природы”. Несмотря на то, что из самого описания алгоритмов понятно, что в основе стойкости лежит принятая математическая модель некоторой статистики и интерпретации, не менее математической, физических экспериментов с квантовыми частицами (одной из интерпретаций). То есть, технический метод защиты информации, передаваемой по физическим каналам связи, почему-то опять объявляется абсолютно стойким.
Cтатья, впрочем, идёт дальше и необходимость квантовой криптографии обосновывает тем, что квантовый компьютер, дескать, поможет быстро “факторизовать числа” и взломать RSA. А квантовая криптография тут может оказаться единственным способом защиты, потому что её не удастся взломать квантовым компьютером (что, вообще говоря, далеко не факт, если задуматься). Это, впрочем, вещи из совсем разных областей: не только нельзя путать технические методы защиты информации с математической криптографией, но и методы квантовой криптографии никак не избавляют от необходимости аутентификации сторон, между которыми установлен защищаемый технический канал связи. То есть, здесь тоже требуются либо заранее распределённые доверенным способом секретные ключи (но зачем тогда ещё и квантовая криптография?), либо какой-то механизм электронной подписи (который, конечно, будет чисто математическим, и как бы ещё не оказался на практике той же самой RSA в X.509-сертификате).
Отдельно можно отметить, что на той же странице размещён и небольшой блок текста про постквантовую криптографию, которая, – в заметном противоречии с только что заявленной уникальностью квантовой криптографии, как можно подумать, – тоже предлагает “квантово-защищённые” алгоритмы.
Комментировать »
Как понять, что факторизация числа 15 не может ничего говорить о реализации квантового алгоритма Шора? Понять это несложно: один из делителей числа 15 должен быть меньше 4 (потому что 4^2 == 16), единица не рассматривается по условиям задачи, и это не 2 (потому что только нечётные подходят). Так что любой процесс поиска, каким бы аналоговым он ни был, если вообще сходится, то неизбежно попадёт в 3, что и будет верным ответом.
Заметьте, что ещё и 5 = 3 + 2, а простых чисел, меньших 15, только шесть: поэтому, учитывая, что умножение здесь коммутативно (это очень важно для квантовых алгоритмов), число 2 отбрасывается, а схема поиска расщепляется на пары, то, в самом худшем случае, вероятность, что аналоговый аппарат, состояния которого переключаются по возможным узлам дерева, промахнётся – меньше трети. (На практике, ещё раз, для промахов там просто нет места.)
Комментировать »
Представьте нехитрую схему с простым 8-битным микроконтроллером, семисегментным индикатором, сегменты которого подключены в произвольном, неизвестном заранее, порядке к выходам микроконтроллера, и с парой кнопок.
Программа, прошитая в микроконтроллер, реализует следующую логику: на индикаторе включаются сегменты случайным образом, после чего пользователь должен определить, похожа ли конфигурация на заданную арабскую цифру (и ноль), а если похожа, то нажать одну кнопку (“Да”); соответственно, если непохожа, то на вторую кнопку нажать. Нажатие на вторую кнопку приводит к тому, что микроконтроллер генерирует новую комбинацию сегментов. Цикл с участием пользователя повторяется. Подтверждение же конфигурации – приводит к тому, что микроконтроллер запоминает её как обозначение выбранной цифры, после чего переходит к следующей цифре. Далее, опять же, цикл повторяется. Начинается всё, предположим, с нуля.
Комбинаций сегментов для семисегментного индикатора – не так много, даже по меркам микроконтроллера: 127. Опробованные состояния индикатора сохраняются в памяти, а “ошибочные” – второй раз не выводятся. “Успешные” состояния – записываются в отдельный массив, с индексом, соответствующим числовым значениям нужных цифр ({0,1,…,9}). Если достаточно долго нажимать кнопки, то в результате получится “знакосинтезирующий” массив. “Ещё пять тысяч вёдер и – золотой ключик у нас в кармане!”.
Почему-то сейчас забывают, что эта технология из прошлого века – есть типичное машинное обучение, результатом которого является массив индикации для цифр. Соответственно, цитата из пресс-релиза может выглядеть так: “система использует методы машинного обучения для синтеза цифровой индикации”.
Комментировать »
В июне этого года я удивлялся, что на сайте ИИ-корпорации SSI даже тег div в коде страницы закрыть не могут, что уже там говорить про добавление DOCTYPE. Уже сегодня эта корпорация получила миллиард финансирования (насколько я понимаю, по меркам данного рынка – не очень много), об этом они написали пару строк на сайте и – чудесным образом – тег div в коде теперь закрыт! (Впрочем, возможно, что и раньше закрыли, не дожидаясь минимального финансирования.) А вот DOCTYPE всё ещё не реализовали.
Комментировать »
Решил посмотреть, что пишут в поисковых машинах про TLS. Не обошлось без ИИ. По профильному запросу “Аутентификация в TLS” поиск Ya.ru (это “Яндекс”) отдельным блоком в самом верху страницы показывает текст со странным утверждением, что MITM-атака, это “когда третья сторона вмешивается в соединение двух участников и перехватывает закрытые ключи”. Тут же указано, что это текст от YandexGPT. Да, MITM подразумевает вмешательство третьей стороны, но суть атаки состоит в том, что эта третья сторона выдаёт себя за другого участника обмена, а не “в перехвате закрытых ключей”. MITM, хоть и может использоваться для “перехвата ключей”, но, вообще-то, не про перехват, а про подмену.
Впрочем, цитата сопровождается ссылкой на более объёмное “Введение в TLS”, которое, насколько можно понять, тоже сгенерировано YandexGPT, однако подписано Yandex.Cloud и опубликовано на другом сайте из “обломков” “Яндекса”, а именно, – ни много ни мало, – на сайте самого этого сервиса Yandex.Cloud, который, вроде бы, имеет прямое отношение к информационным технологиям (впрочем, сейчас уже сложно определить). Кроме прочих занимательностей, на этой странице с описанием TLS, например, в блоке с подзаголовком “Целостность данных в TLS” сказано, буквально, следующее:
“TLS гарантирует защиту передаваемых данных от потери, изменения или дублирования. Для этого применяются функции хеширования, вычисляющие контрольный хеш данных и присоединяющие его к основному сообщению. Сравнение отправленной и полученной хеш-суммы данных позволяет убедиться в том, что информация пришла в исходном виде”.
Насколько это далеко от реальности? Так, TLS никак не гарантирует “защиту передаваемых данных от потери”: такая защита – задача из области, как минимум, транспортных протоколов, а как максимум – из области помехоустойчивого кодирования. В TLS и близко нет никакой защиты от потери данных. Напротив, протокол полностью полагается на то, что данные между сторонами уже передаются без потерь. Что касается защиты данных от изменения – да, целостность TLS пытается обеспечить, верно. А вот защита “от дублирования” – это, видимо, из области систем хранения данных (дело в том, что от “дублирования передаваемых данных” TLS тоже никак не защищает, передавайте сколько хотите копий исходных данных, однако не стоит тут путать слова из описаний атак, основанных на повторной передаче сообщений).
Конечно, “сравнение отправленной и полученной хеш-суммы данных” вовсе и не позволяет убедиться в том, что “информация пришла в исходном виде”, как почему-то утверждается: к изменённым данным нетрудно приделать соответствующее значение хеш-функции, поскольку хеш-функции для заданного значения вычисляются быстро, а вот коды аутентификации – они хоть и используют хеш-функции и подобные конструкции, но работают совсем не поэтому и не так: обнаружение изменения данных обеспечивается секретностью общего ключа аутентификации сессии, а не самой хеш-функцией.
К сожалению, некорректные и весьма странные утверждения встречаются по всему упомянутому тексту. Видимо, это всё результат, выданный синонимайзером YandexGPT. Например, в блоке “Преимущества использования TLS” утверждается, что “протокол TLS поддерживает NAT” и что “в TLS встроены функции журналирования и аудита”. Если что, то ни первое, ни второе – не верно: в TLS, естественно, нет “поддержки NAT”, но протокол, понятно, может работать через соединение, использующее трансляцию адресов (NAT); TLS не предусматривает никакого “журналирования и аудита” на уровне протокола, да ещё и в качестве “преимущества”, всё строго наоборот – TLS современной версии (1.3) старается снизить возможности по сбору метаинформации, которая могла бы обеспечить “журналирование” и “аудит”.
Представьте, что текст, позиционируемый как описание принципов построения современных языков программирования, содержит следующий фрагмент: “В языках программирования очень распространён оператор присваивания. Из-за своих преимуществ этот оператор обозначается двойной вертикальной чертой и помещает в переменную справа, которая называется “регистром”, значение суммы переменных слева. Оператор присваивания повсеместно записывается вот так: a,b || c”. Подходит ли такой текст в качестве ответа на вопрос об операторах в современных языках программирования? Вряд ли. При этом, поисковые системы всё ещё не полностью растеряли “авторитетность” в глазах пользователей Веба, так что пользователи теперь вынуждены пытаться осмыслить “ответ”, сгенерированный LLM, тем более, что ответ, – вроде как, – записан строгим текстом. Такой вот прогресс.
Комментировать »
Кстати, что касается программ-мессенджеров. Естественно, тут вообще практическая часть задачи сводится к доверию конкретному приложению, которое, – в теории, – реализует “некоторую криптографию”. Более или менее игнорировать техническую часть, заключающуюся в доверии приложению, позволяет только хорошая подготовка и настоящий одноразовый “шифр-блокнот”: то есть, буквально, когда используется секретная книжечка с числами – это даёт абсолютную стойкость, но с большими оговорками. Во-первых, такие книжечки непросто распределять по участникам с сохранением нужной секретности, пусть металлический контейнер тут и получше новомодной квантовой криптографии; во-вторых, использование подобной ручной схемы всегда сопряжено с ошибками, которые легко перечёркивают слово “абсолютная” в характеристике стойкости; в-третьих – тут оказывается немало метаинформации, начиная с самой книжечки, как объекта. В общем – фантастика какая-то. Поэтому возвращаемся к приложениям.
Приложение может вообще не удалять локальные копии сообщений, даже если пользователь их, как бы, удалил. Приложение может вместе с зашифрованным сообщением отправлять копию в открытом виде, но через защищённый канал “клиент-сервер” в центральном мессенджере, так что обычный анализ трафика, проводимый интересующимся исследователем, ничего подозрительного не покажет. Приложение может генерировать одни ключи, а использовать – другие. А может и – просто генерировать нестойкие ключи, которые будут выглядеть как стойкие. Кстати, что касается симметричных криптографических ключей в мессенджерах, тот тут, почему-то, продолжают говорить, что “они есть только на клиентах”, при этом подразумевая согласование по открытому каналу. Так сейчас не бывает. Согласование секретных симметричных ключей через открытый канал, при помощи, например, алгоритма Диффи-Хеллмана, вовсе и не означает, что “ключи есть только на клиенте” – это “маркетинговый трюк”, я как-то писал об этом подробно. А вариант, в котором симметричные ключи действительно есть “только на клиентах”, это когда сами клиенты эти ключи не только генерируют, но и обмениваются ими по отдельному защищённому каналу: для оценки практической пригодности – см., опять же, первый абзац про книжечку-блокнот.
Проблема тут ещё и в том, что даже проверка совпадения результатов обмена ключами тоже проводится приложением, так что пользователь вынужден ему опять доверять. Заметьте, что ключи, даже если они были согласованы и проверены в результате корректной сессии обмена, могут быть прозрачно заменены уже на следующем шаге, в ходе обмена сообщениями, и речь тут вовсе не про необходимую ротацию ключей в современных сложных протоколах, предназначенных для защиты в режиме “точка-точка” (E2E), – ключи могут быть заменены на известные третьей стороне, а приложение забудет об этом сообщить. Впрочем, понятно, что всё это вообще не применимо, если на сервере сообщения передаются в открытом виде.
Комментировать »
Массовый централизованный сервис для обмена сообщениями должен обеспечить собственную надёжность и иметь возможности по восстановлению. Уже эти моменты гарантируют, что с пользовательскими сообщениями, сохраняемыми внутри сервиса, ситуация будет не самой прямолинейной, поэтому рассуждать об удалении переписки по команде пользователя – несколько странно. Посмотрим подробнее на разные особенности “хранения сообщений”.
Так, сообщения сохраняются в какой-то, условно, “базе данных”, потому что речь про централизованный сервис. База может быть распределённой или нет, это тут не особенно важно, потому что “распределение” всё равно происходит внутри единого сервиса (по условию задачи). Работа с базой данных может быть реализована при помощи той или иной распространённой СУБД, либо каким-то собственным решением; да, от хорошо спроектированного сервиса – можно было бы ожидать собственного специализированного решения. Однако тип решения для управления базой данных тут тоже не важен, поскольку так или иначе должны быть и “холодные” резервные копии, и реплики, работающие онлайн, последние, как минимум, необходимы для балансировки между дата-центрами и для обработки локальных отказов. И резервная копия, и реплика – содержат сообщения пользователей в некоторых файлах, выгружаемых на “диски” (то есть, в систему хранения данных). Если эти файлы куда-то утекают, то, понятно, из них можно восстановить сообщения. Кто-то сделал дамп дисков системы хранения данных (или, условно говоря, просто вынул пару дисков и унёс, потому что “так можно было”)? У этого “кого-то” теперь есть все сообщения.
Удаление сообщений ещё и в резервных копиях, – тем более, в упомянутых “побочных” дампах, – представляет собой очень большую технологическую проблему, что бы там ни публиковалось в маркетинговых материалах. Зашифрование резервной копии – не делает сообщения и данные удалёнными (см., впрочем, про ключи и связанные аспекты ниже), а дампы баз данных нередко делают в открытом виде, хоть бы и просто в SQL.
Дело не только в упомянутых файлах, которые содержат копии сообщений. Для того, чтобы сделать резервную копию или синхронизировать реплику – данные, в подавляющем большинстве случаев, должны быть переданы по сети внутри сервиса (заметьте, что это не эквивалентно даже понятию “внутри одного физического сегмента LAN”). Таким образом, резервирование данных в больших сервисах – тоже порождает сетевой трафик, который может ходить и внутри одного дата-центра, и между дата-центрами (более того – в случае резервных копий, в хорошей системе, трафик просто обязательно ходит между разными дата-центрами, так как делать резервное хранилище в том же дата-центре, где и основное, это архитектурная ошибка). Если этот трафик записывается, то из него можно восстановить данные. Трафик может быть защищён (VPN и пр.) от прослушивания, но может и не быть, а ключи от VPN – бывает, “утекают из-под коврика”.
Другой, менее очевидный, вариант: разнообразные логи – общие системные, а также логи конкретных программных сервисов. В лог-файлы записывается самая разнообразная информация. Там могут быть и пароли пользователей, в том числе, в открытом виде (известная история из практики Facebook); могут быть ключи/пароли, защищающие резервные копии; могут быть реквизиты доступа к базам данных и много всего другого, вплоть до самих текстов сообщений, передаваемых мессенджером. Логи (лог-файлы) передаются через вычислительную сеть – это самое обычное дело: в “операционной практике” принято логи собирать на центральных лог-коллекторах, которые являются отдельными физическими серверами. Более того, типовая практика подразумевает использование логов в системах обнаружения вторжений (или “обнаружения утечек/угроз”, SIEM и т.д., и т.п., там море аббревиатур и терминов, так что называть можно по-разному, но часто наличие такой системы – ни много ни мало, а строгое требование политики ИБ). А чтобы логи так использовать, их нужно скопировать в соответствующую систему. Понятно, что делаются и резервные копии логов, а сами лог-записи, – возможно, превращённые в какие-то типовые “сообщения о событиях”, – записываются в ту или иную дополнительную БД (“от SIEM в SOC”). У этой БД есть реплика, резервные копии, ну и так далее.
Это далеко не всё. Сейчас повсеместно используется виртуализация вычислительных ресурсов. Наличие виртуальных машин автоматически подразумевает, что есть и гипервизор с системой управления им, а это, в свою очередь, означает, что имеется и популярнейший механизм под названием “снапшоты”. Полноценный снапшот записывает в файл полную копию состояния виртуальной машины, включая дамп оперативной памяти. То есть, в такой снапшот попадают и данные, которые программное обеспечение, работающее в виртуальной машине, не записывало на диск (например, те самые “сансовые ключи” от чего угодно, которые “под ковриком”).
Снапшоты снимаются администраторами и DevOps, специалистами ИБ и SecOps, и даже другим инженерным персоналом (с более экзотическими обязанностями). Снапшоты, без всяких сомнений, нужны. Они нужны: для резервирования; для обнаружения угроз; для исследования условий потребления ресурсов; для экспериментов; для изучения “всяких странностей” (постоянно используются, не шутка). Снапшоты могут содержать образы баз данных, файлы с ключами, файлы логов и много всего ещё. Снапшоты рутинно передаются через сетевые соединения. В снапшотах сохраняются сообщения пользователей сервиса. Отследить, чтобы сообщения удалялись из снапшотов, чтобы удалялись сами снапшоты, как и то, чтобы в снапшот не попала чувствительная информация, – задачи слишком сложные. Обратите внимание, что при это доступ на уровне гипервизора подразумевает, что нужны и резервные копии “данных гипервизора”.
А ещё есть контейнеризация (читай – разные воплощения Docker). Контейнеры – это программно-обособленные копии системного и прикладного окружения. Контейнеры, как и снапшоты виртуальных машин, могут попадать в резервные копии, передаваться между серверами, и так далее, и тому подобное. Естественно, внутри контейнера легко могут оказаться (и оказываются) самые критически важные данные и ключи доступа.
Общее “зашифрование бэкапов” (это сейчас уже звучит скорее как описание успешной разрушительной атаки на инфраструктуру), да ещё и с ключами, имеющими срок действия, после которого они уничтожаются, означает, что в нужный момент доступа к данным в резервных копиях не окажется, потому что необходимые ключи будут “максимально безопасно” сохранены в самих зашифрованных бэкапах.
Вернёмся к обсуждению сервисов, реализующих “мессенджеры”. Архитектурной особенностью центрального (централизованного) сервиса обмена сообщениями является то, что все точки “копирования сообщений” будут сосредоточены в небольшом количестве “сетевых локаций”. Для действительно распределённой P2P-системы это было бы не так. В теории, даже в центрально сервисе, если пользовательские сообщения, передаваемые сервисом, зашифрованы на стороне клиента без доступа сервера к ключу, то во всех упомянутых выше случаях внутри копий на стороне сервиса окажутся только зашифрованные “блобы”. Проблема в том, что такой идеальный подход на практике реализован далеко не всегда, даже если заявлен и предусмотрен. Это происходит из-за наличия ошибок и административных “особенностей” (как минимум, тут всегда остаются открытыми метаданные, а ключи – могут и утечь). Если же ключи как-то на сторону сервиса передаются, то эти ключи там могут быть сохранены, в том числе, в результате “побочных процессов”, например, в момент миграции конкретного экземпляра ПО сервиса на другую аппаратуру.
Комментировать »
Занятно читать массовые рекомендации про “срочно удалите все сообщения из переписок в мессенджере” в свете новостей о популярном мессенджере Telegram.
Дело в том, что даже если удалённые на устройстве-клиенте сообщения действительно удалятся и на серверной стороне (если они там были, да), в том числе, из всех “бэкапов” разных уровней, то это вовсе не означает, что удалится и соответствующий трафик из сетевых дампов.
Telegram – центральный мессенджер, это означает, что нетрудно определить узлы, через которые проходят все сообщения. Даже если сервер сообщения удалил (не факт, но ладно), то соответствующий трафик, при необходимости, без проблем, в пассивном режиме, сохраняется на стороне подключения каждого дата-центра, ну, это как минимум. Каких-то уведомлений “арендатора” для того, чтобы поставить “сплиттер” в нужном месте, не требуется. Все сообщения восстанавливаются из трафика, если имеются нужные ключи.
(Дополнение: да, естественно, в удалении сообщений с устройства может быть польза, понятно; речь о другом; о том, что нужно использовать правильную “модель угроз”; удаление сообщений в приложении на устройстве – это удаление сообщений в приложении на устройстве, не более того: сообщения-то и с устройства при этом могут не удалиться, что уж говорить про прочие хранилища.)
Комментарии (2) »
Кстати, что касается постквантовых криптосистем от NIST и “квантовых компьютеров, взламывающих современные криптосистемы”, которые, якобы, “могут появиться через десять лет” (а могут и не появиться): есть ещё ничуть не менее распространённый штамп, утверждающий, в этом контексте, что “квантовые компьютеры кардинально быстрее решают задачу факторизации”. Факторизация – это разложение данного числа на простые множители. Однако речь в данном штампе почти всегда идёт про алгоритм Шора. Технически, это разные утверждения: о скорости факторизации и – про алгоритм Шора. Что не так важно. Куда как более показательно, что никакой “квантовый компьютер” пока что вообще не решал задачу факторизации, что уж там говорить про то, чтобы решать эту задачу “кардинально быстрее”.
Без преувеличений и “раздувания хайпа” надо было бы сказать, что алгоритм Шора описывает теоретическое “квантовое преобразование”, которое позволяет снизить сложность факторизации, проводимой классическим компьютером, до полиномиальной. И тот же математический аппарат, который порождает данное “квантовое преобразование”, пока что успешно используется при интерпретации некоторых физических экспериментов. Не более того. О каком-то “кардинально быстрее” – и речи-то пока что не идёт. А вот “постквантовая стойкость” – это, в рамках термина, именно предполагаемая стойкость именно к “алгоритму Шора”.
Понятно, что стандартизованная постквантовая криптосистема может оказаться уязвимой для классического криптоанализа (и, скорее всего, так и выйдет). При этом, несмотря на прижившиеся штампы в СМИ, пока никто не продемонстрировал, как именно можно было бы реализовать алгоритм Шора с полиномиальной сложностью, что называется, в железе. Потому что те немногие эксперименты с числом 15 или чуть большим числом, на которые ссылаются много лет, в принципе не позволяют проверить ключевую часть реализации алгоритма – квантовое преобразование Фурье.
Тем не менее, пробовать построить квантовый компьютер хотя бы на 2^1024 состояний – это полезно.
Комментарии (2) »
NIST выпустил первые стандарты по криптосистемам с постквантовой стойкостью. Как и ожидалось:
- FIPS 203: обмен ключами (KEM) – Kyber, который в стандарте называется ML-KEM, где ML – это Module-Lattice (модули с решётками, а не “машинное обучение”);
- FIPS 204, FIPS 205: подписи – CRYSTALS-Dilithium (ML-DSA, основной, 204) и Sphincs+ (SLH-DSA, дополнительный/резервный, 205).
(via)
P.S. Универсальных квантовых компьютеров пока нет и не видно, даже если присмотреться, но NIST в новости намекает, что, “как предсказывают некоторые эксперты”, квантовые компьютеры, способные взламывать современные криптографические алгоритмы, всё же могут появиться в течение десяти лет.
Комментировать »