Криптографические алгоритмы защиты информации Blowfish
СОДЕРЖАНИЕ
Введение 4
1 Алгоритм Blowfish 29
1.1 Сеть Фейстеля 30
1.2 Описание алгоритма 33
1.3 Стойкость алгоритма 36
2 Криптографические системы 6
2.1 Основные понятия 6
2.2 Требования к криптографическим системам 7
2.3 Симметричные криптосистемы 9
2.4 Ассиметричные криптосистемы 11
2.5 Математические основы 15
3 Выбор оптимального блочного алгоритма шифрования 19
3.1 Сравнительная характеристика алгоритмов 19
3.2 Криптостойкость рассмотренных алгоритмов 25
4 Описание работы программы 38
Заключение 41
Список используемых источников 42
Приложение А Исходный код алгоритма Blowfish 43
ВВЕДЕНИЕ
Стремительное развитие средств вычислительной техники и открытых сетей передачи данных обусловило их широкое распространение в повседневной жизни и предпринимательской деятельности. Мощные вычислительные возможности и оперативность передачи информации не только оказали большое влияние на принципы ведения бизнеса, сложившиеся в большинстве традиционных отраслей, но и открыли новые направления развития предпринимательской деятельности. В современных условиях автоматизация банковской деятельности и управления предприятиями является «modus vivendi», а такие слова, как «Internet-banking», «e-commerce» и «smart-cards», уже не вызывают всеобщего удивления и жарких дебатов.
Однако
последние достижения человеческой
мысли в области компьютерных
технологий связаны с появлением
не только персональных компьютеров, сетей
передачи данных и электронных денег,
но и таких понятий, как хакер,
информационное оружие, компьютерные
вирусы и т.п. Оказывается, что под
информационной безопасностью подразумевается
одно из ведущих направлений развития
информационных технологий - круг задач,
решаемых в этой области, постоянно
расширяется как в
Современные методы накопления, обработки и передачи информации способствовали появлению угроз, связанных с возможностью потери, раскрытия, модификации данных, принадлежащих конечным пользователям.
Основу
обеспечения информационной безопасности
в информационно-
1 Алгоритм Blowfish
Blowfish - это алгоритм, разработанный Брюсом Шнайером специально для реализации на больших микропроцессорах. Представляет собой сеть Фейстеля. Выполнен на простых и быстрых операциях: XOR, подстановка, сложение. Является не запатентованным и свободно распространяемым.
При проектировании алгоритма Blowfish Шнайер пытался удовлетворить следующим критериям:
- Скорость. Программа, реализующая алгоритм Blowfish на 32-битовых микропроцессорах, шифрует данные со скоростью 26 тактов на байт.
- Компактность. Для исполнения программной реализации алгоритма Blowfish достаточно 5 Кбайт памяти.
- Простота. В алгоритме Blowfish используются только простые операции: сложение, XOR и подстановка из таблицы по 32-битовому операнду. Анализ его схемы несложен, что снижает риск ошибок реализации алгоритма.
- Настраиваемая стойкость. Длина ключа Blowfish переменна и может достигать 448 бит.
Алгоритм Blowfish оптимизирован для применения в системах, не практикующих частой смены ключей, например, в линиях связи и программах автоматического шифрования файлов. При реализации на 32-битовых микропроцессорах с большим размером кэша данных, например, процессорах Pentium и PowerPC, алгоритм Blowfish заметно быстрее DES [4].
1.1 Сеть Фейстеля
Сеть Фейстеля (Feistel network) подразумевает разбиение обрабатываемого блока данных на несколько субблоков (чаще всего — на два), один из которых обрабатывается некоей функцией f и накладывается на один или несколько остальных субблоков. На рисунке 1 приведена наиболее часто встречающаяся структура алгоритмов на основе сети Фейстеля.
Рисунок 1 – Сеть Фейстеля
Дополнительный аргумент функции f, обозначенный на рисунке 1 как Ki, называется ключом раунда. Ключ раунда является результатом обработки ключа шифрования процедурой расширения ключа, задача которой — получение необходимого количества ключей Ki из исходного ключа шифрования относительно небольшого размера (в настоящее время достаточным для ключа симметричного шифрования считается размер 128 битов). В простейших случаях процедура расширения ключа просто разбивает ключ на несколько фрагментов, которые поочередно используются в раундах шифрования; существенно чаще процедура расширения ключа является достаточно сложной, а ключи Ki зависят от значений большинства битов исходного ключа шифрования.
Наложение обработанного субблока на необработанный чаще всего выполняется с помощью логической операции «исключающее или» (Exclusive OR, XOR), как показано на рисунке 1. Достаточно часто вместо XOR здесь используется сложение по модулю 2n, где n — размер субблока в битах. После наложения субблоки меняются местами, т. е. в следующем раунде алгоритма обрабатывается уже другой субблок данных.
Такая структура алгоритмов шифрования получила свое название по имени Хорста Фейстеля (Horst Feistel) — одного из разработчиков алгоритма шифрования Lucifer и разработанного на его основе алгоритма DES (Data Encryption Standard) — бывшего (но до сих пор широко используемого) стандарта шифрования США. Оба этих алгоритма имеют структуру, аналогичную показанной на рисунке 1. Среди других алгоритмов, основанных на сети Фейстеля, можно привести в пример отечественный стандарт шифрования ГОСТ 28147-89, а также другие весьма известные алгоритмы: RC5, Blowfish, TEA, CAST-128 и т. Д [5].
На сети Фейстеля основано большинство современных алгоритмов шифрования — благодаря множеству преимуществ подобной структуры, среди которых стоит отметить следующие:
- алгоритмы на основе сети Фейстеля могут быть сконструированы таким образом, что для зашифровывания и расшифровывания может использоваться один и тот же код алгоритма - разница между этими операциями может состоять лишь в порядке применения ключей Кi; такое свойство алгоритма наиболее полезно при его аппаратной реализации или на платформах с ограниченными ресурсами; в качестве примера такого алгоритма можно привести ГОСТ 28147-89;
- алгоритмы на основе сети Фейстеля являются наиболее изученными — таким алгоритмам посвящено огромное количество криптоаналитических исследований, что является несомненным преимуществом как при разработке алгоритма, так и при его анализе.
1.2 Описание алгоритма
1.2 Описание алгоритма
Blowfish представляет собой 64-битовый блочный алгоритм шифрования с ключом переменной длины. Алгоритм состоит из двух частей: расширения ключа и шифрования данных. Расширение ключа преобразует ключ длиной до 448 битов в несколько массивов подключей общим размером 4168 байт.
Шифрование данных заключается в последовательном исполнении простой функции 16 раз. На каждом раунде выполняются зависимая от ключа перестановка и зависимая от ключа и данных подстановка. Используются только операции сложения и XOR над 32-битовыми словами. Единственные дополнительные операции каждого раунда - четыре взятия данных из индексированного массива.
В алгоритме Blowfish используется множество подключей. Эти подключи должны быть вычислены до начала зашифрования или расшифрования данных.
На рисунке 2 изображено вычисление подключей.
Рисунок
2 - Алгоритм Blowfish
Р-массив состоит из восемнадцати 32-битовых подключей:
Р1,Р2,...,Р18
Каждый из четырех 32-битовых S-блоков содержит 256 элементов:
S1,0, S1,1,…, S1,255
S2,0, S2,2,…, S2,255
S3,0, S3,3,…, S3,255
S4,0, S4,4,…, S4,255
Алгоритм Blowfish представляет собой сеть Фейстеля, состоящей из 16 раундов. На вход подается 64-битовый элемент данных х. Для зашифрования данных:
Разбить х на две 32-битовых половины: xL, xR
Для i от 1 до 16:
xL = xL Å Pi
xR = F (xL) Å xR
Переставить xL и xR
Переставить xL и xR (отнять последнюю перестановку)
xR = xR Å P17
xL = xL Å P18
Объединить xL и xR
Функция F рассчитывается следующим образом (Рисунок 4):
Рисунок 3 - Функция F
Разделить xL на четыре 8-битовых фрагмента: а, b, с и d
F(xL) = ((S1,a
+ S2,bmod232)ÅS3,c) +
S4,dmod232
Расшифрование выполняется точно так же, как и зашифрование, но Р1,Р2,...,Р18 используются в обратном порядке.
В реализациях Blowfish, в которых требуется очень высокая скорость, цикл должен быть развернут, а все ключи храниться в кэше.
Подключи рассчитываются с помощью самого алгоритма Blowfish. Вот какова точная последовательность действий.
- Сначала Р-массив, а затем четыре S-блока по порядку инициализируются фиксированной строкой. Эта строка состоит из шестнадцатеричных цифр π.
- Выполняется операция XOR над Р1 с первыми 32 битами ключа, XOR над Р2 со вторыми 32 битами ключа, и т.д. для всех битов ключа (вплоть до Р18). Операция XOR выполняется циклически над битами ключа до тех пор, пока весь Р-массив не будет инициализирован.
- Используя подключи, полученные на этапах 1 и 2, алгоритм Blowfish шифрует строку из одних нулей.
- Р1 и Р2 заменяются результатом этапа 3.
- Результат этапа 3 шифруется с помощью алгоритма Blowfish и модифицированных подключей.
- Р3 и Р4 заменяются результатом этапа 5.
- Далее по ходу процесса все элементы Р-массива, а затем все четыре S-блока по порядку заменяются выходом постоянно меняющегося алгоритма Blowfish.
Всего для генерации всех необходимых подключей требуется 521 итерация. Приложения могут сохранять подключи - нет необходимости выполнять процесс их получения многократно [4].
1.3 Стойкость алгоритма
В
своей книге «Прикладная
- «Алгоритм Blowfish не годится для применения в случаях, где требуется частая смена ключей». Процедура расширения ключа является достаточно ресурсоемкой, поэтому одно из достоинств алгоритма Blowfish — достаточно высокая скорость шифрования — проявляется только в тех случаях, если на одном ключе шифруется достаточно большой объем информации. И наоборот, если менять ключ после каждого из шифруемых блоков, скорость алгоритма становится катастрофически низкой именно из-за необходимости каждый раз выполнять расширение ключа. Сам Шнайер рекомендует в приложениях, где критична скорость, хранить уже развернутый ключ (т.е. значения К1..К18 и S1..S4) и загружать его целиком вместо выполнения расширения исходного ключа шифрования.
- «Большие требования к памяти не позволяют использовать этот алгоритм в смарт-картах». Стоит сказать, что принципиальная возможность реализации алгоритма в смарт-картах была одним из важных условий при выборе нового стандарта шифрования США на конкурсе AES, т. е. данный недостаток алгоритма Blowfish можно считать серьезным.
Кроме того, стоит отметить и менее серьезные недостатки алгоритма:
- невозможность расширения ключа параллельно процессу шифрования;
- небольшой по современным меркам размер блока шифруемых данных.
Алгоритм Blowfish имеет и достаточно серьезные преимущества, в частности:
- как было сказано выше, высокая скорость шифрования на развернутом ключе;
- простота алгоритма, снижающая вероятность ошибок при его реализации;
- отсутствие известных успешных атак на полнораундовую версию алгоритма.
Однако стоит сказать, что известный эксперт Серж Воденэ обнаружил, что методом дифференциального криптоанализа r-раундового алгоритма Blowfish с известными таблицами замен можно вычислить значения К1..K18 при наличии 28r+1 выбранных открытых текстов. Это не актуально для полнораундовой версии алгоритма (и, тем более, для описанной выше полноценной версии алгоритма с вычисляемыми таблицами замен), но при использовании слабого ключа (Серж Воденэ обнаружил также у алгоритма Blowfish наличие слабых ключей, которые приводят к генерации слабых таблиц замен) выбранных открытых текстов требуется существенно меньше: 24r + 1[5].
Слабым называют ключ, для которого два элемента данного S-блока идентичны. До выполнения расширения ключа невозможно установить факт слабости ключа.
Не
известны факты успешного криптоанализа
алгоритма Blowfish. В целях безопасности
не следует реализовывать Blowfish с уменьшенным
числом раундов. Компания Kent Marsh Ltd. встроила
алгоритм Blowfish в свой продукт FolderBolt, предназначенный
для обеспечения защиты Microsoft Windows и Macintosh.
Кроме того, алгоритм входит в Nautilus и PGPfone
[4].
2 Криптографические системы
2.1 Основные понятия
Криптографическая система, или шифр представляет собой семейство Т обратимых преобразований открытого текста в шифрованный. Членам этого семейства можно взаимно однозначно сопоставить число k называемое ключом. Преобразование Тk определяется соответствующим алгоритмом и значением ключа k.
Ключ — конкретное значение некоторых параметров алгоритма криптографического преобразования, обеспечивающее выбор одного преобразования из семейства. Секретность ключа должна обеспечивать невозможность восстановление исходного текста по шифрованному.
Пространство ключей К - это набор возможных значений ключа. Обычно ключ представляет собой последовательный ряд букв алфавита. Следует отличать понятия ключ и пароль. Пароль также является секретной последовательностью букв алфавита, однако используется не для шифрования (как ключ), а для аутентификации субъектов.
Криптосистемы подразделяются на симметричные и асимметричные (или с открытым (публичным) ключом).
В симметричных криптосистемах для зашифрования и для расшифрования используется один и тот же ключ.
В системах с открытым ключом используются два ключа - открытый (публичный) и закрытый (секретный), которые математически связаны друг с другом. Информация зашифровывается с помощью открытого ключа, который доступен всем желающим, а расшифровывается с помощью закрытого ключа, известного только получателю сообщения. [3].
2.2
Требования к криптографическим
системам
Процесс криптографического закрытия данных может осуществляться как программно, так и аппаратно. Аппаратная реализация отличается существенно большей стоимостью, однако ей присущи и преимущества: высокая производительность, простота, защищенность и т.д. Программная реализация более практична, допускает известную гибкость в использовании.
Независимо от способа реализации для современных криптографических систем защиты информации сформулированы следующие общепринятые требования:
1. Знание алгоритма шифрования не должно синжатъ криптостойскости шифра. Это фундаментальное требование было сформулировано в XIX веке Керкхоффом и разделяет криптосистемы общего использования (алгоритм доступен потенциальному нарушителю) и ограниченного использования (алгоритм держится в секрете). Безусловно, все массово используемые криптосистемы должны отвечать этому требованию. Взлом шифров в системе сотовой связи GSM или защите дисков DVD от незаконного воспроизведения - наглядные примеры последствий, к которым может привести несоблюдение этого требования.
2. Зашифрованное сообщение должно поддаваться чтению только при наличии ключа. Используемое в программе MS Word 6.0/95 «шифрование» документа на самом деле только запрещало его открытие в данной программе. Сам же текст не шифровался и был доступен для чтения в любом текстовом редакторе.
3. Шифр должен быть стойким даже в случае если нарущителю известно достаточно большое количество исходных данных и соответствующих им зашифрованных данных.
4. Число операций, необходимых для расшифровывания информации путем перебора всевозможных ключей должно иметь строгую нижнюю оценку и должно либо выходить за пределы возможностей современных компьютеров (с учетом возможности организации сетевых вычислений) или требовать создания использования дорогих вычислительных систем.
5. Незначительное изменение ключа или исходного текста должно приводить к существенному изменению вида зашифрованного текста. Этому требованию не соответствуют практически все шифры донаучной криптографии.
6. Структурные элементы алгоритма шифрования должны быть неизменными.
7. Длина шифрованного текста должна быть равной длине исходного текста.
8. Дополнительные биты, вводимые в сообщение в процессе шифрования, должны быть полностью и надежно скрыты в шифрованном тексте.
9. Не должно быть простых и легко устанавливаемых зависимостей между ключами, последовательно используемыми в процессе шифрования.
10. Любой ключ из множества возможных должен обеспечивать равную криптостойкостъ. В этом случае принято говорить о линейном (однородном) пространстве ключей [3].
Как уже было сказано выше криптосистемы делятся на симметричные и ассиметричные.
2.3 Симметричные криптосистемы
Симметричные криптосистемы— способ шифрования, в котором для зашифрования и расшифровывания применяется один и тот же криптографический ключ. До изобретения схемы асимметричного шифрования единственным существовавшим способом являлось симметричное шифрование. Ключ алгоритма должен сохраняться в секрете обеими сторонами. Алгоритм шифрования выбирается сторонами до начала обмена сообщениями [6].
В настоящее время симметричные шифры — это:
- блочные шифры. Обрабатывают информацию блоками определённой длины (обычно 64, 128 бит), применяя к блоку ключ в установленном порядке, как правило, несколькими циклами перемешивания и подстановки, называемыми раундами. Результатом повторения раундов является лавинный эффект — нарастающая потеря соответствия битов между блоками открытых и зашифрованных данных.
- поточные шифры, в которых шифрование проводится над каждым битом либо байтом исходного (открытого) текста с использованием гаммирования. Поточный шифр может быть легко создан на основе блочного (например, ГОСТ 28147-89 в режиме гаммирования), запущенного в специальном режиме.
Большинство симметричных шифров используют сложную комбинацию большого количества подстановок и перестановок. Многие такие шифры исполняются в несколько (иногда до 80) проходов, используя на каждом проходе «ключ прохода». Множество «ключей прохода» для всех проходов называется «расписанием ключей» (key schedule). Как правило, оно создается из ключа выполнением над ним неких операций, в том числе перестановок и подстановок.
Типичным способом построения алгоритмов симметричного шифрования является сеть Фейстеля [смотреть раздел 4.1].
Достоинство симметричных криптосистем заключается в следующем:
- скорость (по данным Applied Cryptography — на 3 порядка выше)
- простота реализации (за счёт более простых операций)
- меньшая требуемая длина ключа для сопоставимой стойкости
- изученность (за счёт большего возраста)
Недостатки:
- сложность управления ключами в большой сети. Означает квадратичное возрастание числа пар ключей, которые надо генерировать, передавать, хранить и уничтожать в сети. Для сети в 10 абонентов требуется 45 ключей, для 100 уже 4950, для 1000 — 499500 и т. д.
- сложность обмена ключами. Для применения необходимо решить проблему надёжной передачи ключей каждому абоненту, так как нужен секретный канал для передачи каждого ключа обеим сторонам.
Для
компенсации недостатков
Важным свойством симметричных шифров является невозможность их использования для подтверждения авторства, так как ключ известен каждой стороне [6].
2.4 Ассиметричные криптосистемы
Криптографическая система с открытым ключом (или асимметричное шифрование, асимметричный шифр) — система шифрования и/или электронной цифровой подписи (ЭЦП), при которой открытый ключ передаётся по открытому (то есть незащищённому, доступному для наблюдения) каналу, и используется для проверки ЭЦП и для шифрования сообщения. Для генерации ЭЦП и для расшифрования сообщения используется секретный ключ. Криптографические системы с открытым ключом в настоящее время широко применяются в различных сетевых протоколах, в частности, в протоколах TLS и его предшественнике SSL (лежащих в основе HTTPS), в SSH. Также используется в PGP, S/MIME.
Идея
криптографии с открытым ключом очень
тесно связана с идеей
Но
сама односторонняя функция
Понять идеи и методы криптографии с открытым ключом помогает следующий пример — хранение паролей в компьютере. Каждый пользователь в сети имеет свой пароль. При входе, он указывает имя и вводит секретный пароль. Но если хранить пароль на диске компьютера, то кто-нибудь его может считать (особенно легко это сделать администратору этого компьютера) и получить доступ к секретной информации. Для решения задачи используется односторонняя функция. При создании секретного пароля в компьютере сохраняется не сам пароль, а результат вычисления функции от этого пароля и имени пользователя. Например, пользователь Алиса придумала пароль «Гладиолус». При сохранении этих данных вычисляется результат функции f(ГЛАДИОЛУС), пусть результатом будет строка РОМАШКА, которая и будет сохранена в системе. В результате файл паролей примет следующий вид:

- Криптографические методы защиты информации
- Криптографические методы защиты информации
- Криптографические методы защиты информации
- Криптографические методы защиты информации
- Криптографические методы защиты информации и их использование при работе в сети
- Криптографические методы защиты информации и их использование при работе в сети
- Криптографические методы защиты информации и их использование при работе в сети
- Кримінологічне дослідження: визначення, задачі, види, суб’єкти та об’єкти
- Криогенная техника
- Криогенные температуры
- Криотерапия и другие методы физической реабилитации спортсменов
- Криптоалгоритмы, формирование открытых ключей
- Криптографическая защита беспроводных сетей
- Криптографическая защита ЛВС