Konstantin Ryabitsev 发布的文章

在本系列文章中,我们将深度探讨如何使用 PGP 以及为工作于自由软件项目的开发者提供实用指南。在前一篇文章中,我们介绍了基本工具和概念。在本文中,我们将展示如何生成和保护你的 PGP 主密钥。

清单

  1. 生成一个 4096 位的 RSA 主密钥 (必要)
  2. 使用 paperkey 备份你的 RSA 主密钥 (必要)
  3. 添加所有相关的身份 (必要)

考虑事项

理解“主”(认证)密钥

在本节和下一节中,我们将讨论“主密钥”和“子密钥”。理解以下内容很重要:

  1. 在“主密钥”和“子密钥”之间没有技术上的区别。
  2. 在创建时,我们赋予每个密钥特定的能力来分配功能限制。
  3. 一个 PGP 密钥有四项能力

    • [S] 密钥可以用于签名
    • [E] 密钥可以用于加密
    • [A] 密钥可以用于身份认证
    • [C] 密钥可以用于认证其他密钥
  4. 一个密钥可能有多种能力

带有 [C] (认证)能力的密钥被认为是“主”密钥,因为它是唯一可以用来表明与其他密钥关系的密钥。只有 [C] 密钥可以被用于:

  • 添加或撤销其他密钥(子密钥)的 S/E/A 能力
  • 添加、更改或撤销密钥关联的身份(uid)
  • 添加或更改本身或其他子密钥的到期时间
  • 为了网络信任目的为其它密钥签名

在自由软件的世界里,[C] 密钥就是你的数字身份。一旦你创建该密钥,你应该格外小心地保护它并且防止它落入坏人的手中。

在你创建主密钥前

在你创建的你的主密钥前,你需要选择你的主要身份和主密码。

主要身份

身份使用邮件中发件人一栏相同格式的字符串:

Alice Engineer <[email protected]>

你可以在任何时候创建新的身份,取消旧的,并且更改你的“主要”身份。由于主要身份在所有 GnuPG 操作中都展示,你应该选择正式的和最有可能用于 PGP 保护通信的名字和邮件地址,比如你的工作地址或者用于在项目 提交 commit 时签名的地址。

密码

密码 passphrase 专用于私钥存储在磁盘上时使用对称加密算法对其进行加密。如果你的 .gnupg 目录的内容被泄露,那么一个好的密码就是小偷能够在线假冒你的最后一道防线,这就是为什么设置一个好的密码很重要的原因。

一个强密码最好使用丰富或混合的词典的 3-4 个词,而不引用自流行来源(歌曲、书籍、口号)。由于你将相当频繁地使用该密码,所以它应当易于输入和记忆。

算法和密钥强度

尽管现在 GnuPG 已经支持椭圆曲线加密一段时间了,但我们仍坚持使用 RSA 密钥,至少较长一段时间会这样。虽然现在就可以开始使用 ED25519 密钥,但你可能会碰到无法正确处理它们的工具和硬件设备。

在后续的指南中我们说 2048 位的密钥对 RSA 公钥加密的生命周期已经足够,你可能也会好奇主密钥为什么是 4096 位。 原因很大程度是由于社会因素而非技术上的:主密钥在密钥链上是最显眼的,如果你的主密钥位数比一些和你交互的开发者的少,他们肯定会鄙视你。

生成主密钥

为了生成你的主密钥,请使用以下命令,并且将 “Alice Engineer” 替换为正确值。

$ gpg --quick-generate-key 'Alice Engineer <[email protected]>' rsa4096 cert

这将弹出一个要求输入密码的对话框。然后,你可能需要移动鼠标或随便按一些键才能生成足够的熵,直到该命令完成。

查看命令输出,它就像这样:

pub rsa4096 2017-12-06 [C] [expires: 2019-12-06]
 111122223333444455556666AAAABBBBCCCCDDDD
uid Alice Engineer <[email protected]>

注意第二行的长字符串 —— 它是你新生成的密钥的完整指纹。密钥 ID(Key ID)可以用以下三种不同形式表达:

  • 指纹 Fingerprint ,一个完整的 40 个字符的密钥标识符
  • 长密钥 ID Long ,指纹的最后 16 个字符(AAAABBBBCCCCDDDD)
  • 短密钥 ID Short ,指纹的最后 8 个字符(CCCCDDDD)

