密码技术(十三)之PGP

PGP

   ————密码技术的完美组合

PGP简介

 PGP是于1990年左右由菲利普.季默曼(Philip Zimmermann)个人编写的密码软件,现在依然在世界上被广泛使用。PGP这个名字是Pretty Good Privary(很好的隐私)的缩写。
 PGP可以在Windows、Mac OS X、Linux等很多平台上运行,版本包括商用版和免费版。此外还有一个GNU遵照OpenGPG(RFC4880)规范编写的叫作GnuPG(GNU privacy Guard)的自由软件。
 这里介绍的主要是根据PGP Command Line User's Guide 10.3 以及GnuPG2.1.4的内容编写的。在详细功能以及所支持的算法方面,PGP和GunPG有所区别,而且不同的版本之间也会有所不同,这里介绍统一PGP为准。

关于PGP

 OpenPGP是对密文和数字签名格式进行定义的标准规格(RFC1991、RFC2440、RFC4880、RFC5581、RFC6637)。
 1996年的RFC1991中对PGP的消息格式进行了定义。2007年的RFC4880中新增了对RSA和DSA的支持。2012年的RFC6637中新增了对椭圆曲线密码(ECC)的支持,并且还支持基于Curve P-256、P-384和P-521三种椭圆曲线的椭圆曲线DSA和椭圆曲线Diffie-Hellman密钥交换。
 RFC6637中新增了用于比较密码学强度的平衡的对照表。由这张表可知,例如当我们选用256比特的椭圆曲线密码算法时,相应低应该选用256比特的散列散发以及密钥长度为128比特的对称密码算法。


密码学强度的平衡性.png

关于GNU Privacy Guard

 GNU Privacy Guard(GnuPG、GPG)是一款基于OpenPGP标准开发的密码学软件,支持加密、数字签名、密钥个管理、S/MIME、ssh等多种功能。GnuPG是基于GNU GPL协议发布的一款自由软件,因此任何人都可以自由的使用它。GnuPG本身是一款命令行攻击,但它也经常被集成到其他应用软件中。
 GnuPG 分为stable、modern和classic三个系列。

  • GnuPG stable 的版本号为2.0.x,支持OpenPGP、S/MIME和ssh
  • GnuPG modern 的版本号为2.1.x,在stable的基础上增加了对椭圆曲线密码的支持。GnuPG modern是比较新的版本,今后将会逐渐取代现在的GnuPG stable版本。
  • GnuPG classic 的版本号1.4.x,是比较旧的版本。

PGP的功能

  • 对称密码
      PGP支持用对称密码进行加密和解密。对称密码可以单独使用,也可以和公钥密码组合成混合密码系统。
     可以使用的对称密码算法包括AES、IDEA、CAST、三重DES、Blowfish、Twofish、Camellia等。
  • 公钥密码
      PGP支持生成公钥密码的密钥对,以及用公钥密码进行加密和解密。实际上并不是使用公钥密码直接对明文进行加密,而是使用混合密码系统来进行加密操作。
     可以使用的公钥密码算法包括RSA和ElGamal等。
  • 数字签名
     PGP支持数字签名的生成和验证,也可以将数字签名附加到文件中,或者从文件中分离出数字签名。
     可以使用的数字签名算法包括RSA、DSA、ECDSA(椭圆曲线DSA)、EdDSA(爱德华兹曲线DSA)等。
  • 单向散列函数
     PGP可以使用单向散列函数计算和显示消息的散列值。
     可以使用的单向散列函数算法包括SHA-1、SHA-224、SHA-256、SHA-384、SHA-512和RIPEMD-16等。MD5依然可以使用,但并不推荐。
  • 证书
     PGP可以生成OpenGPG中规格规定格式的证书,以及与X.509规范兼容的证书。此外,还可以颁发公钥的作废证明(revocation certificate),并可以使用CRL和OSCP对证书进行校验。
  • 压缩
     PGP支持数据的压缩和解压缩,压缩采用ZIP、ZLIB、BZIPZ等格式。
  • 文本数据
     PGP可以将二进制和文本数据相互转换。例如,当不得不使用某些无法处理二进制数的软件进行通信时,可以将二进制数据转换成文本数据(ASCII radix-64格式),这些软件就能够处理了。
     radix-64格式是在邮件等场合中经常使用的base64编码基础上,增加了校验数据错误的校验和的版本。base64编码是一种可以将任何二级制数据都用AZ、az、0~9、+、/共64个字符再加上=(用于末尾填充)来表示格式。
  • 大文件的拆分和拼合
     在文件过大无法通过邮件发送的情况下,PGP可以将一个大文件拆分成多个文件,反过来,也可以将多个文件拼合成一个文件。
  • 钥匙串的管理
     PGP可以管理所生成的密钥对以及外部获取的公钥。用于管理密钥文件称为密钥串(key ring)。

生成密钥对

 略

加密和解密

加密

用PGP加密.png

 PGP的加密过程,如图所示,消息经过混合密码系统进行加密,然后转换成报文数据(文本数据)。
 这里的内容,和前面提到的混合密码系统的结构基本上是一样的,差异在于这里还包括了消息的压缩以及二进制——>文本转换(转换为ASCII radix-64)这两个步骤。

  • 生成和加密会话密钥
  1. 用伪随机数生成器生成会话密钥。
  2. 用公钥密码加密会话密码,这里使用的密钥是接收者的公钥。
  • 压缩和加密消息
  1. 压缩消息
  2. 使用对称密码对压缩的消息进行加密,这里使用的密钥是步骤1生成的会话密钥
  3. 将加密的会话密钥 步骤2与加密的消息 步骤4拼合起来。
  4. 将步骤5的结果转换为文本数据,转换后的结果就是报文数据。
    用公钥密码加密会话密钥,用对称密码加密消息 就是混合密码系统的特点

