Криптоалгоритмы: справочник
Денис Назаренко,
специалист по безопасности фирмы 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). Отсюда и два других названия данного метода — с помощью симметричных алгоритмов, или алгоритмов с симметричным ключом. Встречается и еще одно название данного метода — криптография с секретным ключом.
Рис. 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), один для шифровки, другой — для расшифровки данных. Ключи составляют неразрывную пару (ключи из разных пар никогда не смогут работать совместно), и потому для такой пары часто употребляется термин "асимметричный ключ", а каждый ключ из пары называют половиной асимметричного ключа.
Рис. 2. Две части асимметричного ключа — одна для кодирования, другая для расшифровки.
|
Ключ, который зашифровывает данные, называется открытым, а ключ, который их расшифровывает, — секретным. Таким образом, чтобы получить важную информацию, достаточно сгенерировать два ключа. Один — секретный — спрятать в надежном месте, второй — открытый — можно свободно распространять и даже выкладывать в общедоступных местах, например, на сайте. Если кто-то захочет послать секретную информацию, то предварительно он просто зашифрует данные открытым ключом. Расшифровать ее удастся только секретным ключом.
Недостаток работы с открытыми ключами — обработка информации требует много времени, в несколько десятков раз больше, чем при работе с симметричными алгоритмами. Поэтому при передаче больших объемов данных их шифруют с симметричным ключом, а затем сам симметричный ключ шифруют с помощью открытого ключа (рис. 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 пока
считается достаточно надежным.