白话PGP/GPG

新手涉及到的教学或入门贴,推荐新手必看,版主维护
头像
jarlyyn
帖子: 4671
注册时间: 2006-04-12 18:54
联系:

白话PGP/GPG

#1

帖子 jarlyyn » 2008-07-22 16:30

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


一.PGP是啥?GPG是啥?
PGP么,简单的说,是一款以利用公钥和密钥技术的加密和身份验证软件。
而GPG呢,就是开源的PGP。

二.公钥?密钥?听起来很麻烦啊!
公钥和密钥,是现在密码学的一个发明。以我们生活中的例子来说,公钥相当于你的银行帐号,私钥相当于你的银行存折和银行卡。
公钥,也就是银行帐号,是公开的,让大家都知道,这样可以让别人向你汇钱。
而私钥这个存折呢,是要小心的藏好的,绝对不能满世界乱丢,因为凭它就可以去银行取你的钱呢。

三.那么说PGP和GPG是很NB的加密软件了?
虽然PGP和GPG有强大的安全性,足够胜任加密软件的功能。但是,严格意义上来说,PGP和GPG的加密功能应该叫做保密功能比较贴切。只把PGP和GPG当加密软件用,有点大才小用和不方便了,如果只是要加密软件的话,我个人还是比较推荐TrueCrypt这款软件,毕竟TureCrypt在保持了强大的安全性的同时,不需要好好保护自己的私钥这么麻烦。就那前面的银行帐号的例子来说,你可以天天去银行自己给自己汇款,但是还是直接存钱比较方便不是么?
那么PGP和GPG的保密性又是啥回事捏?这很好理解。你汇钱给别人的帐号,是希望持有对应帐号银行存折的人才能取,其他的 比如 银行保安阿,柜台的工作人员阿,银行里排队排在你后面的人阿,就算经手了你的钱和汇款帐号也不能偷偷摸摸的把对方的钱取出来对不?所谓的保密性,就是起到这个作用。

四.额,我只是要个加密软件而已,保密性对我没什么用吧?
保密性当然很重要。对于目前整个互联网应用来说,还是基于帐号+密码的体系的。这是非常脆弱的一种体系。试想如果银行不给你银行卡和存则,而是给你一个帐号和密码,凭这个帐号和密码就能动你的前,你能放心吗?而且,我们只是租用互联网和互联网上的服务而已,不管是你的isp,你的email服务商,你上的bbs,甚至管你的一个小小的网管,只要他们高兴,都能看到你在网络上的所有数据。说不定你那个网管还可以边嘲笑你些给你女朋友的email肉麻边帮你修改里面的错别字呢…………要知道现在我们常用的http,smtp,pop服务都是明文传递你的信息甚至是你的帐号密码的。不信?自己去搜索"外贸邮件不正常"看看。
而现在的PGP也好,用于安全协议的https、sftp也好,或者说现在大行其道的数字证书也好,都是采用公钥/密钥模式,把以前明文通信的,如同明信片一样内容,精心的加上了一个只有收件人能打开的信封而已。若果你觉得保密性不重要,那么想想你会把比较个人的信件用人人都能看到的明信片寄出去吗?

五.听起来有点道理,那么那个"签名"又是啥东西?
其实呢,这个"签名"是英文的直译。我个人的角度来看,还是理解为手写体的笔迹比较贴切。以那个信件的例子来说,谁都可以自称你给你女朋友写信,签上你的地址,也可以在公共场所以你的名义贴大字报。那么你的女朋友又是以什么来判断写信的是不是你呢?自然是靠那个别人很难模仿的笔迹。而PGP,或者其他的公钥/密钥系统的软件所产生的签名,就是等于把原来是印刷体的文字,变成你自己手写的内容。
而用pgp或者数字证书等东西进行签名,其意义就在于,声明某一段文字或者文件是你本人发表的,而且防止别人篡改你的东西。这在bbs等公共场合,有权限的各级管理员可以修改你发布的帖子的内容的时候,特别有用。

