Header image  
PGP密钥共享平台  
line decor
  
line decor

 
 
 

 
 
关于PGP

PGP(Pretty Good Privacy)又称为Pretty Good Privacy,它可以用来保护私隐信息。虽然很难统计这个世界上究竟有多少人使用PGP,但Philip Zimmermann作为PGP的设计者,被评为50位Internet上最有影响力的人之一。
以前,PGP是一种邮件加密软件,它被用于保证邮件在传输过程中保证其保密性和身份确凿性(即身份不可冒认)。现在,PGP的应用已经超出邮件范围,在即时通讯、文件下载、论坛等地方都时常看到PGP的踪迹。

1. PGP历史回顾

在2000年前,人们就开始使用共享密码技术,这种技术是,发送者和接收者达成一种协商,通过某种方法将传递的信息做一定的保密性处理,确保在传递过程中不被人发现。这种方法在信息时代中变成了一种新的科学——密码学(Cryptography),2次世界大战中,密码技术被广泛使用,密码几乎是一种必不可少的战争工具,就连在中央台电视剧《暗战》中,也不乏国共两党相互破译密码的精彩情节。然而,但这些所谓的密码,都是对称密码,即发送方和接收方都使用同样的密码,一旦密码被破译,就面临严重的后果。二战中,英国科学家Alan.Turing破解了德军的密码之后,让德国舰队几乎全军覆没。
直到1976年,两位密码学家Whitfield Diffie和Martin Hellman,共同提出了一种公开密码算法——Diffie-Hellman,这种算法的特点是,发送者Alice使用Bob公开密码Kpub加密一段信息,而接受者Bob用他的私人密钥Ksec来解密,我们称Kpub和Ksec为密钥对,Kpub用来加密,Ksec用来解密。
Bob永远不让别人知道他的私钥Ksec,而几乎所有人都知道Bob的公钥Kpub,这意味着,由于这种非对称钥匙的存在,我们可以大大消除密码被破译的忧虑。因为,通过Kpub来计算Ksec几乎是不可能的,也就是,保证了消息传递机密性。
当时,Diffie-Hellman被广泛用于密钥交换,而直道1978年,3位天才科学家Ronald L. Rivest、Adi Shamir和Leonard Adleman设计了另一种公开密钥算法——RSA,RSA被广泛应用于加密/数字签名领域,时至今天,在经历了差不多30年深入的密码分析,RSA依然非常安全。
许多IT及通讯巨头是已经纷纷在产品中支持和实现了公开密钥算法,然而,有一个人却尝试将公开密钥算法带到普通人的生活中去,他就是Philip Zimmermann。在1991年,Philip设计了PGP的第一个版本,而当时正是海湾战争后期,美国担心公开密码技术会削弱美军在信息领域的绝对领先地位,因此对公开密钥算法实施了阻禁,出口公开密钥算法的产品被视为与出口军火同罪,由于Philip已经绕过了法律上的漏洞,通过书籍出口PGP的源代码,因此,很多BBS都提供了PGP源代码的Copy,此举让美国政府非常恼火,于是开始了对Philip长达三年的刑事调查,指控Philip违反了美国密码出口法律。在众多开源团体和用户对Philip Zimmermann的坚决维护下,1996年,美国政府不得不撤销指控。
96年后,Philip作为PGP顾问加盟了NAI,PGP变成了商业版本,后来,NAI的拳头产品PGP Desktop被PGP 公司收购,就是现在PGP商业版本的最主要来源,其间,Philip组建了OpenPGP联盟,以促进PGP标准的规范化,99年,GNU发布了PGP的第一个开源版本,叫做GnuPG,简称GPG。

2.PGP与GPG

对大部分普通用户来说,商业版本PGP Desktop跟开源版本GPG差别很小。PGP Desktop是PGP Corp的商业产品,现在的最新版本是9.5,而GPG(GngPG)是GNU的开源产品,目前的版本是1.4.5。
GPG的分为Linux版本和Windows版本,鉴于越来越多的人使用GPG,GPG有分为Core和FrontEnd,core是指pgp的实现,而FrontEnd是指GPG的界面,有很多选择,比如GPA(丑一点但实用),GPGee(提供一个非常好的右键功能去对文件进行加密和签名),WinPT(我用的最多,用于对Email/文本内容加密签名),Linux用户可以使用KDE Styler的KGpg和GNOME Styler的SeaHorse。
下面,我借助WinPT简单介绍一下GPG的功能,WinPT支持钥匙管理和加密/签名等功能。钥匙是PGP的核心,也是加密和签名的依赖条件,WinPT的KeyManger是提供了一个简单的界面,集成生成/导入/导出钥匙的功能。

通过Key Manager,我们可以做两件事情:

  1. 构建自己的Key,上图中,我本人使用了4个常用的Key(黄色高亮), 每个Key捆绑不同的email(PGP假定我们使用Email来作为用户标识)。
  2. 维护自己信任的证书列表,构造一个属于自己的信任圈。上图中,我有很多朋友使用了PGP,我把他们的证书都导入到KeyManger中。

