SageMath- und Python-Code
Im Folgenden finden Sie die SageMath- und Python-Skripte aus dem CrypTool-Buch.
Wenn SageMath und Python bei Ihnen installiert sind, können Sie die Skripte in einem Terminal bspw. über Befehle wie diese ausführen:
sage chap02_sample020.sage
sage chap02_hill_enc_dec_kpa.sage
sage chap05_sample_RSA.sage
python3 Appendix-B_sample010.py
Kapitel 1
chap01_sample010.sage | 1.13.1 Ver- und Entschlüsselung mit dem Mini-AES |
Kapitel 2
chap02_sample010.sage | 2.9.1 Einfache Transposition durch Verschieben der Buchstaben in der Nachricht (Schlüssel wird mit „range“ konstruiert) |
chap02_sample020.sage | 2.9.2 Einfache Transposition durch Verschieben (Schlüssel und Umkehrschlüssel werden konstruiert) |
chap02_sample030.sage | 2.9.3 Einfache Spalten-Transposition, die jeden Klartext-Block einfach umkehrt |
chap02_sample040.sage | 2.9.4 Einfache Spalten-Transposition mit zufällig erzeugtem Schlüssel und Ausgabe der Größe des Schlüsselraums |
chap02_sample050.sage | 2.9.5 Einfache Spalten-Transposition (demonstriert Encoding und stellt korrekte Nachrichtenlänge sicher) |
chap02_sample060.sage | 2.9.6 Monoalphabetische Substitution mit zufällig erzeugtem Schlüssel |
chap02_sample065.sage | 2.9.7 Atbash (Substitution durch Umkehren des Alphabets) |
chap02_sample070.sage | 2.9.8 Caesar (Substitution durch Verschieben des Alphabets; Schlüssel explizit gegeben; Schritt-für-Schritt-Ansatz) |
chap02_sample080.sage | 2.9.9 Caesar-Verschlüsselung mit der eingebauten Verschiebe-Chiffre |
chap02_sample090.sage | 2.9.11 Affine Chiffre mit dem Schlüssel (3, 13) |
chap02_sample100.sage | 2.9.12 Caesar-Chiffre (als Sonderfall der affinen Chiffre) |
chap02_sample110.sage | 2.9.13 Vigenère-Verschlüsselung |
chap02_sample120.sage | 2.9.14 Hill-Verschlüsselung mit einer gegebenen Schlüsselmatrix |
chap02_sample130.sage | 2.9.15: Monoalphabetische Substitution über dem Hexadezimal-Alphabet (Decodieren mit SageMath und Python) |
chap02_sample140.sage | 2.9.16 Verschiedene Substitutions-Chiffren über dem Binär-Alphabet |
chap02_sample150.sage | 2.9.17 Monoalphabetische Substitution (MASC) über eigenem Alphabet |
chap02_sample160.sage | 2.9.18 Ciphertext-only-Angriff gegen Shift-Verschlüsselung (Caesar) |
chap02_hill_enc_dec_kpa.sage | 2.9.19 Known-Plaintext-Analyse (KPA) gegen die Hill-Verschlüsselung |
Kapitel 4
chap04_sample010.sage | 4.7.2 Doppelte Mersenne-Primzahlen |
chap04_sample015.sage | 4.7.1 Euklidzahlen (mit +1 und -1) |
chap04_sample020.sage | 4.14.1 Spezielle Werte des Zweier- und Zehnersystems |
chap04_sample030.sage | 4.15.1 Erzeugen der Graphen zu den drei Funktionen x, log(x) und x/log(x) |
chap04_sample040.sage | 4.16.2 Testen der Primalität von Funktionswerten, erzeugt von einer quadratischen Funktion |
chap04_sample050.sage | 4.16.3 Primalität von Funktionswerten (Variable n bis 1000) |
chap04_sample060.sage | 4.10.1 Berechnen der Primfakultäten (k-Primorials k#) von Tabelle 4.9 |
chap04_sample070.sage | 4.6.2 Finde die Carmichael-Zahlen bis n=10000 (plus ein paar Zusatzinformationen) |
chap04_sample080.sage | 4.6.3 Finde alle Carmichael-Zahlen bis n=100000 |
chap04_sample100.sage | Tabelle 4.10 drucken: Lücken zwischen den ersten Primzahlen (Lückenlänge gi = n) |
chap04_sample110.sage | 4.10.3 Erste maximale Primzahl-Lücken mit Merits |
chap04_Mills_primes.sage | 4.10.2 Berechnen der Mills-Primzahlen |
Kapitel 5
chap05_sample010.sage | 5.12.1 Vergleich der Laufzeit zur Berechnung eines ggT und einer Faktorisierung |
chap05_sample013.sage | 5.8.1 Square-and-Multiply manuell ausgeführt in SageMath |
chap05_sample017.sage | 5.2.1 Z, Zn und Zn∗ in SageMath |
chap05_sample020.sage | 5.13.1 Beispiel mit kleinen Zahlen: Berechnen der diskreten Logarithmen a und b, um DH anzugreifen |
chap05_sample025.sage | 5.20.1 Erzeugung von kleinen Additions- und Multiplikationstabellen mit SageMath |
chap05_sample030.sage | 5.20.2 Multiplikationstabelle a·i (mod m) mit m = 17, a = 5 und a = 6 |
chap05_sample040.sage | 5.20.3 Schnelles Berechnen hoher Potenzen a^e mod m = 103 |
chap05_sample050.sage | 5.20.4 Tabelle mit allen Potenzen a^i (mod m) für m = 11, a,i = 1, ..., 10 |
chap05_sample060.sage | 5.20.5 Tabelle mit allen Potenzen a^i (mod45) für a,i = 1, ..., 12 plus der Ordnung von a |
chap05_sample070.sage | 5.20.6 Tabelle mit allen Potenzen a^i (mod46) für a,i = 1, ..., 23 plus der Ordnung von a |
chap05_sample080.sage | 5.20.7 Code zur Erzeugung von Tabellen mit allen Potenzen a^i (mod m) für die Variablen a und i plus Ordnung von a und Eulerphi von m |
chap05_sample090.sage | 5.20.8 Berechnen einer Primitivwurzel für eine gegebene Zahl |
chap05_sample100.sage | 5.20.9 Funktion "enum_PrimitiveRoots_of_an_Integer" zur Berechnung aller Primitivwurzeln für eine gegebene Zahl |
chap05_sample110.sage | 5.20.10 Funktion "count_PrimitiveRoots_of_an_IntegerRange" zur Berechnung der Anzahl aller Primitivwurzeln für einen gegebenen Zahlenbereich |
chap05_sample120.sage | 5.20.11 Funktion "count_PrimitiveRoots_of_a_PrimesRange" zur Berechnung aller Primitivwurzeln für ein gegebenes Intervall von Primzahlen |
chap05_sample130.sage | 5.20.12 Code zur Erstellung einer Liste mit allen Primitivwurzeln für alle Primzahlen zwischen 1 und 100000 |
chap05_sample140.sage | 5.20.13 Code zur Erstellung einer Liste der jeweils kleinsten Primitivwurzeln für alle Primzahlen zwischen 1 und 1000000 |
chap05_sample150.sage | 5.20.15 Code zur Erzeugung der Grafiken zur Verteilung der Primitivwurzeln |
chap05_sample160.sage | 5.20.22 Wie viele private RSA-Schlüssel d gibt es, wenn man den Bereich für die Schlüsselgröße n kennt? |
chap05_sample170.sage | 5.20.23 Bestimmung aller Fixpunkt-Nachrichten für gegebenen öffentlichen RSA-Schlüssel |
chap05_sample180.sage | 5.20.16 Code zur Erzeugung eines in Zn invertierbaren Elements maximaler Ordnung |
chap05_sample_RSA.sage | Vollständiges Programm: RSA (Erzeugung von Primzahlen, Erzeugung von Schlüsseln, Ver- und Entschlüsselung von ganzen Zahlen und ASCII-Zeichenfolgen) |
Kapitel 6
chap06_sample010.sage | 6.5.1 Erzeugung der Tabelle 6.4 mit SageMath |
Kapitel 9
chap09_sample010.sage | 9.1.1 Auflösung eines linearen Gleichungssystems über Q |
chap09_sample020.sage | 9.1.2 Auflösung eines Booleschen linearen Gleichungssystems |
chap09_sample030.sage | 9.1.3 Boolesche Funktion mit Wahrheitstafel und ANF |
chap09_sample040.sage | 9.2.1 Plot von I/O-Korrelation und Potenzial |
chap09_sample050.sage | 9.2.2 Eine Boolesche Abbildung (S-Box S0 von Lucifer) |
chap09_sample060.sage | 9.2.3 Ein Beispiel für den Matsui-Test |
chap09_sample070.sage | 9.2.4 Korrelationsmatrix, Approximationstabelle und lineares Profil der S-Box S0 |
chap09_sample080.sage | 9.2.5 Lineares Profil der S-Box S0 mit Auswertung |
chap09_sample090.sage | 9.2.6 Eine Boolesche Abbildung (S-Box S1 von Lucifer) |
chap09_sample100.sage | 9.2.7 Berechnungen für das Beispiel B (Zweirunden-Chiffre) |
chap09_sample110.sage | 9.2.8 Abhängigkeit der Wahrscheinlichkeit vom Schlüssel |
chap09_sample120.sage | 9.2.12 Lineare Kryptoanalyse von Mini-Lucifer über 2 Runden |
chap09_sample130.sage | 9.3.1 XOR-Verschlüsselung in Python/SageMath |
chap09_sample140.sage | 9.3.3 Eine (schwache) Pseudozufallsfolge in Python/SageMath |
chap09_sample150.sage | 9.3.5 Eine Pseudozufallsfolge in Python/SageMath |
chap09_sample160.sage | 9.3.6 Bestimmung einer Koeffizientenmatrix |
chap09_sample170.sage | 9.3.7 Die Geffe-Funktion |
chap09_sample180.sage | 9.3.8 Eine Periodenberechnung |
chap09_sample190.sage | 9.3.9 Drei lineare Schieberegister |
chap09_sample200.sage | 9.3.10 Drei LFSR-Folgen |
chap09_sample210.sage | 9.3.11 Die kombinierte Folge |
chap09_sample210_without-prints.sage | sample210, das in anderen Sage-Skripten wie chap09_sample230.sage geladen wird |
chap09_sample220.sage | 9.3.12 Lineares Profil der Geffe-Funktion |
chap09_sample230.sage | 9.3.13 Koinzidenzen des Geffe-Generators |
chap09_sample240.sage | 9.3.14 Analyse des Geffe-Generators – Register 1 |
chap09_sample250.sage | 9.3.15 Analyse des Geffe-Generators – Register 2 |
chap09_sample260.sage | 9.3.16 (Viel zu) einfaches Beispiel für BBS |
chap09_sample270.sage | 9.3.17 Erzeugung einer Folge von BBS-Pseudozufallsbits |
Anhang Kapitel Sage
SageAppendix_sample010.sage | A.7.1 Kleine Beispiele aus verschiedenen Gebieten der Mathematik (1) |
SageAppendix_sample020.sage | A.7.2 Kleine Beispiele aus verschiedenen Gebieten der Mathematik (2) |
SageJupyter_sample010.sage, sageJNB_sample010.ipynb | A.7.11 Erzeugen von html-Code mit eingebetteten Sage- und LaTeX-Befehlen |
SageJupyter_sample020.sage, sageJNB_sample020.ipynb | A.7.14 Startbeispiel zur Nutzung von interact im Jupyter-Notebook |
SageJupyter_sample030.sage, sageJNB_sample030.ipynb | A.7.15 Graph mit Asymptote und Parametern (siehe Abb. A.44) |
SageJupyter_sample040.sage, sageJNB_sample040.ipynb | A.7.16 Graph mit Asymptote und Parametern und generischer Funktion (ohne Abb.) |
SageJupyter_sample050.sage, sageJNB_sample050.ipynb | A.7.18 Code zum Graph der MTW-Punkte im Zeitverlauf |
SageJupyter_sample060.sage, sageJNB_sample060.ipynb | A.7.17 Code für Graph mit Controls von ipywidgets (siehe Abb. A.45) |
SageJupyter_sample070.sage, sageJNB_sample070.ipynb | A.7.12 Code zur Ausgabe des LaTeX-Befehls einer Gleichung |
mwe-arara.tex | A.7.13 Arara und sagetex |
Sage Verschiedenes
bitciphers.sage | Bit Ciphers |
Python
chap03_sample10.py | 3.5.1 Kostenfunktion mit LanguageStatisticslibPy in Python |
chap09_sample153.py | 9.3.1 LFSR mit dem pylfsr-Paket in Python |
Appendix-B_sample010.py | B.1.1 Entschlüsselung des Gold-Bug-Geheimtextes in der Geschichte von Poe |
Sonstiges
LFSRseq.png | Ausgabe des Sage-Scripts in Kapitel 9 |
primroots.dat | Datendatei, die von Sage-Script in Kapitel 4 erzeugt wurde |
primroot-smallest_up-to-one-million.dat | Datendatei, die von Sage-Script in Kapitel 4 erzeugt wurde |