Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Interfejs API CNG implementuje rozszerzalny model dostawcy, który umożliwia załadowanie dostawcy przez określenie wymaganego algorytmu kryptograficznego, a nie określonego dostawcy. Zaletą jest to, że dostawca algorytmów może zostać zastąpiony lub uaktualniony i nie będzie trzeba zmieniać kodu w żaden sposób, aby korzystać z nowego dostawcy. Ponadto jeśli w przyszłości określony algorytm będzie niebezpieczny, można zainstalować bezpieczniejszą wersję tego algorytmu bez wpływu na kod. Większość interfejsów API CNG wymaga dostawcy lub obiektu utworzonego przez dostawcę.
Typowe kroki związane z używaniem interfejsu API CNG na potrzeby operacji pierwotnych kryptograficznych są następujące:
- Otwarcie dostawcy algorytmów
- Pobieranie lub ustawianie właściwości algorytmu
- Tworzenie lub importowanie klucza
- Wykonywanie operacji kryptograficznych
- Zamykanie dostawcy algorytmów
Aby uzyskać więcej informacji, zobacz Przykłady programowania.
Otwieranie dostawcy algorytmów
Funkcja BCryptOpenAlgorithmProvider udostępnia dojście dostawcy algorytmów, które jest używane w kolejnych interfejsach API CNG, takich jak BCryptCreateHash lub BCryptGenerateKeyPair.
Pobieranie lub ustawianie właściwości algorytmu
Możesz użyć uchwytu dostawcy algorytmów, aby uzyskać szczegóły implementacji algorytmu, takie jak rozmiar klucza lub bieżący tryb operacji. Aby uzyskać określone właściwości, należy użyć funkcji BCryptGetProperty.
Można również zmodyfikować właściwości algorytmu. Jeśli na przykład chcesz użyć trybu łańcuchowania szyfru blokowego ECB z algorytmem AES, ustaw właściwość BCRYPT_CHAINING_MODE algorytmu AES na BCRYPT_CHAIN_MODE_ECB; ta właściwość jest przypisywana do wszystkich kluczy AES utworzonych przy użyciu tego uchwytu algorytmu, bez konieczności konfigurowania każdego klucza AES z osobna. Aby zmodyfikować te właściwości, należy użyć funkcji BCryptSetProperty .
Warning
Nie należy używać trybu EBC dla danych produkcyjnych. ECB szyfruje każdy blok niezależnie, co oznacza, że identyczne bloki tekstu jawnego dają identyczne szyfrogramy — co prowadzi do ujawnienia wzorców w danych. Użyj trybu CBC z losowym wektorem inicjowania (IV) lub najlepiej uwierzytelniony tryb szyfrowania, taki jak GCM (BCRYPT_CHAIN_MODE_GCM), który zapewnia zarówno poufność, jak i integralność.
Tworzenie lub importowanie klucza
W zależności od typu używanego algorytmu może być konieczne utworzenie lub załadowanie klucza. Na przykład funkcja BCryptEncrypt przyjmuje uchwyt klucza dla pierwszego parametru. Jeśli chcesz, aby ta funkcja szyfrować dane za pomocą algorytmu szyfrowania symetrycznego, takiego jak AES, musisz najpierw uzyskać klucz. Sposób uzyskiwania klucza zależy od typu używanego algorytmu i źródła klucza.
Możesz utworzyć klucze efemeryczne za pomocą funkcji BCryptGenerateSymmetricKey i BCryptGenerateKeyPair . Możesz również zaimportować klucze efemeryczne z obiektu BLOB pamięci za pomocą funkcji BCryptImportKey i BCryptImportKeyPair .
W przypadku utrwalonych kluczy należy użyć funkcji przechowywania kluczy do załadowania dostawcy przechowywania kluczy, a następnie utworzyć lub załadować klucze. Za pomocą tych funkcji można również tworzyć lub ładować klucze efemeryczne, przekazując NULL dowolne nazwy kontenerów. Aby uzyskać więcej informacji o funkcjach przechowywania kluczy, zobacz temat Funkcje przechowywania kluczy CNG.
Wykonywanie operacji kryptograficznych
Teraz możesz przystąpić do wykonywania operacji kryptograficznych, takich jak szyfrowanie lub odszyfrowywanie danych przy użyciu odpowiednio funkcji BCryptEncrypt lub BCryptDecrypt .
Zamykanie dostawcy algorytmów
Gdy dostawca nie jest już potrzebny, należy przekazać dojście do funkcji BCryptCloseAlgorithmProvider , aby zamknąć dostawcę. Powoduje to, że dostawca zwolni wszelkie zasoby przydzielone dla tego wystąpienia dostawcy algorytmu. Po zamknięciu dojścia dostawcy nie można go ponownie użyć.
Ładowanie dostawcy może być stosunkowo czasochłonnym procesem. W związku z tym należy buforować wszystkie uchwyty dostawcy, do których będziesz się wielokrotnie odwoływać podczas działania aplikacji.
Przykłady programowania
W poniższych przykładach opisano sposób wykonywania określonych operacji kryptograficznych przy użyciu CNG:
- Tworzenie skrótu za pomocą CNG
- Podpisywanie danych za pomocą CNG
- szyfrowanie danych za pomocą CNG
- Używanie ML-DSA z CNG
- Używanie ML-KEM z CNG