/ gpg

GPG 的工作原理

原文链接 http://www.pgpi.org/doc/pgpintro

The Basics of Cryptography

尤利烏斯·凱撒 给他的将军们发送信息的时候,他并不信任他的信使。然后他就把信里的所有字母都向后移3位, A 替换成了字母 D ,所有的 B 替换成 E 等。只有知道 “向后移动三个位置” 的人可以解密出他的信息。这就是著名的 凯撒加密算法

Encryption and decryption

无需经过特别处理就可以被读取和理解的数据称为纯文本数据或者明文。隐藏纯文本数据真实内容的方法称为 Encryption( 加密 ),加密后产生的不可读的乱码称为密文。通过加密过程你可以对你想要接受数据之外的人实现数据的保护,就算这个人得到了密文也无法知道真实的内容。将密文转换成明文或者纯文本数据的过程称为解密。图 1-1 描绘的就是这个加密解密的过程。
加密和解密
图 1-1 加密和解密

What is cryptography?

Cryptography( 密码加密学 )是一门用数学加密和解密数据的科学。密码学允许你储存一些敏感信息或者在不安全的网络( 比如因特网 )传输,信息出了默认的接受者外无法被其他任何人读取。

Cryptography( 密码加密学 )是数据安全的科学,Cryptanalysis( 密码破译学 )则是分析和破解安全交流的科学。传统的密码破译学是包括推理分析、应用数学工具、模式查找、耐心、决心和运气的有趣的组合。

Cryptology( 密码学 )包括Cryptography( 密码加密学 )和Cryptanalysis( 密码破译学 )

Strong cryptography
"There are two kinds of cryptography in this world: cryptography that will stop your kid sister from reading your files, and cryptography that will stop major governments from reading your files. This book is about the latter." (翻译大致为:这个世界上有两种密码加密:其一为防止你的妹妹读你的文件,其二是防止大部分政府读取你的文件。这本书是关于后者。)
           --Bruce Schneier, Applied Cryptography: Protocols, Algorithms, and Source Code in C.

PGP也是关于后者的一类密码加密。密码加密也可以是强加密或者弱加密,具体会在后面解释。加密的强度取决于将它转换成明文需要的时间和资源。强加密的结果是密文在没有适合的解密工具时非常难破译。到底有多困多难呢?这么说吧,把现在整个地球上的计算机性能和可用时间,就算是10亿台电脑每秒检查10亿次,那也是不可能在宇宙毁灭前破译出明文。

有人会想,那么,这种强加密在面对一个非常明确的密码破译时同样支持的很好。谁会真的这么说呢?没有人证明一个在今天确定的最强加密方法同样可以明天的计算性能下保持完好。不管怎样,PGP 实现的强加密方法是现在可选的最好的加密方案。警觉性和保护主义会更好的你,不管怎样要好于事后索赔。

How does cryptography work?

一个加密算法或者密码,是一种在加密和解密过程中的数学方法。一个加密算法是结合一个密钥,一个单词、数字、或者词组,去加密明文。使用不同的密钥加密相同的明文会产生不同的密文。 而加密的安全性完全取决于两点:加密算法的强度和对于密钥的安全性保护。

由一个加密算法加上所有可能的密钥和所有协议组成一个加密系统。PGP 就是一个加密系统。

Conventional cryptography(常规加密)

在常规加密算法中,也叫密钥或者对称加密,一个密钥同时用来加密或者解密。DES(数据加密标准)就是一个被美国联邦政府官方使用的常规加密系统的例子。图1-2 是常规加密的图示
常规加密系统
图 1-2 是常规系统加密

Caesar's Cipher 凯撒密码

一个非常简单的传统加密算法的例子就是置换密码算法。置换密码算法就是将信息中的一部分替换成另外一其他的信息。通常会被应用在按字母表替换字母,典型的两个例子就是:午夜船长的密码解谜戒指,是一个你从小就拥有的戒指,和凯撒密码。在这两个两个例子中,加密算法是按照字母表偏移,密钥就是偏移的数字。例如,如果我们用凯撒密码的密钥(偏移量是3)加密 “SECRET” 这个单词,我们按照字母表向后偏移3位,然后我们就会得到一个从第三个字母(D)开始的新的字母表。
开始是***ABCDEFGHIJKLMNOPQRSTUVWXYZ***,然后我们得到***DEFGHIJKLMNOPQRSTUVWXYZABC***,D=A,E=B,F=C,其他同理。
使用这个规范,明文“SECRET”将被加密成“VHFUHW”。想要允许谁读懂这串密文,你只要告诉他密钥是3即可。

很显然按照今天的标准来看这是一个非常弱的加密算法,但是它对凯撒来说有用,而且它描绘了传统的加密的工作原理。

Key management and conventional encryption

传统的加密算法有一些好处,它非常快,它对那些不会传输到任何地方的加密数据特别有用。然而,传统加密独自做为一个指定的安全数据传播方式可能时代价可能是比较昂贵的,简单的体现在安全密钥的分发困难上。想象下你最喜欢的谍战片里的画面:一个人带着一个锁住的手提箱铐在他的或者她的手腕上。手提箱里是什么东西呢呢?它可能不是一个导弹发射密码、生物病毒方程式、或者一份入侵计划本身。它是用来解密加密数据的密钥。

如果一个发送者和接受者使用传统加密进行加密交流,他们必须在密钥上达成一致而且他们自己必须安全的保存它。如果他们在不同的物理位置,他们必须信任一个中间人、一个 Bat Phone(加密电话)、或者其他一些安全通讯媒介防止密钥在传输过程中泄漏出去。任何在传输过程中无意中听到或者窃听到这个密钥的人都可以读取、修改、和伪造所有的已经加密的信息,或者用那个密钥认证信息,从而证明信息时真的。从DES到午夜船长的加密指环,一直存在的问题就是:如何将密钥传递给接受者而不会被任何人拦截?

