Offline-Passphrase-Generator für Linux

Es gibt viele Passwortgeneratoren, aber da einheitlich zufällig generierte Passphrasen in vielen Fällen vorzuziehen sind , suche ich speziell nach einem Generator für zufällige und sichere Passphrasen . Ich würde es gerne offline (aus Sicherheitsgründen) unter Linux nutzen können.

Es sollte:

  • Generieren Sie die Passphrasen offline
  • unter Linux arbeiten (obwohl plattformübergreifende Lösungen letztendlich bevorzugt werden)
  • Open-Source sein

Und optional wäre es schön, wenn es könnte:

  • in der Lage sein, Wörterbücher aus verschiedenen Sprachen zu verwenden (d. h. sich nicht unbedingt auf Englisch beschränken)
  • (in einer perfekten Welt) in der Lage sein, Wörterbücher zu mischen und Passphrasen zu generieren, die eine Mischung aus Sprachen sind (z. B. Englisch und Deutsch)
  • zeigt die Entropie des generierten Passworts an
Für welches Betriebssystem willst du das?
Ziehen Sie Passphrasen vor, damit Sie sich diese für mehrere Websites merken können? Wenn ja, ist es nicht sinnvoller, sie selbst zu brainstormen? Wenn Sie vorhaben, einen Passwort-Manager für die Passphrasen zu verwenden, wäre es sinnvoller, nur lange zufällig generierte Passwörter zu verwenden. Eine 50-stellige Passphrase ist weniger sicher als ein zufällig generiertes 50-stelliges Passwort. Dieses XKCD vergleicht lange Passphrasen mit kurzen Passwörtern.
@ZeroFlux "Ist es nicht sinnvoller, sie selbst zu brainstormen?" Nicht ganz : "Die Auswahl von Wörtern muss (einheitlich) zufällig sein. Wenn Sie Menschen bitten, Wörter zufällig auszuwählen, erhalten Sie eine starke Neigung zu konkreten Substantiven. Solche Neigungen können und werden ausgenutzt." Mein Interesse ist es, Master-Passwörter zu entwickeln, etwas, das letztendlich brauchbar, aber sicher ist, das ich zum Beispiel verwenden würde, um den Passwort-Manager selbst zu sichern ...
Ah, sorry, ich sehe die Verwirrung. Ich wollte nicht versuchen, im Kopf eine sichere Passphrase zu generieren, sondern mit beliebigen Werkzeugen, die Ihnen einfallen, um die Wörter selbst auszuwählen. Es gibt so viele Ressourcen dafür, dass es ein logischer Ausgangspunkt zu sein schien. Aber Sie haben Ihr Interesse an Passphrasen bestätigt, also werde ich versuchen, eine Antwort einzufügen. creativegames.net/random-word-generator linuxconfig.org/random-word-generator stackoverflow.org/wiki/… stackoverflow.com/questions/18834636/…
@ZeroFlux Letztendlich würde jedes Tool, mit dem eine Auswahl zufälliger Wörter aus einem lokalen Wörterbuch ausgegeben werden kann, für diesen Zweck genauso gut funktionieren, solange der RNG von guter Qualität ist. Leider schließt dies die Verwendung von Websites wie der von Ihnen vorgeschlagenen oder von Online-Passphrase-Generatoren wie diesem aus .
Geschirr ! (+ auf Wikipedia ). Vielleicht nicht genau das, wonach OP sucht, aber .....

Antworten (2)

Ipsum

Ich wollte auch einen Zufallswortgenerator zum Erstellen von Passwörtern und konnte nichts finden, also habe ich Ipsum erstellt . Es ist ein Bash-Skript (das vom Terminal aus verwendet werden soll). Ipsum erfüllt diese Kriterien:

  • Offline : verwendet Wörterbuch, also kein Internet erforderlich
  • Linux : Es ist ein Bash-Skript, also Linux-kompatibel
    • Hinweis: Möglicherweise muss der Speicherort des Wörterbuchs geändert werden
  • Open Source : Der Code ist gemeinfrei
  • Sprachen : Kann zufällige Wörter aus nicht-englischen Sprachen generieren
  • Random : Dies verwendet /dev/urandomanscheinend ein "kryptografisches PRNG" .
  • Entropie : hat die Option, die Entropie der generierten Wörter anzuzeigen

