DeepEdit!

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

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

Влияние длины ключа

Моя кодовая комбинация - это представленные в числовом виде секретные данные. Если злоумышленник решит взломать зашифрованный код, то выполнение 10000 итераций для его угадывания - тривиальная задача; код будет взломан менее чем за секунду. Что если я использую вместо цифрового ключа алфавитно-цифровой? Это даст 36 возможных значений для каждого символа ключа, так что взломщику придется перебрать не более 364 или 1 679 616 комбинаций; это сложнее, чем 10 000, но все еще возможно. Ключ должен быть усилен или сделан более «стойким» за счет увеличения его длины. В табл. 4.1 показано, как возрастает количество попыток, необходимое для угадывания, с увеличением длины ключа. Так что секрет повышения стойкости ключа заключается в увеличении его длины.
Таблица 4.1. Длина алфавитно-цифрового ключа и максимальное число попыток, необходимых для его угадывания
Длина ключа
Максимальное число попыток для угадывания
4
1679 616
5
60 466176
6
2176 782 336
7
78 364 164 096
8
2 821 109 907 456
9
101 559 956 668 416
10
3 656158 440 062 976

Не забывайте, что компьютеры оперируют битами и байтами (т. е. двоичными числами), а не алфавитно-цифровыми символами. В отдельном разряде ключа может находиться 0 или 1, поэтому 10-разрядный ключ может быть найден за 210 или 1024 попытки, что не представляет никаких трудностей. На практике это означает, что ключ должен быть намного длиннее. Длина ключа выражается в битах, так что ключ из 64 цифр называется 64-битовым. В табл. 4.2 показана зависимость между длиной двоичного ключа и максимальным количеством попыток, необходимым для его угадывания.
Таблица 4.2. Длина двоичного ключа и максимальное число попыток, необходимых для его угадывания
Длина ключа
Максимальное число попыток для угадывания
56
72 057 594 037 927936
57
144115188 075 855 872
58
288 230 376151711744
59
576 460 752 303 423 488
60
1 152 921504 606 846 976
61
2 305 843 009 213 693 952
62
4611686018427387904
63
9 223 372 036 854 775 808
64
18 446 744 073 709 551 616
65
36 893 488 147 419 103 232

Чем длиннее ключ, тем труднее взломать шифр. Но длинные ключи требуют больше времени для шифрования, так как процессору приходится выполнять больше работы. При проектировании инфраструктуры шифрования вам, возможно, придется искать компромисс между длиной ключа и степенью безопасности.
Сравнение симметричного и асимметричного шифрования
В приведенном выше примере для зашифровывания и расшифровывания использовался один и тот же ключ. Как уже говорилось, шифрование такого типа называется симметричным шифрованием. При таком шифровании возникает одна неизбежная трудность: из-за того, что данные расшифровываются тем же ключом, этот ключ должен быть известен получателю. Такой ключ, обычно называемый секретным ключом, получатель должен либо узнать до получения зашифрованных данных (то есть должно иметь место «соглашение об обмене знаниями»), либо ключ должен пересылаться вместе с данными. Для хранимых данных (на диске) такой ключ должен храниться как часть базы данных, чтобы приложения имели возможность расшифровать их. Риски, возникающие в такой ситуации, очевидны. Пересылаемый ключ может быть перехвачен взломщиком, а ключ, хранящийся в базе данных, может быть украден.
Для решения данной проблемы часто используется шифрование другого типа, при котором ключ, применяемый для шифрования, отличается от ключа, используемого при расшифровывании. Из-за различия

