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