Шифрование в SQL Server

В этой статье будут рассмотрены:

• модель шифрования SQL Server, включая иерархию шифрования SQL Server и концепции серверных сертификатов и ключей шифрования баз данных

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

• расширяемое управление ключами, позволяющее использовать аппаратные модули защиты от независимых поставщиков для внешнего управления ключами на уровне предприятия

• функции симметричного и асимметричного шифрования

• использование представлений каталога для доступа к метаданным безопасности

Модель шифрования SQL Server включает управление встроенными ключами шифрования на основе стандарта ANSI X9.17 (стандарт «Financial Institution Key Management (Wholesale)» («Управление ключами финансовых институтов (оптовой торговли)»)). Этот стандарт определяет несколько уровней ключей шифрования, которые используются для шифрования других ключей, а те, в свою очередь, применяются для шифрования самих данных.

Мастер-ключ службы (SMK) - это ключ верхнего уровня, прародитель всех ключей SQL Server. На каждом экземпляре SQL Server определѐн только один SMK. Ключ SMK защищѐн интерфейсом Windows Data Protection API (DPAPI) и используется для защиты ключей следующего уровня - мастер-ключей базы данных (DMK). SMK автоматически создаѐтся SQL Server при первой необходимости.

Мастер-ключи баз данных (DMK) используются для шифрования симметричных ключей, асимметричных ключей и сертификатов. Каждая база данных имеет один DMK, определенный для неѐ.

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

В дополнение ко всем ключам и сертификатам, ранее поддерживаемым SQL Server 2005, в SQL Server 2008 введена концепция серверных сертификатов и ключей шифрования баз данных в рамках поддержки новой функциональности прозрачного шифрования данных. Серверный сертификат - это просто сертификат, созданный в базе данных master. Ключ шифрования - это специальный симметричный ключ, используемый для шифрования всей базы данных сразу.

Давайте более подробно посмотрим как работать с упомянутыми компонентами шифрования:

Мастер-ключ службы

SQL Server 2008 включает следующие операторы T-SQL для изменения, резервирования и уничтожения SMK.

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

Backup - выполняет резервное копирование вашего SMK в файл. SMK шифруется перед резервным копированием и хранится в зашифрованном формате. Вы должны указать пароль для шифрования резервной копии SMK.

Restore - восстанавливает SMK из файла. Подобно оператора Alter этот оператор регенерирует всю иерархию ключей шифрования.

После инсталляции нового экземпляра SQL Server 2008 вы должны немедленно выполнить резервное копирование SMK и сохранить его в безопасном месте.

Если вы хотите изменить, восстановить из резервной копии или регенерировать SMK, то SQL Server попытается дешифровать и перешифровать все ключи в иерархии ключей шифрования. Если любая из попыток дешифрации не удастся, весь процесс потерпит крах. В этом случае вы можете использовать опцию FORCE с операторами ALTER и RESTORE. Однако имейте ввиду, что если придѐтся применять эту опцию, то можно рассчитывать на потерю данных.

Мастер-ключи базы данных

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

В отличии от SMK, который генерируется автоматически как только в нѐм возникает потребность, DMK должен быть создан явно оператором Create. Как видите существует значительно много операторов работы с этим сертификатом.

Create - создает DMK.

Alter - позволяет регенерировать DMK или изменить способ защиты DMK. При этом все ключи которые он защищает будут дешифрованы и перешифрованы заново.

Drop - удаляет DMK. Если какие-либо ключи уже зашифрованы этим DMK, то операция не выполнится.

Backup - резервирует DMK в файл.

Restore - восстанавливает DMK из файла.

Open - открывает DMK, чтобы его можно было использовать для шифровки и дешифрации.

Close - закрывает DMK, который был явно открыт посредством Open Master Key после завершения шифрования и дешифрации.

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

Асимметричные ключи

Система шифрования в SQL Server предоставляет поддержку асимметричных ключей, которые в действительности состоят из пары ключей шифрования: открытого и закрытого (секретного). Секретный ключ может иметь длину 512, 1024 или 2048 бит. Нужно учесть что есть ограничение размера данных, с которыми может справиться асимметричное шифрование. В частности, алгоритм RSA_1024 может зашифровать значение varchar максимальной длины в 117 символов или значение nvarchar максимальной длины 58 символов.

В таблице ниже показаны ограничения алгоритма асимметричного ключа на основе длины секретного ключа, реализованного в SQL Server 2008. Эти ограничения делают асимметричное шифрование плохим выбором для данных любой разумной длины.

SQL Server предоставляет следующие операторы для управления асимметричными ключами.

Create - позволяет сгенерировать новую пару асимметричных ключей (открытый/закрытый), импортировать такую пару из файла либо импортировать открытый ключ из сборки .NET. Этот оператор требует наличия привилегии CREATE ASYMMETRIC KEY в базе данных.

Alter - позволяет модифицировать свойства существующего асимметричного ключа.

Drop - удаляет асимметричный ключ из базы.

Операторы Alter и Drop требуют привилегии CONTROL для асимметричного ключа.

Кроме того есть две встроенные функции T-SQL для шифрования и дешифрации данных с помощью асимметричного ключа.

