Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
gf_informatik:authentifizierung [2024-03-24 18:13] hofgf_informatik:authentifizierung [2025-03-23 16:15] (aktuell) – [Lösungen zu den Programmieraufgaben] hof
Zeile 22: Zeile 22:
 ==== Brute-Force-Attacke ==== ==== Brute-Force-Attacke ====
  
-Wir schreiben einen Code, der mit der [[https://de.wikipedia.org/wiki/Brute-Force-Methode|Brute-Force-Methode]] versucht, ein geheimes Wort herauszufinden. Dazu geht der Code einfach alle möglichen Kombinationen von Zeichen durch, bis er das richtige Wort gefunden hat.+Wir schreiben einen Code, der mit der [[wpde>Brute-Force-Methode]] versucht, ein geheimes Wort herauszufinden. Dazu geht der Code einfach alle möglichen Kombinationen von Zeichen durch, bis er das richtige Wort gefunden hat.
  
 === Python-Kenntnisse auffrischen === === Python-Kenntnisse auffrischen ===
-Bevor du wieder loslegst mit Programmieren: Hier einige [[gf_informatik:2mbc_2023:python_practice|]].+Bevor du wieder loslegst mit Programmieren: Hier einige [[gf_informatik:python_practice]].
  
-=== Aufgabe B1 – Brute Force Version 1 ==+=== Aufgabe – Brute Force ===
  
 Schreibe einen Code, der alle möglichen Wörter, die aus genau zwei Kleinbuchstaben (keine Grossbuchstaben, Zahlen, Sonderzeichen, ...) bestehen, in der Konsole ausgibt. Schreibe einen Code, der alle möglichen Wörter, die aus genau zwei Kleinbuchstaben (keine Grossbuchstaben, Zahlen, Sonderzeichen, ...) bestehen, in der Konsole ausgibt.
Zeile 51: Zeile 51:
     print(letter)     print(letter)
 </code> </code>
-=== Aufgabe B2 – Brute Force Version 2 === 
  
-   * Schreibe einen Code, der ein Passwort, welches aus genau vier Kleinbuchstaben besteht, hacken kann. +==== Brute-Force Hacking ====
-   * 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 entspricht dem versuchten Einloggen mit allen möglichen Kombinationen.+Hacking now! [[.:authentifizierung:hacking]]
  
-   * Sobald das richtige Wort gefunden wurde, wird das Wort ausgegeben und der Code abgebrochen. +==== Bessere und schlechtere Passwörter ====
- +
-   * Messe nun noch, wie lange die Suche dauert. Verwende dazu das **Time-Modul:** +
- +
-<code python> +
-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 +
-</code> +
-  * Dein Code soll (zusätzlich zum ermittelten Passwort) eine Nachricht wie folgt ausgeben: ''Die Suche benötigte 264172 Versuche und dauerte 0.124 Sekunden.'' +
-=== Aufgabe B3 – Brute Force Version 3 (optional) === +
- +
-   * 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. $n=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.product(..., repeat=n)`, mit der man alle möglichen Kombinationen durchgehen kann. Wie funktioniert diese? <del>Google</del> Internetsuche! +
-   * Anstelle selbst eine Liste mit Symbolen festzulegen, kannst du auch eingebaute Funktionen verwenden: +
- +
-<code python> +
-import string +
-print(string.ascii_lowercase) +
-print(string.ascii_uppercase) +
-print(string.printable) +
-</code> +
- +
-=== Aufgabe B4 – Brute Force Version 4 (optional) === +
- +
-Schreibe deine eigene `permutation(...)` Funktion. Tipp: Verwende dazu **Rekursion**. +
- +
-<nodisp 1> +
-++++Tipps zu Rekursion| +
- +
-Rekursive Funktionen sind solche, die *sich selbst aufrufen*. +
- +
-Beispiel Fakultät: Die Fakultät berechnet sich wie folgt: +
-$$n! = n \cdot (n-1) \cdot \ldots \cdot 3 \cdot 2 \cdot 1$$ +
-Zum Beispiel $5! = 5 \cdot 4 \cdot 3 \cdot 2 \cdot 1$. Offensichtlich gilt also $5! = 5 \cdot 4!$. Um die Fakultät von $5$ zu berechnen, kann man also zuerst die Fakultät von $4$ berechnen und das Resultat mit $5$ multiplizieren. An die Fakultät von $4$ kommt man über die Fakultät von $3$ usw. Ganz wichtig ist, eine Abbruchbedingung einzubauen. Für die Fakultät ist diese, dass $1! = 1$. +
- +
-Tipp: Schreibe die Funktion `factorial(n)`, die die Fakultät von $n$ rekursiv berechnet. +
-<code python> +
-def factorial(n): +
-    ... +
-    ... = factorial(n-1) +
-    ... +
-</code> +
- +
-++++ +
-</nodisp> +
- +
-\\ +
-==== Bessere und schlechtere Passswörter ====+
  
 === Aufgabe C – Wie lange dauert es mit und ohne Sonderzeichen? === === Aufgabe C – Wie lange dauert es mit und ohne Sonderzeichen? ===
Zeile 172: Zeile 117:
  
 Deshalb sollten deine Passwörter **mindestens 8-stellig** sein und nicht ein Wort im Wörterbuch sein. Beachte ausserdem die Hinweise im folgenden Kapitel. Am sichersten ist es, wenn neben dem Passwort weitere Faktoren geprüft werden. Siehe [[#Mehrere_Faktoren||Mehrere Faktoren]]. Deshalb sollten deine Passwörter **mindestens 8-stellig** sein und nicht ein Wort im Wörterbuch sein. Beachte ausserdem die Hinweise im folgenden Kapitel. Am sichersten ist es, wenn neben dem Passwort weitere Faktoren geprüft werden. Siehe [[#Mehrere_Faktoren||Mehrere Faktoren]].
- 
-\\ 
  
 ==== Wenn nur das Passwort geprüft wird – Tipps für eine bessere IT-Sicherheit ==== ==== Wenn nur das Passwort geprüft wird – Tipps für eine bessere IT-Sicherheit ====
Zeile 186: Zeile 129:
     - Passwörter müssen nicht gemerkt oder irgendwo aufgeschrieben werden.     - Passwörter müssen nicht gemerkt oder irgendwo aufgeschrieben werden.
  
-\\ +===== Mehrfaktor-Authentifizierung =====
-===== Mehrere Faktoren  =====+
 Angenommen, du hast einen Gegenstand (z.B ein Tagebuch, ein Foto oder ein Superkräfte verleihender Trank), der **auf keinen Fall** in die Hände von jemand anderem gelangen darf. Du verschliesst den Gegenstand in einem bombensicheren Safe. Um den Safe zu öffnen, braucht es einen Pin Code.  Angenommen, du hast einen Gegenstand (z.B ein Tagebuch, ein Foto oder ein Superkräfte verleihender Trank), der **auf keinen Fall** in die Hände von jemand anderem gelangen darf. Du verschliesst den Gegenstand in einem bombensicheren Safe. Um den Safe zu öffnen, braucht es einen Pin Code. 
 Was aber, wenn irgendjemand den Code herausfindet? Um die Sicherheit zu erhöhen, bringst du ein weiteres Schloss an, für das es einen Schlüssel braucht, den nur du hast.  Was aber, wenn irgendjemand den Code herausfindet? Um die Sicherheit zu erhöhen, bringst du ein weiteres Schloss an, für das es einen Schlüssel braucht, den nur du hast. 
Zeile 238: Zeile 180:
 **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 **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.+Mit dem folgenden Code kann man über die URL auf eine Online-Text-Datei zugreifen und sie einlesen.
  
 **Hinweis**: Der Code funktioniert so nur in TigerJython (oder Python2). Wenn du Python3 (z.B. in Visual Studio Code) verwendest, musst du stattdessen `import urllib.request as urllib2` importieren. **Hinweis**: Der Code funktioniert so nur in TigerJython (oder Python2). Wenn du Python3 (z.B. in Visual Studio Code) verwendest, musst du stattdessen `import urllib.request as urllib2` importieren.
Zeile 251: Zeile 193:
 </code> </code>
  
-Alternativ kann ein File auch heruntergeladen und eingelesen werden.+Alternativ kann eine Datei auch heruntergeladen und eingelesen werden.
 === Aufgabe G === === Aufgabe G ===
  
-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.+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. Einfache Regel: Vokale und Konsonanten sollen sich abwechseln.
  
 Implementiere einen Code, der zufällige Fantasiewörter generiert. Was sind deine besten Kreationen? Implementiere einen Code, der zufällige Fantasiewörter generiert. Was sind deine besten Kreationen?
  • gf_informatik/authentifizierung.1711303987.txt.gz
  • Zuletzt geändert: 2024-03-24 18:13
  • von hof