Le password con combinazione di codifiche diverse sono super sicure?

3

Stavo pensando di generare password con combinazione di inglese, arabo, cinese charac. Questo passaggio è abbastanza sicuro contro gli attacchi di forza bruta?

    
posta ALH 30.03.2012 - 04:15
fonte

5 risposte

4

Selezionare i caratteri da un set di caratteri più grande dovrebbe aumentare la sicurezza; se utilizzi un carattere raro come ♥ o ಠ nella tua password che una forza bruta non sta cercando di verificare, potresti avere aumentato notevolmente la sicurezza.

Tuttavia, a seconda dell'implementazione dell'applicazione che riceve la password, questo può anche ridurre notevolmente la sicurezza. Le password digitate dagli utenti sono input utente non attendibili e rappresentano un potenziale vettore di attacco (ad esempio, l'injection SQL e le codifiche unicode possono essere sfruttate per questi tipi di attacchi ). Inoltre alcune funzioni di hashing possono prevedere un semplice input ASCII.

Quindi un'applicazione può rendere l'input dell'utente passare attraverso una rigorosa procedura di sanitizzazione prima di essere comparato / memorizzato nel database; che può fuori dal pipare solo rimuovere caratteri non ascii (o fare una semplice traduzione come ȃ a a ). Questo potrebbe rendere una password rara come Pȃssw0rd diventare Password che sarebbe banale alla forza bruta. L'anno scorso, un amico mi ha detto di aver ricevuto la sua password da una delle quattro grandi compagnie di telefoni cellulari (apparentemente archiviate in chiaro) e ha scoperto che tutti i caratteri speciali nella sua password sono stati rimossi in silenzio.

Potrebbe anche essere molto più difficile usare quella password in diversi ambienti informatici come dispositivi mobili / sistemi operativi che cambiano / diverse codifiche (UTF-7, UTF-8, UTF-16, ISO-8859-1, ecc.)

In generale, è meglio usare per aumentare la lunghezza della tua password piuttosto che aumentare la dimensione del tuo set di caratteri. Supponiamo che tu scelga i personaggi a caso da un set di 100 caratteri e scegli 8 caratteri a caso. Lo spazio della password è 100 8 = 10 16 . Diciamo che invece usi spesso due set di caratteri (e l'hacker lo sa - per esempio, è consapevole che parli / digiti frequentemente e probabilmente mescolerai i simboli arabi unicode nella tua password) e scegli i caratteri a caso da questo set di 200 caratteri. Ora una password casuale di 8 caratteri da un set di 200 caratteri ha uno spazio di password di 200 8 = 2.56 x 10 18 che è 2 ^ 8 = 256 volte più difficile alla forza bruta della password di 8 caratteri da un set di 100 caratteri. O in altri termini una password di 10 caratteri da 100 caratteri è più strong di una password di 8 caratteri da un set di 200 caratteri; e poiché i caratteri Unicode sono spesso più difficili da digitare / ricordare, potrebbe essere più semplice aumentare la lunghezza della password. (Se un utente malintenzionato non guarda mai caratteri non unicode, non sarà mai in grado di decifrare una password di solo , ma non mi fiderei di nulla di prezioso sull'attaccante che non pensa al mio schema di generazione di password - - Voglio utilizzare la casualità per dimostrare il mio vantaggio, soprattutto dal momento che alcuni servizi potrebbero non hash le tue password e se il tuo schema ha guadagnato popolarità (o qualcuno dice di usarlo una volta), gli hacker inizieranno ad esplorare questo spazio.)

EDIT: alcune dimostrazioni di hashing di Python con unicode:

>>> import hashlib   
>>> heart = u'\u2665' 
# proper way to deal with unicode strings in python the u before the quote
# indicates its a unicode string
# type in unicode hex-code following a \u prefix
>>> print heart
♥
>>> hashlib.sha256(heart).hexdigest()
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2665' in position 0: ordinal not in range(128)
>>> heart.encode('utf-8')
'\xe2\x99\xa5' # This is three byte string (with numbers 226, 153, 165; note ascii only goes to 127).
>>> hashlib.sha256(heart.encode('utf-8')).hexdigest() 
'7c546e1819d9562a67643820b4305c3892fd9a151628e447c8e8dae162fe8f57'
>>> hashlib.sha256('\xe2\x99\xa5').hexdigest()
'7c546e1819d9562a67643820b4305c3892fd9a151628e447c8e8dae162fe8f57'
>>> hashlib.sha256('♥').hexdigest() # pasting unicode string
'7c546e1819d9562a67643820b4305c3892fd9a151628e447c8e8dae162fe8f57'
>>> heart.encode('utf-7')
'+JmU-'
>>> hashlib.sha256(heart.encode('utf-7')).hexdigest()
'ba9f8a819e396044912635e9f76f8ff66464d8677e94dd079d2abd8e9bb27b29'
    
risposta data 30.03.2012 - 06:56
fonte
4

Se la lunghezza della password non viene ridotta, direi che sarà più difficile da decifrare, anche se non lo chiamerei "super sicuro". Prendiamo ad esempio una password ASCII di 16 caratteri: ci sono% di possibilità di(2^7)^16 = 2^112 per tale password (anche chiamata 112 bit di entropia, supponendo che tutti i 128 caratteri siano ugualmente probabili in una password "casuale"). Ad esempio, una password Unicode di 7 caratteri codificata in UTF-16 (che copre l'intero set) avrebbe circa% possibilità di(2^16)^7 = 2^112 - la stessa forza di prima.

Per questo motivo, solo aumentando la lunghezza della password offrirà la stessa protezione contro gli attacchi di forza bruta. Con il vantaggio che la password sarà più facile da digitare e non causerà problemi se immessa in sistemi con codifiche e metodi di input differenti.

Vorrei aggiungere, tuttavia, che per mantenere le password le password devono essere veramente casuali . Esistono altri tipi di attacchi (come gli attacchi dizionario, le tabelle arcobaleno, ecc.) Che sfruttano le diverse probabilità nella distribuzione dei caratteri in una password. Dal momento che, con la tua domanda, sembra che tu generi queste password, penso che puoi fare bene senza usare set di caratteri diversi.

    
risposta data 30.03.2012 - 05:05
fonte
2

Sebbene la creazione di una password più lunga sia generalmente la soluzione migliore, è piuttosto efficace mescolare i caratteri di lingue diverse. Esecuzione di un attacco di forza bruta usando solo lettere maiuscole e minuscole, numeri e simboli di punteggiatura già introduce un gran numero di possibilità (supponendo che tu abbia una password di lunghezza decente) e l'introduzione di una nuova lingua renderà possibile lo spazio delle chiavi crescere astronomicamente.

Detto questo, se stai inserendo questi caratteri usando una tastiera inglese, probabilmente dovrai tenere premuto ALT e digitare una sequenza di numeri 3-4. Matematicamente, per il numero di tasti che stai digitando potresti anche aggiungere 4-5 caratteri alla lunghezza della tua password.

Inoltre, pochissimi sistemi consentono effettivamente di inserire qualcosa oltre le lettere e i numeri standard. E se ci sono delle discrepanze di codifica nel processo, il personaggio potrebbe finire per essere normalizzato comunque con un carattere ASCII standard. Questo è avvenuto a lungo con il login GINA di Windows ( anche se questo ha creato una situazione interessante in cui è possibile creare una password in modo programmatico per un account che non può mai essere utilizzato per accedere tramite la console ).

Quindi la risposta è sì è una grande tecnica, ma per il numero di sequenze di tasti e per evitare problemi di compatibilità, si potrebbe anche solo rendere la password più lunga.

    
risposta data 30.03.2012 - 07:10
fonte
0

Di regola, gli attacchi a forza bruta seguono una sorta di dizionario. Se la password non è nel dizionario che usano, allora non sarà indovinato. Se qualcuno crea un dizionario che include la tua password, allora sarà indovinato. Questo è praticamente tutto quello che c'è da fare.

    
risposta data 30.03.2012 - 05:09
fonte
-3

Dizionari dinamici mirati e amp; arcobaleno-tabelle.

Cluster distribuiti di GPU che incrinano trilioni di password al secondo (ed è proprio quello che puoi acquistare casualmente da Amazon o, costruisci te stesso)

Entrare nei super-computer, super-FPGA e Quantum Qubit che lo compongono diventa ancora più spaventoso, e più spigoloso.

Il fattore 2 sembra essere l'unico modo per andare se sei veramente serio riguardo alla tua sicurezza dei dati. (anche allora il suo teatro di sicurezza ancora) Chissà cosa "logicamente" rotto, e cosa è stato rotto di proposito apposta.

: - \

    
risposta data 30.03.2012 - 06:00
fonte

Leggi altre domande sui tag