Neuigkeiten    Das Projekt    Technik    RoboSpatium    Unterstützung    Stichwortverzeichnis    Download    Reaktionen    Spiele    Gadgets    Kontakt   




<<< Sicheres Kommunikations-Terminal (SKT)         Mikrocontroller-Set >>>

SKT Version 2

Kommunikation über das Internet mit Prototyp 2


Etwas mehr Bedienkomfort

Sicheres Kommunikations Terminal Version 2
Abbildung 1:
Die Kernkomponenten sind ein Arduino UNO, eine PS/2 Tastatur und ein Display mit einer Auflösung von 320x240 Pixel. Sieht wenig elegant aus, funktioniert aber recht gut. Die kommende Version sollte kompakter ausfallen.

Teileliste

Durch den Kauf von Bauteilen über die von mir angegebenen Affiliate-Partnerlinks in der Tabelle (oder in den Bannern auf meinen Seiten) unterstützt ihr meine Projekte ohne dass euch dadurch Zusatzkosten entstehen - vielen Dank!
Die Links anzuklicken bedeutet allerdings keinen Kaufzwang - völlig ungezwungenes Stöbern ist möglich ;-)

Meine frei zugängliche Bildungsplattform ohne einzukaufen mit Hilfe einer Spende oder als Patreon zu unterstützen geht natürlich auch. Vielen Dank an alle, die mir bereits einen Obolus haben zukommen lassen!

Bauteil Online Shops Bemerkung
Arduino UNO Arduino UNO auf eBay

Adruino UNO auf Amazon
Mikrocontroller Board mit mehr als ausreichend Rechenleitung für ein Kommunikationsterminal.
PS/2 Tastatur PS/2 Tastatur auf eBay

PS2 Tastaturen auf Amazon
Nur Tastaturen mit PS/2 Funktionalität können an den Arduino UNO angeschlossen werden!
Display ILI9341 Display ILI9341 auf eBay

Display ILI9341 auf Amazon
2.4 Zoll Diagonale, 320x240 Pixel, gibt's auch mit Touch-Funktion, meine Displays sind ohne
Widerstände Widerstände auf eBay

Widerstände auf Amazon
Kohleschichtwiderstände mit 5% Toleranz sind günstig und für dieses Projekt gut geeignet.

Elektronik

Sicheres Kommunikations Terminal Version 2
Abbildung 2:
Verkabelung der Komponenten.

Verschlüsselung

Um den im Klartext auf dem Microcontroller eingegebenen Text für unbefugte Personen unlesbar zu machen, müssen die Zeichen verschlüsselt werden. Ein sehr altes Verfahren ist die Caesar-Verschiebung, benannt nach Julius Cäsar, in dessen Lebenszeitraum, der von 100 bis 44 vor Christus datiert, diese Verschlüsselungsmethode bereits bekannt war. Bei diesem Verfahren werden die benötigten Zeichen in einer Tabelle gelistet und um einen festen Wert verschoben. In dem hier zu sehenden Beispiel werden die Zeichen des Textes "HELLO WORLD!" um 3 Zeichen nach rechts verschoben, womit sich der verschlüsselte Begriff "KHOOR3ZRUOGB". Darin kann man keine Botschaft erkennen. Auf den ersten Blick fällt aber schon auf, dass in dem verschlüsselten Text z.B. der Buchstabe "O" 3x vorkommt, genau so oft wie der Buchstabe "L" in "HELLO WORLD!". Im Prinzip gibt es nur so viele Varianten, den Ursprungstext zu verschlüsseln, wie es Zeichen in der Tabelle gibt. Das sind in unserem Fall 39. Für heutige Computer stellt die Entzifferung auch ohne Kenntnis des geheimen Schlüsselzeichens kein Problem dar und ist in Sekundenbruchteilen erledigt.
Auf dem Zielsystem wird der Text entschlüsselt, indem die Buchstaben von "KHOOR3ZRUOGB" Buchstabe für Buchstabe um 3 Zeichen in der Tabelle nach links verschoben werden, womit man wieder den Ausgangstext "HELLO WORLD!" erhält.

Caesar Verschluüsselung
Abbildung 3:
Caesar-Verschlüsselung:
Durch Klicken auf die Zeichnung wird eine animierte Version aufgerufen.

