Verschlüsseln von Daten

Important

In diesem Artikel wird die Verschlüsselung mithilfe der älteren CryptoAPI beschrieben. Verwenden Sie für neue Anwendungen stattdessen Kryptografie-API: Next Generation (CNG). Ein beispiel für eine moderne Verschlüsselung mit CNG mit AES finden Sie unter Verschlüsseln von Daten mit CNG.

Im folgenden Verfahren werden die Schritte zum Verschlüsseln einer Nachricht mit den Basiskryptografiefunktionen beschrieben. Informationen zum Verschlüsseln von Nachrichten mit PKCS # 7-Standards finden Sie unter "Nachrichtenfunktionen auf niedriger Ebene" und "Vereinfachte Nachrichtenfunktionen".

So verschlüsseln Sie eine Nachricht

  1. Generieren Sie einen Sitzungsschlüssel mithilfe der CryptGenKey-Funktion .

    Wenn Sie diesen Aufruf ausführen, wird ein Zufälliger Schlüssel generiert und ein Handle zurückgegeben, damit der Schlüssel zum Verschlüsseln und Entschlüsseln von Daten verwendet werden kann. Der zu verwendende Verschlüsselungsalgorithmus wird an diesem Punkt ebenfalls angegeben. Da CryptoAPI anwendungen nicht die Verwendung öffentlicher Schlüsselalgorithmen zum Verschlüsseln von Massendaten zulässt, geben Sie einen symmetrischen Algorithmus wie RC2 oder RC4 mit dem CryptGenKey-Aufruf an.

  2. Alternativ können Sie die CryptDeriveKey-Funktion verwenden, um ein Kennwort in einen Schlüssel zu transformieren, der für die Verschlüsselung geeignet ist.

    Wenn eine Anwendung die Nachricht verschlüsseln muss, damit jede Person mit einem bestimmten Kennwort die Daten entschlüsseln kann, verwenden Sie CryptDeriveKey , um das Kennwort in einen Schlüssel zu transformieren, der für die Verschlüsselung geeignet ist.

    Note

    In diesem Fall wird diese Funktion anstelle der CryptGenKey-Funktion aufgerufen, und die nachfolgenden CryptExportKey-Aufrufe werden nicht benötigt.

     

  3. Legen Sie bei Bedarf zusätzliche kryptografische Eigenschaften des Schlüssels mithilfe der CryptSetKeyParam-Funktion fest.

    Nachdem der Schlüssel generiert wurde, können zusätzliche kryptografische Eigenschaften des Schlüssels mit der CryptSetKeyParam-Funktionfestgelegt werden. Mit dieser Funktion können verschiedene Abschnitte der Datei mit unterschiedlichen Schlüsselsalzen verschlüsselt werden und bietet eine Möglichkeit, den Verschlüsselungsmodus oder den Initialisierungsvektor des Schlüssels zu ändern. Diese Parameter können verwendet werden, um die Verschlüsselung mit einem bestimmten Datenverschlüsselungsstandard zu erfüllen.

  4. Verschlüsseln Sie die Daten in der Datei mit der CryptEncrypt-Funktion .

    Die CryptEncrypt-Funktion verwendet den Sitzungsschlüssel, der im vorherigen Schritt generiert wurde, und verschlüsselt einen Datenpuffer.

    Note

    Da die Daten verschlüsselt sind, können die Daten durch den Verschlüsselungsalgorithmus leicht erweitert werden. Die Anwendung ist dafür verantwortlich, die Länge der verschlüsselten Daten zu merken, damit die richtige Länge später für die CryptDecrypt-Funktion angegeben werden kann.

     

  5. Optional können Sie die CryptExportKey-Funktion verwenden, damit der aktuelle Benutzer die Daten in Zukunft entschlüsseln kann.

    Damit der aktuelle Benutzer die Daten zukünftig entschlüsseln kann, wird die CryptExportKey-Funktion verwendet, um den Entschlüsselungsschlüssel in einer verschlüsselten Form (einem Schlüssel-BLOB) zu speichern, der nur mit dem privaten Schlüssel des Benutzers entschlüsselt werden kann. Diese Funktion erfordert für diesen Zweck den öffentlichen Schlüssel für den Schlüsselaustausch des Benutzers, der mithilfe der Funktion CryptGetUserKey abgerufen werden kann. Die CryptExportKey-Funktion gibt einen Schlüssel-BLOB zurück, der von der Anwendung zur Entschlüsselung der Datei gespeichert werden muss.

Note

Wenn die Anwendung Über Zertifikate (oder öffentliche Schlüssel) für andere Benutzer verfügt, kann sie anderen Benutzern erlauben, die Datei zu entschlüsseln, indem CryptExportKey-Aufrufe für jeden Benutzer ausgeführt werden, der Zugriff erhalten soll. Die zurückgegebenen Schlüssel-BLOBs müssen wie in Schritt 5 von der Anwendung gespeichert werden.

 

Erstellen einer verschlüsselten Nachricht

Die vereinfachten Nachrichtenfunktionen erleichtern das Verschlüsseln und Entschlüsseln von Daten. Die folgende Abbildung zeigt die einzelnen Aufgaben, die zum Verschlüsseln einer Nachricht ausgeführt werden müssen. Die Schritte werden in der folgenden Liste beschrieben.

Verschlüsseln einer Nachricht

So verschlüsseln Sie eine Nachricht

  1. Ruft einen Zeiger auf die Klartextnachricht ab.
  2. Generieren Sie einen symmetrischen (Sitzungs-)Schlüssel.
  3. Verschlüsseln Sie die Nachrichtendaten mithilfe des symmetrischen Schlüssels und des angegebenen Verschlüsselungsalgorithmus.
  4. Öffnen Sie einen Zertifikatspeicher.
  5. Rufen Sie das Zertifikat des Empfängers ab.
  6. Rufen Sie den öffentlichen Schlüssel aus dem Zertifikat des Empfängers ab.
  7. Verschlüsseln Sie den symmetrischen Schlüssel mithilfe des öffentlichen Schlüssels des Empfängers.
  8. Rufen Sie den Bezeichner des Empfängers aus dem Zertifikat des Empfängers ab.
  9. Fügen Sie Folgendes in die digital umgehüllte Nachricht ein: der Datenverschlüsselungsalgorithmus, die verschlüsselten Daten, der verschlüsselte symmetrische Schlüssel und der Empfängerbezeichner.