你应该避免使用 8 个字符的短密钥 ID,因为它们不足够唯一。

这里,我建议你打开一个文本编辑器,复制你新密钥的指纹并粘贴。你需要在接下来几步中用到它,所以将它放在旁边会很方便。

备份你的主密钥

出于灾后恢复的目的 —— 同时特别的如果你试图使用 Web of Trust 并且收集来自其他项目开发者的密钥签名 —— 你应该创建你的私钥的硬拷贝备份。万一所有其它的备份机制都失败了,这应当是最后的补救措施。

创建一个你的私钥的可打印的硬拷贝的最好方法是使用为此而写的软件 paperkeypaperkey 在所有 Linux 发行版上可用,在 Mac 上也可以通过 brew 安装 paperkey

运行以下命令,用你密钥的完整指纹替换 [fpr]

$ gpg --export-secret-key [fpr] | paperkey -o /tmp/key-backup.txt

输出将采用易于 OCR 或手动输入的格式,以防如果你需要恢复它的话。打印出该文件,然后拿支笔,并在纸的边缘写下密钥的密码。这是必要的一步,因为密钥输出仍然使用密码加密,并且如果你更改了密钥的密码,你不会记得第一次创建的密钥是什么 —— 我保证。

将打印结果和手写密码放入信封中,并存放在一个安全且保护好的地方,最好远离你家,例如银行保险库。

打印机注意事项 打印机连接到计算机的并行端口的时代已经过去了。现在他们拥有完整的操作系统,硬盘驱动器和云集成。由于我们发送给打印机的关键内容将使用密码进行加密,因此这是一项相当安全的操作,但请使用您最好的偏执判断。

添加相关身份

如果你有多个相关的邮件地址(个人、工作、开源项目等),你应该将其添加到主密钥中。你不需要为任何你不希望用于 PGP 的地址(例如,可能不是你的校友地址)这样做。

该命令是(用你完整的密钥指纹替换 [fpr]):

$ gpg --quick-add-uid [fpr] 'Alice Engineer <[email protected]>'

你可以查看你已经使用的 UID:

$ gpg --list-key [fpr] | grep ^uid

选择主 UID

GnuPG 将会把你最近添加的 UID 作为你的主 UID,如果这与你想的不同,你应该改回来:

$ gpg --quick-set-primary-uid [fpr] 'Alice Engineer <[email protected]>'

下次,我们将介绍如何生成 PGP 子密钥,它是你实际用于日常工作的密钥。

通过 Linux 基金会和 edX 的免费“Introduction to Linux” 课程了解关于 Linux 的更多信息。


via: https://www.linux.com/blog/learn/PGP/2018/2/protecting-code-integrity-pgp-part-2-generating-and-protecting-your-master-pgp-key

作者:KONSTANTIN RYABITSEV 译者:kimii 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

在本系列文章中,我们将深度探讨如何使用 PGP 确保软件完整性。这些文章将为工作于自由软件项目的开发者提供实用指南,并且将包含以下主题:

  1. PGP 基础和最佳实践
  2. 如何用 Git 使用 PGP
  3. 如何保护你的开发者账户

我们使用与“Freedom”含义相同的词项 “Free”,但这个系列中列出的指南也可以被任何其它类型的依赖于分布式团队开发者贡献的软件中。如果你编写进入公共源仓库的代码,你可以从了解和遵循这篇指南中受益。

结构

每节分为两个部分:

  • 适用于你项目需求的清单
  • 形式自由的考虑事项的列表,解释这些决定取决于什么,并伴随着配置指令

清单优先级

每个清单中各项包含着优先级,用来帮助指导你的决定:

  • (必要)该项一定要排在考虑事项列表的前面。如果没有这样做,它们将给提交到开源项目中的代码带来高风险。
  • (推荐)包含该项将提升整体安全性,但会影响你与工作环境的交互方式,并且可能需要学习新的习惯或者放弃旧的习惯。

记住,这些只是指导。如果你感到这些优先级不能反映你项目提交的安全,你应该根据自己的需要调整它们。

PGP 基本概念和工具

清单

  1. 理解 PGP 在自由软件开发中的作用 (必要)
  2. 理解 公钥密码学 Public Key Cryptography 的基础知识 (必要)
  3. 理解 PGP 加密和签名的不同 (必要)
  4. 理解 PGP 密钥身份 key identities (必要)
  5. 理解 PGP 密钥有效性 key validity (必要)
  6. 安装 GnuPG 工具(版本 2.x) (必要)

