生成和检索 RSA/Schannel 密钥
RSA/Schannel 密钥可以通过调用 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标志,则为了帮助防止版本回滚攻击,请将加密块的前 8 个字节设置为 填充 0x03而不是随机数据。
如果在 CPExportKey 函数的 dwFlags 参数中指定 CRYPT_DESTROYKEY 常量,则 CSP 在导出密钥后销毁密钥或密钥句柄。 此标志仅用于 不透明的 BLOB。