Uso de pwgen con sha1 para crear contraseñas recreables

1

Estoy considerando usar pwgen de Theodore T'so (en linux / ubuntu) con su función sha1 (-H) para generar contraseñas que debería poder recrear más tarde usando el mismo archivo y semilla.

Miré brevemente para ver qué alternativas podría haber si esta aplicación en particular (pwgen en Unix) no estuviera disponible para mí en algún momento. ¿Es esta una consideración válida? ¿Hay alguna aplicación alternativa que me permita volver a crear la misma contraseña (dado el mismo archivo y semilla, por supuesto)?

Si bien esto podría ser, hasta cierto punto, una pregunta sobre la disponibilidad de la aplicación unix / ubuntu, quiero escuchar a la gente de seguridad sobre las ventajas y desventajas de este enfoque, de ahí esta pregunta en este foro.

    
pregunta Å Stuart 29.01.2014 - 18:07
fuente

2 respuestas

2

Todo depende del contexto, que no especifique. Desea poder recrear las contraseñas por alguna razón; Dependiendo de esa razón, la incapacidad de hacerlo sin una máquina con Linux a la mano puede o no ser un problema. En cualquier caso, el archivo README apunta a algunos puertos a otros sistemas, por ejemplo. para Windows ; además, es probable que el pwgen original "para Unix" pueda compilarse y ejecutarse sin ningún cambio en una máquina Windows con la ayuda de cygwin . Y siempre tiene la opción de ejecutar una máquina virtual (por ejemplo, con Virtualbox ), instalar un sistema similar a Unix como mínimo y ejecutar pwgen en eso.

Cuando crea contraseñas de forma determinista a partir de un archivo y semilla (eso es lo que hace la opción -H con pwgen ), entonces las contraseñas resultantes no son más seguras Que el archivo y la semilla son secretos. Por lo general, usaría el nombre del servidor de destino como semilla y el archivo como secreto (de esa manera, puede derivar varias contraseñas para muchos sitios, de un archivo secreto principal); si puede mantener un archivo en secreto, puede mantener un archivo de texto en secreto. Ese archivo de texto simplemente contendría sus contraseñas hasta el momento, agregadas con un editor de texto. Este podría ser un modelo más simple y abstrae todas las consideraciones sobre la portabilidad de una aplicación específica a varias plataformas.

    
respondido por el Tom Leek 29.01.2014 - 21:33
fuente
2

Implementar cada opción que pwgen admite es un poco de trabajo. Pero puedes comenzar a simular el comportamiento de

pwgen -s -H asd -y

con un script bash simple como este

#!/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

Por supuesto, esto es mucho más lento que en C ...

Puede dar el número de caracteres por contraseña como primer parámetro y la semilla como segundo parámetro.

    
respondido por el fr00tyl00p 29.01.2014 - 21:44
fuente

Lea otras preguntas en las etiquetas