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:umgang_inet_sca:authentifizierung [2023-02-14 21:05] – [Lösungen] scagf_informatik:umgang_inet_sca:authentifizierung [2024-02-11 09:45] (aktuell) – gelöscht sca
Zeile 1: Zeile 1:
-====== Authentifizierung ====== 
- 
-   * Slides: {{ :gf_informatik:umgang_inet_sca:2022_umgang_inet_03_authentifizierung.pdf |}} 
-   * Seite zu Theorie (ignoriere Aufgaben dort): [[gf_informatik:authentifizierung|Authentifizierung]] 
-   * [[https://www.grimmstories.com/de/grimm_maerchen/der_wolf_und_die_sieben_jungen_geisslein|Der Wolf und die sieben Geisslein]] 
- 
- 
-==== Aufgabe 1: Brute-Force-Attacke ==== 
- 
-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: 
-<code python> 
-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'] 
-</code> 
- 
-=== 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:** 
- 
-<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> 
- 
-=== 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: 
- 
-<code python> 
-import string 
-print(string.ascii_lowercase) 
-print(string.ascii_uppercase) 
-print(string.printable) 
-</code> 
- 
-=== 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 `faculty(n)`, die die Fakultät von $n$ rekursiv berechnet. 
-<code python> 
-def faculty(n): 
-    ... 
-    ... = faculty(n-1) 
-    ... 
-</code> 
- 
-++++ 
-</nodisp> 
-==== Aufgabe 2: Multifaktor-Authentifizierung ==== 
- 
-Überlege dir für jede der drei Kategorien (Wissensfaktoren, Besitzfaktoren, Inhärenzfaktoren) zwei bis drei sinnvolle Beispiele für die Authentifizierung eines Online-Accounts. 
- 
-==== Aufgabe 3: Eigenes Sicherheitskonzept ==== 
- 
-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? 
-     1. Sind meine Passwörter noch geheim oder kennt der halbe Zug nach Arbon das Zugangsmuster meines Smartphones? 
-     1. Lasse ich den Laptop unbeaufsichtigt und ungesperrt stehen? 
- 
-   1. **Passwörter:** 
-     1. Verwende ich sichere Passwörter? 
-     1. Verwende ich unterschiedliche Passwörter? 
-     1. Sind meine Passwörter noch geheim? Wer kennt diese noch? 
-     1. Wie merke ich mir meine Passwörter? Empfehlung: **Passwortmanager,** zum Beispiel "KeePass" 
- 
-   1. **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) 
-         1. persönliche Informationen, Fotos 
-         1. andere Accounts (Mail) 
-         1. Lizenzen von gekaufter Software 
-      1. Wurden diese **bereits kompromittiert**? Überprüfe auf [[https://haveibeenpwned.com/|haveibeenpwned.com]] 
-      1. Wie sind diese **aktuell geschützt**? 
-         1. Verwende ich möglichst sicheres Passwort? Wo verwende ich dieses noch? 
-         1. Verwende ich bereits Multifaktor-Authentifizierung? 
-         1. Falls nein, welche sind möglich? 
-   1. **Konkrete Massnahmen**: 
-      1. Was möchte ich konkret verändern in Bezug auf ... 
-         1. **Verhalten**: Wie/wo Pin/Muster eingeben, ... 
-         1. **Passwörter**: PW ändern, Passwortmanager, ... 
-         1. **Einstellungen**: Multifaktor-Authentifizierung einschalten, ... 
-      1. Tue dies! 
-    
- 
- 
-==== Aufgabe 4: Weitere Programmieraufgaben ==== 
- 
-=== 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). 
-   1. Verwendest du selbst Passwörter, die in diesen Listen vorkommen? Nutze deinen Code, um nach diesen zu suchen. Falls ja: Ändere diese! 
-   1. 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. 
-<code python> 
-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! Baue z.B. Counter ein, damit nach z.B. 100 Ausgaben abbricht 
-</code> 
- 
-Alternativ kann ein File auch heruntergeladen und eingelesen werden. 
-=== 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? 
- 
-//Tipp:// Hast du einen String `s` mit lauter Grossbuchstaben, so kannst du diesen mit `print(s.capitalize())` in ein Wort umwandeln, welches gross beginnt und danach klein weitergeführt wird. 
- 
-Du kannst die folgenden zwei Listen mit Konsonanten und Vokalen verwenden: 
-<code python> 
-consonants = ["B","C","D","F","G","H","J","K","L","M","N","P","Q","R","S","T","V","W","X","Z"] 
-vowels = ["A","E","I","O","U"] #"Ä","Ö","Ü","Y" 
-</code> 
- 
- 
- 
- 
- 
-===== Lösungen ===== 
- 
-<nodisp 2> 
-++++Lösungen| 
- 
-==== Aufgabe 1 ==== 
- 
-=== Version 1 === 
- 
-<code python> 
-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'] 
- 
-for c1 in alphabet: 
-    for c2 in alphabet: 
-        word = c1 + c2 
-        print(word) 
-</code> 
- 
-=== Version 2 === 
- 
-**Lösung 1** (Problem: Bricht nicht ab, wenn Passwort gefunden) 
- 
-<code python> 
-import time 
-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'] 
- 
-password = input("Gebe dein geheimes Passwort ein (5 Kleinbuchstaben, keine Zahlen usw.") 
- 
-t0 = time.time() 
-for c1 in alphabet: 
-    for c2 in alphabet: 
-        for c3 in alphabet: 
-            for c4 in alphabet: 
-                for c5 in alphabet: 
-                    word = c1+c2+c3+c4+c5 
-                    if word == password: 
-                        print("Your password is: " + word) 
-      
-print(time.time() - t0) 
-</code> 
- 
-**Lösung 2:** Bricht ab, wenn PW gefunden, packe dazu Brute-Force Suche in Funktion, breche mit return ab 
- 
-<code python> 
-import time 
-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'] 
- 
-password = input("Gebe dein geheimes Passwort ein (5 Kleinbuchstaben, keine Zahlen usw.") 
- 
-t0 = time.time() 
- 
-def brute_force(pw): 
-    for c1 in alphabet: 
-        for c2 in alphabet: 
-            for c3 in alphabet: 
-                for c4 in alphabet: 
-                    for c5 in alphabet: 
-                        word = c1+c2+c3+c4+c5 
-                        if word == pw: 
-                            print("Your password is: " + word) 
-                            return 
- 
-brute_force(password) 
- 
-print(time.time() - t0) 
-</code> 
- 
-=== Version 3 === 
- 
- 
-==== Aufgabe 4 ==== 
- 
-=== Aufgabe I === 
- 
-<code python> 
-</code> 
- 
-=== Aufgabe II === 
- 
-<code python> 
-import random 
- 
-consonants = ["B","C","D","F","G","H","J","K","L","M","N","P","Q","R","S","T","V","W","X","Z"] 
-vowels = ["A","E","I","O","U"] #"Ä","Ö","Ü","Y" 
- 
-def random_word(n=6): 
-    next_vowel = random.choice([True,False]) # begin with vowel or not? 
-    word = "" 
-    for i in range(n): 
-        if next_vowel: 
-            word += random.choice(vowels) 
-        else: 
-            word += random.choice(consonants) 
-        next_vowel = not next_vowel 
-    return word 
- 
-for i in range(20): 
-    n = random.randint(3,10) 
-    print(random_word(n).capitalize()) 
-</code> 
- 
-++++ 
-</nodisp> 
  
  • gf_informatik/umgang_inet_sca/authentifizierung.1676408705.txt.gz
  • Zuletzt geändert: 2023-02-14 21:05
  • von sca