变更备案进行中,部分内容暂时关闭...

如何使用OpenPGP标准(非对称加密)加密消息并签名

学习 墨染辉夜 1447℃ 0评论

了解概念

公钥:公开的钥匙,有你的公钥就能给你发消息,就像有你的银行卡号就能给你打钱一样。

私钥:私有的钥匙,有你的公钥就能解密,与公钥是绑定的,就像你的银行卡密码,只有有密码的人才能取钱。

你的银行卡号可以给别人,但你的银行卡密码不能给别人。

可以根据私钥算出公钥,但是根据公钥不能算出私钥(也不是完全不能,只是非常困难)。

密钥:密钥对,公钥和私钥的合称

通俗解释

在开始之前不妨设想一下:此时你在某不太可靠的即时通讯软件和Alice聊天,期间你需要告诉Alice一个压缩文件的密码又不想让其他人知道。直接发肯定不行,又因为你们此前从未进行过加密信息的传输,所以没有一个约定好的加密方式,此时该怎么办?只有告诉Alice我们用什么方法加密,可是无论你用什么方法告诉Alice(比如我们约定RC4加密,密码为:123456),加密方法和密码都将暴露无遗,那么再怎么加密是也形同虚设。何以解忧?唯有“非对称加密”。

使用非对称加密后,每个人使用一种算法生成地球上惟一的一对钥匙,分别称为公钥和私钥。公钥用于加密,私钥用于解密。使用公钥加密过的信息只能由配对的私钥解开。因为我需要告诉Alice在哪里见面,所以Alice需要将她的公钥发给我,然后我用她的公钥加密之后将密文发给她(值得注意的是这里用Alice的公钥加密完成后,除了Alice本人能解密外谁都不能解密,包括我自己),这样即使有人搞到了Alice的公钥和我发的密文,也无法解密。

但这里又会暴露出另一个问题,我们稍后再说。

理论解释

加密的传统方法只用一把密钥加密。发出讯息者用这把钥匙对讯息加密。接收讯息者需要有完全相同的钥匙才能将加密了的讯息解密。这把钥匙必须以一种其他人没有机会得到它的方式给予接收讯息者。如果其他人得到了这把钥匙,这种加密方式就没用了。

而非对称加密使用一种称为”公开钥匙”的方法解决这个问题。公开钥匙的概念涉及两把钥匙。一把钥匙称为”公开钥匙”(公钥),可以以所有方式传递,任何人都可以得到。另一把钥匙称为”隐密钥匙”(密钥)。这把钥匙是秘密的,不能传递出去。只有它的拥有者才能接触和使用它。如果正确实施了这种方法,从公钥不能得出密钥。发出讯息者以接收讯息者的公钥将讯息加密,接收者则以自己的密钥解密。

重点步骤

加密流程图 引用https://wiki.ubuntu.org.cn/%E6%96%87%E4%BB%B6:Gpg.png

全套大致分为以下几个步骤:生成密钥->交换公钥->确认公钥->加密明文->发送密文->解密密文

未提及的步骤在使用演示中会提到,此标题下为重点步骤。

确认公钥

其中交换公钥环节是最容易出问题的,只有在确认了公钥之后,才能认为此次加密是安全的,可以信任的,否则就像你和川建国同志讨论祖国的未来,却因没有确认公钥而被FBI窃听。

我们在第一个大标题提到的“会暴露的另一个问题”这里可以解释了。

公开钥匙算法的一个弱点在于如何传播公钥。有可能有用户传递一把有虚假身份的公钥。如果别人不知就里,用这把公钥加密讯息,持有该虚假钥匙的侵入者就可以解密而读到讯息。如果侵入者再将解密的讯息以真正的公开钥匙加密,然后传送出去,这种进攻无法被发现。

通俗一点:创建密钥对的过程,只需要名字和邮件就能创建,而你的名字和邮件是公开的,所以任何人都能以你的名字和邮件创建密钥然后冒充你,又或者你在发送公钥的过程中被人调包了,如何在网络世界里保证你才是真的你?那就是依靠指纹(密钥特征)

指纹的作用:每一个公钥可以通过计算得出一个独一无二的指纹(无法伪造,无法反推,详情参考HASH值),再进行对比就能确认身份。比如Alice用公开的方式给你她的公钥,你得到之后计算出此公钥的指纹,然后通过一种能确定是Alice本人的方式(可以打电话或者视频通话)联系她获取她的指纹,与你计算出的是否相符。如果相符那就是Alice的,可以信任,如果不相符就说明Alice的公钥在发给你的过程中被调包,绝对不可以信任。

加密明文

加密环节其实没什么好讲的,但有两点要注意。

  • 同时选择为自己和为他人加密:在通俗解释中我们提到“值得注意的是这里用Alice的公钥加密完成后,除了Alice本人能解密外谁都不能解密,包括我自己”,如果是这样的话,大部分情况下会很不方便,所以我们可以选择在为别人加密的同时也为自己加密,这样自己和别人就都能解密了。
  • 数字签名:它的作用是验证以传的明文、加密文件、密钥是来自正确的发送者的,没有经过其它人的修改。例如:任何人都能给Alice发加密或者不加密的信息,如果有人用Alice的公钥发了一条密文给Alice告诉她今晚在哪里约会,如果没有数字签名/数字签名是伪造的,那么Alice一看就知道不是你发的也就不会上当。关于数字签名此处无法详细讲解,可以看看这个视频

开始使用

软件下载

使用演示

Windows

点击展开 查看更多

Android

点击展开 查看更多

iOS & MacOS

暂无演示,大同小异,自行操作。

小练习

上面我们了解了如何加密文本,其实加密文件也是大同小异。现在你可以用 email 把加密后的好玩的图片/视频寄给我,接下来我会解密然后回复你。如果你希望我也以加密的形式回复你,请在邮件中附加上你的公钥(如果你已经上传到公钥服务器的话,请告诉我你的公钥id)。

我的邮箱、公钥以及指纹在联系站长页面可以找到。

最后总结

公钥的交换和确认是这套加密方法的弱点,这个环节一定要注意!

其实话说回来,就目前而言,这个加密方法对我们普通人来说没太大用途,最多也就和朋友聊聊不可描述的东西。不过多了解一点也没什么不好的,毕竟这个加密方法前途无量,万一哪一天有特殊情况真的需要非对称加密而不会手忙脚乱。

拓展阅读

下面是一些其他博客/网站写的有关PGP的文章,可供参考,但不代表本站观点。

Exin 团队在用的 PGP 全平台教程

GPG/PGP – Ubuntu中文

Gnu 隐私卫士 (GnuPG) 袖珍 HOWTO (中文版)

使用GnuPG(PGP)加密信息及数字签名教程

下面是一些关于非对称加密和数字签名原理的视频

手机支付中的数字签名是如何保证信息安全的?李永乐老师讲解生日碰撞和哈希函数(2018最新)

银行密码系统安全吗?质数(素数)到底有啥用?李永乐老师11分钟讲RSA加密算法(2018最新)

椭圆曲线加密与哈希函数是什么?非对称加密是什么?比特币中的数学原理

我的文章对您有帮助吗?
支付宝免费打赏
手机打赏 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址