Криптографическая защита базы данных
22 августа 2005
Рубрика: Обзоры и мнения.
Автор: Фархад Рахимов.
pic

В данной статье рассматриваются способы криптографической защиты на уровне приложения, в частности, базы данных (БД) в продолжение статьи «Основы системной защиты данных в распределенных информационных системах», опубликованной во втором номере журнала, где обсуждались вопросы системной защиты информации в распределенных корпоративных сетях.

Было отмечено, что комплексная защита информации в распределенных информационных системах должна включать способы защиты данных на уровне компьютера K (рабочая станция или сервер), на уровне сети S и на уровне приложений P, то есть Z = F (K, S, P), и рассмотрены методы защиты на каждом уровне.

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

Несколько лет назад (в конце двадцатого столетия) число атак и утечка информации непосредственно из БД были значительно ниже числа атак непосредственно на web-серверах компаний. Причиной этому было несколько факторов:

• число БД в сети было значительно меньше числа web-серверов
• недостаток общедоступной информации о структуре безопасности БД
• сложность в установке и изучении корпоративной БД
• традиционный метод скрытия БД за фаерволом.

Но за последние годы ситуация несколько изменилась. Всемирно известные хакерские организации — такие, как Black Hat (www.blackhat.com) и Defcon (www.defcon.org), начали проявлять все больший интерес к вопросам безопасности БД. Множество «дыр» в защите БД публикуется в группах новостей — таких, как SecurityFocus (www.securityfocus.com). Добыча полноценной версии корпоративной системы управления базами данных (СУБД) и анализ на наличие «дырок» в системе безопасности на сегодняшний день не представляют сложности для хакерского сообщества. Инсталляция современной СУБД доведена до элементарного уровня и может быть выполнена даже незатейливым пользователем, умеющим нажимать необходимые кнопки. Как показывает практика, большинство распространенных на рынке СУБД по умолчанию предрасположены к взлому. Естественно, это не означает, что они не могут быть сконфигурированы с надлежащим уровнем безопасности.
Усиление защиты БД связано еще и с тем, что внешние, физически удаленные отделения или удаленные пользователи корпоративной сети могут иметь потребность в доступе к данным, в связи этим на сегодняшний день появилась необходимость в предоставлении доступа не только пользователям внутренней сети, но и тем, кто находится извне. Все больше Интернет используется как средство удаленного доступа к корпоративной сети. Это означает, что БД не может быть просто изолирована наличием фаервола в сети. Помимо этого, попытка несанкционированного доступа может быть осуществлена из внутренней сети сотрудниками компании, включая администраторов сети или БД, которые могут изменить некоторую информацию в БД с целью обойти возможные рутинные бюрократические процедуры.
В связи с этим возникает непростая задача — установить порядок доступа к данным, определить настоящий уровень риска и найти способ достижения оптимального уровня безопасности. Возросший интерес со стороны хакерских организаций означает, что администраторам систем необходимо уделять больше внимания при расчете риска, общей системы безопасности, а также балансировать между защитой данных методами шифрования и соответственно потерей производительности.
Шифрование информации в БД действительно решает проблему безопасности данных в первоисточнике — внутри самой БД. Но постоянное шифрование и дешифрование информации, в свою очередь, приводит к понижению производительности БД и соответственно системы в целом. Решением проблемы является рациональное использование комбинации различных уровней защиты — от аппаратного до уровня приложений. При этом распространенной ошибкой является концентрация на усилении периметра сети и недостаточное внимание в направлении усиления уровня безопасности самого источника данных.

pic

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

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

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

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

pic

Основные свойства криптосистем с симметричным ключом:

1. Допустимая длина ключа представляет 128/256 бит, так как никому, кроме взаимодействующих сторон, ключ не известен.
2. Криптосистемы с симметричным закрытым ключом работают с гораздо большей производительностью, нежели системы с открытым ключом.
3. Безопасность алгоритма основана на секретности ключей, и поэтому каждая из взаимодействующих сторон должна иметь секретный ключ.

Недостатком этой системы является сложность передачи ключа. То есть если пользователи географически далеки друг от друга, появляется необходимость найти надежный способ передачи для обмена секретными ключами.

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

Так, пользователь А имеет открытый (доступный всему миру) ключ К1 для шифрования и закрытый (известный только пользователю А) К2 для дешифрования информации. Для обмена информацией с пользователем Б пользователь А высылает открытый ключ К1. Пользователь Б шифрует информацию S открытым ключом К1 и высылает шифрованную информацию S’ обратно пользователю А, которую пользователь А может дешифровать ключом К2. Следующие факторы определяют преимущество
шифрования открытым ключом:

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

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

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

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

Следующие условия представляют собой основные характеристики хеш-функций:

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

Хеш-функции также могут строиться на основе ключа. Ключом обычно является последовательность случайных символов, который, как правило, хранится в секрете. Рассмотрим это на примере БД Oracle.

