Я управляю базой данных MySQL из Сценариев PHP. коммуникация между сервером и клиентом защищается через SSL. Я храню данные учетной записи пользователя, которые уязвимы.
Существует ли способ зашифровать эти данные при вводе в DB? Что лучший способ состоит в том, чтобы защитить эти уязвимые данные?
Править: Я использую задание КРОНА для обновления данных, которые полагаются на этот пароль для входа в систему в учетную запись пользователя. Таким образом, мне нужен способ хешировать этот пароль и смочь получить старый пароль для моих задач задания КРОНА.
Что лучший способ состоит в том, чтобы достигнуть его?
Спасибо
Серьезно, НЕ ИСПОЛЬЗУЙТЕ MySQL aes_encrypt () Это самый небезопасный метод использования блочного шифра. Он использует режим ECB, и я могу дать простой пример, демонстрирующий, почему это серьезная ошибка.
Обычное текстовое сообщение:
То же сообщение, зашифрованное в режиме ECB (неважно, какой шифр вы используете):
ТОЧНО такое же сообщение в режиме CBC (опять же, это не независимо от того, какой шифр вы используете):
Есть , даже больше причин не использовать mysql aes_encrypt, в первую очередь каждый отправленный вами запрос будет также иметь ключ aes, который вы используете. Если база данных скомпрометирована, злоумышленник включит ведение журнала, просто получит ваш ключ AES и расшифрует всю базу данных .
Так что следует использовать? Мне пока нравится этот класс . Он использует режим CBC с функцией String2Key и IV. Вы можете использовать первичный ключ в качестве своего IV, каждое сообщение должно иметь уникальный IV. Это нормально, если злоумышленник знает IV, и если они являются последовательными, , пока реализация блочного шифра безопасна. Повторное использование IV сделало WEP гораздо менее безопасным .
Есть несколько основных способов сделать это (если вы не предоставите более подробную информацию о том, чего именно вы хотите достичь).
Если вы защищаете себя от желающих быть хакерами, все в порядке. Опять же, я хочу, чтобы вы уточнить немного подробнее.
Вы также должны учитывать необходимый вам уровень безопасности и скорость работы алгоритма.
В MySQL есть функции шифрования,
http://dev.mysql.com/doc/refman/5.1/en/encryption-functions.html
Например, вы можете использовать aes_encrypt () для хранения данные в зашифрованном виде.
Однако в этих функциях есть некоторые слабые места,
Они не поддерживают IV или блочную цепочку. Один и тот же текст всегда зашифровывается в один и тот же зашифрованный текст, поэтому он не подходит для конфиденциальных данных, таких как пароли.
Нет ключевой информации, поэтому очень сложно повернуть ключи.
Слишком мало информации для действительно полезного ответа, но вот типичные случаи:
Если вы храните пароли там, где вы должны проверить правильность ввода пользователя, но вы этого не сделаете. нужны сами исходные данные, можно хранить хеш (SHA1 / SHA2). Найдите все методы хеширования, чтобы сделать это правильно.
Если вам нужно прочитать исходные данные, вы можете использовать функции шифрования. Хорошим выбором для симметричного шифрования является AES. Однако проблема здесь заключается в управлении ключами. Где вы храните свой ключ, который используется для шифрования / дешифрования? Это очень распространенная проблема, и в зависимости от контекста существуют разные решения.