Ho letto questa interessante domanda su perché improvvisare la propria funzione hash con le funzioni hash esistenti è pessimo . Tuttavia, ciò si concentra in modo specifico sul "mixaggio" di hash. Cosa succede se, ad esempio, modifico i turni perpendicolari dell'hash MD5? Esempio:
Sposta i turni fin ora
s[ 0..15] := { 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22 }
s[16..31] := { 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20 }
s[32..47] := { 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23 }
s[48..63] := { 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21 }
I miei turni di turno leggermente aggiustati
s[ 0..15] := { 5, 14, 19, 22, 5, 14, 19, 22, 5, 14, 19, 22, 5, 14, 19, 22 }
s[16..31] := { 6, 12, 14, 21, 6, 12, 14, 21, 6, 12, 14, 21, 6, 12, 14, 21 }
s[32..47] := { 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23 }
s[48..63] := { 7, 9, 11, 17, 7, 9, 11, 17, 7, 9, 11, 17, 7, 9, 11, 17 }
Queste modifiche cambiano drasticamente l'esito della mia stessa "hash". Questo è solo un piccolo esempio da cambiare. Il mio ragionamento dietro questo è che temporaneamente impedisce gli attacchi Rainbow. Se ho degli utenti sciatti con password come thisisnopassword
, pandabear
& 12346
sarebbero leggermente più sicuri dopo che il mio database sarebbe stato violato perché non esistono tabelle Arcobaleno per l'hash "mio".
A proposito, ho scelto gli importi del turno per turno perché non sono riuscito a trovare una motivazione chiara sul perché sono stati scelti in modo specifico, vedi questa domanda.