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.sage1.13.1 Ver- und Entschlüsselung mit dem Mini-AES

Kapitel 2

chap02_sample010.sage2.9.1 Einfache Transposition durch Verschieben der Buchstaben in der Nachricht (Schlüssel wird mit „range“ konstruiert)
chap02_sample020.sage2.9.2 Einfache Transposition durch Verschieben (Schlüssel und Umkehrschlüssel werden konstruiert)
chap02_sample030.sage2.9.3 Einfache Spalten-Transposition, die jeden Klartext-Block einfach umkehrt
chap02_sample040.sage2.9.4 Einfache Spalten-Transposition mit zufällig erzeugtem Schlüssel und Ausgabe der Größe des Schlüsselraums
chap02_sample050.sage2.9.5 Einfache Spalten-Transposition (demonstriert Encoding und stellt korrekte Nachrichtenlänge sicher)
chap02_sample060.sage2.9.6 Monoalphabetische Substitution mit zufällig erzeugtem Schlüssel
chap02_sample065.sage2.9.7 Atbash (Substitution durch Umkehren des Alphabets)
chap02_sample070.sage2.9.8 Caesar (Substitution durch Verschieben des Alphabets; Schlüssel explizit gegeben; Schritt-für-Schritt-Ansatz)
chap02_sample080.sage2.9.9 Caesar-Verschlüsselung mit der eingebauten Verschiebe-Chiffre
chap02_sample090.sage2.9.11 Affine Chiffre mit dem Schlüssel (3, 13)
chap02_sample100.sage2.9.12 Caesar-Chiffre (als Sonderfall der affinen Chiffre)
chap02_sample110.sage2.9.13 Vigenère-Verschlüsselung
chap02_sample120.sage2.9.14 Hill-Verschlüsselung mit einer gegebenen Schlüsselmatrix
chap02_sample130.sage2.9.15: Monoalphabetische Substitution über dem Hexadezimal-Alphabet (Decodieren mit SageMath und Python)
chap02_sample140.sage2.9.16 Verschiedene Substitutions-Chiffren über dem Binär-Alphabet
chap02_sample150.sage2.9.17 Monoalphabetische Substitution (MASC) über eigenem Alphabet
chap02_sample160.sage2.9.18 Ciphertext-only-Angriff gegen Shift-Verschlüsselung (Caesar)
chap02_hill_enc_dec_kpa.sage2.9.19 Known-Plaintext-Analyse (KPA) gegen die Hill-Verschlüsselung

Kapitel 4

