> 学习 > 如何使用OpenPGP标准(非对称加密)加密消息并签名
如何使用OpenPGP标准(非对称加密)加密消息并签名学习 墨染辉夜 5天前 121℃
1元特价送NeetAndAngel(2020年3月初的新游戏,非文章内游戏):点此
了解概念公钥:公开的钥匙,有你的公钥就能给你发消息,就像有你的银行卡号就能给你打钱一样。
私钥:私有的钥匙,有你的公钥就能解密,与公钥是绑定的,就像你的银行卡密码,只有有密码的人才能取钱。
你的银行卡号可以给别人,但你的银行卡密码不能给别人。
可以根据私钥算出公钥,但是根据公钥不能算出私钥(也不是完全不能,只是非常困难)。
密钥:密钥对,公钥和私钥的合称
通俗解释在开始之前不妨设想一下:此时你在某不太可靠的即时通讯软件和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的公钥在发给你的过程中被调包,绝对不可以信任。
加密明文加密环节其实没什么好讲的,但有两点要注意。
开始使用 软件下载 使用演示 Windows
生成密钥对
安装完成后,打开Kleopatra,Ctrl+N新建密钥对然后选择[创建个人OpenPGP密钥对]↓
输入你的名字和电子邮件后,点击[高级设置],将密钥类型和位数改为RSA的4096比特↓
证书用途一项按需更改,如无特殊需求建议取消有效期勾选框(即证书永久有效,除非自行吊销)。
检查无误后点击新建↓
新建过程中,需要你创建一个密码来保护你的密钥对,这个密码很重要,建议尽量复杂但自己不能忘记,一旦忘记无法找回!↓