Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика / Лекция 6.doc
Скачиваний:
192
Добавлен:
09.06.2015
Размер:
1.67 Mб
Скачать
    1. Поточные шифры

Поточный шифр выполняет операции над битами или символами (например 8-, 16- или 32-битовыми). Поточный шифр преобразует один и тот же символ открытого текста в разные символы шифртекста, например в зависимости от того, сколько и каких символов было обработано ранее.

Xor-шифрование

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

Рассмотрим идею этого наипростейшего метода. Как известно из булевой алгебры, операция логического сложения «⊕» по модулю 2 (или логического исключающего ИЛИ – XOR, eXclusive OR) имеет следующую семантику:

Таблица истинности для OR:

xi

yi

xi ^ yi

0

0

0

0

1

1

1

0

1

1

1

1

Таблица истинности для XOR:

xi

yi

xi yi

0

0

0

0

1

1

1

0

1

1

1

0

Тогда:

x = 10011101

= 01001100

= 11010001

То есть, операция ⊕ y по сути поразрядная (побитовая – результат не зависит от соседних битов). Если только один из соответствующих битов равен 1, то результат 1. А если оба 0 или оба 1, то результат 0. Если внимательно посмотреть на результат применения XOR к двум двоичным числам, то можно заметить, что мы можем восстановить одно из слагаемых при помощи второго: ⊕ y или ⊕ x.

Отсюда можно сделать следующие выводы: зная число y и применяя XOR к x, мы получим z. Затем, мы, опять же используя y, получим из z обратно число x. Таким образом мы можем преобразовать последовательность чисел (x)i в последовательность (z)i. Теперь мы можем назвать число y кодирующим (или шифрующим) ключом. Если человек не знает ключа, то он не сможет восстановить исходную последовательность чисел (x)i. Но если (x)i являются байтовым представлением букв текста, то опытный пользователь сможет вскрыть зашифрованный текст. Поскольку каждая буква будет представлена в шифротексте одним и тем же кодом z, то воспользовавшись частотным словарем взломщик сможет вычислить шифрующий ключ y, если у него будет в распоряжениии достаточно длинный шифротекст.

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

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

Если два сообщения были зашифрованы с использованием одной и той же гаммы и для одного из сообщений (более длинного) удалось каким-нибудь образом получить открытый текст, то легко получить открытый текст и для другого сообщения. Применив операцию XOR К открытому тексту и шифртексту первого сообщения, мы получим фрагмент гаммы. А наложив гамму на шифртекст второго сообщения, мы получим его открытый текст. Именно поэтому нельзя допускать, чтобы одна и та же гамма использовалась при шифровании двух разных потоков или сообщений.

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

Соседние файлы в папке Информатика