Благодаря влиянию ACME и Let’s Encrypt, сейчас стала очень популярной схема подтверждения права управления доменом (DCV) через DNS, но при помощи размещения CNAME-записей. Речь про запрос TLS-сертификатов средствами автоматизации – скриптами (acme.sh, certbot и др.). Напомню, что DCV здесь состоит в проверке размещения TXT-записи с кодом подтверждения под заданным именем в DNS-зоне (это метод DNS-01). ACME использует специальный префикс: _acme-challenge.

Однако CNAME – это не TXT-запись, а способ перераспределить проверку в другую DNS-зону (см. детали ниже). Вообще, протокол ACME в данном сценарии не требует ни использования, ни даже поддержки CNAME. Но такая поддержка массово используется, и её сейчас принято обосновывать тем, что можно, мол, “не предоставлять доступ к исходной зоне скриптам автоматизации”. Использование CNAME – вообще плохая практика, а особенно плохая практика – это использование CNAME в процессе DCV. Что, конечно, не мешает массовому распространению. Вообще, с подобным использованием CNAME, – то есть, в DCV, – связана пара занятных технических моментов, о которых забывают.

Момент первый: постоянно путают синоним (алиас) и основное имя в CNAME. Дело в том, что CNAME – это Canonical NAME (каноническое имя), и каноническим является именно значение записи, а не имя-носитель. Имя-носитель – это и есть алиас, что бы там ни писали в инструкциях к средствам автоматизации ACME. Если для example.com в CNAME-записи указано 1.2.3mega-blah-blah.example.net, то вот это вот 1.2.3mega-blah-blah.example.net и есть основное имя. При использовании в ACME предлагается настроить CNAME для префикса _acme-challenge. Например, _acme-challenge.example.com в 1.2.3mega-blah-blah.example.net. Но и тут алиасом, в терминах DNS, будет _acme-challenge.example.com, префикс не влияет на отношение значений записей. Такова семантика CNAME.

Соответственно, получается, что проверка проводится для другого имени, не для того, которое указано в ACME-аккаунте при запросе DCV. Сертификат, в итоге, выпускается для одного имени, а проверка – фактически пройдена для совсем другого: для той зоны, которая назначена канонической при помощи CNAME. Дело в том, что CNAME-запись, при интерпретации резолвером, должна приводить к перезапуску процесса рекурсивного опроса для канонического имени, то есть, для значения из CNAME. Да, может показаться, что это технические придирки: всё равно же CNAME-запись должна быть размещена в исходной зоне, совпадающей с именем из DCV. Но нет, не так тут всё просто: CNAME может показывать на совсем другую зону, контроль над которой позволяет проходить DCV и выпускать сертификаты для прочих имён, в том числе, алиасов может быть много – это каноническое имя, по определению, одно. Если домен канонического имени (того, куда указывает CNAME) будет утрачен, переделегирован-перехвачен, или ещё что-то, то это административное изменение прямо коснётся авторизации TLS-сертификата для исходной зоны-алиаса. Происходит подмена самой сути DCV.

Естественно, можно рассуждать иначе: если утрачено каноническое имя, то нужно удалить CNAME-запись в алиасе; тем более, что так как сертификаты сейчас “короткие”, утрата канонического имени обнаружится быстро. Это верно. Более того, имея контроль над исходной зоной (в которой CNAME) – можно будет попробовать отозвать сертификаты для этой зоны, если такие были выпущены при помощи подхвата CNAME. (Один из штатных способов отзыва сертификата в ACME – прохождение DCV для имён из сертификата; но нужно предъявить сам сертификат, и должно всё сойтись по составу имён – то есть, если в подставном сертификате указана ещё какая-то зона, то могут быть проблемы с отзывом.) Однако это всё только теоретические рассуждения, в стиле “как должно быть”, а на практике, как говорится: ну, на практике-то – и про CNAME-зоны забывают, и про обновление имён, и про отзыв.

