RSA/Schannel 密钥 BLOB

BLOBRSA/Schannel 提供程序一起使用,以便从 加密服务提供商(CSP)导出密钥并将其导入其中。

公钥 BLOB

公钥 BLOB,类型 PUBLICKEYBLOB,用于存储 公钥。 这些键以以下格式导出并导入为字节序列。

PUBLICKEYSTRUC  publickeystruc ;
RSAPUBKEY       rsapubkey;
BYTE            modulus[rsapubkey.bitlen/8];

下表描述了每个公钥组件。 所有值都采用 小端 格式。

描述
BYTE 序列。 公钥取模数据直接位于 RSAPUBKEY 结构之后。 此数据的长度因公钥长度而异。 可以通过将 RSAPUBKEYbitlen 成员的值除以 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 字节。