蚊章汇 - PGP
type: channel
link: https://linuxcn.bwsl.wang/tag/PGP/
items: 硬核观察 #1207 Firefox 面临被踢出兼容性要求名单
items: 用 PGP 保护代码完整性（七）：保护在线帐户
items: 用 PGP 保护代码完整性（六）：在 Git 上使用 PGP
items: 用 PGP 保护代码完整性（五）：将子密钥移到一个硬件设备中
items: 用 PGP 保护代码完整性（四）：将主密钥移到离线存储中
items: 用 PGP 保护代码完整性（三）：生成 PGP 子密钥
items: 用 PGP 保护代码完整性（二）：生成你的主密钥
items: 用 PGP 保护代码完整性（一）： 基本概念和工具
items: 如何使用 Seahorse 管理 PGP 和 SSH 密钥
items: 如何在 Ubuntu 16.04 上安装和使用 Encryptpad

硬核观察 #1207 Firefox 面临被踢出兼容性要求名单
type: item
date: 2023-12-07T03:46:15+08:00
description: 1 Firefox 面临被踢出兼容性要求名单美国网页设计系统（USWDS）提供了一套全面的标准，为美国政府的众多网站建设者提供指导。它为开发人员提供的文档借鉴了英国同行的 “2% 规则”： “根据 analytics.usa.gov 的观察，我们正式支持任何使用率超过 2% 的浏览器。”而根据该网站前九十天的流量，Firefox 浏览器的市场份额仅为 2.2%。如果低于 2% 的阈值，那么 USWDS 可以不再要求政府网站的开发者继续兼容 Firefox。这将有可能进而影响到企业，越来越多的网站将不再兼容 Firefox。消息来源：Slashdot老王点评：除了让 Firefox 用户去访问一下这个观察网站，我们还能做什么？2 Facebook 停止发送 PGP 加密邮件2015 年，在斯诺登事件后，Facebook 宣布将允许用户以加密方式接收该公司的邮件。开启该功能后，Facebook 发送给用户的所有电子邮件（主要是点赞通知和私人信息）都将使用已有几十年历史的 PGP 技术进行加密。据 Facebook 称，八年后的今天，由于使用率较低，Facebook 将取消这项功能。该功能已于周二废弃。Facebook 拒绝说明究竟有多少用户仍在使用加密电子邮件功能。消息来源：Tech Crunch老王点评：作为在国内早期推广过 PGP/GPG 加密邮件的人，我只能说，绝大部分人都觉得邮件的加密和签名是无谓的麻烦，叹息。3 中国成为世界上第一个在水下部署商业数据中心的国家据《中国日报》报道，我国开始在三亚市沿海的水下组装部署商业数据中心。第一个模块已经下水安装，按照计划，他们将在约 35 米深的水下基地安装 100 个水密存储模块，每个模块重达 1,300 吨，这将建立一个可同时运行近 600 万台计算机的数据中心。这些模块将产生大量热量，而这些热量会被周围的海水自然冷却。预计仅此一项就可节省 1.22 亿千瓦时的电力。该水下数据中心计划将于 2025 年投入使用，这些模块的使用寿命长达 25 年。消息来源：Interesting Engineering老王点评：微软也做过类似尝试，但没有进一步发展，希望我们的尝试能成功。

