- •Требования к алгоритмам шифрования
- •Симметричные криптосистемы
- •Блочные шифры
- •Сеть Файстеля
- •Общая характеристика гост 28147-89
- •Ключевая информация
- •Основной шаг криптопреобразования
- •Базовые циклы криптографических преобразований.
- •Основные режимы шифрования
- •Выработка имитовставки к массиву данных
- •Криптографическая стойкость гост 28147-89
- •Общая схема алгоритма.
- •Rijndael (aes). Основные параметры
- •Rijndael. Общая схема
- •Нелинейное преобразование
- •Выработка ключевых элементов
- •Основные требования к алгоритмам асимметричного шифрования
- •Криптоанализ алгоритмов с открытым ключом
- •Основные способы использования алгоритмов с открытым ключом
- •Алгоритм обмена ключами Диффи-Хеллмана
- •Протокол генерации ключей алгоритма Диффи-Хеллмана
- •Алгоритм rsa
- •Электронная подпись rsa
- •Алгоритм ЭльГамаля
- •Требования к хэш-функциям
- •Функция sha-1
- •Функция хэширования гост р 34.11 – 94
- •Электронная цифровая подпись
- •Прямая и арбитражная цифровые подписи
- •Симметричное шифрование, арбитр не видит сообщение:
- •Шифрование открытым ключом, арбитр не видит сообщение:
- •Российский стандарт цифровой подписи гост 34.10
- •Код аутентичности сообщения
Выработка ключевых элементов
Размер ключа в шифре Rijndael равен 128, 192 или 256 бит. Размер ключевого элемента, используемого на раунде, совпадает с размером блока и также равен 128, 192 или 256 бит независимо от размера ключа. Число раундов шифрования находится в пределах от 10 до 14. Массив ключевых элементов вырабатывается из ключа шифрования с использованием процедуры "развертывания" ключа.
Создание ключей раунда
Ключи раунда получаются из ключа шифрования с помощью преобразования, состоящего из двух компонентов: расширение ключа и выбор ключа раунда. Основной принцип состоит в следующем:
Общее число битов ключа раунда равно длине блока, умноженной на количество раундов плюс 1. Например, для длины блока 128 бит и 10 раундов необходимо 1408 битов ключа раунда.
Ключ шифрования расширяется процедурой ExpandedKey.
Ключи раунда получаются из этой процедуры следующим способом: первый ключ раунда состоит из первых Nb слов, второй состоит из следующих Nb слов и т.д.
Расширение ключа
Expanded Key является линейным массивом четырехбайтных слов и обозначается как W [Nb * (Nr + 1)]. Первые Nk слов состоят из ключа шифрования. Остальные слова определяются рекурсивно.
Другие возможности использования криптоалгоритма
Алгоритм Rijndael может применяться для вычисления кода аутентичности сообщения MAK – message authentication code (аналог режима выработки имитовставки в ГОСТ 28147-89)). Для этого следует использовать блочный алгоритм в режиме СВС-МАС.
Rijndael может использоваться в качестве итерационной хэш-функции. Рекомендуется использовать длину блока и ключа, равной 256 битам. Блок сообщения подается на вход в качестве ключа шифрования.
Возможно использование алгоритма в качестве генератора псевдослучайных чисел.
Основные требования к алгоритмам асимметричного шифрования
Наиболее перспективными системами криптографической защиты данных сегодня считаются асимметричные криптосистемы, называемые также системами с открытым ключом. Их суть состоит в том, что ключ, используемый для зашифрования, отличен от ключа расшифрования. При этом ключ зашифрования не секретен и может быть известен всем пользователям системы. Однако расшифрование с помощью известного ключа зашифрования невозможно. Для расшифрования используется специальный, закрытый ключ, который хранится в секрете. При этом знание открытого ключа не позволяет определить закрытый ключ. Таким образом, расшифровать сообщение может только его получатель, владеющий этим закрытым ключом.
Суть криптографических систем с открытым ключом сводится к тому, что в них используются так называемые необратимые функции (их ещё называют односторонними или однонаправленными), которые характеризуются следующим свойством: для данного исходного значения с помощью некоторой известной функции довольно легко вычислить результат, но рассчитать по этому результату исходное значение чрезвычайно сложно.
Алгоритмы шифрования с открытым ключом разрабатывались для того, чтобы решить две наиболее трудные задачи, возникшие при использовании симметричного шифрования.
Первой задачей является распределение ключа. При симметричном шифровании требуется, чтобы обе стороны уже имели общий ключ, который каким-то образом должен быть им заранее передан. У.Диффи, один из основоположников шифрования с открытым ключом, заметил, что это требование отрицает всю суть криптографии, а именно возможность поддерживать всеобщую секретность при коммуникациях.
Второй задачей является необходимость создания таких механизмов, при использовании которых невозможно было бы подменить кого-либо из участников, т.е. нужна цифровая подпись. При использовании коммуникаций для решения широкого круга задач, например в коммерческих и частных целях, электронные сообщения и документы должны иметь эквивалент подписи, содержащейся в бумажных документах. Необходимо создать метод, при использовании которого все участники будут убеждены, что электронное сообщение было послано конкретным участником. Это более сильное требование, чем аутентификация.
У. Диффи и М. Хеллман достигли значительных результатов, предложив способ решения обеих задач, который радикально отличается от всех предыдущих подходов к шифрованию.
Основные побудительные мотивы развития асимметричной криптографии можно сгруппировать следующим образом (приведенная ниже классификация отражает наиболее существенные из них и не претендует на то, чтобы быть исчерпывающей):
потребности развивающихся телекоммуникационных сетей самого разнообразного применения, в том числе имеющих сложную топологию;
потребности обеспечения информационной безопасности в глобальной сети Internet;
потребности банковских систем (в том числе использующих интеллектуальные карты).
При описании симметричного шифрования и шифрования с открытым ключом будем использовать следующую терминологию. Ключ, используемый в симметричном шифровании, будем называть секретным ключом. Два ключа, используемые при шифровании с открытым ключом, будем называть открытым ключом и закрытым ключом. Закрытый ключ держится в секрете, но называть его будем закрытым ключом, а не секретным, чтобы избежать путаницы с ключом, используемым в симметричном шифровании. Закрытый ключ будем обозначать KR, открытый ключ – KU.
Будем предполагать, что все участники имеют доступ к открытым ключам друг друга, а закрытые ключи создаются локально каждым участником и, следовательно, распределяться не должны.
В любое время участник может изменить свой закрытый ключ и опубликовать составляющий ему пару открытый ключ, заменив им старый открытый ключ.
У. Диффи и М. Хеллман описывают требования, которым должен удовлетворять алгоритм шифрования с открытым ключом.
Вычислительно легко создавать пару (открытый ключ KU , закрытый ключ KR).
Вычислительно легко, имея открытый ключ и незашифрованное сообщение М, создать соответствующее зашифрованное сообщение:
С = ЕKU [М]
Вычислительно легко дешифровать сообщение, используя закрытый ключ:
М = DKR[C] = DKR[EKU[M]]
Вычислительно невозможно, зная открытый ключ KU, определить закрытый ключ KR.
Вычислительно невозможно, зная открытый ключ KU и зашифрованное сообщение С, восстановить исходное сообщение М.
Можно добавить шестое требование, хотя оно не выполняется для всех алгоритмов с открытым ключом:
Шифрующие и дешифрующие функции могут применяться в любом порядке:
М = ЕKU[DKR[M]]
Это достаточно сильные требования, которые вводят понятие односторонней функции с люком. Односторонней функцией называется такая функция, у которой каждый аргумент имеет единственное обратное значение, при этом вычислить саму функцию легко, а вычислить обратную функцию трудно.
Y = f(X) – легко |
X = f-1(Y) – трудно |
Обычно "легко" означает, что проблема может быть решена за полиномиальное время от длины входа. Таким образом, если длина входа имеет n битов, то время вычисления функции пропорционально na, где а – фиксированная константа. Таким образом, говорят, что алгоритм принадлежит классу полиномиальных алгоритмов Р. Термин "трудно" означает более сложное понятие. В общем случае будем считать, что проблему решить невозможно, если усилия для ее решения больше полиномиального времени от величины входа. Например, если длина входа n битов, и время вычисления функции пропорционально 2n, то это считается вычислительно невозможной задачей.
Односторонняя функция с люком, подобно односторонней функции, легко вычислить в одном направлении и трудно вычислить в обратном направлении до тех пор, пока недоступна некоторая дополнительная информация. При наличии этой дополнительной информации инверсию можно вычислить за полиномиальное время. Таким образом, односторонняя функция с люком принадлежит семейству односторонних функций fk таких, что
Y = fk(X) – легко, если k и Х известны |
X = fk-1(Y) – легко, если k и Y известны |
Х = fk-1(Y) – трудно, если Y известно, но k неизвестно |
Мы видим, что разработка конкретного алгоритма с открытым ключом зависит от открытия соответствующей односторонней функции с люком.
