IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Alert.png Aquesta wiki forma part dels materials d'un curs
Curs: SeguretatXarxesInformàtiques
Fitxers: TecniquesCriptografiques.pdf (TecniquesCriptografiques.odp)
Repositori SVN: https://anonymous@svn.projectes.lafarga.cat/svn/iceupc/SeguretatXarxesInformàtiques
Usuari: anonymous
Paraula de pas: sense paraula de pas
Autors: Sergi Tur Badenas

A criptografia, una funció de hash és una transformació que converteix una entrada qualsevol en un conjunt de caràcters (String) de longitud fixa anomenat valor de hash.

Propietats

  • No tenen per que utilitzar cap clau
  • El valor de hash és un representació única de l'entrada original. Petjada Digital (Digital Fingerprint)
  • També anomenades funcions digest. Digest es pot traduir com resum/compendi
  • Les més conegudes són MD5 i SHA-1 (al 2005 es van identificar debilitats a totes dues, ara també hi ha sha-X, per exemple SHA-512). També són funcions de hash els codis CRC aka Control de redundància cíclica.
  • Hash vol dir coixinet, sofregit o hachis
  • S'espera que siguin funcions d'un sol sentit. Una bona funció de hash té una probabilitat molt baixa de col·lisió (dos textos que donin el mateix resum) i textos similars han de tenir funcions de hash molt diferents.

Ús:

La funció resum, s'utilitza principalment tant en el camp de la criptografia com en el de la indexació de dades i en el de les comunicacions digitals com a codi de redundància per a corregir errors de transmissió. Molts sistemes relacionats amb la seguretat informàtica, amb les bases de dades o les transmissions de dades, usen funcions o taules de resum.

Utilitats

FuncionsHash.png

Petjades digitals de claus públiques

Es calculen amb funcions de hash.

  • Són seqüències de bytes curtes utilitzada per autenticar una clau pública
  • Es creen aplicant funcions de hash a les claus públiques
  • Al ser més curtes que les claus públiques s'utilitzen per simplificar certes tasques en criptografia (autenticació, criptografia hibrida...)

Exemple:

 43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8

A la pàgina d'aquest wiki podeu trobar les petjades digitals del servidor HTTP i SSH d'aquesta wiki.

Algorismes

DES

Vegeu mkpasswd

SHA-x

Vegeu mkpasswd

MD5

Vegeu mkpasswd

LM Hash

Vegeu LM hash

NT hash

Vegeu NT hash

Ordres

MD5SUM

Permet calcular la suma MD5 d'un fitxer:

$ md5sum ubuntu910.iso 
bdf5020b23b5034cb9540de5970e3be3  ubuntu910.iso

Ordre proporcionada pel paqeut del mateix nom:

$ dpkg -S md5sum | grep bin
....
coreutils: /usr/bin/md5sum
$ sudo apt-get install coreutils
$ touch prova.iso
$ md5sum prova.iso
d41d8cd98f00b204e9800998ecf8427e  prova.iso

http://www.adamek.biz/md5-generator.php

SHA512

És el mètode d'encriptació utilitzat per les paraules de pas en distribucions Linux modernes com Ubuntu (--acacha 21:07, 5 abr 2010 (UTC)). Consulteu:

/etc/login.defs

El paràmetre:

ENCRIPT_METHOD

També consulteu PAM i John The Ripper.

Per calcular el hash, abans:

$ sha1sum prova.iso

Ara hi ha versions més potents:

$ sha <TABULADOR DOS COPS>
sha1sum       sha224sum     sha256sum     sha384sum     sha512sum     shadowconfig  shar          shares-admin  shasum

mkpasswd

Vegeu Mkpasswd

APG

Vegeu APG

Hash passwords

És important tenir en compte que els sistemes de xifratge actuals per emmagatzemar paraules de pas (per exemples les paraules de pas del fitxer /etc/passwd) estan basats en sumes hash de diferents tipus (com MD5, SHA o SHA512) però no són directament sumes md5! Per exemple si utilitzeu l'ordre md5sum per a crear la paraula de pas:

