DeepEdit!

Программирование баз данных на Oracle, техническая документация, литература, статьи и публикации

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Зашифровывание данных

После того как ключ готов, приступаем собственно к шифрованию данных. Воспользуемся для этого программой 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
Data Encryption Standard (DES)
56
ENCRYPT_3DES_2KEY
Modified Triple Data Encryption Standard (3DES); обрабатывает каждый блок триж­ды, используя 2 ключа
112
ENCRYPT_3DES
Triple Data Encryption Standard (3DES); об­рабатывает каждый блок трижды
156
ENCRYPT_AES128
Advanced Encryption Standard
128
ENCRYPT_AES192
Advanced Encryption Standard
192
ENCRYPT_AES256
Advanced Encryption Standard
256
ENCRYPT_RC4
Потоковое шифрование (единственное)


Выберите нужный тип шифрования, указав соответствующее значение параметра typ. Имейте в виду, что на самом деле это только часть значения параметра, который передает также и другую информацию, о чем будет рассказано в следующем разделе.
Типы сцепления
При шифровании данных каждый шифруемый блок может быть зашифрован независимо от остальных или может быть сцеплен с другими для создания более надежной (с криптографической точки зрения) системы. В последнем случае зашифрованное значение лучше защищено. Чтобы выбрать интересующий вас метод сцепления, укажите соответствующую константу из табл. 4.4 в значении параметра typ, например DBMS_CRYPTO.CHAIN_OFB.
Таблица 4.4. Типы сцепления DBMS CRYPTO
Константа
Описание
CHAIN_
_CBC
Сцепление блоков шифротекста - Cipher Block Chaining.
CHAIN_
_ECB
Электронная книга кодов - Electronic Code Book.
CHAIN_
_CFB
Шифрование с обратной связью от шифротекста - Cipher Feedback.
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).
PAD_
ZERO
Дополнение нулями.
PAD_
NONE
Отсутствие дополнения. Используется при уверенности в том, что длина данных уже кратна размеру шифруемого блока (кратно 8).

Объединение опций в параметре typ
Теперь давайте посмотрим, как свести все эти разнообразные опции воедино. Предположим, что вы выбрали следующие опции шифрования:
Метод дополнения
Дополнение нулями (PAD_ZERO).
Алгоритм шифрования
128-битный ключ, алгоритм Advanced Encryption Standard (EN-
CRYPT_AES128).
Метод сцепления
Блочное шифрование с обратной связью от шифротекста Cipher Feedback (CHAIN_CFB).
Аналогично можно задавать любую комбинацию опций функции ENCRYPT. Рассмотрим пример полного вызова функции:
Объединяем эти опции в значении параметра typ следующим образом (получается достаточно длинная строка):
Для удобства работы пакет предлагает две константы с предопределенными комбинациями значений для опций шифрования, сцепления и дополнения (табл. 4.6).
Таблица 4.6. Константы DBMS CRYPTO с предопределенными наборами значений для параметра typ
Константа
Шифрование
Дополнение
Сцепление блоков
DES_CBC_PKCS5
ENCRYPT_DES
PAD_PKCS5
CHAIN_CBC
DES3_CBC_PKCS5
ENCRYPT_3DES
PAD_PKCS5
CHAIN_CBC

Если надо использовать алгоритм шифрования DES, дополнение по системе PKCS#5 и сцепление блоков шифротекста (CBC), то следует задать константы следующим образом:


 









jAntivirus