OVHcloud Key Management Service (KMS) verwenden

Als Markdown ansehen

Verschlüsseln oder signieren Sie Ihre Daten mit der regionalen REST-API des OVHcloud Key Management Service (KMS)

Ziel

Ziel dieser Anleitung ist es, Ihnen die Schritte zur Interaktion mit dem OVHcloud KMS zu zeigen, um Ihre Daten zu verschlüsseln oder zu signieren.

Voraussetzungen

In der praktischen Anwendung

Mit dem KMS kommunizieren

Die Kommunikation mit dem KMS für Verschlüsselungs- und Signaturvorgänge erfolgt über APIs.

Da das KMS regionalisiert ist, greifen Sie direkt in seiner Region auf die API zu: https://my-region.okms.ovh.net.

Zum Beispiel für ein KMS, das in der Region eu-west-rbx erstellt wurde: https://eu-west-rbx.okms.ovh.net.

Sie können mit dem KMS wie folgt kommunizieren:

Authentifizieren Sie sich mit einem Personal Access Token, einem Service-Account oder einem Zugriffszertifikat. Für die Nutzung der REST-API werden ein PAT oder ein Service-Account empfohlen. Zugriffszertifikate sind für KMIP-Integrationen erforderlich.

Um API-Aufrufe interaktiv zu testen, verwenden Sie die OKMS Swagger UI unter https://<region>.okms.ovh.net/swagger/.

Einen Verschlüsselungsschlüssel über die API erstellen

Die Erstellung eines Schlüssels kann entweder über die oder über die spezifische OVHcloud KMS API erfolgen. Das Ergebnis unterscheidet sich je nach Erstellungsmethode nicht.

Info

Die folgenden Routen erwarten die Kennung Ihrer OKMS-Domain. Sie wird vom folgenden API-Aufruf zurückgegeben:

GET/okms/resource

Sie erscheint zusammen mit dem regionalen Endpoint auch im Tab Allgemeine Informationen im .

Im Fall der spezifischen OVHcloud KMS API erstellen Sie einen Schlüssel über die folgende API:

MethodePfadBeschreibung
POST/api/{okmsId}/v1/servicekeyEinen CMK erstellen oder importieren

Die API erwartet die folgenden Werte:

FeldWertBeschreibung
namestringName des Schlüssels
contextstringZusätzliche Identifikationsdaten zur Überprüfung der Authentizität des Schlüssels
typeoct, RSA, ECSchlüsseltyp: Byte-Sequenz (oct) für symmetrische Schlüssel, RSA (RSA), Elliptic Curve (EC)
sizeIntegerSchlüsselgröße – siehe Tabelle unten
operationsArraySchlüsselverwendung – siehe Tabelle unten
curveP-256, P-384, P-521(optional) Kryptografische Kurve für Schlüssel vom Typ EC
extractableboolean(optional) Gibt an, ob das Schlüsselmaterial später exportiert werden kann – siehe Abschnitt Sensitivitätsattribute von Serviceschlüsseln weiter unten

Beispiel für die Erstellung eines symmetrischen Schlüssels:

{
  "name": "My first AES key",
  "context": "project A",
  "type": "oct",
  "size": 256,
  "operations": [
    "encrypt",
    "decrypt"
  ]
}

Beispiel für die Erstellung eines asymmetrischen Schlüssels:

{
  "name": "My first RSA key",
  "context": "project A",
  "type": "RSA",
  "size": 4096,
  "operations": [
    "sign",
    "verify"
  ]
}

Beispiel für die Erstellung eines EC-Schlüssels:

{
  "name": "My first EC key",
  "context": "project A",
  "type": "EC",
  "operations": [
    "sign",
    "verify"
  ],
  "curve": "P-256"
}

Je nach Schlüsseltyp sind die möglichen Größen und Operationen die folgenden:

  • Oct:
    • Größe: 128, 192, 256
    • Operationen:
      • encrypt, decrypt
      • wrapKey, unwrapKey
  • RSA:
    • Größe: 2048, 3072, 4096
    • Operationen:
      • sign, verify
      • wrapKey, unwrapKey
  • EC:
    • Größe: nicht angeben
    • curve: P-256, P-384, P-521
    • Operationen: sign, verify
