Zarządzanie kluczami w module HSM w chmurze Azure

Efektywne zarządzanie kluczami ma kluczowe znaczenie dla optymalizacji wydajności, zabezpieczeń i wydajności modułu HSM w chmurze Azure. Ten artykuł zawiera najlepsze praktyki i zalecenia dotyczące obsługi limitów przechowywania kluczy, zabezpieczeń związanych z owijaniem kluczy, kluczowych atrybutów i strategii buforowania.

Zarządzanie limitem przechowywania kluczy

Sprzętowe moduły zabezpieczeń (HSM) mają limity maksymalnej liczby tokenów i kluczy sesji, które mogą być przechowywane jednocześnie. Aby uzyskać szczegółowe informacje na temat tych limitów, zobacz Azure Limity usługi HSM w chmurze.

Aby uniknąć przekroczenia Azure limitów usługi HSM w chmurze, rozważ użycie co najmniej jednej z następujących strategii efektywnego zarządzania kluczami:

  • Rotacja kluczy: Obracanie kluczy często w celu zapewnienia wymiany starszych kluczy i zwolnienia miejsca dla nowych. Częsta rotacja pomaga utrzymanie modułu HSM w ramach limitów przechowywania, zapewniając bezpieczeństwo.
  • Hierarchia kluczy: użyj hierarchii kluczy, w której klucze podstawowe są używane do szyfrowania innych kluczy. Ta hierarchia zmniejsza liczbę kluczy, które muszą być przechowywane bezpośrednio w module HSM.
  • Udostępnianie kluczy i ponowne użycie: w przypadku aplikacji z wieloma sesjami lub tokenami rozważ udostępnienie kluczy lub ponowne użycie ich w celu zmniejszenia całkowitej liczby przechowywanych.
  • Usuwanie klucza: po zakończeniu sesji nie potrzebujesz już klucza (na przykład po zakończeniu sesji), upewnij się, że jest bezpiecznie usuwany, aby zwolnić miejsce dla nowych kluczy.

Uwaga

Poczekaj 24 godziny po utworzeniu klucza, aby upewnić się, że synchronizacja i kopie zapasowe w ramach wdrożenia modułu HSM w chmurze Azure zostały ukończone.

Ostrzeżenie

Jeśli klucz istnieje tylko w jednym węźle i ten węzeł ulegnie awarii bez kopii zapasowej, możesz trwale zablokować dostęp do swoich zaszyfrowanych danych bez możliwości odzyskania. Zawsze sprawdzaj, czy klucze są synchronizowane we wszystkich węzłach i utrzymują regularne kopie zapasowe.

Podczas tworzenia użytkowników jest to odpowiedzialność klienta za zapewnienie obecności użytkowników we wszystkich węzłach klastra modułu HSM w chmurze Azure. Aby uzyskać więcej informacji, zobacz Zapewnianie, że użytkownicy modułu HSM są dostępni we wszystkich węzłach klastra. Aby uzyskać instrukcje dotyczące synchronizowania brakujących kluczy, zobacz Synchronizowanie użytkowników i kluczy w węzłach Azure Cloud HSM.

Zarządzanie zawijaniem kluczy

Używasz atrybutu EXTRACTABLE w Azure Cloud HSM do oznaczenia kluczy jako wyodrębnialne lub niewyodrębnialne. Domyślnie klucze HSM są ustawiane jako możliwe do wyodrębnienia. Klucze możliwe do wyodrębnienia można wyeksportować z modułu HSM przy użyciu mechanizmu owijania klucza, który je szyfruje. Następnie klucze muszą zostać rozpakowane przy użyciu tego samego klucza do owinięcia przed użyciem.

Natomiast kluczy nieeksportowalnych nie można w żadnym razie eksportować z Azure Cloud HSM. Po ustawieniu kluczy jako niewyodrębnialne nie ma możliwości zmiany ich na wyodrębnialne. Należy dokładnie rozważyć, czy potrzebne jest, aby klucze były wyciągane i odpowiednio ustawić atrybut klucza.

Jeśli aplikacja wymaga zawijania kluczy, zalecamy użycie zaufanego zawijania kluczy. Takie podejście ogranicza użytkownikom modułu HSM opakowywanie i rozpakowywanie tylko tych kluczy, które administrator jawnie wskazał jako zaufane.

  • EXTRACTABLE=0: klucze utworzone za pomocą atrybutu ustawionego EXTRACTABLE na 0 nie mogą być eksportowane, z wyjątkiem obiektów maskowanych. Są one idealne dla kluczy, które nigdy nie powinny opuszczać modułu HSM.

  • WRAP_WITH_TRUSTED=1: Domyślnie klucze, które można wyodrębnić, utworzone za pomocą Azure Cloud HSM SDK, używają zaufanego opakowywania kluczy. Jednak specyfikacja PKCS#11 domyślnie ustawia WRAP_WITH_TRUSTED na CK_FALSE (0). Bez zaufanego zawijania kluczy użytkownik kryptografii może wyeksportować prywatny materiał klucza bez żadnej autoryzacji. Każdy, kto ma access do aplikacji klienckiej i używa tych kluczy, może je wyeksportować w postaci zwykłego tekstu.

