Приветствую всех! Несколько месяцев назад я уже выпускал пост про то, как работали магнитные ключи «Факториал». Сейчас же мы попробуем разобраться с более новой их разработкой.



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

Суть такова


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

image

Вот, например, панель Метаком МК20-ТМ4Е. Помимо стандартных iButton, поддерживались также проприетарные токовые ключи Метаком ТМ2002. В своё время такая панель стояла на моём собственном подъезде, и я даже помню, что на тот момент, когда её поставили (точно уже неизвестно, ориентировочно — 2007-2009 год), сделать в моём городе дубликат ключа для неё было очень сложно, так как тогдашние лавочки по копированию умели делать только обычные DS1990A или магнитные для «Факториала», а мне не повезло обзавестись фирменными ТМ2002.



Цифрал тоже не остался в стороне и выкатил свои ключи DC2000. Хотя по протоколу они чем-то напоминают Метаком ТМ2002, они между собой несовместимы. На фото панель Cyfral CCD2094/TC, уже в двухтысячном году научившаяся «брать» такие ключи.



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



Но можно ли сделать ключ, который бы вообще нельзя было скопировать? Скажем, потому что в копировании этого самого ключа нет ни малейшего смысла? Именно что-то подобное и попытался сделать челябинский «Факториал».

Динамические ключи


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

Что было после магнитных ключей?


Наигравшись с пластиковыми заготовками и датчиками Холла, Факториал выпустил модели с более новыми типами ключей.



Версия с ТМ-ключами почему-то не прижилась, даже в нашем городе встретить её весьма сложно, тогда как магнитные экземпляры всё так же успешно работают.



А вот и предмет нашего обзора — панель с бесконтактным ключом.



С появлением таких панелей начали выпускаться и контроллеры доступа с такими ключами. Отдельно стоящих считывателей магнитных ключей «Факториал» не выпускал, вместо них чаще всего ставились просто панели без коммутаторов. Увы, такой считыватель найти мне пока не удалось.



Буквально год-другой назад появились и IP-домофоны. Такой панели у меня нет, так что подробно рассмотреть всё это не выйдет. Но ключи здесь используются точно такие же (проверялось прикладыванием заготовки).





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

Обзор оборудования


Появившиеся в начале десятых годов бесконтактные «Факториалы» вызвали серьёзное бурление в сообществе по ключам. Ещё бы — ключи крайне неохотно поддавались копированию. Дубликаты либо не открывали вообще, либо открывали, но выходило, что после пары открытий оригинал немедленно и бесповоротно дох. Совсем везучим удавалось запороть сразу оба ключа. Пытаясь остановить непреднамеренную порчу ключей, Факториал даже пробовал расклеить объявления с запретом открывать чем-либо кроме штатной метки.
Тогда кто-то даже хотел раздобыть такую панель на опыты, чтобы наконец разобраться, как же оно работает. Но детального описания никто так и не увидел. Поэтому самое время восполнить это упущение.



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



Обратная сторона. Электроника закрыта двумя металлическими крышками.



Откручиваем их. Плата очень похожа на таковую у магнитного. Отличие в том, что на ней также присутствует микросхема EEPROM, в которой записаны ключи. Настройки же, как и в случае с магнитным, хранятся в памяти контроллера.



Снимем плату. Под ней находится блок кнопок. Судя по пайке, его меняли в кустарных условиях — заводская плата такой неаккуратной не выглядит. Выводы кнопок с обратной стороны не пропаяны.



Сами кнопки. Судя по луже канифоли, кнопка вызова впоследствии тоже перепаивалась…



А вот и обратная сторона платы. Всё тот же контроллер ATMega16, всё те же индикаторы, всё то же самое, что мы видели внутри магнитного. Наибольший интерес сейчас представляет цепь RFID-считывателя. Основан он на некой микросхеме в корпусе QFN. После долгого рассматривания платы под разными углами и под разным освещением маркировку таки удалось прочитать — это чип TRF7961 от Texas Instruments. Что это такое — поговорим чуть позже.



Считыватель в виде вклеенной в корпус платы. На ней расположены печатная катушка и резонансный конденсатор. Всё вместе это образует колебательный контур на 13,56 МГц, на частоте которого и работают используемые тут метки. От считывателя к плате идёт коаксиальный кабель, тонкий белый провод питает красный светодиод подсветки.









