Хранение паролей в базе данных MySQL: хэш против шифрования? - PullRequest
0 голосов
/ 12 октября 2018

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

Хэш:

"INSERT INTO users (`id`,`username`,`password`) VALUES("Bob",SHA2("password1234"));"

CONS:

  • Устаревшие

  • Радужные таблицы

Шифрование:

"INSERT INTO users (`id`, `username`, `password`) VALUES ("Bob", aes_encrypt("password1234", "key1234"))";

CONS:

  • Может не работать для некоторых типов сопоставления

  • Ключ может быть взломан

  • Радужные таблицы

Таким образом, это действительно более идеально с точки зрения обеспечения безопасности и производительности(быстрое чтение и извлечение из базы данных)?(В таблице приблизительно от 1000 до 5000 строк).

1 Ответ

0 голосов
/ 12 октября 2018

Я собираюсь пойти дальше и не сказать ни один из них.Вы не должны никогда хранить пароль, даже зашифрованный.Это делает вас уязвимым для кражи паролей, как внешних, так и внутренних для вашей организации.Кроме того, SHA2 не рекомендуется как таковой, и вы не указываете длину хеша.SHA2-512 или даже SHA2-256 по-прежнему считаются отличными криптографическими хэшами.Вы также можете использовать более позднюю криптографическую хэш-функцию SHA3 / Keccak, но из недавней литературы она не лучше, чем SHA2.Обе эти функции все еще одобрены NIST.

Однако в InfoSec существует консенсус в отношении того, что простого криптографического хэша недостаточно для правильного хранения секретов.Похоже, что с 2018 года PBKDF2, bcrypt или ARGON2 считаются лучшими претендентами на «лучшие» криптохэш-алгоритмы.Вы можете прочитать более подробное объяснение паролей и криптографических хэшей по этой ссылке Security StackExchange https://security.stackexchange.com/questions/211/how-to-securely-hash-passwords/31846#31846

Приведенная выше ссылка не объясняет ARGON2, который был недавним победителем конкурса хэширования паролей.Вы можете прочитать больше об этом здесь: https://github.com/p-h-c/phc-winner-argon2

Моя рекомендация:

  • Добавить четвертое поле в таблицу с именем salt.Это должна быть действительно случайная буквенно-цифровая строка из 8 цифр, хранящаяся в виде открытого текста.
  • Сохраните «пароль» как CryptoHash(salt + 'password1234').Это защищает вас от радужных таблиц, так как невозможно рассчитать ВСЕ радужные таблицы для всех возможных солей.

Замените CryptoHash выше на PBKDF2, bcrypt или ARGON2, и у вас будет довольнохороший механизм хранения паролей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...