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

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

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

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



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

SpectrumРегулярно говорят и ещё чаще пишут, что, мол, если это GPS-трекер в наручных часах, то это “просто приёмник” – принимает сигнал со спутника, но ничего не передаёт.

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

Впрочем, с современными часами-трекером всё обычно сильно проще, уточнений про практическую схемотехнику даже не требуется: в таких часах присутствуют, как минимум, ANT и Bluetooth, а то и полноценный WiFi-модуль. Так что, до спутника, может, и не добивает (в случае со Starlink – не факт), но точно уже внутри не “только приёмник”.



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

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

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

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

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

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



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

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

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

Image of indicator

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

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

Чтобы прояснить ситуацию – вернёмся к DS1302. В своей основе, это счётчик, требующий наличия внешнего источника синхронных колебаний, то есть – источника частоты. Обычно, к чипу непосредственно подключается кварцевый резонатор, который принято называть просто – “кварц”. Так называемые “часовые кварцы”, – в случае хобби, – это металлические цилиндрики, внутри которых имеется элемент, настроенный на частоту 32 кГц. Особый камертон, в каком-то смысле.

Electronic components

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

И это первый из многих философских моментов, связанных с электронными часами: чип считает импульсы, а время, как феномен, вообще сложно определить, например потому, что его, – времени, – нет, но зато важны схемы часов. Фокальным объектом здесь становится тот самый кварц: он локализован в зеркальном корпусе, а все его свойства чрезвычайно важны, поскольку с помощью кварца можно управлять часами. Более того, кварцы можно добывать из старых часов. Иногда эти добытые кварцы оказываются точнее современных.

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

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

В Сети нетрудно найти множество вариантов схем разной степени продвинутости, как в техническом, так и в идейном плане. Оказывается, этот идейный план сильно глубже, чем принято считать.

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

Основные единицы СИ, после отказа от эталонов-артефактов (например, от рельса-метра и гирьки-килограмма), именно в такой логике и определяются, через структуры более высокого уровня, позволяющие разрешать противоречия. Какие противоречия? Вот такие: основной эталон килограмма разошёлся со своими копиями в значении; что же делать? в какой вариант поверить? Правильный ответ, разрешающий возникающие противоречия, такой: нужно отказаться от эталонов-артефактов и зафиксировать численное значение постоянной Планка. (Что и было проделано.)

Конструирование и сборка электронных часов устанавливает связь со всей этой магией через взаимодействие с фокальными объектами. А это очень важно в условиях Нового средневековья, поскольку даёт возможности для более высокого понимания свойств действительности. Отвлечёмся немного от часов. Рассмотрим другой современный пример. Не просто современный, но даже более свежий, чем электронные часы. Это виниловые грампластинки. Сейчас этот вид носителя программы для генератора аналоговых сигналов переживает бум. Всё потому, что использование музыкальных записей на пластинках требует управления фокусированием внимания – тут тоже есть свои фокальные объекты: нужно купить пластинку, которую можно держать в руках и нести домой; настроить систему для проигрывания, соединив несколько устройств проводами; обеспечить расположение пластинки в проигрывателе и переместить рычаг для начала воспроизведения – каждый шаг требует некоторых ментальных усилий, как минимум, для осознания моментов перемещения того самого фокуса. Конечно, можно ещё и самостоятельно собрать усилители, даже попробовать изготовить грампластинку.

В процессе конструирования часов – не только шагов больше, но больше и путей. Да и некоторые фокальные объекты тут заметно мощнее.

Возьмём управляющий микроконтроллер, если часы – на микроконтроллере. Для микроконтроллера нужно написать программу. А это означает, что есть место для оптимизации алгоритмов: нужно ли читать все параметры из чипа часов или достаточно читать секунды? нужно ли обрабатывать кнопки в цикле или подключить аппаратное прерывание?

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

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

Image of circuit board

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

char codes[4] = {
		0b0001,
		0b0010,
		0b0100,
		0b1000
		}

