Importància d'elegir la clau de pas

De wikijoan
Salta a la navegació Salta a la cerca

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

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:

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