безопасность


Шифрование. Часть 3

Окончание. Начало в КГ №№ 24, 25

Напомню нашим читателям, что в предыдущих частях статьи мы рассмотрели такие алгоритмы симметричного шифрования, как ГОСТ 28147-89, DES, TripleDES (3DES) и AES (Rijndael). Кратко рассмотрим некоторые другие алгоритмы симметричного шифрования.

Blowfish. Blowfish представляет собой 64-битный блочный шифр, разработанный Шнайером (Schneier) в 1993 году. Этот шифр, как и многие другие, основан на алгоритме сети Фейштеля (Feistel). Отдельный раунд шифования этого алгоритма состоит из зависимой от ключа перестановки и зависимой от ключа с данными замены. Все операции основаны на операциях XOR и прибавлениях к 32-битным словам (XORs and additions on 32-bit words). Ключ имеет переменную длину (максимальная длина 448 бит) и используется для генерации нескольких подключевых массивов (subkey arrays). Шифр был создан специально для 32-битных машин и существенно быстрее ранее нами рассмотренного DES.

IDEA (International Data Encryption Algorithm) был разработан К. Лейем (Lai) и Д. Месси (Massey) в конце 80-х годов. Это шифр, состоящий из 64-битных повторяющихся блоков со 128-битным ключом и восемью раундами. Следует отметить, что, в отличие от ранее нами рассмотренных алгоритмов шифрования, IDEA не основан на сети Фейштеля, хотя процесс дешифрования аналогичен процессу шифрования. IDEA был сконструирован с учетом его легкого воплощения как программно, так и аппаратно. Ко всему прочему, безопасность IDEA основывается на использовании трех несовместимых типов арифметических операций над 16-битными словами. Один из принципов создания IDEA заключался в том, чтобы максимально затруднить его дифференциальный криптоанализ, что в настоящее время выражается отсутствием алгебраически слабых мест алгоритма. Даже несмотря на то, что найденный неким «Daemen» обширный класс (2^51) слабых ключей теоретически может скомпрометировать алгоритм, IDEA остается достаточно надежным алгоритмом, т.к. существует 2^128 возможных вариантов ключей, что делает его взлом трудноосуществимым.

RC5 представляет собой довольно быстрый блочный шифр, разработанный Ривестом специально для «RSA Data Security». Этот алгоритм параметричен, т.е. его блок, длина ключа и количество проходов (раундов) переменны. Размер блока может равняться 32, 64 или 128 битам. Количество проходов может варьироваться от 0 до 2048 бит. Параметричность подобного рода делает RC5 необычайно гибким и эффективным алгоритмом в своем классе. Исключительная простота RC5 делает его простым в использовании. RC5 с размером блока 64 бита и 12 или более проходов обеспечивает хорошую стойкость против дифференциального и линейного криптоанализов.

Асимметричное шифрование

В отличие от алгоритмом симметричного шифрования, где используется один и тот же ключ как для расшифровки, так и для зашифровки, алгоритмы асимметричного шифрования используют открытый (для зашифровки) и закрытый, или секретный (для расшифровки), ключи. На практике один ключ называют секретным, а другой — открытым. Секретный ключ содержится в тайне владельцем пары ключей. Открытый ключ передается публично в открытом виде. Следует отметить тот факт, что, если у абонента имеется один из пары ключей, то другой ключ вычислить невозможно.

Открытый ключ вычисляется из секретного: k1 = f(k2). Асимметричные алгоритмы шифрования основаны на применении однонаправленных функций. Согласно определению, функция y = f(x) является однонаправленной, если ее легко вычислить для всех возможных вариантов x и для большинства возможных значений y достаточно сложно вычислить такое значение x, при котором y = f(x). Примером однонаправленной функции может служить умножение двух больших чисел: N = S*G. Само по себе с точки зрения математики такое умножение представляет собой простую операцию. Однако обратная операция (разложение N на два больших множителя), называемая также факторизацией, по современным временным оценкам представляет собой достаточно сложную математическую задачу. Ну что ж, рассмотрим некоторые из алгоритмов асимметричного шифрования.

Алгоритм Диффи-Хеллмана. В 1976 г. Уитфилд Диффи (Whitfield Diffie) и Мартин Хеллман (Martin Hellman) разработали свою систему шифрования с открытым ключом. Система Диффи-Хеллмана (Diffie-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 абоненту P1.
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). Открытый ключ k1 вычисляется из соотношения (k2*k1) = 1 mod F(N), и для этого используется обобщенный алгоритм Евклида (алгоритм вычисления наибольшего общего делителя). Зашифровка блока данных M по алгоритму RSA выполняется следующим образом:

C = M [в степени k1] mod N. Поскольку в реальной криптосистеме с использованием RSA число k1 весьма велико (в настоящее время его размерность может доходить до 2048 бит), прямое вычисление M [в степени k1] нереально. Для его получения применяется комбинация многократного возведения M в квадрат с перемножением результатов. Обращение данной функции при больших размерностях неосуществимо; иными словами, невозможно найти M по известным C, N и k1. Однако, имея секретный ключ k2, при помощи несложных преобразований можно вычислить M = Ck2 mod N. Очевидно, что, помимо собственно секретного ключа, необходимо обеспечивать секретность параметров R и S. Если злоумышленник добудет их значения, то сможет вычислить и секретный ключ k2.

В настоящее время криптосистема RSA используется в самых различных продуктах, на различных платформах и во многих отраслях. Достаточно упомянуть ее использование в операционных системах Microsoft, Apple, Sun и Novell, чтобы представить всю грандиозность RSA. В аппаратной составляющей алгоритм RSA широко используется в защищенных телефонах, на сетевых платах Ethernet, на смарт-картах, в криптографическом оборудовании Zaxus (Racal). Ко всему прочему, алгоритм входит в состав всех основных протоколов для защищенных коммуникаций Internet, в том числе S/MIME, SSL и S/WAN, а также используется во многих правительственных учреждениях, государственных лабораториях и университетах. На осень 2000 года технологии с применением алгоритма RSA были лицензированы более чем 700 компаниями.

Алгоритм Эль-Гамаля. Эль-Гамаль (Taher Elgamal) разработал вариант системы Диффи-Хеллмана. Он усовершенствовал алгоритм Диффи-Хеллмана и получил один алгоритм для шифрования и один для обеспечения аутентификации. Алгоритм Эль-Гамаля не был запатентован (в отличие от RSA) и, таким образом, стал более дешевой альтернативой, так как не требовалась уплата лицензионных взносов. Так как этот алгоритм базируется на системе Диффи- Хеллмана, то его стойкость обеспечивается сложностью решения все той же задачи дискретного логарифмирования.

Алгоритм цифровой подписи. Алгоритм Digital Signature Algorithm (DSA) был разработан правительством США как стандартный алгоритм для цифровых подписей (для получения дополнительной информации по цифровым подписям обратитесь к следующему параграфу). Данный алгоритм базируется на системе Эль-Гамаля, но позволяет осуществлять только аутентификацию. Конфиденциальность этим алгоритмом не обеспечивается.

Шифрование с использованием эллиптических кривых. Эллиптические кривые были предложены для использования в системах шифрования в 1985 г. Системы шифрования с использованием эллиптических кривых (ECC) основываются на отличной от факторизации или дискретного логарифмирования математической задаче. Данная задача заключается в следующем: имея две точки A и B на эллиптической кривой, так, что A = kB, очень трудно определить целое число k. Несмотря на некоторую “экзотичность”, использование ECC перед алгоритмом RSA или Диффи-Хеллмана в ряде случаев дает существенное преимущество. Самым большим из таких преимуществ является то, что ключи могут иметь существенно меньшую длину (по причине сложности задачи), и это без потери стойкости! Как результат — вычисления производятся быстрее с сохранением того же уровня безопасности. Так, безопасность обеспечиваемая 160-битным ключом ECC, может быть приравнена к безопасности 1024-битного ключа RSA.

Подводя итог

На сегодняшний день в сфере ИБ широко представлены системы как с симметричным шифрованием, так и с асимметричным. Каждый из алгоритмов имеет свои преимущества и недостатки, о которых нельзя не сказать. Основной недостаток симметричного шифрования заключается в необходимости публичной передачи ключей — "из рук в руки". На этот недостаток нельзя не обратить внимание, т.к. при такой системе становится практически невозможным использование симметричного шифрования с неограниченным количеством участников. В остальном же алгоритм симметричного шифрования можно считать достаточно проработанным и эффективным с минимальным количеством недостатков, особенно на фоне асимметричного шифрования. Недостатки последнего не столь значительны, чтобы говорить о том, что алгоритм чем-то плох, но тем не менее…

Первый недостаток асимметричного шифрования заключается в низкой скорости выполнения операций зашифровки и расшифровки, что обусловлено необходимостью обработки ресурсоемких операций. Как следствие — требования к аппаратной составляющей такой системы часто бывают неприемлемы. Другой недостаток уже чисто теоретический и заключается в том, что математически криптостойкость алгоритмов асимметричного шифрования пока еще не доказана. Дополнительные проблемы возникают и при защите открытых ключей от подмены, ведь достаточно просто подменить открытый ключ легального пользователя, чтобы впоследствии легко расшифровать его своим секретным ключом.

Но какими бы недостатками и преимуществами ни обладало асимметричное и симметричное шифрование, необходимо отметить лишь то, что наиболее совершенные решения — те, которые удачно сочетают в себе алгоритмы симметричного и асимметричного шифрования.



Олег Бойцев, security-expert, boytsev_om@mail.ru

© компьютерная газета