ключей такое шифрование называется асимметричным. Вследствие использования двух ключей - секретного и открытого - оно также называется шифрованием открытым ключом. Этот открытый ключ, необходимый при шифровании, известен отправителю и фактически может свободно распространяться. Другой, секретный ключ, нужен только для расшифровывания данных, зашифрованных открытым ключом, и должен храниться в тайне.
Посмотрим, как шифрование открытым ключом может работать в реальной жизни. На рис. 4.2 показано, что Джон ожидает сообщение от Джейн. Процесс шифрования состоит из нескольких шагов:
Джон создает два ключа: открытый и секретный.
Он отправляет открытый ключ Джейн.
Джейн зашифровывает исходное сообщение (называемое открытым текстом) с помощью открытого ключа и посылает зашифрованное сообщение Джону.
Джон расшифровывает его при помощи сгенерированного им ранее секретного ключа.
Обратите внимание, что здесь стороны не обмениваются расшифровывающим ключом. Открытый ключ посылается отправителю, но поскольку как этот ключ не годится для расшифровывания данных, его возможный перехват не создает никакой угрозы.
Следует, однако, опасаться попыток спуфинга и фишинга, способных нарушить безопасность данного способа шифрования. Сценарий может быть таким:
Джон создает пару из открытого и секретного ключей и передает открытый ключ Джейн.
Взломщик прослушивает канал связи и перехватывает открытый ключ Джона. Иногда даже этого не требуется, так как Джон может намеренно сделать открытый ключ общедоступным.
Взломщик с помощью своих программ создает другую пару из открытого и секретного ключей (используя имя Джона, чтобы имитировать принадлежность открытого ключа ему).
Взломщик отправляет сгенерированный им новый открытый ключ вместо исходного, созданного Джоном. Джейн ничего не знает о подмене и считает, что это подлинный ключ Джона.
Джейн шифрует этим открытым ключом сообщение и отправляет его Джону.
Однако взломщик по-прежнему прослушивает канал и перехватывает это сообщение. У него есть секретный ключ, соответствующий открытому, поэтому он может расшифровать сообщение. Через мгновение преимущества секретности сведены на нет.
Правда, остается небольшая проблема. Когда Джон в конце концов получает зашифрованное сообщение и пытается его расшифровать, его ждет разочарование: имеющийся у него секретный ключ оказывается неподходящим. Это вызовет подозрение. Во избежание этого взломщику надо лишь повторно зашифровать сообщение настоящим открытым ключом Джона и переслать ему. Джон вряд ли догадается о том, что на самом деле произошло.
Звучит пугающе? Еще бы. Ну и каково же решение? Решение заключается в том, чтобы как-то проверить подлинность открытого ключа и убедиться, что он создан настоящим отправителем. Для этого можно воспользоваться проверкой отпечатков пальцев. Эта тема выходит за пределы данной книги, но, в двух словах, когда Джейн шифрует сообщение открытым ключом, она проверяет «отпечаток пальца» - сигнатуру ключа, убеждаясь в том, что он действительно принадлежит Джону. (Это обсуждение показывает также необходимость защиты канала связи между отправителем и получателем.)
Данные зашифровываются и расшифровываются разными ключами, так как же расшифровывающий процесс узнает, какой ключ использовался при шифровании? Вспомните, что оба ключа были сгенерированы получателем одновременно, вследствие чего между ними существует определенная математическая зависимость. Один из них - просто противоположность другого: сделанное с помощью одного ключа можно отменить при помощи другого. Поэтому расшифровывающий процесс может восстановить данные без использования ключа шифрования.
Вследствие того, что между открытым и секретным ключами существует математическая зависимость, теоретически можно вычислить секретный ключ на основе открытого ключа, хотя это весьма трудоемкий процесс, требующий разложения на множители очень больших чисел. Поэтому для уменьшения вероятности взлома методом «грубой силы» обычно используются ключи длиной 1024 бит, в то время как при симметричном шифровании применяются 56-, 64-, 128- и 256-битовые ключи. Длина в 1024 бита является типовой, но не стандартной. Более короткие ключи также могут быть использованы.
Oracle позволяет использовать асимметричное шифрование в двух ситуациях:
При передаче данных между клиентом и сервером.
При аутентификации пользователей.
В обоих случаях требуется наличие компонента Oracle Advanced Security Option (ASO), отсутствующего в базовой конфигурации и поставляемого за отдельную плату. Этот компонент активирует шифрование асимметричным ключом только в указанных случаях; он не имеет простого, готового к использованию интерфейса, который позволил бы организовать шифрование всех хранимых данных.
Единственный ориентированный на разработчиков инструмент, свободно доступный в Oracle, обеспечивает симметричное шифрование. Поэтому в данной главе мы сосредоточим внимание на этом виде шифрования.
Так как при асимметричном шифровании используются разные ключи для зашифровывания и расшифровывания, отправителю ^ д не надо знать секретный ключ, который будет использован получателем. При симметричном шифровании, напротив, используется один и тот же ключ, поэтому в таких системах защита ключей очень важна.
 









jAntivirus