考虑事项

自由软件社区长期依赖于 PGP 确保它生产的软件产品的真实性和完整性。你可能没有注意到,但无论你是一个 Linux 、Mac 和 Windowas 用户,你都曾依赖 PGP 来确保你电脑环境的完整性:

  • Linux 发行版依赖 PGP 来确保当二进制或者原代码包从被生产出来到被终端用户安装之间没被更改过
  • 自由软件项目通常会伴随发行软件的存档提供分离的 PGP 签名,使得下游的项目可以在把下载的版本集成到自己的分布式下载之前,验证下载版本的完整性。
  • 自由软件项目通常依赖代码本身的 PGP 签名来跟踪起源,并验证项目开发者提交的代码的完整性

这与工作于专有平台的程序员使用的开发者证书或代码签名机制非常相似。实际上,这两种技术背后的核心概念非常相似 —— 尽管它们在实现的技术层面和它们委托信任方式的大多不同。PGP 不依赖于集中式认证机构,而是让每个用户为每个证书赋予自己的信任。

我们的目标是使你的项目通过使用 PGP 来进行代码起源和完整性追踪,遵循最佳实践并遵守基本的安全预防措施。

极其基本的 PGP 操作概括

你不需要知道 PGP 如何工作的具体细节 —— 理解核心概念足以成功地达到我们的目的。PGP 依赖于公钥密码学来将明文转换为密文。这个过程需要两种不同的密钥:

  • 公钥,被所有人知道
  • 私钥,只被拥有者知道
加密

对加密来说,PGP 使用拥有者的公钥创造一条只能通过拥有者私钥解密的消息:

  1. 发送者生成一个随机的加密密钥(“会话密钥”)
  2. 发送者使用该会话密钥(使用对称算法)加密内容
  3. 发送者使用接收者的 PGP 公钥加密会话密钥
  4. 发送者向接收者发送加密后的内容和加密后的会话密钥

要解密:

  1. 接收者使用他们的 PGP 私钥解密会话密钥
  2. 接收者使用会话密钥解密消息的内容
签名

为了创建签名,PGP 私钥或公钥会以相反的方式使用:

  1. 签名者生成内容的校检和哈希
  2. 签名者使用自己的 PGP 私钥来加密该校检和
  3. 签名者伴随内容提供加密后的校检和

要验证签名:

  1. 验证者生成自己的内容校检和哈希
  2. 验证者使用签名者的 PGP 公钥来解密提供的校检和
  3. 如果校检和匹配,就验证了内容的完整性
结合使用

通常,加密消息也被发送者自己的 PGP 密钥签名。无论何时使用加密消息,这应当是默认的,因为没有认证的加密没有很大意义(除非你是一个告密者或秘密代理并且需要可行的可否认性)

理解密钥身份

每个 PGP 密钥必须有一个或多个与之关联的身份。通常,“ 身份 Identity ”指的是以下格式中的人物全名和邮件地址:

Alice Engineer <[email protected]>

有时也会在括号中包含说明,来告诉终端用户关于该特定密钥的更多信息:

Bob Designer (obsolete 1024-bit key) <[email protected]>

由于人们可以和多个职业和个人实体相关联,因此在同一密钥上可以有多个身份:

Alice Engineer <[email protected]>
Alice Engineer <[email protected]>
Alice Engineer <[email protected]>

当使用多个身份时,其中之一将被标记为“ primary identity 主要身份 ”来让检索更简单。

理解密钥有效性

为了能使用其他人的公钥来加密或验证,你需要确保它确实属于正确的人(Alice)而不属于冒牌的(Eve)。在 PGP 中,这被称为“密钥有效性”:

  • 有效性: 完全 full -- 意味着非常确认该密钥属于 Alice
  • 有效性: 临界 marginal -- 意味着大致确认该密钥属于 Alice
  • 有效性: 未知 unknown -- 意味着不确认该密钥是否属于 Alice

Web of Trust (WOT) 与 Trust on First Use (TOFU)

PGP 使用了一种信任委托机制叫“Web of Trust”。它的核心是尝试替代 HTTPS/TLS 世界中对集中式认证机构的需求。PGP 把这个责任交给了每个用户,而不是各种软件开发商来决定谁应该是你的可信认证实体。

