HPKPПолучается непрерывная серия записок про TLS и связанные технологии, но, тем не менее, продолжу. Добавил на dxdt.ru поддержку технологии под названием HPKP – HTTP Public Key Pinning. Key Pinning – это привязывание публичного ключа к сетевому ресурсу (по имени или по адресу) на стороне клиента. Принцип хорошо известен из практики использования SSH: здесь отпечатки, идентифицирующие серверы, при первом контакте сохраняются на клиенте; в дальнейшем, изменение отпечатка позволит обнаружить возможную подмену ключей в рамках атаки “человек посередине”. Для HTTP предложена технология (RFC 7469), базирующаяся на той же идее.

Веб-сервер передаёт специальное поле в составе заголовков HTTP. Поле содержит отпечатки (значение хеш-функции) публичных ключей, которые используются данным сервером при установлении TLS-соединения, а также время, в течение которого клиенту следует помнить отпечатки. Браузер (то есть, клиент HTTPS), впервые обнаружив отпечатки ключей, запоминает их. При следующих обращениях к данному ресурсу – отпечатки сверяются с переданными ключами: если обнаружено расхождение, то браузер не устанавливает соединение и выдаёт предупреждение системы безопасности. HPKP поддерживается, например, в Chrome и Firefox.

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

Посмотрим на реализацию подробнее, на примере dxdt.ru:

$ wget -S -O /dev/null https://dxdt.ru/ 2>&1 | grep ‘Public-Key-Pins:’ | tr -s ‘ ‘ | sed ‘s/\;/\;\n/g’

Public-Key-Pins: pin-sha256=”WXeGHAmPHRPwX7CbyIUCQm9mtStbVAZR2LOvTAAQKNg=”;
pin-sha256=”dj2qz8mxs8NSpJdISrUPRfL86ZGu3QNkJm4hL+opE0o=”;
pin-sha256=”nq9/zIb/QKb+tHd1ZU5keAYkYzrA8zx7tMmVtDDNG0M=”;
pin-sha256=”kkwURRddFrj4gRH7ILMp/Fqrvl6kfO4o2ekBOmiP6B0=”;
max-age=270127;

Поле HPKP называется Public-Key-Pins и, в нашем примере, содержит четыре значения pin-sha256 – это и есть отпечатки ключей (значение SHA-256 от публичного ключа, взятое в Base64). Почему их четыре? Потому что на dxdt.ru поддерживается два типа подписей: ECDSA и RSA, соответственно, нужно публиковать отпечатки для каждого из них; кроме того, стандарт требует указания как минимум одного “запасного ключа”, который отсутствует в цепочке валидации – я решил опубликовать по запасному ключу для каждого типа подписи. Итого: четыре отпечатка. Дополнительные отпечатки, очевидно, требуются для того, чтобы можно было поменять ключи без потери доступности сайта.

Стандарт позволяет использовать любые ключи, участвующие в цепочке валидации. То есть, можно было указать ключи из промежуточных сертификатов. Но я выбрал серверные ключи, в основном потому, что они под рукой и промежуточные сертификаты могут относительно легко поменяться.

Параметр max-age – определяет (в секундах) время, в течение которого браузер должен сохранять отпечатки. Я, пока что, установил довольно осторожное значение: около трёх суток.

Кроме того, поле Public-Key-Pins позволяет использовать ещё пару параметров: includeSubdomains – это флаг, распространяющий действие отпечатков на поддомены; report-uri – адрес, на который браузер будет передавать сообщения об ошибках. Последний параметр особенно интересен. Он позволяет поднять сервер, который будет получать сообщения от клиентских браузеров, которые натолкнулись на ошибки в работе HPKP – это позволяет обнаруживать атаки “человек посередине”, что называется, в дикой природе. Сообщение содержит детали контекста, в котором возникла ошибка. Эту функцию уже реализует Google Chrome. Естественно, для приёма сообщений нужен отдельный домен. Создание такой точки приёма для dxdt.ru – следующий шаг: нужно выделить сервер и запрограммировать обработчик сообщений.

Addon:

Как получить отпечатки ключей? Достаточно просто, если воспользоваться OpenSSL (я использовал файлы секретных ключей).

Для RSA:

openssl rsa -pubout -in rsa-private.pem -outform DER | openssl dgst -sha256 -binary | openssl enc -base64

Для ECDSA:

openssl ec -pubout -in ec-private.pem -outform DER | openssl dgst -sha256 -binary | openssl enc -base64



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

Проект Let`s Encrypt, который позволяет в автоматическом режиме и бесплатно получать SSL-сертификаты, объявил о переходе в статус публичного бета-тестирования. Let`s Encrypt ориентирован на HTTPS и работает следующим образом: для получения сертификата на сервер, где этот сертификат будет использоваться, устанавливается специальное клиентское ПО (написанное на языке Python), это ПО взаимодействует с сервером удостоверяющего центра, подтверждает “владение доменом”, получает сертификат, настраивает локальную конфигурацию веб-сервера. В общем – автоматически выполняет все те действия, которые, как считается, отнимают у администратора сервера много времени, требуют специальных знаний и, тем самым, препятствуют массовому распространению HTTPS.

Инициатива, конечно, выглядит полезной. Но есть некоторые опасения. Так, клиент Let`s Encrypt требует рутовых прав для исполнения своих функций. Не удивительно: скрипту требуется возможность принимать соединения на привилегированные номера TCP-портов – 80 и 443, а также записывать конфигурационные файлы веб-сервера. С этим и связаны очевидные опасения, которые, тем не менее, я опишу.

Если скрипты клиента Let`s Encrypt содержат уязвимости, то уязвимой оказывается и система, в которую был установлен клиент. А то, что скрипты по определению должны принимать внешние соединения – сразу наводит на мысли об удалённом исполнении кода. При этом предполагается, что клиент заведомо используют администраторы, не обладающие высокой квалификацией (квалифицированным он, вообще говоря, не требуется, да и они, обычно, доверяют только собственным рукам). То есть, типичный администратор не будет понимать, что происходит с его сервером во время работы скриптов клиента и, вполне вероятно, не сможет не только предотвратить проблему, но и обнаружить её. Для применения систем защиты информации – это не самый лучший расклад.

К сожалению, похоже, что в обозримом будущем мы можем увидеть сообщения о клиенте Let`s Encrypt примерно следующего содержания: “из-за ошибки в программном коде тысячи TLS-серверов используют уязвимые ключи”, “уязвимость клиента позволяет получить удалённый доступ к секретным ключам”, “ошибка в реализации протокола позволила злоумышленникам выпустить сертификаты для доменов, которые им не принадлежат”. Ну и так далее. Впрочем, нужно понимать, что подобные новости мы и так постоянно читаем, только они касаются других повсеместно используемых библиотек и утилит, так что Let`s Encrypt не принесёт тут ничего принципиально нового в плане угроз и рисков. Разве что ошибки станут сопровождаться автоматическим выпуском SSL-сертификатов.



