Domanda

Devo generare alcune password, voglio evitare caratteri che possano essere confusi tra loro.Esiste un elenco definitivo di personaggi che dovrei evitare?la mia lista attuale è

il10o8B3Evu![]{}

Ci sono altre coppie di caratteri facili da confondere?per i caratteri speciali mi sarei limitato a quelli sotto i tasti numerici, anche se so che questo varia a seconda della nazionalità della tastiera!

Come domanda pilota, vorrei che le mie password fossero "simili a parole". Hai un algoritmo preferito per questo?

Grazie :)

È stato utile?

Soluzione

Ecco i set di caratteri che Steve Gibson utilizza per i suoi "Password cartacea perfetta" sistema.Sono "personaggi da consentire" piuttosto che "personaggi da evitare", ma sembrano abbastanza ragionevoli per quello che vuoi:

Un set standard di 64 caratteri

!#%+23456789:=?@ABCDEFGHJKLMNPRS
TUVWXYZabcdefghijkmnopqrstuvwxyz

Un set più ampio di 88 caratteri

!"#$%&'()*+,-./23456789:;<=>?@ABCDEFGHJKLMNO
PRSTUVWXYZ[\]^_abcdefghijkmnopqrstuvwxyz{|}~

Per le password pronunciabili, non ho familiarità con gli algoritmi ma potresti voler dare un'occhiata APG E pwgen come punto di partenza.

Altri suggerimenti

