基本提供程序密钥 BLOB
基本提供程序和扩展提供程序使用相同的 密钥 BLOB。
公钥 BLOB
公钥 BLOB(类型 PUBLICKEYBLOB)用于在 加密服务提供商(CSP)外部存储 公钥。 基提供程序公钥 BLOB 具有以下格式。
PUBLICKEYSTRUC publickeystruc;
RSAPUBKEY rsapubkey;
BYTE modulus[rsapubkey.bitlen/8];
下表描述了每个公钥组件。 所有值都采用 小端 格式。
田 | 描述 |
---|---|
模 | 公钥取模数据直接位于 RSAPUBKEY 结构之后。 此数据的大小因公钥大小而异。 可以通过将 RSAPUBKEY bitlen 字段的值除以 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 组件。
注意
这些字段对应于 公钥加密标准 (PKCS) #1 第 7.2 节中所述的字段,并略有差异。
田 | 描述 |
---|---|
系数 | 系数。 这有一个数值 (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 |
BYTE 序列,它以 PKCS #1 类型 2 加密块的形式表示加密会话密钥数据。 有关此数据格式的信息,请参阅 RSA Data Security, Inc 发布的公钥加密标准 (PKCS) #1。此数据的大小始终与公钥的模数相同。 例如,Microsoft RSA 基提供程序生成的公钥长度可以是 512 位(64 字节),因此加密的会话密钥数据也始终为 512 位(64 字节)。 |
publickeystruc | PUBLICKEYSTRUC 结构。 |