不幸的是,很少有人理解 Web of Trust 的是如何工作的,能使用它的人更少。它仍然是 OpenPGP 规范的一个重要方面,但 GnuPG 的近期版本(2.2 及以上)已经实现了一种替代机制叫“Trust on First Use”(TOFU)。

你可以把 TOFU 当作类似 SSH 的信任方式。使用 SSH,当你第一次连接到远程系统,它的密钥指纹会被记录和保存。如果将来密钥改变,SSH 客户端将会提醒你并拒绝连接,迫使你决定是否信任已改变的的密钥。

同样,当你第一次导入某人的 PGP 密钥,它被假定可信。如果在将来的任何时候,GnuPG 碰巧发现另一同样身份的密钥,过去导入的密钥和新密钥都将被标记为无效,并且你需要手动指出保留哪个。

安装 OpenPGP 软件

首先,理解 PGP、OpenPGP、GnuPG 和 gpg 之间的不同很重要:

  • PGP (“Pretty Good Privacy”) 是最初商业软件的名字
  • OpenPGP 是与最初 PGP 工具兼容的 IETF 标准
  • GnuPG (“Gnu Privacy Guard”)是实现了 OpenPGP 标准的自由软件
  • GnuPG 的命令行工具称为 “gpg”

今天,“PGP”这个词几乎被普遍用来表示开放的 OpenPGP 标准,而不是最初的商业软件,因此“PGP”和“OpenPGP”是可以互换的。“GnuPG”和“pgp”这两个词应该仅在提及工具时使用,而不用于它们产生的输出或它们实现的 OpenPGP 功能。举例:

  • PGP(而非 GnuPG 或 GPG)密钥
  • PGP(而非 GnuPG 或 GPG)签名
  • PGP(而非 GnuPG 或 GPG)密钥服务器

理解这一点应该可以保护你免受来自你遇到的其他 PGP 用户“实际上”不可避免的迂腐。

安装 GnuPG

如果你正在使用 Linux,你应该已经安装过了 GnuPG。在 Mac 上,你应该安装 GPG-Suite,或者使用 brew 安装 gnupg2。在 Windows 上,你应该安装 GPG4Win,并且为了可以工作,你可能需要调整指南中的部分命令,除非你设置了类似 Unix 的环境。对其他平台来说,你需要自行查找正确的地址来下载和安装 GnuPG。

GnuPG 1 vs. 2

GnuPG v.1 和 GnuPG v.2 都实现了同样的标准,但它们提供不兼容的库和命令行工具,所以许多发行版都带有了旧的版本 1 和最新的版本 2。你需要确保你总是使用 GnuPG v.2。

首先,运行:

$ gpg --version | head -n1

如果你看到 gpg (GnuPG) 1.4.x,说明你正使用 GnuPG v.1。尝试下 gpg2 命令:

$ gpg2 --version | head -n1

如果你看到 gpg (GnuPG) 2.x.x,说明你可以继续了。这篇指南将假设你使用 GnuPG 2.2 版本(或更新)。如果你正使用 GnuPG 的 2.0 版本,本指南中某些命令可能无效,你应该考虑安装 GnuPG 最新的 2.2 版本

确保你总是使用 GnuPG v.2

如果你 gpggpg2 命令都有,你应该确保总是使用 GnuPG v.2,而不是旧的版本。你可以通过设置别名来确保这一点:

$ alias gpg=gpg2

你可以把它放在你的 .bashrc 中,以确保它在你使用 gpg 命令时总是被加载。

在本系列的第 2 部分中,我们将介绍生成和保护你的 PGP 主密钥的基本步骤。

通过 Linux 基金会和 edX 的免费“Introduction to Linux” 课程了解关于 Linux 的更多信息。


via: https://www.linux.com/blog/learn/2018/2/protecting-code-integrity-pgp-part-1-basic-pgp-concepts-and-tools

作者:Konstantin Ryabitsev 译者:kimii 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

 title=

Konstantin Ryabitsev 为你讲解哪个 Linux 内核版本可以被视作“稳定版”,以及你应该如何选择一个适用你的内核版本。

每次 Linus Torvalds 发布 一个新 Linux 内核的主线版本,几乎都会引起这种困惑,那就是到底哪个内核版本才是最新的“稳定版”?是新的那个 X.Y,还是前面的那个 X.Y-1.Z ?最新的内核版本是不是太“新”了?你是不是应该坚持使用以前的版本?

