Perché limitare le password ai caratteri ascii stampabili? [duplicare]

13

Ogni articolo sulla sicurezza delle password che leggo dice alle persone di rendere la password più complicata utilizzando una gamma più ampia di caratteri. Dicono che non usare solo a-z ma anche mescolare in alcuni A-Z, numeri 0-9 e qualche segno di punteggiatura. Praticamente usa tutti i caratteri sulla tastiera. Tuttavia, sto costruendo siti web progettati per un pubblico non di lingua inglese. Utenti specificamente cinesi. Ho notato che molti siti Web cinesi richiedono anche la creazione di password utilizzando lo stesso set di caratteri. Mi rimane un enigma sul perché limitare solo al set ASCII core. Perché non utilizzare caratteri cinesi o caratteri di altri script?

Ad esempio, invece di usare "! 0 *% y6 #! 7N @ 6" l'utente può usare "胜 0 屿% y6 #! 7N 景 6", che è della stessa lunghezza ma significativamente più complesso.

La mia applicazione è costruita in UTF-8 ed è compatibile con script cinesi e altri complessi. Quindi non c'è alcun problema di programmazione per consentire caratteri complessi nelle password.

Estendendo il possibile set di caratteri delle password per includere caratteri cinesi, giapponesi, coreani, arabi, posso aumentare l'entropia delle password a livelli incredibilmente alti senza rendere la password più lunga o più difficile da ricordare. In effetti, potrebbe essere più facile per i miei utenti cinesi ricordare una password cinese piuttosto che una lingua inglese. Sarebbe molto improbabile che qualcuno possa usare la forza bruta o usare un tavolo arcobaleno per decifrare la password.

Riesco a capire i limiti del set di caratteri per gli utenti occidentali in cui i caratteri utilizzati sono tutti quelli su una tastiera ed è piuttosto difficile inserire un carattere che non sia sulla tastiera. Tuttavia, gli utenti cinesi devono utilizzare strumenti sul loro sistema per inserire il set completo di caratteri cinesi, quindi non c'è alcun problema per loro lì.

Quindi poniamo la domanda in breve. C'è qualche problema di sicurezza nel permettere agli utenti di creare password da caratteri oltre la normale tastiera?

Per espandere e rispondere al punto di AviD di seguito:

Quando viene immessa una password, essa non rimane come caratteri ma viene invece convertita in una sequenza di bit. Questi bit sono la vera password. Il processo di conversione dei caratteri in bit è la codifica dei caratteri. ASCII è una di queste codifiche, anche se ora piuttosto vecchia e di dimensioni limitate. Un altro comune è Unicode che si è evoluto nella codifica UTF-8 che la maggior parte dei siti Web è consigliabile utilizzare oggi.

Unicode e UTF-8 sono retrocompatibili con ASCII, quindi qualsiasi password basata su ASCII sarebbe la stessa in bit, indipendentemente dalla codifica utilizzata quando è stata immessa la password. Tuttavia ci sono alcune forme di codifica che sono ancora popolari che non sono compatibili con ascii molti che non sono compatibili con Unicode o UTF-8. Questi includono sistemi di codifica come Big5 (usati a Tiawan e Hong Kong) e GB usati nella Cina continentale.

Se qualcuno immette la password in un computer un giorno in una codifica e in un altro giorno in un'altra codifica, la sequenza di bit viene inviata con la password diversa.

È possibile rilevare il sistema di codifica e convertire sul lato server. Le mie applicazioni lo fanno già, convertendo tutto ciò che è stato inserito in UTF-8. Tuttavia, mi chiedo quanto sia perfetta questa conversione. Big5 convertito in UTF-8 darebbe lo stesso risultato di GB convertito in UTF-8?

Inoltre, ci sono alcuni attacchi XSS basati sulla codifica dei caratteri che usano la codifica e la gestione dei caratteri sciatti come vettore. Una cosa simile potrebbe essere utile per compromettere le password degli utenti o la mia applicazione in cui non sono presenti, o pochissimi, limiti su quali caratteri possono essere imputati?

    
posta Rincewind42 27.07.2011 - 07:28
fonte

2 risposte

12

Da un punto di vista della sicurezza, è auspicabile avere un enorme set di caratteri per scegliere i personaggi, proprio come hai detto tu. Il motivo per cui alcuni siti incoraggiano gli utenti ad attenersi ad ASCII è per motivi tecnici e organizzativi:

Se il software è stato scritto senza Unicode in mente o usando un ambiente che non rende unicode totalmente trasparente (come PHP, vecchie versioni di MySQL, ecc.), richiede una quantità significativa di lavoro per aggiungere il supporto Unicode.

Inoltre, se il software non è destinato al mercato asiatico, la società in via di sviluppo potrebbe non interessarsene . Potrebbe non avere esperienza e conoscenza per testare quei charset. Pensa di risolvere i caratteri combinati, i caratteri che sembrano esattamente uguali ma hanno codici diversi, ecc.

Ciò potrebbe causare richieste di assistenza che devono essere gestite e quindi comportare costi.

tl; dr: se il tuo software è in grado di gestire correttamente Unicode e puoi gestire le richieste di supporto, vai all'intero intervallo.

    
risposta data 27.07.2011 - 08:49
fonte
3

Il solito motivo citato per attaccare un insieme standardizzato di caratteri è più incentrato sull'usabilità, sia dal punto di vista dell'utente, sia dal punto di vista dell'helpdesk.

Dal punto di vista della sicurezza, l'aggiunta di più set di caratteri aumenta lo spazio dei caratteri che un utente malintenzionato dovrebbe cercare, quindi rende più difficile l'attacco di forza bruta e riduce la probabilità che esista una tabella arcobaleno adatta al tuo sistema.

    
risposta data 27.07.2011 - 08:33
fonte

Leggi altre domande sui tag