Ресурсы: техническое описание TLS, LaTeX - в картинки (img), криптографическая библиотека Arduino, шифр "Кузнечик" на ассемблере AMD64/AVX и ARM64
В продолжение предыдущей записки. Различные “аппаратурные” атаки, типа разновидностей Spectre/Meltdown, которые преодолевают механизмы разграничения доступа современных процессоров, имеют интересную связь с концепцией “диагонализации”: то есть, такие атаки всегда возможны, если только процессор пытается оптимизировать использование вычислительных ресурсов достаточно сложным способом. Под “достаточно сложным” тут подразумевается наличие механизмов вида “предикторов” (упреждающего анализа потока команд), задействованных на уровне над “межпотоковым” взаимодействием.
Вообще, в x86 “префетчинг” (предварительное извлечение) кодов команд появился ещё в микропроцессоре 8086. Но тогда соответствующая схема считалась просто конвейером команд. Это был отдельный компонент, со своими регистрами и системой счётчиков, который асинхронно считывал коды команд с внешней шины, когда та была свободна, что существенно ускоряло работу процессора. Понятно, что в 8086 не было ни каких-то особых механизмов аппаратного разграничения потоков команд и адресного пространства, ни обособленных полноценных ядер, исполняющих код, так что и проблем с побочными эффектами от работы схем конвейера тоже быть ещё не могло. Однако состояние этого конвейера, вмещавшего всего несколько кодов (четыре 8-битных регистра), изменяло состояние процессора вне зависимости от исполняемой основным “протоядром” команды, поскольку конвейер содержал пару указателей, несколько флагов и т.д. Впрочем, технические детали устройства исторического микропроцессора тут не важны – важно, что, во-первых, этот простой конвейер работал только на уровне последовательности кодов команд (не со свойствами самих команд); во-вторых, не было потоков и общих элементов, совместно используемых этими потоками.
Отличие “уязвимых” схем современных процессоров в том, что здесь добавляется новый уровень – те самые “предикторы”, оснащённые логикой, которая учитывает уже не порядок кодов команд, а свойства этих команд и состояние процессора, а кроме того, добавляются общие для нескольких потоков элементы (схемы кэширования и пр.) на работу которых прямо влияют предикторы. И, конечно, возникает аппаратное разграничение доступа, которое и предлагается преодолевать при помощи атак, использующих аппаратные уязвимости.
Базовая логика таких атак – использование “оракулов”, сигналы которых пробивают границы, устанавливаемые (формально) аппаратной архитектурой процессора для фрагментов программного кода. Тут нужно учитывать, что границы эти только декларируются, а в реальности – сигналы через них проходят (иначе тут не было бы предмета), потому что процессору необходимо оптимизировать исполнение кода и доступ к памяти. Эти сигналы обязательно будут возникать именно потому, что в процессоре появился уровень, исполняющий “программу над программой”: упреждающий анализ команд работает по собственной программе (пусть и записанной непосредственно в аппаратуре); эта программа не только использует все потоки и фрагменты кода в качестве входных данных, но и влияет на состояние общих для изолируемых фрагментов кода элементов (кэш и очереди команд). То есть, схема аппаратной оптимизации тут всегда будет сквозной, можно сказать, что неустранимой. Вопрос в том, нужно ли считать такую архитектурную черту уязвимостью. Получается, что общая программа смотрит на команды в разных потоках и переключает состояние общих элементов, чтобы оптимизировать процесс. Изолируемые процессы находят способ измерения времени переключения состояний и – строится очередная уязвимость.
Если попробовать бороться с возникающими по описанным только что принципам сигналами, но попытаться сохранять общие элементы процессора, то каждый новый слой просто будет приводить к появлению более хитрых способов измерения: многими “атакующими” потоками, по накопленной статистике, ещё как-то. Если в архитектуру процессора, предположим, введут некоторое зашумление переключений кеша и предикторов, то носителем сигнала окажется схема, реализующая зашумление. Всякое подобное усложнение, добавление новых уровней, приводит к тому, что появляются и носители новых сигналов (это и есть “диагонализация”). При этом защита от “уязвимостей” программными методами, снижающими общее быстродействие, выглядит несколько странно, потому что предлагается прилагать дополнительные усилия для создания затруднений в работе оптимизирующих схем, которые и в процессоре уже встроены (то есть, потрачена площадь подложки и элементарные логические узлы), и само ПО при этом всё равно работает на общей аппаратуре.
Радикальное решение предполагает либо полную и точную аппаратную изоляцию уровней и ядер, когда все компоненты продублированы и работают независимо, либо полную замену системы команд (не стоит списывать со счетов, что в x86 уже и некоторые отдельные команды обладают тьюринг-полной реализацией). Однако это противоречит самой идее аппаратурной оптимизации на границе между логическим представлением команд процессора и машинным микрокодом. Да и приведёт внедрение таких методов только к тому, что очередной “пробой изоляции” между потоками выявят на стороне шин и контроллеров, взаимодействующих с ОЗУ и периферийными устройствами.
Комментировать »
“Коммерческий поставщик спутникового наблюдения” Umbra недавно сообщил, что там начали вводить в строй систему бистатической радиолокации с синтезированием апертуры на базе нескольких низкоорбитальных спутников. По ссылке есть пример снимка, этот же пример – рассматривается ниже. Вообще, речь про специализированный радар сантиметрового диапазона, а синтезирование апертуры и согласованная вычислительная обработка данных позволяют сильно улучшить показатели: разрешающую способность, обнаружение движущихся целей и пр. Сейчас спутников в этом проекте, как пишут, запущено всего восемь, два самых новых как раз и обеспечивают базу для бистатической радиолокации. Поддержку оказывает DARPA.
Понятно, что результат радара – это далеко не цветная картинка, полученная телескопом для публикации в Google Earth (см. наложение ниже). Но у радара целый ряд преимуществ, тем более, если речь идёт об орбитальной радиолокации с разнесением передатчика и приёмника. Такой орбитальный радар видит ночную часть земной поверхности, может просвечивать не только сквозь облака, но и через некоторые наземные укрытия; зондирующий радиосигнал с высокой разрешающей способностью позволяет отличать макеты техники от настоящей техники и, в теории, может даже извлекать сведения о подземных коммуникациях (находящихся на небольшой глубине в подходящих почвах) и обнаруживать подвижные субмарины в подводном положении (по спутному следу). Спутники Umbra находятся на высоте около 550 км (450 – 600 км), а низкая орбита тоже приносит свои преимущества, даже по сравнению с самолётами. (Но, например, на радарной картинке не видна надпись, нанесённая на основание плотины с иллюстрации ниже.)
В качестве иллюстрации работы бистатической радиолокации Umbra публикует изображение дамбы большой ГЭС в Пакистане.
Общий вид:

(Cпутниковый радар Umbra.)
Выделен фрагмент, который ниже дан с увеличением до “пиксел в пиксел”:

(Umbra.)
Фрагмент с большим разрешением

(Umbra.)
Примерное наложение на снимок, доступный в Google Earth:

Занятно, что совпадает почти вся техника, выставленная во дворе (Umbra/Google). От Umbra, кстати, есть немало данных в открытом доступе.
Комментировать »
Один из самых знаменитых в мире чипов известен как “555-й таймер” или просто как “микросхема 555”. На Hackaday публикуют описание его полнофункциональной “развёртки”, выполненной из SMD-компонентов на плате, которая по форме повторяет три пятёрки – см. картинку.

Комментарии (1) »
Фольклорная интерпретация термина “квантовый компьютер” строится на предположении, что характеристика “квантовый” отражает последовательное уменьшение линейных размеров микроэлектронных элементов: “сначала процессоры строили по “микрометровой” технологии, потом – из сотен нанометров, потом – уменьшили до десятков нанометров, а следующий шаг уменьшения – это уже и есть “квантовые” компьютеры”. Занятно, что, с некоторыми оговорками, это описание вполне годится в качестве верхнеуровневого объяснения наблюдаемой на практике ситуации.
Так, во-первых, попытка создания универсальных квантовых компьютеров – это попытка пройти на уровень, находящийся ниже не только всех этих полупроводников, но и ниже отдельных электронов. Во-вторых, для того, чтобы на этот уровень пройти, требуется создание инструментов для манипулирования отдельными частицами, с минимальными затратами энергии на вычисления и с минимальным временем выполнения операций, так что, когда (и если) окажется, что квантовый компьютер сделать не получается, технические результаты можно будет попробовать использовать для создания “ультракомпактных” вычислительных элементов, возможно, с трёхмерной вычислительной архитектурой.
Комментировать »
У рассылки SMS с устройств пользователей, которую, как пишут, предлагает Telegram, есть ценный “идейный” аспект: распределённую сеть, составленную из абонентских устройств, можно использовать куда как интереснее, чем просто в роли инструмента бесплатных SMS-рассылок. Смартфон, с работающим приложением, может обнаруживать другие устройства: WiFi, Bluetooth разных видов, акустика (это особенный метод, не только совместимый с “умными” колонками, но и вообще – кроссплатформенный и эффективно работающий в обе стороны).
Поэтому, в обмен на “премиум-доступ”, можно построить активную сенсорную сеть, с привязкой к точному времени и координатам, которая будет видеть перемещение не только различных пользователей приложения-мессенджера, но и прочих носителей смартфонов, равно как и выявлять устройства типа ноутбуков, беспроводных наушников, браслетов, часов с “картами и GPS”, “умных” (не менее, чем колонки) телевизоров, специальных “маячков”, а также и других подобных – тут есть где развернуться.
Комментарии (5) »
Интересный аспект моделей физических вычислителей – влияние пространственных измерений. Предположим, что вычислитель электронный и состоит из некоторых элементарных частей (теоретических “транзисторов”), которые управляются электрически, через, условно говоря, “провода” или “контакты”. Речь идёт про сугубо теоретическую конструкцию, поэтому конкретными единицами измерения длин, сечений и напряжений можно пренебречь. Однако эти элементарные вычислительные элементы можно плотно укладывать в привычном трёхмерном пространстве. (Математические рассуждения про ситуацию с количеством измерений пространства больше трёх – оставим для другой записки, отметив, впрочем, что “очень многомерный арбуз” покупать не всегда выгодно, так как он почти весь состоит из корки.)
Построение вычислителя в трёхмерном пространстве сулит выигрыш, потому что доступный фронт распространения электромагнитного сигнала оказывается двумерным: то есть, можно построить эффективную параллельную и слоистую структуру из вычислительных элементов, которые будут размещены с максимальной плотностью, что позволит достичь малых задержек распространения сигнала, со всеми вытекающими свойствами: быстродействие, затраты энергии и т.д.
Однако выяснятся, что сам элементарный вычислительный элемент, – так как он хоть и теоретический, но электрический и классический, – при срабатывании выделяет тепло, а схемы отведения этого тепла требуют использования отдельного измерения. Так что размещение, собственно, элементов, должно быть двумерным. Ну или как-то придётся научиться либо вычислять без затрат энергии, либо – сбрасывать излишки в какое-то дополнительное, относительно привычных, измерение (например, забрасывать в будущее, как это нередко происходит со всякими “невычислительными” системами).
Комментировать »
Raspberry Pi 5, как и обещано, существенно быстрее Pi 4. Сравнил при помощи ассемблерной реализации шифра “Кузнечик” для ARM64 – показатели такие:
Pi 4 vs Pi 5 (обе версии с 8Gb RAM)
Encryption: ~28 MB/sec vs ~93 MB/sec Decryption: - ~24 MB/sec vs ~70 MB/sec Режим GCM: ~18 MB/sec vs ~50MB/sec
То есть, в три с лишним раза быстрее.
Комментировать »
Представьте, что исследование карамельки выявило наличие внутри начинки. Для решения задачи размещения начинки внутри карамелек требуются некоторые особенные машины, которые нужны для формирования и обработки трубочек из карамельного состава. Опрошенные кулинары не знают, как такие машины изготавливают. Приготовить исходный раствор для корпусов карамелек, равно как и начинку из повидла, можно в кастрюле, это просто – типичная кухонная задача. Но вот создание машины, вкладывающей одно в другое, внезапно, требует станков для изготовления необычных металлических деталек, а это совсем другая история.
“Обратная разработка” (ревёрс-инжиниринг) нередко оказывается гораздо сложнее “прямой”. В частности, потому, что, при обратном движении, мыслимый процесс, приводящий к созданию целевого объекта, легко расщепляется, да ещё и в нескольких неожиданных плоскостях: мало того, что машина для помещения начинки в карамельки оказывается более замысловатой, чем кастрюля и сама карамелька с начинкой, так ещё и устроить эту машину можно многими способами, а измеримые свойства исходных карамелек вовсе не позволяют найти среди этих способов оптимальный, так как в карамельке сложность машины необратимым образом сворачивается в элементарный факт обнаружения начинки внутри корпуса.
(Кстати, близкий пример из области полупроводниковых схем – изменение проводимости, невидимое при “исследовании топологии”. Но, конечно, относится не только к микроэлектронике.)
Комментарии (2) »
Занимательное программирование. Почему вместо первого фрагмента кода (см. ниже) предлагается писать второй фрагмент (см. ещё ниже)?
Первый фрагмент:
if(matched != 0) // passwords match else //passwords don't match
Второй фрагмент:
if(matched == 0x69d61fc8) // passwords match else //passwords don't match
Потому что так предлагается защищаться от дефектов аппаратуры, приводящих к переключению битов в результате rowhammer-атак. Примеры взяты из исходной работы, где соответствующие “гаджеты” (то есть, способы сравнения в if) для проверки реквизитов доступа обнаруживаются в OpenSSH, sudo и др. Логика, стоящая за словом 0x69d61fc8, такая: rowhammer позволяет при помощи интенсивных операций с ячейками памяти переключать биты в соседних (физически) ячейках; поэтому, если используется условие “не равно нулю”, то достаточно перещёлкнуть один произвольный бит в нулевом значении переменной, чтобы равенство нарушилось и “пароли совпали” (passwords match); условие же “равно 0x69d61fc8” (или ещё какому-нибудь “перемешанному” значению) перещёлкиванием битов подогнать “несколько сложнее”.
Вообще, с точки зрения “просто программирования”, вариант matched != 0 – верный, работает, его можно использовать, никакой проблемы тут нет. А вот если подойти с точки зрения информатики и потребовать учитывать дефекты аппаратуры, то != 0 вдруг оказывается подвержено проблемам “аппаратурной” оптимизации ничуть не меньше, чем реализации алгоритмов, использующие строго фиксированное количество операций (вне зависимости от значений битов входных данных – constant-time, но не перепутайте с соответствующим классом сложности). Впрочем, в отличие от атак, измеряющих сдвиги времени исполнения, управляемое перещёлкивание произвольных битов – это, конечно, никакая не физическая особенность, а именно аппаратный дефект. Исправлять его, как и многие похожие, предлагается программно, а исправление приводит к не самым очевидным эффектам в коде на языке высокого уровня (ЯВУ) – потому что выбор значений констант для флагов таким образом, чтобы они оказывались далеко друг от друга в смысле rowhammer-метрики, это не очень близко к логике ЯВУ, да и нужно учитывать, что оптимизирующий компилятор может всё переписать на те же нули, но уже в машинном коде.
(Описание на OpenNET.)
Комментировать »
“Интернет через спутник” в обычном смартфоне – тема популярная. Сама возможность реализации широких каналов (до спутника) с типовым радиомодулем смартфона выглядит сомнительно: неустранимая задержка сигнала, проблемы синхронизации, “уползание” частот, новые виды помех – всё это добавляет трудностей. Понятно, впрочем, что если доработать наземные аппараты, то схема становится вполне реализуемой, как только на стороне провайдера имеются сотни низкоорбитальных спутников связи, объединённых в систему с единым управлением. Например, как в Starlink. Однако у подобной системы есть ряд занимательных возможностей, которые работают и без обеспечения широкополосного канала связи неким “абонентам со смартфонами”.
Понятно, что гипотетическая система “спутник и обычный смартфон”, уже по своему определению, должна достаточно точно знать местоположение абонентов, различая их по передатчикам аппаратов-смартфонов. Но, предположим, наземный аппарат всё же не смог успешно присоединиться к “космической сети” штатным способом и широкополосный канал установить не удалось. Однако это совсем не отменяет возможности для спутников принимать сигнал аппарата и классифицировать его. Пусть даже этот аппарат работает в настоящий момент с привычной наземной станцией: сигналы смартфонов содержат уникальные метки, которые ещё и установлены на разных логических уровнях, это позволяет их различать в пассивном режиме. Особенно хорошо получится различать отдельные аппараты по сигналам, если спутников много, они на низкой орбите, а также имеют общее синхронное время. Да, Starlink подходит. Понятно, что отсутствие заявленной возможности связи “смартфон-спутники” не означает, что сами приёмники на спутниках уже не используются для геолокации конкретных работающих смартфонов. Не обязательно вводить услугу связи “для смартфонов” – следить за смартфонами можно и так.
Возможности пассивного анализа сигналов мобильных сетей резко увеличиваются, если к спутниковой сети приёмников добавить доступ к внутренним сигналам и оборудованию сетей связи. Можно предположить, что даже и обычный операторский доступ к мобильным сетям (GSM/SS7 и пр.), если его наложить на специализированное спутниковое прослушивание эфира, позволит, что называется, развернуться. Что уж говорить про доступ к контроллерам и коммутаторам (в том числе, недокументированные возможности). Тут не нужно забывать, что базовые станции тоже излучают сигналы, которые могут принимать специализированные спутники (за вычетом “атмосферных эффектов”, да).
Спутниковая сеть имеет возможности и по передаче специально сконструированных сигналов. Так что можно произвольный смартфон и “подёргать”, и, теоретически, передать обновление прошивки для радиомодуля. То же самое возможно в отношении базовых станций. Поэтому такая спутниковая группировка, при желании, может ставить сложные активные помехи, мешающие работе наземной сети.
В общем, синхронная, динамическая, гибкая и перенастраиваемая радиосистема, распределённая по сотням низкоорбитальных спутников, это очень мощная платформа, позволяющая решать задачи, ранее принципиально недоступные. Но, конечно, всё это работает лишь для тех, у кого есть доступ к управлению такой системой.
Комментировать »
Часы и синхронное время могут производить занимательные эффекты, например, при измерении радиосигналов. Это имеет разнообразные последствия. Вообще, “измерение времени” на этом направлении часто сводится к некоторым упорядоченным логическим меткам, добавляемым в данные: периодичность добавления выражается в некоторых “отсчётах”, формирующих, – благодаря тому, что можно ввести порядок, – шкалу. И это только кажется очевидным.
Синхронное время – означает, что данные, полученные в разных условиях, даже разными устройствами, можно развернуть на одну шкалу с сохранением измеряемых характеристик (ну, с некоторой точностью). То есть, с одной стороны, получаются просто “тики”, позволяющие решить, какое измерение следует за каким, а с другой – за синхронизацией времени скрывается сложный обособленный процесс, имеющий не только свои “задающие последовательности”, точность и разнообразные задержки, но и набор разных базисных свойств. И тут нетрудно предложить разные весьма неочевидные моменты: представьте, например, что можно ввести, – постфактум, – синхронное время на различных аудиозаписях, основываясь на уплывающих частотах помехи по питанию, которая проникла в запись через фильтры (естественно, у помехи должен быть общий источник – например, оборудование электроподстанции); или в обратную сторону – необычная “наводка” в цифровой звуковой системе, обусловленная тем, что сигнал на одном из устройств воспроизводится “раньше”, чем он был “записан” (представлен в исходных данных, конечно).
Если разные измерительные устройства синхронизируют время по некоторому общему источнику, то, через управление этим источником и процессом синхронизации, можно “рисовать” произвольные картины измерений, которые, казалось бы, получаются по данным от многих независимых устройств, разнесённых в пространстве. И как раз из-за того, что устройства разнесены в пространстве, на некоторых из них синхронные сигналы “немного уехали”, предположим, в результате действия радиопомехи. Вариант: внешний источник опорного времени специально сдвигает синхронизацию для некоторых узлов. Тут, если фиксируются просто “тики”, то и обнаружить дополнительный эффект вообще не получится, а сводные данные все узлы-участники вычислят не те, которые могли бы выйти при качественном времени.
Комментировать »
Новый