$ md5sum <<EOT
> 1234
> EOT
e7df7cd2ca07f4f1ab415d457a6e1c13  -

I ara creem un usuari amb la mateixa paraula de pas també basada en md5. Modifiqueu PAM per utilitzar paraules de pas md5 amb el nous usuaris. Modifiqueu el fitxer:

$ sudo joe /etc/pam.d/common-password

Canvieu la línia:

 password        [success=1 default=ignore]      pam_unix.so obscure sha512   

per:

password        [success=1 default=ignore]      pam_unix.so obscure md5   

ara creeu un usuari:

$ sudo adduser pep

I li poseu també 1234 com a paraula de pas. Si consulteu la paraula de pas generada:

$ sudo cat /etc/shadow
... 
pep:$1$n1.1CuXe$mGEkxfY4wY4tNejlUuK9o.:15277:0:99999:7:::

No s'assembla en res amb la suma MD5. Això es per que s'apliquen dos tècniques anomenades salting i stretching. El salting provoca que els atacs . El stretching provoca que els atacs de força bruta siguin més complicat (tardin més temps).

El format és:

$id$salt$encrypted

Els identificadors ($id inicial) són:

ID  | Method
-------------------------------------------------
1   | MD5
2a  | Blowfish (on some Linux distributions)
5   | SHA-256 (since glibc 2.7)
6   | SHA-512 (since glibc 2.7)

Creeu un altre usuari i veureu que la paraula de pas xifrada és diferent tot i utilitzar la mateixa paraula de pas:

$ sudo adduser pepa
...
$ sudo cat /etc/shadow
... 
pep:$1$n1.1CuXe$mGEkxfY4wY4tNejlUuK9o.:15277:0:99999:7:::
pepa:$1$EFO2qpQU$cWAsq3IYsJi8JLr0XwXOt0:15277:0:99999:7:::

On la paraula de pas està al segon camp (camps separats per :):

  • Tots dos usuaris utilitzen MD5 (tipus1)
  • El salt de l'usuari pep és n1.1CuXe
  • El salt de l'usuari pepa és EFO2qpQU
  • Els passwords xifrats són respectivament mGEkxfY4wY4tNejlUuK9o. i cWAsq3IYsJi8JLr0XwXOt0

Per establir el password el sistema genera un sal aleatori a partir del qual es genera la paraula de pas. Com el salt original és diferent, aleshores donen paraules xifrades diferents.

Per crear els mateixos hash cal indicar el SALT. Ho podeu fer amb l'ordre mkpasswd:

$ mkpasswd -S n1.1CuXe -5
Contrasenya: 
$1$n1.1CuXe$mGEkxfY4wY4tNejlUuK9o.
$ mkpasswd -S EFO2qpQU -m md5
Contrasenya: 
$1$EFO2qpQU$cWAsq3IYsJi8JLr0XwXOt0

Per comprovar la paraula de pas no es desxifra la paraula de pas (malament aniríem si es pugues desxifrar ;-) ) el que es fa és llegir el hash, extreure el salt, generar el hash a partir de la paraula de pas que prova l'usuari però utilitzant el salt del hash i si coincideixen els hash aleshores la paraula de pas és correcta.

NOTA: Observeu la importància de que no es tingui accés als hash! Si es té accés el atac de força bruta és força més ràpid per que se sap el salt


Més detalls amb:

$ man 3 crypt

Windows/Samba hashes

Teniu diferents eines per generar aquest hashes:

HMAC

Veeu HMAC

Bcrypt

Bcrypt

Salt

In cryptography, a salt is random data that is used as an additional input to a one-way function that hashes a password or passphrase.[1] The primary function of salts is to defend against dictionary attacks versus a list of password hashes and against pre-computed rainbow table attacks.

A new salt is randomly generated for each password. In a typical setting, the salt and the password are concatenated and processed with a cryptographic hash function, and the resulting output (but not the original password) is stored with the salt in a database. Hashing allows for later authentication while defending against compromise of the plaintext password in the event that the database is somehow compromised.

Cryptographic salts are broadly used in many modern computer systems, from Unix system credentials to Internet security.

Vegeu també

Enllaços externs