Obsługa atrybutów klucza dla dostawców modułu HSM w chmurze Azure

Dostawca modułu HSM w chmurze Azure Atrybuty domyślne dla kluczy prywatnych i symetrycznych Obsługuje funkcję EXTRACTABLE=0 Obsługuje konfigurowanie WRAP_WITH_TRUSTED w ramach dostawcy Domyślna wartość WRAP_WITH_TRUSTED
azcloudhsm_util EXTRACTABLE, !WRAP_WITH_TRUSTED Tak Tak 1 (0 można ustawić za pomocą parametrów)
PKCS#11 EXTRACTABLE, !WRAP_WITH_TRUSTED Tak Tak 0 (określone w specyfikacji PKCS#11, ale można ustawić na 1 w interfejsie API)
CNG/KSP EXTRACTABLE, !WRAP_WITH_TRUSTED Nie. Nie. 1
Silnik OpenSSL EXTRACTABLE, !WRAP_WITH_TRUSTED Nie. Nie. 1
JCE !EXTRACTABLE, !PERSISTANT, !WRAP_WITH_TRUSTED Tak Nie. 1

Klucze tworzone przy użyciu interfejsu API kryptografii nowej generacji (CNG) są zawsze ustawione jako EXTRACTABLE. Za pomocą narzędzia CavImportKey.exe można zaimportować klucze z innych narzędzi Azure Cloud HSM do dostawcy CNG poprzez ich uchwyty kluczy. Ten import tworzy klucz u dostawcy magazynowania kluczy (KSP) z istniejących uchwytów kluczy.

W przypadku urzędów certyfikacji korzystających z CNG lub KSP jako dostawcy wszystkie klucze wygenerowane w dostawcy CNG są nadal oznaczone jako możliwe do wyodrębnienia. Jeśli klucz jest oznaczony jako TRUSTED w module HSM (na przykład klucz szyfrujący generowany przez użytkownika), może służyć do wyodrębnienia klucza prywatnego w postaci zwykłego tekstu, nawet po zmianie WRAP_WITH_TRUSTED.

W takich przypadkach zalecamy użycie polecenia azcloudhsm_util w celu wygenerowania klucza, jeśli nie chcesz, aby został on oznaczony jako EXTRACTABLE. Zalecamy użycie getAttribute polecenia w celu sprawdzenia, czy wygenerowane klucze mają żądane atrybuty.

Stosowanie atrybutów klucza do zarządzania uprawnieniami klucza

Użyj kluczowych atrybutów, aby zarządzać kluczowymi możliwościami, takimi jak uprawnienia. Podczas generowania klucza użyj atrybutów klucza, aby określić uprawnienia, które zezwalają na określone operacje dla tego klucza lub ograniczają je. Zalecamy generowanie kluczy tylko przy użyciu atrybutów niezbędnych do ich zamierzonego celu.

Na przykład klucz Advanced Encryption Standard (AES), który jest używany do szyfrowania, nie powinien mieć możliwości zawijania kluczy poza modułem HSM. Aby uzyskać więcej informacji na temat atrybutów zestawu AZURE Cloud HSM SDK, zobacz integration guides.

Optymalizowanie opóźnienia przez buforowanie obiektów kluczy

Aby zmniejszyć opóźnienie, należy rozważyć buforowanie obiektów kluczy zawsze, gdy jest to możliwe. W wyszukiwaniu kluczy każdy moduł HSM w klastrze HSM w chmurze Azure jest odpytywany. Ta operacja jest kosztowna i nie jest wydajnie skalowana. Metoda wyszukiwania kluczy zależy od dostawcy:

  • W przypadku PKCS#11 wyszukiwanie kluczy używa interfejsu C_FindObjects API.
  • W rozszerzeniu kryptografii Java (JCE) wyszukiwanie kluczy używa wartości KeyStore.

Aby uzyskać optymalną wydajność, zalecamy użycie poleceń znajdowania kluczy (takich jak findKey i key list) tylko raz podczas uruchamiania aplikacji. Zapisz zwrócony obiekt klucza w pamięci aplikacji. Gdy ten obiekt klucza będzie potrzebny później, pobierz go z pamięci podręcznej zamiast wykonywać zapytania dotyczące niego przy użyciu każdej operacji. Wykonywanie zapytań w związku z tym wiąże się ze znacznym obciążeniem wydajności.