Mit KC_ENCRYPT können Sie ein neues RSA-Schlüsselpaar für Ihre Anwendung erzeugen, ein RSA-Schlüsselpaar Ihrer Anwendung durch ein neues ersetzen, RSA-Schlüsselpaare löschen und den öffentlichen Schlüssel eines RSA-Schlüsselpaares lesen.
UTM-Anwendungen auf BS2000-Systemen unterstützen auch die Verschlüsselungen auf Verbindungen zu einigen Terminalemulationen. Auf diesen Verbindungen wird jedoch nicht das RSA-Schlüsselpaar von UTM verwendet, sondern ein von VTSU-B erzeugtes. Die Änderungen des RSA-Schlüsselpaares von UTM haben also keine Wirkung auf die Verschlüsselung über VTSU-B.
Voraussetzungen
Diese Funktion können Sie nur einsetzen, wenn die Verschlüsselungsfunktionen verfügbar sind.
Verschlüsselungsverfahren
Für eine erhöhte Sicherheit auf Verbindungen zwischen UTM-Server-Anwendungen und UPIC-Clients bietet openUTM Funktionen zur Verschlüsselung von Passwörtern und Benutzerdaten (Nachrichten) an.
Nähere Informationen zur Verschlüsselung finden Sie im openUTM-Handbuch „Konzepte und Funktionen“ und im openUTM-Handbuch „Anwendungen generieren“.
Funktionsumfang von KC_ENCRYPT
Ein RSA-Schlüsselpaar, das für eine bestimmte Verschlüsselungsebene gültig ist, wird für alle Client-Verbindungen verwendet, die diese Verschlüsselungsebene verwenden. Aus Sicherheitsgründen sollten Sie deshalb die RSA-Schlüsselpaare Ihrer UTM-Anwendung in regelmäßigen Abständen durch neue RSA-Schlüsselpaare ersetzen. Bei Encryption Level 5 wird der RSA-Schlüssel des Servers nur noch zum Signieren des öffentlichen Diffie-Hellman Schlüssels des Servers verwendet, damit der Client diesen Schlüssel eindeutig dem Server zuordnen kann. Bei diesem Verfahren ist eine längere Nutzung des RSA-Schlüssels weniger kritisch.
Für Verbindungen mit Encryption Level 5 werden ebenfalls RSA-Schlüssel mit 2048 Bits verwendet, das entspricht RSA-Schlüssln der Verschlüsselungsebene 4.
Dazu bietet KC_ENCRYPT folgende Funktionen an:
Erzeugen eines neuen RSA-Schlüsselpaares.
KC_ENCRYPT mit subopcode1=KC_CREATE_KEY veranlasst UTM ein neues RSA-Schlüsselpaar zu erzeugen. UTM setzt dieses neue RSA-Schlüsselpaar jedoch erst dann zur Verschlüsselung ein, wenn Sie es durch einen weiteren KC_ENCRYPT-Aufruf (mit subopcode1=KC_ACTIVATE_KEY) aktivieren.
Ein neues Schlüsselpaar können Sie nur erzeugen, wenn das zuletzt erzeugte Schlüsselpaar der gleichen Verschlüsselungsebene bereits mit subopcode1=KC_ACTIVATE_KEY aktiviert ist oder mit subopcode1=KC_DELETE_KEY gelöscht wurde, d.h. für die Anwendung darf kein noch nicht aktiviertes Schlüsselpaar der gleichen Verschlüsselungsebene existieren.
Löschen eines RSA-Schlüsselpaares.
Mit KC_ENCRYPT mit subopcode1=KC_DELETE_KEY löschen Sie ein noch nicht aktiviertes Schlüsselpaar, mit subopcode1 = KC_DELETE_ACTIVE_KEY löschen Sie ein aktiviertes Schlüsselpaar.
Sie können nur aktivierte Schlüsselpaare der Verschlüsselungsebene 4 löschen. Die aktivierten Schlüsselpaare der Verschlüsselungsebene 3 werden von UTM immer benötigt.
Aktivieren eines zuvor erzeugten RSA-Schlüsselpaares.
KC_ENCRYPT mit subopcode1=KC_ACTIVATE_KEY bewirkt, dass ein derzeit benutztes RSA-Schlüsselpaar durch ein mit KC_ENCRYPT erzeugtes Paar ersetzt wird. D.h. beim nächsten Verbindungsaufbau zu einem entsprechend generierten Client wird der öffentliche Schlüssel des neuen RSA-Schlüsselpaares an den Client übertragen.
Auslesen eines öffentlichen Schlüssels.
Mit KC_ENCRYPT subopcode1=KC_READ_NEW_PUBLIC_KEY können Sie den öffentlichen Schlüssel eines noch nicht aktivierten RSA-Schlüsselpaares auslesen.
Mit KC_ENCRYPT subopcode1=KC_READ_ACTIV_PUBLIC_KEY können Sie den öffentlichen Schlüssel eines aktiven RSA-Schlüsselpaares auslesen.Diese Funktion bietet Ihnen eine zusätzliche Möglichkeit, die Sicherheit der Daten auf der Verbindung zu erhöhen:
Damit ein Client verifizieren kann, ob der über die Verbindung zur UTM-Anwendung empfangene öffentliche Schlüssel auch wirklich von der UTM-Anwendung stammt, sollten Sie den öffentlichen Schlüssel auslesen, über einen getrennten Weg an den Client übertragen und dort hinterlegen.
Überträgt die UTM-Anwendung jetzt beim nächsten Verbindungsaufbau zum Client den öffentlichen Schlüssel an den Client, dann kann der Client den empfangenen öffentlichen Schlüssel mit dem bei ihm hinterlegten vergleichen.
Es empfiehlt sich also, den öffentlichen Schlüssel eines neu erzeugten RSA-Schlüsselpaares an alle betroffenen Clients zu verteilen. Betroffene Clients sind die Clients, die die Verschlüsselung der Nachrichten unterstützen.
Transaktionssicherung / Wirkungsdauer / Cluster
Das Erzeugen, Aktivieren und Löschen eines RSA-Schlüsselpaares unterliegt der Transaktionssicherung. Sie können innerhalb einer Transaktion ein neues Schlüsselpaar erzeugen und aktivieren. Ein neu erzeugter öffentlicher Schlüssel kann erst nach Abschluss der Transaktion gelesen werden.
Ein RSA-Schlüsselpaar bleibt solange aktiv, bis mit KC_ENCRYPT ein neues Schlüsselpaar erzeugt und aktiviert wird bzw. bis zur Neugenerierung der Anwendung. Bei einer Neugenerierung erzeugt UTM automatisch ein neues RSA-Schlüsselpaar, falls für den KDCDEF-Lauf die Anweisung OPTION GEN-RSA-KEYS=YES angegeben wird (Standardeinstellung).
Der Aufruf wirkt über den aktuellen Lauf der Anwendung hinaus.
Das Auslesen eines öffentlichen Schlüssels unterliegt nicht der Transaktionssicherung.
In UTM-Cluster-Anwendungen (Unix-, Linux- und Windows-Systeme) gilt:
Der Aufruf wirkt Cluster-global, d.h.
wenn Sie auf einer Knoten-Anwendung mit der KC_ENCRYPT-Funktion ein neues Schlüsselpaar erzeugen, wird dieses Schlüsselpaar auch auf die anderen Knoten-Anwendungen verteilt, so dass alle Knoten-Anwendungen die gleichen Schlüsselpaare besitzen.
wenn Sie auf einer Knoten-Anwendung ein vorher erzeugtes Schlüsselpaar aktivieren oder löschen, wird diese Aktion auch auf allen anderen Knoten-Anwendungen nachgezogen.
Versorgung der zu übergebenden Bereiche
Funktion des Aufrufs | Angabe im | |||
Parameterbereich 1 | Identifikations- | Selektions-bereich | Datenbereich | |
RSA-Schlüsselpaar erzeugen | subopcode1: | —— | —— | —— |
Nicht aktiviertes RSA-Schlüsselpaar löschen | subopcode1: | —— | —— | —— |
Aktiviertes RSA-Schlüsselpaar löschen | subopcode1: | —— | —— | —— |
RSA-Schlüsselpaar aktivieren | subopcode1: | —— | —— | —— |
Öffentlichen Schlüssel eines noch nicht aktivierten RSA-Schlüsselpaares auslesen | subopcode1: | —— | —— | Zeiger auf einen Datenbereich, in den UTM den öffentlichen Schlüssel zurückliefern kann. |
Öffentlichen Schlüssel des zur Zeit aktiven RSA-Schlüsselpaares auslesen | subopcode1: | —— | —— | Zeiger auf einen Datenbereich,in den UTM den öffentlichen Schlüssel zurückliefern kann. |
1 In allen Fällen muss im Parameterbereich der Operationscode KC_ENCRYPT angegeben werden.
Versorgung der Parameter | |
Parameterbereich | |
Feldname | Inhalt |
version | KC_ADMI_VERSION_1 |
retcode | KC_RC_NIL |
version_data | KC_VERSION_DATA_11 |
opcode | KC_ENCRYPT |
KC_CREATE_KEY / KC_ACTIVATE_KEY / KC_DELETE_KEY / KC_DELETE_ACTIVE_KEY / KC_READ_NEW_PUBLIC_KEY / KC_READ_ACTIV_PUBLIC_KEY | |
KC_ENC_LEV_3 / KC_ENC_LEV_4 | |
obj_number | 0 |
id_lth | 0 |
select_lth | 0 |
Länge des Datenbereichs / 0 | |
Identifikationsbereich | |
— | |
Selektionsbereich | |
— | |
Datenbereich | |
— |
KDCADMI-Aufruf |
KDCADMI (¶meter_area, NULL, NULL, NULL) oder |
Rückgaben von UTM | |
Parameterbereich | |
Feldname | Feldinhalt |
Returncode | |
Länge der zurückgelieferten Daten / 0 | |
Datenstruktur kc_encrypt_str / kc_encrypt_advanced_str / — |
subopcode1
Im Feld subopcode1 müssen Sie angeben, welche Aktion UTM durchführen soll. Folgende Subopcodes können Sie angeben:
KC_CREATE_KEY
Es soll ein neues RSA-Schlüsselpaar erzeugt werden.
KC_ACTIVATE_KEY
Ein mit KC_ENCRYPT erzeugtes RSA-Schlüsselpaar soll aktiviert werden.
KC_DELETE_KEY
Ein noch nicht aktiviertes RSA-Schlüsselpaar soll gelöscht werden.
KC_DELETE_ACTIVE_KEY
Ein aktiviertes RSA-Schlüsselpaar soll gelöscht werden. Es können nur die aktivierten Schlüssel der Verschlüsselungsebene 4 gelöscht werden.
Diese Funktion ist nur erlaubt, wenn das Schlüsselpaar bis zum Löschzeitpunkt noch von keinem Objekt verwendet wurde. Diese Funktion können Sie z.B. nach einer Neugenerierung und anschließendem KDCUPD anwenden, um RSA-Schlüssel zu löschen, die in der neuen Generierung nicht mehr benötigt werden.
KC_READ_NEW_PUBLIC_KEY
Der öffentliche Schlüssel eines noch nicht aktivierten RSA-Schlüsselpaares soll ausgelesen werden.
KC_READ_ACTIV_PUBLIC_KEY
Der öffentliche Schlüssel des aktiven RSA-Schlüsselpaares soll ausgelesen werden.
subopcode2
Im Feld subopcode2 müssen Sie angeben, auf welche Verschlüsselungsebene sich die in subopcode1 spezifizierte Aktion bezieht:
KC_ENC_LEV_3
Die Aktion soll für RSA-Schlüssel mit Schlüssellänge 1024 Bits gelten.
KC_ENC_LEV_4
Die Aktion soll für RSA-Schlüssel mit Schlüssellänge 2048 Bits gelten.
data_lth
Im Feld data_lth geben Sie Folgendes an:
bei subopcode1=KC_CREATE_KEY, KC_DELETE_KEY, KC_DELETE_ACTIVE_KEY oder KC_ACTIVATE_KEY:
data_lth=0. Beim Aufruf von KDCADMI sollten Sie für &data_area den Nullpointer an UTM übergeben.bei subopcode1=KC_READ_NEW_PUBLIC_KEY oder KC_READ_ACTIV_PUBLIC_KEY:
Die Länge des Datenbereichs, in dem UTM den öffentlichen Schlüssel des RSA-Schlüsselpaares zurückliefern soll. Dieser Datenbereich muss die Länge der Datenstruktur kc_encrypt_advanced_str besitzen.
Beim Aufruf von KDCADMI müssen Sie den Zeiger auf den Datenbereich an UTM übergeben.
retcode
Im Feld retcode liefert UTM den Returncode des Aufrufs zurück. Neben den in Abschnitt „Returncodes" aufgelisteten Returncodes können zusätzlich folgende Returncodes auftreten.
Maincode = KC_MC_REJECTED Der Aufruf wurde von UTM abgewiesen. Subcodes: |
KC_SC_NO_ENCRYPTION Verschlüsselung wird nicht unterstützt. |
KC_SC_NEW_KEY_ALREADY_EXISTS Bei subopcode1= KC_CREATE_KEY: |
KC_SC_NO_NEW_KEY_EXISTS Bei subopcode1=KC_READ_NEW_PUBLIC_KEY, KC_ACTIVATE_KEY, KC_DELETE_KEY: |
KC_SC_NO_ACTIV_KEY_EXISTS Bei subopcode1= KC_READ_ACTIV_PUBLIC_KEY, KC_DELETE_ACTIVE_KEY: |
KC_SC_IN_USE_DEL_NOT_ALLOWED Bei subopcode1=KC_DELETE_ACTIVE_KEY:
|
KC_SC_NO_GLOB_CHANG_POSSIBLE Nur bei UTM-Cluster-Anwendungen: |
KC_SC_GLOB_CRE_DEL_LOCKED Nur bei UTM-Cluster-Anwendungen: |
Maincode = KC_MC_RECBUF_FULL
|
KC_SC_NO_INFO Der Puffer mit Wiederanlauf-Information ist voll. (Siehe openUTM-Handbuch „Anwendungen generieren“, KDCDEF-Steueranweisung MAX, Parameter RECBUF) |
Maincode = KC_MC_REJECTED_CURR Der Aufruf kann zur Zeit nicht bearbeitet werden. Subcode: |
KC_SC_INVDEF_RUNNING Nur bei UTM-Cluster-Anwendungen: |
data_lth_ret
data_lth_ret enthält die Länge der Daten, die UTM im Datenbereich zurückliefert.
- bei subopcode1=KC_READ_NEW_PUBLIC_KEY und KC_READ_ACTIV_PUBLIC_KEY ist data_lth_ret
!=
0.
Ist die Länge in data_lth_ret kleiner als der bereitgestellte Datenbereich (data_lth), dann ist der Inhalt des Datenbereichs nur in der Länge data_lth_ret definiert.
- bei subopcode1=KC_READ_NEW_PUBLIC_KEY und KC_READ_ACTIV_PUBLIC_KEY ist data_lth_ret
- in allen anderen Fällen ist data_lth_ret=0
Datenbereich
Im Fall subopcode1=KC_READ_NEW_PUBLIC_KEY bzw. KC_READ_ACTIV_PUBLIC_KEY liefert UTM im Datenbereich die Datenstruktur kc_encrypt_advanced_str mit dem öffentlichen Schlüssel der angegebenen Verschlüsselungsebene zurück. Bei KC_READ_NEW_PUBLIC_KEY wird der Schlüssel des noch nicht aktivierten RSA-Schlüsselpaares und bei KC_READ_ACTIV_PUBLIC_KEY der Schlüssel des aktiven RSA-Schlüsselpaares zurückgegeben.
Die Datenstruktur kc_encrypt_advanced_str ist folgendermaßen definiert:
struct kc_encrypt_advanced_str |
|
Die Felder der Datenstruktur haben folgende Bedeutung:
buf_lth | gibt die verwendete Länge des Datenpuffers en_buffer an. |
en_buffer | enthält den ausgelesenen öffentlichen Schlüssel. |
en_key_lth | länge des Schlüssels (1024 oder 2048). |