Всем привет, есть задача при написании скрипта сделать так, чтобы если злоумышленники получат наш скрипт или базу данных они не смогли оттуда получить логины/пароли.
Так вот с базой данных понятно, есть куча библиотек для кодирования информации в бд, и для декодирования используется ключ, который я обычно хранил в конфиг файле. Получается если кто то получит скрипт, то получит и этот ключ и сможет раскодировать данные из бд. Вопрос: как и где тогда хранить этот ключ, либо же чем вместо этих библиотек еще можно воспользоваться, какие есть еще варианты ? Заранее спасибо.
ps обычно пользовался библиотекой bcrypt
Храните в базе не зашифрованный пароль, а захешированный с помощью однонаправленной хеш функции. Тогда злоумышленник, получив все данные, не сможет восстановить пароль по хешу. Это будет возможно только перебором, что может занять значительное время для каждого хеша
> Получается если кто то получит скрипт, то получит и этот ключ и сможет раскодировать данные из бд
У однонаправленного алгоритма нет ключа для декодирования. Обычно бывает соль, чтобы предотвратить перебор по радужной таблице. Но соль никак не поможет злоумышленнику получить пароли. Указанный вами bcrypt как раз однонаправленный алгоритм хеширования и скорее всего под ключом вы понимаете как раз соль
Да, про хеш понятно, но что бы расхешировать данные в дальнейшем, например для проверки нужен ключ, а получив доступ к скрипту злоумышленник и к ключу сможет получить доступ, а значит и без труда расхешировать данные
AntonKiya, Обновил ответ. Под ключом вы понимаете соль, которая не поможет злоумышленнику получить пароли. Посмотрите, как вы проверяете пароль в своем коде. Наверняка вы получаете хеш из полученного пароля, а потом сравниваете его с хешем из базы данных. Даже вы сами не можете получить пароль из хеша и соли
Не выпускайте базу данных в интернет, и проблем не будет.
Ну и пароли везде должны быть сложные.
И пароли в коде хранить нельзя - храните их безопасном хранилище, к которому имеют доступ только доверенные сотрудники.
Шифровать данные в базе - это крайняя мера, причём не самая эффективная, да ещё и вредная.
Для этого нужно немного поменять протокол обработки данных клиентов.
Чтобы в итоге прийти к сквозному шифрованию на клиентах. Это довольно сложно обьяснить на пальцах в кратце-
вот тут примерно описано как это работает на практике - https://staffcounter.net/ru/introducing-p2p-encryp...