蚊章汇 - GPG
type: channel
link: https://linuxcn.bwsl.wang/tag/GPG/
items: 手把手指导：在 Linux 上使用 GPG 加解密文件
items: 使用这个 Python 模块输入不可见的密码
items: 用 PGP 保护代码完整性（二）：生成你的主密钥
items: 用 PGP 保护代码完整性（一）： 基本概念和工具
items: 如何使用 GPG 加解密文件
items: 如何在 Mutt 邮件客户端中使用密文密码
items: 在 Linux 中加密邮件
items: 给猫咪照片加密

手把手指导：在 Linux 上使用 GPG 加解密文件
type: item
date: 2021-12-15T21:36:45+08:00
description: GnuPG，俗称 GPG，是一个非常通用的工具，被广泛用作电子邮件、信息、文件或任何你需要安全地发送给别人的东西的加密行业标准。学习使用 GPG 很容易，你可以在几分钟内就学会使用它。在本教程中，我将告诉你如何用 GPG 加密和解密文件。这是一个简单的教程，你可以在你的 Linux 系统上尝试所有的练习。这将帮助你练习 GPG 命令，并在你完全陌生的情况下理解它。请先阅读整个教程，然后开始自己做。GPG 是如何进行加密的？要使用 GPG，你首先需要有一个 GPG 密钥。GPG 密钥是你在后面的教程中用来加密（或解密）文件的东西。它也是用来识别你的身份的，你的名字和电子邮件也会与密钥绑定。GPG 密钥的工作原理是使用两个文件，一个私钥和一个公钥。这两个密钥是相互联系的，并且 GPG 的所有功能都需要使用它们，特别是对文件加密和解密。当你用 GPG 加密一个文件时，它使用的是私钥。然后，这个新的加密文件只能用配对的公钥进行解密。私钥，顾名思义，是以私下的、不给任何人看的方式来存储的密钥。另一方面，公钥是用来给其他人的，或者你希望能够解密你的文件的任何人。这就是 GPG 的加密方法的主要作用。它允许你对文件进行本地加密，然后允许其他人确保他们收到的文件实际上是由你发送的。因为他们能够解密文件的唯一方法是使用你的公钥，而这只有在文件首先使用你的私钥加密的情况下才有效。反之，其他人可以用你的公钥对文件进行加密，而唯一能够解密的方法是用你的私钥。因此，允许其他人公开发布文件，而不用担心除了你以外的人能够阅读它们。（LCTT 译注：另外一个常见的用例是你用你的私钥对公开发布的文件进行签名，别人使用你的公钥通过验证你的签名而确信文件是你发布的、并没有被篡改。但本文没有涉及这个用例。）换句话说，如果一个文件是用私钥加密的，它只能用相应的公钥解密。而如果一个文件是用公钥加密的，它只能用相应的私钥解密。你已经在使用 GPG 而没有意识到一个最常见的使用 GPG 的例子是在 Linux 软件包管理器中，特别是 外部仓库。你把开发者的公钥添加到你系统的可信密钥中。开发者用他/她的私钥签署软件包（生成签名）。由于你的 Linux 系统拥有该公钥文件，它就能理解该软件包实际上是来自受信任的开发者。许多加密服务在你没有意识到的情况下使用了某种 GPG 的实现。但现在最好不要去研究这些细节。现在你对这个概念有点熟悉了，让我们看看如何使用 GPG 来加密一个文件，然后用它来解密。用 GPG 对文件进行加密和解密这是一个非常简单的场景。我假定你只有一个系统，你想看看 GPG 是如何工作的。你并没有把文件发送到其他系统。你对文件进行加密，然后在同一个系统上解密。当然，这不是一个实际的用例，但这也不是本教程的目的。我的目的是让你熟悉 GPG 命令和功能。之后，你可以在现实世界中使用这些知识（如果需要的话）。为此，我将告诉你如何与他人分享你的公钥。第一步：安装 GPGGPG 可以在大多数发行版的软件库中找到，开箱即用。在基于 Debian 和 Ubuntu 的系统中，安装 gpg 包：sudo apt install gpg 如果你使用 基于 Arch 的发行版，用 pacman 命令 安装 gnupg 软件包：sudo pacman -S gnupg 第二步：生成一个 GPG 密钥在你的系统上生成一个 GPG 密钥只需要一条简单的命令。只要运行下面的命令，就会生成你的密钥（你可以对大多数问题使用默认值，如下面的下划线部分所示）。gpg --full-generate-key 检查 GPG 密钥然后你可以通过使用 --list-secret-keys 和 --list-public-keys 参数，分别看到私钥和公钥都是通过 pub 下显示的那个 ID 相互绑定的。第三步：用 GPG 加密一个文件现在你已经设置了 GPG 密钥，你可以开始对我们的文件进行加密了。使用下面的命令来加密文件：gpg --encrypt --output file.gpg --recipient user@example.com file 让我们快速浏览一下该命令的内容：首先，你指定了 —encrypt 选项。这告诉 GPG，我们将对一个文件进行加密。接下来，你指定了 --output file.gpg。这可以是任何名字，不过惯例是给你要加密的文件的名称加上 .gpg 扩展名（所以 message.txt 会变成 message.txt.gpg）。接下来，你输入 —recipient user@example.com。这指定了一个相应的 GPG 密钥的电子邮件，这个密钥实际上在这个系统上还不存在。有点迷惑？工作原理是，你在这里指定的电子邮件必须与你本地系统中的公钥相联系。通常情况下，这将是来自…

