DeepEdit!

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

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

Многопроходное шифрование

В этой главе (в разделе «Алгоритмы шифрования») я уже упоминал об усовершенствовании стандарта DES за счет двойного или тройного шифрования содержимого, в результате чего и появилось название Triple DES или DES3. В Oracle DES3 реализуется в функции DES3EN- CRYPT, которая по умолчанию использует двухпроходное шифрование. Однако, используя новый параметр which, вы можете указать функции на необходимость выполнения трех проходов. Значение по умолчанию (0) соответствует двум проходам, а значение 1 - трем. Естественно, три прохода обеспечивают большую надежность.
Для использования трехпроходного алгоритма необходим ключ длиною не меньше 24 байт (вместо 16 байт, которыми мы довольствовались до сих пор). Изменим исходную функцию, с тем чтобы позволить пользователю выбрать количество проходов: 2 или 3.
Когда следует использовать шифрование в формате RAW?
Во-первых, как уже говорилось, шифрование в формате RAW используется для данных типа BLOB.
Во-вторых, шифрование в формате RAW используется в случае, если в базе данных используются буквы не английского алфавита. Если вы пользуетесь функциональностью Oracle Globalization Support (которая раньше называлась National Language Support - NLS), то шифрование в формате RAW обеспечит обработку таких символов без выполнения каких-либо дополнительных операций (в частности, при экспорте и импорте данных). Зашифрованные данные можно будет перемещать из одной базы данных в другую, не опасаясь их повреждения.

Изменение количества проходов при зашифровывании означает также, что и расшифровывание должно быть трехпроходным. При расшифровывании необходимо явно установить параметр which в значение 1.

Длина ключа теперь составляет 24 байта - минимум, необходимый для выполнения трехпроходного шифрования.
Сводим воедино
Мы изучили составляющие процесса шифрования, а теперь давайте попробуем соединить их все вместе и создать наш собственный комплексный инструмент шифрования. Изменим нашу старую добрую функцию get_enc_val следующим образом:



Обратите внимание, что при зашифровывании я дополнил параметр, содержащий вектор инициализации, пробелами так, чтобы его длина была кратна восьми. После расшифровывания необходимо удалить эти добавленные пустые символы, как мы сделали это в строке возврата приведенной выше функции.
Невозможно зашифровать данные, уже зашифрованные средствами пакета DBMS_OBFUSCATION_TOOLKIT. При подобной попытке пакет генерирует ошибку ORA-28233 в связи с невозможностью двойного шифрования.

Генерирование ключей

Из приведенных выше рассуждений должно быть очевидно, что самым слабым местом шифрования является его ключ. Для успешной расшифровки зашифрованных данных необходим ключ (он в прямом смысле является ключом к успеху), поэтому для обеспечения безопасности шифрования необходимо сделать угадывание ключа чрезвычай-

но сложным. В рассмотренных ранее примерах использовался 16-байт- ный ключ для двухпроходного шифрования DES3 и 24-байтный ключ для трехпроходного шифрования DES3.
При выборе ключа шифрования помните о двух важных моментах:
Чем длиннее ключ, тем сложнее его угадать. Двухпроходный метод допускает использование ключа из 128 бит, а трехпроходный - из 192 бит. Следует выбирать наиболее длинный из возможных ключей.
Ключ должен быть не только длинным, он не должен соответствовать никакому шаблону, который было бы легко угадать. Например, ранее в примере я использовал в качестве ключа последовательность цифр во вполне предсказуемом порядке - 1234567890123456. Это недопустимо. Значение a2H8s7X40Ys8346yp2 гораздо более удачно.
 









jAntivirus