Domanda:
Quale criterio per le password è più sicuro: una password di lunghezza 9 rispetto a due password ciascuna di lunghezza 8?
Carlos
2019-02-28 08:15:12 UTC
view on stackexchange narkive permalink

Cosa c'è di più sicuro, avere una password di lunghezza 9 (salata e con hash) o due password diverse, ciascuna di lunghezza 8 (salata e sottoposta ad hashing utilizzando due sali diversi)?

I commenti non sono per discussioni estese;questa conversazione è stata [spostata in chat] (https://chat.stackexchange.com/rooms/90464/discussion-on-question-by-carlos-which-password-policy-is-more-secure-one-passw)
Puoi spiegare come vengono utilizzate queste password e come appare il processo di autenticazione?
Sei risposte:
Royce Williams
2019-02-28 10:56:27 UTC
view on stackexchange narkive permalink

Come ha notato John Deters, 2x8 è quasi certamente peggio, ma i motivi per cui è necessario spiegare un po '.

Ci sono stati un paio di problemi con gli hash LANMAN (il classico caso di spezzare una password a metà , andato storto):

  • Poiché le password tendono ad essere generate dall'uomo e un po 'brevi, se una singola password fosse solo un po' più lunga della prima metà (diciamo, 8 caratteri), poi risolvere il secondo tempo richiederebbe drammaticamente meno tempo e potrebbe anche rivelare quello che probabilmente sarebbe stato il primo tempo

  • LANMAN era proprio così maledetto veloce (che l'attaccante possa tentare, in operazioni di hash al secondo)

  • LANMAN ha tagliato in due le password con una lunghezza sfortunata (7), che era abbastanza suscettibile al completo esaurimento (e anche di più sulle GPU moderne)

Tuttavia, la tua domanda è leggermente diversa dal caso LANMAN:

  • Non afferma che le password 2x8 siano in realtà una singola password spezzata a metà (potrebbero essere indipendenti endently generato e random)
  • Afferma esplicitamente che le due password sono di lunghezza 8 (piuttosto che, diciamo, una di lunghezza 8 e l'altra di lunghezza 1, il famoso caso peggiore di LANMAN)
  • A meno che i tuoi sali non siano banalmente piccoli, costruire tabelle arcobaleno non sarebbe fattibile , che è lo scopo del salting (a differenza degli hash LANMAN, che erano completamente non salati)

Quindi è una domanda interessante, a cui si risponde in gran parte guardando la matematica associata.

Facciamo alcune ipotesi:

  • Entrambi i Gli approcci 9x1 e 8x2 vengono salati e sottoposti a hash utilizzando le stesse lunghezze e algoritmi di sale
  • Caso peggiore per l'attaccante: le password vengono generate casualmente dal set di caratteri ASCII stampabili (95 caratteri), con sali ragionevolmente lunghi. (La domanda sarebbe meno interessante se le password fossero generate dall'uomo, perché in pratica di solito cadrebbero sotto attacchi facili molto prima che l'aggressore debba ricorrere alla forza bruta)

  • L'hardware e le velocità moderni sono un gioco leale

  • L'algoritmo hash può o non può essere compatibile con il parallelismo

Considerato tutto quanto sopra, vorrei approssimativamente aspettatevi:

  • L'hash 1x9 sarebbe esaurito al 100% nelle operazioni di hashing 95 ^ 9 (6.302 × 10 ^ 17) (che potrebbero essere parallelizzate bene o male).
  • Gli hash 2x8 sarebbero esauriti al 100% in (95 ^ 8) x2 (1.326 × 10 ^ 16) operazioni di hashing (e indipendentemente dall'algoritmo, potrebbero essere facilmente parallelizzati in modo ingenuo semplicemente craccando ogni hash su un sistema diverso - ma spesso può essere parallelizzato in modo molto efficiente anche su un singolo sistema, a seconda dell'algoritmo).

In altre parole:

  • Quel nono carattere aggiunge 95 volte il lavoro da esaurire e potrebbe essere difficile parallelizzare
  • Tw o Le password di 8 caratteri raddoppiano solo la quantità di lavoro necessaria, e possono essere banalmente parallelizzate

Un altro modo di pensarci è che l'aggiunta di un carattere in più crea approssimativamente lo stesso lavoro di dover decifrare 95 password di otto caratteri ! (Se questo non è intuitivo, inizia con casi semplici confrontando casi più piccoli come 1x1 vs 1x2, finché non lo capisci).

Quindi, a parità di altre condizioni, 1x9 dovrebbe quasi sempre essere migliore di 2x8 .

E in realtà, questa non è solo una semplice illustrazione della potenza della parallelizzazione, ma dovrebbe anche rendere ovvio il motivo per cui consentire lunghezze di password più lunghe è così cruciale. Ogni carattere aggiuntivo nel modello precedente aggiunge 95 volte il lavoro allo spazio delle chiavi complessivo. Quindi l'aggiunta di due caratteri aggiunge 95 ^ 2 - o 9025 volte - il lavoro. La forza bruta diventa rapidamente irrealizzabile, anche per hash molto veloci e non salati.

Questo sarebbe un'ottima domanda per i compiti a casa. ;)

D'accordo con la tua conclusione.Lo avrei spiegato in modo molto simile.
Se le password 2x8 sono generate dall'uomo, ci sono buone probabilità che la seconda sia solo la prima con un "1" sostituito da un "2".
Cosa succede se si rende la funzione di hashing per la seconda password 200 volte più lenta della funzione di hashing per la password principale?Rendere la funzione di hashing per la funzione primaria troppo lenta renderà banale un attacco denial-of-service (semplicemente inondare un server con molte richieste di accesso), ma se si rallentasse la funzione secondaria, solo le persone che avevano crackato la password primariaessere in grado di eseguire un DOS utilizzando il secondo, e provare ciò aumenterebbe la probabilità che le credenziali vengano modificate prima che l'attaccante possa ottenere l'accesso.
Perché avere due password per craccare cambierebbe la paralelizzazione in modo significativo, assumendo che l'input sia ancora completamente indistinguibile quando l'output è noto?Presumo che lasci solo la possibilità di calcolare ogni hash, che sembrerebbe essere ugualmente efficace distribuito su 8 core su un computer come se fosse 4 core su 2 computer.
Domanda giusta.Non sono uno sviluppatore, ma ho osservato i risultati.Quando si attacca un hash salato, provare la stessa password candidata contro entrambi gli hash a volte può essere eseguito in modo più efficiente se eseguito insieme rispetto a quando eseguito completamente separatamente.Non mi piace le scorciatoie matematiche / algoritmiche che lo rendono possibile, ma i risultati sono misurabili.(E questa proprietà ovviamente non sarebbe quella che vorresti come difensore, motivo per cui i moderni algoritmi di hashing delle password sono costruiti per eliminarla).
Il tuo caso 8x2 non ha molto senso per me per quanto riguarda la parallelizzazione.Supponendo che sia necessario che entrambi gli hash siano corretti per entrare, come puoi decifrarli indipendentemente su sistemi separati?Ingenuamente sembra che avresti bisogno di (8 * 2) ^ 2 tentativi, anche se devi solo calcolare (8 * 2) * 2 hash.Mi sto perdendo qualcosa?
@Geobits, se assumiamo che l'accesso richiede entrambe le password (che non è esplicitamente indicato nella domanda, ma è un presupposto molto ragionevole), quindi con le mie altre ipotesi, avresti bisogno di 95 ^ 8 tentativi - caso peggiore - per garantire che tuli avevo risolti da soli.Se questo ha richiesto, diciamo, un giorno di "orologio da muro", se riesci a metterli in parallelo, puoi anche rompere * due * di loro in un giorno.Quindi è (95 ^ 8) x2 di calcolo, ma ancora solo un giorno di tempo trascorso.
Non presume che il sistema ti dica quando riesci a realizzarne uno?Se hai due campi password e vengono inviati entrambi contemporaneamente, non mi aspetto "Password B errata" come risposta;si spera che il sistema sia abbastanza intelligente da dire semplicemente "no".Suppongo che se stai inserendo pw A, quindi ottieni un pass / fail prima di entrare pw B, ciò avrebbe senso (ma comunque non parallelizzerebbe).
La domanda non specifica in entrambi i casi, ma ciò che stai descrivendo sarebbe un modo intelligente per resistere agli attacchi _online_ (interattivi).Presumo che il modello di minaccia debba includere anche un attacco _offline_, in cui tutti gli hash delle password sono stati rubati e possono essere attaccati rapidamente e senza soglie, in qualsiasi contesto hardware scelto dall'aggressore.
Oh, certo, il modello offline è decisamente migliore con uno, e ci sono modi migliori per implementarne uno online (tramite throttling / limiting, ecc.) Comunque.Stavo solo assicurandomi di non essermi perso qualcosa.
WaltZie
2019-02-28 19:14:43 UTC
view on stackexchange narkive permalink

Partendo dal punto di vista matematico ... (per semplificare il calcolo presumo solo cifre di password)

Situazione A: 2 parti 8 cifre password, 'l'attacco bruteforce sulla prima parte richiede un massimo di 10 ^ 8 hash, lo stesso per la parte. Totale di max 2 * 10 ^ 8 hash richiesti "

Situazione B: 1 parte di password di 9 cifre," attacco bruteforce richiede max 10 ^ 9 hash "

La matematica dice che B è meglio di A

In poche parole

l'aggiunta di più password aumenta forza bruta di moltiplicazione di numero di parti (in questo scenario è 2x)

l'aggiunta di più cifre aumenta la forza bruta della potenza di numero di cifre (in questo lo scenario è x10 ^ 1)

Come sei arrivato a 10 come base?È molto raro che siano consentiti solo numeri, giusto?Con i caratteri alfanumerici (ASCII), la base sarebbe già 36 o 62.E se consenti qualsiasi carattere Unicode ... Il tuo argomento è ancora più forte con basi più grandi.
WaltZie ha iniziato con un semplice caso, per semplificare la matematica.
John Deters
2019-02-28 08:24:16 UTC
view on stackexchange narkive permalink

Dividere la password è quasi certamente peggio. Consente di creare una tabella arcobaleno di otto caratteri. Ciò implica che tutte le password nel sistema saranno in 8 parti di caratteri. (Questo è esattamente il modo in cui sono state violate le password di NT LANMAN.) Nel tuo caso, sarebbero necessarie semplicemente due tabelle arcobaleno.

Il sistema di password a nove caratteri non ha alcun difetto visibile, il che implica che se si inserisse una password corretta di 14 caratteri, sarebbe stata salvata in modo sicuro come un unico hash.

Salarli escluderebbe automaticamente l'uso delle tabelle arcobaleno.Ma il metodo descritto ridurrebbe effettivamente la forza di password più lunghe, esattamente per i motivi che hai notato.
Ehm, a meno che non fosse un sale banalmente debole (corto).:)
Tom
2019-02-28 14:57:00 UTC
view on stackexchange narkive permalink

Nessuna risposta significativa è possibile senza sapere qual è il tuo scenario di minaccia . Da cosa stai cercando di proteggerti? Sei preoccupato per la forza bruta o il cracking dell'hashish? Nel primo caso dobbiamo conoscere la tua procedura di login (es. Inserisco le password in sequenza o in parallelo?). Inoltre, se la tua procedura di accesso non mi blocca dopo migliaia o milioni di tentativi di accesso falliti, non funziona. Non è una questione di sicurezza della password.

E gli utenti che annotano le cose? Surf sulle spalle? Phishing? Qual è il modello dietro le password?

Esistono usi legittimi di due password, ad esempio una password di accesso in lettura e una password separata per l'abilitazione del cambiamento. Dubito che tu lo abbia in mente a causa della tua alternativa di password di 9 lettere, semplicemente buttandola là fuori per dimostrare che la realtà è più complicata di una domanda accademica sulla robustezza della password basata solo sulla lunghezza.

Stimolante!E un altro caso d'uso interessante per due password: maggiore resistenza alla minaccia interna (che richiede la collusione di due persone per utilizzare il sistema).
@RoyceWilliams è molto lontano da ciò che implica la domanda, ma sì, è un vero caso d'uso nel mondo reale che è più comune di quanto la maggior parte delle persone supponga.
Questo non fornisce una risposta alla domanda.Per criticare o richiedere chiarimenti a un autore, lascia un commento sotto il suo post.- [Dalla recensione] (/ review / low-quality-posts / 133084)
@SoufianeTahiri: Ci sono molte domande alle quali una risposta corretta dipenderebbe da dettagli che non sono stati posti.Una spiegazione dei fattori che influenzerebbero la risposta può essere più informativa di una risposta basata su alcune ipotesi dichiarate sui dettagli non richiesti e sarà spesso più utile di una basata su ipotesi non dichiarate.Questa risposta suggerisce che la risposta è * di solito * no, ma riconosce la possibilità di alcuni casi ristretti in cui sarebbe sì.
supercat
2019-03-01 03:30:36 UTC
view on stackexchange narkive permalink

I sistemi di password implicano compromessi tra la sicurezza contro l'accesso illegittimo e la resistenza agli attacchi denial of service. Un potenziale vantaggio dei sistemi a password divisa è che le due metà del sistema possono applicare diversi compromessi. Ad esempio, la resilienza contro gli attacchi denial-of-service può richiedere che la funzione di hashing della prima metà sia abbastanza veloce da tenere il passo con i tentativi di accesso di spam, ma non sarebbe così necessaria per la funzione della seconda metà poiché solo un attaccante che avesse violato la password della prima metà sarebbe stato in grado di tentare l'accesso con la seconda.

Se Fred Jones fosse avvisato ogni volta che qualcuno tentava di accedere con una prima credenziale errata, un malintenzionato potrebbe facilmente inondare il signor Jones con così tante notifiche che diventerebbero inutili, indipendentemente dal fatto che l'autore dell'attacco abbia o meno una reale probabilità di ottenere l'accesso. Notificare al signor Jones se qualcuno immette la prima password corretta ma non riesce a inserire una seconda password corretta, tuttavia, sarebbe molto più utile. A meno che il signor Jones non fosse la persona che stava tentando di accedere all'account, tale notifica servirebbe come avvertimento molto tempestivo e utile che la password principale è stata violata ed entrambe le password dovrebbero essere cambiate al più presto.

Jeffrey Goldberg
2019-03-01 04:53:03 UTC
view on stackexchange narkive permalink

Indipendentemente dai dettagli dell'hashing o da meccanismi di cracking plausibili, il nocciolo della questione è che lo sforzo necessario per decifrare password a due n bit non è di 2n bit. È n + 1 bit.

Supponi quindi che le tue password di otto caratteri, P1 e P2 , abbiano ciascuna, diciamo, un'intensità equivalente a 30 bit. (Non importa, sto solo cercando di scegliere un numero per essere concreto. Quindi ci vogliono 30 bit di sforzo [Vedi nota] per decifrarli. Per decifrarli entrambi, non ci vogliono 60 bit. Invece ci vogliono 31 bit) un po 'di sforzo.

Ora supponiamo di prendere P1 e aggiungere semplicemente una cifra scelta in modo uniforme (tiri un D10) e incollarla alla fine. Quindi il tuo P1 aumentato impiegherà circa 33,3 bit di sforzo per decifrare. Questo è più di quattro volte più faticoso che cercare sia P1 che P2.

Se scegli una singola lettera o cifra minuscola (quindi 36 possibilità) a caso da aggiungere alla fine di P1, allora questa nuova password è più forte di 5 bit, e quindi ci vorranno 16 volte più tentativi per decifrarlo rispetto a quello per decifrare entrambi P1 e P2.

Vault di sicurezza più elevati?

Lavoro per 1Password, un gestore di password e riceviamo richieste di vault all'interno dei vault. Questa è una password principale per sbloccare generalmente 1Password e quindi una seconda password per sbloccare alcuni dati di sicurezza più elevati. Abbiamo rifiutato queste richieste per i motivi che io (e altri qui) abbiamo sottolineato.

Il risultato sopra descritto è controintuitivo è controintuitivo. Le persone percepiranno l'utilizzo sia di P1 che di P2 come più sicuro di un aumento leggermente più lungo di P1 . Consideriamo anche la scelta di una password principale da parte di una persona come il punto più debole della sua sicurezza 1Password (diversa dall'esecuzione su una macchina compromessa) e quindi non vogliamo introdurre elementi che potrebbero incoraggiare le persone a utilizzare password principali più deboli di quanto farebbero altrimenti . Vorremmo anche che le persone ottenessero la massima sicurezza per lo sforzo, e fare e ricordare una piccola aggiunta a una password principale è meno faticoso che creare e ricordare un'altra password.


Note:

"bit di sforzo": n bit di sforzo significa approssimativamente che occorrono in media 2 ^ ( n -1) tentativi per trovare la password corretta.

Se li decifri in modo indipendente o seriale, questo ha senso.Ma che dire del caso in cui devono essere inseriti / inviati insieme, con una sola risposta pass / fail?In tal caso sembra che * sarebbe * equivalente a una password di lunghezza 2n, no?


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 4.0 con cui è distribuito.
Loading...