Beschreibung | Mit diesem Funktionsbaustein können Sie prüfen, ob Ihr IEC-Programm auf einem vertrauenswürdigen Gerät läuft. Wenn nicht, können Sie Schutzmaßnahmen ergreifen, um z.B. Schäden am Gerät zu verhindern oder Know-How-Diebstahl zu erschweren.Der Funktionsbaustein verifiziert die Identität des Gerätes mit kryptographischen Mitteln und liefert bei erfolgreicher Verifizierung Informationen zum Gerät. Zur Verifikation verwendet der FB die Phoenix Geräte-Zertifikatshierarchie (enthält die Wurzelzertifikate in PEM-kodierter Form). Die Phoenix Geräte-Zertifikatshierarchie kann mit dem Funktionsbaustein SEC_TA4PLCNEXT_1ST_GEN ermittelt werden. Nach einer erfolgreichen Verifikation zeigen die Ausgänge Details der verifizierten Identität.Zur Verifikation der Identität wird überprüft, ob das Gerät einen passenden privaten Schlüssel besitzt und diesen anwenden kann. Falls es sich dabei um ein an das Secure Element (zum Beispiel TPM-Chip) des Gerätes gebundenen privaten Schlüssel handelt, ist damit auch sichergestellt, dass es sich um ein im Sinne des Ausstellers der Identität "echtes" Gerät handelt.Mit einer steigenden Flanke am Eingang EXECUTE wird die Verifikation der am Eingang TRUSTED_CERTIFICATES angelegten Zeichenkette mit der Phoenix Geräte-Zertifikatshierarchie gestartet. Die aktive Prüfung wird mit BUSY = TRUE signalisiert. Nach der Prüfung wird der Ausgang BUSY wieder auf FALSE und der Ausgang DONE auf TRUE gesetzt, wenn die Verifikation ein positives Ergebnis liefert. Im Fehlerfall oder wenn die Identität nicht verifiziert werden kann, bleibt der Ausgang DONE FALSE und der Ausgang ERROR wird auf TRUE gesetzt. Falls ERROR = TRUE ist, liefert der Ausgang ERROR_ID Details zum Fehler. |
Hinweise zur sicheren Verwendung |
- Am Eingang TRUSTED_CERTS sollten hart im IEC-Programm kodierte Zertifikate hinterlegt werden. Würde das IEC-Programm die Zertifikate beispielsweise aus einer Datei lesen, könnte ein Angreifer das IEC-Programm auf einer nicht vertrauenswürdigen Steuerung dazu bringen, eine positive Verifikation der Geräteidentität zu bewirken. Dies könnte dem Angreifer gelingen, indem er im IEC-Programm sowohl eine von ihm bestimmte Identität als auch eine von ihm bestimmte Menge vertrauenswürdiger Zertifikate hinterlegt, die zu der Identität passen.
- PLCnext Technology-Steuerungen verfügen über die Identität mit dem Namen "IDevID" (Initial Secure Device Identifier). Diese Identität ist an das Secure Element (SE) der Steuerung gebunden. Der "IDevID"-Wert (STRING#'IDevID') kann als Wert für den Eingang IDENTITY_NAME verwendet werden (siehe unten stehendes Beispiel). Andere Identitäten sind möglicherweise nicht an das Secure Element des Gerätes gebunden. Bei der Identität "IDevID" enthält im Falle der positiven Verifikation der Ausgang SUBJECT_CN die Bezeichnung des Gerätetyps und der Ausgang SUBJECT_SN die Seriennummer des Gerätes.
|
Parameter | Eingänge
EXECUTE
Datentyp: | BOOL |
Beschreibung: | Der Funktionsbaustein wird bei einer steigenden Flanke am Eingang ausgeführt. Der Baustein beginnt die Verifikation der am Eingang TRUSTED_CERTIFICATES anliegenden Zeichenkette mit den darin enthaltenen Zertifikaten in PEM-kodiertem Format. |
TRUSTED_CERTS
Datentyp: | SEC_PEM_CERTIFICATES |
Beschreibung: | Zeichenkette mit darin enthaltenen PEM-kodierten Zertifikaten, die für die Verifikation der Geräteidentität verwendet werden sollen. Wenn das Zertifikat der Geräteidentität per Zertifikatskette auf eines der hier enthaltenen Wurzelzertifikate zurückgeführt und erfolgreich dagegen geprüft werden kann, nur dann gilt das Zertifikat zur Geräteidentität als gültig. |
IDENTITY_NAME
Datentyp: | STRING |
Beschreibung: | IdentityStores-Name des zu verifizierenden Gerätes. Verwenden Sie STRING#'IDevID' für die Phoenix Contact Identität. |
Ausgänge
DONE
Datentyp: | BOOL |
Beschreibung: | Nach einer vollständig ausgeführten Verifikation zeigt dieser Ausgang mit dem Wert TRUE an, dass die Geräteidentität gegen die Wurzelzertifikate verifiziert werden konnte und das Gerät den zugehörigen privaten Schlüssel nutzen kann.Falls EXECUTE schon wieder auf FALSE gesetzt wurde, wird dieser Ausgang nur für einen Zyklus TRUE. |
BUSY
Datentyp: | BOOL |
Beschreibung: | Dieser Ausgang ist TRUE solange die Verifikation der Geräteidentität läuft. Nach Abschluss der Verifikation wird der Ausgang auf FALSE gesetzt. |
SUBJECT
Datentyp: | SEC_SUBJECT_STRING |
Beschreibung: | Enthält den Wert des Feldes "Subject" (auch "Inhaber" oder "Antragsteller" genannt) des Zertifikates, das zur Identität gehört. Der Wert wird als Zeichenkette im RFC2253-Format zurückgegeben.Der Wert dieses Ausgangs ist nur definiert, wenn DONE = TRUE ist.Beispiel für den Wert des "Subject"-Feldes: pseudonym=ed7e164e95fb0789489dee8fec3dae8de048a09d05f6ce39486c8b0c63862a33,serialNumber=1356809580,CN=AXC F 2152,OU=PHOENIX CONTACT GmbH & Co KG,O=PHOENIX CONTACT,L=Blomberg,ST=NRW,C=DE |
SUBJECT_CN
Datentyp: | STRING |
Beschreibung: | Enthält den Wert des Attributs "CN" (Common Name), wenn das Feld "Subject" (siehe oben) des Zertifikats den Attributwert enthält. Falls verfügbar, muss die IEC-Applikation nicht selbst die Zeichenkette des "Subject"-Feldes durchsuchen und zerteilen, wenn die Applikation diesen Namen benötigt.Der Wert dieses Ausgangs ist nur definiert, wenn DONE = TRUE ist.Beispiel für den Wert des Attributs "CN" (entnommen aus dem oben gezeigten "Subject"-Feld): AXC F 2152 |
SUBJECT_SN
Datentyp: | STRING |
Beschreibung: | Wenn das Feld "Subject" des Zertifikates ein "serialNumber"-Attribut enthält, wird dessen Wert hier als Zeichenkette bereitgestellt. Falls verfügbar, muss die IEC-Applikation nicht selbst die Zeichenkette des "Subject"-Feldes durchsuchen und zerteilen, wenn die Applikation diese Seriennummer benötigt. Siehe hierzu auch die Hinweise zur sicheren Verwendung des Bausteins.Der Wert dieses Ausgangs ist nur definiert, wenn DONE = TRUE ist.Beispiel für den Wert des Attributs "serialNumber" (entnommen aus dem oben gezeigten "Subject"-Feld): 1356809580 |
ERROR
Datentyp: | BOOL |
Beschreibung: | Falls bei der Prüfung ein Fehler auftrat oder die Prüfung negativ ausfiel, wird der Ausgang auf TRUE gesetzt. Der Ausgang ERROR_ID liefert Informationen zum Fehler solange ERROR = TRUE ist. |
ERROR_ID
Datentyp: | SEC_IDENTITY_VALIDATION_ERROR (vordefiniertes Array) |
Beschreibung: | Nach einer ausgeführten oder abgebrochenen Verifikation zeigt dieser Ausgang mit seinem Wert die Ursache für das Fehlschlagen an.Der Wert dieses Ausgangs ist nur definiert, wenn ERROR = TRUE ist.Mögliche Werte:
ERROR_ID (16#....) | Beschreibung |
0000 | Die Geräteidentität konnte als gültig gegen die angegebenen vertrauenswürdigen Zertifikate geprüft werden. |
0100 | Dieser Fehler tritt nur im Falle eines Programmierfehlers innerhalb der Implementierung des Funktionsbausteins auf. |
0200 | Der Wert des Eingangs TRUSTED_CERTS ist leer, besitzt ein ungültiges Format oder eines der Zertifikate darin ist in einem nicht unterstützten Format angegeben. |
0201 | Der Wert des Eingangs IDENTITY_NAME ist leer oder bezeichnet eine Identität, die auf dem Gerät nicht bekannt ist. |
1000 | Der Identität fehlt ein Zertifikat. |
1001 | Die Identität ist nicht vertrauenswürdig. Sie passt nicht zu den vertrauenswürdigen Zertifikaten oder sie wurde außerhalb des möglichen Gültigkeitszeitraumes ausgestellt. |
1002 | Das Gerät besitzt keinen passenden privaten Schlüssel zu der Identität. |
|
|