Korzystanie z OVHcloud Key Management Service (KMS)

Pokaż jako Markdown

Szyfruj lub podpisuj swoje dane za pomocą regionalnego API REST usługi OVHcloud Key Management Service (KMS)

Wprowadzenie

Celem tego przewodnika jest przedstawienie kolejnych etapów interakcji z KMS OVHcloud w celu szyfrowania lub podpisywania danych.

Wymagania początkowe

W praktyce

Komunikacja z KMS

Komunikacja z KMS w celu wykonania operacji szyfrowania i podpisywania odbywa się za pośrednictwem API.

Ponieważ KMS jest zregionalizowany, dostęp do API odbywa się bezpośrednio w jego regionie: https://my-region.okms.ovh.net.

Na przykład dla KMS utworzonego w regionie eu-west-rbx: https://eu-west-rbx.okms.ovh.net.

Komunikacja z KMS jest możliwa przy użyciu:

Uwierzytelnij się za pomocą osobistego tokenu dostępu, konta serwisowego lub certyfikatu dostępu. W przypadku korzystania z API REST zalecany jest osobisty token dostępu (PAT) lub konto serwisowe. Certyfikaty dostępu są wymagane w przypadku integracji KMIP.

Aby testować wywołania API w sposób interaktywny, użyj interfejsu Swagger OKMS pod adresem https://<region>.okms.ovh.net/swagger/.

Tworzenie klucza szyfrującego przez API

Utworzenie klucza może odbyć się za pomocą lub za pomocą API właściwych dla KMS OVHcloud. Wynik nie różni się w zależności od metody tworzenia.

Info

Poniższe ścieżki wymagają identyfikatora Twojej domeny OKMS. Jest on zwracany przez następujące wywołanie API:

GET/okms/resource

Jest również widoczny, razem z regionalnym endpointem, w zakładce Informacje ogólne w .

W przypadku API właściwych dla KMS OVHcloud utworzenie klucza odbywa się za pomocą następującego API:

MetodaŚcieżkaOpis
POST/api/{okmsId}/v1/servicekeyUtworzenie lub zaimportowanie klucza CMK

API oczekuje następujących wartości:

PoleWartośćOpis
namestringNazwa klucza
contextstringDodatkowe dane identyfikacyjne umożliwiające weryfikację autentyczności klucza
typeoct, RSA, ECTyp klucza: sekwencja bajtów (oct) dla kluczy symetrycznych, RSA (RSA), Elliptic Curve (EC)
sizeIntegerRozmiar klucza - patrz tabela poniżej
operationsArrayZastosowanie klucza - patrz tabela poniżej
curveP-256, P-384, P-521(opcjonalnie) Krzywa kryptograficzna dla kluczy typu EC
extractableboolean(opcjonalnie) Określa, czy materiał klucza będzie można wyeksportować - zobacz sekcję Atrybuty wrażliwości kluczy serwisowych poniżej

Przykład tworzenia klucza symetrycznego:

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

Przykład tworzenia klucza asymetrycznego:

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

Przykład tworzenia klucza EC:

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

W zależności od typu klucza możliwe rozmiary i operacje są następujące:

  • Oct:
    • rozmiar: 128, 192, 256
    • operacje:
      • encrypt, decrypt
      • wrapKey, unwrapKey
  • RSA:
    • rozmiar: 2048, 3072, 4096
    • operacje:
      • sign, verify
      • wrapKey, unwrapKey
  • EC:
    • rozmiar: nie określać
    • curve: P-256, P-384, P-521
    • operacje: sign, verify
Info

W przypadku kluczy RSA operacje wrapKey / unwrapKey wzajemnie wykluczają się z sign / verify.

Importowanie klucza szyfrującego

Podczas tworzenia klucza możesz zaimportować istniejący klucz w postaci jawnej w formacie JWK.

Warning

Import materiału klucza w postaci jawnej nie jest zalecany w przypadku kluczy, które muszą pozostać zaufane. Preferuj bezpieczny BYOK z asymetrycznym opakowywaniem RSA.

W tym celu możesz dodać dodatkowe pole keys w treści żądania:

{
  "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"
    }
  ]
}