六。拿我要验证别人的签名不是要保留一堆公钥?那不是很麻烦?
要是在以前,或许很麻烦,但现在是网络时代,就不用担心这点了。
现在网络上有很多公钥服务器,而且都是互相同步的。比如:
http://keyserver.ubuntu.com:11371
http://pgp.mit.edu/
http://wwwkeys.pgp.net:11371
http://subkeys.pgp.net
只要上这些网站或者在pgp/gpg软件中把公钥同步上去就可以了。
 基本所有的pgp和gpg软件都支持这些全球性的公钥服务器,你也可以建立自己的公钥服务器供小范围使用。
 在这些服务器上,所有的公钥都以一个id来识别。这个id是建立公钥的时候就固定下来的。在常用的pgp软件中都可以查看到。在公布公钥时,只要把公钥发布到这些服务器上,然后交给别人一个id就可以了
 比如我就把我的id放在 http://www.mrxu.net 的最下面,想导入我密钥的人只要在pgp或者gpg软件内搜索我的key的id就可以了。

七.放在服务器上自己去下载?那我怎么知道这是真的还是假的?

这又是个聪明的问题。对于所有的公钥/密钥的软件来说,验证公钥都是非常重要的一步。如果不能验证公钥,那么签名或者加密都不过是自欺欺人而已。那么,现让我们看看常见的数字证书是怎么验证公钥的。


数字证书,是由有足够权威的商业/政府机构作根服务器,对所有发出的数字证书经过验证后进行签名确保其有效。
这个主意不错吧?比如前一阵汶川地震的时候,各种渠道的散尽天良的骗子冒充红十字会的帐号满天飞,那时候我们怎么办?我们还是以够权威的电视/报纸上公布的帐号为主。这就和数字证书的验证方式相同了,以电视台(报纸)这个认证机构CA,对红十字会的帐号(公钥)进行认证。


与数字证书这种偏重商业性的验证方式不同,PGP采用的是一种更细致化的验证方式。当然,pgp也可以实现类似于数字证书的认证方式,但那只是pgp认证方式的用途之一而已。
还记得你身边的大多朋友是怎么由陌生人变成你可以信赖的人吗?没错,介绍。你父母把你的邻居介绍给你,你的老师把你的同学介绍给你,你的领导把你的同事介绍给你。而你的邻居,你的同学,你的同事,又介绍他们的朋友给你。前一阵不是流行六度空间理论吗?世界上每两个人可以通过6个人互相之间产生联系。
pgp就是基于这种介绍人体系。
每个公钥可以对其他的公钥进行签名,表示"我和这个人很熟","我听说过这个人","我和它不熟"。
而你又可以对你得到的公钥设定信任程度:极信任 (我自己的其他身份,我父母),完全信任(我的铁哥们,老朋友,老板),勉强信任(我见过几面的朋友),不信任(我听说过而已),我没听说过。
那么,你遇到的公钥就能分为好几种:
A:我自己很熟,听说过的人 (用自己的公钥签名过的公钥)
B:我铁哥们(我完全信任的公钥)
C:我的熟人的熟人(用A的公钥签名过的公钥)
D:铁哥们的熟人(B签名过的公钥)
E:我铁哥们的熟人的听说过的人(用D的公钥签名过的人)
F:我铁哥们的熟人的听说过的人的听说过的人(用E的公钥签名过的人)
PGP公钥能表示的关系比网上那些什么SNS网络有效精确多了吧?
对于ABCDEF这6个人,我想你对他们的信任程度是不同的吧?而根据他们的关系,你也能判断出ABCDEF哪些可以信任,那哪些压根就不熟了吧?但是如果每个钥匙都要你这么确认,你头也要大了吧?没关系,PGP建立了一个方法能让系统自动判断一个签名可以不可以相信。
你对每一个公钥的信任程度,代表你给用这个公钥的人打了个分。
比如,你的铁哥们是80分吧
而公钥的签名,就对应了打几折(8折,5折)
你自己是100分,B是80分,c是64分,D是64分,E是32分,而f就只要可怜的16分了
而系统可以判断,60分或者70分以上的人自动可以信任(还有多个签名的因素)
那么当以后系统遇到60分或70分以上的人,就自动归为可信的了。(数字只是举例)
在这个系统内,如果你完全相信一个权威认真机构的公钥,那么就等同于数字证书的效果了。
这点上,PGP.COM就开始作这件事了。它作了个keyserver.pgp.com,必须要认证email才能上传公钥,上传后会为公钥加一个有固定期限的签名,不与别的服务器同步。不过由于email的安全性比PGP要差得多了,我觉得这个意义实在一般,只能作为辅助手段。

