Hashing delle password
Alcuni degli attacchi alla sicurezza informatica più devastanti derivano da violazioni delle password, che sono archiviate in modo inadeguato all'interno dei database lato server.
Il problema potrebbe iniziare con l'utente, che potrebbe essere incline a impostare una password semplice e memorabile. Ciò produce un rischio in quanto può essere facilmente intuito dagli aggressori se hanno una comprensione contestuale dell'individuo, come i nomi di animali domestici o parenti.
Anche quando viene scelta una password più complicata, il software cracker di password può innescare un attacco di forza bruta, risultando in un gran numero di password provate fino al successo.
Un altro vettore di attacco sta ottenendo l'accesso al database che memorizza le credenziali. Nello scenario da incubo di un CISO, se un utente malintenzionato dovesse ottenere l'accesso a un database di password in chiaro non crittografate, migliaia di account utente potrebbero essere immediatamente compromessi. Questo purtroppo si è verificato troppo spesso, colpendo organizzazioni sia piccole che grandi.
Non temere, queste prospettive snervanti possono essere limitate da qualcosa chiamato hashing delle password!
Definizione di hashing
L'hashing delle password è una tecnica algoritmica crittografica che accetta testo in chiaro, esegue una complicata funzione hash e produce testo con hash. La chiave di questo processo è la funzione, ma non tutti sono ugualmente adatti a prevenire la rottura.
Tutte le funzioni devono soddisfare due proprietà chiave per soddisfare i criteri di OWASP (The Open Source Web Application Security Project):
È difficile creare un input iniziale che corrisponda a uno specifico output desiderato.
Per illustrare questa caratteristica, l'hash di 'Password' generato attraverso il popolare algoritmo crittografico sha256, è:
e7cf3ef4f17c3999a94f2c6f612e8a888e5b1026878e4e19398b23bd38ec221a
E l'hash di 'password' è:
5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8
Come puoi vedere, cambiando semplicemente la maiuscola di una lettera dell'input, viene prodotto un output significativamente diverso, il che significa che gli output non possono essere facilmente determinati dagli input.
È pratico produrre l'hash ma praticamente impossibile rigenerare l'input se si conosce solo il valore dell'hash.
A differenza della crittografia, in cui una password in testo normale viene convertita in testo crittografato prima di essere decrittografata nuovamente in testo normale, l'hashing è una delle funzioni. Poiché l'hashing delle password è deterministico, lo stesso input produce sempre lo stesso output.
Il caso d'uso di questo è quando un utente crea una password, può essere sottoposta a hashing, quindi l'output viene archiviato in un database. Quando l'utente riprova la password, viene nuovamente sottoposta a hashing e quindi verificata rispetto all'hash nel database. Se un utente malintenzionato ottiene l'accesso al database hash, è in gran parte inutile poiché le password non possono essere riconvertite in testo normale.
Prova a eseguire questo script Python per vedere una versione semplice di questo concetto :
# this and other fun scripts can be found at: https://github.com/Jay-Gokani
# install sha256 library for hashing
from hashlib import sha256
# demo explanation
print ('Hello, this demo will ask for a plaintext password, hash it and will verify the hash for access requests')
# first hash stored as a variable
hash1 = (sha256(input('What phony password would you like to set? ').encode('utf-8'))).hexdigest()
print('The hash of your plaintext password is:', hash1)
# password hash stored confirmation
print ('Your password hash has been successfully stored.')
# promt the user for password re-entry, hash and store as another variable
hash2 = (sha256(input('I will test your hash. Please type your password: ').encode('utf-8'))).hexdigest()
print('The hash of your plaintext password is:', hash2)
# access approval or deny check
while True:
if hash1 == hash2:
print('Success - password hash matches.')
break
else:
print('The password hash does not match. Please run the programme again.')
break
Gli hash ovviamente non sono una soluzione all-in-one per prevenire password compromesse. Ad esempio, gli aggressori possono produrre elenchi di password comuni e gli hash corrispondenti. Se nell'elenco sono presenti hash nel database, l'attaccante conoscerà la password in chiaro. Ma questo non dovrebbe essere un problema se le password in chiaro vengono create con una complessità sufficiente. Inoltre, l'applicazione che ingerisce password in chiaro per produrre hash potrebbe essere intercettata.
L'hashing delle password è un grande passo nella giusta direzione! Speriamo che questo articolo ti sia piaciuto :-)

![Che cos'è un elenco collegato, comunque? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