用 PGP 保护代码完整性（七）：保护在线帐户
type: item
date: 2019-01-11T07:12:00+08:00
description: 在这个系列的最后一篇当中，我们将为你展示如何用双因子认证保护你的在线账户。到目前为止，本系列教程已经提供了 PGP 的实用指南，包括基本概念和工具、生成和保护你的密钥的步骤。如果你错过了前面的文章，可以通过下面的链接查看。在本系列的最后一篇文章中，我们将为你保护在线帐户提供一个额外的指南，保护在线帐户是当今非常重要的一件事情。第一部分：基本概念和工具第二部分：生成你的主密钥第三部分：生成 PGP 子密钥第四部分：将主密钥移到离线存储中第五部分：将子密钥移到硬件设备中第六部分：在 Git 中使用 PGP清单取得一个具备 U2F 功能的设备（必要）为你的在线帐户启用双因子认证（必要）GitHub/GitLabGoogle社交媒体使用 U2F 作为主验证机制，使用 TOTP 作为备选（必要）考虑事项你可能注意到，很多在线开发者身份是捆绑了 email 地址的。如果有人能够访问你的邮箱，他们就能够去做一些对你会产生危害的事情，进而会损害你作为自由软件开发者的声誉。应该像保护你的 PGP 密钥那样保护你的 email 地址。使用 Fido U2F 的双因子认证双因子认证 是一种提升帐户安全性的机制，它除了要求用户名和密码之外，还要求一个物理令牌。它的目标是即便在有人窃取了你的密码（通过按键记录器、肩窥攻击或其它方式）的情况下，仍然能确保你的帐户安全，他们在没有得到你的一个专用的物理设备（“必备”的那个因子）的情况下，始终不能获取你的帐户。广为人知的双因子认证机制有：基于 SMS 的验证借助智能手机应用程序的基于时间的一次性令牌（TOTP），比如 Google Authenticator 或类似解决方案支持 Fido U2F 的硬件令牌基于 SMS 的验证很容易配置，但是它有如下的缺点：它在没有手机信号的地方无法使用（比如，建筑物的地下室），并且如果攻击者能够阻断或转向 SMS 信息，这种方式可能就会失败，比如通过克隆你的 SIM 卡。基于 TOTP 的多因子认证提供了比 SMS 更好的安全保护，但它也有一些重要的缺点（你要在智能手机中添加的那么多令牌中找到正确的那个）。此外，还不能避免一个事实，那就是你的密钥最终还是保存在你的智能手机中 —— 它是一个复杂的、全球连接的设备，它有可能还没有及时从制造商那儿收到安全补丁。更重要的是，不论是使用 TOTP 还是 SMS 的方法来保护你免受诱骗攻击 —— 如果诱骗攻击者能够窃取你的帐户密码和双因子令牌，他们就可以在合法的站点上使用它们，访问你的帐户。Fido U2F 是一个按标准开发的专用设备，它能够提供双因子认证机制来对付诱骗攻击。U2F 协议在 USB 令牌中保存每个站点的的唯一密钥，如果你在任何合法站点以外的地方尝试使用它，它将阻止你，以防范偶然让攻击者获得你的密码和一次性令牌。Chrome 和 Firefox 都支持 U2F 双因子认证，希望其它浏览器也能够提供对 U2F 的支持。获得一个支持 Fido U2F 功能的令牌支持 U2F 的硬件令牌的 可选目标很多，但如果你已经订购了一个支持智能卡的物理设备，那么你最好的选择就是 Yubikey 4，它两者都支持。启用你的在线帐户的双因子认证你要确定想启用双因子认证的在线账户，你的 email 提供商已经使用了（特别是 Google，它对 U2F 的支持非常好）。其它的站点这个功能应该是启用了：GitHub：当你上传你的 PGP 公钥时，你应该要想到，如果其他人能够获得访问你的帐户，他们可以用他们自己的 PGP 公钥替换掉你的 PGP 公钥。如果在 GitHub 上发布代码，你应该使用 U2F 认证来保护你的帐户安全。GitLab：理由同上Google：如果你有 google 帐户，你就惊奇地发现，许多帐户都允许以 Google 帐户来代替站点专用的认证来登入它们。Facebook：理由同上，许多在线站点都提供一个选择让你以 Facebook 的帐户来认证。即便你不使用 Facebook 也应该使用双因子认证来保护你的 Facebook 帐户。你认为必要的其它站点。查看 dongleauth.info 去找找灵感。如有可能，配置 TOTP 作为备选许多站点都允许你配置多个双因子认证机制，推荐的设置是：U2F 令牌作为主认证机制TOTP 手机应用作为辅助认证机制通过这种方式，即便你丢失了你的 U2F 令牌，你仍然能够重新获取对你的帐户的访问。或者，你可以注册多个 U2F 令牌（即：你可以用一个便宜的令牌仅用它做 U2F，并且将它用作备份）。延伸阅读到目前为止，你已经完成了下列的重要任务：创建你的开发者身份并使用 PGP 加密来保护它。通过将你的主密钥移到一个离线存储中并将子密钥移到一个外置硬件设备中的方式来配置你的环境，让窃取你的身份变得极…

用 PGP 保护代码完整性（六）：在 Git 上使用 PGP
type: item
date: 2019-01-07T08:09:00+08:00
description: 我们继续我们的 PGP 实践系列，来看看签名标签的标签和提交，这可以帮你确保你的仓库没有被篡改。在本系列教程中，我们提供了一个使用 PGP 的实用指南，包括基本概念和工具、生成和保护你的密钥。如果你错过了前面的文章，你可以查看下面的链接。在这篇文章中，我们谈一谈在 Git 中如何集成 PGP、使用签名的标签，然后介绍签名提交，最后添加签名推送的支持。第一部分：基本概念和工具第二部分：生成你的主密钥第三部分：生成 PGP 子密钥第四部分：将主密钥移到离线存储中第五部分：将子密钥移到硬件设备中Git 的核心特性之一就是它的去中心化本质 —— 一旦仓库克隆到你的本地系统，你就拥有了项目的完整历史，包括所有的标签、提交和分支。然而由于存在着成百上千的克隆仓库，如何才能验证你下载的仓库没有被恶意的第三方做过篡改？你可以从 GitHub 或一些貌似官方的位置来克隆它们，但是如果有些人故意欺骗了你怎么办？或者在你参与的一些项目上发现了后门，而 “Author” 行显示是你干的，然而你很确定 不是你干的，会发生什么情况？为解决上述问题，Git 添加了 PGP 集成。签名的标签通过确认它的内容与创建这个标签的开发者的工作站上的内容完全一致来证明仓库的完整性，而签名的提交几乎是不可能在不访问你的 PGP 密钥的情况下能够假冒你。清单了解签名的标签、提交和推送（必要）配置 git 使用你的密钥（必要）学习标签如何签名和验证（必要）配置 git 总是签名带注释标签（推荐）学习提交如何签名和验证工作（必要）配置 git 总是签名提交（推荐）配置 gpg-agent 选项（必要）考虑事项git 实现了 PGP 的多级集成，首先从签名标签开始，接着介绍签名提交，最后添加签名推送的支持。了解 Git 哈希git 是一个复杂的东西，为了你能够更好地掌握它如何集成 PGP，你需要了解什么是”哈希“。我们将它归纳为两种类型的哈希：树哈希和提交哈希。树哈希每次你向仓库提交一个变更，对于仓库中的每个子目录，git 都会记录它里面所有对象的校验和哈希 —— 内容（blobs）、目录（trees）、文件名和许可等等。它只对每次提交中发生变更的树和内容做此操作，这样在只变更树的一小部分时就不必去重新计算整个树的校验和。然后再计算和存储处于顶级的树的校验和，这样如果仓库的任何一部分发生变化，校验和将不可避免地发生变化。提交哈希一旦创建了树哈希，git 将计算提交哈希，它将包含有关仓库和变更的下列信息：树哈希的校验和变更前树哈希的校验和（父级）有关作者的信息（名字、email、创作时间）有关提交者的信息（名字、email、提交时间）提交信息哈希函数在写这篇文章时，虽然研究一种更强大的、抗碰撞的算法的工作正在进行，但 git 仍然使用的是 SHA1 哈希机制去计算校验和。注意，git 已经包含了碰撞防范程序，因此认为对 git 成功进行碰撞攻击仍然是不可行的。带注释标签和标签签名在每个 Git 仓库中，标签允许开发者标记特定的提交。标签可以是 “轻量级的” —— 几乎只是一个特定提交上的指针，或者它们可以是 “带注释的”，它自己将成为 git 树中的项目。一个带注释标签对象包含所有下列的信息：成为标签的提交的哈希的校验和标签名字关于打标签的人的信息（名字、email、打标签时间）标签信息一个 PGP 签名的标签是一个带有将所有这些条目封装进一个 PGP 签名的带注释标签。当开发者签名他们的 git 标签时，他们实际上是向你保证了如下的信息：他们是谁（以及他们为什么应该被信任）他们在签名时的仓库状态是什么样：标签包含的提交的哈希提交的哈希包含了顶级树的哈希顶级树哈希包含了所有文件、内容和子树的哈希它也包含有关作者的所有信息包含变更发生时的精确时间当你克隆一个仓库并验证一个签名的标签时，就是向你以密码方式保证：仓库中的所有内容、包括所有它的历史，与开发者签名时在它的计算机上的仓库完全一致。签名的提交签名的提交与签名的标签非常类似 —— PGP 签名的是提交对象的内容，而不是标签对象的内容。一个提交签名也给你提供了开发者签名时开发者树上的全部可验证信息。标签签名和提交的 PGP 签名提供了有关仓库和它的完整历史的完全一致的安全保证。签名的推送为了完整起见，在这里包含了签名的推送这一功能，因为在你使用这个功能之前，需要在接收推送的服务器上先启用它。正如我们在上面所说过的，PGP 签名一个 git 对象就是提供了开发者的 git 树当时的可验证信息，但不提供开发者对那个树意图相关的信息。比如，你可以在你自己复刻的 git 仓库的一个实验分支上尝试一个很酷的特性，为了评估它，你提交了你的工作，但是有人在你的代码中发现了一个恶意的 bug。由于你的提交是经过正确签名的，因此有人可能将包含有恶意…