对于你这个用户而言,对这个系统不必搞的那么清楚。你只要知道,如果有一个人,你的几个朋友都信任他,那么,你的PGP/gpg也会帮你信任他了。
PGP的信任系统当然比我的描述的复杂,并严谨的多了,可以进行很多很细致的设置。但是,我们不是白话PGP么,大概知道是怎么回事就足够了。



八.听起来不错,但你只是粗略的扯了一通,总要让我们看看PGP的加密或者签名到底是啥样子的吧?
也是,耳闻不如目见么。
如果你导入并信任了我前面说的标在我blog上的key(到我发帖为止是F00CCD42)
那么,你就可以验证如下文字是我发的,并没有被人篡改过(可以使用PGP[win],Firegog[firefox 浏览器+gpg],KGPG[linux/kde])

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

>



我觉得PGP是个很好用,很有前途的软件,并推荐大家去使用它。
Jarlyyn Hsu . 2008年7月22日



>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)

iD8DBQFIhZeCffjdfvAMzUIRAkTwAKCM5H0FFbaxSsLa5O6aPCIn5eSgZgCghifT
CySKm5brE/UatqDcVEogT7o=
=+NNM
-----END PGP SIGNATURE-----



而如下则是我用自己的密钥对其他的文字进行了加密,你没我的私钥,是解不出来的,就算你有我的公钥也么用

-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.4.6 (GNU/Linux)

hQINA89Ul2Kr0xIkEAf/QnBtnf8IwqpgcY0vX40FeSO1F6nmqIBdJ5KV0YemejKX
d5r8qJ5IqmFCoc6WkXc4AaxCKC1H20QeS2CSbxeTFbUrYIOX9ho3tM/oD52uXdM4
ARXegRFLt2+8lLQo+1hYLvcGJy37PnvSVeE5AnnqKPnERW/wtjomqiRSfsqlM+ev
Y8tlcJhNtqTBiH/lnq7yFLpP9BNA2zuYsqQ0Y3/1lHXM2iSSuEcWmy1FfVYISKnY
zGw6FOoDGN+WtPV67uWCVAlkxpa665mRpQuPWEBr2/HkG9ps2i7BGdkB+LGLmxfp
Ow4HjtDl3Oo/gljrAiFvIM5RLukn1p+g2K11ChrtIAfzBdBHGe1dCqEihaUVSl70
u7IuTay1FDSEFwpoa69T1djhrknQGFh3WMnARWjFLi/JgFzxtAOCDJpN1oYGubYn
38GY34Gizn0+C8iAAXULt0mEpnRMow2ACQIzOqz6EtL79j9C+zTe9SlZoQEDrYVi
6Etfq+9bScc86Q8Kl5xqpb3pGiqEHLFFgysh+UITG51uo1CuhzIRMPuSk5OZNxJQ
X+oZDFKwFNCsRnubpWiyDPsIQ6cD8f1Rl1HMfg9DrxW5R0yZpDYZkIU9ll2YOky+
YUSXKMstWw0jEM7cgC1dh+7xZSzNxPnBQBbrMSeRfO26aHgQBe/0ThA234RzvLSv
0lAByFqVOncwefKWTAmuweocZwauuyRoiY6Bu/3tCAY9xur7qdOzIP77JOIyKn9U
9uJ/NkTCoA4gaD1qn39zz/pCVs9TKxoNDp+MgUGsi1pMrg==
=zE2J
-----END PGP MESSAGE-----
头像
jarlyyn
帖子: 4671
注册时间: 2006-04-12 18:54
联系:

#2

帖子 jarlyyn » 2008-07-22 16:32

对于 ub来说,最常接触到pgp/gpg有关的东西

就是新利得里添加源后说缺少公钥了

这时候可以开seahorse(密码和加密钥匙)或者kgpg随便找个keyserver下缺的key

然后导出公钥,再用新立得导入就ok了
头像
jarlyyn
帖子: 4671
注册时间: 2006-04-12 18:54
联系:

