- •Часть IV
- •Глава 13 Восстановление
- •13.1. Введение
- •13.2. Транзакции
- •13.3. Восстановление транзакции
- •13.4. Восстановление системы
- •13.5. Восстановление носителей
- •13.6. Двухфазная фиксация
- •13.7. Поддержка языка sql
- •13.8. Резюме
- •Глава 14 Параллелизм
- •14.1. Введение
- •14.2. Три проблемы параллелизма
- •14.3. Блокировка
- •14.4. Решение проблем параллелизма
- •14.5. Тупиковая ситуация
- •14.6. Способность к упорядочению
- •14.7. Уровни изоляции
- •14.8. Преднамеренная блокировка
- •IX s
- •14.9. Поддержка блокировок в sql
- •14.10. Резюме
- •14.13. Papadimitriou с. The Theory of Database Concurrency Control.— Rockville, Md.: Computer Science Press, 1986.
- •Глава 15 Безопасность
- •15.1. Введение
- •15.2. Общие соображения
- •15.3. Избирательное управление доступом
- •15.4. Модификация запроса
- •15.5. Обязательное управление доступом
- •15.6. Шифрование данных
- •Стандарт шифрования данных
- •15.7. Поддержка мер обеспечения безопасности в языке sql
- •15.8. Резюме
15.6. Шифрование данных
Замечание. Большая часть изложенного в этом разделе материала впервые была опубликована в несколько иной форме в [15.4].
До сих пор в этой главе подразумевалось, что предполагаемый нелегальный пользователь пытается незаконно проникнуть в базу данных с помощью обычных средств доступа, имеющихся в системе. Теперь следует рассмотреть случай, когда такой пользователь пытается проникнуть в базу данных, минуя систему, т.е. физически перемещая часть базы данных или подключаясь к коммуникационному каналу. Наиболее эффективным методом борьбы с такими угрозами является шифрование данных, т.е. хранение и передача особо важных данных в зашифрованном виде.
Для обсуждения основных концепций кодирования данных следует ввести некоторые новые понятия. Исходные (незакодированные) данные называются открытым текстом. Открытый текст шифруется с помощью специального алгоритма шифрования. В качестве входных данных для такого алгоритма выступают открытый текст и ключ шифрования, а в качестве выходных — зашифрованная форма открытого текста, которая называется зашифрованным текстом. Если детали алгоритма шифрования могут быть опубликованы или, по крайней мере, могут не утаиваться, то ключ шифрования обязательно хранится в секрете. Именно зашифрованный текст, который непонятен тем, кто не обладает ключом шифрования, хранится в базе данных и передается по коммуникационному каналу.
Пример. Пусть в качестве открытого текста дана следующая строка:
AS KINGFISHERS CATCH FIRE
(Здесь для простоты изложения предполагается, что данные состоят только из пробелов и прописных символов.) Кроме того, допустим, что ключом шифрования является строка
ELIOT
с приведенным ниже алгоритмом шифрования.
1. Разбейте открытый текст на блоки, длина которых равна длине ключа шифрования:
AS+KI NGFIS HERS+ CATCH +FIRE
(здесь пробелы обозначены знаком "+").
2. Замените каждый символ открытого текста целым числом в диапазоне 00—26, используя для пробела число 00, для А — число 01, ..., для Z — число 26. В результате получится строка цифр
0119001109 1407060919 0805181900 0301200308 0006091805
3. Повторите этап 2 для ключа шифрования
• 0512091520
4. Теперь значения для каждого символа в каждом блоке открытого текста (зашифрованного в пункте 2) просуммируйте с соответствующими значениями каждого символа . ключа шифрования (зашифрованного в пункте 3), причем для каждой суммы таких двух значений посчитайте и запишите остаток от деления на 27:
0119001109 1407060919 0805181900 0301200308 0006091805 0512091520 0512091520 0512091520 0512091520 0512091520
0604092602 1919152412 1317000720 0813021801 0518180625
5. Замените каждое число в нижней строке пункта 4 соответствующим текстовым символом:
FDIZB SSOXL MQ+GT HMBRA ERRFY
Если ключ известен, то процедура расшифровки в этом примере может быть выполнена достаточно просто. (Упражнение. Расшифруйте зашифрованный текст в рассмотренном выше примере.) Вопрос заключается в том, насколько сложно нелегальному пользователю определить ключ шифрования, обладая открытым и зашифрованным текстом. В данном простом примере это "не очень" сложно выполнить, но так же просто это может быть сделано и в более сложных схемах шифрования. В идеале схема шифрования должна быть такой, чтобы усилия, затраченные на ее расшифровку, во много раз превышали полученные при этом выгоды. (Фактически это замечание применимо ко всем аспектам проблемы обеспечения безопасности: т.е. стоимость осуществления попыток взлома системы безопасности должна быть значительно выше потенциальной выгоды от этого.) Предельной целью поиска таких схем следует считать схему, для которой сам ее разработчик, обладая открытым и зашифрованным вариантами одной и той же части текста, не в состоянии определить ключ и, следовательно, расшифровать другую часть зашифрованного текста.