kernel.org 网页上的信息并不会帮你解开这个困惑。目前,在该页面的最顶部,我们看到是最新稳定版内核是 4.15 — 但是在这个表格的下面,4.14.16 也被列为“ 稳定版 stable ”,而 4.15 被列为“ 主线版本 mainline ”,很困惑,是吧?

不幸的是,这个问题并不好回答。我们在这里使用“稳定”这个词有两个不同的意思:一是,作为最初发布的 Git 树的名字,二是,表示这个内核可以被视作“稳定版”,用在“生产系统”。

由于 Git 的分布式特性,Linux 的开发工作在许多 不同的分叉仓库中 进行。所有的 bug 修复和新特性也是首先由各个子系统维护者收集和准备的,然后提交给 Linus Torvalds,由 Linus Torvalds 包含进 他自己的 Linux 树 中,他的 Git 树被认为是 Git 仓库的 “master”。我们称这个树为 “主线” Linux 树。

候选发布版(RC)

在每个新的内核版本发布之前,它都要经过几轮的“候选发布”,它由开发者进行测试并“打磨”所有的这些很酷的新特性。基于他们这几轮测试的反馈,Linus 决定最终版本是否已经准备就绪。通常有 7 个每周预发布版本,但是,这个数字经常走到 -rc8,并且有时候甚至达到 -rc9 及以上。当 Linus 确信那个新内核已经没有问题了,他就制作最终发行版,我们称这个版本为“稳定版”,表示它不再是一个“候选发布版”。

Bug 修复

就像任何一个由不是十全十美的人所写的复杂软件一样,任何一个 Linux 内核的新版本都包含 bug,并且这些 bug 必须被修复。Linux 内核的 bug 修复规则非常简单:所有修复必须首先进入到 Linus 的树。一旦主线仓库中的 bug 被修复后,它接着会被应用到内核开发社区仍在维护的已发布内核中。在它们被考虑回迁到已发布的稳定版本之前,所有的 bug 修复必须满足 一套重要的标准 — 标准的其中之一是,它们 “必须已经存在于 Linus 的树中”。这是一个 独立的 Git 仓库,维护它的用途是回迁 bug 修复,而它也被称为“稳定”树 —— 因为它用于跟踪以前发布的稳定内核。这个树由 Greg Kroah-Hartman 策划和维护。

最新的稳定内核

因此,无论在什么时候,为了查看最新的稳定内核而访问 kernel.org 网站时,你应该去使用那个在大黄色按钮所说的“最新的稳定内核”。

但是,你可能会惊奇地发现 —— 4.15 和 4.14.16 都是稳定版本,那么到底哪一个更“稳定”呢?有些人不愿意使用 “.0” 的内核发行版,因为他们认为这个版本并不足够“稳定”,直到最新的是 ".1" 的为止。很难证明或者反驳这种观点的对与错,并且这两种观点都有赞成或者反对的理由,因此,具体选择哪一个取决于你的喜好。

一方面,任何一个进入到稳定树的发行版都必须首先被接受进入主线内核版本中,并且随后会被回迁到已发行版本中。这意味着内核的主线版本相比稳定树中的发行版本来说,总包含有最新的 bug 修复,因此,如果你想使用的发行版包含的“已知 bug”最少,那么使用 “.0” 的主线发行版是最佳选择。

另一方面,主线版本增加了所有很酷的新特性 —— 而新特性也给它们带来了数量未知的“新 bug”,而这些“新 bug”在老的稳定版中是不会存在的。而新的、未知的 bug 是否比旧的、已知的但尚未修复的 bug 更加令人担心呢? —— 这取决于你的选择。不过需要说明的一点是,许多 bug 修复只对内核的主线版本进行了彻底的测试。当补丁回迁到旧内核时,它们可能会工作的很好,但是它们很少做与旧内核的集成测试工作。通常都假定,“以前的稳定版本”足够接近当前的确信可用于生产系统的主线版本。而实际上也确实是这样的,当然,这也更加说明了为什么选择“哪个内核版本更稳定”是件非常困难的事情了。

因此,从根本上说,我们并没有定量的或者定性的手段去明确的告诉你哪个内核版本更加稳定 —— 4.15 还是 4.14.16?我们能够做到的只是告诉你,它们具有“不同的稳定性”,(这个答案可能没有帮到你,但是,至少你明白了这些版本的差别是什么?)。

