2013-08-05 3 views
0

Я делаю сайт с PHP, и мне нужно хранить личную информацию о пользователе (имя, адрес, номер телефона) в базе данных MySQL. Информация будет показана пользователю.С каким ключом должна быть включена личная информация?

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

Я хотел использовать строку, хранящуюся в сеансе, где добавляются идентификатор пользователя, хешированный пароль и имя пользователя, а затем хэшируются. Это безопасный ключ шифрования для использования?

ответ

2

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

Ваша оригинальная идея лучше: используйте вывод алгоритма вывода ключей, такого как SCRYPT (не просто хэш-пароль, слишком слабый) на пароле пользователя в качестве ключа шифрования. Затем сохраните версию этого в сеансе пользователя. Разумеется, вам нужно убедиться, что данные сеанса надежно сохранены и полностью удалены после выхода из системы/бездействия. Один безопасный способ сделать это - записать данные в файл самостоятельно, сохранить имя файла в сеансе и затем безопасно удалить файл (например, с помощью команды shred или перезаписи со случайными данными).

+0

Я вижу. Но что, если ключ «hash» ($ unhashed_password. $ Id. $ Username) '? Сохраняется ли ключ? Я бы предпочел использовать это, потому что его легко получить после входа пользователя в систему, но для злоумышленника это невозможно. Неиспользуемый пароль не сохраняется в базе данных, поэтому я предполагаю, что это безопасно. – FalconC

+0

@FalconC Этот ключ также небезопасен. Во-первых, хеширование не является хорошей функцией деривации ключей. Это простой способ подключения автономных атак, пытающихся угадать пароль. Вам нужна функция деривации ключа, которую сложно вычислить с вычислительной точки зрения. Если бы для большинства хеш-функций был задан хэш пароля, я могу вычислить этот хэш, который вы упомянули. Это называется атакой расширения длины. http://en.wikipedia.org/wiki/Length_extension_attack – imichaelmiers

+0

Я посмотрю. Спасибо. – FalconC