Voici un petit script en python qui construit des mots de passe forts (pas dans les dictionnaires) en prenant les 8 premiers caractères de la version base64 du digest hexadécimal sha de la concaténation d'un mot de passe maitre (unique) faible mais simple à retenir et d'une clef specifique au domaine d'utilisation du mot de passe (typiquement le nom du service ou de la machine).
Cette méthode permet de construire un ensemble illimité de mot de passe à partir d'un mot de passe maitre unique donc facilement mémorisable pour pouvoir retrouver tous les autres en cas d'oublis.
La base64 sert à avoir une distribution des caractères sur l'alphabet complet (majuscules et minuscule) + les characteres numeriques.
Voici donc mkpasswd.py
#!/usr/bin/python
"""Utility script to build a set of strong yet rebuildable passwords
The final password is build from a potentialy weak but easy to remember yet
secret master password and a domain-specific key like the name of the website
you are building a password for.
The password is then the 8th first characters of the base64 encoding of
hexadecimal sha digest of the concatenation of the master seed and the domain
key::
>>> make_password("foobar", "amazon")
'YWRjM2Fl'
>>> make_password("foobar", "paypal")
'MzM2Yzhm'
>>> make_password("foobar", "paypal", lowercase=True)
'mzm2yzhm'
:author: Olivier Grisel <olivier.grisel@ensta.org>
This script is placed in the Public Domain:
http://creativecommons.org/licenses/publicdomain/
"""
import sha, base64
LENGTH = 8
LOWERCASE = False
def make_password(master_seed, domain_key, lowercase=LOWERCASE):
hash = sha.new(master_seed + domain_key).hexdigest()
password = base64.b64encode(hash)[:LENGTH]
if lowercase:
return password.lower()
else:
return password
def main():
# seed and domain prefix are read interactively from stdin to avoid
# password data to be stored in the shell command history
master_seed = raw_input("master seed: ")
domain_key = raw_input("domain key [e.g. 'paypal']: ")
print "your password is:", make_password(master_seed, domain_key)
def _test():
import doctest
doctest.testmod()
if __name__ == "__main__":
import sys
if len(sys.argv) > 1 and sys.argv[1] == "--selftest":
_test()
else:
main()
Utilisation:
$ python mkpasswd.py
Pour lancer les tests:
$ python mkpasswd.py --selftest
# Utilisation de getpass
Posté par Étienne . Évalué à 1.
import sha, base64, getpass
[...]
master_seed = getpass.getpass("master seed: ")
Etienne
[^] # Re: Utilisation de getpass
Posté par Olivier Grisel (site web personnel) . Évalué à 1.
[^] # Re: Utilisation de getpass
Posté par Olivier Grisel (site web personnel) . Évalué à 1.
http://pypi.python.org/pypi?%3Aaction=search&term=virtua(...)
$ easy_install -U virtualkeyring
$ vkr
master password: <type the secret password here>
domain key [e.g. 'login@host']: foobar@example.com
your password is: hRnf6udB
please clean your console (ctrl-L) after usage
# presque pareil sans outils :)
Posté par fabien . Évalué à 2.
bien sur celà n'offre pas les même avantage.
mais j'ai un mot de passe unique "maitre" auquel je concatene une extention en fonction du domaine (ou un numero de version là ou il faut changer de mot de passe souvent)
et j'ai une astuce toute bête pour retenir le mot de passe (du coups on peu en avoir deux ou trois en fonction de la criticité)
il suffit de prendre les paroles d'une chanson que vous connaissez bien..
exemple "The sweet smell of a great sorrow lies over the land" (pink floyd - sorrow)
donne comme mot de passe : Tssoagslotl (1ere lettre de chaque mots)
et en lui ajoutant l'extension : Tssoagslotl-paypal
du coup ca marche partout, et pas de risque de l'oublier.
[^] # Re: presque pareil sans outils :)
Posté par steph1978 . Évalué à 1.
Sur le domaine filou.com, tu utiliserais "Tssoagslotl-filou" ?
Pour peu que l'admin de ce service soit un peu curieux et peu scrupuleux, il aura vite fait de trouver ton mot de passe pour d'autre services. Si en plus tu utilises souvent le même login ou la même adresse mail, t'es mal.
L'intérêt de la méthode proposée dans cet article est de passer par un digest qui empêche totalement de remonter au mot de passe racine.
# pwgen
Posté par Greg (site web personnel) . Évalué à 1.
$ pwgen -A 10
wedai5oof1 aechahfoh7 shu3ahbu7u cheeza6ooc phier4eng0 ohtoh3xav5 ihoo4oghee
moh8aighie aethaed1up haawie2cam iequa0laik aeraenge1u iu6shohyei naenaa7bai
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.