Главная » SQL, Базы данных » ШИФРОВАНИЕ ДАННЫХ СУБД

0

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

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

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

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

AS KINGFISHERS CATCH FIRE

(Здесь для простоты изложения предполагается, что данные состоят только из пробелов и прописных символов.) Кроме того, допустим, что ключом  шифрования является следующая строка.

ELIOT

Ниже описыва7ется используемый алгоритм шифрования.

1.    Разбейте открытый текст на блоки, длина которых равна длине ключа шифрования.

AS+KI NGFIS HERS+ CATCH +FIRE

(Здесь пробелы обозначены знаком "+".)

2.  Замените каждый символ открытого текста целым числом в диапазоне 00-26, используя для пробела число 00, для А — число 01,…, для Z — число 26. В результате получится следующая строка цифр.

0119001109 1407060919 0805181900 0301200308 0006091805

3.    Повторите п. 2 для ключа шифрования, в результате чего получится следующая строка цифр.

0512091520

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

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

FDIZB SSOXL MQ+GT HMBRA ERRFY

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

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

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

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

шифрования. Подстановка на i-м шаге контролируется не самим исходным  ключом шифрования к, а ключом Ki, который вычисляется на основе значений К и i. Более подробно этот материал излагается в [17.20].

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

Но по мере увеличения быстродействия и производительности компьютеров, стандарт DES все чаще стал подвергаться критике на основании того, что в нем используется сравнительно короткие (56-битовые) ключи. Поэтому 2000 году  Федеральным правительством США был принят стандарт Advanced Encryption Standard (AES), основанный на так называемом алгоритме Рейндаля (Rijndael)  [17.5], в котором используются ключи длиной 128, 192 или 256 битов. Применение даже 128-битовых ключей означает, что новый стандарт является значительно более безопасным по сравнению со старым; согласно [26.34], если "когда-то будет создан компьютер, действующий достаточно быстро для того, чтобы взломать шифр DES за одну секунду, то этому компьютеру придется работать примерно 149 млрд. лет, чтобы взломать 128-битовый ключ AES" (цитата немного перефразирована). Дополнительные сведения по этой теме приведены в [17.5].

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

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

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

буквам фамилий его авторов), положены описанные ниже два факта.

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

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

числа, которое не является простым) на простые множители.

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

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

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

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

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

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

d   *                                         е   =     1   mo d u l o                                         (  р   1  )                                          *                                         (  д   1  )

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

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

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

С =  Рemodulo  r

6. Для расшифровки части зашифрованного текста С замените его открытым текстом

Р, определяемым согласно следующей формуле:

Р =   d modulo  r

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

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

Пример. Пусть р = 3, д = 5; тогда r = 15, а произведение (р-1) * (д-1) =  8.

Пусть е = 11 (простое число больше р и д). Вычислим d согласно следующей формуле.

4 Несмотря на это, и в отношении надежности схемы RSA уже возникают некоторые сомнения. Работа [17.12] была опубликована в 1977 году, а в 1990 году Ленстра (Lenstra) и Манассе (Manasse) смогли успешно разложить на простые множители число из 155 цифр [17.24]; они оценили, что выполненные вычисления, в которых участвовала тысяча компьютеров, эквивалентны расчету на одном компьютере со скоростью 1 млн инструкций в секунду в течение 273 лет. Данное число из 155 цифр было девятым числом Ферма: 2!|2+1 (обратите внимание, что 512 = 2′). См. также работу [17.14], в которой сообщается о совершенно другом (и тоже успешном!) подходе к расшифровке алгоритма RSA.

d *  11 =  1 modulo 8

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

С = Рe modulo r = 13n modulo 15

= 1 792 160 394 037 modulo 15

= 7

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

Р Сd modulo r

= 73 modulo 15

=3 43 modulo

15 . = 13

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

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

С =  ЕСВ   (  DCA  (  Р  )   )

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

ЕСА ( DCB ( С ) )

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

= ЕСА ( DCA (   Р )                                             ) /* поскольку DCB и ЕСВ взаимно

исключаются */

= Р                                                                                   /* поскольку ЕСА и DCA взаимно исключаются

*/

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

Источник: Дейт К. Дж., Введение в системы баз данных, 8-е издание.: Пер. с англ. — М.: Издательский дом «Вильямс», 2005. — 1328 с.: ил. — Парал. тит. англ.

По теме:

  • Комментарии