Sicurezza hash della password correlata

2

Supponiamo di avere una hash hash () crittografica strong, una password completamente casuale composta da 15 caratteri pass15, due valori salati a carattere singolo salta, saltb.

Calcoliamo hash hash, hashb applicando la funzione hash alla password pass15 + i sali:

hasha = hash (pass15 + salta)

hashb = hash (pass15 + saltb)

Ora, diciamo che salta, saltb, hash () e hasha sono tutti pubblici. Hashb è più a rischio di cracking che se hasha non fosse noto?

Per coloro che hanno bisogno di specifiche, lascia andare hash () = sha256, ma se è importante per favore dì perché è importante per questo problema.

La mia convinzione è che hashb non sia meno vulnerabile perché solo un attacco di forza bruta è possibile scoprire hashb, e che la conoscenza pubblica di hasha, salta e saltb non ha alcuna rilevanza.

Non so se c'è qualche scorciatoia matematica che potrebbe utilizzare hasha per accelerare il crack. Non sembra teoricamente possibile.

** Riepilogo basato sulle risposte date finora: **

Per prima cosa, lascia che riformuli la domanda in un modo diverso:

Se ho una password strong di 15 caratteri casuali, gli hash salati sono completamente indipendenti e sicuri da usare, tuttavia, anche se i sali sono noti, i singoli caratteri deboli vengono semplicemente aggiunti al fine della password e la funzione di hash è veloce, come SHA256?

La risposta sembra essere sì. Quindi, potrei virare su un carattere% alla fine della password, cancellarlo e usare quell'hash come ID utente. Sarebbe difficile da ricordare e probabilmente troppo a lungo come id utente, ma sarebbe sicuro farlo.

Potrei anche aggiungere un singolo carattere $ alla fine della password, cancellarlo e usare l'hash come password del mio portatile, e sarebbe sicuro farlo, anche se sto usando pubblicamente l'hash% come il mio ID utente. L'elenco potrebbe continuare con quello che potrei fare con la password di 15 caratteri e un salino aggiunto. Ad esempio, potrei virare sul nome di dominio di qualsiasi sito, cancellare il risultato e usare l'hash come password per il sito.

L'ultimo concetto è la base per programmi come PwdHash e PasswordMaker.

L'assunto è che (almeno per me) le password generate da tali programmi sono tenute al sicuro come password, per evitare che la funzione di hash venga "spezzata" o compromessa. Ma sembra che finché la password sicura viene tenuta segreta, che qualsiasi hash salato sia sicuro da usare come voglio io - che pubblicare un tale hash nel mondo non compromette in alcun modo la sicurezza di nessuno degli altri hash.

Stavo semplicemente chiedendo se qualcuno sa di qualche debolezza con questo modo di pensare. La risposta finora è no, i singoli hash possono essere usati comunque.

Per coloro che potrebbero interrogarsi su COME sicuro, ecco una rapida risposta basata sulla matematica (ho tenuto i calcoli visibili in modo che tu possa seguire la tua calcolatrice):

Credo che in questo momento alcuni programmi possano utilizzare la scheda grafica di un computer per calcolare circa 1 billon SHA256 hash al secondo, 1E9 al secondo (entro un ordine di grandezza almeno).

Questo è il motivo per cui SHA256 è povero per le password e dovremmo usare hash più lenti come Bcrypt.

Ora, prendi una password casuale di 15 caratteri. Il numero di possibili password candidate date maiuscole, minuscole e numerali nella password sarebbe 62 ^ 15 = 7.7E26 possibili password.

Usando SHA256 come funzione di hash, il numero di secondi che occorrerebbe, in media per decifrare questa password sarebbe la metà del tempo necessario per enumerare tutte le password possibili:

7.7E26 / 1E9 / 2 = 7.7E17 / 2 = 3.9E17 secondi

Il numero di anni per decifrare la password sarebbe:

3.9E17 / 60/60/24/365 = 1.2E10 anni, o 12 miliardi di anni, solo un miliardo di anni in meno rispetto all'età dell'universo.

