Я создаю программное обеспечение с паролем пользователя+. После авторизации пользователь может получить доступ к некоторым полуобщинным службам, а также зашифровать некоторые файлы, к которым может обратиться только пользователь.
Пользователь должен быть сохранен как есть, без изменений, если это возможно. После авторизации пользователь и пароль хранятся в памяти до тех пор, пока программа работает (я тоже не знаю, хорошо ли это).
Вопрос в том, как сохранить эту комбинацию пользователя + пароль в потенциально незащищенной базе данных?
Я действительно не понимаю, что я должен раскрывать.
Скажем, я создаю расширенный ключ следующим образом:
salt = random 32 characters string (is it okay?) key = hash(usr password + salt) for 1 to 65000 do key = hash(key + usr password + salt)
Должен ли я хранить [пользователь открытого текста], [расширенный ключ] и [соль] в базе данных?
Кроме того, что я должен использовать для шифрования (с AES или Blowfish) некоторых файлов с использованием нового пароля каждый раз? Должен ли я генерировать новую соль и создавать новый расширенный ключ (пароль, сохраненный в памяти программы + соль)? И в этом случае, если я храню зашифрованный файл в базе данных, возможно, я должен хранить соль. База данных такая же, как и где я храню комбинацию пользователя + пароль.
Файл может быть дешифрован, только если кто-то может сгенерировать ключ, но он не знает пароль. Правильно?
Я использую Python с PyCrypto, но это не очень важно, общий пример просто замечательный. Я прочитал несколько подобных вопросов, но они не очень явные.
Огромное спасибо!