您当前的位置: 首页 >  ssl

暂无认证

  • 0浏览

    0关注

    92582博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

发布时间:2019-12-10 21:01:41 ,浏览量:0

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

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

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

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

虽然公钥和私钥都可以用于加密和解密,但是实际上公钥加密、私钥解密还是私钥加密、公钥解密这实际上并不是一个问题。因为公钥是被公开的,使用私钥进行加密,公钥进行解密,在传输的过程中谁都可以获取到这个信息并对其使用公钥进行解密,所以这不是加密和解密的场景,因为这个过程注定无法保密,这个过程是用于验证发送者的身份的,因为在网络上的信息是可以被获取和篡改的,如果私钥只有一人拥有,使用私钥进行加密,获取到这个加密后的数据之后,拿着公钥进行解密,如果能够解开,说明了发送者的身份就是私钥的拥有者,而这种身份的证明和不可抵赖性则是这个使用中最为重要的关注点,而传输的内容则不是关注的内容。 所以私钥加密、公钥解密这种情况更多的则是这样一种表述:私钥的拥有者使用私钥进行签名,而公钥的拥有者使用公钥对此签名进行验证,从而确认发送者的身份。其实从数据的流向也很清楚,从私钥的拥有者流向众多公钥的拥有者,主要是向拥有者进行身份的证明,安全性相关的数据的传输使用这种方式注定是得不到保障的。

公钥加密、私钥解密

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

使用示例 公钥加密、私钥解密

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

私钥签名、公钥验签

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

  • https://liumiaocn.blog.csdn.net/article/details/103457878

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

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

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

[root@liumiaocn rsa]# ls -lrt
total 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]#
关注
打赏
1653961664
查看更多评论
立即登录/注册

微信扫码登录

0.3528s