| | Implementierung Verschlüsselung im HIT-Protokoll
HIT unterstützt seit 2004 sichere Datenübertragung mit selbst
implementierten Verschlüsselungsverfahren auf Basis von Standard-Algorithmen und Open source-Routinen.
Mehr Details und zum veröffentlichten Public Key finden
Sie hier.
Ablauf verschlüsselte Anmeldung
Als asymmetrische Verschlüsselung wird das
RSA-Verfahren verwendet. Dieses
besteht aus einem Public Key und Private Key, welche getrennt
voneinander zum Ver- und Entschlüsseln verwendet werden. Um die
Blockgrößen des Algorithmus effizient auszunutzen, wird der Trailing
Bit Complement padding algorithm angewandt.
HitServer |
|
Client |
|
 |
verbindet sich mit HIT-Server z.B. an Port 2222 |
generiert ein SRV_HELO und meldet z.B.
=0:0/42::HitServer bereit. ... 6438108607920216050 |
 |
|
|
 |
Zur Verschlüsselung wird das SRV_HELO aus der Antwort extrahiert:
es ist die komplette Zeichenkette nach dem dritten :
- links
gelb markiert.
Danach generiert man sich einen zufälligen SESS_KEY einer beliebigen Länge (max. 48 Bytes) und Zufallsdaten RAND_CLI
einer beliebigen Länge (mind. 30 Bytes). Zur Anmeldung werden alle benötigten
Daten als HIT-Anfrage zusammengefaßt, mit dem öffentlich bekannten Public
Key asymmetrisch verschlüsselt, die Bytes als Hexstring umgewandelt, ein $ vorangestellt und an den Server gesendet.Mit Public Key zu verschlüsselnde Datenanfrage z.B. (mit etwas kürzeren
Hexstrings dargestellt):
*1:XS:LOGON/
BNR15;MBN;PIN;MELD_WG;SRV_HELO;RAND_CLI;SESS_KEY:
276009999999999;0;123456;3;
HitServer bereit. ... 6438108607920216050;
F5EB86C717F47F2BDA36537A5E06F7FDAEC0AF330B34F50F;
5330C23D4E70A28CEF843618
Der verschlüsselte Text wird als $........ (in
Hexadezimalform) an den Server
geschickt. |
Der Server erkennt am einleitenden $ , dass eine asymmetrisch verschlüsselte Nachricht vorliegt. Diese
entschlüsselt er mit
dem nur ihm bekannten Private Key.Die Bestandteile werden extrahiert,
SRV_HELO mit dem eigenen verglichen
und wenn identisch, wird der SESS_KEY für die weitere symmetrische
Verschlüsselung gemerkt. Ist Entschlüsselung fehlgeschlagen bzw. lieferte
sie illegale Daten oder ist SRV_HELO nicht mit der der Session identisch
oder stimmen die HIT-Anmeldeinformationen nicht, wird eine unverschlüsselte
Fehlermeldung
analog bisher zurückgeliefert und der LOGON trotz korrekter Anmeldedaten als
fehlgeschlagen aufgefasst.
In jedem Fall liefert der Server dann ein oder mehrere
unverschlüsselte Antworten (Zeilen beginnend mit % und = ).
Im Erfolgsfall den Hinweis, dass die Anmeldung erfolgreich war. |
 |
|
|
|
War PIN korrekt, erhält Client
symmetrisch verschlüsselt (siehe unten) ein "Anmeldung erfolgreich" oder
unverschlüsselt ein oder
mehrere Fehlermeldungen.
Nun kann fortan ein symmetrisch verschlüsselter Datenaustausch durchgeführt werden. |
Ablauf verschlüsselter Datenaustausch
Als symmetrische Verschlüsselung wird
Blowfish verwendet, das Daten mit einem (bei der Anmeldung) selbst vergebenen zufälligen
Schlüssel in 64bit-Blöcken verschlüsseln und auch mit dem selben
Schlüssel wieder entschlüsseln kann (=symmetrisch).
Voraussetzung für den verschlüsselten Datenaustausch ist eine
erfolgreiche asymmetrisch verschlüsselte Anmeldung, aus dieser der SESS_KEY
zum Ver- und Entschlüsseln verwendet wird.
HitServer |
|
Client |
|
|
Voraussetzung:
Verbindung zum HIT-Server steht und
verschlüsselte Anmeldung war erfolgreich |
|
 |
Anfrage an HIT-Server zusammenbauen, z.B.
als Abgangsmeldung: *3:XS/ZUGANG:BNR15;LOM;ZUGA_DAT:01 234 567
8901;DE 01 234 56789;01.01.2010
Diese wird mit dem Key aus SESS_KEY symmetrisch verschlüsselt,
dann die Bytes als Hexstring umgewandelt, ein # vorangestellt und an den Server gesendet. |
Der Server erkennt am einleitenden
# , dass eine symmetrisch verschlüsselte Nachricht vorliegt und
decodiert diese mit dem ihm auch bekannten SESS_KEY .Nach der
Verarbeitung der Anfrage (Meldung oder Abfrage) liefert der Server in jedem
Fall auch symmetrisch mit dem SESS_KEY verschlüsselt die Daten
und Antwort(en) zur gesendeten Anfrage. Diese sind wie die Anfrage ebenfalls
als Hexstring codiert und mit einem # als Präfix versehen. |
 |
|
|
|
Die Antwort vom Server erkennt der Client am einleitenden
# , dass eine symmetrisch verschlüsselte Nachricht vorliegt und
decodiert diese mit dem ihm auch bekannten SESS_KEY . |
Java-Sourcecode
Der Sourcecode in Java, der oben beschriebene Verfahren implementiert, kann
aus der HitUpros-Bibliothek entnommen werden, welcher
beim HitBatch-Client als HitUprosSources.zip verfügbar ist. Die
Klasse HitUpros.HitSecurity ist der Einstiegspunkt zur Anwendung
der Ver- und Entschlüsselung, mehr Details hierzu.
|