用 PGP 保护代码完整性（五）：将子密钥移到一个硬件设备中
type: item
date: 2019-01-05T08:15:36+08:00
description: 在这个系列教程中，将为你提供使用 PGP 和保护你的私钥的最佳体验。在本系列教程中，我们将提供一个使用 PGP 的实用指南。如果你没有看过前面的文章，你可以通过下面的链接去查看。在这篇文章中，我们将继续讨论如何保护你的密钥，谈一谈将你的子密钥移到一个专门的硬件设备中的一些技巧。第一部分：基本概念和工具第二部分：生成你的主密钥第三部分：生成 PGP 子密钥第四部分：将主密钥移到离线存储中清单取得一个 GnuPG 兼容的硬件设备（必要）配置 GnuPG 在设备上工作（必要）设置用户和管理员的 PIN（必要）移动子密钥到设备中（必要）考虑事项虽然现在主密钥已经不用担心泄露或失窃了，但子密钥仍然在你的家目录中。任何得到它的人都能够解密你的通讯或假冒你的签名（如果他们知道密钥的密码）。并且，每次执行一个 GnuPG 操作都要将密钥加载到操作系统内存中，这将使一些更高级的恶意软件有机会得到你的密钥（想想 Meltdown 和 Spectre）。完全保护密钥的最好方式就是，将它移到一个专门的硬件设备中，这种硬件设备是一个可操作的智能卡。智能卡的好处一个智能卡包含一个加密芯片，它能够存储私钥，并且直接在智能卡内部执行秘密操作。因为密钥内容从来没有离开过智能卡，计算机操作系统并不能检索你插入的智能卡上的私钥。这与前面用于备份目的的加密 USB 存储是不同的 —— 虽然 USB 设备也是插入并解密的，但操作系统是能够去访问私钥内容的。使用外置的加密 USB 介质并不能代替智能卡设备的功能。智能卡的一些其它好处：它们很便宜且易于获得它们小巧且易于携带它们可以用于多种设备上它们中的很多都具有防篡改功能（取决于制造商）可用的智能卡设备智能卡最初是嵌入到真实钱包大小的卡中，故而得名智能卡。你肯定可以买到并使用 GnuPG 功能的智能卡，并且它们是你能得到的最便宜的可用设备之一。但是，事实上智能卡有一个很重要的缺点：它们需要一个智能卡读卡器，只有极小数的笔记本电脑上有这种读卡器。由于这个原因，制造商开始推出小型 USB 设备，它的大小和 U 盘类似，内置有微型智能卡，并且在芯片上简单地实现了智能卡协议特性。下面推荐几个这样的设备：Nitrokey Start：开源硬件和自由软件，可用于 GnuPG 的最便宜的选择之一，但是额外的安全特性很少。Nitrokey Pro：类似于 Nitrokey Start，它提供防篡改及更多的安全特性（但没有 U2F，具体查看指南的 U2F 节）。Yubikey 4：专利硬件和软件，但比 Nitrokey Pro 便宜，并且可以用在最新的笔记本电脑上的 USB-C 接口；也提供像 U2F 这样的额外的安全特性。我们推荐选一个同时具备智能卡功能和 U2F 的设备，在写这篇文章时，只能选择 Yubikey 4。配置智能卡设备你的智能卡设备插入任何一台现代的 Linux 或 Mac 工作站上都应该能正常工作。你可以通过运行如下的命令去验证它：$ gpg --card-status如果你没有收到错误，有一个完整的卡列表，就表示一切正常。不幸的是，排除为什么设备不能正常工作的所有可能原因，已经超出了本指南的范围。如果你的智能卡使用 GnuPG 时有问题，请通过你的操作系统的常见支持通道寻求支持。PIN 不一定是数字注意，尽管名为 “PIN”（暗示你它必须是一个“数字”），不论是用户 PIN 还是管理员 PIN 都不必非要是数字。当你收到一个新设备时，它可能设置有一个默认的用户和管理员 PIN，对于 Yubikey，它分别是 123456 和 12345678。如果它们的 PIN 不是默认的，请查看设备附带的说明书。快速设置为配置你的智能卡，你需要使用 GnuPG 菜单系统，因此这里并没有更方便的命令行开关：$ gpg --card-edit [...omitted...] gpg/card> admin Admin commands are allowed gpg/card> passwd你应该去设置用户 PIN (1)、管理员 PIN (3)、和重置码 (4)。请确保把它们记录并保存到一个安全的地方 —— 尤其是管理员 PIN 和重置码（它允许你去擦除整个智能卡内容）。你很少使用到管理员 PIN，因此如果你不记录下来，很可能会忘掉它。返回到智能卡主菜单，你也可以设置其它值（比如名字、性别、登入日期、等等），但是这些都不是必需的，一旦你的智能卡丢失了，将导致额外的信息泄露。将子密钥移到你的智能卡中退出卡菜单（使用 q 命令）保存所有更改。接下来，我们将你的子密钥移到智能卡中。将需要用到你的 PGP 密钥的密码，在大多数的智能卡操作中都将用到管理员 PIN。记住，那个 [fpr] 表示你的密钥的完整的 40 个字符的指纹。$ gpg -…