Info

Bei RSA-Schlüsseln schließen sich wrapKey / unwrapKey und sign / verify gegenseitig aus.

Einen Verschlüsselungsschlüssel importieren

Beim Erstellen eines Schlüssels können Sie einen vorhandenen Schlüssel im Klartext als JWK importieren.

Warning

Der Import von Schlüsselmaterial im Klartext wird für Schlüssel, die vertrauenswürdig bleiben müssen, nicht empfohlen. Bevorzugen Sie sicheres BYOK mit asymmetrischer RSA-Umschließung.

Fügen Sie dazu ein zusätzliches Feld keys in den Body der Anfrage ein:

{
  "name": "My imported key",
  "keys": [
    {
      "kid": "string",
      "use": "string",
      "key_ops": [
        "string"
      ],
      "alg": "string",
      "kty": "oct",
      "n": "string",
      "e": "string",
      "k": "string",
      "crv": "string",
      "x": "string",
      "y": "string",
      "d": "string",
      "dp": "string",
      "dq": "string",
      "p": "string",
      "q": "string",
      "qi": "string"
    }
  ]
}

Der Schlüssel muss im Format JSON Web Key (JWK) vorliegen. Die Werte der in der Tabelle enthaltenen Felder folgen der Dokumentation der RFC 7518.

Verschlüsselungsschlüssel verwalten

Zur Verwaltung der Verschlüsselungsschlüssel stehen mehrere APIs zur Verfügung:

MethodePfadBeschreibung
GET/api/{okmsId}/v1/servicekeyListet die verfügbaren Verschlüsselungsschlüssel auf
DELETE/api/{okmsId}/v1/servicekey/{keyId}Löscht einen Verschlüsselungsschlüssel
POST/api/{okmsId}/v1/servicekey/{keyId}/activateAktiviert einen Verschlüsselungsschlüssel
POST/api/{okmsId}/v1/servicekey/{keyId}/deactivateDeaktiviert einen Verschlüsselungsschlüssel

Die Deaktivierung eines Verschlüsselungsschlüssels bedeutet, dass dieser nicht mehr verwendbar ist, obwohl der Schlüssel im KMS erhalten bleibt.

Das Löschen eines Verschlüsselungsschlüssels ist nur bei einem zuvor deaktivierten Schlüssel möglich.

Warning

Das Löschen eines Verschlüsselungsschlüssels ist endgültig. Alle damit verschlüsselten Daten werden dauerhaft unzugänglich.

Sensitivitätsattribute von Serviceschlüsseln

Wenn Sie einen Serviceschlüssel erstellen oder abrufen, werden die Flags für Sensitivität und Extrahierbarkeit im Objekt attributes der GET-Antwort zurückgegeben (neben anderen Metadaten wie state). Nur extractable ist vom Benutzer setzbar (bei der Erstellung oder per PATCH). Die anderen Flags werden vom KMS gesetzt. Das Setzen von extractable auf true setzt never_extractable dauerhaft auf false.

AttributVom Benutzer setzbar?Beschreibung
extractableJa (Erstellung / PATCH)Wenn true, kann das Schlüsselmaterial exportiert werden (im Klartext oder umschlossen, je nach Schlüsselklasse). Standard: false — mit Ausnahme rein öffentlicher Schlüssel, die standardmäßig true sind.
never_extractableNeintrue, wenn der Schlüssel seit seiner Erstellung im KMS nie extrahierbar war. Bei Schlüsseln, die mit BYOK importiert oder per Klartextimport übernommen wurden, ist never_extractable auf false gesetzt, weil das Material vor dem Import außerhalb des KMS existierte. Das Aktivieren der Extraktion löscht dieses Flag ebenfalls dauerhaft.
sensitiveNeintrue, wenn der Schlüssel nur nach Umschließung extrahiert werden kann (wozu auch extractable auf true gesetzt sein muss). Geheime und private Schlüssel (AES/oct sowie privates RSA/EC-Material) gelten stets als sensibel.
always_sensitiveNeintrue, wenn der Schlüssel seit seiner Erstellung stets sensibel war.