Comments Off on Let`s Encrypt – публичное бета-тестирование

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

Очевидно, что для прозрачного перехвата TLS достаточно, чтобы перехватывающий узел знал секретный серверный ключ. Но это условие не является необходимым. Перехватывающий узел может не содержать секретного ключа, но успешно проводить перехват. Если вы внимательно посмотрите на протокол установления соединения TLS, то наверняка заметите, что секретный ключ там требуется лишь один раз. Пусть, например, клиент и сервер договариваются о соединении TLS 1.2, использующем AES в качестве шифра и протокол Диффи-Хеллмана на эллиптических кривых (ECDHE) для генерации сеансового ключа. В таком случае секретный ключ сервера требуется только для того, чтобы подписать сообщение Server Key Exchange, содержащее серверные параметры протокола Диффи-Хеллмана. Эту функцию подписывания перехватывающий узел может возложить на легитимный сервер, который, по запросу, подпишет выбранные перехватывающим узлом параметры. Естественно, легитимный сервер должен, таким образом, добровольно принимать участие в перехвате. Эта замечательная и очень полезная технология используется для балансировки нагрузки – в CloudFlare, известном своими передовыми разработками в этой области, она называется Keyless SSL. Кроме того, этот же метод годится для систем обнаружения вторжений (IDS), защиты от атак и множества других полезных приложений.

Предположим, что требуется перехватывать трафик, идущий в сторону сервисов условной компании “Имярек”. Согласие “Имярек” получено. В таком случае, SSL-прокси, расположенный в любой точке сети, действует следующим образом: TCP-сессии, в рамках которых клиенты пытаются установить TLS-соединение с тем или иным сервисом, заводятся прокси на собственный внутренний сервер; этот сервер устанавливает TLS-соединение с клиентом, обращаясь, в нужный момент, за подписью к API “Имярек”; с точки зрения клиента – TLS-соединение выглядит неотличимым от прямого соединения с “Имярек”. Для перехвата не потребовалось иметь секретный ключ, не потребовалось размещать на клиенте специальный сертификат. Однако, потребовалось прямое участие “Имярек” в процессе: эта компания должна предоставить API, позволяющий работать перехватывающим узлам. (В данной схеме есть ещё отдельная задача по трансляции трафика между клиентом и сервером после перехвата. Так, если это HTTPS, то его можно транслировать в HTTP и передавать в открытом виде – но потребуется поддержка HTTP сервисом, что, вообще говоря, неверно. Перехватывающий узел также может установить собственную TLS-сессию с сервером и транслировать клиентский трафик через неё. Но детали – оставим за рамками этой записки.)

Трафик TLS-сессии защищается сеансовым ключом. Если на перехватывающем узле не требуется полное управление установлением соединения, а нужна только возможность доступа к трафику, то такой прокси может просто получать текущий сеансовый ключ (и, строго говоря, криптографический контекст) с TLS-сервера. В TLS даже существует стандартный механизм маркирования сессий при помощи уникального идентификатора, который передаётся в открытом виде. Сценарий: SSL-прокси начинает записывать трафик, обнаружив TLS-соединение; параллельно отправляется запрос в API сервиса, трафик которого требуется прочитать, – запрос содержит уникальный идентификатор сессии (он передаётся при установлении соединения в открытом виде); в ответ сервис присылает сеансовый ключ и начальное состояние сеанса, если оно требуется. В результате проксирующий узел может пассивно просматривать трафик. Секретный серверный ключ от сертификата не потребовался, специальный сертификат – тоже. Но, опять же, необходимо участие провайдера сервиса. Последний, впрочем, во всех случаях сохраняет контроль над секретным серверным ключом, а предоставление API для получения подписей – не является большой технической проблемой. Ключевой момент: так как провайдер сервиса добровольно участвует в работе системы перехвата, оба описанных метода не нарушают никаких регламентов и требований инфраструктуры TLS глобальной Сети.

Если договориться с провайдером сервиса не удаётся, то возможен другой вариант: участие хорошо известного удостоверяющего центра (УЦ). “Хорошо известного” – в том смысле, что признаваемого браузерами (в случае с HTTPS). Схема с выпуском перехватывающих промежуточных сертификатов – тоже хорошо известна, некоторые УЦ на этой схеме даже попадались. SSL-прокси может взаимодействовать с УЦ следующим образом. Прокси перехватывает TLS-соединение в момент установления, после чего отправляет на специальный API УЦ запрос с сетевым именем, к которому обращается клиент. УЦ известен секретный ключ, который прокси использует при перехвате. УЦ в режиме онлайн выпускает “короткоживущий” сертификат (например, валидный в течение суток) для ключа прокси и требуемого сетевого имени. Этот сертификат возвращается в качестве ответа API. Далее SSL-прокси использует его для подмены и, таким образом, выдаёт себя за узел, с которым пытался соединиться клиент. Выпуск сертификата занимает короткое время, при этом секретные ключи, необходимые для выпуска сертификатов, не покидают пределов информационных систем УЦ. При таком перехвате поломается заметное число приложений, использующих TLS, в частности, браузеры, поддерживающие Key Pinning, будут выдавать предупреждение системы безопасности – так как используемый прокси ключ не соответствует серверному.

В описанной выше схеме потребовался выпуск сертификата, потребовалось участие УЦ, зато не требуется согласия провайдера сервиса, соединения в направлении которого перехватываются, также не требуется устанавливать дополнительный сертификат на клиенте – там уже есть нужный сертификат УЦ. Основная проблема: предоставление подобного API (которое легко маскируется под обычный партнёрский интерфейс УЦ) прямо нарушает регламенты и требования, поэтому представляет собой угрозу для бизнеса УЦ. (Занятно, что в сентябре 2015 года УЦ Symantec оказался пойман на выпуске большого числа короткоживущих “тестовых сертификатов” для доменов, администраторы которых сертификатов не заказывали. Возник даже некоторый скандал.)

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

(Напомню, кстати, что я поддерживаю специальный ресурс, детально описывающий технические подробности TLS.)



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

Занятную новость распространяют, например, Roem.ru: “c 1 января 2016 Казахстан будет перехватывать весь HTTPS-трафик с помощью корневого сертификата”. Официального подтверждения, впрочем, пока найти не удалось. Технически, речь идёт об установке на клиентской стороне доверенного корневого сертификата. Это эквивалентно добавлению ещё одного УЦ и, соответственно, в общем случае, позволит прозрачно для пользователя перехватывать TLS-соединения (например, HTTPS), если перехватывающий узел содержит доверенные ключи. Решения такие давно есть, называется это SSL-proxy – подробнее я писал в заметке о перехвате HTTPS.

Интересно, что, при желании, провайдер может принудительно разрывать зашифрованное TLS-соединение, если оно было установлено с использованием серверного ключа, не входящего в некоторый список разрешённых. Серверные ключи передаются в открытом виде, а сам факт установления TLS-соединения и его параметры довольно легко обнаруживаются при помощи систем DPI. Очевидно, что можно просто запретить установление полноценных TLS-сессий, навязывая для каждой из них перехватывающий узел. В таком случае, пользователи, которые не установили дополнительный корневой сертификат, просто будут видеть предупреждения браузера (или другого TLS-клиента), а те, кто требуемый сертификат установил – никаких предупреждений не увидят. Да, есть специальные случаи: например, некоторые клиентские программы, настроенные строго, могут перестать работать, так как в них жёстко зашиты ключи, которым только и можно доверять для некоторых узлов.

(Да, на всякий случай, добавлю очевидное: подобный тотальный прямой перехват, если его действительно вводят, полностью ломает TLS-инфраструктуру, сложившуюся в Сети – никакого прикладного смысла в ней не остаётся.)



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

В OpenSSL теперь будет ГОСТ (2012) для TLS:

“Специалисты Технического центра Интернет (ТЦИ) достигли договоренностей о включении поддержки российских криптографических алгоритмов цифровой электронной подписи и хеширования 2012 года ГОСТ Р 34.10-2012 и ГОСТ Р 34-11.2012.”

Силами Дмитрия Белявского. Замечательно. (Соответствующий commit в Git OpenSSL.)



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

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

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

Опытный пользователь знает о почтовом сервере. И догадывается, что его письмо может прочитать администрация сервера. Однако в администрации он уверен (что читать она не станет) и поэтому полагает переписку секретной, смело доверяя ей весьма скользкие моменты.

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

Дело в том, что пока упомянутый специалист утверждает, что почта нынче ходит между продвинутыми серверами в зашифрованном виде, через TLS и прочие заклинания, настоящие техномаги (80 lvl) “кастуют” подмену DNS и заменяют интересующие их почтовые серверы на свои прокси. Эти прокси отменяют TLS (почтовые протоколы позволяют) и – хлоп! – опять читают “секретную” переписку пользователя, что грозит последнему проблемами, хоть он этого и не понимает.

Вывод и мораль: не используйте математических методов, если вы не понимаете их сути (из известного анекдота про математиков и физиков). Да. Лучше уж подсуньте записку под дверь.



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

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



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

Old carБогатая новая тема: как самоуправляемые автомобили (автомобили-роботы) должны вести себя в ситуациях, когда неизбежно нанесение вреда человеку и робот должен этот вред распределить. Речь о ситуации, когда автомобиль оказался перед выбором: наехать на группу пешеходов, перебегающих дорогу, или отвернуть, врезавшись в стену – пожертвовав, таким образом, своим пассажиром. В недавней работе, посвящённой исследованию отношения людей к решению роботом подобных задач, рассматривается даже три варианта: группа пешеходов против пассажира; пешеход против пассажира; случайный прохожий на тротуаре против группы пешеходов.

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

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

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

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

Даже введение вместо пассажира-статиста должности “человеческого оператора” – не помогает преодолеть проблемы: если у оператора есть кнопка выбора, то когда машина оказалась в ситуации нанесения неотвратимого вреда, “человеческий оператор” просто гарантированно не успеет понять, что же случилось. Да. Даже если он внимательно следил за показаниями приборов.



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

Кстати, про фотографии. Нередко приходится видеть, как на фотографиях сетевого оборудования замазывают имена серверов и названия портов/линий. В принципе, это полезная практика: потому что также приходилось наблюдать и скандалы, когда на фотографиях из некоторого дата-центра, опубликованных в СМИ, специалисты узнали оборудование, которого в этом дата-центре (как бы) не должно было находиться. Так вот, на сайте ЦРУ есть статья, повествующая об одном рабочем эпизоде аналитика стратегической разведки, занимавшегося, в конце 50-х годов прошлого века, реконструкцией параметров советской электрической энергосистемы на Урале (некоторый перевод удалось найти готовый, но лучше, конечно, читать оригинал; зато страница с переводом очень дополняет оригинал важными картинками в высоком разрешении).

Если в двух словах, то история вертится вокруг фотографии, опубликованной в журнале “Огонёк” 1958 года. На этой фотографии запечатлена центральная диспетчерская “Уралэнерго”, находившаяся в Свердловске. Используя схему системы энергоснабжения, которая составляет основное содержание фотографии, аналитику ЦРУ Чарльзу В. Ривзу удалось составить план энергосистемы, на основе которого, используя теорию электросетей, он смог вычислить потребляемую мощность советских секретных атомных объектов, находившихся на Урале, а также подтвердить, что некоторые объекты – являются атомными. Ради этого, собственно, всё и затевалось. Фотография в “Огоньке”, конечно, была отретуширована перед печатью: на ней, как пишут, закрасили все названия и шкалы (или “индикаторы”) приборов. Зацепкой послужил состав схемы: обозначения, соответствовавшие генераторам, позволили сопоставить их с электростанциями – так как информация о числе генераторов на некоторых из них была известна из других источников. Новые станции, а также станции, о которых было мало информации (неизвестно число генераторов), оказалось возможным сопоставить со схемой методом исключения, анализируя взаимные подключения, на фотографии и на разведывательных аэрофотоснимках.

Ogonek, "Уралэнерго"

Занятно, что фотография из “Огонька” обозначена в статье как ключ, позволивший сопоставить имевшиеся данные и получить итоговую техническую схему энергосистемы (с указанием мощностей и прочих параметров). Схема, как пишут, являлась секретной. Правда, остаются вопросы. Раз схема энергосистемы являлась секретной, то для чего в “Огоньке” опубликовали фотографию пульта управления этой энергосистемой (пусть и отретушированную)? Понятно, что фотографии с режимного объекта, где присутствует секретная схема во всю стену – во всесоюзном журнале, отправляемом, фактически, прямо в ЦРУ, появиться не могли: фотокорреспондента просто не пустили бы на объект. То есть, настенная схема в диспетчерской, вероятно, всё же не считалась секретной. Либо её решили рассекретить. Возможен, конечно, и вариант, что специалист, просматривавший материал на предмет ретуширования, с одной стороны, не понимал, как работает служба стратегической разведки, а с другой – как работает энергосистема, поэтому оставил ключевые элементы нетронутыми.

Как можно было бы предотвратить утечку, опубликовав, вместе с тем, рискованную фотографию? Например, дорисовать примерно треть дополнительных обозначений, которых нет там в реальности. Попутно удалив примерно одну пятую обозначений подлинных. Но, конечно, дорисовка испортит документальную ценность фотографии, поэтому можно было бы ограничиться вырезанием больших кусков схемы и удалением изображений линий электропередач.

Кстати, в статье сообщается разумная вещь: выход продукта “атомного объекта” (например, оружейного плутония) коррелирует с потребляемой предприятием электрической мощностью. Но дело в том, что о таком побочном канале всем хорошо известно, поэтому вовсе не факт, что подводимая мощность соответствует мощности, потребляемой агрегатами и установками, занятыми в производстве. Методы и требования по маскировке информации в подобных каналах утечки никто не отменял: например, азы технической защиты информации – маскировка различных производственных отходов; это особенно касается атомной и химической промышленности. Впрочем, на сайте ЦРУ пишут, что выводы аналитика о схеме энергосистемы очень хорошо совпали с подоспевшими результатами аэрофотосъёмки U-2 – так что “Огонёк”, получается, помог, предоставив разведке дополнительный источник информации.

Вот.

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



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

В Штатах СМИ рассказывают, что полиция Нью-Йорка использует засекреченные “рентгеновские автомобили”, предназначенные для “просвечивания” других автомобилей, наблюдения за прохожими, заглядывания в дома и что там можно ещё придумать за задачи для подобной техники. Речь про мобильные комплексы Z Backscatter® Van (“ZBV”) от компании AS&E, которые, судя по документации на сайте (см. ссылку) – секретными вовсе не являются.

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



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

SignХеш-функции ставят в соответствие произвольному входному сообщению (любой длины) некоторое число из множества значений функции, то есть, отображают всевозможные входные сообщения в конечное множество значений хеш-функции. Коллизия – это когда известны два различных сообщения, имеющих одно и то же значение хеш-функции, то есть, H(M) = H(M’). Очевидно, коллизии обязательно существуют для хеш-функции, за редким исключением (потому что на практике сообщений, грубо говоря, больше, чем значений функции). Коллизии бывают различных типов, и это различные типы обладают разными свойствами. Криптографически стойкие хеш-функции отличаются тем, что для них обнаружить коллизии должно быть вычислительно сложно.

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

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

А что вообще даёт возможность обнаружения коллизий в SHA-1? Предположим, у нас есть эффективный алгоритм, позволяющий находить самые “простые” коллизии (коллизии второго рода), а именно – два сообщения, для которых значения хеш-функции равны. Это позволяет получить два, – вообще говоря, случайных, – текста, для которых будет одинаковым значение электронной подписи, использующей SHA-1 для генерирования дайджеста сообщения. Смысла в этом не так много. Гораздо полезнее алгоритм, позволяющий найти коллизию первого рода: сообщение M’, для которого значение SHA-1 будет равно значению для заданного сообщения M. Тогда, например, можно будет взять SSL-сертификат (M), использующий SHA-1 в составе криптосистемы электронной подписи, и построить второе сообщение (M’), соответствующее данной электронной подписи. Хорошо? Хорошо. Но есть проблема: нигде не сказано, что это сообщение будет хоть как-то похоже на SSL-сертификат. То есть, подделать SSL-сертификат таким образом не выйдет – скорее всего пара из коллизии будет представлять собой случайный набор байтов, и хоть подписи совпадают, но подменить-то сертификат можно только файлом, соответствующим этому сертификату по структуре. Примерно то же относится и к ключам RSA – не факт, что обнаруженную коллизию удастся использовать в качестве открытого ключа. (Тут, впрочем, есть интересные оговорки, связанные с особенностями RSA – дело в том, что открытый ключ RSA – это не структура данных, а всего лишь целое число заданной разрядности; но это другая история.)

То есть, для того, чтобы коллизии в SHA-1 хорошо заработали на практике, нужен алгоритм, позволяющий обнаруживать коллизию для заданного сообщения, которая обладает некоторыми свойствами этого сообщения. Например, для заданного SSL-сертификата нужно иметь возможность построить сообщение, которое тоже является SSL-сертификатом, содержит другой открытый ключ, но при этом имеет то же значение хеш-функции. Это чрезвычайно сложно. Особенно если в качестве цели выбрать не произвольный сертификат, а вполне конкретное множество сертификатов, как того требует атака на ту или иную выбранную цель. В случае с MD5 и подделкой сертификатов, использовался алгоритм коллизии с выбранным префиксом: в составе сертификата выделили поля, одно из которых могло иметь произвольное значение, а другие – легко предсказуемое (в том числе, серийный номер), под эти параметры и была подобрана коллизия. Для SHA-1, применительно к инфраструктуре SSL, потребуется что-то подобное, вот только сертификаты сейчас чуть лучше защищены – формат лишили требуемой гибкости (addon: хотя, как мне подсказали, гибкости всё равно достаточно – можно ввести собственные расширения, либо использовать в качестве носителя переменного значения поля типа SAN и др., где формат позволяет вписывать самые разные данные).

В упомянутой работе также уточняют примерную стоимость нахождения полезной коллизии в SHA-1 – это около $170 тыс., потраченных на аренду мощностей Amazon EC2. С одной стороны, не такая большая сумма. С другой – целей для атак, которые заслуживают подобной траты, не так много. Если пытаться применить данный инструмент для подмены SSL-сертификата (хотя он для неё не очень и подходит), то придётся ещё перехватывать соединение с сайтом. Неплохим вариантом применения оказывается подделка подписи на троянской программе, которая таким образом сможет легко проникать в операционные системы. Но, опять же, вопрос, что тут проще: подделать подпись через коллизию или украсть ключ?

Впрочем, нестойкая хеш-функция, естественно, не должна использоваться.



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