Но можно и заменить эту конструкцию на битовый сдвиг (1 << n), где n – это значение из {0, 1, 2, 3}. Можно и просто использовать тот факт, что все значения – степени двойки, написав 2^n; однако, при условии реализации компилятором “в лоб”, работать будет медленнее.

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

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

Конструирование энергоэффективных часов требует вдумчивого подхода: так, микроконтроллер может включаться в режим “знакосинтезирования” по нажатию кнопки, опрашивать RTC, рисовать время на индикаторе, а потом опять засыпать, оставляя подсветку индикатора включенной на некоторое время, всё для экономии энергии батареи.

Some timepice

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

Корпус для часов – позволяет привлечь в процесс 3d-принтер и CAD-системы. Отладка схем – позволяет, как минимум, с пользой применить осцилограф и генератор сигналов, как максимум – требует расчёта параметров счётчиков и делителей частоты.

Конструирование часов, в качестве хобби, процесс, затрагивающий много разных технологических плоскостей: расчёт электронных схем, пайка и покраска лаком, 3d-моделирование, программирование и не только. Процесс не просто затрагивает перечисленные плоскости, но позволяет выделить в каждой фокальный объект, – как минимум, один, – и построить объединяющее представление. А с философской точки зрения это представление и есть суть технологии в целом, как явления.



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

NASA сообщает, что марсианский “коптер” Ingenuity, который потерпел аварию 18 января 2024 года, подвела навигационная система. Эта система работала с использованием изображений подстилающей поверхности, которые получала специальная камера (см. картинку). В последнем (а не “крайнем”, да) полёте, при выполнении посадки, слишком однообразное изображение поверхности не позволило программному обеспечению найти достаточно “зацепок”, чтобы корректно посчитать горизонтальную скорость аппарата, а некорректная скорость оказалось слишком большой и робот перевернулся при касании, поломав лопасти.

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

Photo of Navigation Camera

(Фото: NASA/JPL-Caltech)



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

Иногда можно прочитать, что радар работает “со скоростью света”, поэтому очень быстрый и, таким образом, любая РЛС будет всякую созданную руками современного человека “кинетическую” цель точно обнаруживать заранее и определять траекторию с большим запасом по времени, даже если скорость этой самой цели очень большая (ну, конечно, если та цель отражает радиоволны подходящим способом, но сейчас не об этом). Действительно, если рассматривать “сферический” “радар в вакууме”, то покажется, что зондирующий импульс преодолевает, скажем, 30 километров за, примерно, 0.1 мс (за десятую долю миллисекунды); чтобы сбегать в обе стороны – требуется 0.2 мс. Вроде бы, да, очень быстро.

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

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

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

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

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

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



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

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

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

Забавно выглядит уровень исполнения электроники усилителя (см. видео и картинку ниже): то есть, выглядит это действительно так, как самая что ни на есть “ручная работа”, и при этом маркировка на некоторых компонентах спилена (old-school). Огромных электронных ламп не просматривается, реализовано на полупроводниковых элементах и обычных проводках (проводки, похоже, почему-то без экранов).


(Скриншот из видео.)

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


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

А вот предназначение множества микропереключателей, имеющихся на корпусе, в данном видео всё же не раскрыто.

(Найдено на Hackaday.)



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

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

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



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

Цитата из заметки, вышедшей на dxdt.ru в 2014 году (собственно, это почти вся та заметка):

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



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

Продемонстрировано извлечение данных, раскрывающих секретный ключ ECDSA, из аппаратных токенов YubiKey при помощи ПЭМИН (то есть, побочных электромагнитных излучений и наводок). Используется утечка информации о внутреннем состоянии микроконтроллера при выполнении математических операций (алгоритм Евклида при вычислении обратного элемента, которое необходимо в ECDSA). По ссылке выше – очень большое описание, потому что атака сложная, требуется достаточно хитрая аппаратура и нужен не просто физический доступ, но необходимо разобрать токен. (via)

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

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

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



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

