Byte/RE ИТ-издание

Криптоалгоритмы: справочник

Денис Назаренко,
специалист по безопасности фирмы 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 пока
считается достаточно надежным.

Вам также могут понравиться