Момент второй: реальный доступ к зоне. Из первого момента, с каноническим именем, легко выводится этот второй: да, использование CNAME предлагают в качестве решения проблемы “расползания реквизитов доступа”. Мол, не хочется давать скриптам ACME доступ к редактированию нашей важной доменной зоны, поэтому пропишем CNAME и дадим доступ в другую зону, не такую важную. Но, как бы, смысл DCV – проверка права управления доменной зоной, а тут – это право управления прямо предлагают не выдавать, а подменить саму зону средствами DNS. Опять же, такая трактовка – не “перегиб”: дело в том, что управление зоной должно, если по-хорошему, подтверждаться при каждом выпуске сертификата (ну, хорошо, с некоторым интервалом по времени действия успешной проверки), а CNAME, направленная на каноническое имя – это долгий и универсальный вариант, не привязанный к выпуску сертификата вовсе. Для чего, собственно, использование CNAME и затевается. Опять противоречие.

Кстати, тут полезно вспомнить, что есть и суперновая версия DNS-проверки в ACME – с “постоянной” привязкой ACME-аккаунта к имени: вот где совсем не место CNAME (но черновик RFC пока что их не запрещает явно).

CNAME-записи – одни из самых сложных по поведению в DNS, а их использование – источник неожиданных проблем. В случае DCV, семантика и принципы интерпретации CNAME вообще противоречат основной логике проверки права управления через DNS. Что касается других решений: во-первых, ACME-префикс можно делегировать на отдельные NS, без всяких CNAME; во-вторых, для размещения TXT-записей вовсе не обязательно передавать полные права управления DNS-зоной каким-то скриптам. Это всё решения на стороне, заказывающей DCV. Но самое правильное, конечно, это не следовать CNAME при проверке DCV на стороне систем УЦ.



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

В рамках “ренейминга”, связанного с миграцией сайта с доменов .ru, сделал субординатные имена авторитатвиных серверов DNS для dxdt.blog. “Субординатные” – означает, что имена авторитативных серверов (NS) находятся в той же зоне, которая делегирована на эти серверы: например, ns1.example.com, ns2.example.com для example.com. Такую схему именования ещё иногда называют “красивые NSы”. В случае dxdt.blog, имена NS-ов – в зоне dxdt.blog.

Соответственно, делегирующий ответ с такими именами обязательно содержит так называемые glue-записи – то есть, записи с информацией об IP-адресах NSов. Иначе рекурсивный опрос не будет работать, так как зациклится. Я об этом писал неоднократно, в том числе, про сложную рекурсию, связанную с перекрёстными зависимостями.

Например, сама зона .blog размещена на NS-ах с субординатными именами:

alex@garlic-crusher:~$ dig blog. -t NS @a.root-servers.net
[...]
;; AUTHORITY SECTION:
blog.			172800	IN	NS	a.ns.nic.blog.
blog.			172800	IN	NS	d.ns.nic.blog.
blog.			172800	IN	NS	c.ns.nic.blog.
blog.			172800	IN	NS	b.ns.nic.blog.

;; ADDITIONAL SECTION:
[...]

– здесь имена авторитативных серверов в ns.nic.blog., пусть для корневой зоны это и не имееет большого значения (см. ниже). Да, субординатные имена популярны, однако мне подобная схема именования не очень нравится. Другой вариант, из зон верхнего уровня, можно наблюдать в .ru:

alex@garlic-crusher:~$ dig ru. -t NS @a.root-servers.net
[...]
;; AUTHORITY SECTION:
ru.			172800	IN	NS	a.dns.ripn.net.
ru.			172800	IN	NS	d.dns.ripn.net.
ru.			172800	IN	NS	f.dns.ripn.net.
ru.			172800	IN	NS	b.dns.ripn.net.
ru.			172800	IN	NS	e.dns.ripn.net.

;; ADDITIONAL SECTION:
[...]

