RSA/Schannel 密钥
生成和检索 RSA/Schannel 密钥
Rsa/可以通过调用 CryptGenKey 函数来生成通道密钥。 调用 CryptGenKey 需要 Algid 参数中传递的AT_KEYEXCHANGE算法标识符。
生成 RSA/Schannel 公钥/私钥对
- 调用 CryptAcquireContext 函数以获取 Microsoft RSA/Schannel 加密提供程序的句柄。
- 调用 CryptGenKey 函数以生成密钥。 必须为 Algid 参数传入AT_KEYEXCHANGE,并且 dwFlags 参数的上限 16 位必须设置为所需的密钥大小 (512 位) 。 hKey 参数中返回 HCRYPTKEY 结构句柄。
检索指向以前生成的 RSA/Schannel 用户密钥的指针
- 调用 CryptAcquireContext 函数以获取 Microsoft RSA/Schannel 加密提供程序的句柄。
- 调用 CryptGetUserKey 函数,并将 dwKeySpec 参数设置为 AT_KEYEXCHANGE。
导出 RSA/Schannel 密钥
主密钥 可以导出到简单的密钥 BLOB 结构中。 其实现方式应与导出普通 RC4 或 数据加密标准 (DES) 批量加密密钥的方式相同,如 简单密钥 BLOB 中所述。 PUBLICKEYSTRUC 结构的 aiKeyAlg 成员设置为主密钥 (CALG_PCT1_MASTER、CALG_SSL2_MASTER、CALG_SSL3_MASTER或CALG_TLS1_MASTER) 的算法标识符。
如果 CPExportKey 函数导出 SSL2 主密钥并设置了CRYPT_SSL2_FALLBACK标志,则为了帮助防止版本回滚攻击,请将加密块 填充 的前八个字节设置为0x03而不是随机数据。
如果在 CPExportKey 函数的 dwFlags 参数中指定了CRYPT_DESTROYKEY常量,则 CSP 在导出密钥后会销毁密钥或密钥句柄。 此标志仅用于 不透明的 BLOB。