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?