Szyfrowanie i odszyfrowywanie danych za pomocą Cloud KMS (Asymetric)

1. Omówienie

Cloud KMS to hostowana w chmurze usługa zarządzania kluczami, która umożliwia zarządzanie kluczami kryptograficznymi w usługach w chmurze tak samo jak lokalnie. Obejmuje obsługę szyfrowania, odszyfrowywania, podpisywania i weryfikacji przy użyciu różnych typów kluczy i źródeł, w tym Cloud HSM w przypadku kluczy obsługiwanych sprzętowo. Z tego samouczka dowiesz się, jak szyfrować i odszyfrowywać dane przy użyciu asymetrycznych kluczy Cloud KMS.

Zobacz,

  • Jak włączyć interfejs Cloud KMS API
  • Jak utworzyć pęk kluczy
  • Jak utworzyć klucz kryptograficzny do szyfrowania/odszyfrowywania asymetrycznego

2. Konfiguracja i wymagania

Samodzielne konfigurowanie środowiska

  1. Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub wykorzystaj już istniejący. Jeśli nie masz jeszcze konta Gmail lub G Suite, musisz je utworzyć.

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

Zapamiętaj identyfikator projektu, unikalną nazwę we wszystkich projektach Google Cloud (powyższa nazwa jest już zajęta i nie będzie Ci odpowiadać). W dalszej części tego ćwiczenia w Codelabs będzie ona określana jako PROJECT_ID.

  1. Następnie musisz włączyć płatności w Cloud Console, aby korzystać z zasobów Google Cloud.

Ukończenie tego ćwiczenia z programowania nie powinno kosztować zbyt wiele. Postępuj zgodnie z instrukcjami podanymi w sekcji „Czyszczenie” W tym samouczku znajdziesz wskazówki, jak wyłączyć zasoby, aby uniknąć naliczania opłat. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego o wartości 300 USD.

Uruchamianie Cloud Shell

W tym ćwiczeniu w Codelabs wykorzystasz Cloud Shell – bezpłatne zwirtualizowane środowisko działające w Google Cloud. W konsoli GCP kliknij ikonę Cloud Shell na górnym pasku narzędzi:

vezHz_9nBUSt_0pD8eMHkzgHehRa83ILgMpcztEJtGZspECiZTk47O02PYk6Zp7jyStful3AIDEZU8qcCNbiXF4WcpkUdJi2LoUbxTWg4cZ4skDnvGKNywBZlDBzzWha111IZ1KqXQ

Uzyskanie dostępu do środowiska i połączenie się z nim powinno zająć tylko kilka chwil. Po zakończeniu powinno pojawić się coś takiego:

wQQCzLZ7_omk2cuoBaKVPnniKDFG6MsP8h2OA0j3Iw9LRSFQ9TkD6Ccq4dcUASPoD5UKe1Ur7bIgYn5gAh2r6BlQDnpFmgyAtv9x2D6ppXS0pfjfxViuEfoetgLvgVeduekc2hgU2Q

Ta maszyna wirtualna ma wszystkie potrzebne narzędzia dla programistów. Zawiera stały katalog domowy o pojemności 5 GB i działa w Google Cloud, znacząco zwiększając wydajność sieci i uwierzytelnianie. Uruchom wszystkie polecenia z tej powłoki, chyba że otrzymasz inne instrukcje.

3. Włącz usługę Cloud KMS

Aby móc używać Cloud KMS, musisz najpierw włączyć tę usługę w swoim projekcie. Wystarczy to zrobić raz w przypadku każdego projektu. Aby włączyć usługę Cloud KMS, uruchom to polecenie:

$ gcloud services enable cloudkms.googleapis.com \
    --project "${GOOGLE_CLOUD_PROJECT}"

Włączenie tej funkcji może potrwać około minuty. Po zakończeniu polecenia wskaże się jego powodzenie.

4. Utwórz klucz KMS

utworzyć pęk kluczy Cloud KMS; W Cloud KMS pęk kluczy to logiczny zbiór kluczy kryptograficznych. Pęk kluczy zawiera metadane dotyczące kluczy, takie jak ich lokalizacja. Utwórz pęk kluczy o nazwie my-keyring w regionie global:

$ gcloud kms keyrings create "my-keyring" \
    --location "global"

