Каким ключом следует шифровать личную информацию?

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

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

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


person FalconC    schedule 05.08.2013    source источник


Ответы (1)


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

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

person imichaelmiers    schedule 06.08.2013
comment
Я понимаю. Но что, если ключ hash($unhashed_password . $id . $username)? Ключ еще сохранился? Я бы предпочел использовать это, потому что его легко получить, когда пользователь войдет в систему, но злоумышленник не сможет получить его. Нехэшированный пароль не хранится в базе данных, поэтому я предполагаю, что это безопасно. - person FalconC; 06.08.2013
comment
@FalconC Этот ключ тоже небезопасен. Во-первых, хеширование не является хорошей функцией получения ключей. Это способ легко организовать офлайн-атаки, пытающиеся угадать пароль. Вам нужна ключевая функция вывода, которую сложно вычислить в вычислительном отношении. Wose, для большинства хэш-функций, учитывая хэш пароля, я могу вычислить этот хеш, который вы упомянули. Это известно как атака с расширением длины. en.wikipedia.org/wiki/Length_extension_attack - person imichaelmiers; 06.08.2013
comment
Я взгляну. Спасибо. - person FalconC; 06.08.2013