失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > SSL基础:9:公钥加密 vs 私钥加密

SSL基础:9:公钥加密 vs 私钥加密

时间:2020-02-07 08:52:43

相关推荐

SSL基础:9:公钥加密 vs 私钥加密

在前面的文章中讲述过使用公钥加密、私钥解密的使用示例,同时也介绍过使用私钥对文件进行签名,使用公钥进行验证的示例。这篇文章继续来讨论一下应该是公钥加密还是私钥加密的问题。

公钥和私钥相关的基础常识

首先关于公钥、私钥又如下基本常识:

公钥:可发放给多个持有人,是被公开的钥匙私钥:必须严格管理,一般只有一个持有人,是不能被公开的钥匙长度:长度越长,安全性越高,速度越慢关系:公钥数据是包含在私钥之中的,可以根据私钥可以生成公钥加密解密:公钥和私钥都可以用于加密、解密操作

实际使用场景

私钥加密、公钥解密

虽然公钥和私钥都可以用于加密和解密,但是实际上公钥加密、私钥解密还是私钥加密、公钥解密这实际上并不是一个问题。因为公钥是被公开的,使用私钥进行加密,公钥进行解密,在传输的过程中谁都可以获取到这个信息并对其使用公钥进行解密,所以这不是加密和解密的场景,因为这个过程注定无法保密,这个过程是用于验证发送者的身份的,因为在网络上的信息是可以被获取和篡改的,如果私钥只有一人拥有,使用私钥进行加密,获取到这个加密后的数据之后,拿着公钥进行解密,如果能够解开,说明了发送者的身份就是私钥的拥有者,而这种身份的证明和不可抵赖性则是这个使用中最为重要的关注点,而传输的内容则不是关注的内容。

所以私钥加密、公钥解密这种情况更多的则是这样一种表述:私钥的拥有者使用私钥进行签名,而公钥的拥有者使用公钥对此签名进行验证,从而确认发送者的身份。其实从数据的流向也很清楚,从私钥的拥有者流向众多公钥的拥有者,主要是向拥有者进行身份的证明,安全性相关的数据的传输使用这种方式注定是得不到保障的。

公钥加密、私钥解密

数据的流向相较于前面一种场景是相反的,公钥加密的数据,传输之后,收到数据的接收者使用私钥进行解密,由于私钥的持有人是严格管理的,所以正常情况下,一般人即使获取到使用公钥加密的数据也无法解开,所以数据的安全性是可以得到保障的。这也是非对称密钥算法最为常见的使用场景。

使用示例

公钥加密、私钥解密

在前面的文章中已经通过具体的示例介绍过这种方式,使用rsautil提供的加密和解密的选项很清晰地描述的这个过程,详细可参看:

*

私钥签名、公钥验签

相较于私钥加密、公钥解密的说法,在实际的场景中,使用私钥的拥有者私钥进行签名、获取签名文件的公钥的拥有者对签名文件进行验证,以确认发送者身份和内容的完整性则是更符合常识上理解的说法。结合dgst命令,如下的文章介绍了这一过程:

https://liumiaocn./article/details/103457878

而rsautil也提供了类似的选项,而且选项的名称也直接是sign和verify,示例使用说明如下所示:

sign: 私钥拥有者使用私钥对输入文件生成签名文件verify:公钥拥有者使用公钥对签名文件进行验证,获取sing之前的输入文件

事前准备

准备如下文件,准备方法参看:https://liumiaocn./article/details/103457878

[root@liumiaocn rsa]# ls -lrttotal 20-rw-r--r--. 1 root root 37 Dec 9 06:51 messages-rw-------. 1 root root 887 Dec 9 06:52 rsa_key.private-rw-r--r--. 1 root root 272 Dec 9 06:52 rsa_key.public-rw-r--r--. 1 root root 128 Dec 9 06:58 enc_messages-rw-r--r--. 1 root root 37 Dec 9 06:59 dec_messages[root@liumiaocn rsa]#

本示例使用到的文件说明:

messages:加密对象文件,保存hello的信息rsa_key.private: 私钥rsa_key.public:公钥

使用进行私钥签名

使用私钥进行签名:

[root@liumiaocn rsa]# openssl rsautl -sign -in messages -out messages.sign -inkey rsa_key.private [root@liumiaocn rsa]# ls -l messages.sign -rw-r--r--. 1 root root 128 Dec 9 07:39 messages.sign[root@liumiaocn rsa]#

使用公钥对签名进行验证

[root@liumiaocn rsa]# openssl rsautl -verify -in messages.sign -pubin -inkey rsa_key.public Hello, this is greeting from liumiao[root@liumiaocn rsa]# openssl rsautl -verify -in messages.sign -pubin -inkey rsa_key.public -out verify_messages[root@liumiaocn rsa]# cat verify_messages Hello, this is greeting from liumiao[root@liumiaocn rsa]#

如果觉得《SSL基础:9:公钥加密 vs 私钥加密》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。