Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Tрадиционное шифрование

.doc
Скачиваний:
54
Добавлен:
14.02.2015
Размер:
282.11 Кб
Скачать

Симметричные шифры

Для зашифровки и расшифровки сообщения используется один и тот же блок информации (ключ).

В зависимости от размера блока симметричные шифры делятся на поточные и блочные.

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

Поточное шифрование

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

Суть поточного шифрования заключается побитовом изменении проходящего через систему потока данных. Практически единственной операцией, используемой в поточных шифрах, является XOR – побитное исключающее ИЛИ. Параллельно прохождению информационного потока в таком шифре по определенному правилу генерируется поток битов – ключевая последовательность. Как прямое, так и обратное шифрование осуществляется наложением по XOR ключевой последовательности на исходную. Генератор ключевой последовательности выдает последовательность бит k1, k2, …, ki , … Эта числовая последовательность складывается по модулю 2 с последовательностью бит исходного текста x1, x2, …, xi , … для получения шифрованного текста: yi = xi + ki.

На приемной стороне шифрованный текст прибавляется по модулю 2 к идентичной ключевой последовательностью для получения исходного текста: yi  ki = xi  ki  ki = xi.

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

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

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

По этой причине все поточные шифры предусматривают использование ключа. Выход генератора ключевой последовательности зависит от этого ключа. В таком случае простой криптоанализ будет невозможным.

Главная проблема поточных шифров – синхронизация передающего (кодирующего) и принимающего (декодирующего) устройств. При пропуске или ошибочной вставке хотя бы одного бита вся передаваемая информация необратимо теряется. Поэтому в таких системах очень большое внимание уделяется методам синхронизации. Обычно для этого применяется комбинация 2-х методов:

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

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

Поточные шифры более всего пригодны для шифрования безостановочных потоков данных. Примерами поточных шифров являются RC4, SEAL, WAKE и др.

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

Общие сведения о блочных шифрах

В блочных шифрах единицей кодирования является блок из нескольких байтов. Результат кодирования зависит от всех исходных байтов этого блока. Схема применяется при пакетной передаче информации и кодировании файлов.

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

Под n-битовым блоком будем понимать последовательность из 0 и 1 длины n: x=(x0,x1,…xn-1)  Z2,n ,

где Z2,n -множество целых чисел от 0 до 2n-1;

х – бинарное представление чисел из множества Z2,n .

Например, если n=4, то

(0, 0, 0, 0) 0 (0, 0, 0, 1) 1 (0, 0, 1, 0) 2 (0, 0, 1, 1) 3

(0, 1, 0, 0) 4 (0, 1, 0, 1) 5 (0, 1, 1, 0) 6 (0, 1, 1, 1) 7

(1, 0, 0, 0) 8 (1, 0, 0, 1) 9 (1, 0, 1, 0) 10 (1, 0, 1, 1) 11

(1, 1, 0, 0) 12 (1, 1, 0, 1) 13 (1, 1, 1, 0) 14 (1, 1, 1, 1) 15

Число различных блоков при этом равно 2n , и, чтобы шифрование было обратимым (т.е. чтобы обеспечивалась возможность дешифрования), каждый из таких блоков должен преобразовываться в свой уникальный блок шифрованного текста. Такие преобразования называются обратимыми. Вот примеры обратимого и необратимого преобразований для n=2.

В данном примере в случае необратимого отображения шифрованный текст 01 соответствует двум разным блокам открытого текста. Если ограничиться рассмотрением только обратимых отображений, число различных допустимых преобразований окажется равным 2n!

На рис. 3.4 показана общая схема подстановочного шифра для n = 4. Поступающее на вход 4-битовое значение определяет одно из 16 возможных начальных состояний, которое отображается подстановочным шифром в одно из 16 уникальных конечных состояний, каждое из которых представляется 4-битовым значением шифрованного текста. Схемы шифрования и дешифрования можно представить в виде таблиц (табл. 3.1). Это самая общая схема процесса блочного шифрования.

Однако при практической реализации данного подхода возникает следующая проблема. Если использовать блок небольшого размера, например n = 4, система оказывается эквивалентной классическому подстановочному шифру. Как мы уже видели, такие системы уязвимы и могут быть раскрыты с помощью статистического анализа открытого текста. Этот недостаток порождается не самой природой подстановочного шифра, а использованием коротких блоков. При достаточно больших значениях n и отсутствии каких-либо ограничений на обратимую подстановку, задающую преобразование открытого текста в шифрованный, статистические характеристики исходного открытого текста маскируются настолько хорошо, что такого рода криптоанализ становится практически бесполезным.

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

Таким образом, требования к хорошему блочному шифру формулируются следующим образом. Необходимы:

•достаточно большое N (64 или более). В требованиях к новому стандарту шифрования США N задано равным 128;

•достаточно большое пространство ключей для того, чтобы исключить возможность подбора ключа;

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

Характерной особенностью блочных криптоалгоритмов является тот факт, что в ходе своей работы они производят преобразование блока входной информации фиксированной длины и получают результирующий блок того же объема, но недоступный для прочтения сторонним лицам, не владеющим ключом. Таким образом, схему работы блочного шифра можно описать функциями Z=EnCrypt(X,Key) и X=DeCrypt(Z,Key)

Ключ Key является параметром блочного криптоалгоритма и представляет собой некоторый блок двоичной информации фиксированного размера. Исходный (X) и зашифрованный (Z) блоки данных также имеют фиксированную разрядность, равную между собой, но необязательно равную длине ключа.

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

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

Название алгоритма

Размер блока

Длина ключа

IDEA

64 бита

128 бит