Штатный блок питания. Внутри трансформатор с двумя обмотками на пятнадцать вольт. На холостом ходу каждая из обмоток выдаёт по семнадцать вольт.

Ключи


Что обычно представляется при упоминании RFID на 13,56 МГц? Самым популярным стандартом на такой частоте является Mifare. Он же является частью ISO 14443, куда также входят метки NTAG и платёжные карты.



Здесь же используются метки Tag-It от Texas Instruments. Хотя они работают на той же частоте, они относятся к другому (к слову, не менее обширному) стандарту — ISO 15693. На скриншоте характеристики типичных таких меток. Так же, как и у Mifare, у этих меток есть неизменяемый UID и пользовательская память. Именно для работы с такими метками в домофоне и установлен чип от TI.

TI-256


Среди всего разнообразия Tag-It нас интересуют метки TI-256. Именно такие и используются в предмете нашего обзора.



Каждая такая метка имеет двести пятьдесят шесть бит пользовательской памяти, а также неизменяемый UID. Память поделена на восемь блоков по четыре байта, на каждый блок может быть установлен пароль. Tag-It имеет также ряд команд, свойственных именно меткам производства Texas Instruments, но конкретно данная модель их не поддерживает, поэтому в данной статье рассматриваться всё это не будет.

Ещё про ключи






Оригинальных ключей найти мне не удалось. Так что показываю их фотографии из интернета.



На просторах удалось найти аналоги, использующие в себе те же самые метки Tag-It. По виду они ничем не отличаются от заготовок EM-Marine, но на самом деле это, конечно, не они. Также на фото видна оптическая заготовка.

Считыватель


Для полноценных экспериментов нужен считыватель, который в состоянии работать с метками типа ISO 15693. И всё не так просто, как может показаться: распространённые экземпляры обычно «берут» только Mifare. Со встраиваемыми всё аналогично: «народный» MFRC522, что идёт в комплекте практически с каждым набором для Arduino, а также несколько более продвинутый PN532 ISO 15693 тоже не видят.



Но выход таки есть: PN5180. Экземпляр этот является не совсем дешёвым удовольствием, но прекрасно работает как с ISO 14443, так и с ISO 15693, что нам и надо.



А вот схема подключения к Arduino (со страницы библиотеки). Модуль для работы требует два напряжения питания (5 В для радиочастотных цепей и 3,3 В для цифровых), а также согласования уровней. Хотя существуют схемы с прямым подключением, делать так не рекомендую, так как есть риск того, что модуль сдохнет.
Проще всего будет использовать ESP32, STM32 или любой другой МК с уровнями 3,3 В.
Я подключил к ESP32, чтобы не использовать преобразование уровней. Программа получилась вот такая:

#include <PN5180.h>
#include <PN5180ISO15693.h>

#define PN5180_NSS  12
#define PN5180_BUSY 13
#define PN5180_RST  14

PN5180ISO15693 nfc(PN5180_NSS, PN5180_BUSY, PN5180_RST);

void setup() {
  Serial.begin(115200);
  nfc.begin();
  Serial.println("PN5180 init");
  nfc.reset();
  Serial.println("PN5180 reset");
  nfc.setupRF();
  Serial.println("RF is turned on!");
}

void loop() {

  uint8_t uid[8];
  Serial.print("\r\nPut the card\r\n");
  ISO15693ErrorCode rc = nfc.getInventory(uid);
  while (rc != ISO15693_EC_OK) rc = nfc.getInventory(uid);
  uint8_t readBuffer[4];
  Serial.print("UID: ");
  for(int i = 0; i < 8; i++) {
    if (uid[i] < 16) Serial.print("0");
    Serial.print(uid[i], HEX); 
    Serial.print(' ');
  }
  Serial.print('\n');
  for (int no = 0; no < 8; no++) {
    rc = nfc.readSingleBlock(uid, no, readBuffer, 4);
    if (ISO15693_EC_OK != rc) {
      Serial.print(F("Error in readSingleBlock #"));
      Serial.print(no);
      Serial.print(": ");
      Serial.println(nfc.strerror(rc));
      return;
    }
    Serial.print(F("Read block #"));
    Serial.print(no);
    Serial.print(": ");
    for (int i = 0; i < 4; i++) {
      if (readBuffer[i] < 16) Serial.print("0");
      Serial.print(readBuffer[i], HEX);
      Serial.print(" ");
    }
    Serial.print(" ");
    for (int i = 0; i < 4; i++) {
      if (isprint(readBuffer[i])) {
        Serial.print((char)readBuffer[i]);
      }
      else Serial.print(".");
    }
    Serial.println();
  }
  Serial.print("\r\nRevove card\r\n");
  while (rc == ISO15693_EC_OK) rc = nfc.getInventory(uid);
}


