Данные по радиоканалу передают в виде небольших последовательностей — пакетов. Каждый пакет можно представить как команду (например, «Открой замки»), ответ на команду («Замки открыты») или сообщение («Внимание! Включено зажигание!»).
Статический код
Самые первые сигнализации с радиоканалом имели статический код — каждой команде соответствовал свой командный пакет. Формат пакета выбирал сам пользователь (или установщик), переключая движки внутри брелока или запаивая перемычки.
Поскольку существовало не много вариантов кода, можно было своим брелоком открыть чужую машину с такой же сигнализацией — форматы пакетов совпадали. Конечно, подобное кодирование никакой защиты не обеспечивало — достаточно было один раз прослушать пакет, соответствующий команде «Снять с охраны», чтобы потом, просто повторив его, получить доступ к автомобилю.
Наверное, именно тогда появились первые кодграбберы — технические устройства, предназначенные для перехвата, декодирования и повтора кода. Конечной целью злоумышленника, который пользуется кодграббером, является снятие с охраны «приглянувшегося» автомобиля, а затем кража из салона или угон.
Структура кодграббера похожа на схему брелока сигнализации.
Структура кодграббера
Кодграббер имеет приемник, передатчик, управляющий микроконтроллер, кнопки и средства индикации (светодиоды или ЖКИ). Обычно кодграбберы собираются «на коленке», а схема вставляется в корпус брелока сигнализации — ведь там уже есть и кнопки, и антенна.
Даже для самых первых кодграбберов статический код не представлял особой проблемы, поэтому вскоре все производители сигнализаций перешли на динамическое кодирование.
Динамический код отличается от статического тем, что при каждом нажатии на кнопку формат пакета меняется.
Закономерность этих изменений задается производителем сигнализации и уникальна для каждой пары «сигнализация — брелок». Это означает, что просто повторить записанный пакет нельзя — старые пакеты сигнализация отбрасывает.
На первых порах казалось, что теперь проблема кодграбберов решена, но не тут-то было! Динамическое кодирование не устояло перед новыми изобретениями автомобильных хакеров.
Динамический код
Существуют мифы о динамических кодах. Так, самым известным алгоритмом динамического кодирования является «Keeloq» — разработка американской компании «Microchip». В Интернете давно гуляют слухи о взломе «Kee-loq», однако это не соответствует действительности. Аналитически этот алгоритм до сих пор находится в целости и сохранности — взломаны его неудачные реализации. Например, многие производители автомобилей грешат тем, что используют один и тот же ключ для всех систем, что позволяет создать так называемые «мануфактурные» кодграбберы.
Взламывают динамическое кодирование несколькими способами.
Первый способ: аналитический. В основе его лежат «дыры», которые случайно или сознательно оставили в алгоритме разработчики системы. Пример приведен выше — одинаковые ключи у штатных охранных систем некоторых автомобилей.
Второй способ: замена кода, метод, который в свое время наделал много шума и заставил производителей сигнализаций разнести команды постановки и снятия с охраны на разные кнопки брелока. При использовании этого способа кодграббер записывает несколько посылок брелока пользователя, а потом использует одну из них для снятия автомобиля с охраны.
Многие производители автомобильных систем охраны разрабатывали свои собственные динамические коды, внося различные улучшения. Некоторые из них так до сих пор и не вскрыты и вроде бы могут использоваться в охранных системах. Однако нужно понимать, что ни один динамический код не гарантирует защиту от взлома.
Самым криптостойким и надежным считается диалоговое кодирование, которое требует двустороннего канала связи, то есть наличия приемника и передатчика как в основном модуле, так и в брелоке.
Алгоритм работы диалогового кодирования удобно объяснять на примере персонажей из учебников по криптографии и шифрованию — Алисы и Боба.
Представьте, что Боб заперся в доме и никого не хочет пускать, кроме Алисы. В двери нет глазка, в доме нет окон. После того как Боб услышал стук в дверь, ему нужно проверить, действительно ли там стоит Алиса. Самый лучший способ — это задать вопрос, на который только она знает правильный ответ. Если человек за дверью ответит верно, можно смело открывать.
Точно так же работает и сигнализация с диалоговым кодом:
- 1) при нажатии на кнопку брелок посылает пакет с запросом на авторизацию («стучит в дверь»);
- 2) основной модуль, приняв его, придумывает некий пакет-«загадку», на который может быть только один ответ. «Загадка» передается брелоку по радиоканалу;
- 3) брелок, «разгадав загадку», отвечает пакетом подтверждения;
- 4) основной модуль проверяет ответ и, если он верен, выполняет команду брелока (открывает дверь).
Теперь давайте добавим в нашу историю еще одного персонажа — Еву, которая очень хочет попасть в дом к Бобу. При определенных условиях она может подслушать разговор между Бобом и Алисой и узнать ответ на загадку Боба. Поэтому загадки каждый раз должны быть разными.
В диалоговом кодировании роль загадки играет случайное число, которое генерируется по специальному алгоритму. «Случайность» этого числа должна быть очень высока.
Представим, что вопросы, которые задает Боб, — даты исторических событий. Что будет делать Ева, если узнает об этом? Конечно же, купит учебник истории и после подготовки сумеет пробраться в дом.
Структура диалогового кода
Следовательно, в диалоговом кодировании процесс «разгадывания загадки» должен быть уникальным для каждой системы «сигнализация — брелок». Как же это сделать?
Очень просто — с помощью ключа шифрования, который создается при привязке брелока к системе. То есть Алиса и Боб должны заранее договориться, на какую тему будут задавать вопросы, и никому этого не сообщать.
Обобщенный вид диалогового кода
Итак, для того чтобы реализовать диалоговый код, необходимо обеспечить:
- 1) качественный алгоритм генерации случайных чисел («загадок»);
- 2) уникальный ключ для каждого комплекта сигнализации;
- 3) замену ключа при повторной привязке брелока к сигнализации;
- 4) достаточную длину уникального ключа (защита от перебора).
Если хотя бы один из этих пунктов не соблюдается — код не является криптостойким и может быть вскрыт злоумышленником, имеющим прошивку основного модуля или брелока.
Еще одно важное условие реализации диалогового кодирования — качественный, надежный и быстрый радиоканал, так как даже одно нажатие на кнопку брелока вызывает активный обмен пакетами. Если хотя бы один из пакетов будет потерян, придется повторять всю процедуру заново.
В охранных системах StarLine с диалоговым кодом все эти условия соблюдаются. Современный радиоканал, основанный на однокристальном трансивере, позволяет выполнять диалоговый обмен быстро и четко, а уникальный для каждой системы 128-битный ключ надежно защищает от взлома.
Следует подвести итог: реальной защитой от кодграбберов можно считать только диалоговый код с индивидуальными ключами шифрования 128 бит. Старые системы сигнализаций с динамическим кодом не являются стойкими ко взлому.
Вы знаете, как устроены системы опознавания в военной авиации?
Там используется система «свой — чужой». Если на запрос с земли самолетный ответчик реагирует неправильно, самолет немедленно сбивают! Предложите клиенту установить систему опознавания, как в воздушных машинах!
Алгоритмы шифрования. Схема-памятка