CAST128

64 бита

128 бит

BlowFish

64 бита

128 – 448 бит

ГОСТ

64 бита

256 бит

TwoFish

128 бит

128 – 256 бит

DES

64 бита

56 бит

MARS

128 бит

128 – 1048 бит

Криптоалгоритм именуется идеально стойким, если прочесть зашифрованный блок данных можно только перебрав все возможные ключи, до тех пор, пока сообщение не окажется осмысленным. Так как по теории вероятности искомый ключ будет найден с вероятностью 1/2 после перебора половины всех ключей, то на взлом идеально стойкого криптоалгоритма с ключом длины N потребуется в среднем 2N-1 проверок. Таким образом, в общем случае стойкость блочного шифра зависит только от длины ключа и возрастает экспоненциально с ее ростом. Даже предположив, что перебор ключей производится на специально созданной многопроцессорной системе, в которой благодаря диагональному параллелизму на проверку 1 ключа уходит только 1 такт, то на взлом 128 битного ключа современной технике потребуется не менее 1021 лет. Естественно, все сказанное относится только к идеально стойким шифрам, которыми, например, с большой долей уверенности являются приведенные в таблице выше алгоритмы.

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

Таким образом, на функцию стойкого блочного шифра Z=EnCrypt(X,Key) накладываются следующие условия:

  1. Функция EnCrypt должна быть обратимой.

  2. Не должно существовать иных методов прочтения сообщения X по известному блоку Z, кроме как полным перебором ключей Key.

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

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

Все действия, производимые над данными блочным криптоалгоритмом, основаны на том факте, что преобразуемый блок может быть представлен в виде целого неотрицательного числа из диапазона, соответствующего его разрядности. Так, например, 32-битный блок данных можно интерпретировать как число из диапазона 0..4'294'967'295. Кроме того, блок, разрядность которого обычно является "степенью двойки", можно трактовать как несколько независимых неотрицательных чисел из меньшего диапазона (рассмотренный выше 32-битный блок можно также представить в виде 2 независимых чисел из диапазона 0..65535 или в виде 4 независимых чисел из диапазона 0..255).

Над этими числами блочным криптоалгоритмом и производятся по определенной схеме следующие действия (слева даны условные обозначения этих операций на графических схемах алгоритмов) :

Биективные математические функции

Сложение

X'=X+V

Исключающее ИЛИ

X'=X XOR V

 

Умножение по модулю 2N+1

X'=(X*V) mod (2N+1)

Умножение по модулю 2N

X'=(X*V) mod (2N)

Битовые сдвиги

Арифметический сдвиг влево

X'=X SHL V

Арифметический сдвиг вправо

X'=X SHR V

Циклический сдвиг влево

X'=X ROL V

Циклический сдвиг вправо

X'=X ROR V

Табличные подстановки

S-box (англ. substitute)

X'=Table[X,V]

В качестве параметра V для любого из этих преобразований может использоваться:

  1. фиксированное число (например, X'=X+125)

  2. число, получаемое из ключа (например, X'=X+F(Key))

  3. число, получаемое из независимой части блока (например, X2'=X2+F(X1))

Последний вариант используется в схеме, названной по имени ее создателя сетью Фейстеля.

Последовательность выполняемых над блоком операций, комбинации перечисленных выше вариантов V и сами функции F и составляют "ноу-хау" каждого конкретного блочного криптоалгоритма. Один-два раза в год исследовательские центры мира публикуют очередной блочный шифр, который под яростной атакой криптоаналитиков либо приобретает за несколько лет статус стойкого криптоалгоритма, либо (что происходит неизмеримо чаще) бесславно уходит в историю криптографии.

Одним из наиболее распространенных способов задания блочных шифров является использование так называемых сетей Фейстела (по имени исследователя, работавшего в свое время в IBM, одного из авторов стандарта DES). Сетью Фейстела называется метод обратимых преобразований текста, при котором значение, вычисленное от одной из частей текста, накладывается на другие части. Часто структура сети выполняется так, что для шифрования и дешифрования используется один и тот же алгоритм – различие состоит только в порядке использования материала ключа. Сеть Фейстела представляет собой общий метод преобразования произвольной функции (обычно называемой F-функцией) в перестановку на множестве блоков. Эта конструкция была изобретена Хорстом Фейстелом и была использована в большом количестве шифров, включая DES и ГОСТ 28147-89. F-функция, представляющая собой основной строительный блок сети Фейстела, всегда выбирается нелинейной и практически во всех случаях необратимой.

Функция F в шифрах Файстеля обеспечивает необходимый уровень конфузии, что предполагает невозможность "расшифровывания" подстановки, задаваемой данной функцией. Задача конфузии состоит в максимальной степени усложнения статистической взаимосвязи между шифрованным текстом и ключом с целью противостояния попыткам определить ключ. Таким образом, даже если противник сумеет определить какие-либо статистические особенности шифрованного текста, сложность использования ключа для получения шифрованного текста должна оказаться достаточной для того, чтобы попытки определить ключ на основании этих статистических особенностей оказались безрезультатными. Это достигается использованием сложных подстановочных алгоритмов: простые линейные подстановочные функции увеличивают беспорядок лишь в незначительной степени. Как уже говорилось выше, для этого функция F должна быть нелинейной. Чем выше степень нелинейности F, тем сложнее будет шифр для криптоанализа любого типа. Степень нелинейности можно характеризовать несколькими способами, обсуждение которых выходит за рамки данной лекции. Грубо говоря, чем труднее аппроксимировать функцию F с помощью системы линейных уравнений, тем выше степень нелинейности этой функции.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]