web-dev-qa-db-fra.com

Stockage sécurisé des mots de passe à utiliser dans python script

Duplicate possible:
J'ai besoin de stocker en toute sécurité un nom d'utilisateur et un mot de passe en Python, quelles sont mes options?

Je cherche un moyen de stocker en toute sécurité les mots de passe que je compte utiliser dans certains scripts Python. Je vais me connecter à différentes choses et je ne veux pas stocker les mots de passe en clair dans le script lui-même.

Au lieu de cela, je me demandais s’il existait un moyen de stocker ces mots de passe en toute sécurité, puis de les récupérer à l’aide d’un mot de passe principal que je pourrais entrer dans le script au début.

69
user1598386

Connaissez la clé principale vous-même. Ne codez pas durement.

Utilisation py-bcrypt _ (bcrypt), technique de hachage puissante pour générer vous-même un mot de passe.

Fondamentalement, vous pouvez le faire (une idée ...)

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)

sauvegardez le sel et le mot de passe haché quelque part afin que, chaque fois que vous devez utiliser le mot de passe, vous lisiez le mot de passe crypté et testiez le mot de passe brut que vous entrez à nouveau.

C’est essentiellement ainsi que la connexion devrait fonctionner ces jours-ci.

41
CppLearner

J'ai généralement un secrets.py qui est stocké séparément de mes autres python scripts et n’est pas sous contrôle de version. Ensuite, chaque fois que nécessaire, vous pouvez faire from secrets import <required_pwd_var>. De cette façon, vous pouvez compter sur le système de sécurité des fichiers intégré du système d'exploitation sans réinventer le vôtre.

En utilisant Base64 le codage/décodage est également un autre moyen d’obscurcir le mot de passe, mais pas complètement sécurisé

Plus ici - Cacher un mot de passe dans un python (seulement pour les obscurcissements non sécurisés))

13
Pratik Mandrekar

le moyen sécurisé est de chiffrer vos données sensibles par AES et la clé de chiffrement est dérivée par la fonction de dérivation de clé (PBE), le mot de passe principal utilisé pour chiffrer/déchiffrer la clé de chiffrement pour AES.

mot de passe principal -> clé sécurisée-> chiffrer les données avec la clé

Vous pouvez utiliser 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)

assurez-vous de stocker le salt/iv/mot de passe, et décryptez-le en utilisant le même salt/iv/passphase

Weblogic a utilisé une approche similaire pour protéger les mots de passe dans les fichiers de configuration

5
Ted Shaw