LinuxでPythonを使用してパスワードを可逆的に保存する方法は?
-
05-07-2019 - |
質問
最初に、私の質問はパスワードのハッシュではなく、パスワードの暗号化についてです。私は、サードパーティサービスに対してユーザーを認証する必要があるデスクトップアプリケーションを構築しています。ログインプロセスを高速化するために、ユーザーに資格情報を保存するオプションを提供します。サービスに対して彼を認証するにはパスワードが必要なので、ハッシュ化できません。
pyCryptoモジュールとそのBlowfishまたはAES実装を使用して資格情報を暗号化することを考えました。問題は、キーを保存する場所です。一部のアプリケーションはキーをソースコードに直接格納しますが、オープンソースアプリケーションをコーディングしているため、これは非常に効率的なソリューションではないようです。
だから、Linuxでユーザー固有またはシステム固有のキーを実装して、パスワード保存のセキュリティを高める方法を考えました。
pyCryptoとシステム/ユーザー固有のキーを使用するよりもこの問題の解決策が優れている場合は、遠慮なく共有してください。前にも言ったように、ハッシュは解決策ではなく、パスワードの暗号化は脆弱ですが、ユーザーにオプションを提供したいのです。 Gnome-Keyringを使用することも、多くの人(私を含む)が使用しないため、オプションではありません。
解決
パスワードを暗号化しても、プレーンテキストで保存するよりもはるかに多くの保護が得られるわけではありません。データベースにアクセスできる人は、おそらくウェブサーバーマシンへのフルアクセスも持っています。
ただし、セキュリティの損失が許容範囲内であり、本当に必要な場合は、インストールプロセスの一部として(ランダムデータの適切なソースから)新しいキーファイルを生成し、これを使用します。明らかに、このキーを可能な限り安全に保存します(ファイルのアクセス許可などをロックダウンします)。ソースに埋め込まれた単一のキーを使用することは良い考えではありません-別々のインストールが同じキーを持つ必要がある理由はありません。
他のヒント
PAM を使用してみてください。ユーザーがログインしたときにキーを自動的に暗号化解除するモジュールを作成できます。これは内部的にGNOME-Keyringが機能する方法です(可能な場合)。 Pythonで pam_python を使用してPAMモジュールを作成することもできます。
Password Safeは、Bruce Schneierとオープンソースによって設計されています。 Windows用ですが、彼らが何をしているかを確認し、おそらく再利用できるはずです。
http://www.schneier.com/passsafe.html