Verwendungszweck

Hier sind einige Beispiele, um zu veranschaulichen, wie Ipsum funktioniert. Es ist auch wichtig zu wissen, dass Ipsum beim Übersetzen das englische Wort unter dem übersetzten Wort anzeigt und nicht alle zufälligen Wörter übersetzt werden. Sobald Ipsum eine Liste von Wörtern erstellt hat (in welcher Sprache auch immer Sie möchten), wählen Sie einfach eine Teilmenge aus, die als Passwort verwendet werden soll.

Standard

$ ipsum
unbalanced

Nummer angeben

$ ipsum 12
tramp
cutoff
scoured
sundowns
indigence
pellagra
offs
heaping
peevishly
judiciary
unmerciful
haul

Alternative Sprache [Deutsch]

$ ipsum --lang de 5
enormousness
   ^ enormousness
Tonsuren
   ^ tonsures
Harfenist
   ^ harpist
Oligarchie
   ^ oligarchy
nachlassen
   ^ letup

Alternative Sprache [Japanisch]

$ ipsum -l ja 5
再要求
   ^ reclaims
喫水線
   ^ waterline
同意しません
   ^ disagree
皮質
   ^ cortex
リクルーター
   ^ recruiter

Bits der Entropie

$ ipsum --entropy 4
4 word(s) from 1 language(s) produces 65.36 bits of entropy.

happening
commander
parred
woodland

Quellcode

Das ist ziemlich lang, aber ich dachte, ich würde es für Ihr Surfvergnügen bereitstellen. Hier ist der Kern dafür.

#!/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 "$@"

Ursprünge

Der Name Ipsum leitet sich von Lorem Ipsum ab , der Bezeichnung für Fülltext für grafische Elemente einer visuellen Präsentation.

ipsum.sh, obwohl seine .shErweiterung derzeit nur eine Shell-Funktion ist, fehlt eine erste Zeile #!/bin/bashund eine letzte Zeile ipsum "$@".
Das war beabsichtigt, es hat die .shErweiterung für Syntax-Highlighting. Ich importiere meine Funktionen aus meiner, .bashrcdamit sie einfach zu verwalten sind.
Die obige Antwort sollte erwähnen, dass es sich um ipsum()eine Funktion handelt, die zuerst geladen werden muss, dh . ipsum.sh ; impsum -h. Korrigieren Sie mich bitte auch, wenn ich falsch liege, aber weist nicht jeder Instanz von .bashrceinen eigenen Umgebungsspeicher zu ? Wenn dies der Fall ist, würde das Ausführen mehrerer Shells (in verschiedenen Registerkarten eines GUI-Terminalemulators) mehrere redundante Instanzen von . bashipsum()
@agc Ich werde es bearbeiten. Sie haben Recht, dass es ein wenig verschwenderisch ist, aber ich mag die einfache Einrichtung und ich mag auch die Möglichkeit, einfach zu organisieren.

Es gibt ein paar Ressourcen, die Ihnen helfen, zufällige Passphrasen zu generieren, obwohl Sie möglicherweise selbst einige zusätzliche Schritte unternehmen müssen, um Wörterbücher zu kombinieren oder Entropie zu visualisieren.

Dieses einfache Bash-Skript ruft Ihr /usr/share/dict/words-Verzeichnis als Population geeigneter Wörter ab. Sie können die Anzahl der zufälligen Wörter angeben und Ihre eigene Wortdatei verwenden. http://linuxconfig.org/random-word-generator

Sehen Sie sich auch dieses Skript an, das einige einfacher konfigurierbare Optionen bietet, wie die minimale und maximale Wortlänge: http://stackoverflow.org/wiki/Dictionary-based_random_password_generator

Um weitere Inspiration zu erhalten, sehen Sie sich diese kurze Diskussion über SO zum Schreiben eines solchen Skripts in Python an: https://stackoverflow.com/questions/18834636/random-word-generator-python

Ich hoffe, das hilft!

Bearbeiten: Beachten Sie, dass ich nicht mit pseudozufälligen Prozessen vertraut bin, die hinter den Kulissen in Python oder Linux verwendet werden könnten, daher kann ich keine möglichen Schwachstellen an diesem Ende kommentieren.