Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[TIP] Génération aléatoire de mots de passe
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
anigel
Bodhisattva
Bodhisattva


Joined: 14 Apr 2003
Posts: 1880
Location: Un petit bled pas loin de Limoges ;-)

PostPosted: Tue Oct 04, 2005 4:53 pm    Post subject: [TIP] Génération aléatoire de mots de passe Reply with quote

Bonsoir,

Ceux d'entre vous qui utilisent des serveurs Linux avec plusieurs utilisateurs ont probablement déjà été confronté au problème de la génération aléatoire de mots de passe. Il existe pas mal de solutions, plus ou moins pratiques, mais aucune n'avait répondu à mon "cahier des charges" :


  • générer des trucs d'une longueur raisonnable (le plus souvent, c'est paramétrable) : ni trop, ni trop peu.
  • comporter des caractères vraiment aléatoires, et pas un simple random sur l'alphabet français.
  • assez rapide pour générer 1000 mots de passe en moins de 30 minutes (là, j'ai perdu apg, que j'utilisais jusque-là).
  • et surtout, être capable de me générer la version "en clair", mais aussi la version "cryptée" du mot de passe (là, j'en ai pas encore trouvé un seul).


Alors je me suis mis à réfléchir, et me suis penché sur la suite openssl. C'est installé de base sur n'importe quel linux, donc pas de souci à ce niveau-là. Et il se trouve que cela a parfaitement répondu à mes attentes ! Voici donc les 2 lignes de commandes magiques à employer dans vos scripts bash / perl / tricot_jersey ;-).

Code:
MY_PASSWORD=`openssl rand -base64 6`
MY_CRYPTED_PASSWORD=`echo $MY_PASSWORD | openssl passwd -stdin`


Ces commandes magiques vont vous créer, à la vitesse de l'éclair, des couples password / crypted password, que vous pouvez directement réinjecter dans le système / l'utilisateur. Pour le système :

Code:
usermod -p $MY_CRYPTED_PASSWORD $USER


Pour l'utilisateur : n'importe quel client e-mail, envoyez-lui son login, avec la valeur contenue dans $MY_PASSWORD ;-).

Voilà, astuce courte, mais bien pratique.
_________________
Il y a 10 sortes d'individus en ce bas-monde : ceux qui causent binaire, et les autres.
Back to top
View user's profile Send private message
voltairien
Tux's lil' helper
Tux's lil' helper


Joined: 24 Apr 2004
Posts: 123

PostPosted: Tue Oct 04, 2005 8:24 pm    Post subject: Reply with quote

Et la commande crypt (du package app-crypt/cli-crypt) Elle irait pas encore plus rapidement ? :

Code:
MY_PASSWORD=`openssl rand -base64 6`
MY_CRYPTED_PASSWORD=`/usr/bin/crypt $MY_PASSWORD`

_________________
[Les Mechants] Voltairien
Back to top
View user's profile Send private message
anigel
Bodhisattva
Bodhisattva


Joined: 14 Apr 2003
Posts: 1880
Location: Un petit bled pas loin de Limoges ;-)

PostPosted: Tue Oct 04, 2005 9:50 pm    Post subject: Reply with quote

Oui et non. D'une part, crypt ne comporte pas de fonction de génération de mot de passe aléatoire (il faut donc malgré tout avoir recours à un logiciel tiers), et d'autre part openssl dispose de tout un tas d'algos de cryptage (la série des MD, DES, et j'en passe).

Ca peut donc être facilement adapté pour une base MySQL par exemple, avec cryptage MD5.
_________________
Il y a 10 sortes d'individus en ce bas-monde : ceux qui causent binaire, et les autres.
Back to top
View user's profile Send private message
voltairien
Tux's lil' helper
Tux's lil' helper


Joined: 24 Apr 2004
Posts: 123

PostPosted: Wed Oct 05, 2005 7:54 am    Post subject: Reply with quote

