文章
分享发现

分享:GnuPG,面向个人的数字签名和加密软件

-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256

GnuPG是面向个人的数字签名和加密软件。本文介绍gpg使用中涉及的一些概念,具体的使用说明见官网。

官方网站: https://gnupg.org/

零、非对称加密

非对称加密是一种有趣的加密手段,我持有一个密钥对,其中一个公开(公钥),另一个不公开(私钥)。你要向我发送密信,并不需要事先约定密码(以省去一系列麻烦),直接用我的公钥加密,我就可以通过我的私钥解开。

一、数字签名

互联网上,乃至现实生活中,一个比较麻烦的问题是:如何证明“我”是“我”?比如在这个不通过邮件注册的2049bbs,有一天,你忘记了你的密码,你应该通过什么凭据来向管理员证明你真的是那个你呢?把这个问题推而广之:要如何在保证匿名性的同时,证明身份的连贯性呢?

这时就需要引入数字签名技术。数字签名,就是将非对称加密的过程反过来,将我的明文,用我的私钥加密,大家用我的公钥解开,然后和我的明文比对一致,就说明这则消息真的是我发送的。

二、信任模型

假设私钥存储、使用得很安全,数字签名可以验证一则信息真的是该公钥的持有者发送的。那么如何将一个公钥对应到一个身份上呢?

一种方式是通过一个第三方权威机构(CA)进行认证,证明公钥属于某人。另一种办法是信任链,签名别人的公钥,形成一个信任网络,来证明公钥属于某人。然而想要同时保持匿名性,就不能用这些办法。

如果你长期在2049bbs用某个id发布信息,如果2049本身始终没有受到攻击,https连接过程完整,那么大家就基本可以确定这个消息是你发送的。如果发生意料之中的意外,比如老大哥用高级的黑客手段入侵这里发布假消息,事情就麻烦了。但是,如果你长期用某个密钥对签名你的信息,大家就能知道某个公钥可以对应到你头上。如果老大哥假冒你的身份发送假消息,由于没有签名,或者签名错误,大家很快就能识别出来。

进一步的,如果这里被老大哥摧毁了,在新搭建的论坛,大家能够通过你的数字签名认出你是以前论坛的某某某。

三、碎碎念

  1. 这些密码学方法的一切可靠性都是建立在你的电脑本身没有问题的假设之上的。如果你安装了老大哥生产的电幕程序(比如QQ),如果它偷取你的私钥,事情就要打个问号。 2) 现在的硬件发展日新月异,所以在用GPG创建密钥对的时候,一定要选最长的密钥位数。

四、我的GPG公钥

(GnuPG是OpenPGP标准的一种实现。我这个公钥用的ECC算法,并不知道是不是被其他OpenPGP实现支持)

  • -----BEGIN PGP PUBLIC KEY BLOCK-----

mDMEWv0YPxYJKwYBBAHaRw8BAQdABR/MqGFOWADxMi4hZbW4cF9y0AD7KtV1m9/N V33Doc+0JUxvdmVGb3JtdWxhIDxMb3ZlRm9ybXVsYUAyMDQ5YmJzLnh5ej6IkAQT FggAOBYhBEjG+6GscGtshKWQoVgepmZ2LdKRBQJa/Rg/AhsDBQsJCAcCBhUKCQgL AgQWAgMBAh4BAheAAAoJEFgepmZ2LdKRxV0A/iviT9o99n8USbf75+ZUHjW+edjI 8R1XZ8g09AdKnajPAP0Qpbs2WkaY+z0iYu22we09cYynchGRE5Myvrh2NqUmALg4 BFr9GD8SCisGAQQBl1UBBQEBB0DDg8X+w25T1FBIPAlbSZJbmyGeJaaFxfR18a4V kN3lRQMBCAeIeAQYFggAIBYhBEjG+6GscGtshKWQoVgepmZ2LdKRBQJa/Rg/AhsM AAoJEFgepmZ2LdKRzWYBAKrNYIakENfZXF31QpHNHPVREcWjx9IxBsraye327sOE AP0aRPVtvexuedndCeHhp/GIblT1Lh2bakC0eP6rTjtXBQ== =UVZ/

  • -----END PGP PUBLIC KEY BLOCK-----

-----BEGIN PGP SIGNATURE-----