2.1 PGP密钥对

密钥对(Key Pair)是公共密钥加密的核心,我们通过RSA/DSA的KeyPair算法可以创建强度不同的密钥对,通常是1024bit/2046bit的长度, 以david.turing@gmail.com为例,这个PGP钥匙是分为两部分,最重要的当然是私钥,它使用了DSA/ELG算法,散列算法使用CAST5。
公钥是类似这样的一个文本,我们可以通过文本形式发布自己的公钥,或者获取别人的公钥,保存到一个txt文本去,再通过PGP的Key Import导入到自己的PGP信任库中。


pub 1024D/5C06974F 2005-3-9 david.turing <david.turing@gmail.com>
Primary key fingerprint:? FD92 B5D9 ECA9 EAB0 37CC 95D7 4DA3 DF51 5C06 974F

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.5 (MingW32) - WinPT 1.0.0
Comment: david.turing blog: security.blogjava.net

mQGiBEIurqIRBADErZvkMdYBd6AU079odW8H5eRgcgfjKt+KeYgj7sZs4Rqbo3uf
………………….
CgkQTaPfUVwGl09f2ACeMua+rUpuFFg01MOKEHhUWhQxTZUAoO+n/+CEFfgPvk8F
adaI0QzAj2Vk
=WCeV
-----END PGP PUBLIC KEY BLOCK-----

2.2 加密与签名

在GPG中,支持对当前可捕获焦点的编辑窗口(如记事本)进行数据的加密和签名。严格来说,GPG(对商业版本PGP 也是一样)支持5种处理方式。
1,Symmetric模式(对称加密)
GPG允许你通过设置密码,采用对称加密算法加密明文,这种方法要求对方也要知道你的密码,才能解密。
2,Encrypt模式(采用非对称加密,结合对称加密手段),由于非对称加密算法(如RSA)非常耗时,我们几乎不敢想象如果用RSA来加密一本3M的文档是一件多么可怕的事情,10多年前,PGP就是用了下面这种方法去加密文档。首先生成一个随机的临时钥匙,用快速的IDEA等对称加密算法加密原始文档,生成加密文档A,然后再用接收者的公开钥匙加密刚才的临时钥匙,生成了加密钥匙K。最后,将A+K发送给接收者。
解密是相当的简单,接收者用自己的私钥解密K,得到临时密钥,然后用临时秘要解密A得到原文。

3, 签名模式
在PGP中签名是一件相当愉快的事情,比如我用EditPlus打开一篇文章,我想对它签名,我用快捷键Alt+Shift+S,GPG就会问我是用哪一个私钥进行签名,并且会相继问我该私钥的保护密码。

一切完毕后后,GPG会生成一段PGP签名消息,如下:


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
贴子主题: 这样算不算违法?(加密公司电脑的技术文件)

我公司一位技术人员,负责公司产品模具的设计和出图,在公司工作时间有六年,由于公司比较小,没跟了,……….经过确认,发现是他使用了一个叫PGP的加密程序对所有的技术文件进行了加密和隐藏,用PGP软件加密的文件要解密必须要他本人的密码才可以.打电话给他索要密码,他说要给他帐户上打4万块钱才提供密码请问他这样做违法吗?
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (MingW32) - WinPT 1.0.0
Comment: david.turing blog: security.blogjava.net

iD8DBQFFB7YiTaPfUVwGl08RAiDbAKDwqj7pFDoWh4BHpApbqgGE6SOG/wCgk5on
u/CPj4NNMBCRqJsWr4qqGdo=
=A7/J
-----END PGP SIGNATURE-----

3, 加密签名模式
加密和签名一起使用的时候,可以同时确保机密性和不可否认性,这种模式是安全性最高的一种。

2.3 PGP信任模型

为什么使用PGP,这个问题很好,PGP的美妙之处在于它的信任模型——Web Trust Model,一种非常贴近生活中人与人的信任模型。
在信息世界里面,人与人之间的信任纽带有两种方式被建立,第一种是集中式信任,比如CA结构,大家都信任CA,于是,Peter是不是Peter,是根据CA是否认识这个Peter,我们现在通常所说的的数字证书认证,就是这种集中认证的模式。第二种方式是,我们没有CA,我们只信任自己和朋友。每个人都是在一个朋友圈子中,朋友圈子以外的人,则需要一个中间人作为介绍人,这就是现实的生活。我有一个朋友叫Cyt,且我有另一个朋友叫冰云,冰云想认识Cyt,于是他想通过我来认识Cyt,方法很简单,鉴于我认识他们两者,我为冰云的公钥签名,于是冰云可以直接向Cyt证明他是我的朋友。
PGP的确是这样做的,PGP的信任模型是分布式的,我们每个人都以自己为中心,然后是朋友圈,然后是朋友的朋友。
什么叫做信任?如下图所示,使用GPG查看ytam的公钥,看到有两个人信任ytam的公钥,第一个是ytam自己,第二个是我(david.turing),因为,我已经对ytam的公钥签名,我的确信任ytam(ytam@163.com is trusted by david.turing@gmail.com),读者需要谨记,我这里说的”信任”是指我信任该公钥(标识0x9E12CADA)就是该这个UserID所持有的。

