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