Редактировать
Я сталкиваюсь с этим, так как у меня до сих пор нет окончательного ответа (хотя один или два близки). В основном я ищу ответ yes или no с некоторой информацией для его подтверждения.
У нас есть система, хранящая пароли пользователей, зашифрованные общим системным ключом в базе данных. Это может быть катастрофическим (очевидно), если кто-то, имеющий доступ к БД, получит этот системный ключ.
Правильный способ, которым мы теперь знаем (в соответствии с большинством (?)), Заключается в хранении соленого хэша PW в БД, но, будучи относительно близким к выпуску, мы хотели бы минимизировать изменение кода и, следовательно, считалось, что очень простой способ не допустить, чтобы кто-то считывал PW из БД, состояло бы в простом изменении процесса и переключении параметров.
Таким образом, мы зашифруем уникальную подсоленную строку для каждой системы (сотни из них) (с произвольным хвостом, добавленным для каждого шифрования), используя пароль пользователя в качестве ключа, сохраняя результат в БД. При проверке PW мы расшифруем строку, сохраненную в БД, с введенным PW и сопоставим с системным ключом для проверки.
System key+random
шифровать с password
хранить в БД encrypted key
.
т.е. пароли пользователей никогда не хранятся, и в нашем простом сознании они необратимы.
Но, будучи новичками в секторе шифрования, мы задаемся вопросом, может ли кто-нибудь с большим опытом в этой области ответить на простой вопрос -
Можно ли определить ключ по оригиналу и зашифрованной строке?
Мы думаем, что это блестящий ;) способ гарантировать, что пароли пользователей не будут скомпрометированы, но мы не можем найти ничего о методе онлайн. Это делает нас неуверенными в этом, поэтому мы просим об этом великое сообщество.
(И Грубая сила не является адекватным ответом, поскольку от этого (при данных обстоятельствах) невозможно защититься.)
Редактировать:
Я вставлю один из моих комментариев сюда (надеюсь), чтобы кое-что прояснить:
@ zaph Спасибо за ваш вклад, но я думаю, что большинство здесь упускают суть. Через несколько дней у нас будет замораживание кода для следующего выпуска, и я уже реализовал метод, о котором упоминал в этом вопросе. До следующего выпуска я прочитаю эту тему и реализую стороннюю библиотеку, такую как scrypt или аналогичную. Мне просто нужно знать, существуют ли существующие жизнеспособные алгоритмы для обратного процесса и, следовательно, сделать мою новую реализацию хуже, чем старый подход с шифрованным паролем.