当信任关系从一方扩展至多方的时候,就会形成一种松散的网状信任模型(Web Trust Model)。从自己的角度出发,我,我的朋友,我的朋友的朋友……根据美国著名社会心理学家米尔格伦(Stanley Milgram)的六度理论,我们这种网状图纸需要6个中间人便可以和世界上所有人建立身份信任关系,也就是,我可以通过其他中间人,建立起和布什/拉登的信任关系。

上图中,我和Nemo相互不认识,若然Nemo想在www.pgp.org.cn主页登记他的公开PGP钥匙,他希望向我证明身份,Nemo必须通过邮件向我发送他的PGP钥匙,Nemo发送了一个PGP钥匙给我,我通过GPG的List Signature功能查看是否有我信任的人在其中,显然,我看到了冰云,于是我将Nemo的PGP钥匙插入到我信任的钥匙列表去。
假设一个更负责的情况,Cac和Nemo想认识,中间需要经过三个Introducer,冰云,我和白衣,PGP会帮助我们找到这样一条信任链路,让Nemo信任Cac。

我喜欢GPG的理由

第一个理由是来自于对平等观念的认同(就像人们现在认同P2P一样)。
虽然我不是一个多疑的人,但我有一个不太好的习惯——我并不相信CA。很多人认为CA是权威,很多人都开玩笑说,只要肯给钱,CA就愿意帮你签任何东西,你说你是萨达姆都无所谓。而PGP的Web Trust Model是一种经过长时间沉淀形成的网状信任链,体现了人与人之间的熟悉和信任是需要一个长时间的过程,我就是喜欢这个过程,而不是某些权威强行要求我信任它签发的证书,我们需要的是一种自由平等的观念。
第二个理由是我厌倦商业的安全产品,我喜欢开源的代码,因为后者是我可以控制的。
我还记得当年导师带我进入密码学领域的时候说过,密码有一种特性,叫做受控性,手控性的1个主要体现是,密码算法是可以制造陷门的,这意味着,大家使用同等的加密算法,在未知解密密码的前提下,采用暴力破解手段,而设计者可以比其他人以更快的速度内解密信息,就类似你有没有考虑过你家的门可以被两把不同钥匙打开?
虽然现今的密码分析技术已经让带陷门的密码算法很难再存在,但我仍不得不谨慎对待商业密码软件,因为代码陷门比算法陷门容易得多。
在美国,不少人曾经质疑PGP的商业版本是否制造了陷门,虽然Philip Zimmermann多次澄清他跟美国国安局势不两立的态度,但我仍然会非常谨慎对待商业版本PGP(我指PGP Corporation的PGP Desktop 9.x),我原则上是不信任任何国外的商业加密软件,幸好有GPG。
GPG是与PGP Desktop都是PGP的实现,但GPG是一个公开源代码的软件,更重要的是,它来自GNU。GPG的代码被很多人阅读过,并且不断有人为它贡献源代码,为它作深入完善的代码测试。
在密码学角度看,公开源代码的重要性,远远甚于其他应用,如Hibernate和Spring。对于大多数平民百姓,几乎不可能察觉DES算法的其中一个S盒被改写了,或者被可以使用了弱密匙,甚至使用了弱智的随机算法,但所有这一切,如果在Developer的手中的时候,即使被制造了代码陷门,我们也有能力去替换这些陷门的实现,而只有GPG给予了我们这种权利。

4. PGP身份潮流

我并不知道这是不是一种潮流,但在国外,PGP已经越来越被很多人使用,我只是听过一个这样例子,一个母亲在BBS上说,他13岁的孩子最近在网络上使用PGP加密邮件发送信息给一个女孩,母亲对此很担心,它求助于PGP组织,希望其他人能否提供解密的方法让她看看儿子究竟在做些什么。
很不幸,没有任何方法能够解密,PGP实在太强悍,PGP的算法可以使用1024~4096Bit的RSA钥匙,破译4096对地球上所有国家机器来说都是不可逾越的梦,PGP则给予你这种很Cool的能力,不管你是布什还是拉登。
目前,在中国,有一个开源的PGP组织,网站位于www.pgp.org.cn,开始接受PGP公开钥匙并且捆绑此钥匙于此人的Blog。申请人只需要把自己的公钥使用公钥声称的Email,发送到admin@pgp.org.cn。


 

 

PGP成员公钥列表

cyt的公钥

david.turing的公钥

Nie Jingfeng的公钥

timiil的公钥

unruledboy的公钥

JasonWang的公钥

Wanjo的公钥

Yok的公钥

ytam的公钥

非鱼的公钥

一块铁的公钥

提交PGP公钥
将PGP公钥提交到:

admin@pgp.org.cn