Дипломная работа: Устройство аппаратного шифрования данных с интерфейсом USB
Принцип действия RSA состоит в следующем. Для начала сгенерируем пару
ключей:
1. Возьмём два больших случайных простых
числа p и q (т.е. числа делящихся только на себя и
на 1) приблизительно равной разрядности, и вычислим их произведение
n = p∙q
(1.7)
2. Выберем число e, взаимно простое с произведением (p–1)*(q–1).
Взаимно простыми называют числа, у которых нет общих множителей кроме 1
(например, 15 и 28 – являются, 15 и 27 – нет: кроме 1 их общий множитель – 3).
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.4.3
Выбор алгоритма шифрования
Выбирая алгоритм шифрования, который
будет использоваться в создаваемой криптосистеме, прежде всего, необходимо
обратить внимание на следующие характеристики алгоритмов:
·
Криптостойкость.
Алгоритм должен быть тщательно проанализирован мировым криптографическим
сообществом в течение длительного времени (не менее пяти лет лет) [1] и признан
криптостойким к различным видам атак;
·
Длина ключа.
Ключ, используемый в алгоритме шифрования, должен быть не короче 256 бит для
алгоритмов симметричного шифрования и 2048 бит для алгоритмов с открытым
ключом. Это сделано для того, чтобы шифр невозможно было вскрыть методом
прямого перебора (грубой силой) в ХХI веке;
·
Скорость
шифрования. Предполагается взаимодействие устройства с компьютером через
полноскоростной интерфейс USB2.0.(12 Мбит/сек). Поэтому скорость шифрования
данных по выбранному алгоритму должна быть настолько высокой, чтобы не
возникало простоев при передаче данных на максимальной скорости.
·
Ресурсоемкость.
Алгоритм должен быть оптимизирован для аппаратной реализации. Количество
оперативной памяти и необходимая производительность микропроцессора, должны
находиться в рамках, которые ограничивают микроконтроллеры общего применения.
Все вышеперечисленные алгоритмы в
различной степени отвечают предъявляемым к ним требованиям. Для реализации RSA,
необходимы операции (возведение в степень) над большими числами, для быстрого
выполнения которых в проекте придется применять специализированные микросхемы.
Алгоритмы с открытым ключом не применимы из-за низкой скорости. Потоковые шифры
лучше не использовать. Они лучше подходят для шифрования потока информации.
Например, пакетов информации в компьютерных сетях, либо разговоров по
телефонной линии.
Поскольку разрабатываемое устройство
предназначено для шифрования файлов, необходимо использовать блочный шифр, а не
потоковый. Два кандидата на эту роль – Rijndael и Blowfish. Создатель Blowfish,
Брюс Шнайер рекомендует этот шифр для использования в системах, построенных на
основе микроконтроллера. Длина ключа используемого в Blowfish переменная, с
верхним пределом 448 бит (в Rijndael максимум – 256 бит). К тому же на алгоритм
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, для которых
требуется очень большая скорость, цикл должен быть развернут, а все ключи
должны храниться в КЭШе данных.
Подключи рассчитываются с помощью
специального алгоритма. Вот какова точная последовательность действий.
1.
Сначала P-массив,
а затем четыре S-блока по порядку инициализируются фиксированной строкой. Эта
строка состоит из шестнадцатеричных цифр .
2.
Выполняется XOR P1
с первыми 32 битами ключа, XOR P2 со следующими 32 битами ключа, и
так далее для всех битов ключа (до P18). Используется циклически,
пока для всего P-массива не будет выполнена операция XOR с битами ключа.
3.
Используя
подключи, полученные на этапах (1) и (2), алгоритмом Blowfish шифруется строка
из одних нулей.
4.
P1 и P2
заменяются результатом этапа (3).
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 |