Freigeben über


Typische CNG-Programmierung

Die CNG-API implementiert ein erweiterbares Anbietermodell, mit dem Sie einen Anbieter laden können, indem Sie den erforderlichen kryptografischen Algorithmus anstelle eines bestimmten Anbieters angeben. Der Vorteil ist, dass ein Algorithmusanbieter ersetzt oder aktualisiert werden kann und Sie Ihren Code in keiner Weise ändern müssen, um den neuen Anbieter zu verwenden. Wenn ein Algorithmus in Zukunft als unsicher eingestuft wird, kann auch eine sicherere Version dieses Algorithmus installiert werden, ohne dass sich dies auf Ihren Code auswirkt. Die meisten CNG-APIs erfordern einen Anbieter oder ein Objekt, das von einem Anbieter erstellt wurde.

Die typischen Schritte bei der Verwendung der CNG-API für kryptografische primitive Vorgänge sind wie folgt:

  1. Öffnen des Algorithmusanbieters
  2. Abrufen oder Festlegen von Algorithmuseigenschaften
  3. Erstellen oder Importieren eines Schlüssels
  4. Ausführen kryptografischer Vorgänge
  5. Schließen des Algorithmusanbieters

Weitere Informationen finden Sie unter Programmierbeispiele.

Öffnen des Algorithmusanbieters

Die BCryptOpenAlgorithmProvider-Funktion stellt Ihnen ein Algorithmusanbieterhandle bereit, das in nachfolgenden CNG-APIs wie BCryptCreateHash oder BCryptGenerateKeyPair verwendet wird.

Abrufen oder Festlegen von Algorithmuseigenschaften

Sie können das Algorithmusanbieterhandle verwenden, um Implementierungsdetails für den Algorithmus abzurufen, z. B. die Schlüsselgröße oder den aktuellen Betriebsmodus. Sie verwenden die BCryptGetProperty-Funktion , um bestimmte Eigenschaften abzurufen.

Sie können auch die Eigenschaften des Algorithmus ändern. Wenn Sie beispielsweise die Ecb-Blockchiffre mit AES verwenden möchten, legen Sie die BCRYPT_CHAINING_MODE-Eigenschaft eines AES-Algorithmus auf BCRYPT_CHAIN_MODE_ECB fest. die -Eigenschaft wird allen AES-Schlüsseln zugewiesen, die mit diesem Algorithmushandle erstellt wurden, ohne dass jeder einzelne AES-Schlüssel konfiguriert werden muss. Sie verwenden die BCryptSetProperty-Funktion , um diese Eigenschaften zu ändern.

Erstellen oder Importieren eines Schlüssels

Je nachdem, welche Art des Algorithmus Sie verwenden, müssen Sie möglicherweise einen Schlüssel erstellen oder laden. Die BCryptEncrypt-Funktion verwendet beispielsweise ein Schlüsselhandle für den ersten Parameter. Wenn diese Funktion Daten mit einem symmetrischen Verschlüsselungsalgorithmus wie AES verschlüsseln soll, müssen Sie zuerst einen Schlüssel abrufen. Wie Sie den Schlüssel erhalten, hängt vom Typ des verwendeten Algorithmus und der Quelle des Schlüssels ab.

Sie können kurzlebige Schlüssel mit den Funktionen BCryptGenerateSymmetricKey und BCryptGenerateKeyPair erstellen. Sie können auch kurzlebige Schlüssel aus einem Speicherblob mit den Funktionen BCryptImportKey und BCryptImportKeyPair importieren.

Bei persistenten Schlüsseln verwenden Sie die Schlüsselspeicherfunktionen, um einen Schlüsselspeicheranbieter zu laden und dann die Schlüssel zu erstellen oder zu laden. Sie können diese Funktionen auch verwenden, um kurzlebige Schlüssel zu erstellen oder zu laden, indem Sie NULL für beliebige Containernamen übergeben. Weitere Informationen zu den Schlüsselspeicherfunktionen finden Sie unter CNG Key Storage Functions.

Ausführen kryptografischer Vorgänge

Sie können nun den kryptografischen Vorgang ausführen, z. B. das Verschlüsseln oder Entschlüsseln von Daten mithilfe der Funktionen BCryptEncrypt bzw. BCryptDecrypt .

Schließen des Algorithmusanbieters

Wenn der Anbieter nicht mehr benötigt wird, müssen Sie das Handle an die Funktion BCryptCloseAlgorithmProvider übergeben, um den Anbieter zu schließen. Dies führt dazu, dass der Anbieter alle Ressourcen freigibt, die für diesen Algorithmusanbieter instance zugewiesen wurden. Nachdem ein Anbieterhandle geschlossen wurde, kann es nicht wiederverwendet werden.

Das Laden eines Anbieters kann ein relativ zeitintensiver Prozess sein. Sie sollten daher alle Anbieterhandles zwischenspeichern, auf die Sie während der Lebensdauer Ihrer Anwendung mehrmals verweisen.

Programmierbeispiele

In den folgenden Beispielen wird beschrieben, wie bestimmte kryptografische Vorgänge mithilfe von CNG ausgeführt werden.