#3

帖子 jarlyyn » 2008-07-22 16:34

怎么一出去变精华了-____-
头像
solcomo
帖子: 2838
注册时间: 2007-04-25 13:12

#4

帖子 solcomo » 2008-07-22 16:37

:D 学习
看看
♜♞♝♛♚♝♞♜
♟♟♟♟♟♟♟♟
♙♙♙♙♙♙♙♙
♖♘♗♕♔♗♘♖

☠☯⚔⚓☣☦☃☕
☹☻☪☭☬⚖⚛⚜
ℜℳℬ™ ℋℯℓ℘ ℳℭ
sƂɐʍ рǀɹoʍ əɥʇ oS
头像
jarlyyn
帖子: 4671
注册时间: 2006-04-12 18:54
联系:

#5

帖子 jarlyyn » 2008-07-22 16:38

如果有什么地方觉得我说得还不够白话说下

我力求让人看了不累,就能知道pgp是怎么回事
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

#6

帖子 xiooli » 2008-07-22 17:31

你白说了,我被你绕晕了。 :shock:
头像
jarlyyn
帖子: 4671
注册时间: 2006-04-12 18:54
联系:

#7

帖子 jarlyyn » 2008-07-22 17:37

这样都会被绕晕么…………

难道不该提数字证书么?
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

#8

帖子 bones7456 » 2008-07-22 17:38

恩,顶了再看...
关注我的blog: ε==3
头像
luojie-dune
帖子: 22033
注册时间: 2007-07-30 18:28
系统: Linux
来自: 空气中

#9

帖子 luojie-dune » 2008-07-22 17:52

有用就加精。
『这个世界都是我的 ,我爱你们』

ENTP ⥂ INTP ⥄ INFP ⇦ INTJ

在此发布的文章使用 Creative Commons Attribution-ShareAlike 4.0 协议
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

#10

帖子 bones7456 » 2008-07-22 17:54

得再写写怎么创建和发布自己的公钥,怎么信任某个公钥...
关注我的blog: ε==3
头像
jarlyyn
帖子: 4671
注册时间: 2006-04-12 18:54
联系:

#11

帖子 jarlyyn » 2008-07-22 17:55

bones7456 写了:得再写写怎么创建和发布自己的公钥,怎么信任某个公钥...
这个如果有兴趣当然可以写

其实用seahouse(ubuntu里交密码和加密钥匙)很容易就能作了。

关键先要让人知道pgp是什么阿
头像
TeliuTe
论坛版主
帖子: 7668
注册时间: 2007-11-25 13:29
系统: 16/18/20/w7
来自: 新疆博乐
联系:

#12

帖子 TeliuTe » 2008-07-22 20:20

用过加密和gpg解密,但是还是不太明白里面的道理
用空仔细学习下..
头像
yjcong
帖子: 2470
注册时间: 2006-02-28 3:11

#13

帖子 yjcong » 2008-07-22 21:00

2战的时候, 常常相互破解密码。 如果用这个加密, 到需要的时候, 能破解吗??
一梦三年,
松风依旧,
萝月何曾老.


灵幽听微, 谁观玉颜?
灼灼春华, 绿叶含丹.
头像
jarlyyn
帖子: 4671
注册时间: 2006-04-12 18:54
联系:

#14

帖子 jarlyyn » 2008-07-22 21:09

yjcong 写了:2战的时候, 常常相互破解密码。 如果用这个加密, 到需要的时候, 能破解吗??
理论上,除非有未被公布的军事用途科技

这个在实用上可以认为是不能破解。

PGP以前美国是禁止对华出口的
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#15

帖子 eexpress » 2008-07-22 21:18

写这么多啊。我看不下去呢。我的经验很少。就这些。等我不明白的时候,再翻这文章看。
加密 -e <------------ 必须指定公钥了,和-r连用。
指定公钥 -r eexp <------------ 用eexp的公钥加密,只有eexp的私钥可以看这文件了。
签名 -s <------------ 带了加密效果。
盔甲 -a <------------ 转换成ASCII格式,用于邮件发送等。后缀是asc。否则缺省后缀是gpg,格式是二进制。
● 鸣学
回复