使用这个 Python 模块输入不可见的密码
type: item
date: 2021-07-14T18:16:00+08:00
description: 用 GPG 和 Python 的 getpass 模块给你的密码多一层安全保障。密码对程序员来说尤其重要。你不应该在不加密的情况下存储它们，而且你也不应该在用户输入密码的时候显示出输入的内容。当我决定要提高我的笔记本电脑的安全性时，这对我来说变得特别重要。我对我的家目录进行了加密，但当我登录后，任何以纯文本形式存储在配置文件中的密码都有可能暴露在偷窥者面前。具体来说，我使用一个名为 Mutt 的应用作为我的电子邮件客户端。它可以让我在我的 Linux 终端中阅读和撰写电子邮件，但通常它希望在其配置文件中有一个密码。我限制了我的 Mutt 配置文件的权限，以便只有我可以看到它，我是我的笔记本电脑的唯一用户，所以我并不真的担心经过认证的用户会无意中看到我的配置文件。相反，我想保护自己，无论是为了吹嘘还是为了版本控制，不至于心不在焉地把我的配置发布到网上，把我的密码暴露了。此外，虽然我不希望我的系统上有不受欢迎的客人，但我确实想确保入侵者不能通过对我的配置上运行 cat 就获得我的密码。Python GnuPGPython 模块 python-gnupg 是 gpg 应用的一个 Python 封装。该模块的名字是 python-gnupg，你不要把它和一个叫做 gnupg 的模块混淆。GnuPG（GPG） 是 Linux 的默认加密系统，我从 2009 年左右开始使用它。我对它很熟悉，对它的安全性有很高的信任。我决定将我的密码输入 Mutt 的最好方法是将我的密码存储在一个加密的 GPG 文件中，创建一个提示我的 GPG 密码来解锁这个加密文件，然后将密码交给 Mutt（实际上是交给 offlineimap 命令，我用它来同步我的笔记本和电子邮件服务器）。用 Python 获取用户输入 是非常容易的。对 input 进行调用，无论用户输入什么，都会被存储为一个变量：print("Enter password: ") myinput = input() print("You entered: ", myinput) 我的问题是，当我根据密码提示在终端上输入密码时，我所输入的所有内容对任何从我肩膀上看过去或滚动我的终端历史的人来说都是可见的：$ ./test.py Enter password: my-Complex-Passphrase 用 getpass 输入不可见密码正如通常的情况一样，有一个 Python 模块已经解决了我的问题。这个模块是 getpass4，从用户的角度来看，它的行为和 input 完全一样，只是不显示用户输入的内容。你可以用 pip 安装这两个模块：$ python -m pip install --user python-gnupg getpass4 下面是我的 Python 脚本，用于创建密码提示：#!/usr/bin/env python # by Seth Kenlon # GPLv3 # install deps: # python3 -m pip install --user python-gnupg getpass4 import gnupg import getpass from pathlib import Path def get_api_pass(): homedir = str(Path.home()) gpg = gnupg.GPG(gnupghome=os.path.join(homedir,".gnupg"), use_agent=True) passwd = getpass.getpass(prompt="Enter your GnuPG password: ", stream=None) with open(os.path.join(homedir,'.mutt','pass.gpg'), 'rb') as f: apipass = (gpg.decrypt_file(f, passphrase=passwd)) f.close() return str(apipass) if __name__ == "__main__": apipass = get_api_pass() print(apipass) 如果你想试试，把文件保存为 password_prompt.py。如果你使用 offlineimap 并想在你自己的密码输入中使用这个方案，那么把它保存到某个你可以在 .offlineimaprc 文件中指向 offlineimap 的位置（我使用 ~/.mutt/password_prompt.py）。测试密码提示要查看脚本的运行情况，你首先必须创建一个加密文件（我假设你已经设置了 GPG）：$ echo "hello world" > pass $ gpg --encry…