Однако, если говорить строго, то окажется, что любое имя в глобальной DNS Интернета так или иначе связано с “субординатными” NS-ами: потому что в делегирующих ответах, в качестве основного состава, могут быть только хостнеймы – имена серверов, и в какой-то момент рекурсивного опроса DNS обязательно возникнет проблема “курицы и яйца”. Более того, в DNS наступление такой проблемы можно откладывать до уровня корневой зоны, но вот IP-адреса серверов корневой зоны – распространяются по рекурсивным резолверам тем или иным способом, отличным от DNS (исторически – это всем известный hints-файл), именно для того, чтобы система заработала при первоначальном запуске.



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

Из Cloudflare пишут, что график полного перехода на постквантовые криптосистемы – сдвигается ближе: конкретно в Cloudflare планируют на 2029 год (это через три года). Напомню, что сейчас уже основная часть TLS-трафика в вебе защищена с использованием криптосистем обмена сеансовыми ключами с постквантовой стойкостью (ML-KEM, прежде всего). Но это симметричные ключи, для шифров. При полной же замене – речь идёт о защите схем аутентификации узлов. На этом направлении пока ничего в вебе не внедрено массово.

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

Самое интересное в озвученных планах, что на середину 2027 года (следующий год) запланирована защита постквантовыми криптосистемами цепочки аутентификации для подключающихся клиентов – это, как указано, сертификаты на хеш-деревьях (с ML-DSA, скорее всего). (MID 2027: PQ authentication support for visitor → Cloudflare connections using Merkle Tree Certificates.)

В Google недавно намекали на то, что поддержка постквантовых криптосистем подписи для TLS и X.509-сертификатов появится в Chrome/Chromium уже к концу 2026 года. И в это можно поверить, потому что сами технические средства в виде программного кода и описаний структур – довольно давно готовы, а полная реализация имеющимися средствами конкретно для TLS-сертификатов неоднократно продемонстрирована на практике.

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

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

Что вообще нужно для перехода на постквантовые криптосистемы в этом технологическом контексте? Понятно, что веб-TLS здесь является локомотивом. Понятно, что нужна подержка на серверной стороне – а это обещает и Cloudflare, и Google (другие, начиная с Microsoft, скоро подтянутся – не сомневайтесь). Понятно, нужна поддержка в браузере – это обещает, на это намекает Google (вообще, тут – именно обещает, потому что эксперимент Cloudflare и Google по вндрению сертификатов на хеш-деревьях – уже идёт). Остаётся поддержка на стороне УЦ, да. Но и Cloudflare, и Google – это УЦ: и “фактически”, и “практически”.

Да, нужна поддержка на стороне обычных серверов, в виде утилит для выпуска ключей и запросов на сертификаты всеми желающими. То есть, обычный сейчас вариант с ECDSA или RSA – не подходит: эти криптосистемы не обладают постквантовой стойкостью, теряется смысл даже в том случае, если УЦ подписывает постквантовой криптосистемой. Вручную же ключи генерировать могут не все, а тем более – использовать в веб-сервере. Нужны автоматические утилиты. Однако, распространение ACME-автоматизации – certbot и пр. – позволяет процесс автоматизировать и тут, сведя весь переход к обновлению версий системных библиотек и скриптов для заказа сертификатов через ACME. И веб-сервер придётся обновить, конечно.

В общем, не выглядит неральным, но посмотрим.



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

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

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

Что касается подобных предупреждений и статуса “официальности” – тут надо заметить, что, если это так, и предупреждение такое есть, то это лишь очередной раз подчёркивает, насколько сильно данный мессенджер стремится к централизации: то есть, во-первых, требуется обнаруживать какой клиент установлен на устройстве у пользователя (что, понятно, прямо противоречит “приватности”); во-вторых, это очередное повышение контроля за устройством пользователя – потому что тут генеральная линия, без сомнений, это возможность проверить “сертифицирован” ли состав программ (не так важно, называется ли это “повышением безопасности” или “информированием о работе приложения”). И вот как бы так не вышло, что и тут следующим шагом станет проверка “подозрительной сетевой активности” и проверка наличия “подозрительных программ”, как уже делают некоторые банковские приложения (ДБО), например. (И, естественно, так же делают сами поставщики ОС (Google, Apple); но тут, как бы, это хотя бы минимально оправданно.)