用 PGP 保护代码完整性（四）：将主密钥移到离线存储中
type: item
date: 2019-01-01T08:35:38+08:00
description: 如果开发者的 PGP 密钥被偷了，危害非常大。了解一下如何更安全。在本系列教程中，我们为使用 PGP 提供了一个实用指南。你可以从下面的链接中查看前面的文章：第一部分：基本概念和工具第二部分：生成你的主密钥第三部分：生成 PGP 子密钥这是本系列教程的第四部分，我们继续本教程，我们将谈一谈如何及为什么要将主密钥从你的家目录移到离线存储中。现在开始我们的教程。清单准备一个加密的可移除的存储（必要）备份你的 GnuPG 目录（必要）从你的家目录中删除主密钥（推荐）从你的家目录中删除吊销证书（推荐）考虑事项为什么要从你的家目录中删除你的主 [C] 密钥 ？这样做的主要原因是防止你的主密钥失窃或意外泄露。对于心怀不轨的人来说，私钥对他们具有很大的诱惑力 —— 我们知道有几个恶意软件成功地实现了扫描用户的家目录并将发现的私钥内容上传。对于开发者来说，私钥失窃是非常危险的事情 —— 在自由软件的世界中，这无疑是身份证明失窃。从你的家目录中删除私钥将帮你防范这类事件的发生。备份你的 GnuPG 目录!!!绝对不要跳过这一步!!!备份你的 PGP 密钥将让你在需要的时候很容易地恢复它们，这很重要！（这与我们做的使用 paperkey 的灾难级备份是不一样的）。准备可移除的加密存储我们从取得一个（最好是两个）小型的 USB “拇指“ 驱动器（可加密 U 盘）开始，我们将用它来做备份。你首先需要去加密它们：加密密码可以使用与主密钥相同的密码。备份你的 GnuPG 目录加密过程结束之后，重新插入 USB 驱动器并确保它能够正常挂载。你可以通过运行 mount 命令去找到设备挂载点的完全路径。（在 Linux 下，外置介质一般挂载在 /media/disk 下，Mac 一般在它的 /Volumes 下）你知道了挂载点的全路径后，将你的整个 GnuPG 的目录复制进去：$ cp -rp ~/.gnupg [/media/disk/name]/gnupg-backup（注意：如果出现任何套接字不支持的错误，没有关系，直接忽略它们。）现在，用如下的命令去测试一下，确保它们能够正常地工作：$ gpg --homedir=[/media/disk/name]/gnupg-backup --list-key [fpr]如果没有出现任何错误，说明一切正常。弹出这个 USB 驱动器并给它粘上一个明确的标签，以便于你下次需要它时能够很快找到它。接着，将它放到一个安全的 —— 但不要太远 —— 的地方，因为从现在起，你需要偶尔使用它来做一些像编辑身份信息、添加或吊销子证书、或签署其它人的密钥这样的事情。删除主密钥我们家目录中的文件并没有像我们所想像的那样受到保护。它们可能会通过许多不同的方式被泄露或失窃：通过快速复制来配置一个新工作站时的偶尔事故通过系统管理员的疏忽或恶意操作通过安全性欠佳的备份通过桌面应用中的恶意软件（浏览器、pdf 查看器等等）通过跨境胁迫使用一个很好的密码来保护你的密钥是降低上述风险的一个很好方法，但是密码能够通过键盘记录器、背后窥视、或其它方式被发现。基于以上原因，我们建议去配置一个从你的家目录上可移除的主密钥，将它保存在一个离线存储中。删除你的主密钥请查看前面的节，确保你有完整的你的 GnuPG 目录的一个备份。如果你没有一个可用的备份，下面所做的操作将会使你的主密钥失效！！！首先，识别你的主密钥的 keygrip：$ gpg --with-keygrip --list-key [fpr]它的输出应该像下面这样：pub rsa4096 2017-12-06 [C] [expires: 2019-12-06] 111122223333444455556666AAAABBBBCCCCDDDD Keygrip = AAAA999988887777666655554444333322221111 uid [ultimate] Alice Engineer <alice@example.org> uid [ultimate] Alice Engineer <allie@example.net> sub rsa2048 2017-12-06 [E] Keygrip = BBBB999988887777666655554444333322221111 sub rsa2048 2017-12-06 [S] Keygrip = CCCC999988887777666655554444333322221111找到 pub 行下方的 Keygrip 条目（就在主密钥指纹的下方）。它与你的家目录下 .gnupg 目录下的一个文件是一致的：$ cd ~/.gnupg/private-keys-v1.d $ ls AAAA9999888877776666555544443…

