CMS签名研究(openssl)

来源:互联网 发布:外包淘宝客服招聘女装 编辑:程序博客网 时间:2024/05/20 06:23

CMS签名研究

材料:
这里写图片描述

描述:
使用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加密得出的结果

(rsa encrypt buf)中红色部分是使用SHA256对Attributes计算出来的HASH值。

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

其中红色部分是UTCTime。

其中签名中这段数据第一个字节是0xA0,计算的时候是0x31

总结:
CMS签名流程:

这里写图片描述

第一次的HASH值是不会变的,(只要u-boot内容不变。)

由于signing-time的因素,第二次的HASH值总是变化的

1 0