Eine Erweiterung des Verfahrens besteht darin, alle Zeichen nicht nur um den selben, festen Wert zu verschieben, sondern ein Schlüsselwort zu verwenden, das unterschiedliche Positionsverschiebungen vorgibt. Je länger der Schlüssel, um so kniffliger wird's, den Ursprungstext ohne Kenntnis des Schlüsselworts zu entziffern.
Mit entsprechendem Rechenaufwand gelingt aber auch das mittlerweile recht schnell, sofern der Schlüssel deutlich kürzer ist als der gesendete Text. Unmöglich wird das Entziffern, wenn der Text kürzer oder zumindest gleich lang wie der gespeicherte Schlüssel ist - daran werden auch Quantencomputer nichts ändern!

Symmetrische Verschlüsselung
Abbildung 4:
Vernam-Chiffre:
Durch Klicken auf die Zeichnung wird eine animierte Version aufgerufen.

Verschlüsseln auf der Kommandozeile

Wie im Video versprochen, hier ein kleines Python-Script, dass den gleichen, nicht wirklich geheimen Geheimschlüssel verwendet, wie der Arduino-Sketch:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/usr/bin/env python  
 
key = "ThisIsNoReallySecretKeyNorIsItStrong!DontSayYouWereNotWarned!"  
keyLen = len(key)  
keyPos = 0  
message = "Type your message here"  
 
f = open("./encrypted-message.zip", "wb")  
for i in range(len(message)):  
    a = message[i:i+1]  # Get the current char of message  
    a_ascii = ord(a)  # Ascii code (=position in our "Alphabet")  
    k = key[keyPos:keyPos + 1] # Current key character  
    k_ascii = ord(k)  # Number equivalent of current key character  
 
    keyPos = keyPos + 1 # next keyPos  
    if keyPos > keyLen:  
      keyPos = 0  
 
    # Now shift a_ascii for k_ascii positions  
    if a_ascii + k_ascii < 256:  
        b_ascii = a_ascii + k_ascii  
    else: # start over at beginning of ascii table  
        b_ascii = a_ascii + k_ascii - 255  
 
    f.write(chr(b_ascii))  
 
f.close()  
 
 
print ("Message \"" +  message + "\" encrypted and stored in encrypted-message.zip")  
    

Speichert den Text in der Datei "encrypt.py"
Ändert in Zeile 6 den Text zwischen den Anführungszeichen. Verwendet nicht mehr als 170 Zeichen!
Speichert die Änderung und startet das Skript mit:
Python encrypt.py

Die somit generierte Datei "encrypted-message.zip" müsst ihr nun an meine Mailadresse safe_001(at)HomoFaciens.de senden. Die "geheime" Nachricht kann ich dann auf meinem Terminal lesen.

Sichere Schlüssel

Voraussetzung für eine sichere Verschlüsselung ist, dass der Schlüssel wirklich aus einer zufälligen Verteilung aller zur Verfügung stehenden Zeichen besteht und möglichst lang im Vergleich zum übermittelten Text ist. Im Optimalfall ist der Schlüssel mindestens so lang wie der Klartext. In dem Softwarebeispiel zu diesem Kapitel lautet der Schlüssel:
"ThisIsNoReallySecretKeyNorIsItStrong!DontSayYouWereNotWarned!"
Ein Byte ist die Grundeinheit für Zeichen in der Welt der Computer. Dieses besteht aus 8 Bits und kann somit zur Darstellung von bis zu 256 unterschiedlichen Zeichen verwendet werden. Das nicht wirklich gute Schlüsselwort verwendet davon nur 27. Ferner kommen viele Zeichen mehrfach vor. Werden die doppelten Zeichen entfernt, so ergibt sich:
"ThisINoRealyScrtKyNng!DYuWd"
In jeder Sprache kommen die zur Verfügung stehenden Buchstaben mit unterschiedlicher Häufigkeit vor. Das ist ein Ansatzpunkt, um schlecht verschlüsselte Botschaften zu entziffern.
Wie man einen wirklich guten Schlüssel mit einem Mikrocontroller generieren kann, dazu werde ich in einem weiteren Kapitel berichten.
Klar sein dürfte, dass der Schlüssel:
"DDDDDDDDDDDDD"
zwar die Bedingung erfüllt, genau so lang wie der Text "HELLO WORLD!" zu sein, im Prinzip aber so schwach ist wie die Caesar-Chiffre.

SKT Version 2 mit Micro SD Karte
Abbildung 5:
Auf eine Micro SD-Karte passen Schlüssel mit einer Länge von mehreren Milliarden Zeichen - ihr könnt also tippen, bis euch die Finger abfallen, ohne dass irgendjemand mit der abgefangenen Botschaft etwas anfangen könnte. Die Kartenleser mit den geheimen Schlüsseln müssen sich selbstverständlich im Innern unserer Burg befinden, also direkt an den Mikrocontroller angeschlossen sein.