用 PGP 保护代码完整性（三）：生成 PGP 子密钥
type: item
date: 2018-05-05T04:29:00+08:00
description: 在第三篇文章中，我们将解释如何生成用于日常工作的 PGP 子密钥。在本系列教程中，我们提供了使用 PGP 的实用指南。在此之前，我们介绍了基本工具和概念，并介绍了如何生成并保护您的主 PGP 密钥。在第三篇文章中，我们将解释如何生成用于日常工作的 PGP 子密钥。清单生成 2048 位加密子密钥（必要）生成 2048 位签名子密钥（必要）生成一个 2048 位验证子密钥（推荐）将你的公钥上传到 PGP 密钥服务器（必要）设置一个刷新的定时任务（必要）注意事项现在我们已经创建了主密钥，让我们创建用于日常工作的密钥。我们创建 2048 位的密钥是因为很多专用硬件（我们稍后会讨论这个）不能处理更长的密钥，但同样也是出于实用的原因。如果我们发现自己处于一个 2048 位 RSA 密钥也不够好的世界，那将是由于计算或数学有了基本突破，因此更长的 4096 位密钥不会产生太大的差别。创建子密钥要创建子密钥，请运行：$ gpg --quick-add-key [fpr] rsa2048 encr $ gpg --quick-add-key [fpr] rsa2048 sign 用你密钥的完整指纹替换 [fpr]。你也可以创建验证密钥，这能让你将你的 PGP 密钥用于 ssh：$ gpg --quick-add-key [fpr] rsa2048 auth 你可以使用 gpg --list-key [fpr] 来查看你的密钥信息：pub rsa4096 2017-12-06 [C] [expires: 2019-12-06] 111122223333444455556666AAAABBBBCCCCDDDD uid [ultimate] Alice Engineer <alice@example.org> uid [ultimate] Alice Engineer <allie@example.net> sub rsa2048 2017-12-06 [E] sub rsa2048 2017-12-06 [S] 上传你的公钥到密钥服务器你的密钥创建已完成，因此现在需要你将其上传到一个公共密钥服务器，使其他人能更容易找到密钥。 （如果你不打算实际使用你创建的密钥，请跳过这一步，因为这只会在密钥服务器上留下垃圾数据。）$ gpg --send-key [fpr] 如果此命令不成功，你可以尝试指定一台密钥服务器以及端口，这很有可能成功：$ gpg --keyserver hkp://pgp.mit.edu:80 --send-key [fpr] 大多数密钥服务器彼此进行通信，因此你的密钥信息最终将与所有其他密钥信息同步。关于隐私的注意事项：密钥服务器是完全公开的，因此在设计上会泄露有关你的潜在敏感信息，例如你的全名、昵称以及个人或工作邮箱地址。如果你签名了其他人的钥匙或某人签名了你的钥匙，那么密钥服务器还会成为你的社交网络的泄密者。一旦这些个人信息发送给密钥服务器，就不可能被编辑或删除。即使你撤销签名或身份，它也不会将你的密钥记录删除，它只会将其标记为已撤消 —— 这甚至会显得更显眼。也就是说，如果你参与公共项目的软件开发，以上所有信息都是公开记录，因此通过密钥服务器另外让这些信息可见，不会导致隐私的净损失。上传你的公钥到 GitHub如果你在开发中使用 GitHub（谁不是呢？），则应按照他们提供的说明上传密钥：添加 PGP 密钥到你的 GitHub 账户要生成适合粘贴的公钥输出，只需运行：$ gpg --export --armor [fpr] 设置一个刷新定时任务你需要定期刷新你的钥匙环，以获取其他人公钥的最新更改。你可以设置一个定时任务来做到这一点：$ crontab -e 在新行中添加以下内容：@daily /usr/bin/gpg2 --refresh >/dev/null 2>&1 注意：检查你的 gpg 或 gpg2 命令的完整路径，如果你的 gpg 是旧式的 GnuPG v.1，请使用 gpg2。通过 Linux 基金会和 edX 的免费“Introduction to Linux” 课程了解关于 Linux 的更多信息。via: https://www.linux.com/blog/learn/pgp/2018/2/protecting-code-integrity-pgp-part-3-generating-pgp-subkeys作者：Konstantin Ryabitsev 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出