EncryptByAsymKey - эта функция требует применения номера ID пары асимметричного ключа, полученного от функции AsymKey_ID.

DecryptByAsymKey - дешифрует данные, которые были ранее зашифрованы посредством EncryptByAsymKey.

**
Сертификаты**

Сертификаты - ещѐ один инструмент, предоставленный SQL Server для асимметричного шифрования. Сертификат - это, по сути, пара ключей открытый/секретный, которая содержит дополнительные данные, описывающие сертификат. Дополнительные данные включают дату начала, дату истечения срока действия и субъект сертификата. В отличии от асимметричных ключей SQL Server, сертификаты могут резервироваться в файлы и восстанавливаться из них. Сертификаты подписываются издателем сертификатов, которым часто бывает независимая компания, хотя SQL Server также может генерировать и автоподписанные сертификаты. SQL Server поддерживает сертификаты, которые следуют требованиям стандарта International Telecommunication Union Telecommunication Standartization Sector (ITU-T) X.509.

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

Шифрованию с сертификатами присущи те же ограничения длины, что и шифрованию с асимметричным ключом.

Для работы с сертификатами существуют операторы и функции представленные на слайде, действие которых аналогичны операторам и функциям работы с асимметричными ключами.

Симметричные ключи

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

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

В SQL Server доступны следующие операторы для управления симметричными ключами:

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

ALTER - позволяет изменять метод защиты симметричных ключей

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

OPEN - открывает и дешифрует симметричный ключ для использования

CLOSE - закрывает ранее открытый симметричный ключ

CLOSE ALL - закрывает все в данные момент открытые симметричные ключи в текущем сеансе

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

Вы также можете создавать временные симметричные ключи, снабжая имя ключа префиксом - знаком # в операторе CREATE SYMMETRIC KEY.

Чтобы шифровать и дешифровать данные, применяйте функции EncryptByKey и DecryptByKey.

Прозрачное шифрование данных

SQL Server 2008 предоставляет новую опцию шифрования, известную как прозрачное шифрование данных (transparent data encryption - TDE). TDE шифрует каждую страницу вашей базы данных и автоматически расшифровывает каждую страницу по мере обращения к ней. Это средство позволяет защитить всю базу данных, не беспокоясь о деталях шифрования на уровне столбцов. Кроме того, оно имеет дополнительное преимущество, позволяя защитить базу данных прозрачно, не внося изменений в интерфейсные приложения. TDE не требует дополнительного пространства для хранения и может генерировать намного более эффективные планы запросов, чем для запросов к данным, зашифрованным на уровне столбцов, поскольку TDE позволяет SQL Server использовать правильные индексы.

Отрицательной стороной средства TDE является то, что оно требует дополнительных накладных расходов, поскольку SQL Server вынужден расшифровывать страницы данных при каждом запросе.

Чтобы включить TDE и зашифровать базу данных, вы должны сначала создать DMK и серверный сертификат в базе данных master. Второй шаг - создание ключа шифрования базы данных и включение шифрования в базе, которую вы хотите защитить. Алгоритмы, доступные оператору CREATE DATABASE ENCRYPTION KEY, ограничены представленными на слайде.

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

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

При выборе стратегии шифрования ваших баз данных рекомендуется тщательно взвешивать все за и против TDE и шифрования уровня столбцов.

Расширяемое управление ключами

В дополнении к TDE, SQL Server 2008 включает новое средство - расширяемое управление ключами (extensible key management - EKM). EKM позволяет использовать программный интерфейс Microsoft Cryptographic API (CryptoAPI) для шифрования и генерации ключей.

Поддержка EKM предназначена для того, чтобы позволить независимым поставщикам предлагать оборудование генерации ключей - аппаратные модули безопасности (hardware security modules - HSM). Поставщики HSM могут предлагать массу преимуществ перед стандартной встроенной функциональностью шифрования, включая аппаратное ускорение шифрования и дешифрации, пакетное шифрование и дешифрацию. HSM может представлять собой смарт-карту, устройство USB, флэш-карту или специализированный внешний модуль.

Шифрование без ключей

SQL Server 2008 позволяет шифровать данные с использованием ключевых фраз (passphrase). Ключевая фраза - это строка или двоичное значение, от которого SQL Server может наследовать симметричный ключ для шифрования данных. Функции EncryptByPassPhrase и DecryptByPassPhrase используют алгоритм TripleDES для шифрования и дешифрации данных. Вы не можете выбрать другой алгоритм для шифрования и дешифрации этими функциями.

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

• sys.asymmetric_keys

• sys.certificates

• sys.crypt_properties

• sys.dm_database_encryption_keys

• sys.key_encryptions

• sys.master_key_passwords

• sys.openkeys

• sys.symmetric_keys

Дополнительные материалы

http://www.techdays.ru/videos/2139.html

http://www.amazon.com/Accelerated-Server-2008-Robert-Walters/dp/1590599691

http://msdn.microsoft.com/ru-ru/library/bb934049.aspx

http://www.itcommunity.ru/blogs/rsug/archive/2009/07/07/69878.aspx

http://www.gotdotnet.ru/blogs/yliberman/6085/