Faire un don ! | | style | statistiques | contactez-nous | plan | lettre d'information

Astuces.divers : [Admin] Construire des mots de passe forts mais facilement reconstructibles

Posté par champi (page perso, ) le 10 novembre 2007
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

> Lire le message (6 commentaires, moyenne: 1,2).  

Vous avez demandé le commentaire #907409.

presque pareil sans outils :)

Posté par fabien () le 31/01/2008 à 22:33. (lien). Évalué à 2.

dans l'idée je fait pareil, mais sans aucun outils,
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 () le 24/02/2008 à 03:34. (lien). Évalué à 1.

    Un peu risqué comme méthode car cela demande une grande confiance dans le service utilisé.
    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.