用 PGP 保护代码完整性（二）：生成你的主密钥
type: item
date: 2018-04-09T16:12:00+08:00
description: 在本系列文章中，我们将深度探讨如何使用 PGP 以及为工作于自由软件项目的开发者提供实用指南。在前一篇文章中，我们介绍了基本工具和概念。在本文中，我们将展示如何生成和保护你的 PGP 主密钥。清单生成一个 4096 位的 RSA 主密钥 （必要）使用 paperkey 备份你的 RSA 主密钥 （必要）添加所有相关的身份 （必要）考虑事项理解“主”（认证）密钥在本节和下一节中，我们将讨论“主密钥”和“子密钥”。理解以下内容很重要：在“主密钥”和“子密钥”之间没有技术上的区别。在创建时，我们赋予每个密钥特定的能力来分配功能限制。一个 PGP 密钥有四项能力[S] 密钥可以用于签名[E] 密钥可以用于加密[A] 密钥可以用于身份认证[C] 密钥可以用于认证其他密钥一个密钥可能有多种能力带有 [C] （认证）能力的密钥被认为是“主”密钥，因为它是唯一可以用来表明与其他密钥关系的密钥。只有 [C] 密钥可以被用于：添加或撤销其他密钥（子密钥）的 S/E/A 能力添加、更改或撤销密钥关联的身份（uid）添加或更改本身或其他子密钥的到期时间为了网络信任目的为其它密钥签名在自由软件的世界里，[C] 密钥就是你的数字身份。一旦你创建该密钥，你应该格外小心地保护它并且防止它落入坏人的手中。在你创建主密钥前在你创建的你的主密钥前，你需要选择你的主要身份和主密码。主要身份身份使用邮件中发件人一栏相同格式的字符串：Alice Engineer <alice.engineer@example.org> 你可以在任何时候创建新的身份，取消旧的，并且更改你的“主要”身份。由于主要身份在所有 GnuPG 操作中都展示，你应该选择正式的和最有可能用于 PGP 保护通信的名字和邮件地址，比如你的工作地址或者用于在项目 提交 commit 时签名的地址。密码 密码 passphrase 专用于私钥存储在磁盘上时使用对称加密算法对其进行加密。如果你的 .gnupg 目录的内容被泄露，那么一个好的密码就是小偷能够在线假冒你的最后一道防线，这就是为什么设置一个好的密码很重要的原因。一个强密码最好使用丰富或混合的词典的 3-4 个词，而不引用自流行来源（歌曲、书籍、口号）。由于你将相当频繁地使用该密码，所以它应当易于输入和记忆。算法和密钥强度尽管现在 GnuPG 已经支持椭圆曲线加密一段时间了，但我们仍坚持使用 RSA 密钥，至少较长一段时间会这样。虽然现在就可以开始使用 ED25519 密钥，但你可能会碰到无法正确处理它们的工具和硬件设备。在后续的指南中我们说 2048 位的密钥对 RSA 公钥加密的生命周期已经足够，你可能也会好奇主密钥为什么是 4096 位。 原因很大程度是由于社会因素而非技术上的：主密钥在密钥链上是最显眼的，如果你的主密钥位数比一些和你交互的开发者的少，他们肯定会鄙视你。生成主密钥为了生成你的主密钥，请使用以下命令，并且将 “Alice Engineer” 替换为正确值。$ gpg --quick-generate-key 'Alice Engineer <alice@example.org>' rsa4096 cert 这将弹出一个要求输入密码的对话框。然后，你可能需要移动鼠标或随便按一些键才能生成足够的熵，直到该命令完成。查看命令输出，它就像这样：pub rsa4096 2017-12-06 [C] [expires: 2019-12-06] 111122223333444455556666AAAABBBBCCCCDDDD uid Alice Engineer <alice@example.org> 注意第二行的长字符串 —— 它是你新生成的密钥的完整指纹。密钥 ID（Key ID）可以用以下三种不同形式表达： 指纹 Fingerprint ，一个完整的 40 个字符的密钥标识符 长密钥 ID Long ，指纹的最后 16 个字符（AAAABBBBCCCCDDDD） 短密钥 ID Short ，指纹的最后 8 个字符（CCCCDDDD）你应该避免使用 8 个字符的短密钥 ID，因为它们不足够唯一。这里，我建议你打开一个文本编辑器，复制你新密钥的指纹并粘贴。你需要在接下来几步中用到它，所以将它放在旁边会很方便。备份你的主密钥出于灾后恢复的目的 —— 同时特别的如果你试图使用 Web of Trust 并且收集来自其他项目开发者的密钥签名 —— 你应该创建你的私钥的硬拷贝备份。万一所有其它的备份机制都失败了，这应当是最后的补救措施。创建一个你的私钥的可打印的硬拷贝的最好方法是使用为此而写的软件 paperkey。paperkey 在所有 Linux 发行版上可用，在 Mac 上也可以通过 brew 安装 paperkey。运行以下命令，用你密钥的完…

