используется для генерации нескольких подключевых массивов (subkey arrays). Шифр был создан специально для 32-битных машин и существенно быстрее ранее рассмотренного нами алгоритма DES.
IDEA (International Data Encryption Algorithm) был разработан К. Лейем (Lai) и Д. Месси (Massey) в конце 1980-х годов. Это шифр, состоящий из 64-битных повторяющихся блоков со 128-битным ключом и восемью раундами. Следует отметить, что, в отличие от ранее нами рассмотренных алгоритмов шифрования, IDEA не основан на сети Фейштеля, хотя процесс дешифрования аналогичен процессу шифрования. IDEA был сконструирован с учетом его легкого воплощения как программно, так и аппаратно. Ко всему прочему безопасность IDEA основывается на использовании трех несовместимых типов арифметических операций над 16-битными словами.
Один из принципов создания IDEA заключался в том, чтобы максимально затруднить его дифференциальный криптоанализ, что в настоящее время выражается отсутствием алгебраически слабых мест алгоритма. Даже не смотря на то что найденный неким 'Daemen' обширный класс (251) слабых ключей теоретически может скомпрометировать алгоритм, IDEA остается достаточно надежным алгоритмом, так как существует 2128 возможных вариантов ключей, что делает его взлом трудно осуществимым.
RC5 представляет собой довольно быстрый блочный шифр, разработанный Ривестом (Ronald Linn Rivest) специально для «RSA Data Security». Этот алгоритм параметричен, то есть его блок, длинна ключа и количество проходов (раундов) переменны.
Размер блока может равняться 32, 64 или 128 бит. Количество проходов может варьироваться от 0 до 2048 бит. Параметричность подобного рода делает RC5 необычайно гибким и эффективным алгоритмом в своем классе.
Исключительная простота RC5 делает его простым в использовании. RC5 с размером блока в 64 бита и 12 или более проходами обеспечивает хорошую стойкость против дифференциального и линейного криптоанализов.
Асимметричное шифрование
В отличие от алгоритмов симметричного шифрования, где используется один и тот же ключ как для расшифровки, так и для зашифровки, алгоритмы асимметричного шифрования используют открытый (для зашифровки) и закрытый, или секретный (для расшифровки), ключи.
На практике один ключ называют секретным, а другой – открытым. Секретный ключ содержится в тайне владельцем пары ключей. Открытый ключ передается публично в открытом виде. Следует отметить тот факт, что если у абонента имеется один из пары ключей, то другой ключ вычислить невозможно.
Открытый ключ вычисляется из секретного: kl = f(k2). Асимметричные алгоритмы шифрования основаны на применении однонаправленных функций. Согласно определению функция y = f(x) является однонаправленной, если ее можно легко вычислить для всех возможных вариантов x, а для большинства возможных значений y достаточно сложно вычислить такое значение x, при котором y = f(x) .
Примером однонаправленной функции может служить умножение двух больших чисел: N = S х G. Само по себе, с точки зрения математики, такое умножение представляет собой простую операцию. Однако обратная операция (разложение N на два больших множителя), называемая также факторизацией, по современным временным оценкам представляет собой достаточно сложную математическую задачу.
Ну что ж, рассмотрим некоторые из алгоритмов асимметричного шифрования.
Алгоритм Диффи—Хеллмана. В 1976 году Уитфилд Диффи (Whitfield Diffie) и Мартин Хеллман (Martin Hellman) разработали свою систему шифрования с открытым ключом. Система Диффи— Хеллмана разрабатывалась для решения проблемы распространения ключей при использовании систем шифрования с секретными ключами. Идея заключалась в том, чтобы применять безопасный метод согласования секретного ключа без передачи ключа каким-либо другим способом. Следовательно, необходимо было найти безопасный способ получения секретного ключа с помощью того же метода связи, для которого разрабатывалась защита. Суть алгоритма Диффи—Хеллмана заключается в следующем. Предположим, что двум точкам (S1 и S2) требуется установить между собой безопасное соединение, для которого необходимо согласовать ключ шифрования.
¦ S1 и S2 принимают к использованию два больших целых числа a и b, причем 1 < a < b.
¦ S1 выбирает случайное число i и вычисляет I = ai ? mod b. S1 передает I абоненту S2.
¦ S2 выбирает случайное число j и вычисляет J = aj ? mod b. S2 передает J абоненту S1 .
¦ S1 вычисляет k1 = Ji ? mod b.
¦ S2 вычисляет k2 = Ij ? mod b.
Имеем k1 = k2 = ai ? j х mod b, следовательно, k1 и k2 являются секретными ключами, предназначенными для использования при передаче других данных.
Даже если допустить, что злоумышленнику каким-то образом удастся прослушать передаваемый трафик, то ему будут известны a, b, I и J. Тем не менее остаются в секрете i и j. Уровень безопасности системы зависит от сложности нахождения i при известном I = ai ? mod b. Эта задача называется задачей дискретного логарифмирования и считается очень сложной (то есть с помощью современного вычислительного оборудования ее решить практически невозможно), если числа очень велики. Следовательно, a и b необходимо выбирать очень тщательно. Например, оба числа b и (b – 1)/2 должны быть простыми и иметь длину не менее 512 бит. Рекомендуемая длина чисел составляет 1024 бита.
Алгоритм RSA был разработан в 1978 году тремя соавторами и получил свое название по первым буквам фамилий разработчиков (Rivest, Shamir, Adleman). В основе стойкости алгоритма стоит сложность факторизации больших чисел и вычисления дискретных логарифмов. Основной параметр алгоритма RSA – модуль системы N, по которому проводятся все вычисления в системе, а N = R х S (R и S – секретные случайные простые большие числа, обычно одинаковой размерности).
Секретный ключ k2 выбирается случайным образом и должен соответствовать следующим условиям: 1 < k2 < F(N) и НОД (k2, F(N))= 1, где НОД – наибольший общий делитель. Иными словами, k1 должен быть взаимно простым со значением функции Эйлера F(N) , причем последнее равно количеству положительных целых чисел в диапазоне от 1 до N, взаимно простых с N, и вычисляется как F(N) = (R – 1) ? (S – 1) .
Открытый ключ kl вычисляется из соотношения (k2 х kl) = 1 ? mod F(N). Для этого используется обобщенный алгоритм Евклида (алгоритм вычисления наибольшего общего делителя). Зашифровка блока данных M по алгоритму RSA выполняется следующим образом: C = Mkl ? mod N. Поскольку в реальной криптосистеме с использованием RSA число k1 весьма велико (в настоящее время его размерность может доходить до 2048 бит), прямое вычисление Mk1 нереально. Для его получения применяется комбинация многократного возведения M в квадрат с перемножением результатов. Обращение данной функции при больших размерностях неосуществимо; иными словами, невозможно найти M по известным C, N и kl. Однако, имея секретный ключ k2, при помощи несложных преобразований можно вычислить M = Ck2 ? mod N. Очевидно, что, помимо собственно секретного ключа, необходимо обеспечивать секретность параметров R и S. Если злоумышленник добудет их значения, то сможет вычислить и секретный ключ k2.
В настоящее время криптосистема RSA применяется в самых различных продуктах, на различных платформах и во многих отраслях. Достаточно вспомнить ее использование в операционных системах Microsoft, Apple, Sun и Novell, чтобы представить всю 'грандиозность' RSA. В аппаратной составляющей алгоритм RSA широко используется в защищенных телефонах, на сетевых платах Ethernet, на смарт-картах, в криптографическом оборудовании Zaxus (Racal). Ко всему прочему, алгоритм входит в состав всех основных протоколов для защищенных коммуникаций Интернет, в том числе S/MIME, SSL и S/WAN, а также используется во многих правительственных учреждениях, государственных лабораториях и университетах. На осень 2000 года технологии с применением алгоритма RSA были лицензированы более чем 700 компаниями.
Алгоритм Эль-Гамаля. Эль-Гамаль (Taher Elgamal) разработал вариант системы Диффи—Хеллмана. Он усовершенствовал этот алгоритм и получил один алгоритм для шифрования и один для обеспечения аутентификации. Алгоритм Эль-Гамаля не был запатентован (в отличие от RSA) и таким образом стал более дешевой альтернативой, так как не требовалась уплата лицензионных взносов. Поскольку этот алгоритм базируется на системе Диффи—Хеллмана, то его стойкость обеспечивается сложностью решения все той же задачи дискретного логарифмирования.
Алгоритм цифровой подписи (Digital Signature Algorithm). Алгоритм DSA был