Исследователи из Google и института CWI продемонстрировали первую практическую коллизию для криптографической хеш-функции SHA-1. SHA-1 уже несколько лет считается недостаточно стойкой, но, тем не менее, до сих пор широко используется (в том числе, в SSL-сертификатах, несмотря на все ограничения). На специальном сайте shattered.it можно скачать два файла PDF, которые отличаются содержанием, но имеют одинаковое значение SHA-1 (каждый может проверить самостоятельно). Несмотря на сложность реализации этой конкретной атаки, которая потребовала больших вычислительных мощностей (они нашлись у Google), SHA-1 теперь можно окончательно признать нестойкой. Это весьма важное достижение – казалось, что SHA-1 простоит ещё пару лет.

Вместо SHA-1 следует использовать, например, хеш-функции семейства SHA-2: SHA-256 и др.



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

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

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

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

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

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

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



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

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

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

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



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

Очередной раз попались выпущенные Symantec TLS-сертификаты для доменов, администраторы которых эти сертификаты не запрашивали (*.example.com, test.com и пр.) Как уточняет Symantec – сертификаты выпустила одна из компаний-партнёров, и это были тестовые сертификаты. То, что они тестовые – вполне очевидно из состава полей, но при этом сертификаты валидные. Сертификаты были выпущены в 2015 и 2016 годах, сейчас те, что обнаружились, отозваны.

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



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

В теории, квантовые компьютеры достаточной разрядности позволят быстро вычислять дискретные логарифмы, а это означает, что сломаются распространённые сейчас криптосистемы электронной подписи, в том числе, ECDSA. На ECDSA основана работа современной версии криптовалюты Биткойн. ECDSA здесь используется для удостоверения транзакций, то есть, необходима для того, чтобы потратить средства, находящиеся на том или ином адресе. Для удостоверения транзакции требуется знать секретный ключ из пары, связанной с биткойн-адресом.

Биткойн-адрес является значением хеш-функции RIPEMD-160 от открытого ключа ECDSA. То есть, сама по себе возможность “обращать” ECDSA (быстро вычислять по известному открытому ключу секретный) не позволяет “ломать” произвольные адреса: для того, чтобы получить открытый ключ, нужно будет вычислить прообраз значения RIPEMD-160, а это трудная задача даже для квантового компьютера. Безопасный способ потратить средства состоит в использовании каждого биткойн-адреса для расходования биткойнов только один раз: транзакция разбивается на две части – одна отправляется на адрес получателя платежа, а вторая – на новый адрес, созданный для хранения остатка средств.

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

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



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

Превратил реализацию шифра “Магма” для Arduino в библиотеку, добавив схему аутентификации CMAC (на том же шифре) и удобные интерфейсы для шифрования/расшифрования. На специальной странице есть короткое описание и ссылки на саму библиотеку: шифрование для Arduino.



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

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

В статье по ссылке содержится занятная неточность. Там сказано, что в “случае разряда аккумулятора, управляющего электронным предохранителем и системой авторизации пистолета, оружие должно блокироваться”. Это было бы, мягко говоря, удивительным решением. Однако в исходном документе Минюста США ничего подобного нет. Вероятно, журналиста ввёл в заблуждение достаточно специальный англоязычный термин – “out-of-battery”: в отношении стрелкового оружия он обозначает преждевременный выстрел, обычно, при недозакрытом затворе. Естественно, прямой перевод – “без батарейки” – ошибочен: когда этот термин появился, никаких электрических батареек в пистолетах и пушках ещё не было. Но несложно представить, какова была бы реакция бойцов спецподразделений полиции, которым вручили бы новое личное оружие, предупредив, что перед мероприятием нужно не забыть зарядить батарейки.

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

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



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

В продолжение предыдущей заметки – посмотрим, как устроены симметричные блочные шифры. Примером послужит шифр “Магма”, в версии ГОСТ Р 34.12-2015, с картинками. Симметричными называют шифры, для которых ключ расшифрования можно легко получить из ключа зашифрования. В современных симметричных шифрах – эти ключи просто совпадают. Блочный шифр, в отличие от потокового, работает с блоками данных фиксированной длины (разрядности), измеряемой в битах. Например, шифр AES работает с блоками разрядности 128 бит. А “Магма” – 64 бита.

Получив на вход блок открытого текста и ключ, преобразование, называемое шифром, выводит блок шифротекста, той же разрядности. Соответствие между блоками открытого текста и блоками шифротекста задаёт значение ключа. “Магма” использует ключ длиной 256 бит. Современные шифры строятся из некоторых элементарных операций над блоками. Наборы таких операций обычно объединяют в раунды. Раунды повторяются несколько раз.

