Скремблер: надёжно и просто
Эта статья написана для того, чтобы рассказать читателю, что такое скремблеры, обозначить области их применения и затронуть некоторые практические тонкости, а также раскрыть секреты алгоритма скремблирования.
Зачем и почему?
Иногда возникает необходимость зашифровать трафик, не прибегая к методам, требующим много времени и ресурсов на шифровку и расшифровку, а также реализацию алгоритма. Такое случается, когда мы стараемся защитить данные от пользователей или примитивных троянов со снифферами (анализаторами трафика), но эти данные не стоят того, чтобы прибегать к серьезным методам шифрования, так как нам не требуется высокая криптостойкость. Со стороны методов связи бывает необходимо уменьшить уровень излучаемых помех, распределив энергию равномерно, и повысить надежность синхронизации устройств. С этими задачами и справляется скремблирование.
Что же такое скремблер?
Скремблер (от англ. to scramble — перемешивать, шифровать) — это алгоритм, разработанный для побитной последовательной передачи информации, позволяющий зашифровать цифровой поток таким образом, что на выходе получается последовательность, обладающая свойствами случайной: равновероятным появлением нуля и единицы. Именно это позволяет надежно выделить тактовую частоту и постоянную мощность передаваемого сигнала, что и дает надежность синхронизации. Стоит отметить, что такое преобразование потока не меняет скорость передачи, а также является обратимым, то есть данные восстанавливаются обратным алгоритмом.
Как это работает?
У нас имеется передающая сторона, на которой выполняется скремблирование, а также принимающая сторона, на которой соответственно выполняется дескремблирование, то есть обратная операция. Исходная последовательность подается на вход скремблера, а также именно она выделяется дескремблером из принятой зашифрованной последовательности.
Главной частью скремблера является линейный n-каскадный регистр сдвига с обратными связями, генерирующий псевдослучайную последовательность (ПСП) максимальной длины . Основная операция, производимая при шифровании — сложение по модулю 2, то есть XOR (исключающее ИЛИ).
Типы скремблеров
По типу взаимодействия с регистром скремблеры делятся на два типа: самосинхронизирующиеся (СС-скремблеры) и аддитивные (АД-скремблеры или же скремблеры с установкой). И те, и другие имеют свои плюсы и минусы, которые станут ясны после более подробного рассмотрения алгоритмов.
СС-скремблер
Отличительной чертой самосинхронизирующегося скремблера является то, что шифрование производится на основе самой скремблированной последовательности, поступающей на вход регистра сдвига. Следствием этого является отсутствие необходимости предустановки состояний скремблера и дескремблера в идентичное начальное состояние, синхронизация происходит сама по себе. При потере синхронизации восстановление состояния не превышает числа тактов, равного числу ячеек регистра скремблера.
Сам алгоритм скремблирования в этом случае можно рассмотреть на простейшем примере.
CC-скремблер
Несложно заметить, что при выполнении такого алгоритма большую опасность представляет «лавинный эффект» вследствие размножения ошибок. Это происходит именно из-за того, что для шифрования каждого следующего бита используется результат шифрования предыдущих. А значит, что при ошибке в одном бите мы получим уже n неправильно зашифрованных бита (где n — число обратных связей регистра), которые впоследствии приведут к ошибке в 2n и так далее. Другой проблемой самосинхронизирующихся скремблеров является то, что первые k битов входящей последовательности в принципе не будут зашифрованы. К счастью, этого легко избежать искусственным добавлением шума в начало последовательности.
АД-скремблер
Аддитивные скремблеры не получают на вход регистра результат шифрования, чем избегают распространения ошибок и лавинного эффекта, однако скремблер и дескремблер требуют предварительной установки состояния регистра — ключа. На вход регистра поступает линейная комбинация уже находящихся в нем бит, она же суммируется с входящим сигналом, в результате чего и получается зашифрованная последовательность.
Сам алгоритм скремблирования в этом случае можно рассмотреть на простейшем примере.
АД-скремблер
На практике чаще всего применяются именно аддитивные скремблеры, так что далее проанализируем особенности этого алгоритма.
Синхронизация
В АД-методе скремблирования важную роль играет синхронизация состояний регистров скремблера и дескремблера, ведь при ее потере вся дальнейшая информация неизбежно теряется. Для поддержания синхронизации на практике используются такие методы, как добавление в поток информации синхронизирующих битов, заранее известных приемной стороне, что позволяет ей при ненахождении такого бита активно начать поиск синхронизации с отправителем, и использование высокоточных генераторов временных импульсов, что позволяет в моменты потери синхронизации производить декодирование принимаемых битов информации «по памяти» без синхронизации. Стоит отметить, что именно необходимость в синхронизации скремблеров привела Джеймса Х. Эллиса к идее криптосистем с открытым ключом, что впоследствии привело к созданию алгоритма шифрования RSA и протокола Диффи-Хеллмана.
Зацикливание и построение алгоритма
Разрядность скремблера — разрядность устройства памяти — идентична длине ключа для блочных шифров. От нее напрямую зависит криптостойкость данной системы. При длительном скремблировании неизбежно возникает зацикливание, то есть через определенное число тактов регистр возвращается в исходное состояние, после чего шифрование будет циклически повторяться. Это повторение происходит непосредственно из-за того, что в n ячейках регистра возможны только комбинаций бит, а значит, максимум через комбинаций состояние станет идентичным начальному. А значит, мы хотим достигнуть именно этой максимальной длины.
К счастью, для скремблера любой разрядности n существует такая комбинация обратных связей, при которой период реализуем. То есть за тактов значения в регистре ни разу не повторятся. Оказывается, для этого достаточно, чтобы скремблер был построен на основе неприводимого полинома степени n, не представимого по модулю 2 в виде произведения никаких других полиномов. Выбранные таким способом обратные связи и используются в схемах скремблирования, при этом мы получаем генератор последовательностей наибольшей длины (ПНД).
Алгоритм построения следующий:
находим неприводимый полином степени n
отбрасываем старший разряд в его двоичном представлении, так как он несет информацию только о степени этого полинома
по полученному двоичному представлению строим скремблер,
1
на соответствующих разрядах говорят о наличии обратной связи,0
— об ее отсутствии
Так, например, для 15-ти разрядного регистра мы имеем неприводимый полином с двоичным представлением 1000000000000011. После отбрасывания старшего бита получаем 000000000000011, то есть скремблер с алгоритмом: .
Что в итоге?
Скремблирование — достаточно простой алгоритм, используемый для шифрования алфавитно-цифровой, графической, а также речевой информации для последующей передачи ее по системам связи.
Современные скремблеры несколько отличаются от их более ранних аналогов, так как для повышения криптостойкости совмещаются с асимметричными алгоритмами шифрования.
Тем не менее скремблеры повсеместно применяются и сейчас, как из-за простоты реализации, так и из-за других очевидных преимуществ данного алгоритма.