RSA/Schannel-Schlüssel
Generieren und Abrufen von RSA/Schannel-Schlüsseln
RSA/Schannel-Schlüssel können durch Aufrufen der CryptGenKey-Funktion generiert werden. Der Aufruf von CryptGenKey erfordert einen AT_KEYEXCHANGE Algorithmusbezeichner, der im Algid-Parameter übergeben wird.
So generieren Sie ein RSA/Schannel-Paar mit öffentlichem/privatem Schlüssel
- Rufen Sie die CryptAcquireContext-Funktion auf, um ein Handle für den Microsoft RSA/Schannel Cryptographic Provider abzurufen.
- Rufen Sie die CryptGenKey-Funktion auf, um die Schlüssel zu generieren. AT_KEYEXCHANGE muss für den Algid-Parameter übergeben werden, und die oberen 16 Bits des dwFlags-Parameters müssen auf die gewünschte Schlüsselgröße (512 Bit) festgelegt werden. Ein HCRYPTKEY-Strukturhandle wird im hKey-Parameter zurückgegeben.
So rufen Sie einen Zeiger auf zuvor generierte RSA/Schannel-Benutzerschlüssel ab
- Rufen Sie die CryptAcquireContext-Funktion auf, um ein Handle für den Microsoft RSA/Schannel Cryptographic Provider abzurufen.
- Rufen Sie die CryptGetUserKey-Funktion auf, wobei der dwKeySpec-Parameter auf AT_KEYEXCHANGE festgelegt ist.
Exportieren von RSA-/Schannel-Schlüsseln
Hauptschlüssel können in einfache Schlüssel-BLOB-Strukturen exportiert werden. Dies sollte auf die gleiche Weise implementiert werden wie der Export normaler RC4- oder Des-Massenverschlüsselungsschlüssel (Data Encryption Standard), wie unter Simple Key BLOB beschrieben. Das aiKeyAlg-Element der PUBLICKEYSTRUC-Struktur wird auf den Algorithmusbezeichner des master-Schlüssels (CALG_PCT1_MASTER, CALG_SSL2_MASTER, CALG_SSL3_MASTER oder CALG_TLS1_MASTER) festgelegt.
Wenn die CPExportKey-Funktion einen SSL2-master-Schlüssel exportiert und das CRYPT_SSL2_FALLBACK-Flag festgelegt ist, legen Sie zur Verhinderung von Versionsrollbackangriffen die ersten acht Bytes des Verschlüsselungsblockabstands auf 0x03 statt auf zufällige Daten fest.
Wenn die CRYPT_DESTROYKEY Konstante im dwFlags-Parameter der CPExportKey-Funktion angegeben wird, zerstört der CSP den Schlüssel oder schlüsselhandle nach dem Exportieren des Schlüssels. Dieses Flag ist nur für die Verwendung mit undurchsichtigen BLOBs vorgesehen.