С другой стороны, такое движение – оно и понятно: ведь всё это происходит в рамках очередного этапа “битвы за банхаммер”, которая довольно давно стала основным направлением “развития” “интернетов”. А здесь два главных рычага: централизация и блокирование.



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

Открытый серверный ключ TLS, который указан в TLS-сертификате, на dxdt.blog начинается с подстроки DEADC0DE (в шестнадцатеричной записи, см. скриншот ниже).

Screenshot

Да, тут присутствует ещё и байт со значением 04 в самом начале, но он не имеет отношения непосредственно к ключу – это лишь указание на формат представления. 04 обозначает несжатую форму записи, когда прямо указываются две координаты точки ключа. Поэтому 04 можно отбросить. Такое значение ключа я использовал специально (это то, что называется vanity keys).

Как это значение получено? Оно получено перебором, конечно. Это не очень сложно сделать. Открытый ключ ECDSA – это точка на кривой. Точке соответствуют две координаты, одна из них (обычно, обозначают X), записывается слева. Поэтому в начале записи ключа будут идти старшие байты X-координаты. Остаётся подобрать такой секретный ключ, который даст открытый с нужной X-координатой. Секретный ключ – это натуральное число, больше двух и меньше порядка группы точек кривой (обычно, меньше тоже на два, но это детали). Нужно перебирать секретные ключи и проверять значение начальных байтов X-координаты открытого на соответствие заданной маске.

Открытый ключ – это точка-генератор G из параметров кривой, умноженная на значение секретного ключа d: [d]G. Я, используя готовую библиотеку из дистрибутива языка Go, написал быструю программу умножения на P-256 (кривая, которая используется здесь в ECDSA). Программа перебирает секретные ключи и делает это параллельно, во много потоков. Соответственно, даже на старом 16-потоковом процессоре AMD Ryzen 7, подбор ключа занял всего несколько часов. В результате подбора я получил нужный секретный ключ, который экспортировал для генерирования CSR (запрос на выпуск сертификата) и штатным способом использую при заказе TLS-сертификатов.

Вообще, для P-256 можно придумать немало открытых ключей, запись которых, в X-координате, выглядит ещё более необычно. Например:

0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBA
- цифры A и немного B,
0x1000000000000000000000000000000000000000000000000000000000000001
- единицы и нули,
0x5000000000000000000000000000000000000000000000000000000000055555
- пятёрки и нули,
0x7777777777777777777777777777777177777777777777777777777777777777
- семёрки с "неожиданной" единицей,
0x8888888888888888888888888888881888888888888888888888888888888888
- восьмёрки, но тоже с единицей.

Точки с такими X-координатами лежат на кривой P-256. Определить для них Y-координату – не представляет вычислительной проблемы. Более того, ввиду свойств данной кривой – все эти точки, действительно, являются открытыми ключами. Тут есть лишь одна проблема: по открытому ключу очень сложно, а на практике – невозможно, вычислить секретный ключ; потому что это и есть основная задача, обеспечивающая стойкость ECDSA. Конечно, подходящий секретный ключ можно угадать. В том числе, в результате перебора. Вот только перебрать даже половину от, примерно, 2^256 – нереально. Ну и записать подходящий секретный ключ просто по наитию, как поступил бы борелевский шаман, пока что тоже не вышло. Так что придётся, до поры до времени, обойтись без забавных записей, ограничившись hexspeak-вариантом с DEADC0DE. Но как только и если появится квантовый компьютер подходящей разрядности, тогда можно будет секретные ключи подобрать очень быстро.



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

Вновь попадаются утверждения, что, применительно к реализациям протокола Диффи-Хеллмана, “секретные ключи никогда не покидают устройство”. Естественно, это совсем не так. В реальности – такое невозможно. Казалось бы, очевидно: симметричные секретные ключи обязательно должны “покинуть устройство”, иначе этими ключами не сможет воспользоваться другое устройство, для расшифрования или для зашифрования. Покидают устройство ключи и в случае использования протокола Диффи-Хеллмана (DH).

