Hay muchos generadores de contraseñas, pero como en muchos casos son preferibles las frases de contraseña generadas aleatoriamente de manera uniforme , estoy buscando específicamente un generador de frases de contraseña aleatorias y seguras . Me gustaría poder usarlo fuera de línea (por razones de seguridad) bajo Linux.
Debería:
Y opcionalmente, sería bueno si pudiera:
También quería un generador de palabras aleatorias para crear contraseñas y no pude encontrar nada, así que creé Ipsum . Es un script bash (destinado a ser utilizado desde la terminal). Ipsum cumple estos criterios:
/dev/urandom
aparentemente es un 'PRNG criptográfico 'Aquí hay algunos ejemplos para ilustrar cómo funciona Ipsum. También es importante saber que al traducir, Ipsum muestra la palabra en inglés debajo de la palabra traducida y no todas las palabras aleatorias se traducirán. Una vez que Ipsum genera una lista de palabras (en el idioma que desee), simplemente elija un subconjunto para usar como contraseña.
Defecto
$ ipsum
unbalanced
Especificar número
$ ipsum 12
tramp
cutoff
scoured
sundowns
indigence
pellagra
offs
heaping
peevishly
judiciary
unmerciful
haul
Idioma alternativo [alemán]
$ ipsum --lang de 5
enormousness
^ enormousness
Tonsuren
^ tonsures
Harfenist
^ harpist
Oligarchie
^ oligarchy
nachlassen
^ letup
Idioma alternativo [japonés]
$ ipsum -l ja 5
再要求
^ reclaims
喫水線
^ waterline
同意しません
^ disagree
皮質
^ cortex
リクルーター
^ recruiter
Bits de entropía
$ ipsum --entropy 4
4 word(s) from 1 language(s) produces 65.36 bits of entropy.
happening
commander
parred
woodland
Esto es un poco largo, pero pensé en proporcionarlo para su placer de navegación. Aquí está la esencia para ello.
#!/bin/bash
function ipsum
{
# Random Word Generator
# Inspired by:
# - https://linuxconfig.org/random-word-generator
# - http://stackoverflow.com/a/14203146/4769802
# - http://www.unix.com/shell-programming-and-scripting/156551-check-whether-string-begin-uppercase-lowercase-digit.html
#
# Depends on:
# - translate-shell: https://github.com/soimort/translate-shell
# - This ^ thing is awesome. Seriously, try it out!
#-----------------------------------------------------------------Constants
X=0
COUNT=1
MAX_INT=16777216
LANGUAGE=false
LANGUAGES="en"
NUM_LANGUAGES=1
ENTROPY=false
ALL_NON_RANDOM_WORDS=/usr/share/dict/words # dictionary file
non_random_words=`cat $ALL_NON_RANDOM_WORDS | wc -l` # total # of words
proper_nouns=`cat $ALL_NON_RANDOM_WORDS | grep [A-Z].* | wc -l` # apprx # of proper nouns
total_options=$((non_random_words - proper_nouns)) # apprx # of options
#-----------------------------------------------------------------Handle Flags w. Params
while [[ $# -gt 1 ]]
do
key="$1"
case $key in
-e|--entropy)
# print the entropy
ENTROPY=true
;;
-l|--lang)
# Get the specifed languages!
LANGUAGE=true
LANGUAGES=(${2//+/ })
NUM_LANGUAGES=${#LANGUAGES[@]}
shift # past argument
;;
--lang-all)
# Use top 10 languages at once!
LANGUAGE=true
LANGUAGES=(zh pt es bn en ru hi ja ar pa)
NUM_LANGUAGES=${#LANGUAGES[@]}
;;
*)
echo "Unrecognized argument: try 'ipsum --help'"
exit
;;
esac
shift # past argument or value
done
#-----------------------------------------------------------------Handle Main Param
if [[ -n $1 ]]; then
case $1 in
-a|--about)
# Give a description of self
echo "Ipsum is a minimalist random word generator"
echo "with several notable features:"
echo " - Off-line: uses local dictionary so"
echo " no internet is needed"
echo " - Languages: can generate non-English words"
echo " - Note: this requires the internet"
echo " - Random: uses '/dev/urandom' which is a CSPRNG"
echo " - Entropy: calculates entropy of requested word combo"
echo ""
exit
;;
-h|--help)
# Show some examples
echo ""
echo "Example Usage: ipsum"
echo " ipsum 12"
echo " ipsum -lang fr 12"
echo " ipsum -l fr 12"
echo " ipsum -l fr+ru 12"
echo " ipsum --entropy 12"
echo " ipsum -e 12"
echo " ipsum -l fr+ru -e 12"
echo ""
echo "Language Options:"
echo " - Found here :: https://github.com/soimort/translate-shell"
echo ""
exit
;;
-i|--info)
# Show information about numbers and such
echo ""
echo "Dictionary Location: $ALL_NON_RANDOM_WORDS"
echo "Dictionary Size: $non_random_words"
echo "Proper Nouns: $proper_nouns"
echo "Usable Words: $total_options"
echo "Default Language: $LANGUAGES"
echo "Possible Languages: 124"
echo " _________________________________ "
echo " | Top Ten Most Common Languages |"
echo " |----------------|----------------|"
echo " | Chinese - zh | Portuguese - pt|"
echo " | Spanish - es | Bengali - bn |"
echo " | English - en | Russian - ru |"
echo " | Hindi - hi | Japanese - ja |"
echo " | Arabic - ar | Punjabi - pa |"
echo " |________________|________________|"
echo ""
exit
;;
[0-9]*)
# It is probably a number, so work normally
COUNT="$1"
;;
*)
echo "Unrecognized argument: try 'ipsum --help'"
exit
;;
esac
fi
#-----------------------------------------------------------------Calculate Entrophy
if [ "$ENTROPY" = true ]; then
# Equation = log_2( #_of_options * #_of_languages ) * #_of_words
log_base_2=`echo "l($total_options*$NUM_LANGUAGES)/l(2)" | bc -l` # log base 2 of options
entropy_bits=`printf "%.*f\n" 2 $log_base_2` # bits of entropy per word
total_entropy=$(echo "$entropy_bits * $COUNT" | bc)
echo "$COUNT word(s) from $NUM_LANGUAGES language(s) produces $total_entropy bits of entropy."
echo ""
fi
#-----------------------------------------------------------------Make $COUNT Random Words
while [[ "$X" -lt "$COUNT" ]]; do
random_number=`echo "$(od -N3 -An -i /dev/urandom)*$non_random_words/$MAX_INT" | bc`
WORD=$(sed `echo $random_number`"q;d" $ALL_NON_RANDOM_WORDS)
# Clean and Format
DEL="'s"
WORD=${WORD%$DEL}
DEL="'"
WORD=${WORD%$DEL}
# Clean out 'funny' words (ie proper nouns)
case ${WORD:0:1} in
[[:lower:]])
# Lowercase indicates a common noun
if [ "$LANGUAGE" = true ]; then # If lang was specified use trans
random_index=`echo "$(od -N3 -An -i /dev/urandom)*$NUM_LANGUAGES/$MAX_INT" | bc`
LANG=${LANGUAGES[random_index]}
trans -b :$LANG $WORD 2> /dev/null
echo " ^ $LANG for $WORD"
else # else just given normal word
echo "$WORD"
fi
let "X = X + 1"
;;
*)
# Don't use whatever $WORD was
;;
esac
done
}
ipsum "$@"
El nombre, Ipsum, proviene de Lorem Ipsum , el nombre del texto de relleno para los elementos gráficos de una presentación visual.
ipsum.sh
, a pesar de que su .sh
extensión actualmente es solo una función de shell, carece de una primera línea #!/bin/bash
y una última línea ipsum "$@"
..sh
extensión para resaltado de sintaxis. Importo mis funciones desde my .bashrc
para que sean fáciles de administrar.ipsum()
es una función que debe cargarse primero, es decir . ipsum.sh ; impsum -h
. Además, corríjame si me equivoco, pero no .bashrc
asigna su propia memoria ambiental para cada instancia de bash
? Si ese es el caso, ejecutar varios shells (en diferentes pestañas de un emulador de terminal GUI) cargaría varias instancias redundantes de ipsum()
.Existen algunos recursos para ayudarlo a generar frases de contraseña aleatorias, aunque es posible que deba realizar algunos pasos adicionales para combinar diccionarios o visualizar la entropía.
Este script bash simple extraerá su directorio /usr/share/dict/words como la población de palabras elegibles. Puede especificar cuántas palabras aleatorias y usar su propio archivo de palabras. http://linuxconfig.org/generador-de-palabras-aleatorias
Eche un vistazo a este script también, que proporciona algunas opciones configurables más fácilmente, como la longitud mínima y máxima de las palabras: http://stackoverflow.org/wiki/Dictionary-based_random_password_generator
Diablos, para obtener más inspiración, consulte esta breve discusión sobre SO sobre cómo escribir un script de este tipo en Python: https://stackoverflow.com/questions/18834636/random-word-generator-python
¡Espero que ayude!
Editar: tenga en cuenta que no estoy versado en los procesos pseudoaleatorios que se pueden usar detrás de escena en Python o Linux, por lo que no puedo comentar sobre posibles vulnerabilidades en ese sentido.
ken herbert
ceroflujo
landroni
ceroflujo
landroni
David