Quindi passare da un hash SHA256 pubblico alla password salata a 15 caratteri originale richiederà probabilmente più tempo di quello che ho su questa Terra.

Anche con i miglioramenti apportati all'hardware (ignorando la possibilità dei computer quantistici), il divario nella tecnologia per arrivare a crollare in un anno significa che abbiamo bisogno di computer che sono 10 miliardi di volte più veloci.

Quindi, dovrei sentirmi libero di usare gli hash salati SHA256 come preferisco a patto che la base dell'hash sia una password casuale di 15 caratteri o più.

    
posta Ken Clubb 27.07.2014 - 16:42
fonte

2 risposte

4

Presumo che la tua domanda sia:

Can an attacker find pass15 more easily if they know both hasha and hashb than if they know only hashb?

Se quella funzione di hash è veramente buona dovrebbe avere una buona uniformità . Ciò significa che qualsiasi input dato alla funzione verrà mappato su un'uscita indipendentemente da come viene mappato un input simile.

Questo significa che sapere come vengono mappati pass15 + salta non dovrebbe portare ad alcuna ulteriore conoscenza di come vengono mappati pass15 + saltb.

Un pirata informatico avrebbe bisogno di potenziare o hasha o hashb per scoprire pass15.

In pratica, le differenze che potrebbero verificarsi tra i sali sono:

  • Unico vs sali comuni: un unico sale per client significa che occorre più tempo per un utente malintenzionato per interrompere un set di hash che se è condiviso tra le voci di quel set. Questo è l'aspetto più importante dei sali
  • Sali contro salti lunghi: se il sale è comune, è probabile che un sale più lungo sia già associato alle password in una tavola arcobaleno perché ci sarebbero voluti più tempo per inserire le voci della tabella arcobaleno di lunghezza sufficiente. Questo è un fattore molto minore rispetto all'unicità dei sali o all'uso di funzioni hash corrette e lente
  • Durata da cui è stato scoperto il tuo sale: un sale dovrebbe essere privato. Se il tuo db è stato trapelato, dovresti essere in grado di impostare un limite inferiore nel tempo che impiegheresti a far crollare un attaccante, ad es. 1% delle password degli utenti, in modo da sapere per quanto tempo è possibile attendere prima di reimpostare tutte le password degli utenti.
risposta data 27.07.2014 - 16:56
fonte
0

Now, lets say that salta, saltb, hash(), and hasha are all public. Is hashb any more at risk of being cracked than if hasha was not known?

Mettendo da parte per un minuto che la password sia 15 caratteri di alta entropia (che è buona), e che sha256 è un algoritmo di hashing veloce (che è cattivo) ...

Dare GashA al mondo sta rivelando informazioni che dovrebbero essere private. Questo hash potrebbe essere bruto forzato, lasciando l'attaccante con SaltA + Password. Poiché SaltB e Hash () sono anche di dominio pubblico, l'autore dell'attacco può creare HashB con Hash (SaltB + Password).

My belief is that hashb is no less crackable because only a brute force attack is possible to discover hashb, and that the public knowledge of hasha, salta and saltb has no bearing.

Hai ragione che solo un attacco di forza bruta potrebbe rivelare HashB, ma l'attacco non deve essere contro HashB, potrebbe essere contro HashA.

I just do not know if there is some mathematical shortcut that could utilize hasha to speed up the cracking. It does not seem theoretically possible.

Non conosco alcuna matematica che possa indebolire la sicurezza di HashB conoscendo HashA. È solo una questione di informazioni private che vengono rese pubbliche. I sali possono essere considerati pubblici, ma l'hash deve essere privato.

Modifica : dopo aver riletto la domanda, mi rendo conto che questa risposta è specifica solo per l'implementazione della divulgazione dell'hash proposta. Mi scuso se questo non era quello che stai cercando.

    
risposta data 27.07.2014 - 16:55
fonte

Leggi altre domande sui tag