Денис Назаренко,
специалист по безопасности фирмы SprigSoft
denis@sprigsoft.com

Каждый пользователь компьютера, сам того не подозревая, так или иначе использует механизмы криптозащиты. Ядро этих механизмов - алгоритмы шифрования, которых на сегодняшний день насчитывается немало (табл. 1). Обычно пользователю нет необходимости изучать все тонкости криптографической науки, но, безусловно, полезно знать, как "устроены" эти алгоритмы и каковы их сравнительные характеристики.

Таблица 1. Алгоритмы, используемые в криптографии

Симметричные С открытым ключом Хэш-функции
с блочным шифрованием с поточным шифрованием    
DES, New DES, AES, Blowfish, RC2, CAST, ГОСТ 28147-89 RC4, ARC4, DESS, IBAA, JEROBOAM, ISAAC, Rabbit RSA, ECDH MD2, MD5, SHA-1

Симметричные алгоритмы

Если при шифровании информации с помощью специального алгоритма и ключа ее расшифровка происходит с помощью того же самого алгоритма и ключа, такой метод шифрования называется симметричным (рис. 1). Отсюда и два других названия данного метода - с помощью симметричных алгоритмов, или алгоритмов с симметричным ключом. Встречается и еще одно название данного метода - криптография с секретным ключом.

Fig.1 Рис. 1. Симметричный ключ используется и для шифрации, и для дешифрации.

В симметричных алгоритмах шифрования применяются два вида шифрования - блочный и поточный.

При шифровании по блокам кодирование данных выполняется после разбиения их на блоки, каждый из которых шифруется отдельно с помощью одного и того же ключа. Если размер исходной информации не кратен размеру блока, то последний блок дополняется символами-заполнителями. Особенность данного способа шифрования - в том, что одни и те же данные шифруются одним ключом, т. е. одинаково. Как правило, такие алгоритмы используют при шифровании файлов, баз данных и электронной почты (табл. 2).

Таблица 2. Характеристики алгоритмов с блочным шифрованием

Название Длина ключа, бит Размер обрабатываемых блоков, бит Число раундов
AES (Rijndael) 128, 192 или 256 128, 192 или 256 10, 12, 14
Blowfish 32-448 64 16
CAST-128 128 64 16
CAST-256 256 128 16
DES 56 64 16
IDEA 128 64 8
NewDES 120 64 17
RC2 до 1024 64 16
RC5 до 2048 32, 64 или 128 0...255
ГОСТ 28147-89 256 64 16 или 32

При поточном шифровании каждый байт обрабатывается индивидуально, однако, хотя ключ в данном случае одинаков для всех байтов, для шифрования используются псевдослучайные числа, сгенерированные на основании ключа. Характерная особенность этого способа шифрования - высокая производительность, благодаря чему он применяется при шифровании потоков информации в каналах связи (так, один из элементов протокола SSL выполняет поточное шифрование по алгоритму RC4).