При хранении паролей в БД возникает необходимость их криптографической защиты. Сама собой напрашивается мысль о шифровании паролей в таблице БД. То есть необходимо хранить пароли в зашифрованном виде, при этом дешифрация их совсем не обязательна, так как это может понизить уровень безопасности БД. В данном случае пароли можно шифровать при помощи необратимых хеш-функций и результат преобразования хранить в таблице. В Oracle это таблица SYS.USERS (администраторы Oracle чаще пользуются снимком этой таблицы — DBA_USERS). При необходимости идентификации пароль, введенный пользователем или программой, сначала передается в хеш-функцию, затем результат этой функции сравнивается с содержимым таблицы паролей. Так как хеш-функции являются односторонними математическими функциями, преобразование производится в доли секунды, и их использование практически не влияет на производительность системы и в то же время обеспечивается защита пароля даже при непосредственном доступе к таблице паролей.

В идеале размер хеша должен предполагать большее количество комбинаций, нежели возможно перебрать существующими компьютерными средствами. Например, на сегодняшний день существуют машины, способные взломать 56-разрядную шифрограмму алгоритма DES приблизительно за час работы. Конечно, приобретение ЭВМ такой мощи требует определенных финансовых затрат, но информация, добытая при помощи таких ЭВМ, порой может с лихвой покрыть эти расходы. Поэтому в зависимости от уровня конфиденциальности защищаемой информации, а также там, где не исключен доступ методом перебора, следует подумать: не стоит ли заменить алгоритм DES на LDAP или другие более сложные методы идентификации.
Рассмотрим реализацию различных приемов криптографической защиты данных на примере БД некой корпорации, которая содержит информацию о служащих этой компании. При этом определенная часть информации в данной БД должна быть зашифрована и доступна только определенному кругу руководящих лиц. Часть информации, не представляющую особой важности, можно оставить в открытом виде.

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

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

В приведенном выше примере при осуществлении пользователями поиска необходимой им информации в шифрованной таблице производительность системы в целом может быть значительно понижена без произведения какой-либо полезной работы. Ресурсы системы будут затрачены на операцию дешифрации строк таблицы. Выходом из данной ситуации является применение процедуры быстрого поиска, который заключается в предопределении условия запроса: открытый текст условия запроса шифруется аналогично искомой записи и вписывается в условие запроса WHERE. После выполнения запроса остается необходимость дешифрования лишь результирующего множества записей, что, как правило, значительно быстрее дешифрации всей таблицы. Использование данного метода не позволяет использовать алгоритмы, использующие стохастический метод шифрования. Так как если шифровать один и тот же текст несколько раз с использованием стохастического вектора шифрования, результирующая шифрограмма при каждом повторе будет отличной от предыдущей. Это означает невозможность вставки предопределенного выражения в оператор запроса. Решение этой дилеммы представляет собой явное соотношение при выборе между повышением безопасности или производительности.
Шифрация данных в БД может быть осуществлена с целью ограничения доступа самого приложения, записывающего данные в эту БД. То есть доступ к некоторым данным БД будет осуществляться только в режиме записи. Примером подобного рода систем могут служить программы электронной коммерции, где требуется конфиденциальность информации о клиентах. Предположим, что web-приложению необходимо сохранить номера кредитных карт клиентов, при этом следует соблюсти надлежащий уровень безопасности, дабы злоумышленник не смог заполучить номера кредитных карт, даже преодолев уровень защиты web-приложения. Решением данной задачи является предоставление внешнему приложению доступа только на запись шифрованной информации в определенный столбец таблицы, с использованием асимметричного алгоритма шифрации. В приложениях подобного рода традиционно использовались симметричные алгоритмы шифрования, в которых неизбежно использование одного ключа для шифрования и дешифрования данных. Это значит, что атакующий злоумышленник может заполучить ключ дешифрации, вызвав буфер переполнения или другую атаку на внешнее приложение. Поэтому по-настоящему безопасным методом является использование одного ключа для шифрования данных и другого для дешифрования, что и предполагает асимметричный метод шифрования, например RSA. То есть при шифровании столбца таблицы, содержащей номера кредитных карт, создаются открытый и закрытый ключи. Открытый ключ передается во внешнее приложение для шифрования и записи данных. Закрытый ключ при необходимости можно использовать в другом приложении, работающем во внутренней защищенной сети для дешифрования данных, зашифрованных ранее открытым ключом.

Не следует забывать о производительности системы. Алгоритм шифрования асимметричным ключом, например RSA, работает примерно в 1000 раз медленнее алгоритмов шифрования симметричным ключом, примерами которых являются AES или DES. Поэтому в реальной системе наиболее эффективным методом является комбинированное использование симметричного и асимметричного алгоритмов шифрования. То есть сначала можно использовать асимметричный алгоритм для шифрования данных внешним приложением. Затем во внутреннем приложении расшифровать данные при помощи закрытого ключа и зашифровать снова, применив алгоритм шифрования с симметричным ключом. Таким образом, сохраняется безопасность чтения конфиденциальной информации из внешнего приложения и при помощи некоторой внутренней процедуры преобразования шифрованных данных ускоряется работа с шифрованными данными.

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

pic
Orphus system
В Telegram
В Одноклассники
ВКонтакте