Пояснення коду


13

Чи може хтось пояснити, як працюють протоколи прокатки коду, такі як KeeLoq? Я розумію основну припущення, що вони використовують інший код кожен раз, тому ви не можете просто використовувати атаку відтворення, але я не розумію, як одна сторона перевіряє правильність коду тощо.

Крім того, як вони виконують початкову синхронізацію, якщо індекс у кодируемих кодах заздалегідь не відомий / загальний?

Якщо вам доведеться використовувати Keeloq як приклад, щоб пояснити, що це нормально, але я скоріше загальне пояснення прокрутки кодів.


Відповіді:


10

Для правильного функціонування кодові коди вимагають декількох деталей. Тут я опишу загальну реалізацію, яка використовує всі частини певним чином. Інші системи є варіантами на цю тему, але зазвичай використовують багато однакових методик подібним чином. Замість того, щоб спробувати описати повну реалізацію та те, як вона працює одразу, я опишу просту систему та додаю складності, поки ми не досягнемо криптографічно захищеної системи.

Некриптографічний прокатний код - це просто передавач і приймач, які обидва використовують один і той же псевдогенератор випадкових чисел (PRNG). Цей генератор має дві важливі відомості: обчислення та попередньо створене число. Обчислення, як правило, є лінійним рівнянням зворотного зв'язку, яке може бути представлене одним числом. За допомогою подачі PRNG з попереднім номером та збереження номера зворотного зв'язку однаковим генерується певна послідовність чисел. У послідовності немає повторних послідовностей, поки вона не пройде через кожне число, яке вона може генерувати, а потім вона починається заново з тієї ж послідовності.

Якщо і дистанційний, і передавач знають номер зворотного зв'язку та поточне число, тоді, коли пульт передає наступне число, приймач може перевірити його на власному генераторі. Якщо він відповідає, він активується. Якщо цього не відбувається, він прокручує послідовність, поки не знайде номер, який віддалено надіслав. Якщо ви знову натиснете пульт, він повинен збігатися, і він активується, оскільки попередня передача вже синхронізувала генератори чисел. Ось чому іноді доводиться натискати кнопку розблокування двічі - ваш приймач або передавач не синхронізовані.

Ось така частина коду. Якщо PRNG досить довгий, дуже важко знайти номер зворотного зв’язку без багатьох цифр у послідовності підряд, що важко отримати при звичайному використанні. Але це не криптографічно безпечно.

Крім цього, ви додаєте типове шифрування. Виробник транспортного засобу використовує спеціальний секретний ключ для передавача та приймача. Залежно від виробника, ви можете виявити, що кожна модель та рік мають різний код, або вони можуть ділитися кодом між декількома моделями транспортних засобів та протягом кількох років. Вигода полягає в тому, що для кожного з них потрібен інший пульт дистанційного зберігання, але проблема спільного використання коду для багатьох моделей полягає в тому, що якщо його зламають, то більше автомобілів вразливі.

За шифруванням у вас є інформація про кнопки, номер, створений PRNG, і трохи інформації про номер відгуку. Не достатньо, щоб зробити PRNG з нуля, але достатньо, щоб після певної кількості натискання кнопок, а також з деякою внутрішньою інформацією про обмежений простір номер зворотного зв'язку може включати (знову ж, виробник, конкретний рядок), то приймач може після декількох тренувань передачі, визначте номер зворотного зв'язку та почніть відстежувати PRNG для цього пульта.

Код прокату призначений лише для зупинки атак повторного відтворення. Шифрування призначене для забезпечення коду, що прокручується, щоб уникнути його порушення. З одним або іншим систему зламати було б занадто просто. Оскільки виробник контролює і передавач, і приймач, навчання не включає криптографію з відкритим ключем або щось, що особливо стосується. Це також заважає людям післяпродажної торгівлі працювати в автомобілях із таким типом системи.

