Importància d'elegir la clau de pas
Contingut
Introducció/Objectius
Prendrem consciència de la importància d'elegir una clau de pas. Analitzarem un dels algorismes més utilitzats per encriptar les claus de pas.
Referències
- http://es.kioskea.net/contents/attaques/passwd.php3
- 10 consells per elegir una contrassenya segura: http://www.grupodeboss.com/blog/10-consejos-para-elegir-una-contrasena-segura/
- generar una contrassenya segura: http://password.es/
- MD5, algorisme de reducció criptogràfic de 128 bits molt utilitzat: http://es.wikipedia.org/wiki/MD5
- http://acacha.org/mediawiki/index.php/Contrasenyes (Sergi Tur)
- TODO: mirar sistemes biomètrics
Desenvolupament
Si tenim accés a una base de dades d'un gestor de continguts, segurament veurem els xifrats MD5 de les corresponents claus de pas de la taula d'usuaris. Per exemple:
- una clau fàcil: joan -> dd54d716aaa387acf14d145d0c89d106
- una clau difícil: Df3Jh4Bo56VcB34 -> e92f01d3e23caf6acb2d19f672de4ff2
Tenim dues webs de referència per trobar les claus de pas a partir del Hash:
- http://www.authsecu.com/decrypter-dechiffrer-cracker-hash-md5/decrypter-dechiffrer-cracker-hash-md5.php
- http://cravenupdate.wordpress.com/2012/02/25/desencriptar-md5-online/
El primer té truco. Tenen guardat en una base de dades 500 milions de claus de pas basades en diccionaris francesos amb variacions dels caràcters. I com que és una base de dades, si el hash existeix en la bd, et garanteixen un temps de resposta inferior a 3 segons.
En el segon cas, si no es troba la clau a partir del Hash, queda en espera i els servidors es posen a calcular fins a trobar la clau (fins a un límit de temps).
En el primer cas d'una clau molt fàcil (pwd=joan) es troba molt fàcilment en les dues webs referides. Però en el segon ja no es troba:
Le resultat n'a pas été trouvé HASH MD5 demandé : e92f01d3e23caf6acb2d19f672de4ff2 Chaîne correspondante :
Hash MD5 Password Añadido Estado e92f01d3e23caf6acb2d19f672de4ff2 28/09/2011 En Espera hasta 15/10/2011
Fins el 15 d'octubre hem d'anar provant a veure si els servidors han desencriptat la clau.
Update!. A dia 10/10/2011 la clau ja s'ha rebentat: Df3Jh4Bo56VcB34.
D'aquí ve la importància de posar una clau de pas ben complicada. A part de què l'algorisme MD5 ja no és 100% fiable, és important elegir bé una clau de pas complicada.
Feina per a l'alumne: tu també hauràs d'elegir una clau de pas fàcil i una altra de difícil, i comprovar com la fàcil es pot creaquejar, i la difícil no (o bé haurem d'esperar uns dies a veure si un supercomputador la pot desencriptar).
php i md5
Per veure els paquets relacionats amb php utilitzarem el synaptic en mode gràfic (sudo apt-get install synaptic si encara no el tens instal.lat), o bé en línia de comandes:
$ sudo apt-cache search php5
Si volem executar el php des de la línia de comandes:
php5-cli - command-line interpreter for the php5 scripting language
Si vols executar el codi des del navegador web necessitaràs: (si encara no ho has fet)
$ sudo apt-cache search php | grep apache ... libapache2-mod-php5 - server-side, HTML-embedded scripting language (Apache 2 module)
Per executar les funcions de MD5 (algorisme d'encriptació):
php5-mcrypt - MCrypt module for php5
fitxer apple.php:
<?php $str = 'apple'; echo md5($str); echo "<br />"; if (md5($str) === '1f3870be274f6c49b3e31a0c6728957f') { echo "Would you like a green or red apple?"; } ?>
El que hauràs de fer en aquesta part de la pràctica és fer aquest petit script de php: donada una cadena, generar el codi hash. Amb una mica de discreció comprovaràs si la contrassenya que utilitzes habitualment és fàcil d'endevinar o no a partir del seu codi hash.
Fica el codi anterior en un fitxer nou, md5.php, que crearàs en la carpeta de l'assignatura, que és accessible des d'un navegador web:
Ara bé, també el pots executar directament des de la línia de comandes (i així t'evites obrir el Firefox):
$ php5 md5.php
$ man php5 NAME php - PHP Command Line Interface ’CLI’ SYNOPSIS php [options] [ -f ] file [[--] args...] ...
utilitat pwgen
$ sudo apt-get install pwgen $ pwgen $ pwgen -s -N 1 $ man pwgen PWGEN(1) PWGEN(1) NAME pwgen - generate pronounceable passwords SYNOPSIS pwgen [ OPTION ] [ pw_length ] [ num_pw ] DESCRIPTION The pwgen program generates passwords which are designed to be easily memorized by humans, while being as secure as possible.
Anem a estudiar/llegir/compilar el codi font d'aquest programa.
El paquet que acabes d'instal.lar el pots trobar en la teva màquina a
$ ls -la /var/cache/apt/archives/pwgen* -rw-r--r-- 1 root root 18068 2010-03-07 07:06 /var/cache/apt/archives/pwgen_2.06-1ubuntu2_i386.deb cp /var/cache/apt/archives/pwgen_2.06-1ubuntu2_i386.deb /home/usuari
Un cop copiat, si vols pots alliberar espai de disc fent:
$ sudo apt-get clean
(s'eliminen els paquets descarregats)
El paquet deb el pots descomprimir (per exemple, botó dret > descomprimir), i pots observar els directoris i fitxers que es generen. Has de trobar el binari pwgen i la man page, entre d'altres. Però aquí no està el codi font: sudo apt-get install el que fa és compilar, no instal.lar.
Si volem el codi font hem d'anar directament al projecte:
descarregar i descomprimir
$ tar xvzf pwgen-2.06.tar.gz $ cd pwgen-2.06/ $ ./configure ... creating Makefile $ make -> es llegeix el Makefile, que conté les ordres de compilació, i es genera el binari $ ./pwgen
normalment hi ha el fitxer README que en aquest cas es troba a faltar. Llegir el codi font. Ets capaç d'entendre alguna cosa? Compila pwgen. (Abans de compilar instal.la el paquet build-essential).
Nota. Normalment no compilarem a partir de les fonts els programes que utilitzem, però és bo tenir sempre present que dels programes que utilitzem, que són de codi obert, en podem estudiar el codi font, adaptar-los a les nostres possibilitats, i compilar-los nosaltres mateixos.
Trucos
bash: stty -echo
Si jo executo un script que em demana el password, he d'evitar que aquest es vegi per la pantalla:
#!/bin/bash read -p "Username: " uname stty -echo read -p "Password: " passw stty echo echo echo $uname echo $passw
ofuscar el password en un bash script
ofuscar el password en PHP
la clau és monkey, i la volem ofuscar. Necessitem una paraula que fa de llavor: foobar
Primer de tot generem l'encriptació (Com es comenta en el link, en principi $pass i $key han de tenir el mateix número de caràcters)
<?php $pass = 'foobar'; $key = 'monkey'; $secret = $pass XOR $key; $list = array($key, $secret); foreach($list as $x) { print "Keypart: "; print implode(unpack('H*',$x)); print "\n"; } /* Keypart: 6d6f6e6b6579 Keypart: 666f6f626172 */ ?>
i ara en el programa ja no surt per enlloc el password real
<?php /* Keypart: 6d6f6e6b6579 Keypart: 666f6f626172 */ $secret = '666f6f626172'; $key = '6d6f6e6b6579'; $pass = pack('H*', $key) XOR pack('H*', $secret); print "$pass\n"; ?>
Entrega
Has d'entregar un fitxer de text on m'ensenyis els codis hash de les dues claus de pas que has elegit (la fàcil i la difícil).
Escriu-me també la sortida de les proves que has fet amb la utilitat pwgen,i la sortida per pantalla de la compilació i execució de pwgen.
Recorda la normativa per entregar les pràctiques al Moodle: ASIX-M11-SAD#Normativa_d.27entrega_de_les_pr.C3.A0ctiques_al_Moodle
creat per Joan Quintana Compte, setembre 2011