Tu as raison pour openssl, c'est grace à lui qu'on va générer le mot de passe.
Pour la rapidité d'exécution, par contre :
Code:
port-voltairien tmp # time for ((I=0;I<=10;I++)); do /tmp/crypt_anigel; done
SlhLeLHN
Lc2CQGOw3PQAw
5BNck4L1
3/Y8NAJvAnXZ.
UY6CsxX1
/d03Yk1BL0P62
ej7bYaga
7xk6hsO6Y2ic2
Jr2miXP/
lHHQvVGRCmyZo
TDEkbj3B
V5qTA8rDKuG7M
kjEyQ+/T
FHWxl8ndOZ9BA
aHRR8NzL
T96oi/TzuSVJQ
3J+GRmbK
zFJaUKPSj4J5E
d/8qOp3f
f2CTt.uJEaWOM
ghvHKNrJ
PVpxUoZJv5lcA

real    0m0.222s
user    0m0.116s
sys     0m0.025s
port-voltairien tmp # time for ((I=0;I<=10;I++)); do /tmp/crypt_voltairien; done
+ZmtJYOq
2F15Rkw5FlGTw
3dJ10YJN
8LEdWcfkQOdxA
4auJEv9P
jwHSjipueR/nk
KleLLjVM
Kn1oaKuxn7JHQ
RrSXQYK6
jgPf6ijdvJs8g
x5dUhlaT
hr8EeqaOEa0yw
kHLXX+u7
Av8FlD1Yqy6wQ
gH0OFdft
ekcMfS4..eO3k
Q0qnW/nd
JyYKx46TETA7A
fbECgxO8
eFhwdY8x.BiSc
W/4ljfr2
P4Fo.6UACaI2o

real    0m0.172s
user    0m0.069s
sys     0m0.022s


crypt est donc plus rapide....
Ca m'intéresse bien ces scripts aussi pour générer des comptes.
V.
_________________
[Les Mechants] Voltairien
Back to top
View user's profile Send private message
anigel
Bodhisattva
Bodhisattva


Joined: 14 Apr 2003
Posts: 1880
Location: Un petit bled pas loin de Limoges ;-)

PostPosted: Wed Oct 05, 2005 8:14 am    Post subject: Reply with quote

Je n'ai pas réellement fait de bench. La seule chose dont je sois certain, c'est que cette solution est beaucoup plus rapide que celle que j'utilisais auparavant (apg), en plus d'être plus souple. J'ai généré un peu plus de 2000 mots de passe en moins de 4 minutes :arrow: ça me suffit ;-).

Il faut noter aussi que les perfs d'openssl sont différentes selon les options compilées dans la noyau, nottament en ce qui concerne le support du hardware random number generation support.
_________________
Il y a 10 sortes d'individus en ce bas-monde : ceux qui causent binaire, et les autres.
Back to top
View user's profile Send private message
scout
Veteran
Veteran


Joined: 08 Mar 2003
Posts: 1991
Location: France, Paris en Semaine / Metz le W-E

PostPosted: Wed Oct 05, 2005 7:07 pm    Post subject: Reply with quote

[mode pub pour ruby]
Voilà moi je vais vous générer 10**40 mots de passe en une seconde, le tout c'est d'envoyer les mails suffisament rapidement aux gens.
Bon déja il faut qu'on voit ce que openssl utilise comme caractères pour faire des mots de passe
Code:
( repeat 100 openssl rand -base64 100 ) | ruby -e 'print $<.read.scan(/./m).uniq.sort; puts'

+/0123456789=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

bon donc ce sont les chiffres, l'alphabet, +, / et =
alors assez parlé, voilà du code:
Code:
#!/usr/bin/ruby -w

# 1er  argument - par défaut 1 : nb de mot des passe à générer
# 2eme argument - par défaut 6 : longeur minimale des mots de passe
# 3eme argument - par défaut 8 : longeur maximale des mots de passe

LONGEURMIN=(ARGV[1] || 6).to_i
LONGEURMAX=(ARGV[2] || 8).to_i

srand((Time.now.to_f*10**5).to_i % 10**6)

base=["+","/","=","0".."9","a".."z","A".."Z"].collect do |range|
    range.to_a
end.flatten

(ARGV[0] || 1).to_i.times do
    #génération d'un mot de passe
    (LONGEURMIN+rand(LONGEURMAX-LONGEURMIN+1)).times do
        print base[rand(base.length)]
    end
    puts
end