iI4EARYIADYWIQRIxvuhrHBrbISlkKFYHqZmdi3SkQUCWv0qUBgcbG92ZWZvcm11 bGFAMjA0OWJicy54eXoACgkQWB6mZnYt0pEUIQEAyQedER2kNzJr2OW4mVBSMuOO M1w2LNw6eiDdzXGsrfsBAJ+JXohZLKMvh4Czag5Lu4BKCyrnqB9ZTNdslLhORzoK =F9Yv -----END PGP SIGNATURE-----

菜单
  1. LoveFormula  

    发现2049bbs的程序会折叠多个换行,导致签名验证失败。在预览的时候自己验证一遍签名,应该就可以避免这个问题,这个帖子签名是好的。

    GnuPG这样的程序很棒,但是身边一直没有程序员以外的人用,觉得很可惜。

  2. 无名  

    @LoveFormula 「发现2049bbs的程序会折叠多个换行,导致签名验证失败。」 这个没明白。=.=

  3. LoveFormula  

    @daidai 就是你在两段话之间按多个回车,会被删到只有1个。

    就像这样(本来中间有2个空行)。 ​ ​ 一般不会这样(这个两行的空白是通过插入零宽空格实现的)

  4. 小二   默认开启批量屏蔽受限用户发言功能,可在设置中手动取消。

    我推荐 mailvelope,易用性好 https://www.mailvelope.com

  5. JackMa   我是活人

    看起来很有趣的样子,试试

  6. 小二   默认开启批量屏蔽受限用户发言功能,可在设置中手动取消。

    这个怎么用的呀…… 断行的问题,你先使用

    code
    

    发一下

  7. LoveFormula  

    @Ciao 唔,并没有看懂这个code是怎样一种语法。至于GPG的使用,大概是这样的:

    一、生成自己的密钥对

    将GnuPG正确安装到系统中后,要先生成你自己的密钥对,执行命令:gpg --full-gen-key

    此时会让你选择key的密码类型(也可以选择用途),选择默认的RSA和RSA就可以了。 然后会问你密钥长度,现在硬件发展日行千里,所以选择最长的4096。 选择密钥对过期时间,一般选1年。 之后会问你姓名和邮件地址,实际上和真实的姓名和邮件地址没有关系,按你的需求填,比如我在这个论坛的key,姓名和邮件分别填的LoveFormula和[email protected]。如果要拿来加密邮件,就填真正的邮件地址。 最后确认,系统需要一点熵来生成密钥,可以看点电影或者开一把游戏什么的来加速熵的获取。

    导出自己的公钥,方便复制给别人:gpg --armor --export [email protected] 这里“--armor”的意思是产生以ascii码编码的输出,方便复制(否则就直接把二进制数据输出到终端了)。要看清楚,这里应该写着“BEGIN PGP PUBLIC KEY BLOCK”,而不是“BEGIN PGP PRIVATE KEY BLOCK”(“--export-secret-keys”的输出:导出私钥)

    下面是我的公钥,可以保存成一个名为key.asc的纯文本文件,方便等会儿实验:

    -----BEGIN PGP PUBLIC KEY BLOCK-----

    mDMEWv0YPxYJKwYBBAHaRw8BAQdABR/MqGFOWADxMi4hZbW4cF9y0AD7KtV1m9/N V33Doc+0JUxvdmVGb3JtdWxhIDxMb3ZlRm9ybXVsYUAyMDQ5YmJzLnh5ej6IkAQT FggAOBYhBEjG+6GscGtshKWQoVgepmZ2LdKRBQJa/Rg/AhsDBQsJCAcCBhUKCQgL AgQWAgMBAh4BAheAAAoJEFgepmZ2LdKRxV0A/iviT9o99n8USbf75+ZUHjW+edjI 8R1XZ8g09AdKnajPAP0Qpbs2WkaY+z0iYu22we09cYynchGRE5Myvrh2NqUmALg4 BFr9GD8SCisGAQQBl1UBBQEBB0DDg8X+w25T1FBIPAlbSZJbmyGeJaaFxfR18a4V kN3lRQMBCAeIeAQYFggAIBYhBEjG+6GscGtshKWQoVgepmZ2LdKRBQJa/Rg/AhsM AAoJEFgepmZ2LdKRzWYBAKrNYIakENfZXF31QpHNHPVREcWjx9IxBsraye327sOE AP0aRPVtvexuedndCeHhp/GIblT1Lh2bakC0eP6rTjtXBQ== =UVZ/ -----END PGP PUBLIC KEY BLOCK-----

    二、平常的使用

    导入朋友的公钥(key.asc是文件名):gpg --import key.asc

    列出已导入的key:gpg --list-keys

    加密:gpg --armor --encrypt file.txt (会生成一个file.txt.asc文件,是加密后的信息) 在加密时,需要填入朋友的名字或邮件地址。

    数字签名:gpg --sign file.txt,以默认key进行签名,生成一个file.txt.gpg,包含原文件内容和签名(但是是二进制的,人类不可读) gpg --armor --sign file.txt,还是签名,这次保存为名为file.txt.asc的文本文件,但签名信息和文件内容还是绑在一起的,不可读。 gpg --clear-sign file.txt,签名,保存为名为file.txt.asc的文本文件,是本楼正文的签名方式,文字信息和数字签名信息分开,人类可读。一般电子邮件客户端的GnuPG插件就用这种签名方式。

    三、图形前端,邮件客户端的加密插件

    我一般用Linux。在Linux系统上,Thunderbird上有Enigmail插件,GNOME的Evolution自带GPG支持,KDE上有KGpg来管理公钥私钥,GNOME上有seahorse可以管理密钥对。

    Windows上,似乎可以用Gpg4win,是一整套工具,据说还支持Outlook https://www.gpg4win.org/index.html Windows作为政府和企业1984人民群众的有力工具,加密点日记什么的可以,防查水表就只能寄希望于微软没有应政府要求埋设后门(当然如果你把GPG和QQ,微信,搜狗拼音,360杀毒安装在一个操作系统里面,那就自求多福吧)

    至于苹果的系统,我从来没有用过,不清楚。不过既然有brew,那肯定是有gpg的。不过都既然都云上贵州了,那就呵呵一下。(不要试图用苹果的手机系统和电脑系统是两个东西以及你们的帐号不是中国帐号来狡辩)

    (世界险恶,我认为Linux上也可能有后门)

  8. 小二   默认开启批量屏蔽受限用户发言功能,可在设置中手动取消。

    我试试

  9. Tikz  

    @LoveFormula 现在在用macOS,macgpg还是非常方便的,直接就有邮件插件。没办法追求每个人都完全避免所有后门,现在姑且是认为没有安装国产软件的windows和没有上云的macOS是能够个人意义上的使用GPG的。如果需要政治方面的使用,比较推荐的还是使用编程随想的多虚拟机。如果希望自己避免后门,很可能就需要使用经过自己裁剪审计的linux,相对而言是比较麻烦的。

  10. LoveFormula  

    @Tikz 他那个多虚拟机的办法确实比较好,是一种比较常用的方法(似乎那个博客在这里挺有名的?)。

    对于中共来说,它只需要监控QQ、微信、电话、短信等人们常用的实名通信方式就可以了。至于GnuPG这些方法,虽然能够达到真正的安全,但是并不大众化:下载来的GnuPG里面并不带一份简单友好,一般人也能读懂的GnuPG“最佳实践”(听说正在写,什么时候写出来就不得而知了),即使有,现在的人也被新时代的互联网教育“不要去阅读大段文字”。

    这些办法的“高山流水”直接决定了用这些联络方式,本质上就是“脱离群众”,掀不起什么风浪。

  11. Jackie  

    论坛帖子没有搜藏功能很伤啊。 前阵子刚在 TG 群里问人这个邮件后面的密钥怎么回事,今天论坛竟然有人发了。没有很看懂,想收藏了有空细看。

    谢谢分享!

  12. 无名  

    @Jackie c: 关键词 可搜索

  13. Jackie  

    @daidai 关键词对于像这个帖子这样讨论的东西比较特别可能是一个办法,但是如果标题本身关键词比较常用,或者我根本就不记得标题叫什么的帖子就无力了啊。 可能还不如自己去翻自己回帖记录来的快。但是翻回帖记录也只能建立在回帖不多的情况,等到论坛用了几年,翻回帖大概也不可能了。

  14. 无名  

    https://emailselfdefense.fsf.org/zh-hans/workshops.html 无意中搜到的 FSF 提供的电子邮件加密指南网站。