Bereits 2018 gab es auf der Histocrypt einen Vortrag zu dem
Chiffrieralgotihmus:
Design and Strength of a Feasible Electronic Ciphermaschine
from the 1970s; Jaap van Tuyll
Auf der Internetseite des Cryptomuseum wurde die PX-1000 in zwei Varianten vorgestellt.
Die erste Variante zeigt die PX-1000 mit einem Standard DES Chiffrieralgorithmus.
Die nachfolgende Variante, PX-1000cr, ist eine Variante die von der NSA programmiert wurde.
Beide werden hier betrachtet.
Zur Analyse kommen folgende Programme zur Anwendung:
Disassemblierung mittels:
f9dasm M6800/1/2/3/8/9 H6309 Binary/OS9/FLEX9 Disassembler V1.78
Copyright (c) 2000 Arto Salmi
Parts Copyright (c) 2001-2019 Hermann Seib
Parts Copyright (c) 2013 Colin Bourassa
Parts Copyright (c) 2014-2015 Rainer Buchty
Die Analyse, Kommentierung und Bewertung des disassemblierten Code,
wurde durch mich realisiert. Insbesondere die Ermittlung von Daten-
bereichen und Textabschnitten, waren anfänglich Hauptschwerpunkt,
auf deren Basis die weitere Struktur des Programmes ermittelt wurde.
Für die erste Analyse auch unabdingbar ist:
- PX-1000 Service-Manual
- Circiut-Diagrams
- Operating-Instructions
- Manual
- Broschure
- Hitatchi 8/16 Bit Microprocessor Data Book, 1991
- 68HC11 Reference Manual
- HD6301 HD6303 Series Handbook, 1989
- Kenntnisse der Programmierung von LCD-Controller der HD44xxx Serie.
- Für Detailfragen an der Hardware: Logic 2, (C) 2020 Saleae, Inc.
Genutzt wurde die Bachelor Arbeit von Ben Brücker.
Desweiteren die Veröffentlichung des Cryptomuseum und die Bereitstellung der EPROM-Inhalte
der beiden PX-1000 Geräte.
Die Möglichkeit der Verifikation mittels einer PX-1000cr des NVA-Ausstellung Harnekop.
Assembler-Debugger für die abschnittsweise Prüfung:
THRSim11 68HC11 Simulator (C) Harry Broeders
Zur Analyse des Assemblercodes wurden Abschnitte des Programmes mittels
des THRSim11 erfolgreich getestet.
Mit den Ergebnissen, die durch den THRSim11 verifiziert werden konnten,
wurde ein gleichwertes Softwareprogramm in C#-2010 sowie weitere Analyse-
Tools realisiert.
Software Simulation/Emulation der Versionen PX-1000cr und PX-1000 DES
Und ganz wichtig: Zur Entspannung am Feierabend - ein Maximator der Augustiner Brauerei München.
In den weiteren Betrachtungen beziehe ich mich auf die Zusammenfassung
der Analyse des Maschinen-Code: PX-1000cr.PDF
PX-1000 DES
Bei der Betrachtung und Analyse des implementierten DES, war es sehr hilfreich
das in der März und April Ausgabe der BYTE 1979, Volume 4 Number 3 Seite 66 …74
und Number 4 Seite 100 .. 130 ff, die Portierung des DES von einem Intel 8294 System auf
ein 6502 System (KIM-1) samt der Datenstruktur beschrieben ist. Lit*6
Robert V Meushaw, 4188 Brittany Dr, Ellicott City MD 21043
Die Datenstruktur von IP bis S-Boxen sind 1:1 in der PX-1000 DES wiederzufinden.
Das Senden- bzw. Empfangen, über den Akustikkoppler, erfolgt in einem Sonderderformat:
Der Sendungskopf wird mit 300 Baud, Datenformat 8bit, Parität Even, 2 Stopp-Bit
und das Chiffrat wird mit 600 Baud, bei gleichen Datenformat 8E2, gesendet.
Beim DUMP sind die Geschwindigkeiten beim Sendungskopf 300 Baud und den
gespeicheten Texten 1200 Baud.
Eine weitere Besonderheit sind die Frequenzen, entgegen der V.23 Regelungen.
Entsprechend der Regelung für 600 Baud ist für die 1 eine Frequenz von 1300 Hz und für
die 0 1700 Hz definiert. Das gilt hier für die Geschwindigkeiten, 300, 600 und 1200 Baud.
In den Regelungen zur V.23 ist für die Geschwindigkeit von 1200 Baud sind die Frequenzen
von 1300 Hz und 2100 Hz festegelegt, 300 Baud wird nicht erwähnt.
Impulsbild der seriellen Aussendung
Bild oben: Gesamtsendung
Bild mitte: Kopf-Datei
Bild unten: Chiffrat
Audio-Beispiel
Aufbau des gesendeten Geheimtextes:
Kopf-Daten: 4 byte:
0x01, 0x80, 0x18, 0x4d
0x01 ist die Blocknummer, erster Textblock
0x8018 ist das Kennzeichen Chiffrat + Länge des Chiffrates ohne 3 byte Prüfsumme
0x4d steht für Chiffrat, 0x48 ist das Kennzeichen für DUMP
Chiffrat: 27 Zeichen, 20 chiffrierte A:
0x01, 0xb5, 0x7f, 0xc3, 0xf9, 0x74, 0xb8, 0x3b,
0x06, 0x33, 0xcc, 0x66, 0x5e, 0xb1, 0xf6, 0x5e,
0xf3, 0x2d, 0x72, 0xca, 0x7c, 0x39, 0x14, 0xd2,
0xd9, 0xa6, 0x44
Zuordnung GTX zum Klartext und dem Prüfbyte:
GTX Teil1: 0x01, 0xb5, 0x7f, 0xc3, 0xf9, 0x74, 0xb8, 0x3b
Klartext: "(AAAAAAA"
Prüfsumme: 0x01 ⊕ 0xb5 ⊕ 0x7f ⊕ 0xc3 ⊕ 0xf9 ⊕ 0x74 ⊕ 0xb8 ⊕ 0x3b
= 0x06
GTX Teil2: 0x33, 0xcc, 0x66, 0x5e, 0xb1, 0xf6, 0x5e, 0xf3
Klartext: "AAAAAAAA"
Prüfsumme: 0x33 ⊕ 0xcc ⊕ 0x66 ⊕ 0x5e ⊕ 0xb1 ⊕ 0xf6 ⊕ 0x5e ⊕ 0xf3
= 0x2d
GTX Teil3: 0x72, 0xca, 0x7c, 0x39, 0x14, 0xd2, 0xd9, 0xa6
Klartext: "AAAAA" 0x8d 0x00 0x00
Prüfsumme: 0x72 ⊕ 0xca ⊕ 0x7c ⊕ 0x39 ⊕ 0x14 ⊕ 0xd2 ⊕ 0xd9 ⊕ 0xa6
= 0x44
Das Zeichen "(" und "0x8d" werden von der Software erzeugt und chiffriert.
"0x8d" entspricht "NEW LINE" und wird im Programm auch als Kennzeichen für
das Textende verwendet.
Nach dem Dechiffrieren werden diese nicht im Display dargestellt.
Zur Chiffrierung und Dechiffierung mittels DES wird der Modus "ECB" angewendet.
Nach dem Entfernen der Prüfbytes können die Texte mittels CrypTool 2.1 de-
chiffriert werden.
Der hier verwendete Schlüssel lautet: "AAAAAAAAAAAAAAAA", der in der PX-1000
in "0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11" umgewandelt wird.
Kurzbetrachtung des DES nach der Analyse
Die Chiffrierung erfolgt im ECB-Modus, ohne Initialisierungsvektor.
Zum ECB-Modus schreibt Microsoft in der MSDN:
Im ECB-Modus (Electronic Codebook) wird jeder Block einzeln verschlüsselt.
Das heißßt, dass alle identischen Klartextblöcke innerhalb einer Nachricht bzw.
in unterschiedlichen Nachrichten, die mit demselben Schlüssel verschlüsselt wurden,
in identische Geheimtextblöcke umgewandelt werden.
Wenn der zu verschlüsselnde Klartext genügend viele Wiederholungen enthält,
kann der Geheimtext blockweise dechiffriert werden. Ebenso können Blöcke in
schädigender Absicht und unerkannt ersetzt und geändert werden.
Wenn ein einzelnes Bit des Geheimtextblockes geändert wird, ändert sich auch
der gesamte entsprechende Klartextblock.
Zur letzten Aussage, bezüglich der Änderung von Geheimtext -bits oder -bytes,
wird in der PX-1000 ein Prüfbyte nach jedem 64bit Block eingefügt.
Dies ermöglicht das Erkennen eines Fälschungs- bzw. Änderungsversuches
des Geheimtextes.
Die erste Aussage ist hier dargestellt:
Klartext: 100 * A
Schlüssel: 16 * A
Geheimtext mit Prüfbytes, diese unterstrichen:
0x01 0xb5 0x7f 0xc3 0xf9 0x74 0xb8 0x3b 0x06
0x33 0xcc 0x66 0x5e 0xb1 0xf6 0x5e 0xf3 0x2d
0x33 0xcc 0x66 0x5e 0xb1 0xf6 0x5e 0xf3 0x2d
0x33 0xcc 0x66 0x5e 0xb1 0xf6 0x5e 0xf3 0x2d
…
0x72 0xca 0x7c 0x39 0x14 0xd2 0xd9 0xa6 0x44
Ab dem zweiten 64bit Block wiederholt sich der Geheimtext!
Mit der PX-1000DES Software kann man dies nachvollziehen.
Analyse der Passwort-Verarbeitung
Das Passwort, das die Grundlage des Chiffrierschlüssels ist, wird in zwei Abschnitten
zusammengefasst.
Im ersten und im zweiten Abschnitt, werden aus den 7bit ASCII-Zeichen nur die unteren 4bit
extrahiert. Was zur Folge hat das aus den 7bit nur 4bit zur Schlüsselbildung verwendet werden.
Daraus ergibt sich das von den 127 möglichen Zeichen nur 16 Zeichen pro Byte genutzt werden.
Die Größe des Schlüssels beträgt damit 264 bzw. 1,85*1019.
Für die Prüfung und Berechnung wurde in die Speicherzellen 0x00D6 bis 0x00E5 Zufallsfolgen,
via C#, eingetragen.
Betrachtet von der ASCII Tabelle sind dann folgende Zeichen gleichbedeuten:
Umwandlung des Zeichensatz
0x00
0x01
0x02
0x03
0x04
0x05
0x06
0x07
0x08
0x09
0x0A
0x0B
0x0C
0x0D
0x0E
0x0F
0x02
Ā
0x03
ā
0x04
Ä
0x05
Ö
0x0D
NL
0x20
0x21
!
0x22
''
0x23
#
0x24
$
0x25
%
0x26
&
0x27
'
0x28
(
0x29
)
0x2A
*
0x2B
+
0x2C
,
0x2D
-
0x2E
.
0x2F
/
0x30
0
0x31
1
0x32
2
0x33
3
0x34
4
0x35
5
0x36
6
0x37
7
0x38
8
0x39
9
0x3A
:
0x3B
;
0x3C
<
0x3D
=
0x3E
>
0x3F
?
0x40
@
0x41
A
0x42
B
0x43
C
0x44
D
0x45
E
0x46
F
0x47
G
0x48
H
0x49
I
0x4A
J
0x4B
K
0x4C
L
0x4D
M
0x4E
N
0x4F
O
0x50
P
0x51
Q
0x52
R
0x53
S
0x54
T
0x55
U
0x56
V
0x57
W
0x58
X
0x59
Y
0x5A
Z
0x5B
[
0x5C
\
0x5D
]
0x5E
Ü
0x60
£
0x61
a
0x62
b
0x63
c
0x64
d
0x65
e
0x66
f
0x67
g
0x68
h
0x69
i
0x6A
j
0x6B
k
0x6C
l
0x6D
m
0x6E
n
0x6F
o
0x70
p
0x71
q
0x72
r
0x73
s
0x74
t
0x75
u
0x76
v
0x77
w
0x78
x
0x79
y
0x7A
z
0x07B
ä
0x7C
ö
0x7E
ü
0x7F
Ø
Das bedeutet selbst für komplexe Passwörter mit der festgelegten Passwort-Länge von 16 Zeichen:
Sa3UnDCh)f&RiE"$
ergibt in der Umwandlung z. B:
SASUNDCHIFFRIERD
Im RAM, von Speicherzelle 0x0151 bis 0x0160, wird das Passwort entsprechend dargestellt:
S A S U N D C H I F F R I E R D
0x03, 0x01, 0x03, 0x05, 0x0e, 0x04, 0x03, 0x08, 0x09, 0x06, 0x06, 0x02, 0x09, 0x0e, 0x02, 0x04
Nach der Abarbeitung der Passwort-Folge, Abbildung Seite 2 "Passwort-Verarbeitung", werden
in den Speicherzellen die Werte abgespeichert:
0x0075
0x0076
0x0077
0x0078
0x0079
0x007A
0x007B
0x007C
Die Werte sind immer ein Vielfaches von 15, dezimal.
Wichtig für die nachfolgende Betrachtung des Chiffrieralgorithmus ist das, die in den
Speicherzellen 0x0075 bis 0x007C, eingeschrieben Werte als Konstanten betrachtet werden
können. Diese werden nur überschrieben, wenn das Passwort geändert wird.
nicht anders verhält es sich mit dem Endergebnis des ersten Teiles der Funktion:
Die Ergebnisse im ersten Teil, in den Speicherzellen 0x0075 bis 0x0080 sind immer
ein Vielfaches von 15, dezimal.
Das Ergebnis des zweiten Teils ist auch trivial:
0x008A
0x008B
0x008C
0x008D
0x008E
0x008F
0x0090
0x0091
0x0092
0x0093
0x0094
0x0095
0x0096
0x0097
0x0098
0x0099
In Abhängigkeit von dem Ergebnis der Decoder-Funktion
Durch die Decoder-Funktion und der Maskierung des Passwortes sind die Speicherwerte immer:
4bit High = Invertierte 4bit LOW
4bit Low unverändert.
In der Tabelle sind entsprechend die Ergebnisse dargestellt:
0x00
0x01
0x02
0x03
0x04
0x05
0x06
0x07
0x08
0x09
0x0A
0x0B
0x0C
0x0D
0x0E
0x0F
0xF0
0xE1
0xD2
0xC3
0xB4
0xA5
0x96
0x87
0x78
0x69
0x5A
0x4B
0x3C
0x2D
0x1E
0x0F
Die höherwertigen 4bit in der ersten Zeile spielen keine Rolle
Die Möglichkeiten des Decoders, werden dadurch nicht genutzt.
Von den 64 möglichen Varianten werden nur 16 benutzt.
Für die Suche nach der Hintertür sind hier folgende Punkte interessant:
- Maskierung des Passwortes, Filterung der unteren 4 Bit,
- die Speicherzellen 0x0075 bis 0x007C werden nach der Passwort-Verarbeitung
nicht mehr verändert und werden im Abschnitt Rundenschlüssel 2 genutzt,
- Verdichten und Filtern der Werte im Speicherbereich 0x007D bis 0x0080,
- Umkodierung des Passwortes in die Speicherbereiche 0x008A bis 0x0098,
- weiteres Verkürzen des Passwortes von 16 auf 15 byte,
- durch die erste Festlegung das in der Speicherzelle 0x0099 der Wert 0xFF eingeschrieben wird.
Zeichensatz der PX-1000
Abbildung des Zeichensatzes der PX-1000, sie ist für die Chiffrierung und Dechiffrierung
nicht bedeutend.
Für die Ausgabe auf dem LCD und der Chiffrierung und Dechiffrierung wird,
entsprechend dem 7-Bit ASCII-Zeichensatz, das höherwertige Bit ausgeblendet.
Bei der Ausgabe auf dem Drucker, wie dargestellt, wird entsprechend das Parity gesetzt.
RAW: E1 E2 63 E4 65 66 E7 E8 69 6A EB 6C ED EE 6F F0 71 72 F3 74 F5 F6 77 78 F9 FA
Txt: a b c d e f g h i j k l m n o p q r s t u v w x y z
RAW: 41 42 C3 44 C5 C6 47 48 C9 CA 4B CC 4D 4E CF 50 D1 D2 53 D4 55 56 D7 D8 59 5A
Txt: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
RAW: B1 B2 33 B4 35 36 B7 B8 39 30 2D 3A BB 2E AC 8D
Txt: 1 2 3 4 5 6 7 8 9 0 - : ; . , wr/zv
RAW: 21 22 A3 24 82 84 05 DE 28 BD 2B 3C 3F AF DB // shift left
Txt: ! " # $ Ā Ä Ö Ü ( = + < ? / [
RAW: C0 A6 60 AA 03 7B FC 7E A9 FF A5 BE 27 5C DD // shift right
Txt: @ & £ * ā ä ö ü ) Ø % > ' \ ]
Die Klartexte sind im Speicher dementsprechend abgespeichert.
Analyse des ersten Teil der Erzeugung des Rundenschlüssels
Die Substitutionstabelle, 0xFEDB, mit der UND-Verknüpfung sowie deren XOR-Verknüpfung mit dem
nachfolgenden Wert erzeugt eine Byte-Folge mit einer Länge von 32 byte.
Die kaskadierte Bearbeitung der Speicherinhalte sorgt für eine schrittweise Veränderung der Speicherinhalte.
In der Literatur wird diese Arbeitsweise auch polynome Substraktion genannt.
0x008A
0x008B
0x008C
0x008D
0x008E
0x008F
0x0090
0x0091
0x0092
0x0093
0x0094
0x0095
0x0096
0x0097
0x0098
0x0099
0xC3
0xB4
0x1E
0x69
0x78
0xB4
0x96
0xE1
0xD2
0x69
0x0F
0x1E
0x69
0x0F
0x0F
0xFF
0x93
0xB4
0x1E
0x69
0x78
0xB4
0x96
0xE1
0xD2
0x69
0x0F
0x1E
0x69
0x0F
0x0F
0xFF
0x93
0x29
0x1E
0x69
0x78
0xB4
0x96
0xE1
0xD2
0x69
0x0F
0x1E
0x69
0x0F
0x0F
0xFF
0x93
0x29
0x6C
0x69
0x78
0xB4
0x96
0xE1
0xD2
0x69
0x0F
0x1E
0x69
0x0F
0x0F
0xFF
0x93
0x29
0x6C
0x96
0x78
0xB4
0x96
0xE1
0xD2
0x69
0x0F
0x1E
0x69
0x0F
0x0F
0xFF
0x93
0x29
0x6C
0x96
0xb4
0xB4
0x96
0xE1
0xD2
0x69
0x0F
0x1E
0x69
0x0F
0x0F
0xFF
0x93
0x29
0x6C
0x96
0xb4
0x28
0x96
0xE1
0xD2
0x69
0x0F
0x1E
0x69
0x0F
0x0F
0xFF
0x93
0x29
0x6C
0x96
0xb4
0x28
0x6C
0xE1
0xD2
0x69
0x0F
0x1E
0x69
0x0F
0x0F
0xFF
0x93
0x29
0x6C
0x96
0xb4
0x28
0x6C
0x97
0xD2
0x69
0x0F
0x1E
0x69
0x0F
0x0F
0xFF
0x93
0x29
0x6C
0x96
0xb4
0x28
0x6C
0x97
0xA0
0x69
0x0F
0x1E
0x69
0x0F
0x0F
0xFF
0x93
0x29
0x6C
0x96
0xb4
0x28
0x6C
0x97
0xA0
0xC2
0x0F
0x1E
0x69
0x0F
0x0F
0xFF
0x93
0x29
0x6C
0x96
0xb4
0x28
0x6C
0x97
0xA0
0xC2
0x4A
0x1E
0x69
0x0F
0x0F
0xFF
0x93
0x29
0x6C
0x96
0xb4
0x28
0x6C
0x97
0xA0
0xC2
0x4A
0x79
0x69
0x0F
0x0F
0xFF
0x93
0x29
0x6C
0x96
0xb4
0x28
0x6C
0x97
0xA0
0xC2
0x4A
0x79
0x93
0x0F
0x0F
0xFF
0x93
0x29
0x6C
0x96
0xb4
0x28
0x6C
0x97
0xA0
0xC2
0x4A
0x79
0x93
0x0F
0x0F
0xFF
0x93
0x29
0x6C
0x96
0xb4
0x28
0x6C
0x97
0xA0
0xC2
0x4A
0x79
0x93
0x0F
0x1F
0xFF
0x93
0x29
0x6C
0x96
0xb4
0x28
0x6C
0x97
0xA0
0xC2
0x4A
0x79
0x93
0x0F
0x1F
0xAE
0x32
0x29
0x6C
0x96
0xb4
0x28
0x6C
0x97
0xA0
0xC2
0x4A
0x79
0x93
0x0F
0x1F
0xAE
:
0x32
0x56
0xD9
0x28
0x6D
0x50
0x88
0x3F
0x01
0xC0
0xD5
0xF7
0x36
0x5E
0x3A
0xAE
Tabelle: Kaskaden-Funktion
Vereinfachte Darstellung:
Abb.: Rundenschlüssel 1, ein Runde.
Im GRATAG TC-850 wird diese Funktion auf 31 Byte und Schritte adäquat verwendet.
In Bruce Schneider, Applied Cryptography bzw. Angewande Kryptographie
wird auf das NSA Patent US 5.237.615 verwiesen. Bereits 1963 wurde im
US Patent US 3.364.308 sowie weiteren Patenten so verfahren.
Die letzte Zeile der Tabelle zeigt das Speicherabbild nach den 32 Runden, die der Rundenschlüssel 1
für jedes zu de- bzw. chiffrierende Zeichen durchläuft.
Es wird also die Speicherzelle 0x008A schrittweise mit den Werten der Substitutionstabelle 0xFEDB verknüpft,
in der Reihenfolge: 06 80 60 82 CC 2B 4B C3 CF 7B 18 E0 0C 78 0A 0B 06 80 60 82 CC 2B 4B C3 CF 7B 18 E0 0C 78 0A 0B
Der Teilabschnitt "Register schieben rechts" mit der XOR Verknüpfung:
Die anschließende Maskierung mit 0x55 erzeugt immer Werte deren Bit 0, 2, 4 und 6 auf 1 oder 0 stehen.
Also: 0, 1, 4, 5, 10, 11, 14, 15, 40, 41, 44, 45, 50, 51, 54, 55
Im weiteren "Register schieben links" mit der UND-Verknüpfung:
erzeugt, wie bei dem vorherigen Teil, Werte deren Bit 1, 3, 5 und 7 auf 1 oder 0 gesetzt werden.
Im Anschluß werden die beiden Teilabschnitte über ein ODER Verknüpft. Die ein komplettes
Abbild möglicher Bits haben können. Im Bereich von 0x00 bis 0xFF.
Die Ergebnisse werden in die Speicherzellen 0x008A bis 0x0099 geschrieben.
Es bildet die Grundlage für die im Rundenschlüssel 2 erfolgte Schlüsselbildung mittels
Substitution über die Tabellen 0xFE5B bis 0xFEDA.
Analyse des zweiten Teils der Erzeugung des Rundenschlüssels
Aus den erzeugten Byte-Folgen, die Speicherzellen 0x0075 bis 0x0099, wird im
ersten Abschnitt eine Substitution durchgeführt.
Über den High-Teil eines Bytes sowie dem Low-Teil des gleichen Bytes wird
auf Byte der Substitutionstabelle gezeigt, den Speicherzellen 0xFE5B bis 0xFE9A.
Die Substitutionstabelle 0xFE5B bis 0xFE9A stellt eine Permutationstabelle dar.
Die Anschließende OR-Verknüpfung setzt die zwei Substitute (Low) zu einem
neuen Wert zusammen die in High-Wert fest 0 und im Low-Wert 0 … f betragen kann.
Der High-Wert des Byte wird über die XOR-Funktion aus den High-Wert des nach der
Passwort-Verarbeitung festen Werten, der Speicherzellen 0x0079 bis 0x007C, bestimmt.
Der Low-Wert ist der ermittelte Wert aus der Substitution der Permutationstabelle
XOR-Verknüpft mit den festen Low-Werten der Speicherzellen 0x0079 bis 0x007C.
Die in der Substitution verwendeten Speicherzellen, sind wie oben beschrieben,
0x0075 bis 0x007C, Konstanten. Das hat Auswirkungen auf die Ergebnisse der
weiteren Verknüpfungen. Betrachten wir uns das Ausgabeergebnis der ersten
Substitution:
- nach der OR-Verknüpfung von zwei 4-bit Werten wird das Ergebnis XOR-verknüpft
mit der Konstante aus der Speicherzelle 0x007C,
- die Ausgabe der OR-Verknüpfung kann nur Werte im Bereich von 0x00 bis 0x0F
annehmen,
- die XOR-Verknüpfung sorgt dafür das im Ergebnis der höherwertige Teil des
Bytes den Wert der Konstante der Speicherzelle 0x007C annimmt,
Bsp.: 0x0E XOR 0xA5 = 0xAB,
- betrachtet man jetzt die Decoder-Tabelle dann kann man auf alle drei Werte
rückschließen:
. das Ergebnis 0xAB führt zur Aussage das die Konstante 0xA5 lauten muß,
daraufhin kann man rückwirkend 0xAB XOR 0xA5 = 0x0E berechnen.
Das Ergebnis wird in den Speicherzelle 0x0086 bis 0x0089 abgelegt.
Hier liegt ein Angriffspunkt, da in den Zellen 0x0086 bis 0x0089 die High-Werte
bekannte Größen - aus der Passwort-Verarbeitung - sind und der Low-Wert
entsprechend der Decoder-Tabelle ermittelt werden kann.
Im zweiten Teil erfolgt ebenfalls eine Substitution, wobei die Eingangsparameter
das Bit 7 der Speicher- 0x0083 bis 0x0089 Byte sind.
Im weiteren werden aus der Substitution, bezeichnet mit:
Register A = 0xFE9B + B + Runde Nr. 1 … 8
aus den Bytes wird nur ein Bit extrahiert das dann im Byte mit der nachfolgenden
doppelten XOR Verknüpfung überführt wird.
Es könnte als 8 Runden Feistel interpretiert werden.
Die doppelte Verknüpfung des Substituts mit den Speicherzellen 0x0082 und 0x0086
führt nicht zur Verbesserung.
Das anschließende rotierende Register der das erzeugte Additionsbyte, je nach
Anzahl des chiffrierten Textes Modulo 8, stellt eine Verschleierung dar. Wenn ein
Zyklus auftritt wird dieser durch die Rotation nur verschleiert - voraussgesetzt der
Zyklus ist ungerade. Ist dagegen der Zyklus gerade ist dieser trotz der Rotation
erkennbar.
Chiffrierung und CFB
Das Klartextzeichen bzw. zu dechiffrierende Geheimtextzeichen wird über das XOR
chiffriert bzw. dechiffriert. Entsprechend den Betriebsmodi wird das chiffrierte
Zeichen in das Register 0x0081 eingeschrieben. Beim Dechiffrieren wird das Geheim-
textzeichen zuerst in das Register 0x0081 eingeschrieben und dann anschließend
die folgenden Daten dechiffriert.
Jetzt kommen wir noch zu einer Besonderheit:
Das erste und das letzte chiffrierte Zeichen ist kein Zeichen des eingegebenen
Klartextes! Es handelt sich um ein Zeichen das vor dem ersten Klartextzeichen
der im Speicher steht. Das ersten Zeichen ( = 0x28, und das letzte Zeichen
-wr/zv- = 0x0d.
Somit ist das Klartext- und chiffrierte Zeichen bekannt und es handelt sich bei
dem ersten und letzten Zeichen um ein Geheimtext-Klartext-Kompromittierung.
Sendet man nicht das erste Zeichen, kommt es bei der Dechiffrierung, bedingt
durch den CFB Betriebsmodus, zu keinem sinnvollen Klartext. Fehlerfortpflanzung.
Es liese sich anhand des letzten Zeichen eine Dechiffrierung trotzdem durchführen.
Aufbau des gesendeten Geheimtextes:
Kopf-Daten: 16 byte 0x00
Start-Block: 4 byte 0xFF
Chiffrat: 22 Zeichen ( 1 * "(", 20 * "A", 1 * "0x0d",
das erste und letzte Zeichen wird von der PX erstellt.
Fuß-Daten: 32 byte 0x04
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff
7b bc f8 50 7c 42 cd d0 50 8a 0e 43 74 8b d8 b4 e3 cb e8 36 a4 37
04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04
04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04
0x7b == dechiffrierter Klartext 0x28
0xbc 0xf8 0x50 0x7c 0x42 0xcd 0xd0 0x50 0x8a 0x0e | entspricht dechiffriert
0x43 0x74 0x8b 0xd8 0xb4 0xe3 0xcb 0xe8 0x36 0xa4 | 20 mal A
0x37 == dechiffrierter Klartext 0x0d
Bei diesen PX-1000 werden die Regelungen des V.23 eingehalten.
Die komplette Sendung erfolgt mit der Geschwindigkeit von 600 Baud
mit dem Protokoll 8N2.
Impulsbild der seriellen Aussendung
Bild oben: Gesamtsendung
Bild mitte: Kopf-Datei
Bild unten: Chiffrat
Audio-Beispiel
Erläuterung zum Modem TCM 3101 und TCM 3105.
Die Filterbeschaltung des Modemausgangs und Druckers, in der Variante H,
stellt ein Tiefpasfilter dar. Es arbeitet Bereich von 0 bis 8 MHz.
Berechnet mit LTSpice IV.