Записываем ключ


Ну что же, всё необходимое у нас есть, а это значит, что можно начинать эксперименты. Итак, чтобы прописать ключ в панели, необходимо сделать примерно следующее:

  1. Нажатием кнопки с обратной стороны или удержанием любой цифры и последующим вводом пароля войти в сервисное меню.
  2. Выбрать режим записи ключей, нажав «8» и «Вызов».
  3. Выбрать номер квартиры, на которую будет прописан ключ.
  4. Выбрать номер ячейки (от 1 до 9).
  5. Приложить ключ.
  6. Нажать «Вызов» для возврата к выбору квартиры или «Сброс» для выхода.

Вживую это выглядит примерно так.

Память


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

87 60 72 A6 91 0C

Поскольку UID каждой метки неизменен, то логично, что код ключа хранится в пользовательской памяти.
Считываем сам ключ:

UID: 87 60 72 A6 41 C1 07 E0 
Read block #0: FF FF FF A6  ....
Read block #1: A3 1F 14 A6  ....
Read block #2: 00 00 00 A6  ....
Read block #3: 00 00 00 A6  ....
Read block #4: 00 00 00 A6  ....
Read block #5: 00 00 00 A6  ....
Read block #6: D0 D1 1F A6  ....
Read block #7: 11 68 91 A6  .h..

Как можно видеть, первые четыре байта записи о ключе в EEPROM — старшие четыре байта UID, оставшиеся два отведены под тот самый счётчик.
Теперь проведём серию прикладываний, после каждого раза будем считывать память и ключ.

Попытка №1
Память: 87 60 72 A6 B2 0C

Ключ: 
UID: 87 60 72 A6 41 C1 07 E0 
Read block #0: FF FF FF A6  ....
Read block #1: A3 1F 14 A6  ....
Read block #2: 00 00 00 A6  ....
Read block #3: 00 00 00 A6  ....
Read block #4: 00 00 00 A6  ....
Read block #5: 00 00 00 A6  ....
Read block #6: D0 D1 1F A6  ....
Read block #7: 4F 4D FF A6  OM..

Попытка №2
Память: 87 60 72 A6 F6 0C

Ключ:
UID: 87 60 72 A6 41 C1 07 E0 
Read block #0: FF FF FF A6  ....
Read block #1: A3 1F 14 A6  ....
Read block #2: 00 00 00 A6  ....
Read block #3: 00 00 00 A6  ....
Read block #4: 00 00 00 A6  ....
Read block #5: 00 00 00 A6  ....
Read block #6: D0 D1 1F A6  ....
Read block #7: 11 6B BD A6  .k..

Попытка №3
Память: 87 60 72 A6 F4 0C

Ключ:
UID: 87 60 72 A6 41 C1 07 E0 
Read block #0: FF FF FF A6  ....
Read block #1: A3 1F 14 A6  ....
Read block #2: 00 00 00 A6  ....
Read block #3: 00 00 00 A6  ....
Read block #4: 00 00 00 A6  ....
Read block #5: 00 00 00 A6  ....
Read block #6: D0 D1 1F A6  ....
Read block #7: CB 93 EA A6  ....

Попытка №4
Память: 87 60 72 A6 F7 0C

Ключ:
UID: 87 60 72 A6 41 C1 07 E0 
Read block #0: FF FF FF A6  ....
Read block #1: A3 1F 14 A6  ....
Read block #2: 00 00 00 A6  ....
Read block #3: 00 00 00 A6  ....
Read block #4: 00 00 00 A6  ....
Read block #5: 00 00 00 A6  ....
Read block #6: D0 D1 1F A6  ....
Read block #7: 95 57 B6 A6  .W..

Попытка №5
Память: 87 60 72 A6 EF 0C

