- Ein 1991 passwortgeschützt archiviertes ZIP mit dem Quellcode von ANC Operation Vula wurde entschlüsselt, wodurch der geheime Kommunikationscode gegen das südafrikanische Apartheid-Regime veröffentlicht werden kann
- Der Code wurde Ende der 1980er für den Aufbau eines unterirdischen ANC-Netzwerks innerhalb Südafrikas verwendet und tauschte mit 8-Bit-Computern, DTMF-Tönen, Akustikkopplern und PowerBASIC mit One-Time-Pad verschlüsselte Nachrichten aus
- Das ZipCrypto früher PKZIP-Versionen war anfällig für einen Known-Plaintext-Angriff; mit bkcrack wurde ein vorhersagbarer 12-Byte-Klartext im ZIP gefunden und so der Schlüssel wiederhergestellt
- Der Angriff nutzte einen unkomprimierten Store-Eintrag in ALLBAS.ZIP, den PK-Header eines inneren ZIPs und den ersten Dateinamen COMKEY.BAS; nach 23 Minuten wurden die Schlüssel
98e0f009 48a0b11a c70f8499ermittelt - Die entschlüsselten Dateien RANDOM.BAS und TECOD.BAS wurden in DOSBox kompiliert und ausgeführt; dabei wurden die Erzeugung von Zufallsdaten, Datei-Ver- und -Entschlüsselung, die Nutzung einer RAM-Disk und das Vernichten von Schlüsselmaterial nach Gebrauch bestätigt
Warum der Code von Operation Vula gesperrt war
- Operation Vula war Ende der 1980er eine Operation zum Aufbau eines Untergrundnetzwerks, das ANC-Führungspersonen und Material nach Südafrika brachte und inländische operative Elemente miteinander verband
- Für sichere Kommunikation wurden 8-Bit-Computer, DTMF-Töne, Akustikkoppler, verschiedene Geräte und PowerBASIC-Programme eingesetzt, um mit One-Time-Pad verschlüsselte Nachrichten auszutauschen
- Tim Jenkin, der das Kryptosystem überwiegend entwickelte, veröffentlichte den Originalcode auf Vulacode GitHub; eine ausführliche Beschreibung steht in Talking To Vula.pdf
- Der direkte Grund für die verzögerte Veröffentlichung des Codes war eine 1991 erstellte passwortgeschützte ZIP-Datei
- Als Tim Jenkin Großbritannien verließ und nach Südafrika zurückkehrte, packte er den gesamten Quellcode in ein ZIP und vergab ein Passwort
- Später bestand in Südafrika kein Bedarf mehr, den Code zu öffnen, und als er ihn Jahre später wieder öffnen wollte, erinnerte er sich nicht mehr an das Passwort
- Eine zugängliche Datei war eine sehr frühe Version, der Rest ließ sich wegen des Passworts nicht extrahieren
Alte PKZIP-Dateien und der Known-Plaintext-Angriff
- Die übergebenen Dateien waren ALLBAS.ZIP und CODMAY93.ZIP; beide waren mit frühem PKZIP erstellt und passwortgeschützt
- Das Zip-Format jener Zeit nutzte ZipCrypto, das für einen Known-Plaintext-Angriff anfällig war; mit der Open-Source-Implementierung bkcrack ließ sich das ausnutzen
- Für diesen Angriff ist die Vorhersage von 12 Byte Klartext an einer bekannten Position innerhalb der ZIP-Datei nötig
- ALLBAS.ZIP enthielt mehrere Dateien mit den Endungen
.BAS,.INC,.ZIPund.EXE, und einige Einträge waren mit der Kompressionsmethode Store gekennzeichnet- Store-Einträge sind bereits binäre, unkomprimierte Dateien, sodass sich Klartext vorhersagen lässt, ohne ein Kompressionsergebnis treffen zu müssen
- Auch ZIP-Dateien selbst waren als Store-Einträge enthalten, und da ZIP-Dateien am Anfang einen PK-Header haben, eignen sie sich gut als Klartextkandidaten
Klartextkandidat finden: der erste Dateiname im inneren ZIP
- Ziel des Angriffs war die innere ZIP-Datei OLDCOD.ZIP innerhalb von ALLBAS.ZIP
- Der PK-Header am Anfang einer ZIP-Datei enthält unter anderem die Länge des Dateinamens und der Zusatzfelder; kennt man den ersten Dateinamen, lässt sich der für den Angriff benötigte Klartext konstruieren
- Wenn der Dateiname mindestens 8 Zeichen lang ist, lassen sich zusammen mit Erweiterungen wie
.BASoder.INCsowie den Bytes für Dateinamengröße und Zusatzfeldlänge die benötigten 12 Byte gewinnen - Im schlimmsten Fall hätte man einen Dateinamen aus Großbuchstaben und Zahlen mit maximal 8 Zeichen plus Erweiterung bruteforcen können, tatsächlich war das aber nicht nötig
- Tim Jenkin besaß eine andere Version von OLDCOD.ZIP und konnte mitteilen, dass die erste Datei darin COMKEY.BAS war
Schlüsselwiederherstellung mit bkcrack
- Um COMKEY.BAS als Klartextkandidaten einzuspeisen, wurde ein einfaches Perl-Programm geschrieben und der Angriff in der Form
bkcrack -C ALLBAS.ZIP -c OLDCOD.ZIP -p ... -o 26 -j 8ausgeführt - Nach 23 Minuten fand bkcrack die folgenden Schlüssel
98e0f009 48a0b11a c70f8499
- Mit demselben Schlüssel wurde ALLBAS.ZIP entschlüsselt und ALLBAS-DECRYPTED.ZIP erzeugt; derselbe Schlüssel funktionierte auch für CODMAY93.ZIP, woraus CODMAY93-DECRYPTED.ZIP entstand
- Als Alternative hätte man andere innere ZIP-Dateien auf dieselbe Weise angreifen und, falls das ebenfalls scheitert, Dateinamen bruteforcen können
- Ein später geprüfter Kandidat TECOD5.BAS fand denselben Schlüssel in nur 38 Sekunden; die Wahl eines geeigneten Klartexts hat also großen Einfluss auf die Angriffsgeschwindigkeit
Ausführung des entschlüsselten Codes
- Die beiden Programme wurden in DOSBox mit PowerBASIC kompiliert und ausgeführt
- RANDOM.BAS: wurde verwendet, um Random-Number-Disketten für die Nutzung als One-Time-Pad zu erzeugen
- TECOD.BAS: wurde verwendet, um per E-Mail zu sendende Nachrichten zu ver- und entschlüsseln
- Der kompilierte Code und die erzeugten ausführbaren Dateien liegen in jgc-vula-september-2024
- Kompiliert wurde mit PowerBASIC Compiler Version 3.00b; für TECOD.BAS wurden 2.575 Statements und 2.329 Zeilen angezeigt, für RANDOM.BAS 2.194 Statements und 1.940 Zeilen
- RANDOM.EXE nutzte drei verschiedene Verfahren zur Erzeugung von Zufallszahlen; eines davon basierte auf einem vom Benutzer direkt eingegebenen Zufallsschlüssel
- TECOD.EXE war passwortgeschützt, und das eingebaute Passwort in dieser Version war TIMBOBIMBO, im Code durch verteilte Zeichenreihenfolge abgelegt
- Tim Jenkin integrierte dieses Passwort auf einfache, aber verschleierte Weise in das Programm
- Je nach an unterschiedliche ANC-Mitglieder verteilten Programmversionen war das Passwort verschieden
- Ein Handbuch für Personen, die das Programm selbst ausführen möchten, steht unter TECOD_HLP.pdf bereit
Details zur damaligen Betriebsweise
- Die Beispielausführung bestand darin, mit RANDOM.EXE Zufallsdaten für Schlüssel in RANDATA.1 zu erzeugen, dann PLAIN.TXT zu verschlüsseln und in PLAIN.BIN zu verwandeln und anschließend wieder zurückzuwandeln
- Sämtliche Kryptovorgänge waren so ausgelegt, auf einer RAM-Disk durchgeführt zu werden
- Im Verschlüsselungsbeispiel lagen die Programmdateien
TECOD.EXEundTECOD.CNFauf der Diskette A:, die Datendiskette mit den Schlüsseldateien auf B:, und die RAM-Disk auf R: - Im Verschlüsselungsschritt musste der Dateiname
RANDATA.1in SNUM umbenannt werden; im Entschlüsselungsschritt mussteRANDATA.1auf B: den Namen RNUM tragen - Das Programm enthielt Funktionen zum Vernichten von Schlüsselmaterial nach Gebrauch, zur Prüfung der Verteilung erzeugter Zufallsbytes und zur ausdrücklichen Nutzung einer RAM-Disk
1 Kommentare
Hacker-News-Kommentare
Interessant an Vula war, dass die mangelnde Benutzerfreundlichkeit des Systems letztlich zu seinem Untergang führte
Selbst äußerst engagierte Aktivisten, die gegen ein mörderisches Regime für die Freiheit kämpften, konnten das System nicht richtig benutzen
Sie ließen Dokumente unverschlüsselt zurück, die Schlüssel waren leicht zu bekommen, und weil die Software zu umständlich war, wurden Teile wichtiger Kommunikation im Klartext übertragen
Wir alle wissen, wie mühsam die Einrichtung und korrekte Nutzung von PGP ist, und am Ende gilt: Sicherheit ist Benutzerfreundlichkeit
Noch ein wenig mehr zu Vula: https://shkspr.mobi/blog/2014/01/the-hardest-problem-in-encr...
Benutzerfreundlichkeit wirkt in den meisten Fällen in Richtung geringerer Sicherheit
Ich habe mir den Zufallszahlengenerator für das One-Time-Pad zur Sicherheit angesehen; Melissa O'Neil hätte ihn vermutlich gemocht. Er liegt fast bei PCG
Es wird der lineare Kongruenzgenerator (LCG)
Randdes PowerBASIC-Systems verwendet, um eine von drei neuen Funktionenrand1-3auszuwählen, und zwei davon benutzen unterschiedliche LCGshttps://github.com/Vulacode/RANDOM/blob/d6a1a1d694b22e6a115b...
Die Pseudozufallszahlengeneratoren scheinen vom System-Zufallszahlengenerator geseedet zu werden, daher könnte man das One-Time-Pad letztlich zurückentwickeln, wenn man nur den initialen Seed des System-LCG wiederherstellt
Ich kenne die Seed-Größe des System-LCG nicht, aber wenn es 32 Bit sind, könnte man den Seed-Zustand wohl einfach bruteforcen und die Ergebnisse mit einer Entropieanalyse prüfen und das Ganze in unter einer Stunde knacken
„Entwirf niemals deine eigene Verschlüsselung“ ist zwar die erste Regel, aber wenn man sich Ende der 80er mit cooler neuer Technologie beschäftigt hat, konnte das vielleicht wie eine Ausnahme wirken
Der gesamte Zusammenbruch der Apartheid in Südafrika ist ziemlich interessant. Von diesem Aspekt wusste ich fast nichts
Als interessante Randnotiz: Die BDS-Bewegung (Boykott, Desinvestition, Sanktionen) begann hier, und damals gingen die meisten davon aus, dass die Apartheid niemals enden würde
Aber über lange Zeit wurde an vielen Druckpunkten kontinuierlich Druck aufgebaut, was großen Stress erzeugte und schließlich zum Zusammenbruch führte
Dass diese Arbeit auf einem Toshiba T-100 gemacht wurde, ist ebenfalls ziemlich interessant, und es ist ein toller Computer
Interessant. Südafrika hat wirklich eine Menge durchgemacht. Hoffentlich dreht das heutige GNU die Weltuntergangsuhr wieder zurück
Empfehlenswert ist Action Kommandant. Es gibt einen Einblick in das Leben von Ashley Kriel, Märtyrer und Stolz von Bonteheuwel
Im Englischunterricht an der Sekundarschule lernte ich Athol Fugard durch einen radikalen Lehrer kennen, der in den 80ern der Überwachung entkam und von Südafrika nach Kanada ging, und das hat meinen Horizont erweitert
Ich wünsche den Menschen in Südafrika ebenfalls alles Gute. Ein Land mit so vielen talentierten Menschen und so viel natürlichem Reichtum verdient viel Besseres. Zumindest scheint die Ära der verkrusteten Politik innerhalb des ANC vorbei zu sein
Rust-Code zum Bruteforcen: https://github.com/rhulha/ZipMcKracken
Operation Vula, 8-Bit-Computer, DTMF-Töne und Akustikkoppler — interessantDie CIA/NSA bekam wohl Wind davon, dass Operation Vula mit einem kommerziellen Philips PX-1000 mit eingebautem DES betrieben wurde, und bestach Philips, um eine Hintertür in das Produkt einzubauen: https://www.cryptomuseum.com/crypto/philips/px1000/
Statt DES mit Hintertür benutzte er One-Time-Pads, die ein Kurier per Diskette zu jeder beteiligten Partei brachte
Selbst wenn in Südafrika eine solche Diskette abgefangen worden wäre, wären nur die Nachrichten dieses Empfängers offengelegt worden, und ohnehin wäre das wohl bald entdeckt worden
Aber die Schlüssel für ein One-Time-Pad mit einem Pseudozufallszahlengenerator zu erzeugen, ist naiv
Der Kern eines One-Time-Pads ist die Verwendung wirklich zufälliger Schlüssel, um echte Sicherheit zu erreichen. Mit Schlüsseln der hier verwendeten Art hätte man auch einfach nur Seeds austauschen und sie lokal erzeugen können; dann hätte man die Kuriere nicht in Gefahr bringen müssen
Ich verstehe, dass der Entwickler Autodidakt war und sogar dabei noch lernte, aber wenn man mit wirklich wichtigen Geheimnissen arbeitet, sollte man solche Fehler nicht machen
Allerdings ist es auch nicht einfach, große Mengen echter Zufallszahlen zu erzeugen. Am Ende müsste man wohl eigene Hardware bauen, und kommerzielle Geräte sind wahrscheinlich größtenteils manipuliert
Wenn man ein „altes“ ZIP-Passwort knacken muss und ein paar Zeichen im Archiv kennt, gibt es kaum etwas Besseres als das hier: https://github.com/kimci86/bkcrack