基提供程序密钥 BLOB
基本提供程序和扩展提供程序使用相同的 密钥 BLOB。
公钥 BLOB
公钥 BLOB 类型为 PUBLICKEYBLOB,用于在 CSP) (加密服务提供程序外部存储公钥。 基本提供程序公钥 BLOB 具有以下格式。
PUBLICKEYSTRUC publickeystruc;
RSAPUBKEY rsapubkey;
BYTE modulus[rsapubkey.bitlen/8];
下表介绍了每个公钥组件。 所有值都采用 little endian 格式。
字段 | 说明 |
---|---|
modulus | 公钥模量数据直接位于 RSAPUBKEY 结构之后。 此数据的大小将有所不同,具体取决于公钥的大小。 字节数可以通过将 RSAPUBKEY 位字段 的值除以 8 来确定。 |
publickeystruc | PUBLICKEYSTRUC 结构。 |
rsapubkey | RSAPUBKEY 结构。 magic 成员必须设置为 0x31415352。 此十六进制值是 RSA1 的 ASCII 编码。 |
注意
公钥 BLOB 未加密。 它们包含 纯文本 形式的公钥。
私钥 BLOB
私钥 BLOB 类型 为 PRIVATEKEYBLOB,用于在 CSP 外部存储 私钥 。 基提供程序私钥 BLOB 具有以下格式。
PUBLICKEYSTRUC publickeystruc;
RSAPUBKEY rsapubkey;
BYTE modulus[rsapubkey.bitlen/8];
BYTE prime1[rsapubkey.bitlen/16];
BYTE prime2[rsapubkey.bitlen/16];
BYTE exponent1[rsapubkey.bitlen/16];
BYTE exponent2[rsapubkey.bitlen/16];
BYTE coefficient[rsapubkey.bitlen/16];
BYTE privateExponent[rsapubkey.bitlen/8];
下表描述了私钥 BLOB 组件。
注意
这些字段对应于 公钥加密标准 第 7.2 节 (PKCS) #1 中所述的字段,但存在细微差异。
字段 | 说明 |
---|---|
系数 | 系数。 其数值为 (q) mod p 的反转值。 |
exponent1 | 指数 1。 其数值为 d mod (p – 1) 。 |
exponent2 | 指数 2。 其数值为 d mod (q – 1) 。 |
取模 | 模数。 此值为 Prime1×Prime2 ,通常称为 n。 |
prime1 | 质数 1,通常称为 p。 |
prime2 | 质数 2,通常称为 q。 |
privateExponent | 专用指数,通常称为 d。 |
publickeystruc | PUBLICKEYSTRUC 结构。 |
rsapubkey | RSAPUBKEY 结构。 magic 成员必须设置为 0x32415352。 此十六进制值是 RSA2 的 ASCII 编码。 |
注意
私钥 BLOB 未加密。 它们包含纯文本形式的私钥。
调用 CryptExportKey 时,开发人员可以选择是否对密钥进行加密密钥。 如果 hExpKey 参数包含会话密钥的有效句柄,则会加密 PRIVATEKEYBLOB。 除 BLOB 的 PUBLICKEYSTRUC 部分外,所有内容均已加密。
注意
加密算法和加密密钥参数不与私钥 BLOB 一起存储。 应用程序必须管理和存储此信息。 如果为 hExpKey 传递零,则将在不加密的情况下导出私钥。
注意
导出没有加密的私钥很危险,因为它们容易受到未经授权的实体的拦截和使用。
简单密钥 BLOB
简单密钥 BLOB(类型 SIMPLEBLOB)用于在 CSP 外部存储和传输会话密钥。 基提供程序简单密钥 BLOB 始终使用 密钥交换公钥进行加密。 SIMPLEBLOB 的 pbData 成员是采用以下格式的字节序列。
PUBLICKEYSTRUC publickeystruc;
ALG_ID algid;
BYTE encryptedkey[rsapubkey.bitlen/8];
下表描述了 SIMPLEBLOB 的 pbData 成员的每个组件。
字段 | 说明 |
---|---|
algid | 一个ALG_ID结构,指定用于加密会话密钥数据的加密算法。 此值通常为 CALG_RSA_KEYX,表示会话密钥数据已使用 RSA 公钥算法使用密钥交换公钥进行加密。 |
encryptedkey | 表示 PKCS #1 类型 2 加密块形式的加密会话密钥数据的 BYTE 序列。 有关此数据格式的信息,请参阅 RSA Data Security, Inc 发布的公钥加密标准 (PKCS) #1。此数据的大小始终与公钥的模数相同。 例如,Microsoft RSA 基础提供程序生成的公钥的长度可以是 512 位 (64 个字节) ,因此加密的会话密钥数据也始终是 512 位 (64 字节) 。 |
publickeystruc | PUBLICKEYSTRUC 结构。 |