Ключ:
UID: 87 60 72 A6 41 C1 07 E0 
Read block #0: FF FF FF A6  ....
Read block #1: A3 1F 14 A6  ....
Read block #2: 00 00 00 A6  ....
Read block #3: 00 00 00 A6  ....
Read block #4: 00 00 00 A6  ....
Read block #5: 00 00 00 A6  ....
Read block #6: D0 D1 1F A6  ....
Read block #7: 13 3D DB A6  .=..

Как видно, каждый раз меняется предпоследний байт записи о ключе в EEPROM (причём последний всегда равен 0Ch). В ключе же перезаписывается седьмой блок, содержимое нулевого, первого и шестого остаётся неизменным. При этом заметно, что эти значения — не являются просто счётчиком, а формируются по некоторому алгоритму, причём данные в ключе и в памяти не совпадают.

Как быстро сдохнет оригинал?


Попробуем узнать, сколько же открытий копией проживёт оригинал, прежде чем станет недействительным.

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

Если же прикладывать оригинал и копию попеременно, то гибнут оба ключа, то есть добиться одновременной работы не выйдет ни при каких условиях.

Так можно ли всё-таки копировать эти ключи?


На самом деле — да. Но только при одном условии: оригинал после копирования использоваться не будет.



Первые бесконтактные ключи «Факториала» имели крайне неудачную конструкцию из хрупкого пластика, отчего часто трескались и рассыпались. Если перезаписать такой ключ на другую заготовку, то он вполне будет открывать, просто сломанный оригинал работать уже не будет.

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

Ресурс памяти


Многие заинтересуются: а не износится ли EEPROM от постоянных открываний? Производитель заявляет около ста тысяч циклов перезаписи (что для метки, что для EEPROM), то есть если прикладывать ключ десять раз в день, то памяти хватит на двадцать семь лет, что вполне приемлемо.

Вот как-то так


Как можно заметить, ключи «Факториала» весьма хорошо защищены. Даже если бы алгоритм был известен, сделать дубликат ключа всё равно оставалось бы невозможным. Помимо простой перезаписи блоков существуют системы на базе Mifare с динамическим ключом шифрования, так что можно с уверенностью сказать, что технология эта оказалась вполне удачной. Более того, на бесконтактный «Факториал» нельзя записать и универсальный ключ (у меня нет сведений о том, есть ли тут бэкдоры в виде жёстко прописанных кодов), так как по сути метка привязывается к панели и при попытке записать её на другой домофон она начнёт открывать его, тогда как предыдущий видеть её перестанет. Можно с уверенностью сказать, что на момент своего появления «Факториал» был едва ли не самым защищённым среди всех подобных устройств.

Такие дела.

Ссылки




Другие мои посты про ключи, домофоны, считыватели и прочие подобные устройства


