Скачиваний:
82
Добавлен:
02.05.2014
Размер:
2.28 Mб
Скачать

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

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

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

Припер. Пусть в качестве открытого текста дана следующая строка.

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. Теперь значения, помещенные вместо каждого символа в каждом блоке открытого текста, просуммируйте с соответствующими значениями, подставленными вместо символов ключа шифрования, и для каждой суммы из указанных двух значений оп- ределите и запишите остаток от деления на 27.

0119001109 1407060919 0805181900 0301200308 0006091805 0512091520 0512091520 0512091520 0512091520 0512091520 0604092602 1919152412 1317000720 0813021801 0518180625

5. Замените каждое число в нижней строке п. 4 соответствующим текстовым символом.

FDIZB SSOXL MQ+GT HMBRA ERRFY

Если ключ шифрования известен, то процедура расшифровки в этом примере может быть выполнена достаточно просто. {Упражнение. Расшифруйте зашифрованный текст в рассмотренном выше примере.) Вопрос заключается в том, насколько сложно нелегаль- ному пользователю определить ключ шифрования, обладая открытым и зашифрованным текстами. В данном простом примере это не очень сложно выполнить, однако вполне очевидно, что можно разработать и более сложные схемы шифрования. В идеале, схема шифрования должна быть такой, чтобы усилия, затраченные на ее расшифровку, во мно- го раз превышали полученные при этом выгоды. (Фактически это замечание применимо ко всем аспектам проблемы обеспечения безопасности, т.е. стоимость осуществления попыток взлома системы защиты должна быть значительно выше потенциальной выгоды от этого.) Предельной целью поиска таких схем следует считать схему, для которой сам ее разработчик, обладая открытым и зашифрованным вариантами одной и той же части текста, не в состоянии определить ключ и, следовательно, расшифровать другую часть зашифрованного текста.

Стандарт шифрования данных

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

их комбинации, способны обеспечить достаточно высокую степень безопасности. Од- ним из таких алгоритмов является Data Encryption Standard (DES), разработанный фирмой IBM и принятый в 1977 году в качестве Федерального стандарта шифрования данных США [16.18].

Согласно этому стандарту открытый текст делится на блоки по 64 бит и каждый блок шифруется с помощью 64-битного ключа (в действительности этот ключ состоит из 56 бит данных и 8 бит четности, так что существует не 264, а только 256 возможных клю- чей). Сначала блок шифруется путем перестановки, затем переставленные данные блока подвергаются обработке посредством подстановки, включающей 16 последовательных сложных шагов, после этого к данным еще раз применяется обратная начальной проце- дура перестановки, которая и приводит к получению окончательного результата шифро- вания. Подстановка на i-м шаге контролируется не самим исходным ключом шифрова- ния К, а ключом Ki, который вычисляется на основе значений К и L Более подробно этот материал излагается в [16.18].

Стандартом шифрования данных предусматривается, что алгоритм расшифровки идентичен алгоритму шифрования, но ключи Ki применяются в обратном порядке.

Шифрование на основе открытого ключа

В течение многих лет существовало предположение, что стандарт шифрования данных DES не является абсолютно безопасным. Действительно, после создания систем с большим количеством высокопроизводительных параллельных процессо- ров стало ясно, что этот стандарт может быть взломан путем применения одной лишь "грубой силы", без использования каких-либо сложных методов расшифровки. Многие специалисты считают, что по сравнению с самыми современными методами, построенными на основе использования открытого ключа, стандарт шифрования данных DES и подобные ему традиционные методы выглядят технологически уста- ревшими. В методах с использованием открытого ключа внешнему миру доступны как алгоритм шифрования, так и ключ шифрования, поэтому любой желающий мо- жет преобразовать открытый текст в зашифрованный. Однако соответствующий ключ расшифровки хранится в секрете (в методах открытого ключа используются два ключа: один — для шифрования, другой — для расшифровки). Более того, ключ расшифровки не может быть просто выведен из ключа шифрования, поэтому лицо, выполнившее шифрование исходного текста, не сможет его расшифровать без спе- циального разрешения.

Первоначальная идея использования такого метода принадлежит Диффи (Diffie) и Хельману (Hellman) [16.7], однако здесь для демонстрации подобных методов будет опи- сан наиболее известный подход, разработанный Райвестом (Rivest), Шамиром (Shamir) и Адлеманом (Adleman) [16.15], В основу этого подхода, названного RSA-схемой (по пер- вым буквам фамилий его авторов), положены следующие два факта.

  1. Существует быстрый алгоритм определения, является ли данное число простым.

  2. Не существует быстрого алгоритма разложения данного составного числа (т.е. чис- ла, которое не является простым) на простые множители.

В [16.10] приведен пример, в котором для определения, является ли число из 130 цифр простым, потребовалось 7 минут вычислений на некотором компьютере, тогда как для поиска (на том же компьютере) двух простых множителей числа, получаемого

умножением двух простых чисел, состоящих из 63 цифр, потребуется около 40 квад- рильонов лет (1 квадрильон = 1 ООО ООО ООО ООО ООО)4.

