基提供程序密钥 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 始终使用 密钥交换公钥进行加密。 SIMPLEBLOBpbData 成员是采用以下格式的字节序列。

PUBLICKEYSTRUC  publickeystruc;
ALG_ID algid;
BYTE encryptedkey[rsapubkey.bitlen/8];

下表描述了 SIMPLEBLOBpbData 成员的每个组件。

字段 说明
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 结构。