使用OpenSSL签署一个大文件

时间:2015-01-14 08:03:06

标签: openssl

我需要签署一个包含固件的大型二进制文件,然后在接收它的目标设备上验证此签名。在阅读了一些文章后,我总结了一种方法来做到这一点,但我不确定它是否应该以这种方式完成。以下是我到目前为止所做的事情:

发件人生成私钥:

$ openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -pkeyopt rsa_keygen_pubexp:3 -out privkey-ID.pem

发件人使用私钥生成公钥:

$ openssl pkey -in privkey-ID.pem -out pubkey-ID.pem -pubout

发件人生成摘要并使用它对文件进行签名:

$ openssl dgst -sha256 -sign privkey-ID.pem -out out.sha256 rootfs.jffs2

Receiver验证签名:

$ openssl dgst -sha256 -verify pubkey-ID.pem -signature out.sha256 rootfs.jffs2

在执行第4步时,我收到“验证确认”回复,但我不确定它是否正确完成。

还要求使用对称密钥进行签名。据我所知,使用对称密钥进行签名意味着必须在发送方和接收方都使用相同的密钥,但在这里我使用私钥进行签名并使用公钥进行验证。

非常感谢对以上几点的澄清。

1 个答案:

答案 0 :(得分:0)

您生成了SHA256摘要(或散列;代表整个文件的短值),对其进行签名并使用非对称RSA算法验证签名。

非对称RSA算法使用公钥和私钥。任何人都可以使用公钥加密数据,只有私钥的所有者才能对其进行解密。签名工作相反,所有者可以使用私钥对数据进行加密以对其进行签名,并且每个人都可以对其进行解密以验证签名。

但根据您的要求,您需要使用对称算法,例如HMAC-SHA256。在内部,它计算相同的SHA-256摘要,然后用提供的密钥对其进行签名。

cat filename | openssl dgst -sha256 -hmac "sharedkey"

它没有单独的命令来签名和验证,您只需要在两个设备上运行相同的操作并比较结果。