学习更多的 Linux 的知识,可以通过来自 Linux 基金会和 edX 的免费课程 "认识 Linux"


via: https://www.linux.com/blog/learn/2018/2/which-linux-kernel-version-stable

作者:KONSTANTIN RYABITSEV 译者:qhwdw 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

最近的 KRACK (密钥重装攻击,这是一个安全漏洞名称或该漏洞利用攻击行为的名称)漏洞攻击的目标是位于你的设备和 Wi-Fi 访问点之间的链路,这个访问点或许是在你家里、办公室中、或你喜欢的咖啡吧中的任何一台路由器。这些提示能帮你提升你的连接的安全性。

KRACK 漏洞攻击 出现已经一段时间了,并且已经在 相关技术网站 上有很多详细的讨论,因此,我将不在这里重复攻击的技术细节。攻击方式的总结如下:

  • 在 WPA2 无线握手协议中的一个缺陷允许攻击者在你的设备和 wi-fi 访问点之间嗅探或操纵通讯。
  • 这个问题在 Linux 和 Android 设备上尤其严重,由于在 WPA2 标准中的措辞含糊不清,也或许是在实现它时的错误理解,事实上,在底层的操作系统打完补丁以前,该漏洞一直可以强制无线流量以无加密方式通讯。
  • 还好这个漏洞可以在客户端上修补,因此,天并没有塌下来,而且,WPA2 加密标准并没有像 WEP 标准那样被淘汰(不要通过切换到 WEP 加密的方式去“修复”这个问题)。
  • 大多数流行的 Linux 发行版都已经通过升级修复了这个客户端上的漏洞,因此,老老实实地去更新它吧。
  • Android 也很快修复了这个漏洞。如果你的设备在接收 Android 安全补丁,你会很快修复这个漏洞。如果你的设备不再接收这些更新,那么,这个特别的漏洞将是你停止使用你的旧设备的一个理由。

即使如此,从我的观点来看, Wi-Fi 是不可信任的基础设施链中的另一个环节,并且,我们应该完全避免将其视为可信任的通信通道。

Wi-Fi 是不受信任的基础设备

如果从你的笔记本电脑或移动设备中读到这篇文章,那么,你的通信链路看起来应该是这样:

KRACK 攻击目标是在你的设备和 Wi-Fi 访问点之间的链接,访问点或许是在你家里、办公室中、或你喜欢的咖啡吧中的任何一台路由器。

实际上,这个图示应该看起来像这样:

Wi-Fi 仅仅是在我们所不应该信任的信道上的长长的通信链的第一个链路。让我来猜猜,你使用的 Wi-Fi 路由器或许从开始使用的第一天气就没有得到过一个安全更新,并且,更糟糕的是,它或许使用了一个从未被更改过的、缺省的、易猜出的管理凭据(用户名和密码)。除非你自己安装并配置你的路由器,并且你能记得你上次更新的它的固件的时间,否则,你应该假设现在它已经被一些人控制并不能信任的。

在 Wi-Fi 路由器之后,我们的通讯进入一般意义上的常见不信任区域 —— 这要根据你的猜疑水平。这里有上游的 ISP 和接入提供商,其中的很多已经被指认监视、更改、分析和销售我们的流量数据,试图从我们的浏览习惯中挣更多的钱。通常他们的安全补丁计划辜负了我们的期望,最终让我们的流量暴露在一些恶意者眼中。

一般来说,在互联网上,我们还必须担心强大的国家级的参与者能够操纵核心网络协议,以执行大规模的网络监视和状态级的流量过滤。

HTTPS 协议

值的庆幸的是,我们有一个基于不信任的介质进行安全通讯的解决方案,并且,我们可以每天都能使用它 —— 这就是 HTTPS 协议,它加密你的点对点的互联网通讯,并且确保我们可以信任站点与我们之间的通讯。

Linux 基金会的一些措施,比如像 Let’s Encrypt 使世界各地的网站所有者都可以很容易地提供端到端的加密,这有助于确保我们的个人设备与我们试图访问的网站之间的任何有安全隐患的设备不再是个问题。

是的... 基本没关系。

DNS —— 剩下的一个问题

