网络安全 第4章 安全电子邮件-PGP
第4章 安全电子邮件-PGP
4.1 电子邮件的安全属性
电子邮件的特殊安全需求:
- 通信双方不会同时在线进行通信,无法在线协商会话密钥
- 很难找到双方可信的第三方公钥分发机构
- 传统 SMTP 仅支持可打印的 ASCII,但加密后的密文未必符合要求
4.2 PGP
PGP (Pretty Good Privicy)
PGP 是1990 年左右由 Phil Zimmermann 个人编写的密码软件,不同于常规的引入可信第三方的公钥管理机制,PGP 基于去中心化的分布式网络,通过一次性会话密钥加密消息来确保消息的机密性,通过公钥来传递一次性会话密钥,通过公钥加密传递消息验证码,接收方生成新的 MAC 与发送的加密 MAC 进行比较,确保消息的完整性
三种工作方式:加密、认证、认证并加密
4.2.1 工作流程
认证
认证主要是通过公钥密码,和消息验证码来完成信息内容的比对和双方身份的认证
主要流程如下:
- 发送方使用 Hash 函数,生成消息的散列值
- 发送方用自己的私钥,通过 RSA 算法加密散列值 ,得到 MAC
- 将 MAC 和消息拼合在一起,压缩并进行 Base-64 转换
- 接收方将消息进行解压缩和逆 Base-64 转换
- 接收方将 MAC 和消息分离,用发送方的公钥解密 MAC ,得到消息的散列值
- 接收方同样用 Hash ,生成消息的散列值
- 对比两个散列值,若相同则认证成功,消息完整且发送方属实
加密
由于电子邮件双方不会同时在线,无法在线协商一次性会话密钥,所以先要解决密钥分发问题
发送方使用随机生成的密钥 Ks 作为一次性会话密钥,并加密邮件消息;使用接收方的公钥加密一次性会话密钥 Ks,来完成密钥分发
主要流程如下:
- 发送方首先对消息进行压缩
- 发送方生成一个仅针对当前邮件的随机 128 位的密钥 Ks,使用 CAST-128 (或 IDEA、TDEA) 对称加密算法,用 Ks 加密压缩后的邮件
- 用接收方的公钥加密一次性会话密钥 Ks
- 把加密后的密钥和加密后的压缩邮件拼接,进行 Base-64 转换
- 接收方首先进行逆 Base-64 转换,将加密后的密钥和加密后的邮件分离
- 接收方使用自己的私钥,解密得到一次性会话密钥 Ks,
- 接收方用 Ks 解密,再进行解压缩,得到邮件消息
认证并加密
认证和加密操作合并,首先完成认证部分,再进行加密
发送方的主要流程如下:
- 发送方使用 Hash 函数,生成消息的散列值
- 发送方用自己的私钥,通过 RSA 算法加密散列值 ,得到 MAC
- 将 MAC 和消息拼合在一起,进行压缩,生成一个仅针对当前邮件的随机 128 位的密钥 Ks,使用 CAST-128 (或 IDEA、TDEA) 对称加密算法,用 Ks 加密压缩后 MAC 和消息
- 用接收方的公钥加密一次性会话密钥 Ks
- 把加密后的密钥和加密后的压缩邮件拼接,进行 Base-64 转换,发送给接收方
接收方的操作与之前的类似
压缩
PGP 在发送方签名后,加密前进行压缩,原因如下
- 对未压缩的邮件进行签名有利于实现不可否认性,便于事后验证
- 对压缩后的消息加密可以增强加密的安全性,长度较小且关键字段为乱码,增加了密文分析的难度
Base-64 转换
Base-64 就是将二进制值转换为可打印的 65 个 ASCII 字符,每个字符对应 6 位二进制值,任何符号都可以转换成这个字符集中的字符,这个转换过程就叫做base64编码
索引和字符的对应
索引 | 对应字符 |
---|---|
0-25 | A-Z |
26-51 | a-z |
52-61 | 0-9 |
62 | + |
63 | / |
64 | = (填充) |
Base-64 转换的具体过程
首先将字符串(图片等)转换成二进制序列,然后按每 6 个二进制位为一组,分成若干组,如果不足 6 位,则低位补 0。每 6 位组成一个新的字节,高位补 00,构成一个新的二进制序列,最后根据 base64 索引表中的值找到对应的字符。
分段
由于电子邮件对于邮件长度的限制,可以将邮件分段,分开发送,这个过程在 Base-64 转换后进行,其中签名和密钥等在拆分后的第一段中,接收方需要接受全部的拆分后小段,才能获得邮件内容
4.2.2 密钥管理
PGP 最重要的内容就是对于其密钥的管理
在整个 PGP 中共有几种密钥呢?
PGP 使用了4种类型的密钥:会话密钥 Ks 、公钥、私钥、私钥加密口令
密钥类型 | 加密算法 | 用途 |
---|---|---|
会话密钥 Ks | IDEA | 用于加密和解密传送的消息,一次有效,随机生成 |
公钥 | RSA | 用于加密一次性会话密钥,发送方和接收方共享 |
私钥 | RSA | 用于加密消息的散列值来生成签名,仅发送方使用 |
私钥加密口令 | IDEA | 仅在私钥环中加密私钥,进行私钥的保存 |
1. 一次性会话密钥
Ks:对称加密会话密钥 这是一个伪随机数密钥,产生方法如下:
- PGP 维护一个缓冲区,用于记录用户键入的时间、内容等从而生成一个真随机数
- 把这个真随机数作为随机数生成器 ( 基于随机数生成算法 ANSI X9.17 ) 的种子,生成会话密钥 Ks
2. 公钥管理的信任模式
公钥的传递有多种方式
- 物理方式获取
- 可信任的个体进行派发
- 通过电话验证
- 基于可信第三方的证书发放机制
PGP 作为去中心化的分布式系统,显然不能利用信任 CA 机构的方法来进行公钥管理,这里 PGP 使用的是信任网络,我们先来介绍一下公钥管理的信任模式
1 直接信任
直接信任是最简单的信任模式。在这个模式中,使用者因为知道一把密钥从哪里来而信任它是有效的。所有的密码系统在某种程度上都使用了这样的信任形式。例如在网页浏览器上,CA 机构的根证书直接被信任,这是因为它们被内置在了操作系统和浏览器中
2 信任链/信任树
在信任链中,会有许多来自”根证书”所延伸出来的信任。这些证书也许为他们自己担保、或担保更低层的证书。你可比这样的情形想做是一个信任链。下游证书的真实性由签发它的证书的真实性而得到证明,直到直接由根证书所信任为止。在个体的角度来看,这是一条信任链,而从整体的角度去看,这其实是一个信任树
3 信任网络
信任网络与以上两种模式不同,信任网络可以被看作是若干个直接信任所连接起来的网络。在信任网络中,你相信一个密钥是有效的,是因为你完全信任的人相信它是有效的。这个人被称为引荐者
六度分隔理论:世界上任何互不相识的两人,最多只需要六个中间人就能够建立起联系。
也就是说,信任一个素不相识的人的证书,途中的引荐人可能不超过六个
Phil Zimmermann 曾说:
随着时间过去,你累积到许多人的密钥,其中有些人你也许愿意签署信赖他们,别人也会签署一些他们自己信赖的他人密钥。每个人都逐渐累积到一些他人已签署信赖的密钥,然后自己再签署并散发出去。那么便能期待,下一个拿到这把密钥的人在签署名单上总有一两个是自己信赖的。这最终能形成所有公钥的分布式防弊的信赖网络。
这就是信任网络的信任理念。当任何使用者使用了别人的公钥,他就会成为那把公钥的引荐者。当这样的程序被持续地进行着,就会形成一张信任网络
上图为 PGP 中信任模型的实例
对于公钥的有效性作出如下归纳
- 由完全信任的用户签名的公钥肯定有效
- 由部分信任的用户签名的公钥可能有效 (信任权值达到有效)
- 由不信任的用户签名的公钥无效
- 未知用户签名的公钥无效
3. 密钥标识符
因为每个用户会储存多个用户的公钥,当使用者接收到加密的消息时,如何选择正确的公钥成为了下一个问题,这里 PGP 引入了密钥标识符的概念
简单来说,密钥标识符就是给每个公钥配备一个对应的公钥 ID,在进行信息交换时,讲公钥 ID 一起打包,发送给接收方,接收方收到消息后,通过公钥 ID 就能够找到对应的公钥,完成消息的接收
观察 PGP 消息的格式,看看密钥标识符的作用
- 接收方公钥 ID 是用来确认接收方,并让接收方使用自己的私钥来解密会话密钥,会话密钥是由接收方的公钥加密的
- 接收方必须先解密得到会话密钥,才能用会话密钥来解密整个消息
- 签名组件中包含有发送方的公钥 ID ,接收方得到这个 ID 后,在接收方的公钥环中进行查询,找到发送方的公钥 ID,从而解密得到原本的消息摘要
4. 密钥环
PGP 引入了两种数据结构,分别是私钥环和公钥环,用来进行密钥的管理
私钥环 : 管理自己的私钥
公钥环 : 管理自己所拥有的他人的公钥
私钥环
时间戳 | 密钥 ID | 公钥 | 加密的私钥 | 用户 ID |
---|---|---|---|---|
Time | KUimod264 | KUi | E(KRi) | UIDi |
公钥环
时间戳 | 密钥 ID | 公钥 | 拥有者信任 | 用户 ID | 密钥合理性 | 签名 | 签名信任 |
---|---|---|---|---|---|---|---|
Time | KUimod264 | KUi | OnwerTrusti | UIDi | KeyTrusti | Signi | SignTrusti |
私钥的安全性对于 PGP 的安全性来说至关重要,用户的私钥加密存储在私钥环中,PGP 设计了安全的方法来加密并存储密钥
- 用户选择一个用于加密的私钥加密口令 ( passphrase )
- PGP 系统创建公钥/私钥对
- 用 Hash ( SHA-1 ) 算出口令的 128 位散列值,抛弃口令
- 以该 128 位散列值为密钥,用 CAST-128 加密私钥,储存在私钥环中,抛弃散列值
当用户需要私钥时,输入口令,PGP 系统计算得到口令的散列值,并以散列值作为密钥来解密,得到用户的私钥
若用户忘记了口令,则没有任何办法能得到私钥,明文口令和明文形式的私钥都不在 PGP 系统中存储,极大地保障了安全性
密钥环的使用
签名信息: PGP 使用发送方的用户 ID 从私钥环中检索私钥;PGP 向用户请求口令短语,来恢复被加密的私钥,再用私钥进行对消息摘要的加密,完成签名。
加密信息: PGP 产生一次性会话密钥并加密消息,用接收方的用户 ID 从公钥环中得到接收方的公钥,用接收方的公钥加密一次性会话密钥,和接收方的公钥 ID 一起,创建消息的会话密钥部分。
解密消息: 接收方使用接收到的消息中的会话密钥部分中的密钥 ID 字段在私钥环中检索自己的私钥;PGP 提示接收方输入口令短语以恢复私钥;PGP 用私钥来恢复会话密钥并解密消息。
认证消息: PGP 在消息的签名部分中获得发送者的密钥 ID,并用该 ID 在公钥环中检索发送者的公钥;PGP 恢复所传输的消息摘要;PGP 对接收到的消息计算消息摘要,并与接收到的消息摘要进行比较以实现认证。
下篇文章将介绍 PGP 的免费版本 GPG 的安装和使用,对于读者来说,要注重理解 PGP 的公钥管理,根据其分布式、去中心化的特点,构建起信任网络的概念,这样就能对 PGP 的安全机制有较好的了解
网络安全 第4章 安全电子邮件-PGP相关推荐
- 思科网络安全 第七章答案
思科网络安全 第七章答案 哪种网络技术使用将所有流量(包括第 1 层错误)转发到分析设备的被动分流设备? 反馈 Refer to curriculum topic: 7.1.1 网络分流器是一种用于捕 ...
- 思科网络安全 第六章答案
** 思科网络安全 第六章答案 ** 计算机网络中的侦查跟踪攻击有什么用途? 反馈 Refer to curriculum topic: 6.2.2 阻止用户访问网络资源是一种拒绝服务攻击.侦查跟踪攻 ...
- 第四章 收发电子邮件
文章目录 第四章 收发电子邮件 支持电子邮件协议 InterSystems IRIS如何表示`MIME`电子邮件 创建由单个部分组成的电子邮件 创建多部分电子邮件 指定电子邮件标题 指定基本电子邮件标 ...
- 《Outlook时间整理术》一第1章 在电子邮件泛滥狂潮中屹立
本节书摘来异步社区<Outlook时间整理术>一书中的第1章,第1.1节,作者: [德]Lothar Seiwert , Holger Woeltje 译者: 欧阳宇,更多章节内容可以访问 ...
- 思科网络安全 第四章考试答案
CCNA Cybersecurity Operations (版本 1.0) - CyberOps 第 4 章考试 GodLou的博客_CSDN博客-领域博主 1纽约的一所高中(学校 A)计划使用视频 ...
- 思科网络安全 第六章考试答案
CCNA Cybersecurity Operations (版本 1.0) - CyberOps 第 6 章考试 GodLou的博客_CSDN博客-领域博主 1 为重获对邮件和数据服务器的控制,公司 ...
- 思科网络安全 第七章考试答案
CCNA Cybersecurity Operations (版本 1.0) - CyberOps 第 7 章考试 GodLou的博客_CSDN博客-领域博主 1 该图显示的是嗅探器设备的图形界面.选 ...
- 网络安全 第3章 身份认证
第3章 身份认证与访问控制技术-身份认证 3.1 单机身份认证 1. 基于静态口令的身份认证 静态的口令,一般不会改变 在初始化阶段,用户生成用户名和口令,系统将用户的用户名和口令进行哈希运算,将哈希 ...
- 思科网络安全 第五章考试答案
CCNA Cybersecurity Operations (版本 1.0) - CyberOps 第 5 章考试 GodLou的博客_CSDN博客-领域博主 1 IPS 的作用是什么? 通过使用签名 ...
最新文章
- PCIE的事务类型:posted和non posted transaction
- python 接口自动化测试_python接口自动化测试之接口数据依赖
- Android无法运行AVD,android – 无法运行AVD(模拟器)
- 从Sun离职后,我“抛弃”了Java,拥抱JavaScript和Node
- wifi信号手机测试软件,专业的WiFi检测工具有哪些?如何解决wifi信号不好?
- 编程实战:如何管理代码里的常量
- java biz包 怎么写,关于java dao与biz分工探讨
- 使用mpx开发外卖小程序
- java day25【Junit单元测试 、反射 、 注解】
- bzoj 2743spoj DQUERY - D-query
- SQL2008卸载。
- 使用TinyPNG的API进行图片压缩
- 3个重点,20个函数分析,浅析FFmpeg转码过程
- 基于django的实验室网站管理平台设计与实现(二)
- 由于应用universal link 校验不通过 ios应用升级SDK 更换Universal Links校验
- 2016-2017 ACM-ICPC, Egyptian Collegiate Programming Contest (ECPC 16) 题解
- Centos校准时间
- ruby on rails validates uniqueness
- 类似微信群聊九宫格头像的算法实现
- 厉害!95后2万月薪程序员,背着电脑送外卖,途中还要改bug!