当前课程知识点:网络安全概述 > 第三章 编码解码学 > 第六节 信息完整性 > Video
下面呢我们来讲编码解码学中的一个
最后一项非常重要的一个服务
就是message integrity
信息的完整性的这种证明
那信息完整性的检测它的目的是什么呢
有以下几点
它的目的性实际上是说
我们需要使信息双方可以明确
判断所收到的信息是完整无误的
当发出方发出一段信息之后
接收方收到了
那接收方需要能够知道
这段信息是正确的是完整无误的
这个是Integrity信息完整性的
一个最重要的要完成的一个服务目标
那其中呢就是细分的话
我们需要知道这个信息呢
它的内容是没有被篡改过的
信息的发出方是真正的发出方本人
还有呢信息并没有被录播
就是刚刚我们看到过很多次的
这个recorded and playback attack
没有被录播
没有就是受到录播攻击
以及信息的顺序没有被打乱
这几项呢都实际上是这个message integrity
需要完成的一些服务目标
那为了完整地了解这个message integrity
是一个什么样的概念
我们呢首先来看一下
这个信息摘要是一个什么东西
信息摘要它的英文是Message Digest
Message Digest这个呢我们将就是
真正用到哈希函数的地方
我不知道大家是否还记得之前
我提到过这个编码解码算法体系有几大类
其中包括我们刚刚已经讲过的这个shared key 这一类
就是说共享密钥的这个空间
还有呢就是刚刚也是接触过的这个public key algorithms
就是这个公共密钥和私有密钥这个密钥对儿
这样子的算法那RSA是个代表
那同时呢我在很久之前已经提到过
还有一大类叫做哈希函数类
那哈希函数类呢
不知道同学们是否还记得
当时提的时候也说过
这个哈希函数它实际上是没有什么加密的过程的
那它为什么有用呢
用处呢就是在
我们将要提到的这一段知识点里
就是在这个信息摘要这段知识点里面
很有趣的一些用法我们将要看到
我们这个信息摘要是一个什么样的一个过程呢
就是说顾名思义其实信息摘要
就是对一段信息进行摘要
那我们怎么做摘要呢
就是用一个函数来做摘要
而这个函数一般就是哈希函数hash functions
那这个函数H()可以将
任意长度的一段字符输入处理后
这个H()它可以输出一段固定长度的一段字符串
这个固定长度的字符串的输出
我们就管它叫做信息摘要
再稍微重复一下就是我们有一个函数H()
这个函数H()的它可以把任何一段字符拿来
作为输入
那最终的目的呢就是这个函数它最终的运算结果呢
是输出一段固定长度的一段字符串
这个固定长度的字符串就是message digest
就是我们所谓的信息摘要
那么这个函数H()
一般而言我们会用哈希函数
来做这方面预算
那哈希函数有很多种
在这个网络安全中
比较大的比较重要的两个hash function
一个是MD five就是MD5
这个同学们可以回去了解一下
还有一个是SHA
我们一会也可以是简单的提一下
那重新回来再接着讲这个哈希函数
在这个函数呢
它的这个特性呢
实际上是有一个多对一的特性
也就是说呢这个函数它有可能
拿到多个输入得到的结果
我得到这个message digest有可能是一个
就是它是多对一的函数
n to one the mapping
H()那主要的函数形式是hash function
这个我们已经提到过了
那hash function这个函数H()
它应有的一些我们需要它具备的
一些特性有以下几个啊
一个是说我们希望这个函数
它在运算起来是非常容易的
就是计算比较容易这是一个性质
第二不可逆性
就是你想要求它的这个反函数
得到一个结果是不可能的
这个是要不可逆性
就是说我无法通过
H(m)这个 message digest
反推出m是什么
我无法通过这个输出的结果
反推出输入是什么 这个就叫不可逆性
那我们希望这样的函数具备这样的特性
就是有不可逆性
还有下面的特性是说
这个结果尽可能是唯一的
大部分哈希函数它都是结果
不可能100%保证是唯一的
它总有一些重叠性在里面
那结果呢尽可能是唯一的
这个是我们希望它能够提供的一个性质
唯一性指的呢就是说对任何一个
输入的信息m和另外一个输入的信息m prime就m’啊
那我们希望H(m)和H(m’)
得到的结果不一样
也就是说我们希望H(m) = H(m’)
等式如果成立的话
这个等式成立的可能性要越小越好
我们希望结果能够唯一就是这样子的
还有一个就是我们希望H( )
就是这个函授它能够
提供的一个特性的就是这个结果是近乎随机的
这几点就是说我们一般的
对这个哈希函数的有一定的期望是这些
那我们现在呢来看一个
最简单的这样一个哈希函数
那就是像综合校验码Checksum
这个Checksum呢是如果这个大家
对计算机网络的一些协议如果还有印象的话
我希望屏幕前的各位同学们应该
因为已经学过计算机网络课
至少这个对TCP IP这样的协议
应该还是有足够的印象
因为这些协议非常重要
那如果你们对这样的协议有意向的话
大家应该对Checksum就有印象
这个综合校验码
Checksum实际上它在操作过程中
相当于就是一个哈希函数
一个hash function的这样一个操作过程
而Checksum它就是可以产生一组
固定长度的这样的字符输出
并且呢这个Checksum它也是多对一的函数
就是说呢对不同的输入信息
输入到同一个函数里面
有可能得到这个相同的输出结果
我们可以看到下面列的这个两个例子
实际上就是多对一的这样一个输出结果的一个例子
可以给大家复习一下
实际上这也是Checksum怎么样计算的
我想可以通过这个例子也给大家
稍微复习一下TCP还有这个IP
它们在这个header里边那个checksum field
是怎么样计算出来的
还有UDP也是这样子
UDP也有一个checksum的这样一个field
那么我们可以看到在这个例子里面
这个message本身它是这样一段的信息啊
它写的是I O U那英文因为I O U
听起来就像是I owe you 就是我欠你的对吧
I O U I owe you 100.99 Bob
虽然这个信息它因为重新的被排列整合了一下
它的这个格式
那我们可能看的有一点别扭
但实际上这是一句话
这句话实际上是相当于Bob打的一个欠条
说的是说我欠你一百块九毛九
就是I owe you 100.99 Bob
就是Bob的一个小欠条
那我们为了做这个Checksum的运算呢
Checksum它的运算就是说
我们把原文分割成等长的段
然后我们把这个等长的段再这样列起来
竖着列起来
列起来以后呢
我们对这新得到的这个
二维的这个编码做进行二维码的
这种相加的运算
那我们可以看到就是把
I O U 100.99 Bob 这句话
重新的把它翻译成ASCII code
就是我们可以看到在ASCII format里面
它的表达就是左边的这个hexadecimal number
这个16进制的数字的这种表达
就是49 4F就是每一个
它相当于是代表了一个二维码的一个数字
只是用这个16进制数来表达出来
那我们可以看到它ASCII format
是这样子三行数字
那我们对这个三行数字进行相加
就得到最后一行
这个B2 C1 D2 AC
这样一个16进制的数字
这个数字是它的这个hash functions的结果
就这个Checksum它的结果
我们在这一页的右边还可以看的到
如果我把这个信息改一下
就小小的做些改动
变成I O U 900.19 Bob
就是说我把它从I O U 100.99 (Bob)
变成I O U 900.19 Bob
变完了以后的这个信息
我对它做一个ASCII码的转换
放到这个ASICC format ASCII这个格式里面去
然后呢再重新相加得到的结果
和左边的这条信息的Checksum
实际上是一致的
所以说这个就是两个不同的输入信息
它实际上产生了相同的函数输出结果
其实这种形式呢
是我们不希望看到的
当然同学们应该也都知道Checksum
它本身是一个非常简单的hash function
就是很粗浅的hash function
它能够在这个TCP UDP里面
就像这样子的那个协议里面
做简单的这个就是message integrity checking
但是呢它没有办法做到很复杂
也没有办法做到很精确
那我们下面来看一下
其他的这种信息认证码的一些其他算法
信息认证码英文叫Message Authentication Code
缩写是 MAC M A C
那我们一看MAC这一个缩写呢
就立刻会想到这个数据链路层上的MAC address
这个此MAC非彼MAC
就这个MAC不是那个MAC address
那个MAC
虽然说它们的缩写是一模一样的
在这个编码解码学里面
MAC stands for Message Authentication Code
这个MAC Message Authentication Code
它的作用是用来
对一段信息的完整性进行评测的
那这个MAC我们一般是怎么样生成的呢
是这样子的我们看一下这个上面的图啊
那我们有一段这个s 一个s这个信息
它实际上相当于
是一个共享的一个秘密的信息段
同时呢我们还有一个相应的这个原文信息message
message后面加了一个共享的秘密信息段
你可以把它想象成就是password
这样子的东西
那这个message和它的共享秘密信息段
被叠加在一起
同时一起输入到这样一个哈希函数里面
这个hash function H()里面
那得到了一个哈希结果
一个红色的小长方形
代表这个是我们的哈希结果
那这个哈希结果呢它呢再被加到原文上
这个hash function的result
直接被加到原文上
原文也没有被加密
然后这个原文和哈希结果的这个MAC code
一起通过网络传送到
对方的接收端的终端上去
这个呢其实已经完成了一个
所谓这个信息完整性的一个加密的过程
但是有任何东西被加密了码 not reall
并不是真的是有这个用什么encryption key
来做加密没有这样的过程
我们只是对一个secret key
一个secret 一个shared secret加到原文上
然后呢把整个这个arrogation 这个叠加
得到的这样一个数据段
输入到一个哈希函数里面
得到了一个哈希结果
那这个哈希结果里面包含的信息
就已经有了那个shared secret它的信息
也就说那我把整个这个
MAC code加上原文
一同通过网络送到接收方以后
接收方做什么呢
接受方它应该是
已经知道了这个shared secret s
s应该是已知的
那接收方可以看的到原文
原文没有被加密在这个地方
加密原文不是目的
这个message confidentiality
就是信息的私密性
在这个地方不是目的
我们在讲这个技术是 integrity checking
是信息完整性的的这样一个检测
所以我们要能够判断信息完整性
这个是我们的目的
那原文在这里是in the clear
就是说原文
是完全没有被加密的
我们接收方收到了原文
收到了MAC这个code
在那个红色的这个小长方形里面所表达
那同时呢这个接收方
也已经有了这个共享的秘密信息段s
那接收方可以做什么呢
接收方可以自己把共享的秘密的这个信息段
和原文这个message放在一起
把新的这个数据段
放到同样的一个hash function里面
去进行运算得到了一个结果
这个结果可以跟这个sender就是发出方
发过来那个小红块里面的那个结果进行比较
如果这个接收方自己算出来结果
和发出方发来的结果hash function的结果
相比是一样的
那么我们就能够证明
一个什么事情呢
实际上是证明了两个事情
一个是说我们可以证明发出方
就是那个发出方为什么
因为这个hash function的结果里面
有了那个shared secret
有那个信息
那按道理讲应该只有那个发出方
有这段shared secret
有这种共享的这个秘密的这个信息段
所以呢因为这个发出方可以对这个共享秘密信息段
进行成功的做这个哈希函数的这样一个过程
那又被这个接收方
可以去确认它的结果是正确的
那这个确认结果呢
就可以反过来证明
那个sender就是这个应该的这个发出方本人
这个实际上是它间接地完成了authentication
这样一个服务
这个是我们刚刚
讲过其他方法可以做到authentication
但这个在我们此时此刻
这个这页slide上面提到这个方法呢
是一个很简单的authentication的认证方法它也做到了
然后第二个更重要的步骤 它完成的一个服务
就是我们这部分内容讲的重点就是message integrity
它可以通过做哈希函数的这个运算
以及对哈西函数结果的比较
发现它们两个是可以被对上号的
那就说明我接收到的信息
是没有错误的 是完整的
所以这个就是通过这样的步骤
对message integrity我们做了一个确认
那在这个过程中呢
因为我们此时所要接触的知识点
会是我们希望探讨的知识点
是message integrity是信息完整性
那我们暂时不去考虑这个信息的保密性
所以整个过程是无需加密的
刚刚这个过程呢也可以被称为这个keyed hash function
这个keyed hash function里面这个key
实际上就是s那个little s
共享的这个秘密信息段
那数学表达呢就是下面这一段啊
就是MDm = H(s||m) ) ; send m||MDm
它是这个MD这个code得到的结果
那这个MD这个code呢
同时和原文一起被发给接收方
这是整个这个MAC算法
那后面的稍微的改进一点点
那就是我们会有这个哈希消息认证
就是Hash based Message Authentication Code
HMAC的算法
这个就是多加了一步又再加一步
我们仔细读一下这几个点
这个HMAC算法它是怎么样做的
首先我们要知道这个HMAC算法
它是一个比较重要的信息认证标准
它修补了一定的安全漏洞
那它整个运行过程是这样的
我们首先呢
需要把一段收发放共享的
秘密代码加到这个代传的信息上
这个就是我们刚刚看到的那个shared secret s
然后呢我们对衔接了这个秘密代码s的
代传信息m一起啊做这个hash functions的处理
得到了信息摘要得到了这个message digest
然后呢我们再把这个秘密的代码
再一次衔接到信息摘要上
这是两步双重的衔接
那这个时候呢我们实际上是把message digest
和那个s再接一遍
然后把对接了这个秘密代码的信息摘要
再一次做哈辛函数的处理
做两步哈希函数处理
这个是Hash based Message Authentication Code的精髓
这个就是给大家稍微介绍一下
那实际应用中的哈希函数算法
我刚刚提到过两个非常重要的
一个是MD5 hash functions
另外一个叫做SHA-1
就是说这两个哈希函数是非常重要的
是真正的用在了这个实际的网络安全协议的
信息认证的这个技术里面的
MD5的这个hash functions 它的主要的特性呢是说
它是通过一个四步的一个计算过程
得到了一个128位的这样一个输出
那SHA呢它得到的生成的结果呢是160位的
这个呢我希望就是大家如果
有机会的话可以线下自己去看一下相关文献
而且就像我在最开始讲过的
编码解码学本身它可以是一个很重要的一门课
那我相信就是后面我们会有后续的专门的课程
来进行编码解码这些算法的解释和证明
我把那些知识点呢留到相关的课程上去讲
好下面我们来小小的看一个例子啊
就是说在这个现实的这种计算机网络的
这个运行过程中
这种hash function
它是怎么样被真正的
实用的计算机网络的协议用上
去做这个信息认证的
那我们拿OSPF来举例
OSPF是一个routing algorithm
是一个路由器上用的
存储转发的这样一个路由算法
很重要的一个算法
这个算法呢给大家提个醒
因为这个算法同学们应该已经学过了
那它是一个基于shortest path的一个算法
就是基于最短路径的算法
那就这个内网中每一个路由器
它们都各自独立的计算自己的这个
link-state information
就是我到其他的路由器的最短路径是什么
更新的时间段更新的这个周期呀
我对每一段时间我算一个
现在我到内网中的其他路由器
我的最短路径是什么
我算完了以后这个link-state vector
这个信息要共享给
我直接相连的其他的这个neighboring
就是邻居的这些路由器上
我必须要告诉它们
当这个基于OSPF这个routine algorithm
我们每个路由器
在收到其他的邻居的路由器
发给我这个link-state information以后
这个叫做link-state的这个链路状态表啊
我们每个路由器收到其他的
邻居发来的链路状态表以后
我们都要对自己的链路状态表
做重新的这种计算更新
那这个时候呢问题就来了
大家可以想象如果我的邻居在撒谎
或者是说如果在我和邻居之间有一个第三方
这个第三方是个hacker 是个Trudy
她想把我们这个信息截获并且篡改
如果我一旦收到了这个link-state information
是错误的 是不完整的
那会有什么样的影响呢
显然他就会对我整个这个
路由算法这个routing algorithm
得到的结果会有巨大的影响
那会影响到我之后
这个其他的真正的网络包
过来以后我做存贮转发
这样的速度也好包括它准确性都会受到影响
这是一个很大很大的一个破坏
那所以说呢在这个OSPF和类似这些路由算法里面
包括其他的很重要很重要的BGP
这个Border Gateway Protoco
也是就是说inter-AS之间的这个gateway的这种routing算法 BGP
还有RIP 还有IS-IS 这些routing algorithms
都存在类似的这样的顾虑 这样的问题
就是说我拿到其他的这个相关的相邻的这些设备
它们发给我的信息以后
我是不是能够真正信任这些信息的准确性
信任这些信息的完整性
这个是我需要考量的
我们怎么样能够把这种
就是message integrity这样的服务
提供给像OSPF这样子算法呢
那我们基本上就可以做这样子的一些假设啊
我们假设一个内网中每个路由器
都会和相邻的路由器之间交换这个链路状态信息
那我们在这个交换的链路状态的信息中
我们就可以加MAC或者HMAC
这样的message digest这样的数位
来进行这个路由本身链接状态
信息的认证也好 还有就是它的完整性的认证
那OSPF协议也确确实实
提供了以下几种选择
你可以选择我不做任何认证
我就相信我这个内网的所有路由器
都是非常secure的就是非常安全的不会被攻击
那好那我们就不做任何认证
我们对其他的这些路由器发来的这些信息
我们不做任何认证
就是no need for verification
这是一种选择
另外一种选择就是说
我们用共享密码认证
就是把共享密码加入到OSPF表头的
一个64位的这样一个认证区间里面
我们可以用共享密码这种方法去进行认证
还有一种呢就是
我们刚刚提到的用哈希函数加密认证
那基于MD5的这个哈希函数加密呢
实际上也是这个被广泛地用在OSPF
就会说类似于OSPF这样的算法里面
OSPF它确确实实也有用到MD5
这样的哈希函数认证方法
那么我们具体这个哈希函数它怎么样做呀
然后对于这个一段原文怎样进行处理啊
我们刚刚在讲这个message address的时候呢
基本上提到了
那具体方法基本上就是我们刚提到类似的方法
只是函数本身那个H( )有可能是被具体的一个函数
比如说MD5所取代
好 那我们现在做这个收发双方的认证
有这个信息的认证 还有收发双方的认证
收发信息的双方都希望确认对方真是其人
这个是收发双方的身份的确认
假设Alice和Bob有一个共享的密钥
那么这个MAC可以做收发双方的
身份的这个认证吗
这是一个问题啊 可以吗
假设我们知道是Alice生成一条信息
但是这信息真的是Alice发的吗
这个问题实际上是跟我们再往前一点讲的这个
authentication实际上是结合的
所以说authentication和integrity
actually 我们实际上是完全可以就是在技术上面
把它们结合起来用的
好我们现在先回过头来还是看一下这个问题
就是实际的例子有什么 下面这个slide呢
给大家看到是一个很好玩的例子
这个例子上呢就是一个很逗啊
这个我们Alice是想要给那个Bob发一段信息
这个信息是什么呢
是说这个从Bill的账上给Trudy转一百万美金
那么挺多钱的
然后这个Trudy呢她把这句话给听见了
那那个Alice在发的这个过程中
她把这个原文送上去
因为我们刚刚讲过这个message digest一般
我们可能对原文是不加密的就直接传出来
那Trudy可以看到
从Bill的账上给Trudy转一百万美金
同时呢Alice对这一段信息她做了一个
message digest的一个计算就算出来一个MAC
MAC这个code message Authentication Code
并且把这个MAC
给接到这个原文上去
整个这一段一起发出去
那发到网络中Trudy看到了
并且把它录了下来
就是从Bill的账上给Trudy转一百万美金
同时那个MAC那个message Authentication Code
也一块被Trudy录了下来
那这个时候那就是说
Bob第一次他收到了Alice发来的这个信息
他给Trudy转了一百万美金
那Trudy贪得无厌
她还想说我还想再要一百万
那我下一次呢 Trudy就把
刚刚录下来那一段包
我再转给Bob一次然后再转一次
每一次Bob收到以后
因为它都有那个相应的MAC
这个message Authentication Code
并且这一段MAC
都可以被Bob去确认这是正确的一段MAC
那就说明这个信息是ok的
那Bob呢就会每次都给Trudy再去转一百万美金
那这个Trudy可以这样子就发财了
那这种攻击就又是一次录播攻击
那我们怎么样去防止录播攻击呢
我们刚刚已经讲过了
但凡你看到录播攻击
你就立刻想到一个词叫nonce
就是这个一次性的筷子
一次性的这个代码
这个nonce R我们就可以用到
预防录播攻击上
那具体的是怎么用呢
我们可以看一下下面这个例子
基本上就是说是这样子用的
Alice跟Bob讲I am Alice
Bob立刻发给Alice一个R一个nonce
然后这个时候Alice呢
要计算一个message Authentication Code一个MAC
这个MAC的结果呢
它是根据原始信息那个message
和Alice和Bob之间那个shared secret s
还有这个nonce R一起三部分的输入
算出来的一个MAC
这个数位这个message digest
那也就是说在这个新的这个MAC里面
已经包含了那个nonce的信息
这个nonce不要忘记是一次性的
也就是说即使是这一回
Trudy又把这个信息截下来
我下一次再replay
再给Bob就是重新播放以后
Bob一定会把它扔掉为什么
因为那个R已经用过了
而且呢因为它是nonce
nonce性质呢就是我只能用一次
所以Bob如果再看到带有同样R这个信息MAC过来
那就说明基本上这个信息是不可靠的
可以立刻被Bob扔掉
这就是如何防止录播攻击
好下面我们来这个
讲一个大家应该都听过很多次的
这样一个概念叫做电子签名
电子签名的英文叫digital signature
电子签名现在因为我们网上有各种各样的文件
也经常会有各种各样公司跟你说
我们可以提供电子签名的服务
或者是说就是某些比如说
你想在网上签个合同买房也好
或者租房子也好
有时候呢对方的这种中介
他就可以直接在这个
网上给你生成一个文件
然后让你用电子签名的这种方式来做
那不管怎样我们这个电子签名这种应用
它背后的这个技术上面是怎么样支持的呢
我们先在下面一段知识我们来看一下
这个电子签名是怎么样工作的
我们可以通过电子签名
基本上呢可以是实现
类似与手写体签名的这样一个技术
那么它的这个idea是这样子
就是说发出方Bob
他通过电子手段给一份文件签名
那这个电子签名技术呢
需要使用这个public key
和private key这个钥匙对
来实现这个信息的认证
和这个信息认证类似这样一个效果
从而认证这个签字的发出方
确确实实是这个签字方本人
我们希望能够得到的结果是说呢
Alice是可以确认
已经签过的这个信件或者说这个文件
一定是Bob签的不可能是别人签的
就是它可以确认并且无法伪造
这个是电子签名技术上的这个需要达到目的
那么我们如何给一段信息
做这个简单的电子签名呢
那下面这一页幻灯片上
我们就可以看到一个简单的例子
在这个上面呢Bob用他的私有的这个密钥 私钥
给一段信息m加密
得到的这个密文
基本上我们就可以说
是Bob签好名的这样一个文件
那比如说我们在这个slow char上面可以看到
Bob的message是说
Dear Alice
Oh, how I have missed you.
I think of you all the time! …(blah blah blah)
Bob
这是Bob给Alice写的一封短信
那这个时候Bob想要用电子签名的方式
来向Alice证明我就是我
那怎么样去做呢
Bob用他的private key
为什么要用private key
应该还有印象我们这个讲的并不久啊之前的
在这个public key infrastructure里面
private key就是一个私钥
是只有这个设备本身
当时这个签的这个网络设备
它自己才拥有的
私钥是自己拥有的那一部分
那只有把它相应的那个公钥的
那个相应的对啊是可以被发送给别人的
但是Bob的私有密钥只有可能是Bob拥有
Trudy不可能有
另外像其他人像什么sunday也不可能有
只有Bob有可能有Bob的自己的私钥
所以说当Alice能够用Bob的公钥进行解密的时候
那这个过程只要能够成功
Alice就其实已经认证了Bob就是Bob
因为Bob他
只有用Bob自己的私钥去加密的密文
Alice才有可能用Bob的公钥来进行解密
这个是我们之前已经学到过的逻辑啊
那我们下面的就看这样一段这个电子签名
它实际上在我们真正的网络安全的
这个协议的应用中
电子签名就等于是签了字的信息摘要
信息摘要是什么来着
信息摘要我们刚刚讲过了
信息摘要实际上它是一段哈希函数的值
它是我们之前这个MAC
就是Message Authentication Code
那个实际上就是一个信息摘要
那电子签名就是我不但有一段信息摘要
而且我要对这段信息摘要进行加密
我用什么加密用private key做加密
就是说是我签了字的信息摘要
就这样一个概念
这个就是电子签名digital signature
就是这样子一个大概的概念
让我们看一下这个80页上面的
这个小的这个slow char
在左边我们看到Bob发出
被电子签名过的信息
它是什么样的一个信息呢
我们首先有原文m
m呢它会被送到这个哈希函数里面
做一下哈希函数的计算
得到的是message digest
就是哈希函数这个值
那得到哈希函数值以后
Bob用它自己的private key它的私钥
对这个哈希函数值H(m)做加密
这个生成的这样一个结果
就是加密的信息摘要
实际上生成的这个结果就是digital signature
就是我的电子签名
Bob要向网络中发出了什么呢
就是这个信息原文本身
和相应的这个签章这个电子签名
这样的话呢接收方向对方能够证明说
这个文件是我签署的
那到了接收方Alice这边它要做什么样的一些步骤
来去确定这个东西它确确实实是可信的呢
Alice收到了从那个邮箱里边
她拿到了一段信息出来
一段原文信息m
因为Alice她也有相应的哈希函数
所以呢Alice对这个原文m
做哈希函数处理她得到了
一个哈希函数值H(m)
同时呢在这个Alice接收方
她还接收到了什么呢
还接收到了Bob的这个digital signature
就是用Bob的私有密钥
加过密的这个哈希函数结果
message address就是这个哈希函数结果
那这个时候Alice可以做什么
因为这个哈希函数的结果呢
是用Bob的private key做的加密
所以Alice就可以用Bob的public key来进行解密
所以这也是exactly
正是这个Alice她做的事情
就是说我拿到这一段
Bob的digital signature
我用Bob的public key
把这个digital signature给解密一下
解密得到什么结果呢
得到的是那个哈希函数的那个值
就是那个message addressed
这样我把两个message addressed就可以进行比较
因为Alice她自己还算了一个message addressed
这两个是不是一样的
如果是一样的话
那好那我相信
这个文件确确实实是Bob签署的
这个过程就是电子签名的
整个的工作过程
那我们下面接着看
那假设Alice收到了信息m
以及Bob的电子签名KB minus(H(m))
这个就是Bob用他private key
签的这个message digest
Alice通过用Bob的公钥解密Bob的电子签名
以此她可以检查通过这个解密签名得到的信息
是否跟那个他自己算出来的
这个hash functions是一致的
如果是一致那就ok了
如果上面这个等式是成立的话呢
那就不用说了这个不管是谁
给这个m签了字
那个签字的人一定拥有Bob的私钥
这个是很重要的
那very lucky
就很有可能它就是Bob
如此呢这个Alice可以确定以下几点
这个文件是Bob签的字
第二 没有其他人可以给这个信息签字
第三 Bob签的信息的内容是m
而不是m’
这个也是很重要的一条
我们就是说通过这个过程
可以来进行的判断也是很重要的
如果上述几条检验的结果都是真的
那么Alice就可以用信息m
以及Bob的电子签名作为证据
证明Bob的签字是真的
这个是整个这个
电子签名这个过程它是怎么样工作的
那么刚刚我们讲的这一段这个技术
它是不是无懈可击的呢
是不是说我不太可能就是有别人来伪造
这个Bob的签名呢
答案显然是否定的
那我们来重新回顾一下刚刚
我们就是之前讲过的这个
认证算法5.0的安全漏洞
同样的刚才我们讲的这个电子签名的这个情景中
我们还可以看到Trudy
Trudy她还可以是个中间人
她还可以做这个所谓中间人的attack
那同样的程序Trudy她可以对Alice假冒自己是Bob
她可以对Bob假冒自己是Alice
两边的过程就是她可以通过
Alice这边拿到这个原文
因为原文我们说了在这个过程中
暂时我们是没有加密过的
那Trudy可以对Bob假冒我是Alice
那基本上呢Alice可以签的字她都可以签
或者Bob可以签的字她都可以去进行认证
所以就是在这情景里面Man-in-the-middle attack
还是可以工作的
那这样的话我们怎么办呢
我们现在再看一个这个具体的
一个漏洞的这样一个案例啊
那比如说这个Trudy她可以play pizza prank on Bob
pizza prank是什么意思
我们来看这是一个很好玩的例子
第一步Trudy呢用一个电子邮件点了一份pizza
这个pizza这个电子邮件上说
您好 请给我送四张香肠饼的pizza 谢谢 落款是Bob
这封信是Bob写的吗 当然不是
它是Trudy写的
但是呢没有关系因为Trudy她现在在假冒Bob
因为她是Man-in-the-middle
Trudy用她自己的这个私钥
给这份订单签了个字
说这是我要的 我是Bob
我要四份香肠的这个pizza
那Trudy把这个自己做好电子签名的定单发给谁呢
发给了那个比萨店的这个店主
店长也好或者店员也好说我要order pizza 4份
同时呢Trudy又把自己的公钥
也发给了这个pizza店
pizza店就说好那我可以用这位
这个Bob先生发来的这个公钥
实际上这个公钥是Trudy的公钥来解密
这个Trudy用自己的私钥去加密的这一封信件
那得到的结果是说这个pizza店看到了
有位Bob先生他在我们这要订了
4份这个香肠的比萨饼
好 那这个比萨饼店呢通过收到的这个公钥
解开了这个信息以后他看到了这个信息
就做了4张比萨饼并且给Bob送去了
可这个时候其实Bob收到的根本不是他点的比萨饼
更糟糕的是Bob可能他非常讨厌次香肠
那这样子一个过程就很好笑
但小小的这样一个小的例子中
我们可以看到实际上刚刚我们讲到的
这个就是电子签名技术
如果不经过巩固的话
不经过改进的话它其实是非常脆弱的
很容易的就是Man-in-the-middle也好 来这样做攻击的
那整个这个过程我们看这个漏洞案列的
过程的最关键的一步到底是哪一步出了问题
想2秒钟哪一步出了问题
就是这一步
就是Trudy把她自己的公钥发给比萨店
并且谎称呢这个公钥是Bob的公钥
问题的关键最大的漏洞就是说
任何人都可以对别人讲我就是某某
这里是我的公钥 这个公钥没有被认证
公钥本身没有被认证
这个就是一个很大的安全漏洞
这个就好像说是一对情侣
高高兴兴他们去结婚了
他们两个人说我们俩结婚了
但他们的这个婚姻没有被认证
很像的这样一个概念啊
那我们现在在这种情况中
我们需要提供什么样的服务
才能够让这个认证的这个关系能够成立呢
就是我们下面要讲的这个
数字证书的认证机构
就是这个Certification Authorites -CA
这个数字证书的认证机构呢
它实际上是专门为这个public key这样的问题来产生的
它的最重要的目的
就是说我要对一个设备
它发出来它这个announce
它广播出来的这个公钥进行认证
认证什么呢 认证这个公钥
就是这个设备他本人的公钥
就是你的这个picture ID你的这个身份证
所相连的那个人就是你而不是别人
你没有去假冒别人这个是最重要的
这个是CA所要做的最重要的一件事情
那CA呢它的主要功能是将公钥
和其相应的通讯实体entity E来进行绑定认证
我把这个公钥段和这个网络实体
进行绑定这个是CA要做的事情
那这个网络实体呢它可以是终端的用户
可以是路由器 可以是中央处理器
可以是web service email service这些等等等等
需要向数字证书认证机构呢
注册它的公钥就是这个entity
绑定我自己和这个公钥要相关的这个关系才行
那这个entity要向CA提供自己的身份证明
同时呢这个CA就会建立一个证书
这个证书呢是用来绑定这个entity E和它的公钥的
CA生成了这个证书以后会把这个证书
发给那个entity发给那个网络实体
那以后如果要是说 Alice再跟Bob
要Bob的这个public key
那Bob呢不会直接把自己的public key发给Alice
他会发给Alice什么呢
会把这份证书发给她
他就这个是我被认证过的 这是我的公钥
那这个证书是什么呢
就是在绑定了以后这个CA它要
对这个证书盖了戳
就是说我这个CA
这个Certification authority
它要对这个绑定的证书做一个电子签名
用什么签呢 用CA自己的private key
那我们在这个网络的这个世界里面
我们就只好相信这个CA是可信的
有的同学这个可能会很聪明的想到
那CA有可能也会有伪造
事实也确实如此
CA是可以被伪造的
但是呢CA被伪造是很难的
因为它可能有多重保护
还有呢就是说我们就是相信它 我们相信这个CA
它做的认证就是可信的
那这样的话那CA的public key
是被大家知道的一个public knowledge
这是公有的知识
那CA的private key只有它自己拥有
所以说被CA签过字的这些认证的证书应该都是真的
这个就是我们现在就暂且相信它一定是真的
从此以后呢还是讲这个
Bob他要做的事情就是如下几步了
Bob他先生成自己的这个public key
和private key的pair
这一对钥匙他先自己去生成一下
然后呢他要把自己公钥的那一部分进行认证
就是他会把自己的身份证明
和这个公钥一起发给CA
CA将这两组信息进行绑定认证得到一个证书
并且给这个证书盖个章
这个章就是CA的电子签名
电子签名什么来的
电子签名是用自己的私钥加过密的message digest
那CA用它自己的这个电子签名
给这个证书进行认证然后返还给Bob
那in the future就是将来从此以后
如果要是有任何人
想要能够拿到Bob的这个公钥的话
Bob不会把自己的公钥直接发给对方
而是会把这个CA认证过的
公钥的绑定公钥 这个证书发给对方
那对方拿到的是一个什么呢
是一个用CA的private key 加过密的
或者说认证过的这样一个证书
那这个时候如果我是个接受方我是Alice
那我拿到了这个Bob发给我的
这个认证过的公钥的证书
我要做的事情是用CA的public key来进行解密
来去确定 这个证书是真的
那因为我可以用CA的public key进行解密
我就可以看的到这个证书里面的Bob的public key
这个是我怎么样得到
Bob的public key正确的做法
那最后我现在给这个电子证书呢
做一个小小的总结啊
我们在这个电子证书这一个领域里面呢
一个比较重要标准是 X.509
这个大家有兴趣可以去读一下
那这个一般而言
在实际的这个操作过程中
电子证书的内容却是包括以下几项
它有发证方 发证方就是CA
然后被认证的个体
就是这个网络个体这个entity
这个entity的名字
它的网络的地址域名等等等等
还有呢就是这个证书也会包括
被认证的个体的这个公钥
以及这个证书它要有自己就发证方的电子签名
这个发证方的电子签名
就是发证方用自己的私钥签的名字
那公共密钥的这个框架
这个Public-Key Infrastructure-PKI这个框架
它呢一定要包括这个电子证书
和这个证书认证机构
整个的这个结构呢
相对而言还是比起这个shared key的
这个结构呢要复杂许多
到此为止了我们基本上对这个编码解码学呢
做了一个大概的这样一个概述啊
不过呢我相信虽然是概述
但是呢我们这个shared key infrastructure 和public key infrastructure
这个最重要的这种精髓已经讲到了
包括这种个体的这个authentication
还有integrity这种完整性的证明
我们都已经触及到
还有这个电子的这种签名
还有这个信息的摘要
这些知识点都是非常重要的
希望同学们至少以后提起来
大家能够有所印象
如果要是想做深入的了解呢
还是讲这个编码解码学本身
它其实还是蛮博大精深的
就是它自己可以自成一门课
也希望大家能够关注
有相应的课程
以后呢会被推出
那欢迎大家可以去选修相关的课程
-第一节 电子邮件e-mail的安全
--Video
-第二节 计算机网络的服务
--Video
-第三节 网络协议的分层结构
--Video
-第四节 网络数据包的传输过程
--Video
-第五节 实例演绎计算机网络通讯工程
--Video
-第一节 计算机网络为什么不安全
--Video
-第二节 网络安全技术需要提供的服务
--Video
-第三节 网络安全讨论的情景设置
--Video
-第四节 黑客有可能有哪些攻击网络安全的手段
--Video
-第五节 网络中的恶意软件
--Video
-第一节 编码解码学的基本概念
--Video
-第二节 攻击编码解码技术的方法
--Video
-第三节 共享密钥加密法
--Video
-第四节 公共密钥加密法
--Video
-第五节 鉴别认证
--Video
-第六节 信息完整性
--Video
-第一节 电子邮件E-mail的安全
--Video
-第二节 传输协议(TCP)的安全:隐秘套接字协议(SSL)
--Video
-第三节 网络层安全:IPSec
--Video
-第一节 WEP的设计和问题
--Video
-第二节 802.11i改进机制
--Video
-第一节 防火墙概念及目的
--Video
-第二节 三种防火墙
--Video
-第三节 IDS(Intrusion Detection Systems)介绍
--Video