В “Магме” 64-битный блок разделяется на две равные части, над которыми производятся операции раунда. Эти операции включают в себя (в порядке выполнения): сложение с ключом раунда; подстановки; циклический сдвиг; сложение с половиной блока. Заканчивается раунд перестановкой полублоков местами. Раунд показан на схеме ниже:

Magma Round

A1 и A0 – две части входного блока: соответственно, они содержат по 32 разряда каждая. На вход цепочки раундовых операций поступает значение полублока A0. Для каждого раунда используется свой ключ. На схеме ключ обозначен Ki. Раундовый ключ также имеет длину 32 бита (разряда), то есть, совпадает с разрядностью половины блока. Сложение блока со значением ключа (операция обозначена символом ⊞) выполняется по модулю 232 – это эквивалентно “естественному”, для вычислительной техники, сложению двух 32-битных чисел (без знака). Над результатом сложения выполняются подстановки по таблице подстановок. Таблицы часто называют S-boxes. “Магма” использует 4-битные подстановки, отдельные для каждого полубайта из 32-битного блока. Логика тут следующая: 32-битный блок разбивается на 8 4-битных частей, каждое из получившихся значений (0..15, так как битов – четыре) заменяется на соответствующее ему значение из таблицы подстановок; таблиц восемь – по одной для каждой позиции 4-битного значения внутри 32-битного блока.

В версиях шифра, предшествовавших ГОСТ Р 34.12-2015, таблицы подстановок предлагалось выбирать отдельно для каждой сети обмена сообщениями и держать в секрете. То есть, таблицы позволяли повысить стойкость шифра. При этом, впрочем, неверно выбранные подстановки стойкость могут заметно снизить, а раскрыть секретные подстановки реально, если атакующий может зашифровывать произвольные тексты с известным ключом. В ГОСТ Р 34.12-2015 – значения подстановок зафиксированы.

Значение 32-битного блока после подстановок циклически сдвигается влево на 11 разрядов (то есть, биты сдвигаются влево, а выбывшие разряды вдвигаются справа в том же порядке). После операции сдвига, значение поразрядно суммируется с блоком A1 по модулю 2, это логическая операция XOR (обозначена символом ⊕ на схеме).

В заключении раунда – A1 и A0 меняются местами. То есть, A0 переходит в следующий раунд без изменений, но становится на место A1. Всего раундов 32. Последний раунд отличается тем, что 32-битные блоки не меняются местами, а просто объединяются: A0 присоединяется к A1 справа. Это замыкает всю конструкцию, позволяя использовать её без изменений для расшифрования: операция расшифрования отличается только обратным порядком раундовых ключей.

Раундовых ключей – 32. Каждый имеет разрядность 32 бита. Эти ключи получаются из основного ключа шифрования при помощи алгоритма развёртывания ключа. В “Магме” этот алгоритм очень простой. Исходный ключ содержит 32 байта (256/8=32). 32 байта – это 8 раундовых ключей, каждый по четыре байта; на 32 раунда – ключи копируются, с той лишь разницей, что последние восемь используются в обратном порядке. Схема:

Round Keys

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

Magma Operation

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

Avalanche-1

Хорошо видно, что уже на седьмом раунде различия между значениями блоков сравнимы (визуально) с типичным расстоянием между двумя случайными 64-битными значениями. При этом решающий вклад в “разделение” блоков вносят подстановки (собственно, в этом их основное назначение). Попробуем выключить подстановки (кроме последнего раунда; без подстановок, естественно, данный шифр использовать нельзя).

No S-boxes

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

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

Wrong Rotation

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



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

ASM codeРоссийский шифр “Магма” известен также под названием ГОСТ 28147-89. В новом ГОСТ Р 34.12-2015 данный шифр приведён вместе с более современным шифром “Кузнечик”. “Магма” весьма старый блочный шифр, ещё советский, он родом из 70-х годов прошлого века. Некоторым образом шифр связан с электромеханическими шифровальными машинами. Например, таблицы подстановок ведут своё происхождение от “перемешивающих” дисков этих машин. Несмотря на солидный возраст, шифр до сих пор выглядит неплохо по соотношению таких характеристик, как практическая стойкость и требуемое количество операций. Шифр достаточно простой и может быть реализован на базе микроконтроллера. В качестве базового устройства используем распространённую платформу – Arduino (конкретно – Arduino Uno, на котором я проверял исходный код).