Комментарии (29)


  1. dlinyj
    02.06.2023 08:26
    +5

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


    1. MaFrance351 Автор
      02.06.2023 08:26
      +1

      Всё так и есть.
      У самого на подъезде такого никогда не было, но знаю, что надо оставить им заявку, и они потом приедут и пропишут ключ.
      С другой стороны, полностью исключается возможность прохода по заранее прописанным универсальным ключам (даже если и есть какие-то жёстко забитые коды, то вряд ли они известны кому попало, универсальных ключей для таких устройств я нигде не видел).


    1. Strangeekb
      02.06.2023 08:26
      +1

      Это и есть основная проблема, Шаражка Факториал активно ставит эти поделки, но есть один офис в екб (думаю в других городах не лучше), и стоимость ключа в связи с этим могут ставить такую какую хотят. Отсюда никакого сервиса и монополия. Прежде чем поставить не забудьте почитать отзывы про Факториал.


      1. MaFrance351 Автор
        02.06.2023 08:26
        +1

        В Челябинске аналогично. Впрочем, несмотря на откровенно конские цены на обслуживание и вот эти нюансы с ключами, не могу сказать, что это худшая компания из возможных. Тот же печально известный в узких кругах "Цифрал-Сервис" намного отстойнее.


  1. ionicman
    02.06.2023 08:26
    +3

    Интересно вот что - заказывал я как-то таких ключей с десяток в их конторе, мне их сразу выдали и я поехал с ними на объект - они мне сказали, что работать они будут СРАЗУ. Видимо есть комбинация данных, которая интерпретируется как "инициализировать и добавить ключ" - иначе они бы не наездились. Вот бы ее выяснить...


    1. MaFrance351 Автор
      02.06.2023 08:26
      +1

      Интересно ещё, как оно работает. По серийному номеру панели? Или если попробовать открыть другой подъезд, то всё тоже прокатит?


      1. ionicman
        02.06.2023 08:26
        +2

        Скорее всего да, некий серийник и номер квартиры для бинда.


        1. MaFrance351 Автор
          02.06.2023 08:26
          +1

          Тогда интересно, как именно этот номер получается. Так как сама панель вообще без маркировки, в меню такого пункта тоже нет.


          1. ionicman
            02.06.2023 08:26
            +3

            Думаю, что он в EEPROM у атмеги, прошивается при производстве, либо вычисляется находу из каких-то прошитых данных, либо берется из SRAMа - т.к. проще прошивку шить одну и туже, а динамику туда засовывать - например дату производства + номер партии + номер устройства в партии - вот и серийник.

            Но, вангую, что там все лок-биты подняты и так просто ничего не считать.

            Без доступа к прошивке, хотя-бы в бинаре очень сложно будет отреверсить.

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


            1. MaFrance351 Автор
              02.06.2023 08:26

              Просто интересно, как его считывать и сопоставлять с адресом. Просто к панели приложена бумажка с ним?
              А то программатор на монтаж таскать и каждый раз считывать номер — не верится как-то.


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


              1. ionicman
                02.06.2023 08:26

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


                1. MaFrance351 Автор
                  02.06.2023 08:26

                  Вот тоже думаю. Похоже, он идёт в документации к панели. И, скорее всего, прописан в EEPROM самого МК.


            1. MaFrance351 Автор
              02.06.2023 08:26

              На магнитные Факториалы некое описание в открытом доступе есть тут: https://domofon.glitch.me/doc/i.html?id=faktorial


              Отличия такие: в магнитном ПР+5, ПР+10 не делают ничего, ПР+11 — заводские установки частот вызова, числа больше 17 ничего не делают.
              Тут так:
              ПР+5 — показывает "OFF", затем "C01", предлагает ввести что-то.
              ПР+10 — загорается "SurE".
              ПР+11 — загорается "tESt" и тут же выкидывает обратно в ПР.
              ПР+18 — загорается " In ".
              ПР+19 — загорается "Ct".
              ПР+20 — загорается "bySy"
              ПР+21 — загорается "OFF", затем предлагается ввести нечто из трёх цифр.


  1. ionicman
    02.06.2023 08:26
    +1

    Подскажите, а микруха под круглой дырой - уж не чип-ли памяти? Если да - то понятно где все хранится, в том числе и серийник устройства. И понятно,для чего сделан быстрый доступ к нему.


    1. MaFrance351 Автор
      02.06.2023 08:26

      В памяти хранятся только коды ключей.


      1. ionicman
        02.06.2023 08:26
        +1

        Ну значит тогда остается память в самом контроллере. Жаль.


        1. MaFrance351 Автор
          02.06.2023 08:26

          Увы.
          Мне кажется, эти отверстия — просто технологические, чтобы уже собранную панель прошивать через специальный разъём и комплектовать памятью.


          1. ionicman
            02.06.2023 08:26

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


            1. MaFrance351 Автор
              02.06.2023 08:26
              +1

              Как выяснилось, никакой CRC в самом МК нет. Я без проблем перепрошивал память более старыми дампами, когда проверял, насколько большой может быть разница числа использований между копией и оригиналом.


            1. MaFrance351 Автор
              02.06.2023 08:26
              +1

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


  1. event1
    02.06.2023 08:26

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


    1. MaFrance351 Автор
      02.06.2023 08:26

      Возможно.
      Но для этого иметь панель "на опыты" недостаточно, надо ещё и алгоритм, которого нет. Вообще, у меня даже инструкции от панели нет, хыхых.


      Без алгоритма можно попробовать сделать "активный" ключ, который бы представлял из себя эмулятор метки, после каждого считывания синхронизирующий данные со всеми другими экземплярами. Но это долго, дорого и муторно.


      Самое интересное — для чего служит неизменный байт в конце записи о ключе в EEPROM и как из четырёх "рабочих" байт ключа и ещё нескольких неизменных получается один-единственный в памяти. Увы, без инсайдов со стороны тех, кто имеет доступ к разработкам "Факториала", это так просто не узнать...


      1. event1
        02.06.2023 08:26
        +1

        Без алгоритма можно попробовать сделать "активный" ключ, который бы представлял из себя эмулятор метки, после каждого считывания синхронизирующий данные со всеми другими экземплярами. Но это долго, дорого и муторно.

        Если в качестве ключа использовать телефон (у NFC, вроде, те же частоты), то можно синхронизировать в облако. Получается, довольно просто приложение.

        Самое интересное — для чего служит неизменный байт в конце записи о ключе в EEPROM

        Контрольная сумма? А если этот же ключ зарегистрировать ещё раз, будет ли у него та же последовательность в первых байтах и будет ли последний байт на домофоне тем же? А если другой ключ?

        как из четырёх "рабочих" байт ключа и ещё нескольких неизменных получается один-единственный в памяти.

        Меня больше поражает, что работает текущий и предыдущий ключ. Причём, там не просто по 4 бита на ключ, а что-то посложнее. Если домофон можно автоматически программировать, то можно было бы для одного ключа перебрать все возможные варианты контрольного байта и посмотреть какие из них сработают.


        1. MaFrance351 Автор
          02.06.2023 08:26
          +3

          Если в качестве ключа использовать телефон (у NFC, вроде, те же частоты), то можно синхронизировать в облако. Получается, довольно просто приложение.

          Увы, не вариант. NFC в телефоне основан на стандарте ISO 14443 (Mifare и аналогичные карты). Эмулировать им Tag-It (что по сути ISO 15693) не выйдет.


          Контрольная сумма? А если этот же ключ зарегистрировать ещё раз, будет ли у него та же последовательность в первых байтах и будет ли последний байт на домофоне тем же? А если другой ключ?

          Скорее не контрольная сумма, а нечто вроде вектора генерации или ещё какое-то аналогичное значение. Иначе бы она менялась при каждом открытии.
          Для желающих поковыряться выложил дампы памяти:
          https://mega.nz/folder/0VpxxTKK#yeKGu26M-eLPxRwQicBq2g
          Что удивило, так это количество будто бы разделительных байт 0хАА. Но они разделяют блоки то по семь байт, то по пять. Непонятненько.


  1. venanen
    02.06.2023 08:26
    +1

    Судя по дампу в статье меняется только один байт в памяти (предпоследний) и 4 байта данных в ключе (7 блок). И если бы старый ключ умирал сразу - то мог быть простой псевдорандом, но так как он не отмирает, значит есть действительно вектор, но на 3 дампах его, конечно, поискать сложно.


  1. Mapaxa864
    02.06.2023 08:26
    +1

    Вот любопытно. И стоит ли тех денег весь этот геморрой с домофоном, если в подъезд можно попасть кучей других способов: позвонив кому-нибудь, "вагоном" за кем-то или банально отодрав дверь от слабого магнита. Выглядит как безопасность ради галочки. Есть ли реальные преимущества по сравнению с другими системами?


    1. MaFrance351 Автор
      02.06.2023 08:26
      +1

      Как минимум, защита от тех, кто входит по универсальным ключам. Всякие разносчики бумажного спама, "внеплановые проверки счётчиков", сетевые маркетологи и тому подобные личности. Конечно, можно и попробовать войти, но расчёт на то, что злоумышленник просто плюнет и пойдёт в другой подъезд, который сможет открыть (а популярные в Челябинске "Метаком МК20-ТМ4Е" или" Цифрал CCD-2094.1" открываются с одного прикладывания FF-ключа).
      Ну и попутно можно хвастаться, мол, вон как у нас! Никто другой такой защиты не делает! Хотите такую же на свой подъезд? И большинство жильцов сразу: shut up and take my money!


      Впрочем, от универсальных ключей среди "традиционных" домофонов (тех, которые не IP) также хорошо защищены Элтисы, где эти ключи фильтруются. Но это уже другая история.


  1. fiego
    02.06.2023 08:26
    +2

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


    1. MaFrance351 Автор
      02.06.2023 08:26

      Возможно, что даже и сделаю… Кто знает.