web-dev-qa-db-ja.com

pythonスクリプトで使用するパスワードを安全に保存する

可能性のある複製:
Pythonでユーザー名とパスワードを安全に保存する必要があります。オプションは何ですか?

Pythonスクリプトで使用するパスワードを安全に保存する方法を探しています。私はさまざまなものにログインするので、パスワードをプレーンテキストとしてスクリプト自体に保存したくありません。

代わりに、これらのパスワードを安全に保存し、最初にスクリプトに入力できるマスターパスワードなどを使用してそれらを取得できるものがあるかどうか疑問に思いました。

69
user1598386

マスターキーを自分で知ってください。ハードコーディングしないでください。

py-bcrypt(bcrypt)、強力なハッシュ手法を使用して、パスワードを自分で生成します。

基本的にこれを行うことができます(アイデア...)

import bcrypt
from getpass import getpass
master_secret_key = getpass('tell me the master secret key you are going to use')
salt = bcrypt.gensalt()
combo_password = raw_password + salt + master_secret_key
hashed_password = bcrypt.hashpw(combo_password, salt)

パスワードを使用する必要があるときはいつでも、暗号化されたパスワードを読んでいて、再度入力している生のパスワードに対してテストするように、ソルトとハッシュされたパスワードをどこかに保存します。

これは基本的に最近のログインの動作方法です。

41
CppLearner

通常、他のpythonスクリプトとは別に保存され、バージョン管理されていないsecrets.pyがあります。その後、必要なときにいつでもfrom secrets import <required_pwd_var>を実行できます。このようにして、独自のファイルセキュリティシステムを作り直すことなく、オペレーティングシステムに組み込まれたファイルセキュリティシステムに依存できます。

Base64エンコード/デコードを使用することも、完全に安全ではありませんが、パスワードを難読化する別の方法です

詳細- pythonスクリプト内のパスワードの非表示(安全でない難読化のみ)

13

安全な方法は、AESで機密データを暗号化し、暗号化キーは、AESの暗号化キーの暗号化/復号化に使用されるマスターパスワードであるパスワードベースのキー派生関数(PBE)による派生です。

マスターパスワード->セキュアキー->キーでデータを暗号化

pbkdf2 を使用できます

from PBKDF2 import PBKDF2
from Crypto.Cipher import AES
import os
salt = os.urandom(8)    # 64-bit salt
key = PBKDF2("This passphrase is a secret.", salt).read(32) # 256-bit key
iv = os.urandom(16)     # 128-bit IV
cipher = AES.new(key, AES.MODE_CBC, iv)

必ずsalt/iv/passphraseを保存し、同じsalt/iv/passphaseを使用して復号化してください

Weblogicは、構成ファイル内のパスワードを保護するために同様のアプローチを使用しました

5
Ted Shaw