Uso di pwgen con sha1 per creare password ricreabili

1

Sto usando il pwgen di Theodore T'so (su linux / ubuntu) con la sua funzione sha1 (-H) per generare password che dovrei essere in grado di ricreare in seguito usando lo stesso file e seme.

Ho brevemente cercato di vedere quali alternative potrebbero esserci se questa particolare app (pwgen in unix) non è disponibile per me in qualsiasi momento. Questa è una considerazione valida? Esiste un'applicazione alternativa che mi consenta di ricreare la stessa password (dato lo stesso file e seed, ovviamente)?

Anche se questo potrebbe essere in qualche modo una domanda di disponibilità dell'app unix / ubuntu, voglio sentire dalla gente della sicurezza i pro ei contro di questo approccio, quindi questa domanda su questo forum.

    
posta Å Stuart 29.01.2014 - 18:07
fonte

2 risposte

2

Dipende tutto dal contesto, che non si specifica. Vuoi essere in grado di ricreare le password per qualche motivo; a seconda di questo motivo, l'impossibilità di farlo senza una macchina Linux può essere o non essere un problema. In ogni caso, il file README punta su alcune porte ad altri sistemi, ad es. per Windows ; inoltre, è probabile che l'originale "per Unix" pwgen possa essere compilato ed eseguito senza alcuna modifica su una macchina Windows con l'aiuto di cygwin . E hai sempre la possibilità di eseguire una VM (ad es. Con Virtualbox ), installare un sistema minimale simile a Unix ed eseguire pwgen su quello.

Quando crei le password in modo deterministico da un file e un seme (questo è l'opzione -H con pwgen ), le password risultanti non sono più forti che il file e il seme sono segreti. In genere si utilizza il nome del server di destinazione come seed e il file come segreto (in questo modo è possibile ricavare più password per molti siti da un file master segreto); se riesci a mantenere segreto un file, potresti essere in grado di mantenere un file di testo segreto. Quel file di testo contiene semplicemente le tue password finora, aggiunto con un editor di testo. Questo potrebbe essere un modello più semplice e astrae tutte le considerazioni sulla portabilità di un'applicazione specifica su varie piattaforme.

    
risposta data 29.01.2014 - 21:33
fonte
2

L'implementazione di ogni opzione supportata da pwgen è un po 'di lavoro. Ma puoi iniziare a simulare il comportamento di

pwgen -s -H asd -y

con un semplice script bash come questo

#!/bin/bash
pw_digits="0123456789";
pw_uppers="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
pw_lowers="abcdefghijklmnopqrstuvwxyz";
pw_symbols="!\"#$%&'()*+,-./:;<=>?@[\]^_\'{|}~";
pw_ambiguous="B8G6I1l0OQDS5Z2";
pw_vowels="01aeiouyAEIOUY";

len="${1:-8}"
seed="${2:-pwgen}"
roundseed="$seed"
numpws=160

cset="${pw_digits}${pw_uppers}${pw_lowers}${pw_symbols}"
sum=""
rands=()

typeset -i idx

function reinit()
{
    sum="$( (dd if=asd bs=1 count=1024 2> /dev/null ; echo -n "$roundseed") | sha1sum | sed "s/ .*$//")"
    roundseed="$roundseed$seed"
    idx=0
    rands=($(echo $sum | sed "s/../0x& /g"))
}

reinit

for ((numpw = 0; numpw < "$numpws"; numpw++)) ; do
    valid=0
    while [[ $valid -eq 0 ]] ; do
        pw=""
        for ((char = 0; char < "$len"; char++)) ; do
            if [[ $idx -ge ${#rands[@]} ]] ; then
                reinit
            fi
            typeset -i randidx
            randidx=${rands[$idx]}
            randidx=$(( $randidx * ${#cset} / 256 ))
            pw="$pw${cset:$randidx:1}"
            idx=$(($idx+1))
        done
        if [[ "$pw" =~ [A-Z] ]] && [[ "$pw" =~ [0-9] ]] ; then
            for ((ckp = 0; ckp < ${#pw}; ckp++)) ; do
                for ((cks = 0; cks < ${#pw_symbols}; cks++)) ; do
                    [[ "${pw_symbols:$cks:1}" = "${pw:$ckp:1}" ]] && valid=1
                done
            done
        fi
    done
    echo -n "$pw "
    [[ $(($numpw % 8)) -eq 7 ]] && echo
done
[[ $(($numpw % 8)) -eq 0 ]] || echo

Naturalmente questo è modo più lento di quello in C ...

Puoi indicare il numero di caratteri per password come primo parametro e il seme come secondo parametro.

    
risposta data 29.01.2014 - 21:44
fonte

Leggi altre domande sui tag