用 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…

如何使用 GPG 加解密文件
type: item
date: 2017-12-07T07:50:35+08:00
description: 目标：使用 GPG 加密文件发行版：适用于任何发行版要求：安装了 GPG 的 Linux 或者拥有 root 权限来安装它。难度：简单约定：# - 需要使用 root 权限来执行指定命令，可以直接使用 root 用户来执行，也可以使用 sudo 命令$ - 可以使用普通用户来执行指定命令介绍加密非常重要。它对于保护敏感信息来说是必不可少的。你的私人文件应该要被加密，而 GPG 提供了很好的解决方案。安装 GPGGPG 的使用非常广泛。你在几乎每个发行版的仓库中都能找到它。如果你还没有安装它，那现在就来安装一下吧。Debian/Ubuntu$ sudo apt install gnupg Fedora# dnf install gnupg2 Arch# pacman -S gnupg Gentoo# emerge --ask app-crypt/gnupg 创建密钥你需要一个密钥对来加解密文件。如果你为 SSH 已经生成过了密钥对，那么你可以直接使用它。如果没有，GPG 包含工具来生成密钥对。$ gpg --full-generate-key GPG 有一个命令行程序可以帮你一步一步的生成密钥。它还有一个简单得多的工具，但是这个工具不能让你设置密钥类型，密钥的长度以及过期时间，因此不推荐使用这个工具。GPG 首先会询问你密钥的类型。没什么特别的话选择默认值就好。下一步需要设置密钥长度。4096 是一个不错的选择。之后，可以设置过期的日期。 如果希望密钥永不过期则设置为 0。然后，输入你的名称。最后，输入电子邮件地址。如果你需要的话，还能添加一个注释。所有这些都完成后，GPG 会让你校验一下这些信息。GPG 还会问你是否需要为密钥设置密码。这一步是可选的， 但是会增加保护的程度。若需要设置密码，则 GPG 会收集你的操作信息来增加密钥的健壮性。 所有这些都完成后， GPG 会显示密钥相关的信息。加密的基本方法现在你拥有了自己的密钥，加密文件非常简单。 使用下面的命令在 /tmp 目录中创建一个空白文本文件。$ touch /tmp/test.txt 然后用 GPG 来加密它。这里 -e 标志告诉 GPG 你想要加密文件， -r 标志指定接收者。$ gpg -e -r "Your Name" /tmp/test.txt GPG 需要知道这个文件的接收者和发送者。由于这个文件给是你的，因此无需指定发送者，而接收者就是你自己。解密的基本方法你收到加密文件后，就需要对它进行解密。 你无需指定解密用的密钥。 这个信息被编码在文件中。 GPG 会尝试用其中的密钥进行解密。$ gpg -d /tmp/test.txt.gpg 发送文件假设你需要发送文件给别人。你需要有接收者的公钥。 具体怎么获得密钥由你自己决定。 你可以让他们直接把公钥发送给你， 也可以通过密钥服务器来获取。收到对方公钥后，导入公钥到 GPG 中。$ gpg --import yourfriends.key 这些公钥与你自己创建的密钥一样，自带了名称和电子邮件地址的信息。 记住，为了让别人能解密你的文件，别人也需要你的公钥。 因此导出公钥并将之发送出去。gpg --export -a "Your Name" > your.key 现在可以开始加密要发送的文件了。它跟之前的步骤差不多， 只是需要指定你自己为发送人。$ gpg -e -u "Your Name" -r "Their Name" /tmp/test.txt 结语就这样了。GPG 还有一些高级选项， 不过你在 99% 的时间内都不会用到这些高级选项。 GPG 就是这么易于使用。你也可以使用创建的密钥对来发送和接受加密邮件，其步骤跟上面演示的差不多， 不过大多数的电子邮件客户端在拥有密钥的情况下会自动帮你做这个动作。via: https://linuxconfig.org/how-to-encrypt-and-decrypt-individual-files-with-gpg作者：Nick Congleton 译者：lujun9972 校对：wxy本文由 LCTT 原创编译，Linux 中国 荣誉推出