解密

用PGP解密.png
  • 解密私钥
     PGP的私钥是保存在用户的钥匙串中的。为了防止钥匙串被盗,私钥都是以加密状态保存的,并在保存时使用了基于口令的密码(PBE)。口令是由多个单词组成的短语,没有正确的口令就无法使用相应的私钥。如果攻击者想要使用你的私钥,就必须先窃取保存私钥的钥匙串,然后再破译加密私钥的密码。
     解密私钥的步骤如下
  1. 接收者输入解密的口令
  2. 求口令的散列值,生成用于解密私钥的密钥。
  3. 将钥匙串中经过加密的私钥进行解密。
  • 解密会话密钥
  1. 将报文数据(文本数据)转换成二进制数据
  2. 将二进制数据分解成两部分:加密的会话密钥、经过压缩和加密的消息。
  3. 用公钥密码解密会话密钥,这里使用步骤3中生成的接收者的私钥。
  • 解密和解压缩消息
  1. 对步骤5中得到的经过压缩和加密的消息用对称密码进行解密。这里使用步骤6中生成的会话密钥。
  2. 对步骤7中得到的经过压缩的消息进行解压缩。
  3. 得到原始消息。
加密和解密.png

生成和验证数字签名

生成数字签名

用PGP生成数字签名.png

 在上图中,消息与相对应的签名进行拼合,并最终转换成报文数据(文本数据)。顺便提一下,对于是否要将报文数据转换成文本数据,在PGP是可以选择的。

  • 解密私钥
     在钥匙串中,私钥是通过口令进行加密保存的,因此不知道口令的人就无法使用相应的私钥。
  1. 发送者输入签名用的口令
  2. 求口令的散列值,生成用于解密私钥的密钥
  3. 求钥匙中经过加密的私钥进行解密。
  • 生成数字签名
  1. 用单向散列函数计算消息的散列值
  2. 对步骤4中得到的散列值进行签名。这一步相当于使用步骤3中得到的私钥进行加密。
  3. 将步骤5中生成的数字签名与消息进行拼合
  4. 将步骤6的结果进行压缩。
  5. 将步骤7的结果转换为文本数据
  6. 步骤8的结果就是报文数据

验证数字签名

用PGP验证数字签名.png
  • 恢复发送者发送的散列值
  1. 将报文数据(文本数据)转换为二进制数据。
  2. 对经过压缩的数据进行解压缩
  3. 将解压缩后的数据进行分解成经过签名的散列值和消息两部分
  4. 将经过签名的散列值(经过加密的散列值)用发送者的公钥进行解密,恢复发送者发送的散列值。
  • 对比散列值
  1. 将步骤3中分解出的消息输入单向散列函数计算散列值。
  2. 将步骤4中得到的散列值与步骤5中得到散列值进行对比
  3. 如果步骤6的结果相等则数字签名验证成功,不相等则验证失败。这就是数字签名的验证结果。
  4. 步骤3中分解出的消息就是发送者发送的消息。
数字签名的生成与验证.png

生成数字签名并加密以及解密并验证数字签名

生成数字签名并加密

用PGP生成数字签名并加密.png

 上图展示了对消息生成数字签名以及对消息进行压缩和加密这两个过程,并将两者的结果拼合在一起形成报文数据(文本数据)。对于是否要将报文数据转换成文本数据,在PGP中是可以选择的。

  • 生成数字签名
  • 加密

解密并验证数字签名

用PGP解密并验证数字签名.png
  • 解密

  • 验证数字签名

信任网

公钥的合法性

 在使用PGP时,确认自己所得到的公钥是否真的属于正确的人是非常重要的,因为公钥可能会通过中间人攻击被替换。
 证书就是由认证机构对公钥所施加的数字签名,通过验证这个数字签名就可以确认公钥合法性。
 然而,PGP中却没有使用认证机构,而二十采用了一种叫作信任网(web of trust)的方法。在这种方法中,PGP用户会互相对对方的公钥进行数字签名。
 信任网的要点是“不依赖认证机构”,而是建立每个人之间的信任关系。换言之,就是能够自己决定要信任哪些公钥。


该系列的主要内容来自《图解密码技术第三版》
我只是知识的搬运工
文章中的插图来源于原著

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • 元旦放假,婆婆不在家,有幸做家庭主妇一日。早晨,五点起床,给孩儿爸做午饭,因为厨艺不精,只能做一道简单的香菇土豆片...
    水来木生阅读 749评论 0 9
  • 最初的最初,看一篇英语阅读就是看,没那么多束缚。做一道题就是做,没那么多框框。但是我为了逼自己,强加给自己:“看阅...
    王珂happier阅读 201评论 0 0
  • 《拥抱不完美——认回自己的故事疗愈之旅》是一本心理学方面的书,书的的作者是台湾叙事心理治疗师周志健,通过讲述他自己...
    精英读书会sq阅读 1,651评论 0 51
  • 没过多少时间赵煜龙两人走出包间,在大厅的玲珑见他们出来便招呼着把他们送出了饭店, 李晟睿找到了机会一溜烟的跑进赵煜...
    思渺烟雨莫阅读 233评论 0 0