au départ j'avais même une version crade en une ligne ...
bon voilà:
Code:
time ruby ~/ruby/passgen.rb 10000 | openssl passwd -stdin >| /dev/null
ruby ~/ruby/passgen.rb 10000  0,20s user 0,00s system 30% cpu 0,669 total
openssl passwd -stdin >| /dev/null  0,22s user 0,03s system 36% cpu 0,688 total

Bon, là j'écris le serveur de mail en C qui arrive à envoyer les mails à la même vitesse, à savoir les 10000 mails en 0.6 secondes. :mrgreen:
[/mode pub pour ruby]
[EDIT]oui, je sais, j'ai complètement craqué :)
[EDIT2] Merci à anigel pour le howto
_________________
http://petition.eurolinux.org/ - Petition against ePatents
L'essence de la finesse
Back to top
View user's profile Send private message
anigel
Bodhisattva
Bodhisattva


Joined: 14 Apr 2003
Posts: 1880
Location: Un petit bled pas loin de Limoges ;-)

PostPosted: Wed Oct 05, 2005 7:32 pm    Post subject: Reply with quote

Lol, je ne pensais pas lancer un concours :lol: !

Qui s'y colle en java :twisted: ?
_________________
Il y a 10 sortes d'individus en ce bas-monde : ceux qui causent binaire, et les autres.
Back to top
View user's profile Send private message
boozo
Advocate
Advocate


Joined: 01 Jul 2004
Posts: 3136

PostPosted: Thu Oct 06, 2005 10:08 am    Post subject: Reply with quote

'alute

ce n'est pas stricto sensus réellement aléatoire ni ultra sécurisé mais j'avais trouvé ce tip sympatoche dans une news gentoo de 2003 et qui pourrait-être utile à d'autres :wink:
Quote:
9. Tips and Tricks

A Quick and Easy Password Generator

This week's tip shows you how to quickly generate a list of passwords using /dev/urandom, and uuencode.

Code Listing 9.1

Code:
% dd if=/dev/urandom count=1 2> /dev/null | uuencode -m - | head -n 2 | tail -n 1 | cut -c-8
v1/oVN+S


The options for the cut command indicate the length of the password generated (in this case, 8 characters). This could easily be expanded to generate a whole list of passwords using the for command.

Code Listing 9.2

Code:
% for ((n=0;n<10;n++)); do dd if=/dev/urandom count=1 2> /dev/null | uuencode -m -| head -n 2 \ | tail -n 1 | cut -c-8; done
rSQpeNNr
PesAIgAb
GUEgoUwT
U3p+kfqa
WSgSwgq6
+9aGihvl
dYfcaV3b
guFtI7eZ
+kzKuW0f
jJpW/8yO


To create a longer or shorter list, just change the limit in for (in this case 10).

If you want to generate WEP keys for wireless networking, you can use a similar procedure, replacing uuencode with md5sum:

Code Listing 9.3

Code:
% dd if=/dev/urandom count=1 2> /dev/null | md5sum | head -n 2 | tail -n 1 | cut -c-26
aaab69457c239ef1d52617d1fa



Dans la même optique, il existe passook qui est un générateur de password human-readable vraiment simple d'utilisation dans portage... très commode pour les utilsateurs d'un réseau (login/mail/etc.) récalcitrant à l'utilisation de password efficaces :wink:

(qui à dit maman ? :mrgreen:)
_________________
" Un psychotique, c'est quelqu'un qui croit dur comme fer que 2 et 2 font 5, et qui en est pleinement satisfait.
Un névrosé, c'est quelqu'un qui sait pertinemment que 2 et 2 font 4, et ça le rend malade ! "
Back to top
View user's profile Send private message
netfab
Veteran
Veteran


Joined: 03 Mar 2005
Posts: 1590
Location: 127.0.0.1

PostPosted: Thu Oct 06, 2005 10:31 am    Post subject: Reply with quote

Dans portage, il y a aussi :
Quote:
* app-admin/makepasswd
Available versions: 1.10
Installed: 1.10
Homepage: http://packages.debian.org/stable/admin/makepasswd.html
Description: Random password generator

Niveau aléatoire, je ne sais pas trop ce que çà donne, mais pour l'instant, çà me suffit.
Code:
$ time makepasswd --chars 10 --count 2000 > fich

real    0m0.217s
user    0m0.147s
sys     0m0.010s
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum