DeepEdit!

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

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

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

Говоря доступным языком, шифрование - это сокрытие содержимого, изменение данных таким способом, что знание о том, как вернуть данные в первоначальный вид, доступно только их создателю. В этой главе мы обсудим поддержку шифрования в Oracle, останавливаясь прежде всего на концепциях и возможностях, наиболее интересных администраторам баз данных. Основное внимание будет уделено использованию встроенных пакетов Oracle: DBMS_CRYPTO (доступен начиная с версии Oracle 10g- Release 1) и DBMS_OBFUSCATION_TOOLKIT (используется преимущественно с более ранними версиями). Остановимся также на защите данных на диске, не рассматривая защиту данных в процессе передачи между клиентом и сервером и защиту данных в процессе аутентификации (две последние задачи требуют наличия опции Advanced Security Option (ASO), поставляемой за отдельную плату). Исключением является только передача паролей, которые шифруются всегда, независимо от наличия ASO.
В этой главе вы научитесь создавать базовую систему шифрования, защищающую конфиденциальные данные от неавторизованных пользователей. Вы узнаете, как построить систему управления ключами шифрования, обеспечивающую одновременно сохранность ключей и прозрачность доступа к данным для пользователей приложений. Вы также познакомитесь с криптографическим хешированием и научитесь использовать код аутентификации сообщения MAC (Message Authentication Code). Будет описан режим прозрачного шифрования данных TDE (Transparent Data Encryption), появившийся в Oracle 10^ Release 2 и позволяющий с наименьшими усилиями шифровать важные данные и удовлетворяющий требованиям многочисленных нормативных документов.
В соответствии с рекомендациями Oracle, если вы используете Oracle 10^, вам следует перейти к использованию пакета DBMS_CRYPTO, отка завшись от DBMS_OBFUSCATION_TOOLKIT. Однако, поскольку версия Oracle9/ Database все еще широко используется, мы сначала изучим пакет DBMS_OBFUSCATION_TOOLKIT, а затем рассмотрим возможности версии Oracle 10g. Даже если вы используете новую версию, вам имеет смысл прочитать этот раздел, чтобы убедиться в том, что вы хорошо ориентируетесь в концепциях шифрования.
Пакет DBMS_CRYPTO имеет ряд преимуществ перед DBMS_OBFUSCATION_TOOLKIT:
Больший выбор алгоритмов шифрования, в частности, поддержка последнего стандарта AES (Advanced Encryption Standard).
Возможность поточного шифрования, то есть организации потока предназначенных для шифрования данных.
Поддержка алгоритма SHA-1 (Secure Hash Algorithm 1).
Способность создания кода MAC.
Шифрование больших объектов (LOB) в их собственном формате.
Все эти возможности будут рассмотрены в данной главе. В приложении A вы найдете краткий справочник по процедурам и функциям пакетов DBMS_CRYPTO и DBMS_OBFUSCATION_TOOLKIT.
В этой книге не рассматриваются подробности криптографических алгоритмов, теория компьютерного шифрования и искусство его применения - эта область требует гораздо более глубокого изучения, чем мы можем здесь себе позволить. Мы стремимся лишь к тому, чтобы читатели могли приступить к созданию защищенной системы на основе встроенных инструментов Oracle, а не изобретали велосипед, занимаясь реализацией уже существующих алгоритмов. Существует множество прекрасных книг, из которых вы можете почерпнуть дополнительные сведения по криптоанализу, математическим основам шифрования и смежным вопросам.
Введение в шифрование
Давайте представим, что вы каждый день уносите с работы домой свой ноутбук, а на следующее утро приносите его обратно в офис и пристегиваете к своему столу кабелем с кодовым замком. Вы ведь понимаете, как важно помнить кодовую комбинацию? Если вдруг вы ее забудете, ваш ноутбук будет прикован к столу, пока вы не перережете кабель. Может быть, вы легко запоминаете цифры, но я лично - нет. Я с трудом запоминаю даже свой телефонный номер, не говоря уже об окружающих меня многочисленных секретных номерах: номере социального страхования, PIN-коде банковского счета, пароле голосовой почты и (увы!) годовщинах. Чтобы справиться с этой проблемой, я нашел гениальный способ запоминания кодовой комбинации: я наклеил этикетку с кодом прямо на замок!
Теперь у вас, наверное, возник вопрос, рискнете ли вы доверить мне какой-нибудь секрет!
Мой мозг, как и у всего остального человечества, включает в себя долговременную память (диск) и оперативное запоминающее устройство (ОЗУ), и, похоже, числа обычно записываются в ОЗУ. Некоторое время числа используются, а затем, чтобы освободить место для новых, помечаются как устаревшие (совсем как в области SGA экземпляра Oracle) и забываются. В компьютерах такое поведение является штатным и закладывается при проектировании. СУБД предназначаются для хранения информации и предоставления ее пользователям по запросу. Исторически считается, что требующие доступа пользователи уже прошли процедуру аутентификации, подтвердившую, что они действительно те, за кого себя выдают. При этом предполагается, что само по себе хранилище конфиденциальной информации не является брешью в системе безопасности.
Возможно, когда-нибудь так и будет, но только не сейчас, когда взломщики, кажется, уже повсюду: возможно, они просто любопытны, а может быть, намереваются продать сведения о состоянии ваших счетов конкурентам или отомстить вам за что-то, разрушив систему. Атака может произойти снаружи, через Интернет, или изнутри вашей организации. (Исследования и в самом деле показывают, что большинство взломов происходят изнутри.) Очевидно, при столь многочисленных угрозах безопасности чувствительные данные должны быть защищены от неавторизованного доступа. Какие же возможности предоставляет Oracle для такой защиты?
Вернемся к моему кодовому замку - его комбинация 3451. Не будучи законченным идиотом, я не стал записывать на своем замке это число. Вместо этого я воспользовался комбинацией, которую помню всегда - 6754, и с ее помощью изменил комбинацию, сложив соответствующие цифры:

В результате получились числа 9, 11, 10 и 5. В своей схеме я использую только однозначные числа, для этого я сбрасываю в двузначных числах цифру десятков, тогда 10 превращается в 0, 11 превращается в 1 и т. д. При помощи своего секретного ключа 6754 я превратил число 3451 в 9105. Именно это число я написал на кодовом замке, а вовсе не исходную комбинацию. Если я забуду ее, то прочитаю написанное на замке число, с помощью своего магического числа 6754 выполню действия, противоположные сделанным ранее, и получу число 3451, которое откроет замок. Число 9105 открыто для всеобщего обозрения, но похититель не сможет открыть замок, пока не узнает еще и ключ, 6754.
Таким образом, я зашифровал число, представляющее мою кодовую комбинацию. Число 6754 использовано в процессе шифрования в качестве ключа. Этот тип шифрования известен как симметричное шиф рование, так как для зашифровывания и расшифровывания используется один и тот же ключ. (В противоположность этому при асимметричном шифровании, описанном ниже в этой главе, применяются два ключа: открытый и секретный.) Описанный мной способ шифрования кодовой комбинации представляет собой простейшую реализацию алгоритма шифрования.
 









jAntivirus