Посмотрим на совсем небольшой фрагмент кода.

while(1){
	GP0 = 0;
	GP0 = 1;
}

Этот код предназначен для микроконтроллера PIC12F675 (один из очень популярных и очень простых микроконтроллеров) и, можно считать, написан на C (но здесь это не важно). Некоторые пояснения для тех, кто с микроконтроллерами дела не имел: микроконтроллеры предназначены для управления прочей электроникой и электротехникой, а GP0 здесь – это такой “синтаксический сахар”, а именно – способ задать логическое значение на выводе микроконтроллера при помощи специальной, зарезервированной переменной. PIC12F675 имеет несколько подходящих выводов, все они пронумерованы: GP0..GP5 (GP – это от General Purpose). Строчкам кода, приведённым выше, ещё предшествует несколько строк, настраивающих начальное состояние микроконтроллера и задающих режим работы, это здесь тоже не важно, поскольку речь пойдёт о другом.

Итак, GP0 = 0 – “записывает” в нулевой выход логический ноль, GP0 = 1 – “записывает” логическую единицу. Так что это не совсем “запись переменной”. Вариант while(1) – не менее типовой для мира микроконтроллеров способ задать бесконечный цикл. У микроконтроллера нет развесистой операционной системы. В алгоритмическом смысле, микроконтроллеры, обычно, либо спят, либо работают в бесконечном цикле while(1), иногда – то есть, очень редко, – отвлекаясь на обработку прерываний (в данном случае, считаем, что никаких прерываний и прочих неожиданностей не происходит).

Получается, что приведённый фрагмент последовательно выполняет запись ноля и единицы в логический вывод. Какой сигнал образуется на этом выводе? Пусть логические уровни задаются напряжением 0 вольт – для ноля и +5 вольт – для единицы (на практике, понятно, используется отсечение по порогу, но, опять же, это детали из области микроэлектроники). Нетрудно предположить, что некоторые предложения языка высокого уровня C аппаратурой выполняются пошагово, а значит, на выводе с номером ноль должен появиться ноль, а потом единица, а потом опять ноль, опять единица и так далее. Продолжительность импульса – ключевой момент, о нём как раз и пойдёт речь.

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

Однако, если скомпилировать код, прошить программу в микроконтроллер, запустить его и подключить осциллограф к нужному выводу, то картина получится несколько иная, меандр не очень-то сбалансирован. Вот результат на фото ниже.
Signal graph

(Здесь я использовал компилятор Microchip MPLAB XC8 версии 2.46, в бесплатном варианте.) Единицы получились в четыре раза длиннее нолей (здесь положительное направление, как обычно, вверх). Как так вышло? Вообще, “чисто структурное” понимание исходного кода подразумевает, что while(1) лишь задаёт бесконечный цикл – это доступно компилятору, а как там работают остальные детали, какой алгоритм задуман – компилятор учитывать не может. То есть, текст на ЯВУ задаёт лишь схему итераций. Это логично, но иногда нужно знать ассемблер и то, как работает аппаратура. В данном случае, происходит следующее.

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

loop:
 STATUS 5      // выбор режима адресации, один такт;
 SET_BIT_GP0 0 // установка бита вывода GP0 в ноль, один такт;
 SET_BIT_GP0 1 // установка бита вывода GP0 в единицу, один такт;
 GOTO loop     // переход к началу цикла, два такта;

В данном микроконтроллере GOTO (безусловный переход) занимает два программных такта, а остальные упомянутые команды – по одному. Это означает, что в цикле, между переключениями статуса вывода, будет четыре такта. Здесь перед последней командой (GOTO) вывод установлен в единицу (SET_BIT_GP0 1). Посчитаем, начиная с команды, устанавливающей единицу, такты: 1 (SET_BIT_GP0) + 2 (GOTO) + 1 (STATUS) == 4 такта. После чего вывод устанавливается в ноль на один такт. Интерпретация полностью соответствует картинке с осциллографа. Ниже, для сравнения, соответствующий фрагмент кода уже на ассемблере PIC. Точно в такой код преобразует исходную конструкцию с while(1) компилятор. Для задания состояния логического вывода микроконтроллер использует один бит в специальном регистре, поэтому тут выведены команды, устанавливающие (bsf) и сбрасывающие (bcf) биты.