Public key cryptography 公钥加密

这个密钥分发的问题被公钥加密解决了,这个概念是由Whitfield Diffie 和 Martin Hellman 在1975年提出的。(现在有证据证明英国秘密服务在Diffie 和 Hellman 之前的几年就发明了它,但是一直做为军事秘密保存,而且并没有用它来做任何事情。 [J H Ellis: The Possibility of Secure Non-Secret Digital Encryption, CESG Report, January 1970])
公钥加密是一种使用一对密钥加密:一个用来加密的公钥和一个用来解密的相对应的私钥或者密钥的非对称加密系统。你向这个世界发布你的公钥,同时秘密保存你的私钥。任何人都可以用你公钥的拷贝加密信息,但是只有你可以读取信息。就算那个人你从来都没有见过。

公钥加密时不可能通过计算公钥得出私钥的,任何拥有公钥的人可以加密信息但是不能解密信息。只有拥有相对应的私钥的那个人才可以解密这个信息。
公钥加密
图 1-3 公钥加密

公钥加密的主要的益处是它允许没有任何安全管理经验的人进行安全信息交换。需要发送者和接受者通过安全通道分享密钥的历史一去不复返,所有的交流只需要公钥,私钥再也不需要传输或者分享。这里有一些公钥加密系统的例子:Elgamal(以它的发明者Taher Elgamal 命名),RAS(以它的发明者 Ron Rivest、Adi Shamir和Leonard Adleman命名), Diffie-Hellman(命名,同样是发明者),DSA,Digital Signature Algorithm(由 David Kravitz 发明)。

由于传统加密曾经是传达秘密信息的唯一可用手段,安全通道和密钥分发的代价使得它只被那些负担得起的团体使用,如政府和大银行(或者拥有密钥解密指环的孩子)。公钥加密技术是一项给普通民众带来强加密的技术革命。还记得之前在手腕处拷着公文包的快递员么?公钥加密把他从这项工作中解放出来了(也许是他的解脱)。

How PGP works PGP 工作原理

PGP 组合了包括传统加密和公钥加密的一些最好的功能。PGP 是一个混合的加密系统。当用户使用PGP加密明文时,PGP首先压缩这个明文。数据压缩节约了数据传输的时间还有磁盘的空间,还有最重要的,强化了加密方法的安全性。大多数的密码分析技术利用从明文中发现的规律去破解密文。数据压缩会削弱明文中的这些规律,因此大大的增强了抵抗密码分析的能力。(如果压缩文件太短或者压缩的效果不好,将会造成这些文件将不会被压缩。)
接下来 PGP 会产生一个会话密钥,这个密钥是一个一次性的密钥。这个密钥时一个从你的鼠标运动和键盘输入产生的一个随机数。这个会话密钥用在一个非常安全,快速的传统加密算法中去加密明文,产生的结果就是密文。一旦数据被加密,这个会话密钥就会被加密到接受者的公钥里。这个公钥加密了的会话密钥会随着密文一起传送给接收者。
图 1-4
图 1-4 PGP 加密的工作原理
解密就是一个逆向的过程。这个接受者PGP副本使用他的或者她的私钥恢复这个临时的会话密钥,然后PGP使用这个密钥去解密这个传统加密方式加密的密文。
图 1-5
图 1-5 PGP 解密原理
这个两种加密方法的混合体混合了公钥加密的便利和传统加密的速度。传统加密方法大概有公钥加密的1,000倍快。公钥加密反过来提供一个密钥分发和数据传输问题的解决方法。放在一起使用,在没有牺牲任何安全性的同时提升了性能和密钥分发。

Keys 密钥

密钥是加密算法用来生成一个特殊加密文本的值。密钥基本上都是非常,非常大的数字。一般用位(bit)来衡量密钥的大小;一个表示1024位的数字是异常巨大的数字。在公钥加密方法中,更大的密钥带来更安全的密文。
但是不管怎么样,公钥加密的密钥大小和传统加密方法的密码大小是完全不相关的。一个传统加密方法中的80位的密码相当于一个1024位的公钥的加密强度。一个传统加密方法的128位的密码相当于3000位的公钥。更大的密钥更安全,但是每个加密方法中使用的算法都非常不同的,这样的比较就像是拿苹果和橘子去比较。
因为公钥和私钥是存在数学上联系的,所以很难通过只给公钥来产生私钥;但是不管怎样总是可以通过足够的时间和足够的计算机性能来产生私钥的。这就将选择密钥的正确的大小;足够大保证安全性,又足够小保证快速高效变的尤为重要。另外,你还需要考虑到是谁可能想要读区这些文件,他们的决心到底有多大,他们有多少时间,还有他们拥有什么样的资源。
相对大的密钥将在一个相当长的周期内保证加密的安全性。如果你想要你的加密在很多年后依然有效,你就需要使用一个非常大的密钥。当然,谁知道用“明天”的更快、更高效的计算机找出你的密钥需要多久?曾经有段时间56-bit的对称加密被认为是非常安全的。
密钥被储存在加密的表单内。PGP 将密钥存储在你的盘的两个文件内;一个存储公钥,一个存储私钥。这文件被称为密钥链。当你使用PGP时,你特别的将你的接收者的公钥添加到你的密钥链内。你的私钥存储在你的私钥链内,如果你丢失了你的私钥链,你将无法在解密任何通过这个密钥链内的密钥加密的信息。

Digital signatures 数字签名