Сергей Панасенко,
начальник отдела разработки ПО фирмы "Анкад", к. т. н.

Криптографических алгоритмов существует множество. Их назначение в общих чертах понятно: защита информации. Защищать же информацию нужно от разных угроз и разными способами. Чтобы правильно задействовать криптоалгоритм (КА), т. е. обеспечить надежную и адекватную защиту, требуется понимать, какие бывают КА и какой тип алгоритма лучше приспособлен для решения конкретной задачи.

В мире криптографии известно несколько классификаций криптографических алгоритмов. Одна из них подразделяет КА в зависимости от числа ключей, применяемых в конкретном алгоритме:

  • бесключевые КА - не используют в вычислениях никаких ключей;
  • одноключевые КА - работают с одним дополнительным ключевым параметром (неким секретным ключом);
  • двухключевые КА - на различных стадиях работы в них применяются два ключевых параметра: секретный и открытый ключи.

Существуют и другие, более детальные классификации (рис. 1). Некоторые из приведенных на рис. 1 типов криптоалгоритмов уже подробно рассматривались на страницах журнала (см. "Современные алгоритмы шифрования", "BYTE/Россия" № 8'2003, и "Цифровая подпись - как это делается", "BYTE/Россия" № 1'2004). Однако для понимания нашего сугубо практического вопроса кратко охарактеризуем основные типы КА.

Fig.1 Рис. 1. Классификация криптографических алгоритмов.

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

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

Симметричное шифрование подразделяется на два вида: блочное и поточное, хотя стоит сразу отметить, что в некоторых классификациях они не разделяются и считается, что поточное шифрование - это шифрование блоков единичной длины.

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

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

Асимметричное шифрование. Метод шифрования с применением двух вариантов ключей: открытого - для зашифрования информации и секретного - для ее расшифрования. Секретный и открытый ключи связаны между собой достаточно сложным соотношением, например, вида:

Kp = aKs mod p,

где Ks - секретный ключ, Kp - открытый ключ, a и p - некоторые константы. Главное в этом соотношении - легкость вычисления открытого ключа из секретного и невозможность (за ограниченное время при реальных ресурсах) вычисления секретного ключа из открытого при достаточно большой размерности операндов.

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

Что и где защищать

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

Fig.2
Рис. 2. Сферы применения криптоалгоритмов.

Защита данных внутри ПК

В первом из этих двух случаев все достаточно просто: пользователю нужно обеспечить два свойства важной информации - ее конфиденциальность, т. е. недоступность для всех тех, кому явным образом не разрешено ознакомление с данной информацией, и целостность, т. е. неизменность информации в процессе ее хранения на компьютере.

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

Асимметричное шифрование существенно более ресурсоемко, чем симметричное. Иными словами, скорость асимметричного шифрования несравнимо ниже скорости симметричного шифрования при одинаковых ресурсах. Другая проблема асимметричного шифрования - необходимость защиты открытых ключей от подмены. Если злоумышленник подменит открытый ключ иным, то он сможет расшифровывать информацию вместо легального пользователя (эта проблема и способы ее решения подробно описаны в статье "Открытые ключи - опасности и защита от них", "BYTE/Россия" № 7'2004). По сложности решения данная проблема сравнима с необходимостью конфиденциальной передачи ключей симметричного шифрования.

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

Целостность информации - для ее проверки применяются хэширование и электронная подпись. Сравним эти криптомеханизмы.

Особенность первая: только электронная подпись позволяет определить авторство информации (к примеру, кто был тот пользователь, который поставил ЭЦП на конкретный файл).

Особенность вторая: электронная подпись требует предварительного хэширования данных, после чего вычисляется собственно подпись, что требует серьезных вычислительных ресурсов. При защите целостности относительно большого количества данных маленького объема хэширование происходит на несколько порядков быстрее электронной подписи.

Проблема: аналогично асимметричному шифрованию, при использовании ЭЦП существует опасность подмены открытого ключа при передаче.

Вывод: поскольку пользователю ПК обычно не требуется доказывать свое авторство кому-либо, а необходимо лишь обеспечить целостность хранимой информации, хэширование в данном случае однозначно предпочтительнее и удобнее.

Для обеспечения целостности информации пользователю рекомендуется выполнить следующие действия:

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

Если вычисленное значение не совпало с контрольным, информацию следует считать измененной.

Защита межсетевого обмена данными

Конфиденциальность данных, передаваемых по локальной сети или через Интернет, обеспечивается при помощи как симметричных, так и асимметричных алгоритмов.

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

Во всех случаях, когда шифрующие информацию пользователи заранее неизвестны (а именно так чаще всего и бывает при защите Интернет-коммуникаций), придется использовать асимметричное шифрование. Однако тогда потребуется обеспечить надежную защиту открытых ключей от подмены. Совместное использование симметричного и асимметричного шифрования (см. статью "Принципы использования ключей шифрования", "BYTE/Россия" № 9'2003) позволяет частично устранить недостатки данных методов, но проблема защиты открытых ключей от подмены, увы, остается.

Целостность передаваемых данных можно защитить, применяя как хэширование, так и электронную цифровую подпись. При этом необходимо принимать во внимание следующее. ЭЦП необходима и достаточна, если требуется подтверждение авторства передаваемых сообщений. Во всех остальных случаях чаще используется просто хэширование и его аналоги, поскольку, во-первых, ЭЦП более сложна в реализации, а во-вторых, объем ЭЦП с сопроводительной информацией существенно больше, чем, например, имитоприставка, а бывают случаи, когда некую криптографическую контрольную сумму нужно положить в каждый IP-пакет.

Берегите ключи!

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