



Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Descritti tutti gli algoritmi principali per la codifica e memorizzazione delle password nei database MySQL. 27/30 all'orale, tesina MOLTO APPREZZATA DAI PROFESSORI, SOPRATTUTTO ESTERNI.
Tipologia: Tesine di Maturità
1 / 5
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!




Per la corretta gestione delle utenze, sarà necessario salvare le relative password, in una tabella del nostro database.
ID utente password
Dato che l’informazione più importante e sensibile che andiamo a salvare in un database è proprio la password è consigliabile non salvarla in chiaro, ma è opportuno memorizzarla tramite delle funzioni, messe a disposizione da MySQL, che la rendono "illeggibile".
Le funzioni che ci mette a disposizione MySQL sono tutte funzioni hash. Una funzione hash trasforma un testo normale di lunghezza arbitraria in una stringa, solitamente, di 128 bit, che sintetizza il messaggio in una stringa unica che gode delle seguenti proprietà:
Prendendo d’esempio il database MySQL, usato nel nostro progetto, vediamo quali sono le funzioni principali che mi permettono di criptare una stringa al momento della memorizzazione: PASSWORD; MD5; SHA-1; SHA-2 (utilizzabile dalla versione 5.5.5);
L'MD5 (Message Digest 5) è un algoritmo di sintesi molto utilizzato per la sicurezza nei database ed è un'evoluzione dei suoi predecessori MD2 e soprattutto dell'MD (del quale ha mantenuto la struttura ma ne ha migliorato la sicurezza). La stringa risultante dopo tale hashing è una stringa fissa di 32 caratteri, ovvero una stringa di 128 bit, chiamata molto semplicemente MD5 Hash.
Gli algoritmi SHA (Secure Hash Algoritm) nascono come modifica dell'ormai passato MD4 e sono suddivisi in quattro categorie:
SHA-0: ormai obsoleto e non più utilizzato; SHA-1: che è stato violato; SHA-2: in uso; SHA-3: annunciato nel 2012;
Per quanto riguarda SHA-0, ebbe vita breve, poiché venne ritirato poco dopo la sua pubblicazione per essere sostituito da SHA-1. Entrambi producono un valore hash a 160 bit. Un gruppo di crittoanalisti cinesi riuscirono a violare SHA-1 nel 2005. Dato questa violazione nacque la versione SHA-2 dello standard. SHA-2 è suddiviso in varie famiglie a seconda della lunghezza in bit del codice hash, che possono essere:
224 bit; 256 bit; 384 bit; 512 bit;
Nel 2007 è stato indetto un concorso per la realizzazione di un nuovo algoritmo SHA-3. Il vincitore fu indetto nel 2012 e si tratta di un team di cui faceva parte anche un italiano: Guido Bertoni. L'algoritmo SHA-3 andrà gradualmente a sostituire lo SHA-2 anche se non è ancora stato violato.
Applicando questo metodo, e sapendo che dopo averla memorizzata nel DB non posso risalire alla stringa iniziale, come è possibile che al momento della login io scrivo la stringa iniziale e il confronto vada a buon fine? La risposta è semplice, poiché al momento dell’inserimento della password durante la login, la stringa che inserisco viene criptata in MD5 (la funzione deve essere sempre la stessa) e il confronto è effettuato tra le due stringhe criptate (quella che ho appena inserito e quella presente nel DB).
Ultimamente si stanno creando dei “dizionari”, ovvero gli hacker stanno memorizzando gli hash di molte parole conosciute, in modo da confrontarle con quelle presenti nel database e trovarne i corrispondenti. Per questo motivo la soluzione a tale problema è l’utilizzo del SALT (letteralmente aggiungere sale). Questo metodo consiste nell’aggiunta di un altro pezzo di stringa alla nostra stringa iniziale, secondo un criterio da noi scelto (può trattarsi dell’ora o di un dato generato casualmente). Ogni bit di salt aggiunto alla stringa raddoppia la quantità di memorizzazione e calcolo necessari per un attacco.
Prendiamo come esempio la password 'test' e come salt i caratteri 'xy':
Quindi per confrontare la password che inserisco al momento della login con quella contenuta nel DB si avranno tali procedimenti:
Per gestione dei tentativi si intende quante volte un'utente può tentare di inserire una password. Si pensi all'utenza della nostra mail, per accedervi dobbiamo inserire la mail e la password. Qualora si inserisse una password errata, il sistema ci permette di riprovare. Ovviamente, per motivi di sicurezza i tentativi devono essere limitati. Come faccio? Costruisco una tabella all'interno del mio database in cui salvo in ogni riga ogni tentativo effettuato dall'utente. Un esempio potrebbe essere:
ID IDUtente dataTime 01 01 ...... 02 01 ......... 03 01 ............
Al raggiungimento dei tre tentativi, ovvero quando IDUtente viene ripetuto per tre volte, il sistema negerà la possibilità di riprovare ad inserire la password.