用 PGP 保护代码完整性（一）： 基本概念和工具
type: item
date: 2018-04-08T17:19:00+08:00
description: 在本系列文章中，我们将深度探讨如何使用 PGP 确保软件完整性。这些文章将为工作于自由软件项目的开发者提供实用指南，并且将包含以下主题：PGP 基础和最佳实践如何用 Git 使用 PGP如何保护你的开发者账户我们使用与“Freedom”含义相同的词项 “Free”，但这个系列中列出的指南也可以被任何其它类型的依赖于分布式团队开发者贡献的软件中。如果你编写进入公共源仓库的代码，你可以从了解和遵循这篇指南中受益。结构每节分为两个部分：适用于你项目需求的清单形式自由的考虑事项的列表，解释这些决定取决于什么，并伴随着配置指令清单优先级每个清单中各项包含着优先级，用来帮助指导你的决定：（必要）该项一定要排在考虑事项列表的前面。如果没有这样做，它们将给提交到开源项目中的代码带来高风险。（推荐）包含该项将提升整体安全性，但会影响你与工作环境的交互方式，并且可能需要学习新的习惯或者放弃旧的习惯。记住，这些只是指导。如果你感到这些优先级不能反映你项目提交的安全，你应该根据自己的需要调整它们。PGP 基本概念和工具清单理解 PGP 在自由软件开发中的作用 （必要）理解 公钥密码学 Public Key Cryptography 的基础知识 （必要）理解 PGP 加密和签名的不同 （必要）理解 PGP 密钥身份 key identities （必要）理解 PGP 密钥有效性 key validity （必要）安装 GnuPG 工具（版本 2.x） （必要）考虑事项自由软件社区长期依赖于 PGP 确保它生产的软件产品的真实性和完整性。你可能没有注意到，但无论你是一个 Linux 、Mac 和 Windowas 用户，你都曾依赖 PGP 来确保你电脑环境的完整性：Linux 发行版依赖 PGP 来确保当二进制或者原代码包从被生产出来到被终端用户安装之间没被更改过自由软件项目通常会伴随发行软件的存档提供分离的 PGP 签名，使得下游的项目可以在把下载的版本集成到自己的分布式下载之前，验证下载版本的完整性。自由软件项目通常依赖代码本身的 PGP 签名来跟踪起源，并验证项目开发者提交的代码的完整性这与工作于专有平台的程序员使用的开发者证书或代码签名机制非常相似。实际上，这两种技术背后的核心概念非常相似 —— 尽管它们在实现的技术层面和它们委托信任方式的大多不同。PGP 不依赖于集中式认证机构，而是让每个用户为每个证书赋予自己的信任。我们的目标是使你的项目通过使用 PGP 来进行代码起源和完整性追踪，遵循最佳实践并遵守基本的安全预防措施。极其基本的 PGP 操作概括你不需要知道 PGP 如何工作的具体细节 —— 理解核心概念足以成功地达到我们的目的。PGP 依赖于公钥密码学来将明文转换为密文。这个过程需要两种不同的密钥：公钥，被所有人知道私钥，只被拥有者知道加密对加密来说，PGP 使用拥有者的公钥创造一条只能通过拥有者私钥解密的消息：发送者生成一个随机的加密密钥（“会话密钥”）发送者使用该会话密钥（使用对称算法）加密内容发送者使用接收者的 PGP 公钥加密会话密钥发送者向接收者发送加密后的内容和加密后的会话密钥要解密：接收者使用他们的 PGP 私钥解密会话密钥接收者使用会话密钥解密消息的内容签名为了创建签名，PGP 私钥或公钥会以相反的方式使用：签名者生成内容的校检和哈希签名者使用自己的 PGP 私钥来加密该校检和签名者伴随内容提供加密后的校检和要验证签名：验证者生成自己的内容校检和哈希验证者使用签名者的 PGP 公钥来解密提供的校检和如果校检和匹配，就验证了内容的完整性结合使用通常，加密消息也被发送者自己的 PGP 密钥签名。无论何时使用加密消息，这应当是默认的，因为没有认证的加密没有很大意义（除非你是一个告密者或秘密代理并且需要可行的可否认性）理解密钥身份每个 PGP 密钥必须有一个或多个与之关联的身份。通常，“ 身份 Identity ”指的是以下格式中的人物全名和邮件地址：Alice Engineer <alice.engineer@example.com> 有时也会在括号中包含说明，来告诉终端用户关于该特定密钥的更多信息：Bob Designer (obsolete 1024-bit key) <bob.designer@example.com> 由于人们可以和多个职业和个人实体相关联，因此在同一密钥上可以有多个身份：Alice Engineer <alice.engineer@example.com> Alice Engineer <aengineer@personalmail.example.org> Alice Engineer <webmaster@girlswhocode.example.net> 当使用多个身份时，其中之一将被标记为“ p…

如何使用 Seahorse 管理 PGP 和 SSH 密钥
type: item
date: 2018-03-16T17:11:00+08:00
description: 学习使用 Seahorse GUI 工具去管理 PGP 和 SSH 密钥。安全即内心的平静。毕竟，安全是许多用户迁移到 Linux 的最大理由。但是为什么要止步于仅仅采用该平台，你还可以采用多种方法和技术去确保你的桌面或者服务器系统的安全。其中一项技术涉及到密钥 —— 用在 PGP 和 SSH 中。PGP 密钥允许你去加密和解密电子邮件和文件，而 SSH 密钥允许你使用一个额外的安全层去登入服务器。当然，你可以通过命令行接口（CLI）来管理这些密钥，但是，如果你使用一个华丽的 GUI 桌面环境呢？经验丰富的 Linux 用户可能对于脱离命令行来工作感到很不适应，但是，并不是所有用户都具备与他们相同的技术和水平，因此，使用 GUI 吧！在本文中，我将带你探索如何使用 Seahorse GUI 工具来管理 PGP 和 SSH 密钥。Seahorse 有非常强大的功能，它可以：加密/解密/签名文件和文本。管理你的密钥和密钥对。同步你的密钥和密钥对到远程密钥服务器。签名和发布密钥。缓存你的密码。备份密钥和密钥对。在任何一个 GDK 支持的格式中添加一个图像作为一个 OpenPGP photo ID。创建、配置、和缓存 SSH 密钥。对于那些不了解 Seahorse 的人来说，它是一个管理 GNOME 钥匙环中的加密密钥和密码的 GNOME 应用程序。不用担心，Seahorse 可以安装在许多的桌面环境上。并且由于 Seahorse 可以在标准的仓库中找到，你可以打开你的桌面应用商店（比如，Ubuntu Software 或者 Elementary OS AppCenter）去安装它。你可以在你的发行版的应用商店中点击去安装它。安装完成后，你就可以去使用这个很方便的工具了。我们开始去使用它吧。PGP 密钥我们需要做的第一件事情就是生成一个新的 PGP 密钥。正如前面所述，PGP 密钥可以用于加密电子邮件（通过一些工具，像 Thunderbird 的 Enigmail 或者使用 Evolution 内置的加密功能）。PGP 密钥也可以用于加密文件。任何人都可以使用你的公钥加密电子邮件和文件发给你（LCTT 译注：原文此处“加密”误作“解密”）。没有 PGP 密钥是做不到的。使用 Seahorse 创建一个新的 PGP 密钥对是非常简单的。以下是操作步骤：打开 Seahorse 应用程序在主面板的左上角点击 “+” 按钮选择 “ PGP 密钥 PGP Key ”（如图 1 ）点击 “ 继续 Continue ”当提示时，输入完整的名字和电子邮件地址点击 “ 创建 Create ”图 1：使用 Seahorse 创建一个 PGP 密钥。在创建你的 PGP 密钥期间，你可以点击 “ 高级密钥选项 Advanced key options ” 展开选项部分，在那里你可以为密钥添加注释信息、加密类型、密钥长度、以及过期时间（如图 2）。图 2：PGP 密钥高级选项增加注释部分可以很方便帮你记住密钥的用途（或者其它的信息）。要使用你创建的 PGP，可在密钥列表中双击它。在结果窗口中，点击 “ 名字 Names ” 和 “ 签名 Signatures ” 选项卡。在这个窗口中，你可以签名你的密钥（表示你信任这个密钥）。点击 “ 签名 Sign ” 按钮然后（在结果窗口中）指出 “ 你是如何仔细的检查这个密钥的？ how carefully you’ve checked this key? ” 和 “ 其他人将如何看到该签名 how others will see the signature ”（如图 3）。图 3：签名一个密钥表示信任级别。当你处理其它人的密钥时，密钥签名是非常重要的，因为一个签名的密钥将确保你的系统（和你）做了这项签名工作并且完全信任这个重要的密钥。谈到导入的密钥，Seahorse 可以允许你很容易地去导入其他人的公钥文件（这个文件以 .asc 为后缀）。你的系统上有其他人的公钥，意味着你可以加密发送给他们的电子邮件和文件（LCTT 译注：原文将“加密”误作“解密”）。然而，Seahorse 在很长的一段时间内都存在一个 已知的 bug。这个问题是，Seahorse 导入使用 GPG 版本 1，但是显示的是 GPG 版本 2。这意味着，在这个存在了很长时间的 bug 被修复之前，导入公钥总是失败的。如果你想导入一个公钥文件到 Seahorse 中，你只能去使用命令行。因此，如果有人发送给你一个文件 olivia.asc，你想去导入到 Seahorse 中使用它，你将只能运行命令 gpg2 --import olivia.asc。那个密钥将出现在 GnuPG 密钥列表中。你可以打开该密钥，点击 “ 我信任签名 I trust signa…

