Seite anzeigenÄltere VersionenLinks hierherCopy this pageFold/unfold allNach oben Diese Seite ist nicht editierbar. Du kannst den Quelltext sehen, jedoch nicht verändern. Kontaktiere den Administrator, wenn du glaubst, dass hier ein Fehler vorliegt. ====== Authentifizierung ====== ===== Übersicht ===== {{ :gf_informatik:authenticity.jpg?200|}} Ganz allgemein bedeutet //authentifizieren//: **zu prüfen, ob eine Behauptung zutrifft**. Zum Beispiel wird geprüft, ob ein Kunstwerk hinsichtlich der behaupteten Identität, des behaupteten Alters oder der behaupteten Herkunft //authentisch//, das heisst echt ist.((Jemand könnte mit einem Gemälde daher kommen und sagen: "Seht her: Dieses Bild ist von Vincent van Gogh!" – Nun gibt es einige Möglichkeiten, seine Behauptung zu prüfen. Wird festgestellt, dass das Bild tatsächlich (bzw. sehr wahrscheinlich) von Van Gogh ist, ist es als Van-Gogh-Bild authentifiziert. Vielleicht wird auch festgestellt, dass es bloss eine Kopie, nicht echt, nicht //authentisch// ist.)) Im Bereich der Computerwissenschaften – unserem Bereich – geht es fast immer um die **Prüfung der Identität oder Berechtigung einer Person**. {{:gf_informatik:wolf_und_sieben_geisslein.jpg?200 |}} Wie geht das? Wie prüfen wir, ob die Person "auf der anderen Seite" auch die ist, die sie zu sein behauptet? Diese Frage war auch für die sieben Geisslein im [[https://de.wikipedia.org/wiki/Der_Wolf_und_die_sieben_jungen_Gei%C3%9Flein|Märchen der Gebrüder Grimm]] relevant. Dass es sich bei dem Wesen hinter der Tür nicht um ihre Geissen-Mutter, sondern um den Wolf handelte, erkannten Sie zunächst an biometrischen Daten: Stimme und Pfoten-Farbe. Der einigermassen schlaue Wolf schaffte es aber, mit Täuschungsmanövern beide Prüfungen zu bestehen, sodass die Geisslein ihm die Türe öffneten. In der realen Welt, in der wir uns mit unseren Körpern begegnen, sind solche Täuschungen nicht so einfach: Menschen, die wir kennen, erkennen wir ziemlich gut an Stimme, Aussehen und Verhalten. Es wäre schwierig, jemandem glaubhaft zu machen, z. B. seine Schwester oder sein Bruder zu sein. Wenn wir uns aber als unbekannte Personen vorstellen, könnten wir leicht behaupten, jemand anderes zu sein. Deshalb ist es in manchen Situationen erforderlich, dass wir uns (zum Beispiel mit einer Identitätskarte) ausweisen: So kann die Behauptung "Ich bin X" authentifiziert werden. Auch in der virtuellen Welt, in der wir uns über Bildschirme und/oder Lautsprecher begegnen, werden Täuschungen einfacher. Woher weiss ich, dass die Person, mit der ich gerade im Chat schreibe, wirklich diese Person ist? Ob nicht jemand anderes gerade das Smartphone oder den Laptop am anderen Ende bedient? === Aufgabe A – Authentifizierung im Alltag (und in den Ferien) === Authentifizierungen im Internet sind dir bestens bekannt. Nenne vier Situationen im Alltag oder in den Ferien, in denen Authentifizierung "in der realen Welt" stattfinden. \\ ===== Authentifizierung mit Passwort ===== Auf vielen Webseiten und Plattformen reicht die Angabe eines korrekten Passworts, um zu "beweisen", dass man eine bestimmte Person oder ein bestimmter Benutzer ist.(("Benutzer/Benutzerin" und "Person" meinen etwas völlig Unterschiedliches. Das wird auch dadurch klar, dass eine Person mehrere Benutzer sein kann und theoretisch für jedes Konto andere Namen und E-Mail-Adressen angeben könnte. Oft aber sind die Informationen, die zu einem Benutzer gespeichert sind, sehr zahlreich und deckungsgleich mit den Informationen über die Person, zu der das Benutzerkonto gehört.)) Wer es schafft, an mein Passwort zu kommen, kann auf der jeweiligen Webseite auf mein Benutzerkonto und alle dort vorhandenen Informationen zugreifen. **Eine Authentifizierung, die nur auf ein Passwort schaut, gilt daher als relativ unsicher.** In diesem Kapitel lernst du, welche Passwörter sicherer sind als andere und weshalb Passwörter grundsätzlich nicht sicher genug sind. ==== Brute-Force-Attacke ==== 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 === Bevor du wieder loslegst mit Programmieren: Hier einige [[gf_informatik:python_practice]]. === Aufgabe B – 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. Verwende dazu zwei verschachtelte Schleifen. Am einfachsten packst du alle Buchstaben in einen String (Text): <code python> alphabet = 'abcdefghijklmnopqrstuvwxyz' </code> Ein String in Python verhält sich ähnlich wie eine Liste von Buchstaben - du kannst auf die einzelnen Buchstaben mit den eckigen Klammern zugreifen wie auf die Elemente einer Liste. Mehrere Buchstaben (oder Strings) lassen sich mit dem `+` Operator wieder aneinanderreihen: <code python> word = alphabet[24] + alphabet[4] + alphabet[18] print(word) </code> Zudem lässt sich auch eine `for`-Schleife über alle Buchstaben eines Strings laufen: <code python> for letter in alphabet: print(letter) </code> ==== Brute-Force Hacking ==== Hacking now! [[.:authentifizierung:hacking]] ==== Bessere und schlechtere Passwörter ==== === Aufgabe C – Wie lange dauert es mit und ohne Sonderzeichen? === - Kopiere den Code unten und speichere ihn in einer neuen Datei. - Von den Zeilen 5 und 6 muss jeweils eine auskommentiert, also deaktiviert sein und die andere soll aktiviert sein: - wenn Zeile 5 aktiviert ist, werden für jede Passwortstelle 26 Zeichen geprüft (alle Kleinbuchstaben). - wenn Zeile 6 aktiviert ist, werden für jede Passwortstelle 100 Zeichen geprüft (Zahlen (0...9), Klein- und Grossbuchstaben sowie Sonderzeichen) - Teste den Code mit verschiedenen Einstellungen und Passwörtern und **notiere in einer Tabelle wie unten** (nutze [[http://sheets.new|Sheets]] oder [[http://excel.new|Excel]]), wie lange die Suche gedauert hat: - Probiere für jede Anzahl Stellen jeweils zwei Passwörter aus – ein einfaches wie 'aaa' und ein schwieriges wie 'zzz' – und trage jeweils den **Durchnitt der beiden Zeiten** in die Tabelle ein. - **Achtung:** Für Passwörter mit Sonderzeichen nicht mehr als 4 Stellen eingeben. Sonst dauerts zu lange - In der rechten Spalte (alle Zeichen) hast du **für die letzten zwei Zeilen keine Messwerte**. Aber du kannst die Zeiten aufgrund der bisherigen Messwerte **berechnen**. Siehe "Berechnung der Komplexität" unten. - Freiwillig: Erstelle ein Diagramm von deiner Tabelle. - Berechne aufgrund deiner gemessenen Daten: Wie viele Tage dauerte es durchschnittlich, ein 7-stelliges Passwort zu knacken, das auch Sonderzeichen und Ziffern enthält. \\ ^ Passwortlänge\\ (Anzahl Zeichen) ^ Zeit Kleinbuchstaben\\ (Sekunden) ^ Zeit Alle Zeichen\\ (Sekunden) ^ | 3 | 0.000 | 0.000 | | 4 | 0.000 | 0.000 | | 5 | 0.000 | | | 6 | 0.000 | | == Zur Berechnung der Komplexität == * Die Komplexität berechnet sich aus der Länge des Alphabets $l$ und der Passwortlänge $n$ als $l^n$. * Für ein dreistelliges Passwort aus Kleinbuchstaben gibt es also $26^3$ Kombinationen. Ausprobieren mit dem Code unten oder [[https://webtigerpython.ethz.ch/?code=NobwRAdghgtgpmAXGGUCWEB0AHAnmAGjABMoAXKJMNGbAewCcyACAZzIYwHMAdCG-k2ZoycJnToAbVnwGMWZGnD7M-USdgAWUAEZwWAXjYdumKKwDGaNAH1JdAO5iL5uMwDEzdZLcBpHxg6AK4Wmuy6cBDMABQATABszABacGihkQCUfJ7qWhGGxpwQXDhFFDo-HsloAGY1YlEADJgtAJwEzP6pEAC0zEEQxMwA4gx0rKzBoeF6EB0AynSDYgBeqelR0QCMjY3J65qZKnzY5qwOjENGGNhBZNE8YABCIqLMAApnF0LdXHCziEeWQgZD2RkU8EwELg0WBqggnjE7C8kkq3XYcFRaD-UV8dBgOgw5DQS0iHVIECi3jcKycaAxWJxzH0FkwfBqjGEwiiDCgxRhWw6Pgg0VOE2-xAyzAA1FsMoCoswlRyGMwLPjCdBFEs7PSWBhhKJxFJWKU6MQQvdcto9GQCAw4Ng4OQDGh5SolZ6leqCUTtRAbBLmEYAOQhzAAKzoGGiPs1xJ1kj1UqqwCgBHTOgAuswej0AHzMENQXQhj1epW1NUav0kgNBgxGMXnS4Kivt5gFaFQpSw3OdxrljtK7BlB5gAAi5g-X3kzEkUDu-kQzBAAF82WBMCrUPc47WdRKMnDh57Rxh7o8J2g3PMQodmKQgmI3iBEJgAMw1NfMeZwADWAzEJEm7bowu7RGQx5DsOOgOlA_5gGuWZAA|direkt hier]]. ++++ Code zum Kopieren:| <code python> import string import itertools import time alphabet = string.ascii_lowercase # alle Kleinbuchstaben (26 Zeichen) # alphabet = string.printable # Ziffern 0...9, Klein- und Grossbuchstaben, Sonderzeichen (100 Zeichen) password = input("Bitte Passwort eingeben:") t0 = time.time() # erst alle einstelligen Kombinationen, dann alle zweistelligen etc. for i in range(1, len(password) +1): for combination_list in itertools.product(alphabet,repeat = i): combination_word = ''.join(combination_list) ## [a,a,b] --> 'aab' if combination_word == password: t = time.time() - t0 print("Das Passwort lautet: {}.".format(combination_word)) print("Die Suche dauerte {:.3f} Sekunden.".format(t)) break </code> ++++ === Längere Passwörter sind sicherer === Du hast oben gesehen, dass es schon für ein 7-stelliges Passwort sehr lange dauern kann, bis es geknackt ist. <color #22b14c>"Ist mein Passwort "Arbon77" also sicher genug?"</color> denkst du vielleicht. – <color #ed1c24>NEIN!</color> Aus folgenden Gründen: * Unser Code ist nicht sehr effizient und deine CPU, die den Code ausgeführt hat, ist nicht die schnellste. * Mit optimiertem Code und mit dem Einsatz hochwertiger CPUs oder GPUs lassen sich Passwörter deutlich schneller knacken. * Die Rechenleistung kann auf mehrere Computer verteilt und so die Zeit nochmals verkürzt werden (Cloud-Computing). * Wenn dein Passwort eine bekanntes Wort enthält, kann es nochmals viel schneller gehen. Denn der Code könnte zuerst einfach eine Liste mit bekannten Wörtern durchsuchen und jeweils prüfen, ob es im Passwort vorkommt. 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 eine Webseite, eine App oder eine Plattform (wie Instagram oder Microsoft Office) Daten von dir speichert und diese nur durch ein Passwort schützt, **ist das relativ unsicher**. Denn dein Passwort könnte in die Hände anderer gelangen. Zum Beispiel durch Social-Engineering-Methoden oder dadurch, dass eine Plattform dein Passwort nicht sicher genug speichert: Aufgrund sogenannter Datenpannen (data breaches) gelangen immer wieder mal grosse Mengen von Benutzerdaten an die Öffentlichkeit. Auf der Seite [[https://haveibeenpwned.com/|haveibeenpwned.com]] kannst du nachschauen, ob die Daten aus einem Benutzerkonto zu deiner E-Mail-Adressen mal an die Öffentlichkeit gelangt sind. Um auch hier eine möglichst hohe Sicherheit zu erreichen, empfiehlt sich: - Verwende starke und unterschiedliche Passwörter: [[https://rothe.io/?page=crypto/4-hash/1-secure-passwords/|Hier]] kannst du prüfen, wie sicher ein Passwort ist und erhältst Tipps für sichere Passwörter sowie Empfehlungen für Passwortmanager. - Vor allem dort, wo es dir wichtig ist, dass niemand an deine Daten kommt, solltest du unbedingt ein //anderes// und //stärkeres// Passwort verwenden, als beispielsweise für dein Login bei irgendeinem Webshop, bei dem du nur selten was bestellst. - Der einfachste und sicherste Weg: Verwende ein Passwortmanager. Dieser bietet gleich mehrere Vorteile: - Du hast ein starkes und einzigartiges Passwort für jede Webseite. - Automatische Eingabe: Eine Phishing-Seite wird als solche erkannt, dass Passwort wird dann nicht automatisch eingegeben. - Passwörter müssen nicht gemerkt oder irgendwo aufgeschrieben werden. ===== Mehrfaktor-Authentifizierung ===== 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 jemand heimlich eine Kopie deines Schlüssel anfertigt? Du erhöhst die Sicherheit nochmal: Ein weiteres Schloss mit Fingerabdruck-Scanner öffnet sich nur, wenn du deinen Daumen hinhältst. Dein Safe verfügt nun über eine Drei-Faktor-Authentifizierung. Zwar ist es auch möglich, eine Fingerabdruck-Überprüfung zu täuschen, aber es ist für jemanden ausser dir äusserst schwierig, alle drei Schlösser zu öffnen! Dieser jemand müsste etwas besonderes <color #00a2e8>**wissen**</color>, das nur du weisst: den Code. Und er müsste etwas besonderes <color #00a2e8>**haben**</color>, das nur du hast: den Schlüssel. Und er müsste etwas besonderes <color #00a2e8>**sein**</color>, das nur du bist: Der Mensch mit genau diesem Fingerabdruck. Das ist die Idee hinter einer Authentifizierung mit mehreren Faktoren: Es sollen Einzelheiten aus //unterschiedlichen Kategorien// geprüft werden: * <color #00a2e8>**Wissensfaktoren**</color> (knowledge factors) prüfen etwas, was der Benutzer weiss: Zum Beispiel ein Passwort oder ein Pin-Code. * <color #00a2e8>**Besitzfaktoren**</color> (ownership fators) prüfen, ob der Benutzer etwas hat: Zum Beispiel einen Schlüssel, ein bestimmtes Smartphone, eine Bank- oder Identitätskarte oder ein [[https://de.wikipedia.org/wiki/Security-Token|Security-Token]]. * <color #00a2e8>**Inhärenzfaktoren**</color> (inherence factors) prüfen etwas, das dem Benutzer inhärent (innewohnend, anhaftend) ist. Wir könnten auch sagen: etwas, was der Benutzer ist oder tut: Hierzu gehören biometrische Daten wie Fingerabdruck, Gesichtsmuster oder Stimme. Auch die eigene Unterschrift ist ein Inhärenzfaktor. Bei einer //Zwei-Faktor-Authentifizierung// (Two-factor authentication) werden Einzelheiten aus zwei dieser drei Kategorien geprüft. Der Ausdruck //Multi-factor authentication// lässt offen, ob zwei oder drei Faktoren erforderlich sind. Ein **entscheidender Vorteil der Mehrfaktor-Authentifzierung** im Internet besteht darin, dass //mehrere Anfgriffsvektoren// nötig sind, um ein Benutzerkonto zu knacken: * Es ist wohl einfach, ein einzelnes Token oder Mobiltelefon zu stehlen, aber schwierig, gleich 1000 oder mehr davon zu stehlen. Diese Art des Angriffs lässt sich also nicht leicht skalieren. * Dagegen ist es sehr einfach, ein Virus oder Keylogger auf tausenden von Geräten zu verbreiten oder eine Phishing-Mail an tausende von Benutzer:innen zu senden. Diese Art des Angriffs lässt sich gut skalieren. * Für die meisten Betrüger:innnen lohnt sich der Aufwand eines Angriffs erst dann, wenn damit gleich //mehrere// Benutzerkonten auf einmal geknackt werden können. === Aufgabe D – Wo und wann werden mehrere Faktoren geprüft? === - Angenommen, du hättest an deinem Safe einfach drei Pin-Code-Schlösser. Wäre das dann auch eine Drei-Faktor-Authentifizierung? Wäre sie mehr oder weniger sicher als die Variante mit Schlüssel, Pin-Code und Fingerabdruck? - Überlege zu den Situationen, die du in Aufgabe A genannt hast, welche Faktoren (Wissen, Besitz, Inhärenz) jeweils geprüft werden: - Eintritt zu einem Konzert, Mobiltelefon entsperren, Prüfungszulassung (z.B. Aufnahmeprüfung), Reisen in andere Länder (am Zoll), Covid-Zertifikat mit Ausweis, Fahrerlaubnis via Führerschein, Bahnbillet mit Swisspass etc. - Viele Leute zahlen Rechnungen heute direkt mit der E-Banking-App auf ihrem Smartphone: App öffnen, Rechnung scannen, Zahlung bestätigen. Welche Authentifzierung ist dabei erfolgt? Beschreibe mit obigen Fachbegriffen. === Aufgabe E – Prüfe und verbessere deine IT-Sicherheit === - Analyse: - Erstelle eine Liste aller Webseiten, die du (seltener oder öfter) besuchst und die eine Authentifizierung erfordern. - Überlege, bei wie vielen du die gleiche E-Mail-Adresse und das gleiche Passwort nutzt. - Du nutzt wohl auch Apps, die eine Authentifizierung verlangen, jedoch nur einmalig, bei jedem erneuten Öffnen ist keine neue Authentifizierung nötig. Was ist die Überlegung dahinter? Was wird vorausgesetzt? - Schwachstellen schliessen: - Überlegen, welche Lösung dir am sinnvollsten erscheint: Passwortmanager im Browser? Andere Passwortmanager? - Nötige Änderungen vornehmen: Zweifaktor-Authentifzierung aktivieren, evtl. PW-Manager installieren, evtl. einzelne Passwörter ändern. - Mindestens Folgende Sicherheitsmassnahmen müssen Sie umgesetzt haben: - Besonderes Passwort und 2FA beim E-Mail-Konto - Laptop und Smartphone mit Passwort/Fingerabdruck o.ä. gesperrt. \\ ===== Weitere Programmieraufgaben ===== === Aufgabe F === 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 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. <code python> import urllib2 data = urllib2.urlopen(<Pfad zu File als String>) for line in data: print(line.strip()) # 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 eine Datei auch heruntergeladen und eingelesen werden. === 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. Einfache 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 Strings mit Konsonanten und Vokalen verwenden: <code python> consonants = 'BCDFGHJKLMNPQRSTVWXYZ' vowels = 'AEIOU' </code> \\ ===== Lösungen zu den Programmieraufgaben ===== <nodisp 1> ++++Lösungen| === Aufgabe B1 === <code python> alphabet = 'abcdefghijklmnopqrstuvwxyz' for c1 in alphabet: for c2 in alphabet: word = c1 + c2 print(word) </code> === Aufgabe B2 === <code python> import time alphabet = 'abcdefghijklmnopqrstuvwxyz' password = input("Bitte vierstelliges Passwort aus Kleinbuchstaben eingeben:") count = 0 t0 = time.time() # bestimmt aktuelle Zeit in Anzahl Sekunden seit 1.1.1970 und speichert in Variablen t0 for letter1 in alphabet: for letter2 in alphabet: for letter3 in alphabet: for letter4 in alphabet: testword = letter1 + letter2 + letter3 + letter4 count+=1 if testword == password: t = time.time() - t0 # bestimme nach Ausführen des Codes Zeit erneut und subtrahiere Zeit von vorher. print("Das Passwort lautet: {}".format(testword)) print("Die Suche benötigte {} Versuche und {:.3f} Sekunden".format(count, t)) break </code> === Aufgabe B3 === <code python> import string import itertools alphabet = string.printable max_letters = 3 password = input("Bitte PW eingeben:") # erst alle einstelligen Kombinationen, dann alle zweistelligen etc. – bis max_letters: for i in range(1, max_letters +1): for combination_list in itertools.product(alphabet,repeat = i): combination_word = ''.join(combination_list) ## [a,a,b] --> 'aab' if combination_word == password: print(combination_word) break </code> === Aufgabe F === <code python> import urllib2 data = urllib2.urlopen("https://raw.githubusercontent.com/danielmiessler/SecLists/master/Passwords/Common-Credentials/10-million-password-list-top-1000000.txt") # read online text file pw = "schweiz" c = 0 for line in data: line = line.strip() # remove linebreak at end of each line if line == pw: print("password is: " + line) print("position: " + str(c)) break c += 1 if c % 100000 == 0: print("counter: " + str(c)) print("THE END") </code> === Aufgabe G === <code python> import random consonants = 'BCDFGHJKLMNPQRSTVWXYZ' vowels = 'AEIOU' 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/authentifizierung.txt Zuletzt geändert: 2025-03-23 16:15von hof