PGP生成数字签名并加密以及解密并验证数字签名解读

  • Encryption:加密。
  • Signing:签名。
  • Certification:认证其他子密钥或 uid。
  • Authentication:身份认证,例如用于 SSH 登录。

GPG为什么要有主密钥和公密钥

在PGP中如果我们使用gpg --gen-key会生成主密钥和子密钥,主密钥一般不用作加密,仅仅用于签名别人公钥,签名子密钥,所以一个主密钥一般带有的标签是SC而子密钥带的标签是E

  • 一个主密钥可以绑定多个子密钥,平时加密解密使用的都是子密钥,主密钥只有在某些特定的情况下才使用的,比如新建一个子密钥,撤销废除一个子密钥,签名认证别人的密钥等。

    这样设计的好处的是子密钥遗失和泄漏不影响主密钥的信用,只需要撤销废除子密钥,然后再发布到密钥服务器,告诉其它人这个子密钥已经作废了,主密钥的公钥长久积累下来的多人签名认证可以长久保留下来

    如果重建这层信任还要再让别人再签名认证你的新密钥,很麻烦。所以主密钥特别重要的,如果它泄漏了,那这个主密钥下所有子密钥全都报废

  • 正确的使用姿势是导出主私钥备份,删除本机的主私钥,本机只保留子私钥用于日常操作,哪怕子密钥被人盗取,也不影响主密钥,尽最大程度保护你的主密钥。

  • 而且我们可以使用多个子密钥用于主机与主机之前的数据通信,当子密钥丢失了之后,影响的也仅仅只有一对通信双方,其他的会话通信而不影响

PGP的加解密流程

下面我来用实验来梳理一下GPG加解密的流程

1、gpg -gen-key // 输入该命令生成主密钥和子密钥 

左边代表的是主密钥的加密算法,右边的是子密钥的加密算法,主密钥和子密钥的作用在上面以及说明了。

在创建密钥对的时候会让你输入密码,也就是PBE口令

2、我们输入echo aaaaaa >TEST,创建一个文本文件用于后续的加密

3、gpg -r  demofuck -e TEST //使用demofuck用户去加密TEST文件,下面是加密流程:

如图所示,消息使用对称加密算法加密 ,因为是对称加密所以就必不可少需要一个会话密钥,我们使用一个伪随机数产生会话密钥,我们在使用该会话密钥对密文进行加密之后,然后使用该用户的公钥对该会话密钥加密,随后将会话密钥和密文糅合在一起,虽然很进行发送。

4、gpg -d  TEST.gpg //对该文件进行解密,解密的时候它会要求你输入口令,根据口令系统会去解出私钥,然后使用该私钥我们可以解出对称加密会话的密钥,然后使用会话密钥我们最终将密文解出。

 

如果是加密与数字签名结合的话,那么该加解密的流程又是怎样的?

                          加密流程

 

如图是加密的流程图,因为加入了数字签名,所以数字签名的生成需要私钥到发送端的公钥,然而发送端的私钥的保存是使用PBE的方式,所以我们再生成本端私钥的时候需要输入口令,然后将口令与盐进行单向散列函数计算,然后得出密钥保存密钥,然后通过密钥保存密钥,我们解出本端的私钥。我们将明文进行单向散列函数计算,随后使用本端的私钥进行加密形成数字签名,到这里数字签名就生成完毕了,我们将数字签名和消息糅合在一起,然后压缩。然后我们对压缩后的内容进行对称加密,由于对称加密需要密钥,我们使用伪随机数生成器生成会话密钥,然后对压缩内容进行加密,加密之后我们使用接收者的公钥对加密压缩内容的密钥进行加密,然后将加密压缩内容的密钥与加密后的压缩内容拼合在一起。

                        解密流程 

在加密阶段,发送端使用会话密钥加密了加密后的数字签名与明文的压缩内容,所以我们就需要使用自己的私钥解密出发送端使用自己的公钥加密的会话密钥,但是由于自己的私钥也是使用PBE的保存方式,所以我们还是需要输入口令,然后口令与盐结合并通过单向散列函数生成加密私钥的会话密钥,然后通过加密私钥的会话密钥的解密,我们最终得到自己的私钥,得到私钥之后,我们将发送端使用自己公钥加密的会话密钥进行解密,然后我们用会话密钥将加密后的数字签名与明文的压缩内容进行解密,得到压缩内容,压缩内容进行解压缩,我们得到加密后的数字签名与明文,我们使用发送端的公钥对数字签名进行解密,解密成功之后,我们将明文送入单向散列函数并计算哈希值,最后通过数字签名与哈希值的比较确定内容是否被修改,内容的来源是否正确。

 

为什么要使用发送端的私钥对明文的哈希值进行加密?

因为只有接收端只有使用发送端的公钥才能解出正确的哈希值,这样就保证了信息来源的正确性,当接收端将哈希值解和明文出来之后,对明文进行单向散列函数计算,经过比较就可以确认信息的正确性

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mllllk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值