For AI agents: the complete documentation index is available at https://docs.ovhcloud.com/pl/llms.txt, the full documentation bundle is available at https://docs.ovhcloud.com/pl/llms-full.txt, and this page is available as Markdown at https://docs.ovhcloud.com/pl/guides/manage-and-operate/kms/kms-usage.md.

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
protectionLevelSOFTWARE, HSM(opcjonalnie) Poziom ochrony klucza: SOFTWARE (domyślny) — operacje kryptograficzne są wykonywane w oprogramowaniu; HSM — operacje są wykonywane na współdzielonym specjalistycznym sprzęcie (HSM). Kluczy HSM nie można używać w BYOK.
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"
}

Przykład tworzenia klucza chronionego przez HSM:

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

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

Klucze są tworzone lub importowane bezpośrednio w stanie active. Dezaktywacja klucza uniemożliwia jego użycie kryptograficzne, ale klucz pozostaje w KMS. Usunąć można wyłącznie klucz w stanie deactivated lub compromised.

Operacje dozwolone w każdym stanie znajdziesz w sekcji Stany kluczy serwisowych i dozwolone operacje.

Warning

Usunięcie klucza szyfrującego jest nieodwracalne. Wszystkie dane zaszyfrowane tym kluczem stają się trwale niedostępne.

Stany kluczy serwisowych i dozwolone operacje

Stan klucza serwisowego określa, które operacje akceptuje KMS, zgodnie z modelami cyklu życia kluczy zdefiniowanymi w KMIP 2.1 i NIST SP 800-57:

  • Klucz active może być używany do każdej operacji kryptograficznej wymienionej w jego polu operations.
  • Klucz deactivated lub compromised nie akceptuje operacji kryptograficznych. Nie może już chronić danych (encrypt, sign, opakowywać, generować Data Keys), odzyskiwać ich (decrypt, odpakowywać Data Keys) ani weryfikować podpisów. Operacje zarządzania (odczyt, wyświetlanie listy, patch, aktywacja, dezaktywacja, usunięcie) pozostają dostępne.
  • Po DELETE klucz zostaje trwale usunięty: każde późniejsze żądanie dotyczące tego identyfikatora klucza zwraca 404 Not Found.

Zmiany stanu obowiązują natychmiast, bez opóźnienia propagacji: każde żądanie otrzymane po udanym activate, deactivate lub DELETE jest oceniane względem nowego stanu.

Operacjaactivedeactivatedcompromisedpo DELETE
GET /servicekey/{keyId}TakTakTak404
GET /servicekeyTakTak
Wymaga state=deactivated
lub state=all
Tak
Wymaga state=compromised
lub state=all
Nie na liście
PATCH /servicekey/{keyId}TakTakTak404
POST /servicekey/{keyId}/activateno-op
204
Tak
Przywraca active
Tak
Przywraca active
404
POST /servicekey/{keyId}/deactivateTakno-op przy tym samym powodzie
W przeciwnym razie aktualizuje powód
(i ewentualnie stan)
no-op przy tym samym powodzie
W przeciwnym razie aktualizuje powód
(i ewentualnie stan)
404
DELETE /servicekey/{keyId}Nie
400
TakTak404
POST /servicekey/{keyId}/encryptTakNie
400
Nie
400
404
POST /servicekey/{keyId}/decryptTakNie
400
Nie
400
404
POST /servicekey/{keyId}/datakeyTakNie
400
Nie
400
404
POST /servicekey/{keyId}/datakey/decryptTakNie
400
Nie
400
404
POST /servicekey/{keyId}/signTakNie
400
Nie
400
404
POST /servicekey/{keyId}/verifyTakNie
400
Nie
400
404
GET /servicekey/{keyId}?wrappingKeyId=...
Eksport opakowanego klucza, stan klucza eksportowanego
TakTakTak404
GET /servicekey/{keyId}?wrappingKeyId=...
Eksport opakowanego klucza, stan klucza opakowującego
TakNie
400
Nie
400
404
POST /servicekey + wrappedKeys
Import opakowanego klucza, stan klucza opakowującego
TakNie
400
Nie
400
404
Warning

Dezaktywacja natychmiast uniemożliwia odzyskanie danych chronionych przez klucz. Gdy stosowane jest szyfrowanie kopertowe (envelope encryption), Data Keys opakowane dezaktywowanym kluczem serwisowym nie mogą zostać odpakowane, dopóki klucz nie zostanie ponownie aktywowany. Przed dezaktywacją upewnij się, że aplikacje nie wymagają już klucza, albo zachowaj ścieżkę odzyskiwania za pomocą POST /servicekey/{keyId}/activate.

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?