GPG 加密 : 将数据进行非对称加密

简要介绍

GNU Privacy Guard(GnuPG或GPG)是一个密码学软件,用于 加密 、签名通信内容及管理非对称密码学的密钥。GnuPG是自由软件,遵循IETF订定的OpenPGP技术标准设计,并与PGP保持兼容。GnuPG是自由软件基金会的GNU计划的一部分,曾受德国政府资助。

  • 本文使用简单易懂的语言介绍了对称加密与非对称加密的区别,并将讲述如何在Windows(Linux亦可)以及Android系统下使用GPG为数据进行非对称加密解密、签名验证等操作以及加密时的注意事项来保证数据安全,简单易懂。有问题欢迎留言。

对称加密 和 非对称加密的区别

  1. 对称加密
    • 举个简单的例子,当A用密码将压缩包进行加密,B使用相同的密码进行解密,两者使用一个相同的密钥(密码)对信息进行加解密,这就是对称加密。但其中有一个严重的问题:如何保证密钥交换过程的安全性?换而言之,如果A给B和C发送信息,如果使用相同的密钥,那么A给B发送的信息,C也可以解密,反之亦然。在这种情况下,A只能使用不同的密钥和B、C进行联系,但密钥一旦增多,管理将会变得越来越困难。
    • 示例:压缩包加密
  2. 非对称加密
    • 同样的情况下,A想到了一个办法。为了和B进行联系,A让B给自己一把打开了的锁(锁是属于B的)(公钥),A把信息保存在一个箱子里,再用B的锁把箱子锁上。这样一来,如果C在运送过程中得到了箱子,没有B的钥匙(私钥),他是无法打开的。
    • 假设A已经用一种安全的方法将自己打开了的锁(锁是属于A的)发送给了B,那么当B给A回复时,只需用A提供的锁加密即可。当信息到达A时,A再用自己的钥匙开锁。所以,非对称加密的关键在于:在信息传递过程中,加解密使用的密钥是不同的(公钥加密,私钥解密)。
    • 非对称加密还有一个优点:A在把信息发送给B之前,还在信息的末尾按下了自己的指纹(签名)。这样,当收到消息时,B就知道这个消息一定是A发出的。
    • 示例:GPG加密

软件安装与使用

Windows (GPG4Win)

  • 由于Kleopatra默认不支持Windows,所以我们需要使用GPG4Win中已编译好的用于Windows的Kleopatra。

软件简介

Gpg4win是用于Microsoft Windows上的电子邮件与文件的加密软件, 使用了GnuPG 公钥加密。Gpg4win最初得到了德国联邦信息安全办公室的资助。Gpg4win及其所有包含的工具都是自由及开放源代码软件,Windows平台上典型的非商用选择。

gpg4win-logo.webp

下载与安装

  1. 打开GPG4Win官网下载页面
  2. 下载完成之后自行安装。GNU隐私助理可选安装。

Linux

如果你使用KDE Plasma桌面,安装kleopatra程序包即可。Gnome桌面也可以使用,不过视觉体验不太好,而且还要安装一大堆依赖。

Kleopatra 的使用

