Authentifizierung

Ziel ist, einen Code zu schreiben, der mit Brute-Force versucht, ein geheimes Wort herauszufinden. Dazu geht der Code einfach alle möglichen Kombinationen von Zeichen durch, bis er das richtige Wort gefunden hat.

Version 1

Schreibe einen Code, der alle möglichen Wörter, die aus genau zwei Kleinbuchstaben (keine Grossbuchstaben, Zahlen, Sonderzeichen, …) bestehen, in der Konsole ausgibt.

Verwende dazu zwei verschachtelte Schleifen.

Du kannst dazu die folgende Liste verwenden:

alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

Version 2

  • Schreibe einen Code, der ein Passwort, welches aus genau vier Kleinbuchstaben besteht, hacken kann.
  • Schreibe den Code mit mehreren verschachtelten Schleifen.
  • Deklariere dazu eine Variable password = input("..."), in welcher dein:e Kolleg:in ein solches Passwort eingeben kann. Dein Code soll dann alle möglichen Kombinationen von vier Kleinbuchstaben durchgehen und mit dem geheimen Wort vergleichen. Dies versuchte Einloggen mit allen möglichen Kombinationen.
  • Sobald das richtige Wort gefunden wurde, wird das Wort ausgegeben und der Code abgebrochen.
  • Messe nun noch, wie lange die Suche dauert. Verwende dazu das Time-Modul:
import time # fuege diese Zeile ganz am Anfang ein
t0 = time.time() # bestimmt aktuelle Zeit in Anzahl Sekunden seit 1.1.1970 und speichert in Variablen t0
 
# hier mein anderer Code
 
t = time.time() - t0 # bestimme nach Ausführen des Codes Zeit erneut und subtrahiere Zeit von vorher. Damit erhält man Zeit, die Code dazwischen benötigt hat

Version 3

  • Schreibe nun einen Code, der Passwörter mit einer unbekannten Länge bestimmen kann. Der Code soll also Passwörter wie „ze“ oder „fqie“ hacken können.
  • Gebe eine obere Grenze an Stellen (z.B. 5) ein, nach der er abbrechen soll.
  • Dazu soll der Code der Reihe nach alle 1-stelligen, dann 2-stelligen, …Wörter durch, bis das gesuchte Wort gefunden oder die Obergrenze erreicht wurde.
  • Tipp: Verwende die Funktion itertools.permutations(...), mit der man alle möglichen Permutationen durchgehen kann. Wie funktioniert diese? Google!
  • Anstelle selbst eine Liste mit Symbolen festzulegen, kannst du auch eingebaute Funktionen verwenden:
import string
print(string.ascii_lowercase)
print(string.ascii_uppercase)
print(string.printable)

Version 4 (optional)

Schreibe deine eigene permutation(...) Funktion. Tipp: Verwende dazu Rekursion.

Tipps zu Rekursion

Überlege dir für jede der drei Kategorien (Wissensfaktoren, Besitzfaktoren, Inhärenzfaktoren) zwei bis drei sinnvolle Beispiele für die Authentifizierung eines Online-Accounts.

Ziel hier ist, dein eigenes Sicherheitskonzept im Internet zu analysieren und gegebenenfalls Massnahmen zu ergreifen. Mache Notizen.

  1. Eigenes Verhalten:
    1. Wie ist mein Verhalten bzgl. Sicherheit von Authentifizierungen?
    2. Sind meine Passwörter noch geheim oder kennt der halbe Zug nach Arbon das Zugangsmuster meines Smartphones?
    3. Lasse ich den Laptop unbeaufsichtigt und ungesperrt stehen?
  2. Passwörter:
    1. Verwende ich sichere Passwörter?
    2. Verwende ich unterschiedliche Passwörter?
    3. Sind meine Passwörter noch geheim? Wer kennt diese noch?
    4. Wie merke ich mir meine Passwörter? Empfehlung: Passwortmanager, zum Beispiel „KeePass“
  3. Wichtigste Accounts:
    1. Welche meiner Online-Accounts sind am wichtigsten? Sie können wichtig sein, weil über diese Accounts folgendes verwaltet wird:
      1. Geld (Online-Banking), Kredit Karten (Amazon)
      2. persönliche Informationen, Fotos
      3. andere Accounts (Mail)
      4. Lizenzen von gekaufter Software
    2. Wurden diese bereits kompromittiert? Überprüfe auf haveibeenpwned.com
    3. Wie sind diese aktuell geschützt?
      1. Verwende ich möglichst sicheres Passwort? Wo verwende ich dieses noch?
      2. Verwende ich bereits Multifaktor-Authentifizierung?
      3. Falls nein, welche sind möglich?
  4. Konkrete Massnahmen:
    1. Was möchte ich konkret verändern in Bezug auf …
      1. Verhalten: Wie/wo Pin/Muster eingeben, …
      2. Passwörter: PW ändern, Passwortmanager, …
      3. Einstellungen: Multifaktor-Authentifizierung einschalten, …
    2. Tue dies!

Aufgabe I

Brute-Force Attacken, bei denen alle möglichen Buchstabenkombinationen erzeugt werden, funktionieren nur für relativ kurze Wörter. Eine andere Möglichkeit ist, eine lange Liste mit beliebten Passwörtern durchzugehen und sehen, ob eines davon passt.

  1. Schreibe ein Programm, in dem man sein Passwort eingeben kann. Das Programm soll dieses dann mit den am meisten verwendeten Passwörtern vergleichen. Listen mit diesen findest du im Internet (siehe unten).
  2. Verwendest du selbst Passwörter, die in diesen Listen vorkommen? Nutze deinen Code, um nach diesen zu suchen. Falls ja: Ändere diese!
  3. Kommt dein Vorname in dieser Liste vor? An welcher Stelle?

Top-1 Million Passwörter: z.B. Top-1 Million: https://raw.githubusercontent.com/danielmiessler/SecLists/master/Passwords/Common-Credentials/10-million-password-list-top-1000000.txt

Mit dem folgenden Code kann man über die URL auf ein Online-Text-File zugreifen und dieses einlesen.

import urllib2
 
data = urllib2.urlopen(<Pfad zu File als String>)
 
for line in data:
    print(line) # Achtung: keine gute Idee, wenn File sehr viele Zeilen beinhaltet!

Aufgabe II

In der Brute-Force Aufgabe weiter oben hast du gesehen, wie man alle möglichen Wörter erzeugen kann. Dies kann nicht nur für Hacker praktisch sein sondern kann dazu verwendet werden, um Fantasiewörter (z.B. Namen für Fantasy-Story) zu erfinden. Hier lohnt es sich aber, die Buchstaben zufällig auszuwählen (Stichwort: random-Modul) und gewisse Regeln zu implementieren, damit die erzeugten Wörter sich auch schön anhören. Einfach Regel: Vokale und Konsonanten sollen sich abwechseln.

Implementiere einen Code, der zufällige Fantasiewörter generiert. Was sind deine besten Kreationen?

  • gf_informatik/umgang_inet_sca/authentifizierung.1676305826.txt.gz
  • Zuletzt geändert: 2023-02-13 16:30
  • von sca