Windows Compute Cluster Server – платформа для высокопроизводительных вычислений с удобным
управлением кластером, интеграцией с существующей ИТ-инфраструктурой и поддержкой широкого ряда приложений.
Денис Назаренко,
специалист по безопасности фирмы 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 пока
считается достаточно надежным.