mainloop: // while(...)
	bcf status, 5 // выбор режима адресации;
	bcf (5), 0    // GP0 = 0 (clear bit);
	bsf (5), 0    // GP0 = 1 (set bit);
	goto mainloop // while(1);

Получается, вывод компилятора тут не соответствовал ожиданиям при элементарном подходе. Но, конечно, догадаться о том, что реализация цикла тоже требует некоторых команд – не так трудно. Вообще же, текст программы ничего не говорит об организации цикла: while(1){…} только описывает его границы, это чисто структурный элемент, если воспринимать реализацию на высоком уровне – на языке высокого уровня.

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

Вернёмся к рисованию меандра программой для микроконтроллера. Хотелось бы получить “ровный” меандр. На языке C для PIC в нашем конкретном случае это можно сделать так.

while(1){
	GPIO = GPIO^0x01;
}

Здесь присваивание значений конкретным выводам заменено на XOR для всего регистра. GPIO – это псевдоним, обозначающий тот самый специальный регистр (массив битов), биты которого соответствуют конкретным логическим выводам. В нашем случае – переключается нулевой вывод (GP0), поэтому изменяется младший бит (бит с индексом нуль, этому соответствует значение маски – 0x01, единица). Логика, стоящая за данным решением, следующая: нужно исключить из тела цикла двойственность состояний. А именно – XOR переключает бит: если там был ноль, то будет единица, если была единица, то станет ноль; тут больше нет записи двух разных значений. Такой вариант кода гораздо лучше соответствует задаче, если бы задачей было получение “ровного, сбалансированного” меандра (заметьте, впрочем, что изначальная задача этой записки – другая: определить, что выводится микроконтроллером и, главное, почему).

Меандр “сбалансировался”, а результат, демонстрируемый осциллографом, поменялся, что и видно на фото экрана ниже.
Signal graph

Однако длительность каждого импульса теперь равна шести тактам. Почему? Потому что компилятор дописал новых команд, опасаясь за целостность общей логики кода: значения в регистрах микроконтроллера могут поменяться вне зависимости от работы АЛУ (арифметико-логического устройства). И это только нам известно, что подобные изменения не предусмотрены ни схемой включения, ни настройками микроконтроллера, а вот компилятор про это догадаться не может, поскольку компилятор не видит сам алгоритм.

Если PIC-ассемблер взять, что называется, в руки, то данный цикл можно оптимизировать. Во-первых, команду выбора схемы адресации можно вынести за пределы цикла, так как выбор зафиксирован. Это сэкономит один такт. Во-вторых, компилятор здесь записывает предложение “GPIO = GPIO^0x01” в три команды: загружает значение специального регистра GPIO в рабочий регистр (в PIC-микроконтроллерах он называется W), выполняет XOR и записывает значение в GPIO. Но нужный XOR можно сделать в одну команду, загрузив заранее, до начала цикла, маску (единицу) в рабочий регистр W и выполняя XOR непосредственно с GPIO. Это позволит сэкономить ещё два такта. А вот два такта, нужных на goto – так сэкономить уже не выйдет (можно, наверное, придумать особенно экзотические методы, но это на общий смысл не повлияет). Естественно, всё это возможно только потому, что задача сводится к преобразованию цикла записи состояний в значение одного логического вывода микроконтроллера, но в итоге – можно добиться трёх тактов на цикл. Соответствующий фрагмент ассемблерного кода приведён ниже.

        bcf     status, 5
        movlw   0x01
mainloop:
        xorwf   (5), 1
        goto    mainloop

Теперь импульсы стали короче в два раза, что и подтверждается очередной фотографией экрана осциллографа.
Signal graph

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



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