63796 (589054), страница 3
Текст из файла (страница 3)
При проектировании использовалась формальная схема DES (т.е. сеть Файсталя) с 16 раундами. Это упрощает анализ алгоритма и гарантирует отсутствие в нём неочевидных уязвимостей. Blowfish имеет большой запас прочности и поддаётся криптоанализу только в сильно ослабленных вариантах. Имеет небольшое пространство слабых ключей, вероятность выбора которых ничтожно мала.
Автор алгоритма, Брюс Шнайер, рекомендует использовать Blowfish во встраиваемых системах анализа, обработки и преобразования данных.
-
Потоковые шифры
RC4
Это потоковый шифр, широко применяющийся в различных системах защиты информации в компьютерных сетях (например, в протоколе SSL и для шифрования паролей в Windows NT). Шифр разработан компанией RSA Security Inc. Для его использования требуется лицензия.
Основные преимущества шифра — высокая скорость работы и переменный размер ключа. Типичная реализация выполняет 19 машинных команд на каждый байт текста.
В США длина ключа для использования внутри страны рекомендуется равной 128 битов. Алгоритм имеет специальный статус, который означает, что разрешено экспортировать реализации RC4 с длинной ключа до 40 бит.
RC4 в 10 раз быстрее DES и устойчив к криптоанализу. S-блок медленно изменяется при использовании.
WAKE
Алгоритм WAKE (Word Auto Key Encryption) выдаёт поток 32-битных слов, которые с помощью XOR могут быть использованы для получения шифротекста. Для генерации следующего слова ключа используется предыдущее слово шифротекста. Это быстрый алгоритм. Алгоритм использует S блок из 256 32-битовых значений. Этот S-блок обладает одним особым свойством: старший байт всех элементов представляет собой перестановку всех возможных байтов, а 3 младших байта случайны.
Самым ценным качеством WAKE является его скорость. WAKE чувствителен к вскрытию с выбранным открытым текстом или выбранным шифротекстом.
-
Алгоритмы шифрования с открытым ключом
Назначение их то же, что и у блочных шифров – сделать информацию непонятной всякому постороннему. Основное отличие состоит в использовании для операций шифрования двух разных, но взаимосвязанных ключей однонаправленного действия, один из которых может зашифровать информацию, но расшифровать её может только другой.
Благодаря этой особенности некоторые алгоритмы с открытым ключом совместно с хэш-функцией могут применяться и для другой цели: для выработки имитовставки (электронной цифровой подписи), подтверждающей авторство информации. Асимметричные алгоритмы основаны на ряде математических проблем (т.н. NP-полных задач), на которых и базируется их стойкость. Пока учёные-математики не найдут решение этих проблем, данные алгоритмы будут стойки. В этом заключается ещё одно отличие симметричного и асимметричного шифрования: стойкость первого является непосредственной и научно доказуемой, стойкость второго – феноменальной, т.е. основанной на некоем явлении, и научно не доказана (так же, как не доказана их нестойкость).
RSA
Это криптографическая система с открытым ключом, обеспечивающая оба механизма защиты: шифрование и цифровую подпись. Криптосистема RSA была разработана в 1977 году и названа в честь авторов: Рональда Ривеста, Ади Шамира и Леонарда Адельмана.
Принцип действия RSA состоит в следующем. Для начала сгенерируем пару ключей:
-
Возьмём два больших случайных простых числа p и q (т.е. числа делящихся только на себя и на 1) приблизительно равной разрядности, и вычислим их произведение
n = p∙q (1.7)
-
Выберем число e, взаимно простое с произведением (p–1)*(q–1). Взаимно простыми называют числа, у которых нет общих множителей кроме 1 (например, 15 и 28 – являются, 15 и 27 – нет: кроме 1 их общий множитель – 3).
-
Вычисляется число d, взаимно простое с n.
d = e-1mod((p–1)∙(q–1)) (1.8)
Числа e и n становятся открытым ключом. Число d – закрытым. Чтобы создать шифротекст c из сообщения m, необходимо выполнить:
c = me mod n (1.9)
Чтобы расшифровать полученный шифротекст, необходимо выполнить:
m = cd mod n (1.10)
Пока не найдены эффективные методы разложения чисел на множители, невозможно факторизовав n получить p и q, а, следовательно, и показатель закрытого ключа d. Таким образом, надежность криптосистемы RSA базируется на трудноразрешимой задаче разложения n на множители. Несмотря на фактическую сложность разложения больших чисел на множители, научно не доказано, что факторизация является трудной, или NP-полной, задачей. Доказательств обратного тоже никто не представил.
-
Выбор алгоритма шифрования
Выбирая алгоритм шифрования, который будет использоваться в создаваемой криптосистеме, прежде всего, необходимо обратить внимание на следующие характеристики алгоритмов:
-
Криптостойкость. Алгоритм должен быть тщательно проанализирован мировым криптографическим сообществом в течение длительного времени (не менее пяти лет лет) [1] и признан криптостойким к различным видам атак;
-
Длина ключа. Ключ, используемый в алгоритме шифрования, должен быть не короче 256 бит для алгоритмов симметричного шифрования и 2048 бит для алгоритмов с открытым ключом. Это сделано для того, чтобы шифр невозможно было вскрыть методом прямого перебора (грубой силой) в ХХI веке;
-
Скорость шифрования. Предполагается взаимодействие устройства с компьютером через полноскоростной интерфейс USB2.0.(12 Мбит/сек). Поэтому скорость шифрования данных по выбранному алгоритму должна быть настолько высокой, чтобы не возникало простоев при передаче данных на максимальной скорости.
-
Ресурсоемкость. Алгоритм должен быть оптимизирован для аппаратной реализации. Количество оперативной памяти и необходимая производительность микропроцессора, должны находиться в рамках, которые ограничивают микроконтроллеры общего применения.
Выбор осуществлялся из следующего набора алгоритмов: RC6, Rijndael(Рэндал), Serpent и Twofish, потоковые шифры RC4 и WAKE, алгоритм Blowfish, разработанный известным криптоаналитиком Брюсом Шнайером, а также алгоритм с открытым ключом – RSA.
Все вышеперечисленные алгоритмы в различной степени отвечают предъявляемым к ним требованиям. Для реализации RSA, необходимы операции (возведение в степень) над большими числами, для быстрого выполнения которых в проекте придется применять специализированные микросхемы. Алгоритмы с открытым ключом не применимы из-за низкой скорости. Потоковые шифры лучше не использовать. Они лучше подходят для шифрования потока информации. Например, пакетов информации в компьютерных сетях, либо разговоров по телефонной линии.
Поскольку разрабатываемое устройство предназначено для шифрования файлов, необходимо использовать блочный шифр, а не потоковый. Два кандидата на эту роль – Rijndael и Blowfish. Создатель Blowfish, Брюс Шнайер рекомендует этот шифр для использования в системах, построенных на основе микроконтроллера. Длина ключа используемого в Blowfish переменная, с верхним пределом 448 бит (в Rijndael максимум – 256 бит). К тому же на алгоритм Blowfish отсутствует лицензия и его можно свободно использовать. Поэтому в устройстве будет реализован алгоритм Blowfish.
-
Описание алгоритма Blowfish
Blowfish – это алгоритм, предназначенный для реализации в микроконтроллерах [1]. При проектировании Blowfish использовались следующие критерии:
-
Скорость. Blowfish шифрует данные на 32-битовых микропроцессорах со скоростью 26 тактов на байт.
-
Компактность. Blowfish может работать менее, чем в 5 Кбайт памяти.
-
Простота. Blowfish использует только простые операции: сложение, XOR и выборка из таблицы по 32-битовому операнду. Анализ его схемы несложен, это уменьшает количество ошибок при реализации.
-
Настраиваемая безопасность. Длина ключа Blowfish переменна и может достигать 448 битов.
Blowfish оптимизирован для тех приложений, в которых нет частой смены ключей. При реализации на 32-битовых микропроцессорах с большим кэшем данных, Blowfish заметно быстрее DES. Blowfish не подходит для использования в приложениях с частой сменой ключей, например, при коммутации пакетов, или для использования в качестве однонаправленной хэш-функции.
Blowfish представляет собой 64-битовый блочный шифр с ключом переменной длины. Алгоритм состоит из двух частей: развертывание ключа и шифрование данных. Развертывание ключа преобразует ключ длиной до 448 битов в несколько массивов подключей, общим объемом 4168 байтов.
Шифрование по алгоритму Blowfish состоит из функции преобразования данных, последовательно выполняемой 16 раз. Каждый этап состоит из зависимой от ключа перестановки и зависимой от ключа и данных подстановки. Используются только сложения и XOR 32-битовых слов. Единственными дополнительными операциями на каждом этапе являются четыре извлечения данных из индексированного массива.
В Blowfish используется много подключей. Эти подключи должны быть рассчитаны до начала шифрования или дешифрирования данных.
P-массив состоит из 18-ти 32-битовых подключей:
Каждый из четырех 32-битовых S-блоков содержит 256 элементов:
Метод, используемый при вычислении этих подключей, описан в этом разделе ниже.
Рис. 1.7 – Алгоритм Blowfish
Blowfish является сетью Фейстела (Feistel), состоящей из 16 этапов. На вход подается 64-битовый элемент данных x.
Алгоритм шифрования:
-
Элемент x разбивается на две 32-битовых половины:
и
;
-
Для этапов с первого по шестнадцатый, выполняется:
(1.11)
(1.12)
Переставить и
(кроме последнего этапа);
-
В последнем этапе, производится:
(1.13)
(1.14)
-
Объединяются элементы
и
;
Рис. 1.8 – Функция F
Функция F (рис.1.8) представляет собой последовательность следующих действий:
-
Разделить
на четыре 8-битовых части: a, b, c и d;
-
Выполнить над a,b,c,d :
(1.15)
Дешифрирование выполняется также, как и шифрование, но используются в обратном порядке.
В реализациях Blowfish, для которых требуется очень большая скорость, цикл должен быть развернут, а все ключи должны храниться в КЭШе данных.
Подключи рассчитываются с помощью специального алгоритма. Вот какова точная последовательность действий.
-
Сначала P-массив, а затем четыре S-блока по порядку инициализируются фиксированной строкой. Эта строка состоит из шестнадцатеричных цифр
.
-
Выполняется XOR P1 с первыми 32 битами ключа, XOR P2 со следующими 32 битами ключа, и так далее для всех битов ключа (до P18). Используется циклически, пока для всего P-массива не будет выполнена операция XOR с битами ключа.
-
Используя подключи, полученные на этапах (1) и (2), алгоритмом Blowfish шифруется строка из одних нулей.
-
P1 и P2 заменяются результатом этапа (3).
-
Результат этапа (3) шифруется с помощью алгоритма Blowfish и измененных подключей.
-
P3 и P4 заменяются результатом этапа (5).
-
Далее в ходе процесса все элементы P-массива и затем по порядку все четыре S-блока заменяются выходом постоянно меняющегося алгоритма Blowfish.
Серж Воденэ (Serge Vaudenay) исследовал Blowfish с известными S-блоками и r этапами. Дифференциальный криптоанализ может раскрыть P-массив с помощью 28r+1 выбранных открытых текстов. Для некоторых слабых ключей, которые генерируют плохие S-блоки (вероятность выбора такого ключа составляет 1 к 214), это же вскрытие раскрывает P-массив с помощью всего 24r+1. При неизвестных S-блоках это вскрытие может обнаружить использование слабого ключа, но не может определить сам ключ (ни S-блоки, ни P-массив). Это вскрытие эффективно только против вариантов с уменьшенным числом этапов и совершенно бесполезно против 16-этапного Blowfish.