Il mio metodo preferito è ottenere un elenco di parole di 3, 4 e 5 lettere.Quindi selezionane almeno 2 e inserisci un numero casuale di 2 cifre o un simbolo speciale (%&*@#$) tra ogni parola.Se lo desideri, puoi scrivere in maiuscolo fino a un carattere per parola in modo casuale.

A seconda dei tuoi requisiti di robustezza, ti ritroverai con password facili da ricordare e comunicare come:

  • scrivania%limone
  • carta&ragazzo32cappello

Tieni presente che occasionalmente potresti ottenere combinazioni di parole interessanti o inappropriate (ti lascerò usare la tua immaginazione).Di solito ho un pulsante che consente la generazione di una nuova password se quella presentata non piace.

Di norma, utilizza solo simboli di cui le persone comunemente conoscono il nome.Su una tastiera standard americana eviterei ~`'/\^

Immagino che questo abbia risposto più alla tua domanda sul pilota che alla tua domanda principale...

Buona fortuna!

Leggere Scelta delle password sicure.

Da lì una notizia interessante:Per password più sicure, assicurati che alcuni numeri e caratteri speciali appaiano al centro.I programmi di cracking li controllano all'inizio e finiscono prima.

Per aggiungere qualcosa alla risposta di Jim potresti anche usare l'elenco delle parole e sostituire casualmente alcuni caratteri con simboli (una @ per una A, uno 0 (zero) per una O o un 5 per una S) e/o rimuovere le vocali dalle parole .

  • lmn%Scrivania
  • p@per&b0y32H@t

Ancora per lo più leggibile dall'uomo.

Come altra opzione, potresti utilizzare un carattere a spaziatura fissa/terminale come il corriere per stampare le password.I personaggi simili dovrebbero essere molto più distinguibili in questo modo.

Diversi anni fa, per un cliente internazionale, ho dovuto generare password casuali e sicure che venivano poi unite in documenti dal mio cliente e inviate tramite posta ordinaria a destinatari in 40 paesi.Non sapendo quale carattere tipografico dovesse essere utilizzato nei documenti, ho utilizzato un elenco di caratteri come Steve Gibson 64 caratteri impostato per eliminare la confusione tra glifi simili.

Per rendere le password risultanti pronunciabili e quindi più facili da ricordare, ho abbinato insieme consonanti e vocali, aggiungendo al mix alcuni digrafi consonantici (sh, th, wh, ecc.).

Per ridurre le possibilità che vengano generate parole inappropriate o offensive (in inglese o nelle lingue dei destinatari), ho limitato a due serie di caratteri alfabetici consecutivi, con numeri o caratteri di punteggiatura tra:

Es4tU$sA6
wH@cY8Go2

Ripensando adesso al mio metodo, mi rendo conto che c'era margine di miglioramento nell'algoritmo di inappropriatezza.Utilizzando le regole di cui sopra, alcune parole offensive sono possibili ora che alcuni numeri e segni di punteggiatura sono sostituiti alle lettere.

Per le password leggibili, recentemente ho utilizzato uno script PHP molto simile a quello seguente.Ha funzionato bene.Certo, le password non saranno incredibilmente sicure (poiché sono soggette ad attacchi con dizionario), ma per le password memorizzabili, o almeno leggibili, funziona bene.Tuttavia, questa funzione non dovrebbe essere utilizzata così com'è, è più a scopo illustrativo che altro.

function generatePassword($syllables = 2, $use_prefix = true)
{

    // Define function unless it is already exists
    if (!function_exists('arr'))
    {
        // This function returns random array element
        function arr(&$arr)
        {
            return $arr[rand(0, sizeof($arr)-1)];
        }
    }

    // Random prefixes
    $prefix = array('aero', 'anti', 'auto', 'bi', 'bio',
                    'cine', 'deca', 'demo', 'dyna', 'eco',
                    'ergo', 'geo', 'gyno', 'hypo', 'kilo',
                    'mega', 'tera', 'mini', 'nano', 'duo',
                    'an', 'arch', 'auto', 'be', 'co',
                    'counter', 'de', 'dis', 'ex', 'fore',
                    'in', 'infra', 'inter', 'mal', 
                    'mis', 'neo', 'non', 'out', 'pan',
                    'post', 'pre', 'pseudo', 'semi',
                    'super', 'trans', 'twi', 'vice');

    // Random suffixes
    $suffix = array('dom', 'ity', 'ment', 'sion', 'ness',
                    'ence', 'er', 'ist', 'tion', 'or',
                    'ance', 'ive', 'en', 'ic', 'al',
                    'able', 'y', 'ous', 'ful', 'less',
                    'ise', 'ize', 'ate', 'ify', 'fy', 'ly'); 

    // Vowel sounds 
    $vowels = array('a', 'o', 'e', 'i', 'y', 'u', 'ou', 'oo', 'ae', 'ea', 'ie'); 

    // Consonants 
    $consonants = array('w', 'r', 't', 'p', 's', 'd', 'f', 'g', 'h', 'j', 
                        'k', 'l', 'z', 'x', 'c', 'v', 'b', 'n', 'm', 'qu');

    $password = $use_prefix?arr($prefix):'';
    $password_suffix = arr($suffix);

    for($i=0; $i<$syllables; $i++)
    {
        // selecting random consonant
        $doubles = array('n', 'm', 't', 's');
        $c = arr($consonants);
        if (in_array($c, $doubles)&&($i!=0)) { // maybe double it
            if (rand(0, 2) == 1) // 33% probability
                $c .= $c;
        }
        $password .= $c;
        //

        // selecting random vowel
        $password .= arr($vowels);

        if ($i == $syllables - 1) // if suffix begin with vovel
            if (in_array($password_suffix[0], $vowels)) // add one more consonant 
                $password .= arr($consonants);

    }

    // selecting random suffix
    $password .= $password_suffix;

    return $password;
}

Nella mia scuola di specializzazione (ingegneria elettrica, tecnologia), tutti gli account dei computer erano inizializzati con password che, presumo, erano generate da un'utilità Linux standard.Consistevano di tre sillabe casuali, con tre lettere minuscole in ciascuna sillaba.Il risultato era ragionevolmente sicuro (nell'ordine di miliardi di combinazioni possibili) ma così pronunciabile che uso ancora alcune di quelle password più di dieci anni dopo.L'esempio di James ne è un'eccellente dimostrazione.

Un commento sulle password in generale, da parte di un professionista della sicurezza di rete:sono terribili, per diversi motivi, tra cui:

  • Generalmente facilmente risolvibili, tramite ingegneria sociale o software di attacco, soprattutto se si è a conoscenza nulla sul tuo obiettivo.

    Esempio 1: Recentemente ho avuto bisogno di revisionare un documento tecnico protetto da password.Guardando la data, sapevo chi era il nostro scrittore tecnico residente in quel momento, ho digitato la prima parola che mi è venuta in mente e ho immediatamente sbloccato il documento.

    Esempio 2: I programmi standard di cracking delle password consentono al cracker di specificare una serie di regole che operano su un dizionario fornito dall'utente.È banale sostituire certe lettere con $ymb01$, o tradurle in 1337, ecc.

  • Le password "sicure" non lo sono.Dato l'enorme numero di password che la maggior parte delle persone deve ricordare, il modo più comune per "ricordare" una password "forte" come "a4$N!8_q" è scriverla su un pezzo di carta (o, peggio, memorizzarla in un file di testo).Basta con quello che ho detto.

Se ne hai davvero bisogno sicuro autenticazione, multifattoriale (O due fattori) è il meccanismo accettato dal settore.I "due fattori" di solito sono qualcosa che tu Avere (come una carta di accesso) e qualcosa che tu Sapere che lo abilita (come un PIN).Nessuno dei due funziona senza l'altro: hai bisogno di entrambi.

D’altra parte, considera il livello di sicurezza di cui hai veramente bisogno.Cosa stai proteggendo?Quanto vogliono i "cattivi" ottenerlo, e quali sarebbero le conseguenze se lo facessero?È probabile che "è@segreto!" è più che abbastanza buono.:-)

Non amo l'approccio delle liste di parole.Ad esempio, in /usr/share/dict/words su OSX, ci sono 5110 parole di 4 caratteri.Usarne due con un carattere separatore produce circa 600 milioni di combinazioni.Ma se utilizzassi il set di caratteri direttamente con un potente generatore di numeri casuali, avresti 88 ^ 9 password possibili, 3.16e+17 combinazioni.

In ogni caso, il probabile attacco contro questo sistema sarà contro il generatore di numeri casuali, quindi assicurati di utilizzarne uno crittograficamente potente.Se si utilizza la funzione rand standard di PHP, verrà attaccato registrando e reimpostando migliaia di password per campionare lo stato RNG e quindi prevedere lo stato RNG rimanente, riducendo così il numero di possibili password che un utente malintenzionato deve testare.

Un approccio iniziale potrebbe essere quello di generare sillabe inglesi per lo più valide, mescolarle, quindi inserire una conversione text->l33t.È stato svolto del lavoro sulle grammatiche generazionali del linguaggio naturale, quindi uno di questi potrebbe essere d'aiuto.

Per esempio.ah ul ing sono tutte sillabe valide o vicine ad essa...mescolali -> Ingulah...l33t it -> 1ngu4h.È il migliore là fuori?No.Ma almeno è semipronunciabile (se parli l33t) e più sicuro dal punto di vista computazionale.

Se sei interessato a generare password pronunciabili, è disponibile una porta C# all'indirizzo:http://www.hoogervorst.ca/arthur/?attachment_id=1708

All'interno del codice troverai collegamenti utili per saperne di più.http://www.multicians.org/thvv/gpw.html

Buona fortuna.Giacomo

function random_readable_pwd($length=12){
    // special characters
    $sym="!\"§$%&/()={[]}\,.-_:;@>|";

    // read words from text file to array
    $filename="special.txt";
    if (!file_exists($filename)) { die('File "'.$filename.'" is not exists!'); }
    $lines = file($filename);
    foreach ($lines as $line_num => $line) {
        $line=substr($line, 0, -2);
        $words[].=$line;
    }

    // Add words while password is smaller than the given length
    $pwd = '';
    $ran_date=date("s");
    while (strlen($pwd) < $length){
        $r = mt_rand(0, count($words)-1);
        // randomly upercare word but not all in one time
        if ($ran_date % 3 == 0) $words[$r]=ucwords($words[$r]);
        $pwd .= $words[$r];
        //randomly add symbol
        if ($ran_date % 2 == 0) $pwd .= $sym{mt_rand(0,strlen($sym))};
        $ran_date++;
    }

    // append a number at the end if length > 2 and
    // reduce the password size to $length
    $num = mt_rand(1, 99);
    if ($length > 2){
        $pwd = substr($pwd,0,$length-strlen($num)).$num;
    } else { 
        $pwd = substr($pwd, 0, $length);
    }

    return $pwd;

}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top