Как вы заметили, на данном сайте довольно много устройств – различные сигнализации, контроллеры СКУД - для управления которыми используются ключи iButton (DS1990). В последнее время мне стали задавать такие вопросы – «а зачем использовать эти ключи, они ведь ненадежные, сейчас можно практически за бесценок купить универсальный ключ-вездеход, который может заменить практически любой ключ». Поэтому, давайте посмотрим, откуда появляются такие вопросы и имеют ли они под собой реальную почву.
Несомненно, реклама делает своё дело. Достаточно набрать в поисковике волшебное слово «ключ-вездеход», как будет выдано огромное число сайтов, на которых вам предложат купить «универсальный ключ, который подходит к 90% домофонных замков». Про охранные сигнализации и другие устройства с подобным доступом, скромно умалчивается. А почему? Ведь многие охранные сигнализации выполнены точно на таких же «таблетках» как и определённые типы домофонов. Может, здесь имеет значение моральный аспект и уголовная ответственность, если вы попытаетесь таким ключом снять с охраны сигнализацию какого-либо объекта? Так и «вскрытие» домофона дело не совсем законное. Значит, здесь вопрос в нечто другом. А может это банальный развод и такими ключами вообще ничего нельзя открыть? Но многие утверждают, что данные ключи действительно позволяют открывать домофоны. На основании всех этих рассуждений мы приходим к выводу, что данная проблема существует и она прямо указывает на то, почему возможно использование ключей-вездеходов – это уязвимость определённых типов домофонных систем.
Начнём рассмотрение этой темы с самых основ. Электронный ключ – это постоянное запоминающее устройство, в которое записан уникальный не перезаписываемый код или по-другому – серийный номер ключа. Вероятность того, что может существовать два ключа с одинаковым серийным номером – фактически равна нулю. Впервые такие ключи разработала, запатентовала и стала выпускать американская компания Dallas Semiconductor. Для считывания данных с DS1990A используется 1-проводная шина MicroLAN. DS1990A является подчинённым устройством (слейвом), а мастером является обычно микропроцессор. Питание DS1990A во время обмена данными производится от 1-проводной шины – т.е ПЗУ не имеет собственного источника, а получает питание по той же линии, где идёт передача данных. Что бы не вдаваться в подробности и временные характеристики считывания серийного номера с ключа, отметим только основные этапы:
1. Микроконтроллер (мастер) постоянно сканирует шину на наличие на ней ключа
2. При обнаружении ключ даёт мастеру команду, что на шине присутствует устройство DS1990A и оно готово к обмену.
3. Обнаружив на шине ключ и его готовность к работе, микроконтроллер передает команду чтения ПЗУ.
4. Приняв команду чтения ПЗУ, DS1990A передает 8-битный код типа устройства 48-битный серийный номер и 8-битную контрольную сумму.
5. Получив серийный номер, микроконтроллер сравнивает его с номерами, хранящимися в памяти и, если он соответствует одному из серийных номеров ключей, которые были предварительно записаны, выдаёт нужную команду исполнительному устройству – например, открывает электронный замок домофона.
Как видите, серийный номер является 48-битным числом и случайно подобрать его невозможно. Но именно это число и нужно знать, что бы домофонная система восприняла ключ как свой. Что тут можно предпринять? Допустим, последовательно выдавать в линию все комбинации 48-битных чисел. Представляете, сколько времени это займёт? Правда, иногда для экономии памяти (что бы записать как можно большее количество ключей) используют не всё 48-битное число, а только его часть. Но тем не менее, проще от этого не становиться. Давайте проведём расчёт. Возьмём «урезанное» до 24 бит число. Это получается 16 777 215 различных комбинацией нулей и единичек. Далее учитываем то, что после каждого считывания, как правило, микроконтроллер устанавливает задержку не менее 1 секунды на повторное считывание. Для простоты расчётов собственно самим временем считывания можно пренебречь и считать, что мы последовательно выдаем в линию данные с интервалом в 1 секунду. Итак, для того, что бы перебрать все 16 777 215 нам потребуется 16 777 215 секунд. Или, что бы более наглядно – 195 суток. Но это ещё не всё. Обычно, после нескольких считываний неправильных ключей, микроконтроллер блокирует считывание на минуту. Значит, подобрать необходимую комбинацию даже 24-битного числа просто нереально.
Исходя из изложенного выше, метод перебора в принципе неприемлем. А что если взять «прописанный» в системе ключ и скопировать его в отдельную память, типа такой как в DS1990? Да, такой путь вполне возможен. Существуют специальные «болванки», например, ТМ2004, которые имеют внешний вид точно такой же, как DS1990, но в их память ничего не записано. С помощью специального устройства, которое называется дубликатором ключей, с «прописанного» ключа считывается серийный номер, который затем прописывается в ТМ2004 и будет домофонной системой восприниматься как «свой». Т.е он становиться «клоном» ключа, с которого был считан серийный номер. Правда, тут тоже есть определённые моменты, некоторые устройства на DS1990 отсекают «клонов», но это уже зависит от того, как написана управляющая программа микроконтроллера, поэтому нет смысла на этом заострять внимание.
Существуют так же «универсальные ключи», в которые можно записать много серийных номеров - т.е создать "образ" множества ключей. В отличие от «болванок» ТМ2004, они представляют собой микроконтроллерное устройство - эмулятор, в память которого заносятся дублируемые ключи. Как правило, такие эмуляторы представляют собой печатную плату, зачастую под размер ключа, на которой установлен микроконтроллер и его "обвязка".
Но ведь для того, что бы записать в «болванку» или микроконтроллерный эмулятор нужный ключ, его нужно предварительно считать с оригинала. А нам предлагают универсальный ключ-вездеход, в который ну никак не могли записать определённые серийные номера. Может, они записали туда все комбинации? Это уже из области фантастики, так для этого требуется огромный объём памяти и, кроме того, мы показали выше, сколько времени потребуется на подбор нужного кода. Так в чём же дело, как могут работать ключи – вездеходы? А получается вот что:
Некоторые типы домофонов, проверяя считанный с ключа код и сверяя его со своей памятью, просматривают всю память, в том числе и свободные от записей области. Свободные области памяти существуют тогда, когда имеется резерв для записи в домофон новых ключей. В них записаны абсолютно одинаковые нулевые значения 00h или FFh. Значит, достаточно взять ту же «болванку» ТМ2004, записать в неё все значения FFh (или 00h) и вот готов универсальный ключ-вездеход. Так как ячейки свободной памяти могут иметь два значения (00h или FFh) иногда предлагается два ключа, в которые записаны соответствующие значения. Получается, что возможность использования ключей-вездеходов – не более чем программная уязвимость некоторых типов домофонных систем, которая устраняется элементарно просто – для этого или вся память домофона должна быть заполнена серийными номерами ключей или, что более правильно – в свободные ячейки памяти должны быть записаны случайные значения. Иначе, если там будут нулевые ячейки, открыть замок можно будет даже замыкая/размыкая считывающее устройство, вообще без всякого "вездехода" – я это неоднократно уже проверял при экспериментах с электронными ключами. При разработке устройств доступа с использованием ключей DS1990, программист должен предусмотреть возможность записи в свободные области памяти случайных значений. Это позволит полностью защитить разрабатываемую систему.
В настоящее время всё меньше остаётся домофонных систем, где присутствует эта уязвимость, а более ранние версии дорабатываются изменением программного кода микроконтроллера. Это в основном домофоны «Визит», «Метаком» и некоторые «Цифрал». В домофонах «Кейман», «Элтис» этой уязвимости нет вообще. Так что всё меньше остаётся домофонов, которые можно открыть ключом – вездеходом. Пройдёт ещё пару лет и предложений таких ключей вообще не останется, т.к. они станут абсолютно бесполезными.
Подводя итог, я отвечу на вопрос, с которого и началась эта статья – "почему я продолжаю использовать ключи DS1990?" Как мы с вами убедились, проблема в ненадёжности этих ключей абсолютно надуманная и существует только для домофонных систем с ранними версиями программного обеспечения. Все вопросы, критические замечания, дополнения, просьба оставлять в комментариях.
Андрей, большое Вам спасибо за комментарий и абсолютно правильное добавление про CRC. Я, честно говоря, в статье упустил вопрос подсчета контрольной суммы в электронных ключах. Но в любом случае, если все значения нулевые, то и CRC будет равно нулю.
Полностью согласен с автором статьи. От себя добавлю , что не обязательно делать так "вся память домофона должна быть заполнена серийными номерами ключей или, что более правильно – в свободные ячейки памяти должны быть записаны случайные значения". Иногда требуется удалить код ключа из памяти замка. При этом в памяти образуется участок заполненный $FF. Но это не страшно. Программу нужно составить так, чтобы она подсчитывала CRC код первых 7 байт принятого кода. Во-первых, это полезно учитывая специфический аппаратный интерфейс. Во- вторых, у последовательности из 7 байт, составленных из $FF, CRC не будет равен $FF. Таким образом код из 8 $FF не пройдёт через данный своеобразный фильтр. Если же змулятор выдаст код из 7 $FF и реального CRC для этой последовательности, равный $14, то этот код пройдёт через фильтр. Но этот код не совпадёт с последовательностями $FF, которые образовались на месте стёртых ключей. При этом, конечно же, в память нужно записывать полностью весь код таблетки.