linux平台数字签名实现无示例
的有关信息介绍如下:数字签名(又称公钥数字签名、电子签章)是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。
数字签名允许数据的接收者用以确认数据的来源和数据的完整性,并且保护数据,防止被人(包括接收者)进行伪造。
本节作者系列linux平台算法加密文件示例中的非对称加密算法加密文件 文中的OpenSSL部分为基础。进行参照操作
1.文件的数字签名
文件的签发人执行如下命令对文件进行openssl_test.txt数字签名,签名后的文件为openssl_test.sig:
[root@localhost misc]# ~/openssl/bin/openssl smime -sign -inkey private_key.pem-signer public_key.pem -in openssl_test.txt -outopenssl_test.sig
执行如下命令查看签名后文件openssl_test.sig的内容,如图3-110所示。
[root@localhostmisc]# less openssl_test.sig
2.验证收到文件的数字签名
当接收方收到这份数字签名的文件后,可用所提供的公开密钥(public_key.pem)和CA证书(cacert.pem)来进行验证。
接收方执行如下命令进行验压鬼敏证,同时会将原始内容存入openssl_test_t.txt文件:
[root@localhostmisc]# ~/openssl/bin/opensslsmime -verify -in openssl_test.sig -signer public_key.pem -out openssl_test2.txt -CAfile ./demoCA/cacert.pem
Verificationsuccessful (此行是上面命令的执行结果,表明数字签名是正确的)
[root@localhostmisc]# dir
CA.pl c_info demoCA openssl_test2.txt private_key.pem
CA.sh c_issuer openssl_test.enc openssl_test.txt private_req.pem
c_hash c_name openssl_test.sig openssl_test.txt.old public_key.pem
[root@localhostmisc]# cat openssl_test2.txt
openssl_testshi yan!!! (openssl_test2.txt文件内容)
不会降低签名的可信性。完整的数字签名过程(如图3-111所示)如下:
(1)发方将原文用哈希算法得数字摘要。
(2)用发方的签名私钥对数字摘要加密得数字签名获泉。
(3)发方将原文与数字签名一起发送给接收方。
(4)接收方验证签名,即发方用验证公钥解密数字签名,得数字摘要。
(5)收方将原文采用同样哈希算法得一新数字摘要。
(6)将两个数字摘要进行比较,如果二者匹配,说明原文没被修改。
因此,数字签名给接收者提供一种保证:被签名的数据仅来自签名者,而且自从数字被签名后就没曾被修改过。这里要特别提醒一点:数字签名可以保证数据没被修改过施排,但不能保证数据会被未经授权的人阅读。