chap04_sample010.sage4.7.2 Doppelte Mersenne-Primzahlen
chap04_sample015.sage4.7.1 Euklidzahlen (mit +1 und -1)
chap04_sample020.sage4.14.1 Spezielle Werte des Zweier- und Zehnersystems
chap04_sample030.sage4.15.1 Erzeugen der Graphen zu den drei Funktionen x, log(x) und x/log(x)
chap04_sample040.sage4.16.2 Testen der Primalität von Funktionswerten, erzeugt von einer quadratischen Funktion
chap04_sample050.sage4.16.3 Primalität von Funktionswerten (Variable n bis 1000)
chap04_sample060.sage4.10.1 Berechnen der Primfakultäten (k-Primorials k#) von Tabelle 4.9
chap04_sample070.sage4.6.2 Finde die Carmichael-Zahlen bis n=10000 (plus ein paar Zusatzinformationen)
chap04_sample080.sage4.6.3 Finde alle Carmichael-Zahlen bis n=100000
chap04_sample100.sageTabelle 4.10 drucken: Lücken zwischen den ersten Primzahlen (Lückenlänge gi = n)
chap04_sample110.sage4.10.3 Erste maximale Primzahl-Lücken mit Merits
chap04_Mills_primes.sage4.10.2 Berechnen der Mills-Primzahlen

Kapitel 5

chap05_sample010.sage5.12.1 Vergleich der Laufzeit zur Berechnung eines ggT und einer Faktorisierung
chap05_sample013.sage5.8.1 Square-and-Multiply manuell ausgeführt in SageMath
chap05_sample017.sage5.2.1 Z, Zn und Zn∗ in SageMath
chap05_sample020.sage5.13.1 Beispiel mit kleinen Zahlen: Berechnen der diskreten Logarithmen a und b, um DH anzugreifen
chap05_sample025.sage5.20.1 Erzeugung von kleinen Additions- und Multiplikationstabellen mit SageMath
chap05_sample030.sage5.20.2 Multiplikationstabelle a·i (mod m) mit m = 17, a = 5 und a = 6
chap05_sample040.sage5.20.3 Schnelles Berechnen hoher Potenzen a^e mod m = 103
chap05_sample050.sage5.20.4 Tabelle mit allen Potenzen a^i (mod m) für m = 11, a,i = 1, ..., 10
chap05_sample060.sage5.20.5 Tabelle mit allen Potenzen a^i (mod45) für a,i = 1, ..., 12 plus der Ordnung von a
chap05_sample070.sage5.20.6 Tabelle mit allen Potenzen a^i (mod46) für a,i = 1, ..., 23 plus der Ordnung von a
chap05_sample080.sage5.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.sage5.20.8 Berechnen einer Primitivwurzel für eine gegebene Zahl
chap05_sample100.sage5.20.9 Funktion "enum_PrimitiveRoots_of_an_Integer" zur Berechnung aller Primitivwurzeln für eine gegebene Zahl
chap05_sample110.sage5.20.10 Funktion "count_PrimitiveRoots_of_an_IntegerRange" zur Berechnung der Anzahl aller Primitivwurzeln für einen gegebenen Zahlenbereich
chap05_sample120.sage5.20.11 Funktion "count_PrimitiveRoots_of_a_PrimesRange" zur Berechnung aller Primitivwurzeln für ein gegebenes Intervall von Primzahlen
chap05_sample130.sage5.20.12 Code zur Erstellung einer Liste mit allen Primitivwurzeln für alle Primzahlen zwischen 1 und 100000
chap05_sample140.sage5.20.13 Code zur Erstellung einer Liste der jeweils kleinsten Primitivwurzeln für alle Primzahlen zwischen 1 und 1000000
chap05_sample150.sage5.20.15 Code zur Erzeugung der Grafiken zur Verteilung der Primitivwurzeln
chap05_sample160.sage5.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.sage5.20.23 Bestimmung aller Fixpunkt-Nachrichten für gegebenen öffentlichen RSA-Schlüssel
chap05_sample180.sage5.20.16 Code zur Erzeugung eines in Zn invertierbaren Elements maximaler Ordnung
chap05_sample_RSA.sageVollständiges Programm: RSA (Erzeugung von Primzahlen, Erzeugung von Schlüsseln, Ver- und Entschlüsselung von ganzen Zahlen und ASCII-Zeichenfolgen)

Kapitel 6

chap06_sample010.sage6.5.1 Erzeugung der Tabelle 6.4 mit SageMath

Kapitel 9

chap09_sample010.sage9.1.1 Auflösung eines linearen Gleichungssystems über Q
chap09_sample020.sage9.1.2 Auflösung eines Booleschen linearen Gleichungssystems
chap09_sample030.sage9.1.3 Boolesche Funktion mit Wahrheitstafel und ANF
chap09_sample040.sage9.2.1 Plot von I/O-Korrelation und Potenzial
chap09_sample050.sage9.2.2 Eine Boolesche Abbildung (S-Box S0 von Lucifer)
chap09_sample060.sage9.2.3 Ein Beispiel für den Matsui-Test
chap09_sample070.sage9.2.4 Korrelationsmatrix, Approximationstabelle und lineares Profil der S-Box S0
chap09_sample080.sage9.2.5 Lineares Profil der S-Box S0 mit Auswertung
chap09_sample090.sage9.2.6 Eine Boolesche Abbildung (S-Box S1 von Lucifer)
chap09_sample100.sage9.2.7 Berechnungen für das Beispiel B (Zweirunden-Chiffre)
chap09_sample110.sage9.2.8 Abhängigkeit der Wahrscheinlichkeit vom Schlüssel
chap09_sample120.sage9.2.12 Lineare Kryptoanalyse von Mini-Lucifer über 2 Runden
chap09_sample130.sage9.3.1 XOR-Verschlüsselung in Python/SageMath
chap09_sample140.sage9.3.3 Eine (schwache) Pseudozufallsfolge in Python/SageMath
chap09_sample150.sage9.3.5 Eine Pseudozufallsfolge in Python/SageMath
chap09_sample160.sage9.3.6 Bestimmung einer Koeffizientenmatrix
chap09_sample170.sage9.3.7 Die Geffe-Funktion
chap09_sample180.sage9.3.8 Eine Periodenberechnung
chap09_sample190.sage9.3.9 Drei lineare Schieberegister
chap09_sample200.sage9.3.10 Drei LFSR-Folgen
chap09_sample210.sage9.3.11 Die kombinierte Folge
chap09_sample210_without-prints.sagesample210, das in anderen Sage-Skripten wie chap09_sample230.sage geladen wird
chap09_sample220.sage9.3.12 Lineares Profil der Geffe-Funktion
chap09_sample230.sage9.3.13 Koinzidenzen des Geffe-Generators
chap09_sample240.sage9.3.14 Analyse des Geffe-Generators – Register 1
chap09_sample250.sage9.3.15 Analyse des Geffe-Generators – Register 2
chap09_sample260.sage9.3.16 (Viel zu) einfaches Beispiel für BBS
chap09_sample270.sage9.3.17 Erzeugung einer Folge von BBS-Pseudozufallsbits

Anhang Kapitel Sage

SageAppendix_sample010.sageA.7.1 Kleine Beispiele aus verschiedenen Gebieten der Mathematik (1)
SageAppendix_sample020.sageA.7.2 Kleine Beispiele aus verschiedenen Gebieten der Mathematik (2)
SageJupyter_sample010.sage, sageJNB_sample010.ipynbA.7.11 Erzeugen von html-Code mit eingebetteten Sage- und LaTeX-Befehlen
SageJupyter_sample020.sage, sageJNB_sample020.ipynbA.7.14 Startbeispiel zur Nutzung von interact im Jupyter-Notebook
SageJupyter_sample030.sage, sageJNB_sample030.ipynbA.7.15 Graph mit Asymptote und Parametern (siehe Abb. A.44)
SageJupyter_sample040.sage, sageJNB_sample040.ipynbA.7.16 Graph mit Asymptote und Parametern und generischer Funktion (ohne Abb.)
SageJupyter_sample050.sage, sageJNB_sample050.ipynbA.7.18 Code zum Graph der MTW-Punkte im Zeitverlauf
SageJupyter_sample060.sage, sageJNB_sample060.ipynbA.7.17 Code für Graph mit Controls von ipywidgets (siehe Abb. A.45)
SageJupyter_sample070.sage, sageJNB_sample070.ipynbA.7.12 Code zur Ausgabe des LaTeX-Befehls einer Gleichung
mwe-arara.texA.7.13 Arara und sagetex

Sage Verschiedenes

bitciphers.sageBit Ciphers

Python

chap03_sample10.py3.5.1 Kostenfunktion mit LanguageStatisticslibPy in Python
chap09_sample153.py9.3.1 LFSR mit dem pylfsr-Paket in Python
Appendix-B_sample010.pyB.1.1 Entschlüsselung des Gold-Bug-Geheimtextes in der Geschichte von Poe

Sonstiges

LFSRseq.pngAusgabe des Sage-Scripts in Kapitel 9
primroots.datDatendatei, die von Sage-Script in Kapitel 4 erzeugt wurde
primroot-smallest_up-to-one-million.datDatendatei, die von Sage-Script in Kapitel 4 erzeugt wurde