Есть необходимость хранить пароли пользователей, которые в дальнейшем необходимо использовать в открытом виде. Сейчас имеется два сервера, frontend и backend. Эти пароли необходимо передавать с frontend на backend в зашифрованном виде. Расшифрованные пароли необходимы только на backend.
Вижу сейчас два варианта:
1. Использовать RSA, frontend шифрует по открытому ключу и передаёт на backend, который расшифровывает по приватному ключу. Плюс такого подхода, что при взломе злоумышленники не смогут получить приватный ключ. Минус - один ключ для всех паролей.
2. Шифровать через openssl_encrypt(). Используя в виде ключа md5(мастер ключ+уникальный ключ для каждого юзера). Плюс в том, что у каждого юзера свой ключ, который хранится в одной таблице с хешем пароля. Минус в том, что мастер ключ один на два сервера.
Подскажите пожалуйста, что лучше использовать т.к. я полный ноль в этом.
Если сервис-аггрегатор - используйте OAUTH-токены вместо паролей,
иначе - вообще не вижу смысла передачи/хранения паролей в расшифрованном виде на бэке.
Нет, это не сервер агрегатор. У меня сервис который работает с несколькими другими сайтами у которых нет API. Пользователи вводят свои пароли от сторонних сайтов чтобы мой сервис выполнил определённую работу.
В расшифрованном виде они не будут хранится. Их нужно расшифровывать только во время запуска определённого скрипта который находится на отдельном от фронта сервере.
Андрей: убирайте минус из п.1: генерите для каждого пароля уникальный приватный ключ на основе login'a пользователя вашего сервиса, затем шифруйте его с "солью" на стороне сервера перед записью в таблицу хранения учёток стороннего сервиса.
В итоге, не зная пароль учётки юзера на вашем сервисе, нельзя будет вытащить пароль из таблицы делегированных аккаунтов стороннего сервиса.
В таблице учёток стороннего сервиса, логин пользователя от текущего сервиса - не храним: связка только через проверку приватного ключа пользователя (на основе данных таблицы пользователей этого сервиса).