В настоящее время наиболее распространены алгоритмы DES, Triple DES, AES, а в России - ГОСТ 28147-89. Достаточно широко применяются также алгоритмы Blowfish компании Counterpane Systems (http://www.counterpane.com); Safer, разработанный для компании Cylink (приобретена в 2003 г. компанией SafeNet, http://www.safenet-inc.com); RC2 и RC5 корпорации RSA Data Security (http://www.rsasecurity.com) и CAST компании Entrust (http://www.entrust.com).

DES (Digital Encryption Standard) - это блочный шифр, использующий 56-разрядный ключ. Алгоритм был разработан в конце 70-х гг. прошлого века исследователями из IBM и National Security Agency (NSA). В 80-х эксперты полагали, что алгоритм не имеет слабых мест, но с появлением быстродействующих компьютеров в 90-х его репутация несколько пострадала - стала возможной атака методом перебора ключа (ключ DES был взломан специалистами компании Electronic Frontier Foundation в 1999 г. менее чем за 24 ч).

Triple DES - усовершенствованный блочный алгоритм DES. Принцип его работы не отличается от применяемого в DES, а усиление достигается благодаря трехкратному (triple) шифрованию одного блока алгоритмом DES. Три 56-разрядных ключа, используемых в данном процессе, объединяются алгоритмом в один 168-разрядный ключ. И хотя время атаки перебором при обычной мощности компьютера составляет несколько миллиардов лет, что говорит о хорошей стойкости алгоритма, в некоторых публикациях описаны способы сокращения времени атаки - до уровня перебора 108-разрядного ключа. Сегодня существует также вариант Triple DES с "двойным" DES-ключом размером 112 бит, и он применяется чаще.

AES (Advanced Encryption Standard) - еще один блочный алгоритм, который был разработан бельгийскими исследователями Винсентом Риджменом (Vincent Rijmen) и Джоан Димен (Joan Daemen) и принят в качестве стандарта Национальным институтом стандартов и технологий (NIST) 2 октября 2000 г. Конкурс на новый стандарт был объявлен тремя годами ранее, причем среди его условий значился обязательный отказ разработчиков от права интеллектуальной собственности, что позволяло сделать новый стандарт открытым и применять его без отчислений авторам.

ГОСТ 28147-89 в США часто называют русским аналогом DES. Но по сравнению с DES ГОСТ 28147-89 значительно более криптостоек и сложен. Он был разработан в одном из институтов КГБ в конце 1970-х гг., статус официального стандарта шифрования СССР получил в 1989 г., после распада СССР принят в качестве стандарта Российской Федерации. ГОСТ 28147-89 оптимизирован для применения в программных реализациях, использует вдвое больше DES-раундов шифрования с гораздо более простыми операциями, а длина ключа у него в пять раз больше.

Алгоритмы с открытым ключом

Если в симметричном алгоритме для шифрования и расшифрования применяется один и тот же ключ, то в асимметричном - фактически два (рис. 2), один для шифровки, другой - для расшифровки данных. Ключи составляют неразрывную пару (ключи из разных пар никогда не смогут работать совместно), и потому для такой пары часто употребляется термин "асимметричный ключ", а каждый ключ из пары называют половиной асимметричного ключа.

Fig.2 Рис. 2. Две части асимметричного ключа - одна для кодирования, другая для расшифровки.

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

Недостаток работы с открытыми ключами - обработка информации требует много времени, в несколько десятков раз больше, чем при работе с симметричными алгоритмами. Поэтому при передаче больших объемов данных их шифруют с симметричным ключом, а затем сам симметричный ключ шифруют с помощью открытого ключа (рис. 3). Таким образом, поскольку шифрование открытым ключом применяется только к симметричному ключу, время обработки немногим отличается от симметричного шифрования. К тому же при такой схеме симметричный ключ работает только в одном сеансе (а потому получил название сеансового), а его обработка выполняется автоматически программными средствами, следовательно, нет необходимости даже извещать пользователя о существовании симметричного ключа.

Еще один серьезный недостаток алгоритма симметричного шифрования - проблема подмены открытых ключей.

Fig.3 Рис. 3. После зашифровки данных симметричный ключ шифруется открытым ключом и объединяется с зашифрованными данными.

Из множества алгоритмов с открытым ключом наиболее популярны DH, RSA и ECDH. Алгоритмы DH и ECDH (а также описанные ниже хэш-функции), строго говоря, не являются алгоритмами шифрования, однако без их описания картина была бы неполной.

RSA был разработан Роном Ривестом, Ади Шамиром и Леном Эдлманом (R. Rivest, A. Shamir и L. Adlеman - название его происходит от фамилий авторов) и опубликован в 1978 г. Чаще всего данный алгоритм используют с 1024-разрядным ключом.

DH (Diffie-Hellman) был создан Уитфилдом Диффи и Мартином Хеллманом и опубликован в 1976 г. По сути Диффи и Хеллман предложили схему, по которой путем обмена открытой информацией можно создать совместно используемый секретный ключ. Фактически алгоритм DH - это не алгоритм шифрования, а схема распределения ключей и алгоритм создания симметричного сеансового ключа. Согласно DH, каждая из взаимодействующих сторон обладает секретным и открытым значениями ключа. При объединении секретного значения с другим открытым каждый пользователь сможет создать один и тот же секретный ключ.

Эллиптический алгоритм ECDH (Elliptic Curve Diffie-Hellman) появился в 1985 г. благодаря трудам Нила Коблица (Neal Koblitz) из Вашингтонского университета и Виктора Миллера (Victor Miller) из исследовательского центра Томаса Уотсона корпорации IBM. В своих работах независимо друг от друга они пришли к выводу, что эллиптические функции, используемые в математике, можно с успехом применять в криптографии с открытым ключом. В настоящее время, помимо ECDH, существует и активно реализуется еще немало алгоритмов, базирующихся на эллиптических функциях.

Хэш-функции и дайджесты

Хэш-функцией называют процедуру обработки сообщения, в результате которой формируется строка символов (дайджест сообщения) фиксированного размера. Малейшие изменения в тексте сообщения при обработке его хэш-функцией приводят к изменению дайджеста. Таким образом, любые искажения, внесенные в текст сообщения, отразятся в дайджесте.

Дайджесты сообщения, помимо аутентификации отправителя, обязаны гарантировать отсутствие в сообщении искажений. Иными словами, они гарантируют получателю, что полученное им сообщение - это именно то, которое послал ему отправитель.

Таблица 3. Хэш-функции и дайджесты

Функция Размер дайджеста, бит
MD2 128
MD5 128
SHA-1 160

Алгоритмы, использующие хэш-функции MD2 и MD5 (табл. 3) для вычисления дайджестов, были созданы Роном Ривестом. К сожалению, со временем в алгоритме MD2 были найдены изъяны, и использовать его сейчас не рекомендуется. MD5 пока считается достаточно надежным.