Баран С.М., Алибиев Д.Б.
Карагандинский государственный университет им.Е.А.Букетова, Казахстан
ШИФРОВАНИЕ ХРАНИЛИЩА БАЗЫ
ДАННЫХ С ИСПОЛЬЗОВАНИЕМ БИБЛИОТЕКИ MCRYPT
Информационная безопасность,
как и защита информации, задача комплексная, направленная на обеспечение
безопасности, реализуемая внедрением системы безопасности. Проблема защиты
информации является многоплановой и комплексной и охватывает ряд важных задач.
Проблемы информационной безопасности постоянно усугубляются процессами
проникновения во все сферы общества технических средств обработки и передачи
данных и, прежде всего, вычислительных систем.
На сегодняшний день
сформулировано три базовых принципа, которые должна обеспечивать информационная
безопасность:
·
целостность данных —
защита от сбоев, ведущих к потере информации, а также зашита от
неавторизованного создания или уничтожения данных;
·
конфиденциальность
информации;
·
доступность информации
для всех авторизованных пользователей.
При разработке компьютерных
систем, выход из строя или ошибки в работе которых могут привести к тяжелым
последствиям, вопросы компьютерной безопасности становятся первоочередными.
SSL/SSH
защищает данные, которыми обмениваются клиент и сервер, но не защищает сами
данные, хранимые в базе данных. SSL - протокол шифрования на уровне сеанса
передачи данных.
В случае,
если взломщик получил непосредственный доступ к БД (в обход веб-сервера), он
может извлечь интересующие данные или нарушить их целостность, если информация
не защищена на уровне самой БД. Шифрование данных - хороший способ
предотвратить такую ситуацию, но лишь незначительное количество БД
предоставляют такую возможность.
Наиболее
простое решение этой проблемы - установить вначале обыкновенный программный
пакет для шифрования данных, а затем использовать его в ваших PHP-скриптах.
PHP может вам помочь с этой задачей с помощью таких
расширений как Mcrypt и Mhash,
реализующих довольно большое число алгоритмов шифрования. При таком подходе
скрипт вначале шифрует сохраняемые данные, а затем дешифрует их при запросе.
Ниже приведены примеры того, как работает шифрование данных в PHP-скриптах.
В случае
работы со скрытыми служебными данными, если не требуется их нешифрованное
представление (т.е. его не нужно показывать), то, как следствие, можно
использовать хэширование. Хорошо известный пример хэширования - хранение
криптографического хэша от пароля в БД, вместо хранения оригинального значения.
Пример 1 Использование хешированных паролей |
|
Библиотека шифрования Mcrypt
Библиотека Мcrypt поддерживает широкий набор
алгоритмов шифрования , таких как DES, TripleDES, Blowfish, 3-WAY, SAFER-SK64,
SAFER-SK128, TWOFISH, TEA, RC2 и режимов шифровки GOST в CBC, OFB, CFB и ECB.
В отличии от функции crypt(),
функции библиотеки Mcrypt можно использовать для шифрования и дешифрования
вышеприведёнными шифрами. Библиотека libmcrypt-2.2.x, имеет четыре важные
функции mcrypt (mcrypt_cfb(), mcrypt_cbc(),
mcrypt_ecb()
и mcrypt_ofb()),
которые могут оперировать в двух режимах, которые называются MCRYPT_ENCRYPT и
MCRYPT_DECRYPT, соответственно.
Пример 2. Шифровка input-значения шифром TripleDES
под 2.2.x в режиме ECB |
|
При работе с библиотеками libmcrypt 2.4.x или 2.5.x,
эти функции также будут доступны, но рекомендуется использовать продвинутые
функции.
Пример
3. Шифровка input-значения шифром TripleDES под 2.4.x и выше в режиме ECB |
|
Для тестирования был написан скрипт,
который генерирует набор данных и шифрует их разными алгоритмами.
Листинг скрипта генерации набора
данных и шифрования |
<?php // Тестируем шифрование echo '<pre>'; $repeat = 1000; // Количество повторений,
если сильно долго или сильно быстро выполняется $passphrase
= 'My password'; $list
= array ( 0 => 'cast-128', 1 => 'gost', 2 => 'rijndael-128', 3 => 'twofish', 4 => 'cast-256', 5 => 'loki97', 6 => 'rijndael-192', 7 => 'saferplus', 9 => 'blowfish-compat', 10 => 'des', 11 => 'rijndael-256', 12 => 'serpent', 13 => 'xtea', 14 => 'blowfish', 16 => 'rc2', 17 => 'tripledes',); $data =
''; for ($i = 0; $i < 1000;$i++){ //
генерируем случайную
последовательность $data .=
md5(microtime() . rand(), 1); } $times =
array(); foreach($list
AS $alg){ $td = mcrypt_module_open($alg, '',
'cbc', ''); $iv = substr(md5('iv'.$passphrase,
1) . md5('iv'.$passphrase, 1), 0, mcrypt_enc_get_iv_size($td)); $key =
substr(md5('pass1'.$passphrase, 1) . md5('pass2'.$passphrase, 1), 0,
mcrypt_enc_get_key_size($td)); mcrypt_generic_init($td, $key,
$iv); $t = microtime(1); for($i=0; $i < $repeat;$i++){ mcrypt_generic($td,
$data); } $times[$alg] = round(microtime(1)
- $t, 4); mcrypt_module_close($td); } asort($times); print_r($times); ?> |
Тестирование проводилось на 3 серверах:
1.
VPS (Linux, PHP 5.2.17)
2.
Dedic (FreeBSD, PHP
5.2.14)
3.
Local (Win 7, PHP 5.3.6)
При тестировании был выбран режим MCRYPT_CBC, как
наиболее подходящий для шифрования файлов. На всех серверах использовался
Mcrypt 2.5.8.
Тестирование проводилось по 10 раз, 3 лучших
результата усреднялись.
Результаты
тестирования скорости шифрования
Литература:
1.
Handbook of Applied Cryptography by A. Menezes, P. van Oorschot and S.
Vanstone. 1997 by CRC Press, Inc.
2.
Applied Cryptography by
Schneier (ISBN 0-471-11709-9).
3.
http://www.php.ru/manual/ref.mcrypt.html
-функции Mcrypt