Teraz utwórz klucz kryptograficzny o nazwie my-asymmetric-encryption-key o celu asymmetric-encryption w utworzonym właśnie pęku kluczy.

$ gcloud kms keys create "my-asymmetric-encryption-key" \
    --location "global" \
    --keyring "my-keyring" \
    --purpose "asymmetric-encryption" \
    --default-algorithm "rsa-decrypt-oaep-4096-sha512"

5. Zaszyfruj dane

W przypadku kluczy asymetrycznych Cloud KMS nie wykonuje szyfrowania. Zamiast tego zapewnia dostęp do klucza publicznego, a Ty szyfrujesz dane przy użyciu tego klucza publicznego za pomocą kryptografii klucza publicznego. Dzięki kluczom asymetrycznym szyfrowanie może być całkowicie offline i nie wymaga dostępu do Cloud KMS ani żadnych innych interfejsów API Google Cloud. Szyfrowanie odbywa się za pomocą narzędzia kryptograficznego, takiego jak openssl, albo w języku programowania lub bibliotece, które obsługują kryptografię klucza publicznego.

Pobierz klucz publiczny z Cloud KMS:

$ gcloud kms keys versions get-public-key "1" \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-asymmetric-encryption-key" \
    --output-file ./key.pub

Utwórz plik z danymi do zaszyfrowania i użyj narzędzia wiersza poleceń openssl, by zaszyfrować dane w pliku:

$ echo "my-contents" > ./data.txt
$ openssl pkeyutl -encrypt -pubin \
    -in ./data.txt \
    -inkey ./key.pub \
    -pkeyopt "rsa_padding_mode:oaep" \
    -pkeyopt "rsa_oaep_md:sha512" \
    -pkeyopt "rsa_mgf1_md:sha512" > ./data.txt.enc

Zaszyfrowane dane (znane też jako „tekst szyfrowany”) zostaną zapisane w data.txt.enc na dysku. Po otwarciu pliku data.txt.enc zauważysz, że zawiera on dziwne znaki niedrukowalne. Wynika to z faktu, że uzyskane dane mają format binarny.

Przechowywanie tekstu zaszyfrowanego w bazie danych lub przesyłanie go w ramach żądania HTTP może wymagać zakodowania danych. Najczęstszym mechanizmem kodowania w przypadku tekstu zaszyfrowanego jest base64.

Cloud KMS nie przechowuje żadnego z podanego przez Ciebie tekstu zwykłego. Musisz zapisać ten tekst szyfrowany w bezpiecznej lokalizacji, ponieważ będzie on potrzebny do pobrania wartości zwykłego tekstu.

6. Odszyfrowywanie danych

W przeciwieństwie do szyfrowania odszyfrowywanie danych zaszyfrowanych za pomocą asymetrycznego klucza Cloud KMS wymaga dostępu online do usługi Cloud KMS. Odszyfruj tekst szyfrowany z pliku za pomocą narzędzia wiersza poleceń gcloud:

$ gcloud kms asymmetric-decrypt \


    --location "global" \
    --keyring "my-keyring" \
    --key "my-asymmetric-encryption-key" \
    --version "1" \
    --plaintext-file - \
    --ciphertext-file ./data.txt.enc

Narzędzie wiersza poleceń gcloud odczytuje tekst zaszyfrowany z pliku i odszyfrowuje go przy użyciu Cloud KMS. Zwróć uwagę na to, że w tym przykładzie argument --plaintext-file ma postać -. Dzięki temu gcloud wydrukuje wynik w terminalu.

Konsola wyświetli wartość my-contents, która jest taka sama jak wartość w postaci zwykłego tekstu z pliku powyżej.

7. Gratulacje!

Udało Ci się włączyć interfejs Cloud KMS API, utworzyć asymetryczny klucz szyfrowania oraz zaszyfrować i odszyfrować dane. Cloud KMS to zaawansowana usługa, a szyfrowanie i odszyfrowywanie w jej działaniu nie jest niczym niezwykłym.

Czyszczenie danych

Po zakończeniu analizy rozważ usunięcie projektu.

  • Otwórz konsolę Cloud Platform.
  • Wybierz projekt, który chcesz wyłączyć, a potem kliknij „Usuń” na górze ekranu. Spowoduje to zaplanowanie usunięcia projektu.

Więcej informacji

Licencja

To zadanie jest licencjonowane na podstawie ogólnej licencji Creative Commons Attribution 2.0.