Klucz musi być w formacie JSON Web Key (JWK). Wartości pól zawartych w tabeli są zgodne z dokumentacją RFC 7518.

Zarządzanie kluczami szyfrującymi

Do zarządzania kluczami szyfrującymi dostępnych jest kilka API:

MetodaŚcieżkaOpis
GET/api/{okmsId}/v1/servicekeyWyświetla listę dostępnych kluczy szyfrujących
DELETE/api/{okmsId}/v1/servicekey/{keyId}Usuwa klucz szyfrujący
POST/api/{okmsId}/v1/servicekey/{keyId}/activateAktywuje klucz szyfrujący
POST/api/{okmsId}/v1/servicekey/{keyId}/deactivateDezaktywuje klucz szyfrujący

Dezaktywacja klucza szyfrującego oznacza, że nie będzie on już mógł być używany, mimo że klucz pozostaje w KMS.

Usunięcie klucza szyfrującego jest możliwe wyłącznie w przypadku klucza wcześniej dezaktywowanego.

Warning

Usunięcie klucza szyfrującego jest nieodwracalne. Wszystkie dane zaszyfrowane za jego pomocą będą trwale niedostępne.

Atrybuty wrażliwości kluczy serwisowych

Gdy tworzysz lub pobierasz klucz serwisowy, flagi wrażliwości i możliwości wyodrębnienia są zwracane w obiekcie attributes odpowiedzi GET (obok innych metadanych, takich jak state). Tylko extractable może być ustawiane przez użytkownika (przy tworzeniu lub przez PATCH). Pozostałe flagi ustawia KMS. Ustawienie extractable na true trwale ustawia never_extractable na false.

AtrybutUstawiane przez użytkownika?Opis
extractableTak (tworzenie / PATCH)Jeśli true, materiał klucza może zostać wyeksportowany (w postaci jawnej lub opakowanej, w zależności od klasy klucza). Domyślnie: false — z wyjątkiem kluczy wyłącznie publicznych, dla których wartością domyślną jest true.
never_extractableNietrue, jeśli klucz nigdy nie był możliwy do wyodrębnienia od utworzenia w KMS. Klucze zaimportowane za pomocą BYOK lub poprzez import w postaci jawnej mają never_extractable ustawione na false, ponieważ materiał istniał poza KMS przed importem. Włączenie wyodrębniania również trwale czyści tę flagę.
sensitiveNietrue, gdy klucz można wyodrębnić dopiero po opakowaniu (co wymaga również, aby extractable było true). Klucze tajne i prywatne (materiał AES/oct oraz prywatny materiał RSA/EC) są zawsze uważane za wrażliwe.
always_sensitiveNietrue, jeśli klucz był zawsze wrażliwy od utworzenia.

Przykładowa odpowiedź GET (pola skrócone):

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

Aby bezpiecznie wyodrębnić klucz, ustaw extractable na true tylko na czas operacji eksportu, wyeksportuj go z opakowaniem RSA, a następnie przywróć wartość false. Informacje znajdziesz w sekcji Eksport opakowanego klucza.

Szyfrowanie danych za pomocą KMS

Szyfrowanie w KMS

KMS OVHcloud dysponuje dedykowanym API szyfrowania przeznaczonym do szyfrowania małych ilości danych (mniej niż 4 kB).

Jest to najprostsza metoda, która jednak nie zapewnia najlepszej wydajności.

MetodaŚcieżkaOpis
POST/api/{okmsId}/v1/servicekey/{keyId}/encryptSzyfrowanie danych za pomocą klucza CMK

API oczekuje następujących wartości:

PoleWartośćOpis
plaintextstringDane do zaszyfrowania
contextstringDodatkowe dane identyfikacyjne umożliwiające weryfikację autentyczności danych

Przykład szyfrowania

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

Następnie API zwraca zaszyfrowane dane w polu ciphertext:

{
  "ciphertext": "Encrypted data",
}

Deszyfrowanie danych odbywa się w sposób odwrotny za pomocą API:

MetodaŚcieżkaOpis
POST/api/{okmsId}/v1/servicekey/{keyId}/decryptDeszyfrowanie danych za pomocą klucza CMK

API oczekuje następujących wartości:

PoleWartośćOpis
ciphertextstringDane do zdeszyfrowania
contextstringDodatkowe dane identyfikacyjne umożliwiające weryfikację autentyczności danych

Pole context musi mieć taką samą wartość jak ta podana podczas szyfrowania.

Szyfrowanie za pomocą Data Key (DK)

Aby uzyskać większą wydajność, możesz wygenerować Data Key (DK) na podstawie klucza symetrycznego (AES), aby używać go z poziomu swojej aplikacji. Wykorzystywany klucz AES musi zostać wygenerowany z operacjami wrapKey i unwrapKey.

Szyfrowanie za pomocą DK

Wygenerowanie DK odbywa się za pomocą następującego API:

MetodaŚcieżkaOpis
POST/api/{okmsId}/v1/servicekey/{keyId}/datakeyGeneruje klucz DK pochodny od klucza CMK

API oczekuje następujących wartości:

PoleWartośćOpis
namestringNazwa klucza
sizeIntegerRozmiar klucza (64-4096)

Przykład generowania Data Key:

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

Następnie API zwróci Data Key:

{
  "key": "string",
  "plaintext": "string"
}
  • key: zaszyfrowany klucz zakodowany w base64. Ta informacja musi być przechowywana wraz z zaszyfrowanymi danymi i będzie używana do deszyfrowania przez KMS.
  • plaintext: klucz jawny zakodowany w base64. Ta informacja musi zostać usunięta po zakończeniu szyfrowania i nie może być zapisywana w kopii zapasowej.

Wykorzystanie Data Key odbywa się następnie za pomocą algorytmów szyfrowania takich jak AES-GCM, który nie jest omawiany w niniejszej dokumentacji.

Deszyfrowanie za pomocą DK

Odwrotnie, możesz pobrać zdeszyfrowaną wersję Data Key za pomocą następującego API:

MetodaŚcieżkaOpis
POST/api/{okmsId}/v1/servicekey/{keyId}/datakey/decryptDeszyfrowanie klucza DK

API oczekuje następujących wartości:

PoleWartośćOpis
keystringZaszyfrowany Data Key

I zwraca zdeszyfrowany Data Key w polu plaintext.

Podpisywanie za pomocą KMS

Podpisywanie pliku odbywa się za pomocą klucza prywatnego z pary kluczy asymetrycznych.

Obsługiwane algorytmy

KMS OVHcloud obsługuje następującą listę algorytmów podpisywania:

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

Zgodnie z dokumentacją RFC 7518.

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

Zgodnie z dokumentacją RFC 7518.

  • RSASSA-PSS
NazwaDigital 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

Zgodnie z dokumentacją RFC 7518.

Podpisywanie wiadomości

Ponieważ klucza prywatnego nie można wyodrębnić z KMS w postaci jawnej, podpisywanie może odbywać się wyłącznie bezpośrednio w KMS.

MetodaŚcieżkaOpis
POST/api/{okmsId}/v1/servicekey/{keyId}/signPodpisywanie pliku

API oczekuje następujących wartości:

PoleWartośćOpis
messagestringWiadomość do podpisania w formacie base64
algstringAlgorytm podpisywania
isdigestbooleanWskazuje, czy wiadomość jest już zahaszowana

Przykład podpisywania:

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

Następnie API zwróci podpis pliku:

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

Weryfikacja pliku

Weryfikacja pliku może odbywać się bezpośrednio w KMS lub przy użyciu klucza publicznego.

W KMS możesz użyć następującego API:

MetodaŚcieżkaOpis
POST/api/{okmsId}/v1/servicekey/{keyId}/verifyWeryfikacja podpisu

API oczekuje następujących wartości:

PoleWartośćOpis
messagestringWiadomość do podpisania
signaturestringPodpis powiązany z wiadomością
algstringAlgorytm podpisywania
isdigestbooleanWskazuje, czy wiadomość jest już zahaszowana

Przykład weryfikacji

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

Następnie API zwróci wynik weryfikacji:

{
  "result": true
}

Sprawdź również

Import i eksport kluczy w OVHcloud KMS za pomocą BYOK

Metody uwierzytelniania OKMS

Jak połączyć zgodny produkt za pomocą protokołu KMIP

Dołącz do grona naszych użytkowników.

Czy ta strona była pomocna?