Beispiel einer GET-Antwort (Felder gekürzt):

{
  "id": "<key-id>",
  "name": "aes-to-export",
  "type": "oct",
  "attributes": {
    "state": "active",
    "extractable": true,
    "never_extractable": false,
    "sensitive": true,
    "always_sensitive": true
  }
}

Um einen Schlüssel sicher zu extrahieren, setzen Sie extractable nur für den Exportvorgang auf true, exportieren Sie ihn mit RSA-Umschließung und setzen Sie es anschließend wieder auf false. Siehe Einen umschlossenen Schlüssel exportieren.

Daten mit dem KMS verschlüsseln

Verschlüsselung über das KMS

Das OVHcloud KMS verfügt über eine dedizierte Verschlüsselungs-API für die Verschlüsselung kleiner Datenmengen (weniger als 4 kB).

Dies ist die einfachste Methode, sie bietet jedoch nicht die beste Performance.

MethodePfadBeschreibung
POST/api/{okmsId}/v1/servicekey/{keyId}/encryptDatenverschlüsselung mit einem CMK

Die API erwartet die folgenden Werte:

FeldWertBeschreibung
plaintextstringZu verschlüsselnde Daten
contextstringZusätzliche Identifikationsdaten zur Überprüfung der Authentizität der Daten

Beispiel für die Verschlüsselung

{
  "plaintext": "My secret data",
  "context": "Project A"
}

Die API gibt die verschlüsselten Daten anschließend in einem Feld ciphertext zurück:

{
  "ciphertext": "Encrypted data",
}

Die Entschlüsselung der Daten erfolgt umgekehrt über die API:

MethodePfadBeschreibung
POST/api/{okmsId}/v1/servicekey/{keyId}/decryptDatenentschlüsselung mit einem CMK

Die API erwartet die folgenden Werte:

FeldWertBeschreibung
ciphertextstringZu entschlüsselnde Daten
contextstringZusätzliche Identifikationsdaten zur Überprüfung der Authentizität der Daten

Das Feld context muss denselben Wert haben wie der bei der Verschlüsselung angegebene.

Verschlüsselung mit einem Data Key (DK)

Für eine bessere Performance können Sie einen Data Key (DK) aus einem symmetrischen Schlüssel (AES) generieren, um ihn in Ihrer Anwendung zu verwenden. Der verwendete AES-Schlüssel muss mit den Operationen wrapKey und unwrapKey generiert worden sein.

Verschlüsselung mit DK

Sie können einen DK über die folgende API generieren:

MethodePfadBeschreibung
POST/api/{okmsId}/v1/servicekey/{keyId}/datakeyGeneriert einen von einem CMK abgeleiteten DK

Die API erwartet die folgenden Werte:

FeldWertBeschreibung
namestringName des Schlüssels
sizeIntegerSchlüsselgröße (64-4096)

Beispiel für die Generierung eines Data Key:

{
  "name": "My Data Key",
  "size": 4096
}

Die API gibt anschließend den Data Key zurück:

{
  "key": "string",
  "plaintext": "string"
}
  • key: verschlüsselter, in base64 codierter Schlüssel. Diese Information muss mit den verschlüsselten Daten gespeichert werden und wird vom KMS für die Entschlüsselung verwendet.
  • plaintext: Schlüssel im Klartext, in base64 codiert. Diese Information muss nach Abschluss der Verschlüsselung gelöscht werden und darf nicht gesichert werden.

Die Verwendung des Data Key erfolgt anschließend über Verschlüsselungsalgorithmen wie AES-GCM. Dies wird in dieser Dokumentation nicht behandelt.

Entschlüsselung mit DK

