После того как ключ готов, приступаем собственно к шифрованию данных. Воспользуемся для этого программой ENCRYPT пакета DBMS_CRYPTO. Как и ее родственница из пакета DBMS_OBFUSCATION_TOOLKIT, ENCRYPT перегружена и существует как в виде функции, так и процедуры. В отличие от DBMS_OBFUSCATION_TOOLKIT, такая перегрузка обоснована: функция принимает в качестве входного значения только тип данных RAW, в то время как процедура принимает на вход только значения типов CLOB и BLOB.
Давайте рассмотрим простейший пример шифрования значения типа RAW при помощи функции ENCRYPT:
Большинство параметров нам уже знакомо:
src
Входное значение, которое подлежит шифрованию.
key
Ключ шифрования.
iv
Вектор инициализации
Второй параметр, typ, является новым и требует более подробного рассмотрения.
Пакеты DBMS_OBFUSCATION_TOOLKIT и DBMS_CRYPTO отличаются способами поддержки различных типов шифрования. Пакет DBMS_OBFUSCATION_ TOOLKIT предлагает специальные функции (и соответствующие процедуры) для каждого алгоритма, например DESENCRYPT для DES и DES3ENCRYPT для Triple DES. Пакет DBMS_CRYPTO предоставляет всего одну функцию, а тип шифрования указывается в параметре. Поддерживаемые алгоритмы шифрования и соответствующие им константы приведены в табл. 4.3. Необходимая константа задается в формате имя_паке- та.имя_константы. Например, чтобы выбрать алгоритм Triple DES, следует использовать константу DBMS_CRYPTO.ENCRYPT_3DES. Обратите внимание, что старый пакет не поддерживает варианты AES и RC4.
Таблица 4.3. Типы шифрования в пакете DBMS_CRYPTO
|
||
Константа
|
Описание
|
Реальная длина ключа
|
ENCRYPT_DES
|
56
|
|
ENCRYPT_3DES_2KEY
|
112
|
|
ENCRYPT_3DES
|
156
|
|
ENCRYPT_AES128
|
128
|
|
ENCRYPT_AES192
|
192
|
|
ENCRYPT_AES256
|
256
|
|
ENCRYPT_RC4
|
Выберите нужный тип шифрования, указав соответствующее значение параметра typ. Имейте в виду, что на самом деле это только часть значения параметра, который передает также и другую информацию, о чем будет рассказано в следующем разделе.
При шифровании данных каждый шифруемый блок может быть зашифрован независимо от остальных или может быть сцеплен с другими для создания более надежной (с криптографической точки зрения) системы. В последнем случае зашифрованное значение лучше защищено. Чтобы выбрать интересующий вас метод сцепления, укажите соответствующую константу из табл. 4.4 в значении параметра typ, например DBMS_CRYPTO.CHAIN_OFB.
Таблица 4.4. Типы сцепления DBMS CRYPTO
_CBC
|
||
_ECB
|
||
_CFB
|
||
CHAIN
|
_OFB
|
Шифрование с обратной связью по выходу - Output Feedback.
|
Как вы помните, при блочном шифровании данные шифруются блоками. Как быть, если длина входных данных не кратна размеру блока? При использовании пакета DBMS_OBFUSCATION_TOOLKIT необходимо явно дополнить данные так, чтобы их длина была кратна размеру блока. Однако этот подход не является криптографически надежным. DBMS_CRYPTO позволяет указать необходимый тип дополнения. Большинство компаний использует метод PKCS#5.
Чтобы выбрать интересующий вас метод сцепления, укажите соответствующую константу из табл. 4.5 в значении параметра typ, DBMS_CRYP- TO.PAD_PKCS5.
Таблица 4.5. Типы дополнения DBMS CRYPTO
Константа
|
Описание
|
|
PAD_
|
PKCS5
|
Дополнение средствами криптографической системы с общим ключом (Public Key Cryptography System #5).
|
ZERO
|
Дополнение нулями.
|
|
PAD_
|
NONE
|
Отсутствие дополнения. Используется при уверенности в том, что длина данных уже кратна размеру шифруемого блока (кратно 8).
|
Теперь давайте посмотрим, как свести все эти разнообразные опции воедино. Предположим, что вы выбрали следующие опции шифрования:
Метод дополнения
Дополнение нулями (PAD_ZERO).
CRYPT_AES128).
Аналогично можно задавать любую комбинацию опций функции ENCRYPT. Рассмотрим пример полного вызова функции:
Объединяем эти опции в значении параметра typ следующим образом (получается достаточно длинная строка):
Для удобства работы пакет предлагает две константы с предопределенными комбинациями значений для опций шифрования, сцепления и дополнения (табл. 4.6).
Таблица 4.6. Константы DBMS CRYPTO с предопределенными наборами значений для параметра typ
PAD_PKCS5
|
CHAIN_CBC
|
||
DES3_CBC_PKCS5
|
ENCRYPT_3DES
|
PAD_PKCS5
|
CHAIN_CBC
|
Если надо использовать алгоритм шифрования DES, дополнение по системе PKCS#5 и сцепление блоков шифротекста (CBC), то следует задать константы следующим образом:
< Предыдущая | Следующая > |
---|