【学习笔记】如何给软件加数字签名
一、问题的提出
《GB/T 36572-2018 电力监控系统网络安全防护导则》明确提出“重要电力监控系统关键控制软件应采用基于可信计算的强制版本管理措施,操作系统和监控软件的全部可执行代码,在开发或升级后应由生产厂商采用数字证书对其签名并送检,通过检测的控制软件程序应由检测机构用其数字证书对其签名,生产控制大区应禁止未包含生产厂商和检测机构签名版本的可执行代码启动运行。”
二、数字签名原理
1. 数字签名的工作原理
数字签名的基本原理是使用一对密钥:私钥和公钥。私钥由发送者保密,而公钥可以公开给任何人。
数字签名的过程通常包括以下几个步骤:
1.1 生成数字签名
(1)信息摘要:首先发送者对要发送的信息(消息)进行哈希处理,生成一个固定长度的摘要(哈希值)。常用的哈希算法包括 SHA256、SHA-1等。
(2)签名:发送者使用自己的私钥对生成的哈希值进行加密,得到数字签名。这个签名是唯一的,且与发送的消息和发送者的私钥相关联。
(3)发送信息:发送者将原始消息和数字签名一起发送给接收者。
1.2 验证数字签名
(1)接收信息:接收者收到原始消息和数字签名。
(2)信息摘要:接收者对收到的原始消息进行相同的哈希处理,生成一个新的哈希值。
(3)解密签名:接收者使用发送者的公钥对数字签名进行解密,得到发送者生成的哈希值。
(4)比较哈希值:将接收者生成的哈希值与解密得到的哈希值进行比较。如果两者相同,说明信息未被篡改目确实是由发送者发出的;如果不同,则说明信息可能被篡改或发送者身份不明。
2. 数字签名的典型应用场景
(1)电子邮件签名:确保电子邮件的发送者身份和邮件内容的完整性。
(2)软件分发:开发者对软件进行数字签名,用户在下载时可以验证软件的来源和完整性。
(3)金融交易:在在线银行和电子支付中,数字签名用于验证交易的合法性。
(4)法律文件:数字签名可以用于电子合同和法律文件,确保文件的真实性和不可否认性。
人可以申请数字证书,设备也可以申请数字证书(也叫作设备证书)。同理,利用数字签名的验证功能,就可以验证服务器的身份。
3. 数字签名的优缺点
3.1 优点
身份验证:确保信息的发送者身份,防止伪造。
数据完整性:通过哈希值验证信息在传输过程中未被篡改,也就是防篡改。
不可否认性:发送者无法否认已发送的信息,因为只有他们的私钥可以生成该签名,也就是防抵赖。
3.2 缺点
密钥管理:私钥的安全性至关重要,若私钥泄露,签名的安全性将受到威胁。
计算开销:数字签名的生成和验证过程相对较复杂,会增加计算开销。
法律认可:在某些国家和地区,数字签名的法律地位可能尚未得到充分认可。
三、Windows系统如何给软件进行签名
1、软件准备
(1)makecert.exe
(2)Signcode.exe
2、创建X.509 证书
makecert /sv "D:\\privatekey.pvk" /n "CN=授予人名称,E=邮箱,O=组织名" -r D:\\certfile.cer
注: privatekey.pvk密钥文件,certfile.cer证书文件
回车后会提示输入秘钥,输入密码及确认密码:yourpassword,点击ok
验证秘钥,输入上一步设置的秘钥yourpassword,证书创建成功

3、导入证书

按下Ctrl+M,会弹出添加或删除管理单元,找到“证书”


然后点击添加,直接点完成。

再点击“所有任务--导入”,然后第一个直接确定,第二个选择你的证书的路径。


选择之前生成的证书 bell.cer

一直下一步,


4. 给指定文件签名
运行signcode


从文件选择--- 选择 cer证书

选择私钥,输入私钥密码

添加描述


时间戳服务器:
Digicert: http://timestamp.digicert.com
Symantec: http://sha256timestamp.ws.symantec.com/sha256/
Comodo: http://timestamp.comodoca.com
Starfield: http://tsa.starfieldtech.com
GlobalSign: http://timestamp.globalsign.com/scripts/timestamp.dll
Certum: http://time.certum.pl

完成签名,查看“数字签名”的信息。

附上工具下载链接:
链接: https://pan.baidu.com/s/1qJ4c1AZ7nocLOKvp9iTdFw?pwd=7zwq 提取码: 7zwq
四、linux系统如何给软件进行签名
以Ubuntu为例:
1. 安装签名工具GPG
要了解什么是GPG,就要先了解PGP。
1991年,程序员Phil Zimmermann为了避开政府监视,开发了加密软件PGP。这个软件非常好用,迅速流传开来,成了许多程序员的必备工具。但是,它是商业软件,不能自由使用。所以,自由软件基金会决定,开发一个PGP的替代品,取名为GnuPG。这就是GPG的由来。
sudo apt-get install gnupg
2. GPG密钥生成
使用--full-generate-key参数生成自己的密钥
gpg --gen-key

依次选择key类型->key长度->有效期->key识别信息->随机操作

3.查看公钥和私钥


4. 导出公钥到文件中:
gpg -a -o public-file.key --export D8A94AEC
5. 导出私钥到文件中
gpg -a -o private-file.key --export-secret-keys D8A94AEC
6.给指定文件签名,使用--sign参数;验证签名,使用--verify参数。

更多推荐



所有评论(0)