Ролінг-код, однак, не є непроникним. Стара система келока була успішно атакована лише кілька років тому (після десятиліття використання), тому код шифрування виробника можна знайти, а кодові коди можна знайти легше. Раніше це було здійснено напад, який дозволяв людям брати транспортні засоби, фактично не порушуючи код. У відповідь новий ключ шифрування - 60 біт. Не настільки безпечна, як багато сучасних систем шифрування, але достатньо безпечна, що вона, ймовірно, прослужить ще багато років, перш ніж її зруйнують.


Ах, я, мабуть, забув частину PRNG "без повторної послідовності", що дуже важливо. Яка перевага передачі інформації, яка дозволяє одержувачу визначати код зворотного зв'язку? Це здається менш безпечним, ніж просто вибір коду зворотного зв’язку та виготовлення відомого як передавача, так і приймача ...
NickHalden

@NickHalden код зворотного зв’язку відрізняється для кожного віддаленого пристрою, і клієнти захочуть пізніше додати ще віддалені або замінити відсутні пульти. Це потрібно лише для тренувань. Деякі трохи більш безпечні версії вимагають певної послідовності натискання кнопок на пульті дистанційного керування, перш ніж вони надсилатимуть додаткову інформацію зворотного зв’язку, але загалом система загалом є надійною, що навіть якщо ви зламаєте шифрування, вам потрібно ще набагато більше інформації перед цим маленьким трохи інформації вам достатньо, щоб отримати весь код зворотного зв'язку.
Адам Девіс

8

Я вперше зіткнувся з KeeLoq, коли досліджував мікросхем у відкритті дверей гаражних дверей. Технічний опис Microchip робить хорошу роботу, пояснюючи , як це працює.

Коротко:

  • приймач підтримує базу даних усіх передавачів, введених на їх серійний номер.
  • кожен передавач пов'язаний із симетричним ключем шифрування (64 біт), який знаходиться на мікросхемі, а також у базі даних приймача.
  • кожен передавач пов'язаний з 16-бітовим циклічним порядковим номером, також зберігається на мікросхемі та в базі даних.
  • коли передавач активований, він збільшує свій порядковий номер по модулю 65536 (навколо 16 біт) і надсилає пакет, що складається з бітової маски, яка відображає натиснуті кнопки, її серійний ідентифікатор та зашифровану версію серійного номера.
  • приймач відповідає серійному номеру в базі даних, виймає ключ і розшифровує серійний номер.
  • серійний номер повинен бути новим; це не може бути нещодавно використаний серійний номер, який захищає від повторних атак. (Див. Рис. 7.3 у таблиці).
  • якщо серійний номер підтверджено, то приймач може активувати функціональність на основі бітової маски натиснутих кнопок.
  • якщо новий серійний номер випередив більш ніж 16 значень (користувач натискав кнопки багато разів випадково, перебуваючи далеко від приймача), то для повторної синхронізації має відбутися додатковий тремтіння руки, що вимагає додаткового натискання кнопки. (Користувач виконає додаткове натискання кнопки, вважаючи, що прийом поганий).

Додавання нового передавача в базу даних приймача нечітко аналогічно на високому рівні методу конфігурації натискання кнопки для додавання клієнтів до точки доступу Wi-Fi. Приймач якось повідомляється перевести в режим, коли він приймає новий передавач.

Новий передавач може бути прийнятий з інформації, переданої у звичайних повідомленнях про активацію, якщо приймач і передавач мають один і той же секретний ідентифікатор виробника. Це пояснюється тим, що 64-бітний ключ шифрування отриманий з ідентифікатора виробника та послідовної інформації приймача. (Див. Розділ 7.1).

Є більш безпечна альтернатива цьому: "Безпечне навчання". Це ініціюється особливим чином на передавачі (три кнопки, натиснуті одразу). Передавач посилає спеціальний пакет: значення 60 біт насіння, з якого походить ключ шифрування, імовірно, не залежно від ідентифікатора виробника або серійного номера.

Коли приймач не перебуває в режимі навчання, він, звичайно, відхиляє передачі від передавачів, про які він не знає.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.