Да, с DH связана неверная контринтуитивная идея, в рамках которой производится сильное обобщение возможностей протокола: дело в том, что DH позволяет сторонам безопасно вычислить общий секрет, обмениваясь сообщениями через открытый канал; это верно; однако вот это понятие – “безопасно вычислить” – основано на некоторых допущениях, то есть, работает лишь в какой-то модели, от свойств которой заивисит реальный уровень безопасности. Ни в коем случае обмен ключами по DH не означает, что “секретные ключи не покидают устройство” или ” ключи есть только у клиента”! Естественно, это особенность протокола, и она всегда прямо учитывается в прикладной криптографии (там есть разные модели стойкости, в том числе, для DH).

Рассмотрим в качестве примера классический вариант DH, работающий “в остатках от деления” (“мультипликативный”). Здесь общий секрет вычисляется при помощи возведения в степень натурального числа. Общий секрет может быть получен после того, как стороны передали открытые параметры друг другу. Открытые параметры – это числа, которые каждая сторона получила на основе собственного асимметричного секрета DH. Открытые параметры – на то и открытые, что передаются через открытый канал. Обратите внимание: каждый из этих параметров содержит полную информацию, нужную для восстановления асимметричного секрета, а сеанс обмена DH – содержит полную информацию для восстановления симметричного секрета (если такой секрет генерируется только по DH, конечно). Более того, значение открытого параметра позволяет однозначно проверить, что третья сторона угадала секрет.

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

Я раньше несколько раз подробно описывал особенности DH и применение этого протокола в разных сценариях.



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

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

“Проценты сгенерированного программного кода” – очень занимательный показатель. И не так важно, в чём его взвешивать – в строках или килобайтах командных слов. Например, можно генерировать “тавтологические строки”, которые компилятор будет просто выкидывать: if(a == b){a = b}…; или for i in [0,100]: b = 10; и т.д. Какая доля таких строк может быть в тексте программы? Сколь угодно близкая к 100% – чтобы программа хоть что-то делала, конечно, придётся написать пару вызовов, условно, каких-нибудь print “Hello!”. Заметьте, что даже корректную реализацию всякого алгоритма на ЯВУ нетрудно растянуть по “строкам кода”, что уж говорить про некорректные реализации.

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



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

В свежей версии 149 браузера Firefox добавлен встроенный VPN-сервис, заворачивающий трафик к веб-узлам в туннель, проходящий через “прокси-сеть” Mozilla. Такой сервис был обещан некоторое время назад, теперь его постепенно внедряют в основную ветку браузера.

Тут как раз очень важно то, что вся обработка и перенаправление трафика – происходят в браузере. То есть, веб-узел видит только IP-адрес оконечного узла туннеля. А промежуточные сетевые узлы, находящиеся между браузером и входным узлом наложенной “прокси-сети”, не видят IP-адрес веб-узла, с которым соединяется браузер. Добавьте сюда защищённый DoH/DoT резолвинг DNS и – получается закрытая специализированная сеть доступа, привязанная к браузеру. Но пока что такой VPN-доступ не для всех, а только для пользователей в США, Великобритании, Германии и Франции.



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

В 2023 году я писал на dxdt.ru об одном из эффективных, для DNSSEC, способов динамического удостоверения факта отсутствия DNS-записи (или DNS-имени), который, в частности, применяют в Cloudflare. В конце 2025 года этот способ, с некоторыми добавлениями и обновлениями, получил спецификацию RFC 9824.

