Новая угроза: «адаптирующийся» брелок
Нет ничего более глупого, чем пытаться понять сложные вещи по аналогии.
Каждый установщик рано или поздно сталкивается с необходимостью объяснить «по-простому, на пальцах», как же работает алгоритм Keeloq. Особенно актуально это стало сейчас, при появлении нового устройства интеллектуального взлома автомобильных охран, так называемого «адаптирующегося брелка» (название не самое удачное, вернее, как мы увидим ниже, совсем неудачное). Несмотря на эпиграф, давайте попытаемся осознать, в чем состоит проблема. Для этого придется сделать несколько существенных упрощений. Система кодирования Keeloq. С нее и начнем. В случае применения в охранной системе «стандартного Keeloq'а», передаваемая в эфир кодовая комбинация (при нажатии на любую кнопку) выглядит следующим образом:
Два слова о счетчике нажатия. Для системы Keeloq нажатие на любую кнопку увеличивает его на единицу. Если он был «x», то следующее нажатие будет пронумеровано как «x+1», затем «x+2» и т.д. Получая команду из эфира, главный модуль сигнализации проверяет номер брелка. Если номер не совпадает с заранее записанным в память модуля, дальнейшая обработка сигнала прекращается. Если совпадает, производится попытка дешифровки. В этом случае дополнительная информация позволяет проверить, что нажат именно брелок хозяина, а не какой-то другой со случайно совпавшим номером. Наконец, производится проверка счетчика нажатия. Если счетчик больше, чем зафиксировано в памяти системы, команда считается правильной и выполняется (в соответствии с номером нажатой кнопки). Если меньше или не изменился возможно, что воспроизводится ранее записанная простейшим граббером команда. Такая команда отвергается. Основной секрет состоит в том, как же зашифрована «шифрованная часть». Сразу скажем, что это весьма сложная функция «F», включающая в себя собственно счетчик нажатия «x», номер брелка «C», номер кнопки «B» и основной секрет (пароль) производителя «A» (в случае применения стандартного Keeloqа). Но что нам эти сложности? Давайте считать, что эта функция очень простая, например обычный квадратный трехчлен! Итак: F=Ax2+Bx+C Сразу становится понятно, как производится дешифровка в главном модуле. Узнав из эфира номер брелка «С», номер кнопки «B» и заранее зная Пароль «А» легко вычислить счетчик «x». Давайте не обращать внимания, что ответов получилось два мы всегда можем считать верным тот, который больше. Естественно, не зная Пароля «А», мы не сможем вычислить «x». Этап первый: вычисление пароля. Если посмотреть на нашу функцию чуть внимательнее, то данный алгоритм легко поддается дешифровке. Достаточно лишь записать 2 последовательные команды:
F1=Ax2+Bx+C
Весьма ясно, как взломать пароль. В нашем случае достаточно записать две последовательные команды брелка, решить систему уравнений и получить пароль производителя «А». Для системы другого производителя другое решение, другой пароль. И так далее. Все что осталось это занести список паролей в чудо-устройство под названием «адаптирующийся брелок» вуаля! Задача решена.
Этап второй: применение «адаптирующегося брелка». Заметьте, что он не является в истинном смысле адаптирующимся, а он заранее адаптирован под некоторые уже вскрытые системы. Если это для Вас пока не очевидно, дочитайте до конца. Станет чуть понятнее, почему. И еще. Самое время заменить его название в соответствии с его предназначением. Назовем его лучше «граббером для некоторых заранее взломанных систем с плавающим кодом». Еще короче: граббер (но не простой, как для систем с фиксированным кодом, а высокоинтеллектуальный). Последний этап: угон. Как мы помним, хозяин и злоумышленник расстались. Но злоумышленник знает, что автомобиль марки «ХХХ» гос. номер у000уу00RUS оснащен вскрытой сигнализацией, записанной в ячейку номер Z граббера. В зависимости от условий автомобиль может быть угнан немедленно или через неделю. Или через год. До этого момента хозяин мог пользоваться автомобилем, нажимать на кнопки брелка. Счетчик нажатия, записанный в память, увеличился, поэтому и граббер должен передать гарантированно будущий код (например, со счетчиком x+15, т.е. отключающую охрану команду F15). Не получилось попробовать F30 или F60. Или просто запустить перебор пока счетчик нажатия граббера не догонит счетчик нажатия системы. Поехали! Комментарии не требуются.
Отложенный комментарий к первому этапу (вычисление пароля). Пожалуйста, не пугайтесь видимой простоты. Это в нашем случае, когда функция шифрования примитивно проста, подбор пароля был произведен «в две строчки», чисто, решением системы двух уравнений.
Вскрытие пароля можно произвести, используя относительно недорогое оборудование. Записав подряд несколько кодовых комбинаций F1, F2, F3, F4, F5 начинаем простой перебор. Берем номер брелка, шифруем его паролем «00000001», сравниваем код с записанным. Не получилось, применяем пароль «00000002». И так далее до «ZZZZZZZZ». Несколько комбинаций понадобится как для ускорения процедуры подбора, так и для проверки подобранного пароля. Знание системы кодирования позволит нам слегка облегчить задачу:
Еще раз. Означает ли это, что «Keeloq вскрывается»? Данное утверждение абсолютно бессмысленно. Keeloq это система кодирования (принцип шифрования). Ее не надо вскрывать: она и так опубликована в открытой печати. «Вскрываются» всегда конкретные бренды. Это происходит в том случае, когда разработчики охранных систем ленятся усложнить доступ к паролям (программно или организационно).
Что же делать? Во-первых, знать методику взлома и соответственно выбирать пароль. Простой расчет показывает, что замена пароля на псевдослучайный, когда используются не только цифро-буквенные комбинации, а все разрешенные символы (напомним, их 256), повышает крипкостойкость шифрования в миллионы раз. Ситуация моментально возвращается на исходную позицию, и для подбора пароля понадобится вполне достаточное время, чтобы плюнуть на него и попытаться разгадать другой. А что же дальше? Неужели на этом закончится извечное противостояние брони и снаряда? Разумеется, нет! Теперь при применении «полного Keeloqа» всякий раз интеллектуальный угон автомобиля должен будет происходить индивидуально, с подбором конкретного пароля. Соответствующие программы (пока еще?) не написаны. Но точки приложения усилий известны. Это фиксированный формат передачи данных (см. выше раздел «система кодирования Keeloq»), в котором заранее известно, где что расположено и присутствует открытая часть, на которую можно опереться при расшифровке. Кроме того, даже «полный Keeloq» может не выдержать атаки с применением «замещающего граббера». Стоит заметить, что атаки с помощью такого устройства весьма заметны пользователю; о том, как с ними бороться, мы писали в статье проблемы одностороннего доступа. При этом разработчикам нельзя утешаться тем, что «замещающий граббер» обманывает не систему кодирования, а человека, пользующегося брелком. Итог один угон автомобиля. Можно ли верить нам? Проблемы, связанные с возможными покушениями на систему кодирования Keeloq мы осознали на рубеже веков. В 2001 году мы намекнули об их существовании. В 2002 году было разработано новое семейство Excellent evolution2, достаточно защищенное от этих (тогда еще во многом потенциальных) угроз. Мы решительно отказались от стандартных микросхем кодирования HCS-xxx, и перешли на специальные процессоры. В попытке объяснить наш подход мы внятно и публично объявили обо всех проблемах в начале 2003 года. Долгое время нас упрекали, что все это выдумки, а мы напрасно переусложняем систему кодирования. Похоже, мы оказались правы? Magic Ring,
декабрь 2005 г. Продолжение... |