“Магма” имеет разрядность блока 64 бита и разрядность ключа 256 бит. По современным меркам 64 бита – малая разрядность блока, но она сохраняет актуальность для встроенных применений (“Интернета вещей”), где короткие криптограммы очень распространены и обусловлены техническими ограничениями. 256 бит ключа и на современном уровне являются излишне большим значением, при условии, конечно, что шифр обеспечивает стойкость, эквивалентную полному перебору. Я не буду приводить обзор литературы по криптоанализу данного “ГОСТового” шифра в этой заметке. Отмечу только, что до сих пор для шифра не предложено универсального метода криптоанализа, который снизил бы криптостойкость, с точки зрения практической атаки, до неприемлемого уровня. Все известные эффективные атаки – академические, требуют чрезвычайно больших ресурсов, при этом лучший результат: снижение стойкости до 101 бита. Примем, что в наихудшем практическом случае данный шифр обеспечивает стойкость около 115 бит, а этого вполне достаточно для, например, передачи данных от датчиков температуры “при ведении подсобного хозяйства”. Другими современными “малыми” шифрами, которые ориентированы на использование в маломощных микроконтроллерах, являются, например, шифры Speck и Simon, предложенные АНБ.

Технически, “Магма” представляет собой итеративную конструкцию Фейстеля, состоящую из 32 раундов. Входной блок разделяется на две равные части, в каждом раунде к одной из частей последовательно применяются раундовые преобразования, а результат суммируется со второй частью. Перед следующим раундом – части меняются местами (кроме последнего раунда). Преобразования включают в себя сложение (по модулую 232) с ключом раунда, подстановку по таблице подстановок, циклический сдвиг влево. При расшифровании работа шифра отличается только порядком ключей. Раундовые ключи имеют разрядность половины блока – 32 бита. Набор ключей раундов получается из основного ключа копированием его 32-битных подмножеств по достаточно простой схеме: первые 24 раунда используют “подключи” последовательно в прямом порядке (то есть, k1..k8), а заключительные 8 раундов – в обратном порядке (k8..k1). (Более подробное описание работы шифра – в отдельной записке.)

Сам шифр я реализовал на ассемблере AVR, воспользовавшись inline-вариантом – то есть, команды ассемблера включены в исходный код на языке C (исходный код прилагается, см. ниже, функция DoCipher()). Шифр работает быстро, реализацию можно ещё улучшить. Микроконтроллер Arduino Uno очень ограничен в объёме оперативной памяти для данных, при этом “Магма” только для хранения основного ключа требует 256/8 = 32 байта. Набор раундовых ключей, если его полностью развернуть в памяти, съедает ещё 4*32 = 128 байтов. Таблица подстановок (я, кстати, использовал таблицу из ГОСТ Р 34.12-2015) включает восемь наборов по 16 значений, однако так как подстановки полубайтовые (по четыре бита), их можно объединить попарно: получаем 4*16 = 64 байта. Итого – 224 байта только на окружение, которое требуется для использования шифра. Оптимизации тут можно подвергнуть только раундовые ключи – в принципе, можно их не разворачивать, а прямо использовать байты из основного ключа (так работала бы аппаратная реализация).

Реализация непосредственно шифра называется криптопримитивом. Наличие криптопримитива позволяет строить на базе шифра полезные конструкции. При этом, использовать блочный шифр прямо для зашифрования блоков открытого текста – в подавляющем большинстве случаев нельзя: такой режим называется режимом простой замены (или ECB) и не обладает нужным уровнем секретности, даже если вы с помощью зашифрованных команд лампочки в доме переключаете. Например, одна и та же команда, при использовании одного ключа, будет соответствовать одинаковому шифротексту. Запись с повторной передачей позволит третьей стороне переключать ваши лампочки. Для предотвращения подобных атак существует ряд методов: например, использование уникальных значений (счётчиков) для команд, различные схемы с подтверждением (но тут требуется отправка дополнительных пакетов). Наличие шифра и секретных ключей позволяет все их реализовать безопасно. Также на базе шифра реализуются схемы вычисления/проверки кодов аутентификации сообщений, которые защищают от подделки данные, передаваемые в открытом виде.

В исходном коде в качестве примера дана реализация функций шифрования в режиме счётчика – MagmaEncrypt(), MagmaDecrypt(). Такой режим пригоден для практического использования, однако он не обеспечивает аутентификации сообщений. Предполагается, что обменивающиеся данными устройства знают общий секретный симметричный ключ и используют синхронное значение nonce (оно может передаваться в открытом виде). Соответственно, код содержит пример вызова данных функций.

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

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

Update 12/12/16: сделал библиотеку с шифром ГОСТ Р Р 34.12-2015 “Магма” для Arduino.



Комментарии (4) »
Навигация по запискам: Раньше »