Pre-Shared-Keys

Standardmäßig werden beim TLS-Verbindungsaufbau asymmetrische Schlüsselpaare verwendet. Asymmetrische Kryptographie verbraucht höhere Rechenleistung, daher kann es in Umgebungen mit wenig CPU-Leistung eine Möglichkeit sein, Pre-Shared Keys (PSK) zu verwenden. Pre-Shared-Keys sind vorher geteilte, symmetrische Schlüssel.

Verglichen mit dem Kommunikationsablauf bei asymmetrischer Verschlüsselung fällt bei Verwendung von PSK das Zertifikat weg. Client und Server müssen sich über die sogenannte Identität auf einen PSK einigen. Der PSK ist per Definition vorher beiden Parteien bekannt.

Pre-Shared-Keys 1:

Server Key Exchange: In dieser optionalen Nachricht kann der Server dem Client einen Hinweis auf die Identität des verwendeten PSK geben.

Client Key Exchange: Der Client gibt die Identity des PSK an, mit dem die Verschlüsselung durchgeführt werden soll.

Verwendung in TwinCAT

In TwinCAT wird die Identität des PSK als String angegeben, der PSK selbst wird als ByteArray in der Steuerung abgespeichert. Zusätzlich wird noch die Länge des PSK angegeben. Der Beispielcode bezieht sich sowohl auf den HTTP- als auch auf den MQTT-Client, exemplarisch wird der HTTP-Client verwendet.

PROGRAM MAIN
VAR
    fbClient : FB_IotHttpClient;
    cMyPskKey : ARRAY[1..64] OF BYTE := [16#1B, 16#D0, 16#6F, 16#D2, 16#56, 16#16, 16#7D, 16#C1, 16#E8, 16#C7, 16#48, 16#2A, 16#8E, 16#F5, 16#FF];
END_VAR
fbClient.stTLS.sPskIdentity:= identityofPSK';
fbClient.stTLS.aPskKey:= cMyPskKey;
fbClient.stTLS.nPskKeyLen:= 15;