Umgekehrt können Sie die entschlüsselte Version eines Data Key über die folgende API abrufen:

MethodePfadBeschreibung
POST/api/{okmsId}/v1/servicekey/{keyId}/datakey/decryptEntschlüsselung eines DK

Die API erwartet die folgenden Werte:

FeldWertBeschreibung
keystringVerschlüsselter Data Key

Und sie gibt den entschlüsselten Data Key in einem Feld plaintext zurück.

Mit dem KMS signieren

Die Signatur einer Datei erfolgt mit dem privaten Schlüssel eines asymmetrischen Schlüsselpaars.

Unterstützte Algorithmen

Das OVHcloud KMS unterstützt die folgende Liste von Signaturalgorithmen:

  • RSASSA-PKCS1 v1.5
NameDigital Signature Algorithm
RS256RSASSA-PKCS1-v1_5 using SHA-256
RS384RSASSA-PKCS1-v1_5 using SHA-384
RS512RSASSA-PKCS1-v1_5 using SHA-512

Gemäß der Dokumentation der RFC 7518.

  • ECDSA
NameDigital Signature Algorithm
ES256ECDSA using P-256 and SHA-256
ES384ECDSA using P-384 and SHA-384
ES512ECDSA using P-521 and SHA-512

Gemäß der Dokumentation der RFC 7518.

  • RSASSA-PSS
NameDigital Signature Algorithm
PS256RSASSA-PSS using SHA-256 and MGF1 with SHA-256
PS384RSASSA-PSS using SHA-384 and MGF1 with SHA-384
PS512RSASSA-PSS using SHA-512 and MGF1 with SHA-512

Gemäß der Dokumentation der RFC 7518.

Signatur einer Nachricht

Da der private Schlüssel nicht im Klartext aus dem KMS extrahiert werden kann, kann die Signatur nur direkt über das KMS erfolgen.

MethodePfadBeschreibung
POST/api/{okmsId}/v1/servicekey/{keyId}/signSignatur einer Datei

Die API erwartet die folgenden Werte:

FeldWertBeschreibung
messagestringZu signierende Nachricht im base64-Format
algstringSignaturalgorithmus
isdigestbooleanGibt an, ob die Nachricht bereits gehasht ist

Beispiel für eine Signatur:

{
  "message": "SGVsbG8gV29ybGQ=",
  "alg": "RS256",
  "isdigest": false
}

Die API gibt anschließend die Signatur der Datei zurück:

{
  "signature": "EmUGXC6rsFTWtmFn77y6NS/U6IuhThApVKWTZdXjE7rDMonRPPxbjTo01HQN62J3Dxqyw=="
}

Eine Datei überprüfen

Sie können eine Datei entweder direkt über das KMS oder mithilfe des öffentlichen Schlüssels überprüfen.

Über das KMS können Sie die folgende API verwenden:

MethodePfadBeschreibung
POST/api/{okmsId}/v1/servicekey/{keyId}/verifyÜberprüfung einer Signatur

Die API erwartet die folgenden Werte:

FeldWertBeschreibung
messagestringZu signierende Nachricht
signaturestringDer Nachricht zugeordnete Signatur
algstringSignaturalgorithmus
isdigestbooleanGibt an, ob die Nachricht bereits gehasht ist

Beispiel für eine Überprüfung

{
  "message": "SGVsbG8gV29ybGQ=",
  "signature": "EmUGXC6rsFTWtmFn77y6NS/U6IuhThApVKWTZdXjE7rDMonRPPxbjTo01HQN62J3Dxqyw==",
  "alg": "RS256",
  "isdigest": false
}

Die API gibt anschließend das Ergebnis der Überprüfung zurück:

{
  "result": true
}

Weiterführende Informationen

Schlüssel auf OVHcloud KMS mit BYOK importieren und exportieren

OKMS-Authentifizierungsmethoden

Anleitung zum Verbinden eines kompatiblen Produkts über das KMIP-Protokoll

Treten Sie unserer User Community bei.

War diese Seite hilfreich?