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

1. Przegląd

Cloud KMS to hostowana w chmurze usługa zarządzania kluczami, która umożliwia zarządzanie kluczami kryptograficznymi dla usług w chmurze w taki sam sposób jak w przypadku usług lokalnych. Obsługuje szyfrowanie, odszyfrowywanie, podpisywanie i weryfikację przy użyciu różnych typów i źródeł kluczy, w tym Cloud HSM w przypadku kluczy zabezpieczonych sprzętowo. Z tego samouczka dowiesz się, jak szyfrować i odszyfrowywać dane za pomocą asymetrycznych kluczy Cloud KMS.

Dowiesz się

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

2. Konfiguracja i wymagania

Samodzielne konfigurowanie środowiska

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

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZwci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

Zapamiętaj identyfikator projektu, czyli unikalną nazwę we wszystkich projektach Google Cloud (podana powyżej nazwa jest już zajęta i nie będzie działać w Twoim przypadku). W dalszej części tego laboratorium będzie on nazywany PROJECT_ID.

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

Ukończenie tego laboratorium nie powinno wiązać się z dużymi kosztami, a nawet z żadnymi. Wykonaj instrukcje z sekcji „Czyszczenie”, w której znajdziesz informacje o tym, jak wyłączyć zasoby, aby uniknąć naliczenia opłat po zakończeniu tego samouczka. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego o wartości 300 USD.

Uruchom Cloud Shell

W tym ćwiczeniu użyjesz Cloud Shell, czyli bezpłatnego zwirtualizowanego środowiska działającego w Google Cloud. W konsoli GCP kliknij ikonę Cloud Shell na pasku narzędzi w prawym górnym rogu:

vezHz_9nBUSt_0pD8eMHkzgHehRa83ILgMpcztEJtGZspECiZTk47O02PYk6Zp7jyStful3AIDEZU8qcCNbiXF4WcpkUdJi2LoUbxTWg4cZ4skDnvGKNywBZlDBzzWha111IZ1KqXQ

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

wQQCzLZ7_omk2cuoBaKVPnniKDFG6MsP8h2OA0j3Iw9LRSFQ9TkD6Ccq4dcUASPoD5UKe1Ur7bIgYn5gAh2r6BlQDnpFmgyAtv9x2D6ppXS0pfjfxViuEfoetgLvgVeduekc2hgU2Q

Ta maszyna wirtualna zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera również stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i usprawnia proces uwierzytelniania. O ile nie podano inaczej, wszystkie polecenia uruchamiaj w tej powłoce.

3. Włączanie usługi Cloud KMS

Zanim zaczniesz korzystać z Cloud KMS, musisz najpierw włączyć tę usługę w projekcie. Wystarczy to zrobić tylko raz na projekt. Aby włączyć usługę Cloud KMS, uruchom to polecenie:

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

Włączenie tej opcji może potrwać około minuty. Po zakończeniu polecenia pojawi się komunikat o powodzeniu.

4. Tworzenie klucza KMS

Utwórz pęk kluczy Cloud KMS. W Cloud KMS pęk kluczy to logiczny zbiór kluczy kryptograficznych. Pęk kluczy zawiera metadane 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 w utworzonym pęku kluczy utwórz klucz kryptograficzny o nazwie my-asymmetric-encryption-key i przeznaczeniu asymmetric-encryption.

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

5. Szyfrowanie danych

W przypadku kluczy asymetrycznych Cloud KMS nie wykonuje szyfrowania. Zamiast tego zapewnia dostęp do klucza publicznego, za pomocą którego możesz szyfrować dane przy użyciu kryptografii klucza publicznego. W przypadku kluczy asymetrycznych szyfrowanie może być przeprowadzane całkowicie offline i nie wymaga dostępu do Cloud KMS ani żadnych innych interfejsów Google Cloud API. Szyfrowanie odbywa się za pomocą narzędzia kryptograficznego, takiego jak openssl, lub języka programowania bądź biblioteki obsługującej 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, aby 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 (zwane też „szyfrogramem”) zostaną zapisane w data.txt.enc na dysku. Jeśli otworzysz plik data.txt.enc, zauważysz, że zawiera on dziwne, niedrukowalne znaki. Dzieje się tak, ponieważ wynikowe dane są w formacie binarnym.

Podczas przechowywania tekstu zaszyfrowanego w bazie danych lub przesyłania go w ramach żądania HTTP może być konieczne zakodowanie danych. Najpopularniejszym mechanizmem kodowania tekstu szyfrowanego jest base64.

Cloud KMS nie przechowuje żadnego z dostarczonych przez Ciebie tekstów jawnych. Musisz zapisać ten tekst szyfrowany w bezpiecznym miejscu, ponieważ będzie on potrzebny do pobrania wartości w formie tekstu jawnego.

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 zaszyfrowany w 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 za pomocą Cloud KMS. Zwróć uwagę, że w tym przykładzie argument --plaintext-file ma wartość -. To polecenie spowoduje gcloud wydrukowanie wyniku w terminalu.

Konsola wyświetli wartość my-contents, czyli tę samą wartość w postaci zwykłego tekstu z pliku powyżej.

7. Gratulacje!

Włączono interfejs Cloud KMS API, utworzono asymetryczny klucz szyfrowania oraz zaszyfrowano i odszyfrowano dane. Cloud KMS to zaawansowana usługa, a szyfrowanie i odszyfrowywanie to tylko niektóre z jej funkcji.

Czyszczenie danych

Jeśli skończysz eksplorowanie, rozważ usunięcie projektu.

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

Więcej informacji

Licencja

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