DeepEdit!

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

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

Использование DES3GETKEY

В пакет 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
Начальное значение должно иметь длину 80 байт. Если пользова­тель предоставляет более короткое значение, то функция примет его и дополнит до 80 байт, вместо того чтобы генерировать ошибку.
18
Функция DES3GETKEY возвращает значение типа VARCHAR2.
22
Возвращаемое значение имеет тип VARCHAR2, но содержит множество управляющих символов. Преобразуем его сначала к типу данных RAW, а затем - к шестнадцатеричному значению.

Эта функция при каждом вызове будет возвращать криптографически случайное значение. Давайте посмотрим, как это работает:
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




Обратите внимание, что генерируемый ключ каждый раз будет разным, несмотря на то, что начальное значение последовательности случайных чисел не изменится. Поэтому когда вы запустите функцию, реальное возвращенное значение может быть другим; можно считать его случайным.
Использование ключа в шифровании
Используя только что созданную функцию, можно достаточно хорошо зашифровать секретные данные. Рассмотрим простой пример:
 









jAntivirus