如何在 Mutt 邮件客户端中使用密文密码
type: item
date: 2016-02-01T16:36:00+08:00
description: Mutt 是一个 Linux/UNIX 终端环境下的开源的邮件客户端。Mutt 以及 Alpine 在 Linux 命令行爱好者中有着最忠诚的追随者，这不是没有原因的。想一下你所期待邮件客户端应有的功能，Mutt 拥有：多协议支持（例如，POP3、IMAP 和 SMTP），S/MIME 和 PGP/GPG 集成，会话线索，颜色标记，可定制宏/快捷键，等等。另外，基于命令行的 Mutt 相比粗重的基于浏览器的邮件客户端（如：Gmail，Ymail）或图形用户界面的邮件客户端（如：Thunderbird，MS Outlook）而言，是一个使用电子邮件的轻量级替代品。当你想使用 Mutt 通过公司的 SMTP/IMAP 服务器访问或发送邮件，或取代网页邮件服务，可能所关心的一个问题是如何保护您的邮件凭据（如：SMTP/IMAP 密码），它们存储在一个纯文本 Mutt 配置文件（~/.muttrc）中。对于这些人对安全的担忧，确实有一个容易的方法来加密 Mutt 配置文件*，以防止这种风险。在这个教程中，我描述了如何加密 Mutt 敏感配置，比如使用 GnuPG（GPG）加密 SMTP/IMAP 密码，GPG 是一个开源的 OpenPGP 实现。第一步 （可选）：创建 GPG 密钥因为我们将要使用 GPG 加密 Mutt 配置文件，如果你没有 GPG 密钥，第一步就是创建一个（公钥/私钥对）。如果有，请忽略这步。创建一个新 GPG 密钥，输入下面命令：$ gpg --gen-key 选择密钥类型（RSA），密钥长度（2048 bits），和过期时间（0 代表不过期）。当出现用户 ID 提示时，输入关联到该公钥/私钥对的名字（Dan Nanni） 和邮箱地址（myemail@email.com）。最后，输入一个密码来保护你的私钥。生成一个 GPG 密钥需要大量的随机字节来构成熵，所以在生成密钥期间确保在你的系统上执行一些随机行为（如：敲打键盘，移动鼠标或者读写磁盘）。根据密钥长度，生成 GPG 密钥要花几分钟或更多时间。第二步：加密 Mutt 敏感配置下一步，在 ~/.mutt 目录创建一个新的文本文件，然后把一些你想隐藏的 Mutt 敏感配置放进去。这个例子里，我指定了 SMTP/IMAP 密码。$ mkdir ~/.mutt $ vi ~/.mutt/password set smtp_pass="XXXXXXX" set imap_pass="XXXXXXX" 现在通过 GPG 使用你的公钥加密这个文件如下：$ gpg -r myemail@email.com -e ~/.mutt/password 这将创建 ~/.mutt/password.gpg，这是一个原始文件的 GPG 加密版本。然后删除 ~/.mutt/password，只保留 GPG 加密版本。第三步：创建完整 Mutt 配置文件现在你已经在一个单独的文件放置了加密的 Mutt 敏感配置，你可以在 ~/.muttrc 指定其余的 Mutt 配置。然后增加下面这行在 ~/.muttrc 末尾。source "gpg -d ~/.mutt/password.gpg |" 当你启动 Mutt 时，这行将解密 ~/.mutt/password.gpg ，然后将解密内容应用到你的 Mutt 配置中。下面展示一个完整 Mutt 配置例子，这可以让你通过 Mutt 访问 Gmail，而没有暴露你的 SMTP/IMAP 密码。用你的 Gmail ID 替代下面的 yourgmailaccount，此外你也需要在你的 Goolgle 账户设置中启用“支持不太安全的应用访问”。set from = "yourgmailaccount@gmail.com" set realname = "Your Name" set smtp_url = "smtp://yourgmailaccount@smtp.gmail.com:587/" set imap_user = "yourgmailaccount@gmail.com" set folder = "imaps://imap.gmail.com:993" set spoolfile = "+INBOX" set postponed = "+[Google Mail]/Drafts" set trash = "+[Google Mail]/Trash" set header_cache =~/.mutt/cache/headers set message_cachedir =~/.mutt/cache/bodies set certificate_file =~/.mutt/certificates set move = no set imap_…

