材料:
描述:
使用CMS对u-boot.imx文件进行签名,生成签名signature文件。
查看rfc5652(Cryptographic Message Syntax (CMS))文档,其中提及生成签名的过程Useful Attributes。包括以下几个:content-type、message-digest、signing-time、countersignature。
追寻openssl中代码可以看到使用了以上属性:
使用SHA256 With RSA Encryption生成的签名。
下面进行解析生成的签名signature文件。
signature文件是一个ASN.1编码格式的文件。
将signature文件使用工具解析(http://lapo.it/asn1js/,也可以使用asn1view工具),可以看到如下内容:
其中我们可以看到
(32 byte)
B02DA0E6F62067A41FCF90CEE9E9764E20B8C12CDD206EC7A13CB6004203AEA9
是使用SHA256对u-boot.imx计算出来的HASH值。
(256 byte)
7865F5D3D37CF5235CD612475CDFE03BC1631571237793491AC8C4578A68B428516AC…等等
是对
(rsa encrypt buf)
00 01 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 00 30 31 30 0D 06 09 60 86 48 01 65 03 04 02 01 05 00 04 20 27 8E 43 A5 4E 3A FF 45 3A 1A 44 57 71 C9 2C 59 2C 76 A0 A8 72 2A CC 7D B9 74 8B 12 63 3B 50 D0
数据进行RSA加密得出的结果。
Attributes部分,其中的内容为:
这段数据在生成签名中的位置(从30 82开始)是:offset start = 126, end = 232。总计107个字节。
31 69 30 18 06 09 2A 86 48 86 F7 0D 01 09 03 31 0B 06 09 2A 86 48 86 F7 0D 01 07 01 30 1C 06 09 2A 86 48 86 F7 0D 01 09 05 31 0F 17 0D 31 36 31 31 30 31 31 31 33 31 34 33 5A 30 2F 06 09 2A 86 48 86 F7 0D 01 09 04 31 22 04 20 B0 2D A0 E6 F6 20 67 A4 1F CF 90 CE E9 E9 76 4E 20 B8 C1 2C DD 20 6E C7 A1 3C B6 00 42 03 AE A9
其中签名中这段数据第一个字节是0xA0,计算的时候是0x31。
总结:
CMS签名流程:
第一次的HASH值是不会变的,(只要u-boot内容不变。)
由于signing-time的因素,第二次的HASH值总是变化的。