密钥创建

  • 安装完成之后在开始菜单或桌面找到Kleopatra,点击「新建密钥对」,输入你的姓名和电子邮件(注意:如果你需要上传密钥至密钥服务器,你的输入的名字将被公开)。
  • 输入完成之后,点击右下角的「高级设置」,你可以选择使用RSA、DSA,或者ECC加密算法。我建议选择521位密钥长度的ECC算法(NIST P-521),因为在加解密速度和密钥大小上,ECC比RSA更具有优势,而521位的密钥长度也比较安全。
  • 在下方的「证书用途」,你可以选上「验证」标签,视情况选择有效期(我一般不设置有效期,即永久有效)。
  • 选择完成之后,就可以创建密钥了。(注意:强烈建议输入复杂的密码来保护你的密钥。
    密钥创建.webp

分享自己的公钥

  • 在你创建的密钥上点击右键,选择「导出...」,会生成公钥文件(.asc),接下来你就可以把公钥文件发送给其他人了。(注意:一定要把密钥的指纹发给他人,否则无法验证密钥的真实性。
    • 在密钥上右键,「细节」,可以看到密钥的指纹。用指纹可以验证密钥是否可信。
      指纹.webp
  • 你也可以选择「在服务器上发布」,它会将你的密钥发送至公开的密钥服务器。注意:上传至服务器后,你设置的名字和电子邮件都会公开。同时,如果你没有设置密钥的有效期,必须上传密钥的吊销证书才能撤销密钥。

导入其他人的公钥

有两种方法获取密钥并导入。

  • 从文件或剪贴板导入密钥
    • 点击菜单栏的「文件」,再点击「导入...」,选择他人的公钥文件即可导入。
    • 也可以将公钥内容复制到Kleopatra自带的记事本(notepad)中,然后点击「导入 记事本内容」。
      记事本导入密钥.webp
    • 导入后,一定要向密钥的所有人核对密钥的指纹,防止公钥被篡改。之后,建议对你所导入的密钥更改证书信任级别(Change owner trust)。
  • 从密钥服务器导入密钥
    • 为了下载密钥,我们需要访问一个公开的密钥服务器,例如OpenPGP Keyserver
    • 在搜索框中填写欲搜索密钥的电子邮件地址或指纹。搜索指纹时,要在指纹前面加上「0x」才是密钥ID,例如搜索「0x42F878C6B7ED7C60C52719A0CB292CC0ADF36DFF」。
    • 在搜索出的结果中,点击keyID对应的值即可查看密钥内容,再按照上面的方法复制到剪贴板,然后在notepad中导入。
      密钥服务器.webp

加密

  • 当你确定密钥真实有效后,就可以使用他人的公钥加密数据。
  • 若要加密纯文本内容,使用Kleopatra自带的记事本即可。当你在记事本里输入了待加密的内容后,点击选栏的「收件人」,可以选择「为我加密」和「为他人加密」(如果你不选择「为我加密」,那么你就无法使用自己的密钥解密内容,适合在不安全的设备上使用),强烈建议对内容进行签名以保证有效性。签名并加密后,便可以将密文安全且准确地发送出去。
  • 若要加密文件,在工具栏里点击「签名/加密」,选择你要加密的文件,之后的操作和上文一样。加密完成后,会在源文件的目录下生成加密后的文件(*.pgp)。

解密

  • 若要解密纯文本内容,将文本粘贴到记事本中,点击「解密/验证记事本内容」即可。
  • 若要解密文件,在工具栏里点击「解密/校验」,选择加密了的文件解密,然后点击「Save All」保存文件即可(默认保存在加密文件的同目录)。
  • 注意:如果加密的文件具有签名,在解密的同时也会进行签名验证,但如果没有导入签名方的公钥就无法校验,所以若提示无法完成校验,需要先导入签名方的公钥(可以在密钥服务器上搜索证书ID或者从文件导入)。

仅签名

  • 若要只进行签名而不加密(发送的信息是明文,只能保证信息不被篡改),在记事本或文件加密的「收件人」一栏中,勾选「签名身份」,取消勾选「为我加密」和「为他人加密」即可。
  • 文本加密后,会生成包含原文本的签名信息。文件加密后,会在原目录生成签名文件(*.sig)。

仅验证

  • 验证和解密的方法大致相同。输入包含签名信息的文本到记事本或校验一个签名文件(*.sig)即可。

Android (OpenKeyChain)

待补充

注意事项

  • 既然都用GPG了,为了保证安全性,一种可行的方法是安装Linux的虚拟机,在虚拟机里加解密,毕竟哪个人的电脑里没点窃取隐私的东西呢╮(╯▽╰)╭ ?
  • 如果导入公钥后,签名仍校验失败,请及时联系发件人核实情况,并检查互联网连接是否安全。

后记

  • 这篇教程是本博客的第一篇文章,写了好久。。。又因为没有Android手机,OpenKeyChain的教程只能先鸽着了(其实就是懒得写)。之后陆陆续续应该会有其它的教程文章发布,敬请留意。
  • 有兴趣的话,也可以阅读我博客中的其他内容

 

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注