在 Linux 中加密邮件
type: item
date: 2014-10-30T18:01:00+08:00
description: 如果你一直在考虑如何加密电子邮件，那么在众多的邮件服务和邮件客户端中挑来挑去一定是件头痛的事情．可以考虑两种加密方法：SSL或TLS加密会保护发送到邮件服务器的登录名和密码．Gunpg是一款标准的、强大的Linux加密工具，可以加密和认证消息．如果你可以管理自己的GPG加密，并不考虑第三方工具，那它就够了，其它的我们将在稍后讨论．即便加密了消息，你仍然会暴露在流量分析中，因为消息头部必须是明文形式．所以需要另一款比如Tor network来隐藏你在互联网上的足迹．我们会看看各种邮件服务和客户端，以及其中的利弊．忘掉Web邮件如果你使用过GMail, Yahoo，Hotmail或者其它Web邮件提供商的邮件服务，那就忘掉它们吧．你在Web浏览器里输入的任何信息都会暴露在JavaScript攻击中，而且无论服务提供商提供什么保障都是过眼云烟(译者注:此说法靠谱否?)．GMail,Yahoo和Hotmail均提供SSL/TLS加密来防止消息被窃听．但是它们不会提供任何保护来阻碍它们自己的数据挖掘，因此并不会提供端到端的加密．Yahoo和Google都声称将在明年推出端到端的加密．对此我持怀疑态度，因为如果一旦它们的核心业务数据挖掘受到干预，它们就什么都干不了了．市面上也有各式各样的声称可以为所有类型的电子邮件都能提供安全加密的第三方邮件加密服务，比如Virtru和SafeMess．对此我依旧表示怀疑，因为无论是谁，只要持有加密秘钥就可以访问你的消息，所以你还是要依赖于对他们的信任而不是技术．对等消息可以避免许多使用集中化服务中的缺陷．RetroShare和Bitmessage是两种流行的范例．我不知道它们是否如实所述，但这么说肯定有其可取之处．那Anddroid和iOS又如何呢?假设大部分的Android和iOS应用都没有权限获取你的消息的话，那就是最安全的．不要照搬我说的 -- 在应用将要安装到你的设备上时麻烦读读相关的服务条款并检查所要求的权限．即便在初次安装时它们的条款是可接受的，也记得单方面的条款改变是行业的标准，所以做最坏的打算是最安全的．零知识（Zero Knowledge）Proton Mail是一款全新的邮件服务，声称采用零知识就可以实现消息加密．认证和消息加密分为两个单独的步骤，Proton遵照Swiss隐私条款，它们不会通过日志记录用户的活动．零知识加密提供真正的安全．这代表只有你拥有你的加密秘钥，如果你丢了它们，你的消息就无法恢复了．也有许多加密电子邮件服务声称可以保护你的隐私．认真阅读细则，查看红色标注的地方，比如受限的用户数据采集，与好友分享，与执法部门的合作等．这些条款暗示它们会收集和共享用户数据，拥有权限获取你的加密秘钥，并读取你的消息．Linux邮件客户端一款独立的开源邮件客户端，比如, Mutt, Claws, Evolution, Sylpheed和Alpine，可建立你自己控制的GnuPG秘钥，给你大部分的保护．（建立更安全的电子邮件和Web浏览的最容易的方式是运行TAILS live的Linux发行版．详情查看通过 Tor、TAILS 和 Debian 在网上保护你自己。）无论你使用的是TAILS还是一款标准Linux发行版，管理GnuPG的方法是相同的，所以下面来学习如何使用GnuPG加密消息．使用GnuPG首先，熟悉一下相关术语。OpenPGP是一种开放的电子邮件加密和认证协议，基于菲利普·齐默曼的Pretty Good Privacy (PGP)。GNU Privacy Guard (GnuPG or GPG)是OpenPGP的GPL实现。GnuPG使用对称公钥加密算法，也就是说会生成一对密钥：一个任何人都可以用来加密发送给你的消息的公钥和一个只有你自己拥有用来解密消息的的私钥。GnuPG执行两个分开的函数：数字化签名消息以证明消息来自你和加密消息。任何人都可以读到你的数字签名消息，但只有那些与你交换密钥的人才可以读取加密消息。切记千万不要与他人分享你的密钥！只能分享公钥。Seahorse是GnuPG对应的GNOME图形化前端，KGpg是KDE图形化的GnuPG工具。Kgpg为了创建了管理加密秘钥提供了一个很好的GUI界面．现在我们执行生成和管理GunPG密钥的基本步骤。这个命令生成一个新的密钥：$ gpg --gen-key 这个过程有许多步骤；对于大部分人来说，只需要回答所有的问题，遵循默认设置就好。当你生成你的密钥时，记下来并将其保存在一个安全的地方，因为如果你丢掉了它，你就不能解密任何消息了。任何关于不要写下密码的建议都是错误的。我们中的大部分人要记住许多登录名和密码，包括那些我们几乎从来不会用到的，所以全部记住它们是不现实的。你知道当人们不写下他们的密码时会发生什么吗？他们会选…

