Введение в дисциплину «Безопасность систем баз данных». Теоретические основы построения реляционных баз данных. Верификация баз данных и проведение аудита в СБД. Распределенные базы данных, страница 57

В приведенном примере полученный шифртекст добавляется в таблицу aTable. Чтобы просмотреть его, нужно воспользоваться функцией DecryptByCert. При этом требуется указать пароль, указанный при создании сертификата в секции ENCRYPTION BY PASSWORD. Кроме того, возвращаемое значение, имеющее тип varbinary, необходимо преобразовывать в строковое. Пример использования функции:

SELECT (Convert(nvarchar(100),

DecryptByCert(Cert_ID(‘SelfSignedCert1’), aColumn, N’P@ssw0rd’)))

FROM aTable

Шифрование с использованием асимметричных ключей

Работа с асимметричными ключами внешне выглядит почти аналогично использованию сертификатов. Вначале необходимо создать асимметричный ключ при помощи команды CREATE ASYMMETRIC KEY:

CREATE ASYMMETRIC KEY AsymKey

            WITH ALGORITHM = RSA_512

            ENCRYPTION BY PASSWORD = ‘P@ssw0rd’

Параметр ALGORITHM указывает не только используемый алгоритм шифрования (RSA), но и длину ключа в битах. Допускается указывать одно из трех значений: RSA_512, RSA_1024 и RSA_2048.

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

INSERT INTO aTable VALUES(EncryptByAsymKey(AsymKey_ID(‘AsymKey’),

                                               N’Секретные данные’))

Функция AsymKey_ID позволяет получить идентификатор ключа.

При дешифровании, как и в случае с использованием сертификатов, требуется указывать пароль P@ssw0rd:

SELECT (Convert(nvarchar(100),

            DecryptByAsymKey(AsymKey_ID(‘AsymKey’), aColumn, N’P@ssw0rd’)))

            FROM aTable

Шифрование с использованием симметричных ключей

Создание симметричных ключей в простейшем случае напоминает создание асимметричных. SQL Server 2005 поддерживает восемь способов симметричного шифрования: DES, TRIPLE_DES, RC2, RC4, DESX, AES_128, AES_192, AES_256. Создание симметричного ключа может выглядеть так:

CREATE SYMMETRIC KEY SymKey

            WITH ALGORITHM = AES_128

            ENCRYPTION BY PASSWORD = ‘P@ssw0rd’

Перед использованием симметричного ключа для шифрования и дешифрования информации его необходимо открыть при помощи оператора OPEN SYMMETRIC KEY с указанием пароля дешифрования ключа:

OPEN SYMMETRIC KEY SymKey DECRYPTION BY PASSWORD = ‘P@ssw0rd’

Зашифрование данных производится при помощи функции EncryptByKey:

INSERT INTO aTable VALUES(EncryptByKey(Key_GUID(‘SymKey’),

                                                           N’Секретные данные’))

При дешифровании не требуется указывать ни пароля, ни идентификатора ключа: Система по умолчанию применяет все параметры ключа, открытого на данный момент при помощи оператора OPEN SYMMETRIC KEY:

SELECT (Convert(nvarchar(100), DecryptByKey(aColumn))) FROM aTable

Закончив работу с ключом шифрования, его необходимо закрыть, выполнив команду CLOSE SYMMETRIC KEY с указанием имени ключа. Если во время сеанса было открыто несколько симметричных ключей, можно закрыть все ключи одновременно при помощи команды CLOSE ALL SYMMETRIC KEYS.

Шифрование с использованием парольной фразы

Данный способ является самым простым, т. к. не предполагает создания дополнительных объектов БД: ключ шифрования вырабатывается системой автоматически на основе парольной фразы, вводимой пользователем. Ни получившийся ключ, ни сама фраза не сохраняются после шифрования. Для дешифрования пользователь должен ввести парольную фразу еще раз. Если парольная фраза будет введена неверно, то результат дешифрования не будет совпадать с исходным открытым текстом.

Для шифрования с помощью парольной фразы используется функция EncryptByPassphrase. Например:

INSERT INTO aTable VALUES(EncryptByPassphrase(‘This is my passphrase’,

                                                           N’Секретные данные’)

При дешифровании – с помощью функции DecryptByPassphrase – указывается та же самая парольная фраза:

SELECT Convert(nvarchar(100), DecryptByPassphrase(‘This is my passphrase’, aColumn)))

FROM aTable

6.2.3. Шифрование кодов хранимых подпрограмм БД