Benutzer:MeileGuster/Key Management Interoperability Protocol
KMIP – Key Management Interoperability Protocol
Das Key Management Interoperability Protocol bietet einen einheitlichen Standard für die Kommunikation zwischen einem Key Lifecycle Management System (KLMS) und dessen Clients. Dadurch kann eine zentrale Schlüsselverwaltung eingesetzt werden und die Datensicherheit erhöht werden. Das Protokoll wurde von OASIS normiert.
Protokolldefinition
In der [KMIP Spezifikation] wird definiert, wie eine Nachricht aussehen muss und welche Informationen ausgetauscht werden können. Einige Funktionalitäten von Client und Server, zum Beispiel die Fehlerbehandlung, werden vorgegeben. Andere können wie gewünscht umgesetzt werden. Ein Client oder Server muss nicht die vollständige, im Protokoll definierte Funktionalität umsetzen, sondern nur die tatsächlich benötigte. Die Protokoll-Spezifikation gibt nicht vor, wie die Authentifizierung zwischen Client und Server abläuft. Allerdings werden in einem zugehörigen Dokument zwei Authentifizierungs-Profile beschrieben. Bei beiden Profilen werden Versionen des Transport Layer Security TLS verwendet. TLS dient nicht nur der Authentifizierung, es stellt auch die Integrität der Daten sicher.
Objekte
Bei den Objekten wird zwischen Base Objects (Basis Objekten) und Managed Objects (verwalteten Objekten) unterschieden. Base Objects sind Informationen, die ein Managed Object spezifizieren. Zu den Base Objects gehören zum Beispiel Attribute, Key Value und Key Wrapping Data . Ein Managed Object ist ein Objekt mit kryptographischem Inhalt, das vom KLM-System verwaltet wird. Dazu gehören die verschiedenen Schlüssel und Zertifikate. Ausserdem können Templates (Vorlagen) erstellt werden, die dem Administrator eines KLM-Systems ermöglichen, Attribute von oft genutzten Prozessen zusammenzufassen. Zum Beispiel kann eine Vorlage für einen symmetrischen Schlüssel erstellt werden, in welcher der Algorithmus und die Länge des Schlüssels definiert sind. Wenn ein Schlüssel nach diesen Spezifikationen erstellt werden soll, wird der Name des Templates anstelle der gewünschten Attribute übergeben. Um weitere geheimzuhaltende Objekte zu speichern, werden das Secret Data Objekt (z.B. für Passwörter) oder das Opaque Object verwendet. Die Daten im Opaque Object müssen vom Server nicht interpretiert werden können. Es wird zum Beispiel ein Schlüssel gespeichert, obwohl der Server den verwendeten Verschlüsselungs-Algorithmus nicht unterstützt.
Abbildung 12 KMIP Objekte 5.1.2 Attribute Um die Managed Objects zu spezifizieren, gibt es verschiedene Attribute. In Tabelle 1 sind alle Attribute mit ihren wichtigsten Eigenschaften aufgelistet. Es gibt Attribute, die für jedes Objekt oder für bestimmte Objekte zwingend sind, andere sind optional. Von einigen Attributen können pro Objekt mehrere Instanzen vorhanden sein. Wichtig ist dies zum Beispiel beim Link. Ein Public Key hat einen Link zum zugehörigen Private Key und zusätzlich zum Zertifikat, das den Schlüssel mit einer Identität verknüpft. In der KMIP Spezifikation wird zudem für jedes Attribut beschrieben, wer es erstellen, ändern, löschen darf und bei welchen Operationen das Attribut implizit gesetzt wird. Attribut Beschreibung Unique Identifier • Eindeutige Bezeichnung eines Objekts innerhalb eines KLMS • Wird vom Server bei der Erstellung gesetzt und kann nicht verändert werden Name • Name des Objekts • Vom Client gesetzt • Vom Client benötigt, um das Objekt zu referenzieren Object Type • Typ des Objekts (Public Key, Private Key, etc.) Cryptographic Algorithm • Algorithmus, der vom Objekt verwendet wird (RSA, DES, AES, etc.) Cryptographic Length • Länge des Schlüssels in Bits Cryptographic Parameters • Parameter für bestimmte Anwendungen (z.B. Hash-Algorithmus) Cryptographic Domain Parameters • Parameter zur Erstellung eines Schlüsselpaares Certificate Type • Typ des Zertifikats (X.509, PGP, etc.) Certificate Identifier • Identifikation eines Zertifikats (Aussteller des Zertifikats und wenn vorhanden Seriennummer) Certificate Subject • Identifikation des Subjekts (Person oder Gerät) eines Zertifikats • Kann mehrere Beschreibungen beinhalten (Name, E-Mail-Adresse, IP-Adresse, etc.) Certificate Issuer • Identifikation des Ausstellers eines Zertifikats • Kann mehrere Beschreibungen beinhalten (Name, E-Mail-Adresse, IP-Adresse, etc.) Digest • Hash Wert von Schlüssel, Zertifikat, Secret Data oder Opaque Object • Mehrere Hash-Werte möglich (mit verschiedenen Algorithmen) Operation Policy Name • Beschreibung, welche Clients welche Operationen auf dem Objekt ausführen dürfen • Server hat mindestens eine Standard-Einstellung (default policy) Cryptographic Usage Mask • Bit-Maske • Beschreibt die erlaubten Anwendungen eines Schlüssels Lease Time • Intervall währenddessen das Objekt genutzt werden darf Usage Limits • Beschreibt die limitierte Nutzung eines Objekts • Nutzung begrenzt nur Operationen zum Schutz von Informationen (z.B. Verschlüsselung), Operationen zur Verarbeitung geschützter Informationen (z.B. Entschlüsselung) sind unbegrenzt nutzbar • Enthält Einheit (z.B. zu verschlüsselnde Bytes), aktuellen Zähler und total erlaubte Anzahl Einheiten State • Aktueller Status des Objekts • Kann nur vom Server verändert werden Initial Date • Zeit und Datum der Erstellung/Registrierung des Objekts Activation Date • Zeit und Datum der Aktivierung • Objekt darf ab dem Aktivierungsdatum für schützende Operationen (Entschlüsseln oder unwrapping) genutzt werden Process Start Date • Zeit und Datum, ab wann das Objekt für die Bearbeitung von verschlüsselten Informationen genutzt werden darf • Darf nicht früher sein als die Aktivierungszeit Protect Stop Date • Zeit und Datum, ab wann ein Objekt nicht mehr für schützende Operationen (Verschlüsseln oder wrapping) eingesetzt werden darf • Darf nicht später sein als Deaktivierungszeit Deactivation Date • Zeit und Datum der Deaktivierung Destroy Date • Zeit und Datum des Löschens des Objekts Compromise Occurrence Date • Zeit und Datum, ab wann das Objekt als kompromittiert gilt Compromise Date • Zeit und Datum der Zustandsänderung in den Compromised State Revocation Reason • Grund, warum ein Objekt annulliert wird Archive Date • Zeit und Datum, wann das Objekt archiviert wurde Object Group • Name einer Objekt-Gruppe Link • Zusammenhänge zwischen den Objekten (Private Key – Public Key, Public Key – Certificate, etc.) • Mehrere Links pro Objekt möglich Application Specific Information • Zusätzliche, applikationsspezifische Informationen zu einem Objekt Contact Information • Kontaktinformationen (Personen/Geräte, die für ein Objekt verantwortlich sind) Last Change Date • Zeit und Datum der letzten Änderung Custom Attribute • Anbieterspezifisches Attribut • Client- oder serverseitig Tabelle 1 Attribute 5.1.3 Operationen Bei den Operationen wird unterschieden, von wem sie initiiert werden. Die meisten davon sind Client-to-Server Operationen (Kapitel 5.1.3.1). Zusätzlich gibt es wenige Server-to-Client Operationen (Kapitel 5.1.3.2). In der KMIP Spezifikation wird jeweils beschrieben, welche Informationen eine Anfrage und die dazugehörige Antwort beinhalten. In den folgenden Unterkapiteln werden die Operationen und ihre wichtigsten Eigenschaften aufgelistet (Tabelle 2 bis Tabelle 7). Die Aufteilung erfolgt gemäss Verwendungszweck. (OASIS, 2010d, S. 24ff.) 5.1.3.1 Client-to-Server Operationen Ein Client kann eine Teilmenge oder alle Operationen unterstützen. Möchte er mehrere Operationen gleichzeitig an den Server senden, können diese in einer Nachricht zu einem Batch zusammengefasst werden. Tabelle 2 enthält die Operationen, die ein neues Objekt erzeugen oder Inhalte eines bestehenden Objekts erneuern. Das KLMS kann selbst Zertifikate ausstellen, oder die Zertifizierung von einem externen Dienst (certification authority) anfordern. (OASIS, 2009, S. 15) Operation Beschreibung Create • Erstellen eines symmetrischen Schlüssels • Anfrage enthält spezifizierende Attribute und/oder Template Create Key Pair • Erstellen eines Schlüsselpaares mit privatem und öffentlichem Schlüssel • Anfrage enthält spezifizierende Attribute und/oder Template • Automatisches Erstellen eines Link-Attributes, das die beiden neuen Objekte verbindet Register • Registrierung eines Objekts, das vom Client übergeben wird • Anfrage enthält mindestens die Attribute Cryptographic Algorithm, Cryptographic Length und Cryptographic Usage Mask Re-key • Erstellen eines symmetrischen Schlüssels, der einen existierenden Schlüssel ersetzt • Attribute werden vom existierenden Schlüssel übernommen (Cryptographic Algorithm, Cryptographic Length, etc.) oder neu gesetzt (Initial Date, Unique Identifier, etc.) • Automatisches Erstellen eines Link-Attributes, das den alten mit dem neuen Schlüssel verbindet Derive Key • Symmetrischen Schlüssel/Secret Data ableiten aus Schlüssel/Secret Data • Abzuleitendes Objekt muss dem KLMS bekannt sein • Derive Key Bit in der Cryptographic Usage Mask muss gesetzt sein • Automatisches Erstellen eines Link-Attributes, welches das Ursprungsobjekt mit dem abgeleiteten Objekt verbindet Certify • Erstellen eines Zertifikates für einen öffentlichen Schlüssel • Automatisches Erstellen eines Link-Attributes, welches das Zertifikat mit dem Public Key verbindet Re-Certify • Erneuerung eines Zertifikates • Automatisches Erstellen eines Link-Attributes, welches das alte mit dem neuen Zertifikat verbindet Tabelle 2 Operationen zur Erzeugung von Objekten Operationen, die benötigt werden, um Objekte aufzufinden und abzurufen und um deren Verwendung zu prüfen, werden in Tabelle 3 aufgelistet. Operation Beschreibung Locate • Suchen eines Objekts, das durch ein oder mehrere Attribute beschrieben wird • Erfolglose Suche resultiert in leerer Antwort • Erfolgreiche Suche resultiert in Antwort mit einem oder mehreren Unique Identifiers Check • Verwendung des Objekts für eine bestimmte Anwendung überprüfen • Bei erlaubter Anwendung wird mit dem Unique Identifier geantwortet • Bei unerlaubter Anwendung werden die für das Scheitern der Anfrage verantwortlichen Attribute zurückgesendet Get • Abrufen eines Objekts • Auswahl des Objekts mit dem Unique Identifier Tabelle 3 Operationen zum Auffinden und Abrufen von Objekten In Tabelle 4 werden die Operationen angegeben, die sich auf die Attribute von Objekten beziehen. Die Auswahl des gewünschten Objekts erfolgt jeweils mit dem Unique Identifier, die Auswahl des Attributs mit dem Attributnamen. Operation Beschreibung Get Attributes • Abfrage von bestimmten Attributen eines Objekts Get Attribute List • Abfrage aller Attribute eines Objekts Add Attribute • Erstellen eines neuen Attributs zu einem bestehenden Objekt • Mehrere neue Attribute können zu einem Batch zusammengefasst werden Modify Attribute • Änderung eines Attributs Delete Attribute • Löschen eines Attributs Tabelle 4 Operationen zum Abrufen und Verändern von Attributen Operationen, die in der Tabelle 5 aufgelistet werden, beschäftigen sich mit der Nutzung von Objekten. Die Objektauswahl erfolgt wie schon oben erwähnt mit der Angabe des Unique Identifiers. Einige der folgenden Operationen dürfen nur von bestimmten Clients beantragt werden (zum Beispiel vom Administrator oder vom Ersteller eines Objekts). Die Identität dieser Clients muss mittels Authentifizierung überprüft werden. (OASIS, 2010c, S. 13) Operation Beschreibung Obtain Lease • Verlängerung der Nutzungsdauer Get Usage Allocation • Zuteilung von nutzbaren Einheiten für Schutzfunktionen (vgl. Usage Limits) Activate • Aktivierung eines Objekts • Zustandswechsel von Pre-Active zu Active Revoke • Annullierung eines Objekts • Revocation Reason enthält den Grund der Annullierung • Je nach Grund Zustandswechsel zu Compromised oder Deactivated Destroy • Löschen eines Schlüssels oder eines Templates • Objekte im Zustand Pre-Active oder Deactivated werden sofort gelöscht • Objekte im Zustand Active werden zuerst deaktiviert Archive • Archivierung eines Objekts Recover • Wiederherstellen eines archivierten Objekts Validate • Bestätigung der Gültigkeit einer Zertifikats-Kette (certificate chain) • Anfrage kann Zertifikate und Unique Identifiers enthalten Tabelle 5 Operationen für die Nutzung kryptographischer Objekte Tabelle 6 beschreibt die asynchronen Operationen sowie eine Operation zur Befragung des Servers. Operationen werden als asynchron bezeichnet, wenn der Server nicht sofort antwortet. Der Client kann zu einem späteren Zeitpunkt die Poll-Operation (vgl. Tabelle 6) ausführen, um die Antwort zu erhalten. Dieses Vorgehen wird gewählt, wenn Operationen eine gewisse Bearbeitungszeit benötigen (z.B. Wiederherstellen eines Objekts). Operation Beschreibung Query • Abfrage von Server-spezifischen Eigenschaften • Option „Query Operations“ listet die vom Server unterstützten Operationen auf • Option „Query Objects“ listet die vom Server unterstützten Objekttypen auf Cancel • Abbrechen einer asynchronen Operation • Antwort des Servers enthält das Resultat (abgebrochen, Abbruch nicht möglich, Operation vor dem Abbruch fertiggestellt, fehlgeschlagen, nicht verfügbar) Poll • Abfrage einer asynchronen Operation • Bei laufender Operation wird der Status pending (ausstehend) zurückgegeben • Bei abgeschlossener Operation wird das Resultat der Operation zurückgegeben Tabelle 6 Operationen für Server-Abfrage und für asynchrone Verarbeitung 5.1.3.2 Server-to-Client Operationen Für gewisse Abläufe ist es sinnvoll, dass ein KLM-Server eine Kommunikation initiiert (Tabelle 7). Dabei sendet der Server dem Client eine Anfrage (Request Message). Der Client antwortet mit einer Response Message. Bei Anwendung dieser Operationen müssen sich die Clients beim Server anmelden. Die Art der Anmeldung wird nicht im Protokoll spezifiziert. Es wird jedoch erwartet, dass eine Authentifizierung stattfindet, die einen Man-in-the-Middle-Angriff verhindert. (OASIS, 2010c, S. 13) Operation Beschreibung Notify • Benachrichtigung bei Ereignissen, die zur Änderung von Attributen geführt haben • Objekt wird mit Unique Identifier beschrieben • Benachrichtigung enthält Liste der veränderten Attribute Put • Übermittlung von Objekten zum Client • New: neues Objekt wird übermittelt • Replace: Objekt ersetzt existierendes Objekt (z.B. neues Zertifikat) Tabelle 7 Server-to-Client Operationen 5.1.4 Nachrichten-Format Eine Nachricht besteht immer aus einem Header, gefolgt von einem oder mehreren gestapelten Batch-Objekten und optionalen Nachrichten-Erweiterungen (Abbildung 13).
Abbildung 13: Nachrichten-Format Aufbau Im Header wird zwischen zwei Nachrichtentypen unterschieden: Request (Anfrage, Abbildung 14) und Response (Antwort, Abbildung 15). In beiden Headern ist jeweils die Protokoll-Version und der Batch Count angegeben. Dazu kommen weitere Daten, abhängig vom Typ. Ein Batch Objekt spezifiziert die gewünschte Operation und beinhaltet alle dafür benötigten Attribute. Die gepunkteten Attribute in den folgenden Abbildungen sind optional. (OASIS, 2010a, S. 86ff.)
Abbildung 14: Request Nachricht
Abbildung 15: Response Nachricht
Um eine einfache Verarbeitung zu garantieren, wird eine Tag-Type-Length-Value (TTLV) Codierung verwendet (Abbildung 16).
Abbildung 16: TTLV-Codierung der KMIP-Nachricht
Tag: Kennzeichnung der nachfolgenden Informationen des TTLV-Segments, codiert als sechsstellige Hexadezimalzahl, wobei diese immer mit 42 beginnt („42XXXX“). Type: Typ der nachfolgenden Informationen (Structure, Integer, Long Integer, Big Integer, Enumeration, Boolean, Text String, Byte String, Date-Time, Interval) Length: Länge der nachfolgenden Informationen in Bytes Value: Der eigentliche Wert bzw. Kern des TTLV-Segments (je nach Datentyp verschieden codiert)
Mit Strukturen werden verschachtelte Inhalte erstellt. Im Value-Teil einer Struktur können weitere TTLV-Segmente vorkommen. Als Länge der Struktur wird dann die Anzahl der Bytes aller in der Struktur enthaltenen Elemente angegeben. 5.1.5 Beispiel Nachricht Enkodierung Eine Nachricht vom KMIP Client an den KLMS Server zur Erstellung eines symmetrischen Schlüssels kann folgendermassen aussehen, als Byte-Strom in hexadezimaler Form dargestellt. 42007801000001204200770100000038420069010000002042006A0200000004000000010000000042006B0200000004000000000000000042000D0200000004000000010000000042000F01000000D842005C0500000004000000010000000042007901000000C04200570500000004000000020000000042009101000000A8420008010000003042000A070000001743727970746F6772617068696320416C676F726974686D0042000B05000000040000000300000000420008010000003042000A070000001443727970746F67726170686963204C656E6774680000000042000B02000000040000008000000000420008010000003042000A070000001843727970746F67726170686963205573616765204D61736B42000B02000000040000000C00000000 Aufgeschlüsselt nach dem TTLV Schema und gemäss KMIP Spezifikation interpretiert, ist diese Nachricht eine Anfrage des Clients an den Server (Abbildung 17). Der Client verlangt einen symmetrischen Schlüssel zur Ver- und Entschlüsselung mit dem AES-Algorithmus. Der Schlüssel soll eine Länge von 128 Bit haben.
5.2 Anwendungsfälle – Use Cases
Zusätzlich zur Spezifikation wurden Use Cases entwickelt. Dabei wurden die Abläufe von verschiedenen Szenarien und die auszutauschenden Nachrichten beschrieben. Die Use Cases können einerseits dazu verwendet werden, den Ablauf einer Kommunikation nachzuvollziehen. Andererseits kann damit eine Implementationen des KMIP, die auf einem KLMS läuft, getestet werden. Die Use Cases enthalten nur realistische Anwendungen, sie eignen sich nicht dazu, mögliche Angriffe auf das System zu testen. In den folgenden Kapiteln werden drei Use Cases beschrieben, um den Ablauf der Kommunikation aufzuzeigen. Die Informationen dieses Kapitels beziehen sich auf (OASIS, 2010d).
5.2.1 Erstellen und Löschen eines symmetrischen Schlüssels
Als erstes Beispiel sendet ein KMIP Client dem Server eine Anweisung, einen symmetrischen Schlüssel mit bestimmten Attributen zu erstellen (Abbildung 18). Der Server erstellt den Schlüssel und übergibt ihn dem Client, zusammen mit dem Unique Identifier des Objekts. Hier fordert der Client den Server als nächstes an, den Schlüssel wieder zu löschen. Der Server bestätigt diese Operation, indem er den Unique Identifier zurücksendet. In der Praxis kann zwischen den Operationen Create und Destroy eine grosse Zeitspanne liegen.
Abbildung 18 Erstellen und Löschen eines symmetrischen Schlüssels 5.2.2 Erstellen eines symmetrischen Schlüssels mittels Template Im Kapitel 5.1.1 wurde das Objekt Template beschrieben. Damit kann ein Objekt erstellt werden, ohne alle Attribute explizit angeben zu müssen. In diesem Beispiel (Abbildung 19) wird ein symmetrischer Schlüssel mittels Template erstellt. Dafür registriert der Client zuerst das Template und gibt dann bei der Erstellung des Schlüssels den Namen des Templates an. Nach dem Erhalt des Objekts kann der Client mit der Operation Get Attributes prüfen, ob die Attribute korrekt gesetzt wurden. Werden Schlüssel und Template nicht mehr benötigt, werden sie mit einer Destroy-Operation gelöscht. Abbildung 19 zeigt nicht den gesamten Use Case, da hier nur die Funktion eines Templates visualisiert werden soll.
Abbildung 19 Erstellen eines symmetrischen Schlüssels mittels Template 5.2.3 Asynchrone Operation Das letzte Beispiel zeigt den Ablauf einer asynchronen Operation auf. Das Sequenzdiagramm (Abbildung 20) zeigt einen vereinfachten Ablauf des Use Cases. Dabei lässt der Client zuerst einen symmetrischen Schlüssel erstellen. Zu einem späteren Zeitpunkt führt er eine asynchrone Locate Operation aus. Der Schlüssel wird dabei über den Namen angesprochen. Als Antwort auf die asynchrone Operation erhält der Client die „Asynchronous Correlation Value“. Später kann der Client im Header einer Poll-Operation diesen Wert angeben, um die gewünschte asynchrone Operation auszuwählen. Im dargestellten Fall hat der Server die asynchrone Operation bei Erhalt der Poll-Nachricht bereits ausgeführt. Er kann dem Client das Resultat sofort übermitteln. Ist der Server aber noch mit der Bearbeitung der asynchronen Operation beschäftigt, sendet er als Resultat-Status „pending“ zurück. Der Client kann später einen erneuten Versuch starten.
Abbildung 20 Asynchrone Operation