Lesen können die so verschlüsselten Botschaften nur diejenigen Personen, die über eine Kopie dieses Schlüssels verfügen. Der Schlüsseltausch sollte also nicht über das Internet stattfinden, denn wird dieser abgefangen, könnt ihr eure Nachrichten auch gleich an die Hauswand schreiben.
Ein weiterer Vorteil der verschlüsselten Übertragung liegt darin, dass die Nachricht auch nicht verfälscht werden kann:
Ab einer Stelle, an der Bytes eingefügt oder entfernt wurden, wird der Text unlesbar - werden Bytes lediglich verändert, so wird die entsprechende Passage zum Datenmüll. Unverschlüsselt gesendete Nachrichten werden von dem Mikrocontroller komplett verworfen - Spam bleibt automatisch außen vor, nur Gruppenmitlieder mit einem passenden Schlüssel können das Terminal anschreiben. Die Verschlüsselung wirkt gleichzeitig wie eine Signatur. Weder die beiden PCs, die mit den Arduinos am Start- und Zielsystem verbunden sind, noch irgendein dazwischen liegender Rechner im Internet kann die Botschaft dekodieren, lediglich Start- und Zieladresse, Zeitpunkt der Übertragung und die Größe der Datei sind bekannt.

USB Schnittstelle

SKT Version 2, USB Schnittstelle
Abbildung 6:
Erfolgt die Datenübertragung zwischen Mikrocontroller und PC, wie in diesem Fall, über die USB-Schnittstelle, so muss in Betracht gezogen werden, dass der Programmcode sowie der Schlüssel vom PC ausgelesen werden können!. Ferner kann der Code auf dem Mikrocontroller manipuliert werden. Das ist definitiv eine Schwachstelle des Systems!

Zwar kann der Mikrocontroller durch Setzen spezieller Speicherzellen (=Fuses) oder durch ändern des Bootloaders gegenüber der "normalen" Programmierung per Arduino IDE abgesichert werden, allerdings können diese Maßnahmen auch per Software wieder zurückgesetzt werden. In einer folgenden Version werde ich daher als Absicherung einen weiteren Mikrocontroller zwischen Laptop und den als "Festung" dienenden Mikrocontroller setzen. Der Austausch zwischen diesen beiden erfolgt dann per GPIOs. Somit kann der Zugang zum Programmspeicher des als sicher anzusehenden Mikrocontrollers komplett geblockt werden.
Verwendet man einen Raspberry Pi als Internet-PC, so kann der "Zwischen"-Mikrocontroller eingespart werden, denn der Datenaustausch kann direkt über die GPIOs der Raspberry Pi erfolgen.
So lange dieses Terminal allerdings nicht in Millionenauflage eingesetzt wird, ist es doch eher unwahrscheinlich, dass die USB-Schwachstelle wirklich ausgenutzt wird...

Software/Download

Die Software zu diesem Terminal läuft, ist aber nicht der "heilige Gral" in Sachen Bedienkomfort:
Das Programm, das die Kommunikation zwischen PC und Arduino übernimmt, muss von der Linux Kommandozeile gestartet werden, nachdem der Arduino mit der USB-Schnittstelle verbunden wurde.
Die Texteingabe per Computertastatur ist zwar relativ bequem, allerdings gibt's keine automatische Rechtschreibkorrektur und der Cursor kann weder per Maus noch per Pfeiltasten bewegt werden. Text wird immer am Ende eingegeben und auch gelöscht werden kann nur entweder alles, oder immer nur Buchstabe für Buchstabe vom Ende beginnend. Es besteht Verbesserungspotential, der Arduino besitzt aber noch ausreichend freien Preogrammspeicher, um ein wenig davon implementieren zu können.
Details zur Installation befinden sich in der readme.txt des Download-Pakets (1.0MB), das auch den Schaltplan beinhaltet.




<<< Sicheres Kommunikations-Terminal (SKT)         Mikrocontroller-Set >>>


Neuigkeiten    Das Projekt    Technik    RoboSpatium    Unterstützung    Stichwortverzeichnis    Archiv    Download    Reaktionen    Spiele    Verweise    Gadgets    Kontakt    Impressum   





Twitter YouTube Hackaday Patreon TPO