Ресурсы: техническое описание TLS, LaTeX - в картинки (img), криптографическая библиотека Arduino, шифр "Кузнечик" на ассемблере AMD64/AVX и ARM64
Немного про административную структуру, связанную с доменами верхнего уровня. Про эту структуру сейчас почему-то забывают, сосредотачиваясь на регистраторах, с которыми взаимодействует обычный пользователь. Однако, в современных интернет-реалиях, эта административная стурктура довольно важна. Домены верхнего уровня здесь – это имена зон, указанные в корневой зоне общепринятой (пока что) системы доменных имён (DNS): .COM, .NET, .RU, .PW, .BAR и др., их сейчас очень много, заметно больше 1500. Корневой зоной всё ещё управляет IANA под эгидой ICANN, но сейчас речь о другом. А именно: практически у всякого домена верхнего уровня есть обособленный администратор, технический контакт и оператор реестра. И это всё могут быть совсем разные организации. (Тут встречаются исключения, конечно, но весьма редкие: “потерявшиеся” зоны, “спорные” зоны, тестовые домены и так далее – эти случаи не рассматриваем.)
Администратор – определяет, как именно управляется домен верхнего уровня: устанавливает правила и т.д. Администратор же выбирает оператора реестра. А вот реестр – это такая специальная база данных, связанная с технической частью DNS, которая содержит сведения о регистрациях имён (в том числе, сведения о регистрантах/администраторах) и, поэтому, служит источником сведений для настроек доменов в качестве пространства сетевых имён внутри доменной зоны.
Административные и технические роли в доменах верхнего уровня могут пересекаться неожиданным образом. Например, что общего у доменов .PW и .BAR? Администраторы – разные. Технические контакты – разные. Даже класс домена отличается: .PW – это домен ccTLD (национальный), а .BAR – это New gTLD (домены, добавленные в DNS силами ICANN в рамках процесса “массового расширения”). Поэтому далеко не всякий продвинутый интернет-пользователь знает, что за этими разными доменами стоит один и тот же провайдер сервисов реестра: компания CentralNic (это, впрочем, и не скрывается).
Так вот, техническая процедура регистрации имени в том или ином домене верхнего уровня всегда требует участия оператора реестра. С реестром, в большинстве случаев, взаимодействуют компании-регистраторы, которые прошли процедуру получения доступа: их к реестру, что назывется, “подключили”. Регистраторы, в свою очередь, предоставляют услуги конечным пользователям (физическим и юридическим лицам). Правила взаимодействия регистратора с реестром должен определять администратор домена верхнего уровня, исходя из свойств домена, но администратор вполне может поручить подготовку и реализацию всех технических деталей оператору реестра. Реестр, в принципе, знает и все детали регистраций имён, ну, с точностью до того, как их передаёт регистратор.
Что это всё означает? Это означает, что если оператор реестра того или иного домена верхнего уровня станет что-то блокировать (по указанию администратора домена или без такого указания), то он может заблокировать передачу регистраций с конкретными данными регистрантов (администраторов доменов уровнем ниже). И регистратор с этим не может ничего сделать. Собственно, регистратора могут просто отключить от реестра, а доменные имена, которые через него зарегистрированы, передать другому регистратору, снять с делегирования (то есть, они не будут доступны в DNS) и перевести в статус “заблокированных”, переделегировать произвольным образом, или просто удалить – вариантов тут масса.
Пояснение: главное тут даже не отключение регистратора, а то, что реестр может блокировать доменные имена на основании их свойств – например, по геопривязке данных администратора, – вне зависимости от регистратора-источника.
Комментировать »
Кстати, что ещё касается регистраторов и, в частности, GoDaddy. Доменные зоны, а точнее – имена хостов в этих зонах, – часто используются косвенно, в составе тех или иных технических систем. Про это могут забыть даже администраторы и DevOps. Тут могут быть имена авторитативных серверов DNS (NS), имена для почтовых серверов, технические зоны для CDN и прочих систем распределения нагрузки. Потеря подобного имени может привести не только к недоступности ресурсов, но и к той или иной подмене адресации (потому что имя могут перехватить). При этом, GoDaddy мог выступать провайдером DNS-хостинга, что означает появление задач по корректному переносу самой доменной зоны. Так что проблемы у администраторов и DevOps, конечно, могут быть. Особенно, если учитывать, что изменение регистратора доменного имени, даже при содействии отдающей стороны, может занять время: нужно получать коды подтверждения, снимать/устанавливать разные флаги, вести дополнительную переписку. У GoDaddy, например, не самая надёжная и понятная панель управления – часто при переносе имён происходят какие-то загадочные сбои, не отправляются письма.
(И, опять же, не стоит забывать про реестры.)
Комментарии (1) »
Про использование QR-кодов в качестве транспорта для различных атак я писал и десять лет назад, и ранее, а сейчас вот тема вдруг обрела дополнительную популярность: СМИ распространяют предупреждения FTC. Процитирую свою записку, вышедшую в 2012 году:
Получается, потребитель QR-кода ничего не знает о том, что стоит за кодом. Человек даже не в состоянии прочесть этот код самостоятельно, без использования электронного устройства (сравните с “текстовым” URL). А вот владелец сервера, на который приходит браузер смартфона (мобильного устройства), напротив, обладает как минимум следующей информацией: некий IP-адрес, связанный с устройством (определяет оператора, провайдера, дополнительный источник данных о местоположении); тип устройства; тип ПО на этом устройстве, сведения о браузере; ну и весьма точные данные о местоположении пользователя в данный момент.
Комментировать »
Всякая беспроводная технология предоставляет множество дополнительных направлений для скрытых дистанционных атак. В этот раз продолжают эксплуатировать вектор Bluetooth для беспроводных клавиатур и прочих HUD: возможность обойти авторизацию/аутентификацию позволяет подключиться к устройству с правами локальной клавиатуры, дальше – и так понятно. В большинстве случаев – проблема кардинально и без существенных дополнительных трудностей решается проводами, но это мало кому интересно. Кстати, даже древний ИК-порт тут сильно лучше защищён, потому что требует прямой видимости, но ИК-порты давно вышли из моды.
Комментировать »
Радиомодуль (процессор радиоканала) в смартфоне является “вещью в себе”: то есть, это автономный, аппаратно обособленный вычислитель с аналоговой подсистемой для радиосигналов, достаточно мощный, со своим встроенным программным обеспечением, который другим модулям предоставляет некоторый интерфейс “радиомодема”. (Тут ещё не нужно забывать про WiFi, Bluetooth и пр., конечно.) Например, как недавно сообщали, даже в Apple почему-то не смогли пока что разработать собственный процессор радиоканала. Аппаратные и программно-аппаратные недокументированные возможности для смартфонов можно придумать весьма занимательные – например, несколько лет назад я описывал гипотетический вариант со схемой получения информации по акустическому каналу, потенциально устойчивый к исследованию ПО и схемотехники. Особенно интересно могут выглядеть недокументированные возможности, встроенные в процессор радиоканала – потому что это устройство видит радиоэфир.
Радиомодуль смартфона должен принимать разнообразные сигналы, понятно, что там не может быть какой-то жёсткой привязки к фиксированному “цифровому каналу” GSM – такого канала не существует: там и полоса достаточно широкая, и спектр нарезан довольно замысловатым образом. И далеко не факт, что сведения о сигналах, принимаемых радиомодулем, не экспортируются в ОС через некоторые, намеренно внесённые, “дефекты” аппаратного интерфейса (как вариант). И у смартфона есть очень точное синхронное время – через GPS.
Получается, что самый обычный смартфон может собирать разнообразную дополнительную информацию об обстановке в радиоэфире, а собранные данные – периодически передавать на внешний сервер, скрытно (см. ссылку выше). Сюда нужно приплюсовать возможность раздачи с центрального сервера на конкретные аппараты специальных, целевых прошивок. Тогда получается система, работающая в две стороны – с сервера приходит целевая прошивка, внутри которой встроен конкретный запрос для поиска заданных сигналов (это может быть скрипт, что обеспечивает динамику и гибкость), собранные данные, опять же, отправляются на центральный сервер. И смартфон может излучать сигналы. Которые, предположим, принимают другие смартфоны со специальной прошивкой радиомодуля. Довольно мощное направление.
Комментировать »
Добавил на экспериментальный (тестовый) сервер TLS 1.3 разбор и вывод расширения ECH (Encrypted Client Hello). Это расширение присылают свежие версии браузера Chrome/Chromium, раньше сервер просто узнавал тип расширения, но не выводил содержание. Для того, чтобы браузер прислал ECH (GREASE) в качестве сигнала – поддержка ECH на TLS-сервере или в DNS не требуется. Расшифровать ECH не получится, потому что в таком варианте просто нечего расшифровывать: это сигнальный вариант ECH, ключа у сервера нет, да и основное содержание ECH должно быть представлено байтами со случайными значениями. Однако это не мешает проверить формат и вывести значения полей.
Адрес сервера: https://tls13.1d.pw/. Если успешно подключились свежим Chrome, то ECH нужно искать по “ECH /DRAFT/” (идентификатор 0xFE0D).
Комментировать »
В алгоритме ECDSA есть число, обычно обозначаемое k, которое используется при вычислении значения подписи, а именно – k определяет параметр r из пары (r,s) подписи. Значение r из этой пары необходимо для того, чтобы сошлась формула проверки. В исходном алгоритме k предлагается выбирать случайным образом (но без повторов, и держать в секрете). Дело в том, что если третья сторона знает k, то она может элементарным способом вычислить секретный ключ по сообщению с подписью; повторное использование k для разных сообщений, при прочих равных, так же приводит к раскрытию секретного ключа.
Можно встретить мнение, что такая особенность заложена в ECDSA специально (оставлено за скобками то, что такой подход использовался и в других, предшествующих ECDSA, криптосистемах). Действительно, если, например, k вычисляется по некоторому алгоритму генерирования псевдослучайных чисел “с секретом”, то если третьей стороне известны скрытые особенности данного алгоритма, эта сторона может раскрыть секретный ключ ECDSA, быстро подобрав k под открытое значение r, которое можно взять из подписи. (Это хрестоматийный теоретический подход к созданию бэкдоров методом “алгебраического разбиения”.)
Вообще, на этом направлении весьма легко ошибиться в программном коде, без всякого бэкдора. Либо подведёт аппаратура, обеспечивающая выдачу случайных значений. Либо вмешается тот или иной гипервизор – сейчас повсеместно используется виртуализация для размещения программного кода, вычисляющего ECDSA-подписи, с этим сложно что-то поделать, как и с тем, что инженеры DevOps обожают делать “снапшоты” виртуальных машин, а потом их восстанавливать (так себе решение) или множить (ещё хуже). Заметьте, кстати, что всё это полностью применимо и к современной ГОСТ-подписи – там математически эквивалентная схема.
Так что проблем с псевдослучайным параметром в ECDSA много. На практике, в алгоритм вычисления k так или иначе подмешивают дополнительные значения, не ограничиваясь лишь выдачей генератора псевдослучайных чисел. Это полумера. Однако есть и полностью детерминированный вариант (“deterministic ECDSA“), в котором значение k вычисляется для конкретного сочетания сообщения и секретного ключа (например, такой алгоритм поддерживается свежим OpenSSL 3.2).
Практика использования детерминированного варианта сопряжена с ещё одним занятным моментом. Если сообщение подписывается обычной ECDSA (или ГОСТ-подписью), то значение подписи будет каждый раз разным, даже для одного сообщения и одного подписывающего ключа. То есть, значение подписи псевдослучайное, и этот факт вполне может использоваться приложениями (хотя, вообще говоря, не должен бы). Соответственно, “фиксирование” значения подписи в таком приложении может что-то сломать. Но детерминированный вариант, конечно, всё равно лучше.
Комментировать »
На OpenNET пишут про RFC для децентрализованной системы имён GNS:
“Использование Curve25519 воспринимается некоторыми как весьма странный шаг, так как для ECDSA применяют другие типы эллиптических кривых, а в паре с Curve25519 обычно используют алгоритм цифровых подписей Ed25519, более современный, более безопасный и более быстрый, чем ECDSA. С точки зрения криптостойкости в том числе вызывает сомнение выбор размера закрытого ключа – 32 байта вместо 64 байт”
В GNS, действительно, используют ECDSA на кривой Curve25519. Это может, конечно, показаться странным. Однако алгоритм ECDSA работает в группе точек и вообще не зависит от выбора кривой (да, даже про “суперсингулярные кривые” тут есть занятные уточнения). Поэтому ничто не мешает взять Curve25519 вместо, например, более привычной P-256. Какие-то сугубо математические свойства Curve25519, типа наличия кофактора и т.п., вовсе и не являются необычными – такие кривые вполне себе подходят и для ECDSA. Так что, если нет доверия той же P-256, но нужен именно алгоритм ECDSA – можно взять Curve25519. Использование же Ed25519 в данном протоколе невозможно из-за особенностей преобразования ключей, о чём, собственно, сказано в RFC. Насчёт “более быстрого” алгоритма Ed25519 – это, в основном, определяется как раз параметрами кривой (поле и т.д.).
Что касается странного дополнения про 32-байтовый и 64-байтовый ключи: тут, наверное, что-то перепуталось на каком-то этапе пересказывания. В Ed25519 секретный ключ – 32-байтовый. И в ECDSA на P-256 (например) – тоже 32-байтовый. Потому что разрядность в 256 бит (32 байта) делает бессмысленным использование секретных ключей большей длины: всё равно значение сократится. А 64 байта – это общий размер подписи, а не ключа.
Можно предположить, что тут ещё сыграло следующее популярное заблуждение, которое нередко наблюдается в отношении SSH-ключей: многие считают, что, например, поскольку открытый ключ Ed25519 короче, чем ECDSA на той же P-256, он поэтому и менее “криптостойкий”. Действительно, для ECDSA/P-256 открытый ключ обычно записывается в 64 байта (иногда чуть меньше, иногда – чуть больше, зависит от кодирования), а в Ed25519 – только в половину, в 32 байта. Однако эти 64 байта ECDSA математически эквивалентны 32 байтам, там половина байтов приносит только один бит дополнительно: открытый ключ представляет собой точку на кривой, у точки – две координаты (X,Y), каждая по 32 байта, и вот полная форма записи ключа ECDSA подразумевает указание объединения X и Y, откуда и получается 64 байта; однако можно указывать только одну координату (X), а вторую (Y) – вычислять из уравнения кривой при необходимости. В такой схеме, для ECDSA, потребуется сохранить дополнительно знак, это один бит, и получается тоже около 32 байтов для записи открытого ключа. А вот в Ed25519 алгоритм предписывает всегда использовать только одну координату (ну, строго говоря, там есть ещё некоторые преобразования, но здесь они не важны). То есть, математически эти ключи совпадают по представлению, отличие тут чисто прикладное, поэтому дополнительные 32 байта записи для ECDSA не делают даже открытый ключ в два раза длиннее “криптографически” – он всё равно 256-битный (по разрядности кривой).
Комментировать »
Надо сказать, я несколько лет назад отмечал, что интересно будет посмотреть, внедрит ли Google поддержку ESNI в свой браузер. Интерес, на мой взгляд, тут происходил из того, что Google последовательно отказывался поддерживать такие технологии обеспечения безопасности, которые использовали тот или иной независимый инструмент управления криптографическими ключами в TLS. Примеров два: изгнание из веба DANE (отпечатки ключей/сертификатов в DNS, для сверки с предъявляемыми сервером) под предлогом замены на Certificate Transparency (которая хоть и полезная, но о другом, так как не может предотвратить использование валидного подменного сертификата в момент соединения); отключение HPKP (запоминание отпечатков серверных ключей клиентом, как в SSH).
И вот я предположил, что, вероятно, ESNI тоже не будет в Google Chrome. Но сейчас вышло иначе: вместо исходного варианта ESNI – Google Chrome (Chromium) всё же поддержал ECH, а это развитие ESNI, гораздо более продвинутое. Впрочем, думаю, что в этой “продвинутости” и состоит причина поддержки: всё же, ECH далеко ушла от первоначальной идеи ESNI – позволяет реализовать доступ к скрытым сервисам, при этом наследует доверие системе хорошо известных удостоверяющих центров (“имени CA/B-форума”); впрочем, ECH и ключи для дополнительной защиты внутри TLS позволяет публиковать, например, в DNS, то есть, не централизованным способом, который, формально, не зависит от браузера (но нельзя забывать о встроенной поддержке DNS-over-HTTPS с заданными провайдерами). В общем, поддержка внешних ключей появилась, но теперь нужно посмотреть, как будет она развиваться: ведь доверенные ключи для ECH могут приезжать и вместе с браузером – это важная особенность.
Комментарии (2) »
В продолжение записки про наложенные сети Google для браузера. Внедрение таких перемешивающих технологий, конечно, заметно изменит ландшафт для систем фильтрации и блокирования (с DPI), которые будут внешними (относительно google-сетей). Внутри, понятно, возникнут своя фильтрация и блокирование, в точном соответствии с концепцией “Битвы за банхаммер“. Но снаружи останутся видны только IP-адрес клиента и IP-адрес входного узла Google – это важный момент: адрес не какого-то HTTPS-сервера или прокси, а сервиса доступа к вебу от Google. При этом протокол доступа у всех клиентов будет одинаковый.
Браузеры очень распространены, это один из основных источников трафика обычных пользователей – если привычный браузер перестанет работать “из коробки”, то, для таких пользователей, это окажется эквивалентно исчезновению доступа к Интернету. Однако, чтобы использовать наложенную сеть, программа-клиент не обязательно должна быть браузером: механизм доступа конкретно к браузеру не привязан – там достаточно универсальное туннелирование. Впрочем, похоже, что будет требоваться Google-аккаунт и аутентификация при доступе, но этот момент тоже переносится в другие приложения.
И занятно будет посмотреть, кстати, с какими эффектами работа наложенной сети, в ходе развития технологии, переедет в браузеры, которые базируются на Chromium/Chrome, но считаются как бы обособленными и самостоятельными.
Комментировать »
Кстати, одним из весьма вероятных вариантов развития систем пропуска пользовательского трафика через (условный) Интернет является пропуск маршрутизаторами только пакетов, подписанных ключами доверенных приложений; либо это могут быть подписанные сессии – тут зависит от выбранного подхода. Интересно, что в описании европейского цифрового удостоверения личности (eID – European Digital Identity), которое недавно прошло очередной этап утверждения, можно уже увидеть что-то подобное, пусть и в общих чертах: приложение на устройствах, привязанное к оплате телекоммуникационных услуг – понятно, что задача идентификации интернет-пользователя там давно заявлена, но, развивая контекст по заданному направлению, нетрудно предположить, что соответствующие приложения появятся и у провайдеров на BRAS (это инженерное название для систем управления массовым клиентским доступом); даже есть занятная оговорка, что, мол, некоторое программное обеспечение, из реализующего работу eID, можно будет не публиковать в открытых исходниках (последний момент, конечно, не стоит переоценивать, но всё же).
Комментировать »
Новый