В пакет DBMS_OBFUSCATION_TOOLKIT включена функция DES3GETKEY (а также процедура, причем оба формата перегружены с несколькими типами данных), которая позволяет сгенерировать криптографически допустимый ключ. Функции для генерирования случайного значения, которое может быть использовано в качестве ключа, необходимо передать значение для инициализации.
Пакет DBMS_CRYPTO, доступный в Oracle 10g, содержит функцию GETRANDOMBYTES, которая может использоваться для формирования криптографически случайных ключей.
Функция вызывается следующим образом:
Значение переменной l_seed - случайная строка длиной 80 символов (более длинное значение будет принято, но использованы будут только 80 символов). Возвращаемое значение имеет тип VARCHAR2 и записывается в переменную l_ret. Длина начального значения должна быть равна 80 символам, поэтому для генерирования значения используем простой алгоритм. (Помните, что сейчас мы генерируем не ключ, а только значение для инициализации генератора случайных чисел. Более подробно это обсуждается в главе 7.)
Функция DES3GETKEY возвращает значение в двоичном формате, которое, вероятно, должно быть преобразовано к пригодному для употребления типу данных (например, VARCHAR2), так что я могу изменить возвращаемый ключ следующим образом:
Ключ преобразуется в значение типа RAW, а затем в шестнадцатеричное значение. Еще один параметр - which - используется для указания того, два или три прохода будет использоваться при шифровании.
Собрав все воедино, получим такую функцию генерирования ключа.
Важные элементы кода функции пояснены в таблице:
Строки
|
Описание
|
2-9
|
Чрезвычайно важным параметром является значение, инициализирующее последовательность случайных чисел, которое по умолчанию равно восьмикратно повторенной (для образования 80-байтной строки) строке 1234567890. Естественно, это ненадежно, так что используйте вместо этого значения произвольную 80-байтную строковую константу. Более длинные строки не улучшат «случайность», так как использованы будут только первые 80 символов.
|
Строки
|
Описание
|
10
|
По умолчанию предполагается, что будет сгенерирован ключ DES3 для двухпроходного шифрования, т.е. параметр which установлен в 0. Для трехпроходного шифрования необходимо установить данный параметр в значение 1 .
|
17
|
|
18
|
Функция DES3GETKEY возвращает значение типа VARCHAR2.
|
22
|
Эта функция при каждом вызове будет возвращать криптографически случайное значение. Давайте посмотрим, как это работает:
BEGIN
DBMS_
|
_OUTPUT
|
put_
|
ne
|
'Key='
|
1 get_
|
y e
|
|
DBMS_
|
_OUTPUT
|
put_
|
ne
|
'Key='
|
1 get_
|
y e
|
|
DBMS_
|
_OUTPUT
|
put_
|
ne
|
'Key='
|
1 get_
|
_key
|
|
DBMS_
|
_OUTPUT
|
put_
|
ne
|
'Key='
|
1 get_
|
_key
|
|
DBMS_
|
_OUTPUT
|
put_
|
_line
|
'Key='
|
1 get_
|
_key
|
Обратите внимание, что генерируемый ключ каждый раз будет разным, несмотря на то, что начальное значение последовательности случайных чисел не изменится. Поэтому когда вы запустите функцию, реальное возвращенное значение может быть другим; можно считать его случайным.
Используя только что созданную функцию, можно достаточно хорошо зашифровать секретные данные. Рассмотрим простой пример:
< Предыдущая | Следующая > |
---|