В частности, RFC 9824 вводит “мнимую” DNS-запись NXNAME (TYPE128) – это запись-сигнал об отсутствии в DNS-зоне запрошенного имени. Причина для введения такого сигнала в том, что упомянутый способ в принципе не позволяет отвечать со штатным для DNS статусом NXDOMAIN. Почему? Потому что весь смысл состоит в “подделывании” состава ответа, но, так сказать, с благими целями: при получении запроса о несуществующем имени, авторитативный сервер отвечает так, как если бы для этого имени нет DNS-записей в зоне: ANSWER: 0 и флаг NOERROR. В терминах DNS такой ответ называется NODATA – то есть, это корректный DNS-ответ без статуса ошибки, но пустой – не содержащий никаких ответных, – в блоке ANSWER, грубо говоря, – записей (естественно, это не означает, что DNS-ответ в целом не содержит записей: пуст только блок ANSWER, но записи в ответе есть, это дополнительные, “авторитативные” записи – SOA, NSEC и т.д.).

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

Для того, чтобы в новой схеме отличить ситуацию, когда действительно нет записей, от ситуации, когда нет имени, как раз и служит новая запись-сигнал NXNAME. Авторитативный сервер указывает NXNAME в составе полей NSEC-записи, если нет DNS-имени. NSEC – это запись, обозначающая “границу” зоны (в данном случае – фиктивную границу), NSEC нужна для того, чтобы было что подписывать, так как нельзя подписывать пустое значение. Технически, подписать-то можно, но такую подпись легко скопировать и применять к отсутствию любых записей в DNSSEC, то есть в безопасной DNS-зоне: это как раз пример того, что все пустые множества одинаковые, а окрашивать можно только пустые коробки, вот как в случае с NXNAME/NODATA и NXDOMAIN.

Здесь играет роль ещё одна нетривиальная особенность DNS, которую мало кто понимает. А именно: в DNS распространены ситуации, когда возникают заведомо пустые, но поименованные, фрагменты имени. Предположим, что есть имя a.b.c.example.com, для которого указана A-запись. Это имя находится в зоне example.com, но A-запись указана только для a.b.c. Как трактовать имя b.c.example.com (без a.)? Оно, вроде как, есть, потому что в DNS полное имя строится в форме иерархии лейблов, разделяемых точками. Но, не менее “вроде как”, этого имени и “нет”, потому что для него в принципе не указаны никакие записи: из “полных” имён тут будет только example.com и a.b.c.example.com. Для корректной обработки такого случая, в схеме, где NXDOMAIN-ответ невозможен, нужен сигнал, позволяющий отличить несуществование имени от несуществования записи для этого имени. Это и есть NXNAME.

Конечно, занимательно. Но, другое дело, что, с одной стороны, новый подход позволяет быстро, в онлайн-режиме генерировать подписанные DNS-ответы, удостоверяющие отсутствие запрошенной записи или отсутствие имени. С другой стороны, логика DNS очередной раз усложняется, а клиент, резолвер – должен подерживать обработку NXNAME, иначе для него разные пустые коробки склеиваются в одну (отсутствие записи склеивается с отсутствием имени).



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

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

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

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

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

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

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

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



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

Кстати, что касается URL (URI), как носителя “секрета”, установленного в составе адреса документа или параметров URL: ещё в 2015 году, десять лет назад, “Яндекс.Браузер” собирал URL, которые посещает пользователь, и отправлял их поисковому роботу “Яндекса”, чтобы тот индексировал контент для всех пользователей поисковой системы (этот подход сильно напоминает теперешнее “обучение ИИ”, кстати). Так что, полагаясь на “секретность” URL (что само по себе очень плохо), браузеры-то как-то неправильно вычёркивать из перечня каналов утечки. Браузер исполняет веб-интерфейс, а не пользователь “на бумажке”, так что URL могут уходить куда угодно именно потому, что это URL.

Заметьте, что URL – это не авторизационный куки-файл, который браузеру тоже известен, но который передаётся в составе заголовков HTTP-запроса, поэтому чётко отделяется в любом браузере от URL, и браузер, всё же, этот файл будет пытаться отправлять только тем узлам, которым он прямо предназначен (на сей счёт есть очень много спецификаций и требований, а про URL – подобных требований нет).



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