Diceware-Verfahren

Das Diceware-Verfahren ist ein einfaches Verfahren zur Generierung von Passphrasen (also langen Passwörter), die gleichzeitig sicher und realtive einfach zu merken sind.

Weiter unten finden Sie ein Python-Programm, mit dessen Hilfe Sie Diceware-Passphrasen automatisiert erzeugen können. Um das Programm auszuführen, benötigen sie noch eine Diceware-Wortliste, die Sie zum Beispiel hier http://world.std.com/~reinhold/diceware_german.txt finden können. Weiterhin benötigen Sie natürlich auch noch Python selbst: https://www.python.org/

Das Python-Programm ist freie Software. Das bedeutet, dass die Nutzerin oder der Nutzer das Recht hat, die Funktionsweise des Programms analysieren und verstehen zu können. Technisch wird dies dadurch erreicht, dass der unten abgedruckte Quelltext des Programms veröffenlicht wird. Auch wenn Sie die Programmiersprache Python nicht kennen und deshalb vielleicht nicht jedes Detail verstehen, so lesen sie doch einfach mal den Quelltext quer. Vielleicht bekommen Sie ja dennoch ein Gefühl dafür, ob das Programm tatsächlich nur das Erwartete tut, oder ob es vielleicht im Hintergrund zusätzlich noch heimlich andere Dinge tut, die Sie nicht erwarten und deshalb als betrügerisch empfinden würden?

diceware.py
# Lizenz: Freie Software, GPL-3.0, Autorin: selva
# URL zur lizenz: https://www.gnu.org/licenses/gpl.html
 
import random
 
# Einlesen der Wortliste aus Datei:
file = open("diceware_german.txt", "r")
wordlist = {}
for line in file:
    if line[0] != "#":
        number = line[0:5]
        word = line[6:len(line)-1]
        wordlist[number] = word
file.close()
 
# Erzeugen der Passphrase:
print("Generate Passphrase with Diceware-Method:")
print("Press e for exit, any key for one more word:")
passphrase = ""
entropie = 0
next = True
while(next):
    # 5-malige Würfeln (Pseudozufallszahlen):
    randomValue = ""
    for i in range(0,5):
        randomValue += str( random.randint(1,6) )
    # Nachschlagen des Diceware-Wortes und Zusammenbau der Passphrase:
    passphrase += wordlist[randomValue] + " "
    entropie += 12.92
    print( passphrase )
    print("   (Entropie {e:5.2f} Bit)".format(e=entropie) )
    if( input() == 'e' ):
        next = False
 

Anmerkung

In dem obigen Programm wurde das Modul random zur Erzeugung von Pseudozufallszahlen verwendet. Für kryptographische Zwecke sollte man stattdessen eigentlich besser das Modul secret verwenden, da dann die Qualität der Pseudozufallszahlen besser ist. Allerdings ist dieses Modul erst ab Python Version 3.6 vorhanden.

Am Besten ist ohnehin, Sie verwenden einen echten Spielwürfel und würfeln per Hand, dann erzeugen sie echte Zufallszahlen statt lediglich Pseudozufallszahlen. Wer es ganz genau nimmt, kann sich übrigens auch einen echten Casinowürfel bestellen, da normale Spielwürfel aufgrund des Herausfräsens der Punkte nicht völlig symmetisch und damit ganz streng genommmen im mathematischen Sinne nicht fair sind…