Как реверсивно хранить пароль с помощью Python в Linux?
-
05-07-2019 - |
Вопрос
Во-первых, мой вопрос не о хешировании паролей, а о шифровании паролей. Я создаю настольное приложение, которое должно аутентифицировать пользователя в стороннем сервисе. Чтобы ускорить процесс входа в систему, я хочу дать пользователю возможность сохранить свои учетные данные. Так как мне нужен пароль для аутентификации его в сервисе, его нельзя хэшировать.
Я думал об использовании модуля pyCrypto и его реализации Blowfish или AES для шифрования учетных данных. Проблема в том, где хранить ключ. Я знаю, что некоторые приложения хранят ключ непосредственно в исходном коде, но, поскольку я кодирую приложение с открытым исходным кодом, это не кажется очень эффективным решением.
Поэтому мне было интересно, как в Linux вы бы реализовали пользовательские или системные ключи для повышения безопасности хранения паролей.
Если у вас есть лучшее решение этой проблемы, чем использование pyCrypto и системных / пользовательских ключей, не стесняйтесь поделиться им. Как я уже говорил ранее, хеширование не является решением, и я знаю, что шифрование пароля уязвимо, но я хочу дать возможность пользователю. Использование Gnome-Keyring также не вариант, так как многие люди (включая меня) не используют его.
Решение
Шифрование паролей на самом деле не дает вам гораздо большей защиты, чем хранение в незашифрованном виде. Любой, кто может получить доступ к базе данных, вероятно, также имеет полный доступ к вашим компьютерам веб-сервера.
Однако, если потеря безопасности приемлема и вам это действительно нужно, я бы сгенерировал новый ключевой файл (из хорошего источника случайных данных) как часть процесса установки и использовал его. Очевидно, храните этот ключ максимально надежно (заблокированные права доступа к файлам и т. Д.). Использование одного ключа, встроенного в исходный код, не очень хорошая идея - нет причин, по которым отдельные установки должны иметь одинаковые ключи.
Другие советы
Попробуйте использовать PAM . Вы можете создать модуль, который автоматически дешифрует ключ при входе пользователя в систему. Именно так работает GNOME-Keyring (если это возможно). Вы даже можете писать модули PAM на Python с помощью pam_python .
Password Safe разработан Брюсом Шнайером с открытым исходным кодом. Это для Windows, но вы должны видеть, что они делают, и, возможно, использовать их снова.
http://www.schneier.com/passsafe.html
http://passwordsafe.sourceforge.net/
Прочитайте это: Если вы вводите AES в свой код, вы делаете это неправильно.