<emphasis>Peter van der Linden 的 Linux 指南</emphasis>: 加密课程,第 1 部分
编者注:以下摘自
Peter van der Linden 的 Linux 指南
第 11 章,“保护您的数据隐私”,,
由 Prentice Hall 于 2005 年 8 月出版,ISBN 0-13-187284-2。
Linux 与其他不太出色的操作系统区分开来的品质之一
是其对您的隐私和安全的卓越支持。这
不仅仅意味着避免传播病毒的错误应用程序,例如
Microsoft 的 Outlook 和 Internet Explorer。精明的人和
组织非常正确地希望保护其数据文件和
电子邮件免受窥探。一种方法是将重要的
文件以编码形式保存,这种做法称为加密。
不要认为加密只适用于秘密特工或计算机高手
,他们留着长及腰部的马尾辫,穿着来自 thinkgeek.com 的诙谐 T 恤。
将普通文件放在 PC 上就像将信件正面朝上
放在桌子上。任何路过的人都可以清楚地看到它。加密
对于希望在将数据放在 PC 上时保持数据私密的普通人来说是实用的
。它有效地将那封信放入
坚固的密封信封中。你可以做到,而且这是一项重要的能力
要拥有。
在当今时代,保持您的数据和电子邮件真正私密是一项日益重要的
技能。通过加密保护隐私显然
非常重要,以至于法国等不同国家的政府,
英国和伊朗希望剥夺其公民的这项权利。在美国,
宪法第一修正案禁止政府
剥夺公民的言论自由。或者至少,
宪法使这种剥夺最终更有可能
在法庭上被推翻。言论自由已被解释
法院将其解释为包括舞蹈自由、歌曲自由、电影自由,并且包括
自由地写下你喜欢的任何随机数字。
本 Linux 加密教程分为三个部分。第 1 部分,
此处介绍了公钥加密的工作原理以及从何处获取
GnuPG 加密软件。第 2 部分将逐步介绍一些示例
文件加密/解密,第 3 部分解释如何发送和读取
加密电子邮件。
GNU 隐私卫士简介
术语 GnuPG 和 GPG 指的是同一件事,即 GNU Privacy
Guard 程序。可执行文件名是 gpg,名称 GnuPG
在一些文档中使用。这个名字是对
名为 Pretty Good Privacy 或 PGP 的类似程序的恶搞。PGP 曾经是
一个开源程序,但后来的版本变成了商业版,因此
GNU 社区重新实现了一个免费版本,并相应地命名了它。
软件的功能
GNU Privacy Guard 是一款在命令下对
文件或电子邮件进行加密和解密的软件。加密(加密)的目的是
文件是为了对其内容保密,不让那些没有
密钥来解密它的人看到。
如果未经授权的人以某种方式获得了加密文件,
他们将无法理解其内容。内容
加密文件的内容发生了根本性的改变,而不仅仅是混合
起来。除非您拥有密钥,否则很难检索原始内容
从加密版本中恢复。如果
信息足够重要,政府或富有的组织
可能能够通过穷举搜索来做到这一点,使用许多强大的
计算机。普通消费者或公司没有资源
来破解 GnuPG 加密。
术语
出于与数学定义相关的原因,我们指的是加密
算法、加密和解密,而非数学家会
说代码、编码和解码。对于普通用户来说,这三
对术语彼此对应。“代码”的含义在
源代码和用于加密文件的代码最初
在哲学上是相似的,但没有有用的重叠,因此请将它们分开
在你的脑海中。
公钥加密基础
几百年来,传统代码一直依赖于使用单个
密钥。该密钥是一个秘密数字或短语,用于
将纯文本转换为编码消息。消息的接收者
使用相同的密钥来反转该过程并恢复
纯文本。图 1 描述了经典密码学方法
,一个密钥用于编码和解码。
Peter van der Linden 的 Linux 指南:加密课程,第 1 部分" src="/files/linuxjournal.com/linuxjournal/articles/085/8574/8574f1.inline.png">图 1。传统密码学:一个密钥同时加密
和解密
人们添加了非常巧妙的改进,例如更改字母
消息中每个字母的替换;德国的 Enigma 代码
机器就是这样做的。但是基本方法是使用一个密钥,即用于
编码器和解码器。管理共享密钥非常昂贵
,并且是相当大的不安全因素的来源。它需要你发送一个
秘密消息(密钥),然后才能发送秘密消息。
GNU Privacy Guard 使用一种不同的加密技术,称为
公钥加密 (PKE),这是相对较近才发明的。每个
公钥加密的用户都有两个密钥。这两个密钥是
长数字——数千位数字长——在数学上相关
并形成一对协同工作的密钥对。任何人都不应该拥有
相同的数字。你的两个数字之间存在数学关系
,但了解一个数字并不能提供任何实际的
方法来了解第二个数字。
一个密钥用于加密发送给特定用户的消息,并且
(令人惊讶的是)这个密钥是公开的。因此它被称为
公钥。当任何人想给 Biff 发送秘密消息时,例如,他
或她使用 Biff 的公钥对其进行加密,并且任何人都无法
理解该加密消息。
匹配密钥对中的另一个密钥由用户用来解密
某人使用他的公钥加密的消息。这个
解密密钥必须保密。因此,它被称为私钥。
任何想给你发送加密消息的人都会在你的网页上查找你的公钥
,或者从你发送给他们的软盘中,或者从
PKE 服务器。加密程序使用
你的公钥来生成加密消息。这个加密消息
是一串看起来随机的文本。仅仅是
任何人都不可能解密它,即使他们知道你的公钥。
解密用你的公钥加密的消息的唯一实用方法
是使用你的私钥。这两个数字是作为
匹配对生成的,以确保它们具有这种“一个编码,另一个
解码”的特性。GnuPG 程序执行一些密集的处理来
将加密消息加上你的私钥转换回
原始文本。你必须妥善保管你的私钥,因为任何
拥有你的私钥的人都能够解密任何秘密文件
仅供你使用。
你可能会认为如果你的公钥和私钥
分别称为锁定密钥和解锁密钥会更清楚。如果
这有帮助,请务必这样考虑它们。有一个
为什么不使用这些术语的原因,我将在最后一个
系列文章中解释。
总而言之,公钥将纯文本转换为看起来随机的
编码文本。公钥不必保密,并且
通常不是。只有相应的私钥才能解锁
含义——你的公钥或任何其他人的公钥或私钥都不能
密钥都无法恢复原始文本。你的私钥必须
保密。图 2 描绘了公钥密码学。
Peter van der Linden 的 Linux 指南:加密课程,第 1 部分" src="/files/linuxjournal.com/linuxjournal/articles/085/8574/8574f2.inline.png">图 2。公钥用于加密文件。
相应的私钥用于解密
文件。
每当你在浏览器中将你的
信用卡详细信息发送到在线商店时,你都会使用公钥加密。浏览器
在通过互联网发送你的详细信息之前,使用服务器的公钥对其进行加密。
这是安全 HTTP 协议的一部分,
称为 HTTPS。相应的私钥永远不会离开
服务器,因此窃听者无法解密你的信用卡数据。
PKE 所依赖的数学性质具有美丽的
对称性,并且 PKE 在 1970 年代出现时震撼了计算机科学和
加密世界。政府科学家在
英国 GCHQ 窃听和电话窃听中心后来声称
他们在几年前发明了这项技术,但一直
保密!事实上,他们确实揭示了一些理论,但很
清楚 GCHQ 的间谍没有掌握其
实际意义。
在 PKE 之前,秘密通信依赖于发送者和接收者
拥有相同的密钥并对其保密。这是一个真正的弱点。PKE 的
重大进步在于,你不再需要在发送秘密消息之前
(密钥)向某人发送秘密消息。使用 PKE,
接收者公开发布一些允许任何人向他发送
秘密消息的内容。
安装 GnuPG
在基于 Debian 的发行版上,此命令安装 GnuPG
apt-get install gnupg
在基于 RPM 的发行版(例如 Red Hat 或 Fedora)上,搜索
“gnupg” 此处。或者,你可以从以下位置下载源代码
此处并自行构建。
通过使用 --help 选项运行程序来检查你是否已正确安装 GnuPG。
在 shell 中,键入此命令
gpg --help
你应该看到大约 120 行不太有用的帮助
信息闪过,最后一行显示
Please report bugs to <gnupg-bugs@gnu.org>.
如果程序无法启动或未生成该帮助信息,
则你的 GnuPG 安装存在问题,需要修复
才能继续前进。
创建你自己的 GPG 密钥
你需要自己的密钥对才能进行加密和解密。有
许多商业组织会向你出售密钥对
并提供不同的保证,保证你的密钥确实属于你,而不是
属于某个冒名顶替者。他们将密钥对加上保证称为
证书,它以计算机文件的形式存在。
大多数为个人使用进行编码和解码的人不需要那种级别的
外部世界的信任度。他们使用
GnuPG 实用程序创建自己的密钥。有一种方法可以提高对个人
创建的密钥的信心,让你的朋友以电子方式为它们担保。
GnuPG 仍在发展
GnuPG 程序正在积极开发中,并且团队
每年发布几个新版本。本文是使用 GnuPG 版本
1.4.1 开发的。你可能会发现你正在使用更高版本的 GnuPG,
并且输出与此处显示的提示或输出不完全匹配
。这没关系。进行小的调整以在文本之间进行映射
和 GnuPG 程序。基本原理不会改变。
Linux 加密软件不如它应该的那样完善。这
是志愿者制作的软件的常见限制。然而,
大多数障碍在于一次性设置部分,而不是日常使用。
我们将在此处逐步完成一次性设置。
使用 GnuPG 生成你的密钥对
在本节中,你将创建一个密钥对,一个用于发布,另一个
用于高度保密。这是一次性设置,用于获取你的
密钥对,以便与 GnuPG 一起使用。
通过运行 GnuPG 程序并使用命令行创建密钥对
选项来生成密钥
gpg --gen-key
GnuPG 以交互方式运行并询问几个问题。接受
GnuPG 提出的默认建议即可。请注意,部分输出,
“我们需要生成大量随机字节”,出现了两次。这是
因为代码的该部分执行了两次,每个密钥一次。
整个序列如下所示
$ gpg --gen-key gpg (GnuPG) 1.4.1; Copyright (C) 2005 Free Software Foundation, Inc. This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the file COPYING for details. Please select what kind of key you want: (1) DSA and Elgamal (default) (2) DSA (sign only) (5) RSA (sign only) Your selection? 1 DSA keypair will have 1024 bits. ELG-E keys may be between 1024 and 4096 bits long. What keysize do you want? (2048) Requested keysize is 2048 bits Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Key is valid for? (0) 0 Key expires at Thu 07 Apr 2005 05:11:17 PM PDT Is this correct? (y/N) Y You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) " Real name: Peter van der Linden (working on Linux) Email address: peter@gmail.com Comment: working on Linux You selected this USER-ID: "Peter van der Linden (working on Linux) " Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O You need a Passphrase to protect your secret key. Enter passphrase: My secret phrase entered here Repeat passphrase: My secret phrase entered here We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. .++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++.+++ ++++++++++++.+++++++++++++++..+++++..++++++++++.+++++++++++++++>.+++++.+++++>++ +++..............<+++++>.+++++...<+++++...................>+++++..<.+++++>+++++ ....................................................................+++++ We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. +++++++++++++++...+++++.+++++.+++++..+++++.++++++++++++++++++++++++++++++.+++++ ..+++++.++++++++++..+++++.+++++.++++++++++.+++++.++++++++++++++++++++++++++++++ +++++>.++++++++++>.+++++>+++++.................<.+++++>...+++++.<+++++......... ..>.+++++...............................................................<+++++. ...........................>.+++++......................................+++++^^^ gpg: /root/.gnupg/trustdb.gpg: trustdb created gpg: key 6C7C81B2 marked as ultimately trusted public and secret key created and signed. gpg: checking the trustdb gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u pub 1024D/6C7C81B2 2005-04-03 [expires: never] Key fingerprint = C2A9 6818 3158 C13B 457A 1409 11ED 2943 6C7C 81B2 uid Peter van der Linden (working on Linux) / sub 2048g/68F3472B 2005-04-03 [expires: never]/
你可能会猜测到,GnuPG 是由程序员创建的,他们
更擅长密码学而不是人机界面设计。该程序
仅需几秒钟即可运行,你将从其中获得三件事。
前两件事是一对大数字,即公钥和私钥
密钥。它们是为你创建的,并以二进制形式存储在
目录 ~/.gnupg 中的文件中。这些文件被赋予了权限,以防止其他
用户读取或写入它们。立即将该目录的副本刻录到 CD
,并将 CD 安全地锁起来。这允许你恢复你的密钥
,而无需考虑未来的磁盘或系统故障。你获得的第三件事是
“指纹”,也称为密钥 ID,它是 40 字节长的校验和
你新创建的公钥。你可以使用指纹,甚至可以使用
它的最后八位数字——此处为 6C7C 81B2——在与 GnuPG 对话时作为
你的公钥的快捷方式,它将检索并使用关联的
密钥为你服务。
你提供的电子邮件地址和密码与
密钥和指纹相关联,这些也用于识别和
验证你的身份。他们称之为密码短语而不是密码,以强调它
需要足够长且安全。使用弱密码短语(例如“dog”)使用 GnuPG 是毫无意义的
。如果你记不住密码短语,请从任何书中选择任何
短句,并用黄色荧光笔勾勒出来,以便
你总是可以再次找到它。
当你需要访问密钥以
解密某些内容时,你必须提供密码短语。如果你忘记了密码短语,实际上
,你加密的文件将永远无法解密。
一次性设置到此完成。在第 2 部分中,我将介绍如何使用
GnuPG 程序来加密和解密文件。
Peter van der Linden 目前在硅谷担任软件
顾问,专门从事 Linux 和开源软件。毕业于
耶鲁大学的 van der Linden 也是The Official Handbook of
Practical Jokes, Expert C Programming
和 Just Java 的作者。