虽然,我们可以尽量使用 HTTPS 去创建一个可信的通信信道,但是,这里仍然有一个攻击者可以访问我们的路由器或修改我们的 Wi-Fi 流量的机会 —— 在使用 KRACK 的这个案例中 —— 可以欺骗我们的通讯进入一个错误的网站。他们可以利用我们仍然非常依赖 DNS 的这一事实 —— 这是一个未加密的、易受欺骗的 诞生自上世纪 80 年代的协议

DNS 是一个将像 “linux.com” 这样人类友好的域名,转换成计算机可以用于和其它计算机通讯的 IP 地址的一个系统。要转换一个域名到一个 IP 地址,计算机将会查询解析器软件 —— 它通常运行在 Wi-Fi 路由器或一个系统上。解析器软件将查询一个分布式的“根”域名服务器网络,去找到在互联网上哪个系统有 “linux.com” 域名所对应的 IP 地址的“权威”信息。

麻烦就在于,所有发生的这些通讯都是未经认证的、易于欺骗的、明文协议、并且响应可以很容易地被攻击者修改,去返回一个不正确的数据。如果有人去欺骗一个 DNS 查询并且返回错误的 IP 地址,他们可以操纵我们的系统最终发送 HTTP 请求到那里。

幸运的是,HTTPS 有一些内置的保护措施去确保它不会很容易地被其它人诱导至其它假冒站点。恶意服务器上的 TLS 凭据必须与你请求的 DNS 名字匹配 —— 并且它必须由一个你的浏览器认可的信誉良好的 认证机构(CA) 所签发。如果不是这种情况,你的浏览器将在你试图去与他们告诉你的地址进行通讯时出现一个很大的警告。如果你看到这样的警告,在选择不理会警告之前,请你格外小心,因为,它有可能会把你的秘密泄露给那些可能会对付你的人。

如果攻击者完全控制了路由器,他们可以在一开始时,通过拦截来自服务器指示你建立一个安全连接的响应,以阻止你使用 HTTPS 连接(这被称为 “SSL 脱衣攻击”)。 为了帮助你防护这种类型的攻击,网站可以增加一个 特殊响应头(HSTS) 去告诉你的浏览器以后与它通讯时总是使用 HTTPS 协议,但是,这仅仅是在你首次访问之后的事。对于一些非常流行的站点,浏览器现在包含一个 硬编码的域名列表,即使是首次连接,它也将总是使用 HTTPS 协议访问。

现在已经有了 DNS 欺骗的解决方案,它被称为 DNSSEC,由于有重大的障碍 —— 真实和可感知的(LCTT 译注,指的是要求实名认证),它看起来接受程度很慢。在 DNSSEC 被普遍使用之前,我们必须假设,我们接收到的 DNS 信息是不能完全信任的。

使用 VPN 去解决“最后一公里”的安全问题

因此,如果你不能信任固件太旧的 Wi-Fi 和/或无线路由器,我们能做些什么来确保发生在你的设备与常说的互联网之间的“最后一公里”通讯的完整性呢?

一个可接受的解决方案是去使用信誉好的 VPN 供应商的服务,它将在你的系统和他们的基础设施之间建立一条安全的通讯链路。这里有一个期望,就是它比你的路由器提供者和你的当前互联网供应商更注重安全,因为,他们处于一个更好的位置去确保你的流量不会受到恶意的攻击或欺骗。在你的工作站和移动设备之间使用 VPN,可以确保免受像 KRACK 这样的漏洞攻击,不安全的路由器不会影响你与外界通讯的完整性。

这有一个很重要的警告是,当你选择一个 VPN 供应商时,你必须确信他们的信用;否则,你将被一拨恶意的人出卖给其它人。远离任何人提供的所谓“免费 VPN”,因为,它们可以通过监视你和向市场营销公司销售你的流量来赚钱。 这个网站 是一个很好的资源,你可以去比较他们提供的各种 VPN,去看他们是怎么互相竞争的。

注意,你所有的设备都应该在它上面安装 VPN,那些你每天使用的网站,你的私人信息,尤其是任何与你的钱和你的身份(政府、银行网站、社交网络、等等)有关的东西都必须得到保护。VPN 并不是对付所有网络级漏洞的万能药,但是,当你在机场使用无法保证的 Wi-Fi 时,或者下次发现类似 KRACK 的漏洞时,它肯定会保护你。


via: https://www.linux.com/blog/2017/10/tips-secure-your-network-wake-krack

作者:KONSTANTIN RYABITSEV 译者:qhwdw 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出