Безопасность и MySQL
Здесь будут рассмотрены многочисленные функции шифрования данных, которые входят в состав СУБД MySQL. Чаще всего шифрованию подвергаются пароли. В случае взлома базы данных злоумышленник получит доступ только к зашифрованным записям, на расшифровку которых потребуется время, за которое пароли могут стать не актуальными.
Функции шифрования MySQL
Различают два вида шифрования: обратимое и необратимое. При обратимом шифровании зашифрованный текст может быть подвергнут дешифровке. При необратимом шифровании результатом является хэш, который невозможно восстановить в исходный текст.
Примечание. Если функции передается в качестве одного из аргументов значение NULL
, она также возвращает NULL
.
Функции | Описание |
---|---|
AES_ENCRYPT(str, key_str) | Принимает в качестве аргумента str строку, которую необходимо подвергнуть шифрованию, и секретный ключ key_str. Входные аргументы могут быть любой длины ; |
AES_DECRYPT(crypt_str, key_str) | Принимает в качестве первого аргумента зашифрованную при помощи AES_ENCRYPT() строку. Ключ key_str при этом должен совпадать как в первой так и во второй строках. Если функция AES_DECRYPT() обнаруживает некорректные данные или некорректное заполнение строки, должно возвращаться значение NULL. Однако AES_DECRYPT() вполне может вернуть величину отличную от NULL, или просто "мусор" |
ENCODE(str, pass_str) | Шифрует строку str, используя аргумент pass_str как секретный ключ |
DECODE(crypt_str, pass_str) | Дешифрует строку crypt_str, зашифрованную функцией AES_DECRYPT(). Аргумент pass_str используется как секретный ключ |
DES_ENCRYPT(str [, (key_number|key_string)]) | Шифрует строку str, используя аргумент pass_str как секретный ключ. В качестве второго необязательного параметра может выступать строка key_string, задающая секретрый ключ. В случае использования секретного ключа необходимо приводить его в качестве второго параметра и в функции дешифровки DES_DECRYPT(). Вместо секретного ключа можно указать номер key_number, принимающий значение от 0 до 9. Номер указывает на запись в ключевом DES-файле сервера, местоположение которого можно задать при старте сервера MySQL в параметре --des-key-file |
DES_DECRYPT(str [, key_string]) | Дешифрует строку str, зашифрованную при помощи функции DES_ENCRYPT(). Если при шифровании в качестве второго параметра функции DES_ENCRYPT() было передано число или второй параметр был опущен, то параметр key_string функции DES_DECRYPT() указывать уже не требуется, так как он прописывается в зашифрованную строку. Такой подход, когда секретный ключ хранится на сервере и не передается через сетевое соединение, значительно безопаснее, поскольку значение ключа невозможно извлечь из сетевого трафика. Если второй параметр не указывается, то предполагается, что используется первая строка DES-файла |
ENCRYPT(str [, salt]) | Подвергает строку str необратимому шифрованию, используя вызов системной функции crypt() UNIX. Если второй необязательный параметр salt не указывается, то результат каждый раз получается новым. |
MD5(str) | Принимает строковой параметр str и возвращает 128-битную контрольную сумму, вычисленную по алгоритму MD5. Возвращаемая величина представляет собой 32-разрядное шестнадцатеричное число, которое уникально для строки. Таким образом для строк, отличающихся хотя бы одним символом, результат функции MD5 будет разный. В тоже время для двух одинаковых строк всегда возвращается одинаковый результат |
PASSWORD(str) | Подвергает необратимому шифрованию данные str. Именно эта функция используется для шифрования паролей в MySQL |
OLD_PASSWORD(str) | Эмулирует работу функции PASSWORD() версий MySQL, предшествующих MySQL 4.1 |
SHA1(str) | Вычисляет 160-битную контрольную сумму по алгоритму SHA1(Secure Hach Algorithm) для строки str |
Обратимое шифрование
При обратимом шифровании, как правило, предоставляется две функции для шифровки и расшифровки данных.
Рассмотрим примеры с использованием функций AES_ENCRYPT(str, key_str)
и AES_DECRYPT(crypt_str, key_str)
, описание которых дано в таблице.
Функция AES_ENCRYPT(str, key_str)
А теперь рассмотрим шифрование поля email, в таблице users базы данных wet. Шифрование данного поля позволит уберечь пользователей от спамеров в случае, если база данных попадет им в руки. Создадим таблицу users и заполним ее поля.
Шифрование e-mail
Как видно из листинга, прямой просмотр поля email
приводит к выводу "мусора". Для того чтобы узнать настоящие адреса email
, необходимо воспользоваться функцией дешифровки AES_DECRYPT()
и знать секретный ключ.
Дешифровка данных
Необратимое шифрование
Функция MD5()
осуществляет необратимое шифрование.
Использование функции MD5()
Примечание. Алгоритм MD5()
часто используется для создания уникального хэш-кода объемных файлов, которые передаются по сети. Загрузив файл, всегда можно проверить его целостность, вычислив код по алгоритму MD5()
и сравнив полученный результат с хэш-кодом, представленным распространителем. Это позволяет отследить повреждения файла, вызванные передачей через сеть, а также предотвращает фальсификацию дистрибутива.
Необратимое шифрование может применяться для шифрования паролей — в базе данных храняться не сами пароли, а их MD5-хэши. Во время аутентификации пароль, введенный пользователем, также подвергается обработке функцией MD5()
, после чего MD5-хэши подвергаются сравнению. Такая схема позволяет хранить пароли в защищенном виде, и никто, даже администратор базы данных, не имеет возможности узнать пользовательские пароли. В последнее время такой вид аутентификации приобретает все большую популярность. Поскольку в следствии применения паузы после ввода некорректного пароля время, необходимое для подбора пароля, многократно возросло, средства подбора единичных паролей по сети практически вышли из употребления — злоумышленники стараются получить всю базу с паролями. Если же в базе храняться только MD5-хэши, злоумышленнику придется восстанавливать методом перебора каждый из зашифрованных паролей.
Функция PASSWORD()
подвергает необратимому шифрованию данные и используется для шифрования паролей MySQL в столбце password в таблице привлегий user
системной базы данных mysql
.
Использование функции PASSWORD()
Функция PASSWORD()
используется в системе аутентификации в сервер MySQL, поэтому ее не следует использовать в приложениях — лучше пользоваться функциями MD5()
и SHA1()
.
Комментарии(0)
Для добавления комментариев надо войти в систему и авторизоватьсяКомментирование статей доступно только для зарегистрированных пользователей:Зарегистрироваться
>