Скользящие коды требуют нескольких частей для правильного функционирования. Здесь я опишу общую реализацию, которая использует все части определенным образом. Другие системы являются вариациями на эту тему, но обычно используют многие из тех же методов аналогичным образом. Вместо того, чтобы пытаться описать полную реализацию и как она работает сразу, я опишу простую систему и добавлю сложность, пока мы не достигнем криптографически безопасной системы.
Некриптографический скользящий код - это просто передатчик и приемник, которые используют один и тот же генератор псевдослучайных чисел (PRNG). Этот генератор имеет две части важной информации: вычисление и ранее сгенерированное число. Вычисление обычно представляет собой линейное уравнение обратной связи, которое может быть представлено одним числом. Путем подачи PRNG предыдущего номера и сохранения номера обратной связи одинаковым генерируется определенная последовательность чисел. Последовательность не имеет повторяющихся последовательностей, пока не пройдет все числа, которые она может сгенерировать, и затем она начинается снова с той же самой последовательностью.
Если и пульт дистанционного управления, и передатчик знают номер обратной связи и текущий номер, то, когда пульт дистанционного управления передает следующий номер, приемник может проверить его на своем собственном генераторе. Если он совпадает, он активируется. Если это не так, он прокручивает последовательность до тех пор, пока не найдет номер, отправленный удаленным пользователем. Если вы нажмете на пульт еще раз, он должен совпадать, и он активируется, потому что предыдущая передача уже синхронизировала генераторы номеров. Вот почему вам иногда приходится дважды нажимать кнопку разблокировки - ваш приемник или передатчик не синхронизированы.
Это подвижная часть кода. Если PRNG достаточно длинный, очень трудно найти номер обратной связи без большого количества чисел в последовательности подряд, что трудно получить при обычном использовании. Но это не криптографически безопасно.
Кроме того, вы добавляете типичное шифрование. Производитель транспортного средства использует специальный секретный ключ для передатчика и приемника. В зависимости от производителя вы можете обнаружить, что каждая модель и год имеют разные коды, или они могут использовать этот код для нескольких моделей автомобилей и в течение нескольких лет. Компромисс заключается в том, что каждый из них требует наличия другого пульта дистанционного управления, но проблема с совместным использованием кода для многих моделей заключается в том, что если он сломан, то больше автомобилей становятся уязвимыми.
За шифрованием у вас есть информация о кнопке, номер, сгенерированный PRNG, и небольшая информация о номере обратной связи. Не достаточно, чтобы создать PRNG с нуля, но достаточно, чтобы после определенного количества нажатий кнопок и некоторой внутренней информации об ограниченном пространстве число обратной связи могло включать (опять же, производитель, конкретная линия), то получатель может после нескольких тренировок передачи, определите номер обратной связи и начните отслеживать PRNG для этого пульта.
Скользящий код предназначен только для того, чтобы остановить повторные атаки. Шифрование предназначено для защиты скользящего кода во избежание его взлома. С одним или другим система будет слишком легко сломать. Поскольку производитель контролирует как передатчик, так и приемник, обучение не включает в себя криптографию с открытым ключом или что-либо особенно сложное. Это также предотвращает работу дополнительных автомобилей в автомобилях с такой системой.
Роллинг код не является непроницаемым, хотя. Старая система keeloq была успешно атакована всего несколько лет назад (после десятилетия использования), так что можно найти код шифрования производителя и более легко найти скользящие коды. Ранее он подвергался атакам таким образом, что люди могли брать транспортные средства, не нарушая код. В ответ новый ключ шифрования составляет 60 бит. Не такой безопасный, как многие современные системы шифрования, но достаточно безопасный, чтобы, вероятно, он прослужил еще много лет, прежде чем сломался.