Julius Cäsar möchte seine Verschlüsselung zurück

Gerade arbeite ich an einem meiner Projekte, dieses liest eine Website ein daher bin ich durch den Code durch um festzustellen wo ein paar Werte her kommen, die man für den Abruf weiterer Daten benötigt
Sieht mächtig kompliziert aus und entschlüsselt Daten die so in der Webseite eingebunden sind
<meta name="x-secure-token" content="sha512-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">
Ich würde ja sagen: der erste der das entschlüsselt bekommt kriegt von mir ein Eis 😉
Ok sha512? Seit wann ist das eine Verschlüsselung, naja das ist eine falsche Fährte, tatsächlich macht der Code vor der Entschlüsselung erstmal das hier
var n = document.querySelector('meta[name="x-secure-token"]').content.replace("sha512-", "")
und die Entschlüsselungsfunktion wird so aufgerufen
r = M()(n),
r = atob(M()(atob(M()(atob(r))))),
JSON.parse(r));
M ist hierbei eine Factory Funktion, also eine Funktion die eine andere Funktion erzeugt diese ist wiederum unsere Entschlüsselungsfunktion und wie man sieht wurde hier 3-Fach verschlüsselt oh wow dreifache Unsicherheit, zusätzlich wird hier mit atob jedes mal base64 decodiert
Kurz was ist Base64
Base64 verwendet man um um Binärdaten als Text abzubilden, das ist nützlich so kann man z.B. Bilder direkt in HTML rein schreiben was bei E-Mails häufig der Fall ist, bei der Encodierung werden 3 Byte zu 4 Zeichen aus diesem Bereich A–Z, a–z, 0–9, +, /
Wie wir sehen liegt hier also ein vierfach Verschlüsseltes und vierfach base64 codiertes JSON vor, aber was hat das nun mit Cäsar zu tun?
Schauen wir uns die Verschlüsselungsfunktion mal genau an

wir haben hier die Variablen t und n, dämmert es euch schon
t = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
n = "NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm"
dann kommt dieser r.reduce
kram, der macht nichts anderes als ein Wörterbuch aufzubauen, das in etwa so aussieht
A = N
B = O
C = P
usw.
Die vorletzte Zeile, nimmt dann einfach nur den verschlüsselten Text und ersetzt jedes Zeichen mit seinem Gegenstück
Das wars das ist die mächtige Verschlüsselung 😉 man nennt das Monoalphabetische Substitution zwei bekannte Beispiele dafür sind
- Rot-13
Hierbei wird jeder Buchstabe mit dem Buchstaben ersetzt der 13 Stellen im Alphabet entfernt ist - Caesar-Chiffre
Dies wurde schon vor mehr als 2000 Jahren von Julius Cäsar zur Verschlüsselung eingesetzt und wurde damals wohl auch schon geknackt, was auch nicht besonders schwer ist
Wie knackt man die Caesar-Chiffre
In meinem Fall musste ich sie ja nicht knacken sondern ich habe lediglich die Funktion in Python nachgebaut aber wenn man so etwas knacken will kann man dies auf mindestens zwei Arten angehen
Zählen
Du zählst einfach wie oft jedes Zeichen vorkommt, da jedes Zeichen immer gleich ersetzt wird, kann man dann statistisch rangehen in europäischen Sprachen ist der häufigste Buchstabe eigtl. immer E/e hier mal die häufigsten fünf sortiert nach Häufigkeit für Deutsch E, N, I, S, R sowie für Englisch E, T, A, O, I
Wenn du also anfängst nach Häufigkeit zu ersetzen wird sich recht schnell ein Text mit sehr vielen Schreibfehlern erkennen lassen, jetzt musst du nur noch deine Ersetzung mit Hilfe der Schreibfehler korrigieren
Known-Plaintext-angriff
Noch einfacher geht es wenn du einen Text und dessen verschlüsseltes Equivalent kennst, wo das selbe Muster verwendet wurde
Dann kannst du dir die Vertauschung ableiten, auch wenn du nur einen Teil des Textes kennst kann dir das schon extrem Helfen wenn du weißt das der Text immer beginnt mit
„WETTERBERICHT FUER DEN 20. MAERZ…“
Um mal ein geschichtliches Beispiel zu nehmen 😉 hat das den Alliierten damals geholfen die Enigma zu knacken was allerdings keine Monoalphabetische Verschlüsselung ist sondern eine Polyalphabetische
Damit weißt du zumindest schon mal die Ersetzung für diese Zeichen, in unserem Fall wäre das
{"hot_domains":null,"vast":[{"type":"all","src":
Was man aus diesem Artikel mit nehmen sollte
Du kannst in JavaScript nichts geheim halten du kannst lediglich versuchen dinge zu verstecken, denn wenn die Webseite das entschlüsseln kann dann muss alles da sein was benötigt wird