RSA-схема предусматривает выполнение приведенной ниже последовательности действий.

  1. Выберите два произвольных и разных больших простых числа р и д, а затем вы- числите их произведение г = р * д.

  2. Выберите произвольное большое целое число е, которое является взаимно простым (т.е. не имеет общих множителей) по отношению к произведению (р-1) * (?-1). Это целое число е и будет служить ключом шифрования. Замечание. Выбрать чис- ло е достаточно просто, например для него подойдет любое простое число, которое больше чисел р и д.

  3. Выберите в качестве ключа расшифровки число d, которое является "обратным от- носительно умножения" на е по модулю (р-1) * (д-1}, т.е. такое число, для кото- рого выполняется следующее соотношение.

d * е = 1 modulo (р - 1) * (g - 1)

Алгоритм вычисления d для заданных чисел е, р и д достаточно прост и полностью приведен в [16.15].

  1. При этом огласке могут быть преданы числа г и е, но не d

  1. Для шифрования части открытого текста Р (который для простоты рассматривается как целое число, меньшее г) заменим его зашифрованным текстом согласно сле- дующей формуле.

С = F modulo г

6. Для расшифровки части зашифрованного текста С замените его открытым текстом Р, определяемым согласно следующей формуле.

Р - (f modulo г

В [16.15] доказывается работоспособность этой схемы, т.е. возможность расшифров- ки текста С с использованием числа d для восстановления исходного открытого текста Р. Однако, как упоминалось ранее, вычисление d для известных чисел г и в (а не р и д) практически неосуществимо. Поэтому любой пользователь может зашифровать откры- тый текст, но расшифровать зашифрованный текст смогут только санкционированные пользователи (т.е. те, кто знают число d).

* Несмотря на это некоторые сомнения существуют и в отношении RSA-схемы. Работа [16.10] была опубликована в 1977 году, а в 1990 году Арьену Ленстра (Arjen Lenstra) и Мару Ма- нассе (Mark Manasse) удалось успешно разложить на простые множители число из 155 цифр [16.22]. Они оценили, что выполненные вычисления, в которых участвовала тысяча компьюте- ров, эквивалентны расчету на одном компьютере со скоростью 1 млн инструкций в секунду в те- чение 273 лет. Данное число из 155 цифр было девятым числом Ферма: 2513+1 (обратите внима- ние, что 512 = 29). См. также работу [16.12], в которой сообщается о совершенно другом — и успешном — подходе к расшифровке алгоритма RSA.

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

Пример, Пусть р = 3, д = 5; тогда г = 15, а произведение (р-1) * -1) - 8. Пусть е = И (простое число, большее р и д). Вычислим d согласно следующей формуле.

d * 11 = 1 modulo 8

В результате получим d = 3.

Теперь допустим, что открытый текст Р состоит из целого числа 13; тогда зашифро- ванный текст С будет иметь следующий вид.

С = F modulo г - 13" modulo 15 = 1 792 160 394 037 modulo 15 = 7

Теперь исходный открытый текст Р может быть получен с помощью обратной процедуры.

Р = С* modulo г = 73 modulo 15 =343 modulo 15 = 13 I

Поскольку числа end взаимно обратны, в методах шифрования на основе открытого ключа также можно подписывать отсылаемые сообщения, что позволит получателю иметь уверенность в том, что данное сообщение было получено именно от того лица, ко- торое объявлено его отправителем (т.е. такая подпись не может быть подделана). Допус- тим, что пользователи А и В общаются друг с другом с помощью метода шифрования на основе открытого ключа. Пусть они предали гласности по одному алгоритму шифрова- ния (с включением в каждый из них соответствующего ключа шифрования), но хранят в секрете друг от друга алгоритм и ключ расшифровки. Пусть алгоритмы шифрования со- общений ЕСА и ЕСВ используются для шифрования сообщений, посылаемых пользовате- лям А и В соответственно, а отвечающими им алгоритмами расшифровки являются алго- ритмы DCA и DCB. Следует отметить, что алгоритмы шифрования и расшифровки ЕСА и DCA, как и алгоритмы ЕСВ и DCB, являются взаимно обратными.

Теперь предположим, что пользователь А хочет отослать часть открытого текста Р пользователю В. Вместо вычисления результата ЕСВ(Р) и отправки его пользователю В пользователь А сначала применяет для открытого текста Р алгоритм расшифровки DCA, а затем зашифровывает полученный результат и в зашифрованном виде С передает его пользователю В.

С = ЕСВ ( DCA ( Р ) )

После получения зашифрованного текста С пользователь В применяет сначала алго- ритм расшифровки DCB, а затем — алгоритм шифрования ЕСА, что позволяет ему в ре- зультате получить открытый текст Р.

ЕСА ( DCB ( С ) )

= ЕСА ( DCB ( ЕСВ ( DCA ( Р ) ) ) )

= ЕСА ( DCA ( Р ) ) II поскольку DCB й ЕСВ взаимно исключаются ■ Р // поскольку ЕСА и DCA взаимно исключаются

Таким образом, пользователь В знает, что полученное им сообщение действи- тельно пришло от пользователя А, поскольку алгоритм шифрования ЕСА приведет к получению результата Р, только если в процессе шифрования применялся алгоритм расшифровки DCA. Причем никто, даже пользователь В, не сможет подделать под- пись пользователя А.

Соседние файлы в папке Дейт К. Дж. Введение в системы баз данных [7 издание]