如何在 Ubuntu 16.04 上安装和使用 Encryptpad
type: item
date: 2018-02-24T19:15:21+08:00
description: EncryptPad 是一个自由开源软件，它通过简单方便的图形界面和命令行接口来查看和修改加密的文本，它使用 OpenPGP RFC 4880 文件格式。通过 EncryptPad，你可以很容易的加密或者解密文件。你能够像保存密码、信用卡信息等私人信息，并使用密码或者密钥文件来访问。特性支持 windows、Linux 和 Max OS。可定制的密码生成器，可生成健壮的密码。随机的密钥文件和密码生成器。支持 GPG 和 EPD 文件格式。能够通过 CURL 自动从远程远程仓库下载密钥。密钥文件的路径能够存储在加密的文件中。如果这样做的话，你不需要每次打开文件都指定密钥文件。提供只读模式来防止文件被修改。可加密二进制文件，例如图片、视频、归档等。在这份教程中，我们将学习如何在 Ubuntu 16.04 中安装和使用 EncryptPad。环境要求在系统上安装了 Ubuntu 16.04 桌面版本。在系统上有 sudo 的权限的普通用户。安装 EncryptPad在默认情况下，EncryPad 在 Ubuntu 16.04 的默认仓库是不存在的。你需要安装一个额外的仓库。你能够通过下面的命令来添加它 ：sudo apt-add-repository ppa:nilaimogard/webupd8 下一步，用下面的命令来更新仓库：sudo apt-get update -y 最后一步，通过下面命令安装 EncryptPad：sudo apt-get install encryptpad encryptcli -y 当 EncryptPad 安装完成后，你可以在 Ubuntu 的 Dash 上找到它。使用 EncryptPad 生成密钥和密码现在，在 Ubunntu Dash 上输入 encryptpad，你能够在你的屏幕上看到下面的图片 ：下一步，点击 EncryptPad 的图标。你能够看到 EncryptPad 的界面，它是一个简单的文本编辑器，带有顶部菜单栏。首先，你需要生成一个密钥文件和密码用于加密/解密任务。点击顶部菜单栏中的 “Encryption->Generate Key”，你会看见下面的界面：选择文件保存的路径，点击 “OK” 按钮，你将看到下面的界面：输入密钥文件的密码，点击 “OK” 按钮 ，你将看到下面的界面：点击 “yes” 按钮来完成该过程。加密和解密文件现在，密钥文件和密码都已经生成了。可以执行加密和解密操作了。在这个文件编辑器中打开一个文件文件，点击 “encryption” 图标 ，你会看见下面的界面：提供需要加密的文件和指定输出的文件，提供密码和前面产生的密钥文件。点击 “Start” 按钮来开始加密的进程。当文件被成功的加密，会出现下面的界面：文件已经被该密码和密钥文件加密了。如果你想解密被加密后的文件，打开 EncryptPad ，点击 “File Encryption” ，选择 “Decryption” 操作，提供加密文件的位置和你要保存输出的解密文件的位置，然后提供密钥文件地址，点击 “Start” 按钮，它将要求你输入密码，输入你先前加密使用的密码，点击 “OK” 按钮开始解密过程。当该过程成功完成，你会看到 “File has been decrypted successfully” 的消息 。 []注意：如果你遗忘了你的密码或者丢失了密钥文件，就没有其他的方法可以打开你的加密信息了。对于 EncrypePad 所支持的格式是没有后门的。via: https://www.howtoforge.com/tutorial/how-to-install-and-use-encryptpad-on-ubuntu-1604/作者：Hitesh Jethva 译者：singledo 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出