给猫咪照片加密
type: item
date: 2014-07-05T07:01:00+08:00
description: 事实上，我的硬盘上不存在那种不愿意被别人看到的东西，只存有一些猫咪的照片、一些记录着想写的书的想法的文本文件，或者是一些短篇故事的文本，也有一些写了一半的 NaNoWriMo 小说文件。简单的说，我的硬盘就没有加密的必要，因为没有什么可隐藏的。可问题是，我们错误的把“隐私的渴望”跟“要隐藏某东西”两概念混淆在一起。比如说我生活的美国，我们视隐私权利是理所当然的事，但不包括那些传统所认为的“某人的隐藏色情或炸弹”。隐私考虑的是一些平常的事情。我居住在密歇根州。这儿的冬天很冷，我趋向于把温度设置在华氏 75 度左右。对您们来说这个温度可能高了，但在我的家里刚好合适。多亏我的家是属于私有的，我的邻居不可能知道我们保持了这么高的温度，否则一但他们看到冬天如此“浪费”能源的家庭，这些邻居心里会很不平衡的。事实上，本地条规中有一条明确指出任何超过华氏 60 度的就算是生态浪费。我并不想与这种僵老的条例较真，所以我仅仅想保守我们舒适的房子的秘密。我们并不想隐藏任何事情，但也并不是任何事情都要让外人知道。很明显，我举的例子有点弱智，但我希望的是这能引起大家的思考。现代的 Linux 系统很容易的就可以对我们的数据进行加密，并且很可靠，所以为什么不好好利用利用呢？加密原理?我不会涉及太多关于加密原理的细节，但要明白最基本的原理，即使是最简单的实现，这是必须的。要加密和解密一个文件，需要两把“钥匙”。一把是私钥，正如名字所示，属于私有的。我宁愿把私钥看作是真实的钥匙——你想要多少就可造出多少，但这样做是不明智的。同样的，私钥你造的越多，某些不怀好意的人得到其中一把的机率就越大，他们就会闯入你的公寓（额，我的意思是指那些文件）。公钥更像是锁的样子，只有你能（用你的私钥）打开此锁。这公钥任何人都可以得到，你可以将它张贴在网站上、把它放在你的 E-mail 中、甚至纹在你的背上。其它人想创建一个只有你能访问的文件，就可以使用此公钥来加密。这种一对多（LCTT译注：指别人可以加密多个文件，而只有你的一个私钥才能解密）的情况也有个很酷的副作用。如果你用你的私钥来加密一些东西，任何人都可以用你提供的公钥来解密它们。这听起来很傻，但这种情景很有用。虽然加密的文件不能免于被窥视，但是它能保证此文件确实来自于你而没有被恶意改动过。用你的公钥能解密的文件仅仅只能是用你私钥加密过的。用这种方式，用私钥加密的文件即是数字“签名”文件。（LCTT译注：既然是任何人都可以用公钥解密，其实加密没有意义，相反，仅仅用你的私钥做一个签名指纹，别人只需要用你的公钥来验证该签名是否一致即可判断是否来自你。）（LCTT译注：其实本文此处所述的加密解密、签名校验等原理不完全正确，和实际的非对称加密情形有所差异，不过比较容易理解和类比。）通用加密步骤:你有一个文件想要发送给苏茜 ，所以你得使用苏茜的公钥来加密，这样就只有 苏茜才能打开这个文件，但苏茜没有办法知道是谁给她发送的文件。因为任何一个人都可以用她的公钥来加密文件。因此，你得把你的文件用苏茜的公钥和你的私钥都加密。苏茜将不得不解密两次，但她知道它是来自于你的文件。（LCTT译注：实际上应该是用你的私钥要做签名，生成一小段签名指纹，而不是对已经加密的文件再次加密。）苏茜接收到此文件后会用能证明来自于你的公钥来解密第一层。（LCTT译注：校验签名，确认来自你的私钥的签名正确。）然后用她的私钥来解密第二层的密码，这是唯一的能够将原始文件进行解密的钥匙了（因为你是用她的公钥来加密的）。当然，这情景就是用来安全传输文件的加密手段。这也是加密你的文件（或者分区）相当常用及简单的方法。就让我们开始来对文件进行加密吧，因为大多数人都想加密他们的系统。始于简在深入更复杂的各种加密设置操作前，我们先做简单的对文件加密例子。能处理加密的应用程序有很多很多，事实上，对文件和系统进行加密的各种可用软件选择，很容易就会让我们变得焦头烂额。现在，我们就使用一款很基本的（但非常强大）命令行工具来对文件加密。 GPG （英文名：Gnu Privacy Guard）是一款对商业软件 PGP（英文名：Pretty Good Protection）的开源实现软件。它具有加密、签名及管理多个密钥等功能。用例子说明，让我们简单的加密一个文件吧。我们假设你有一个名叫 secret\_manifesto.txt 的文件，它包含有关于生命、宇宙及一切事物的秘密。使用 GPG，你只需要一个密码就可以加密此文件。使用密码远比使用公钥和私钥对简单，因为它只是用你的密码加密。虽然这比较容易让你的文件遭受到破解（比如使用彩虹表或其他黑客工具暴力破解），但像它的名字中所宣称的：这是相当不错的保护。要加密你的文件，可以这样做：# gpg -c secret_manifesto.txt Enter…