当前课程知识点:网络安全概述 > 第三章 编码解码学 > 第三节 共享密钥加密法 > Video
好下面呢我们开始学习一下共享密钥加密
这部分知识是什么样的
就是Shared secret key encryption algorithm
它们是怎么样进行工作的
这个symmetric key呢
还是说Alice有一段原文m
Alice呢她和Bob他们两个人
共享一个同样的一个密钥叫做Shared key
或者也叫symmetric key这个Ks
Ok那Alice她用这个Ks对原文m进行加密
这个Ks和原文被放到这个加密算法里面
然后得到密文Ks(m)
那这个密文和同样的这个钥匙Ks
被Bob放在这个解密算法里面呢
得到了原文m
在共享密钥加密的这样一个知识框架下
最重要的一点知识大家需要知道的是说
这个Sender和Receiver这个收发两方啊
他们两个人所用的
这个加密和解密的钥匙是一样的
这就是为什么我们说它是symmetric key
或者叫做Shared key
这个是很重要的一个区别于
这个公共密钥结构的一个概念
就是说在共享密钥中
我们的Sender和Receiver
他们用的是同样的钥匙
在这个共享密钥加密的算法里面
有一个非常关键的问题是说
Bob和Alice之间
如何事先商量好用哪一个钥匙
这个呢在不同的网络安全的算法里面
会有不同的处理手段
但这是一个非常关键的一个问题
就是事先我们两个人怎么先商量好
我们共享这个钥匙是什么
在就是不被别人知道的情况下
你不要忘了因为我们在讲的是网络安全
就是说这个Sender和Receiver这两者啊
这个发出方和接收方
他们应该是不见面的
那他们在不见面的情况下
怎么样事先协商好
这共享的钥匙是什么
这是一个比较有趣的一步
那这是做为这个
共享密钥的加密算法呢有两大类
一种第一类叫做流加密Stream ciphers
第二类叫做区块加密Block ciphers
好那我现在先回来稍微讲一下这个流加密
流加密的意思是说
对这个数据呢做一个比特一个比特的加密
这个原始数据啊这个原文
我对它进行加密
我是一个比特一个比特这样子去进行加密
而区块加密呢就是说
我把原文切割成段
我对每个数据段一段一段地进行加密
叫做这个Block ciphers
Ok这是两种共享密钥的加密算法两大类
那我们先来看一下
这个流加密是怎么做的
我们呢在上面这个图上我们可以看的到
首先呢在流加密里面呢我们有一段
这个共享的这个钥匙啊
这个key它先要被放到一个keystreamgenerator
这样一个函数里面去
生成一个密钥流keystream
然后呢这个keystream是真正用来
对原文进行加密的一些比特位
那么在流加密里面呢
我们会将原文中的每一个比特
和密钥流中的每一个比特相结合
一般这个所谓的结合的方法呢
就是求异或xor做异或运算
从而算出相应的密文的比特位
Ok那在这个Slide上面呢
我列出了一些这个数学的一些表达
就直接用英文来做阐述了
这样比较简单一点
也比较忠于这个原文一些啊
这个m(i)就是第i个
在message里面的第i个Bit
就是 ith unit of message原文
原文的第i位
ks(i) 是keystream 就是密钥流的第i位
那c(i) 是ciphertext第i位
Ciphertext就是密文
密文中的第i个比特是c(i)
那我们知道了m(i) Ks(i) C(i)
我们现在就要看一下它们之间的关系
那这个密文啊
这个ciphertext第i位我们怎么算呢
就是把这个密钥流的第i位
和原文的第i位求一个异或
异或算法应该也还记得哈
这是Binary competition的
最基本的一个计算
那这个C(i)呢
就是说还是那个ciphertext第i位
我们实际上是通过
对这个keystream的第i位
和这个原文的第i为求异或
这样一个计算得到的
那原文怎么样重新被解密生成呢
不要忘了在这个里面
我们讲的是
Shared key symmetric key infrastructure
也就是说这个keystream实际上是一样的
Sender和Receiver它用的是
一模一样的这个密钥
那在接收端我想得到原本
我就很简单做一个操作是什么呢
就是用同样的密钥流的第i位
和密文的第i位
我求一个异或关系
得到的结果就是原文的第i位
那么这个是流加密的一个非常简单的
这样一个解释
那流加密中这个比较重要的一个例子
就是RC4 algorithm
这个呢我想请同学们自己
如果有兴趣的话
可以去深入的学习一下
下面我们讲这个区块加密
区块加密它跟流加密
还是说这个不同的地方
是在于区块加密呢
是对原始的数据段
我们把它进行分段先分割
我们不要在一个Bit一个Bit的进行运算
这样可能比较费事
那我们把这个原文进行
一段一段的进行加密
就是把数据信息分成k比特长的
等长的信息块
注意啊要是等长的信息块
之后呢以信息块为单位进行加密
比如说k可以是64比特长的
这样一个block
那加密的时候这个一一对应关系
实际上以k比特长的字符串为单位的
这是非常关键的一个知识点
因为这个k的比特长
它三个Bit的话
这个长度有可能还比较容易去进行处理
但如果K是64位的话就非常复杂了
那么好下面我们看一下这个例子啊
例如这个当k=3的时候
K=3在这个binary number System里面
就是三位长字符
那我们有多少个三位长的字符呢
就三位长就是每一位
它都有可能是0或者1对吧
那三位长还是说
它是一个比较简单的一个case
就是三位长会有八种不同的表达
比如说像我们这个Slide上面看到的啊
有000 001 010 以此类推一共有八种
这是原文有八种形式
那它相应的密文在区块加密的时候
就像我们刚刚讲过的
它是以k长成为单位的
而不是一个比特一个比特来做
所以呢那我们可以看的到
在这个例子上
这是给出了一种密文的对应方法
这只是一种可能
Ok那在这个例子里面呢
我们是说原文000
它对应的密文就是110
如果原文是001
它对应的密文就是111
Ok原文是010的话
它对应的密文是101以此类推
那我们现在已经列出了
八个原文和密文的这样的对应关系
在这个例子里面
那我们看一下这个原文如果是
010110001111的话如果这是原文
那根据刚刚的这个例子里面
写出来的这个对应关系
这段原文的密文应该是什么
我们三个字节三个字节的进行加密
因为它是Block cipher是区块加密
所以说这个小的问题
它的答案就是我们可以很快的找出来啊
因为我们已经给出了
它一一对应的关系
010对应的是101
所以大家可以写一下
这个密文的前三位是101
原文的第二个三位数是110
那我们就找110对应的是000
所以它的密文相应的是000
原文的第三个
三位数是001
那在上面的对应关系里面
001对应的是密文是111
所以第三段是111
那它的相应的密文
这个对应规则是001
也就是说密文的最后三位是001
大家可以把这个整个东西串下来
这就是我们这个
相应的这个密文的答案
通过这个简单的例子
我想大家应该对这个区块加密
已经有了一个非常清晰的认识
它大概是一个什么样的
那刚刚我已经提到了这个问题
就是当k=3的时候
到底有多少种一一对应的关系
K=3的时候我们知道
三个字符长的这个二维码
一共有八种这个是很简单
因为它是2的3次方对吧
n个字符长的二维码有多少种表达
就是2的n次方个表达
那当这个k=3的时候
它有多少种一一对应的关系呢
这是两个问题
ok那这个一一对应的关系
实际上是这个2的n次方的排列组合
用数学表达就是说2的k次方
或者2的n次方的阶乘Factorial
也就是说当k=3的时候
3比特长的这个字符
它呢有多少种一一对应的关系呢
就是2的3次方的阶乘
就是8的阶乘
8的阶乘 答案是40320种
四万多种对计算机而言是个小case
其实它真的是并不多的
但是呢当k=64的时候
这个数字就非常巨大了
那它的计算就极其极其复杂
我们可以想象一下
如果真的是k=64的话
我想要把它这个一一对应的关系给列出来
我们要怎么列呀
如果用图表的方法我们需要一个
有2的64次方这么多行的一个表
在这个表里面每一行
还要有64个比特长
这样大的一个表才能够进行检索
那这样的检索时间还是算起来非常慢的
所以我们就需要一些替代算法
就是当你没有办法
把所有的东西都给列举出来的时候
我们就需要用一些
Simulate a randomly permuted tables
ok下面再讲一下
这个Cipher Block Chaining区块链加密
CBC的概念
CBC的概念也是一个非常重要的概念
在这个区块加密里面
CBC呢它实际上是这样子的一个意思了
就是说当前的区块
它的加密的结果
就是它的密文是什么样的呢
这个密文取决于上一个区块的密文
如果我们用数学公式来表达的话
我们可以看的到在这个
C(i)就是第i段密文
它实际上相当于是第i段的原文
和第(i-1)段的密文结合在一起
用这个相应的这个keystream KS进行加密
这个就是区块链加密的一个核心思想
就是CBC的最重要的一个概念
就是说我当前的这一块儿的密文
它取决于i-1那一块的密文
那原文也是相同的概念
原文怎么样恢复呢
就是通过当前这一块儿的这个密文
和前一块的密文来进行
重新再做一下异或运算
和现在的密钥流进行叠加做运算
这个是区块链最核心的
最重要的一个知识点
那现在问题就来了
就是我如何对第一个区块进行加密
因为我讲了就是每一个区块
它是必须要依赖于前一个区块
那我第一个区块
我去这个依赖谁呢
这个问题解决方法就是说
我们一般第一个区块
就是基于一个随机创造的一个
Initialization vector叫做起始项IV值
ok那这个IV值我们会看到
很多实际的安全算法里面
包括这个无线的协议里面
都有提到都有用到Initialization vector
它是一个随机的起始的这样一组数
那一般呢IV值有可能它不是隐匿的
也就是说我们很有可能直接就把
IV的这个Initialization vector的值
放到一个数据包的这个表头里面去
在这个网络中就这样直接的传输
这个是没有关系的
因为知道IV值也不一定知道
后面的这个原文和密文
那我们就是有了这个IV值以后呢
对每一个信息
如果我们变换一个IV值的话
我对同样的一段信息同样的这句
Bob i love you Alice
进行区块链的加密 对吧同样的算法
但是一开始这个IV值如果不同的话
那我得到的密文也是不一样的
就是说每个信息如果我换一个IV值
用区块链加密的方法得到的密文
也是不一样的
不管它其它任何东西都是一样
它的这个Keystream可能是一样
它其它的原文都是一样的
但是因为IV值不同
它得到密文有可能是不同的
Ok那再这个Slide上面
我们可以看的到一个具体的例子了
就比如说这个当原文的
第一个区块是这个HTTP
Slide 是1.1这是原文啊
它通过blockcipher得到了一段密文
这个在上面列出来了
然后当我们加密着加密着到第17个区块
它又是同样的一段原文对吧
同样这段原文
我放到这个blockcipher里面去
有可能这个得到的呢是一样的密文
但是呢如果这个IV值是不同的话
那这两段得到的密文有可能是不一样的
当然了如果你的IV值是一样的
什么东西都不变的话
你的密文也是一样的对同样的原文
得到加密结果是一样的
我们用这个Flow chart
来表示了一下区块链加密是怎么回事
再重复一遍这个地方的一个核心思想
大家一定要记住的知识就是说
我在区块链加密里面
每一段就当前的这一个区块
它的加密的结果
是依赖于上一个区块的加密结果
这样一个关系
那在这一页上面呢
我列了两个比较重要的
共享密钥的加密算法的这个代表算法
一个是DES叫做Data Encryption Standard
另外一个呢就是AES
Advanced Encryption Standard
这两种加密算法是非常重要的
共享密钥加密算法
我建议大家能够就是坐下来
去找相关文献去做这个深入的学习
因为这个编码解码学里面
专门的课程中一般会做深入的讨论
我在这里呢
但是我还是很想介绍一下这个DES
简单的我们来讲一下DES
它是一个怎么样的一个过程
DES against us for data encryption standard
我们可以看的到呢
DES它的输入是两个部分
第一个部分就是
我们把原文分割成64比特的区块
ok那第一个输入就是说64-bie-input
这是原文的区块
第二个输入呢就是56个beat的
这个密钥 是共享密钥
还是讲DES是一个很重要很重要的
共享密钥加密算法
它不同于后面我们将要讲到的
公共密钥加密算法
这个是一个很重要的一个区别
那我们看到在DES这个算法里面呢
它拿到这个64比特的这样一个输入以后呢
它先做一部简单的permutation
就是把这些比特位进行置换
置换之后它得到一个
左边的32位和右边32位
这个时候呢我们可以看的到
这个左边的32位呢
和右边32位被分成两个小段啊
然后呢再和一开始输入的
这个56位的这个key呢
它生成一个四十八位的一个密钥段
那这个四十八位的密钥段
和这个左32位和右32位
一起被输入到一个函数里面
生成一个32位的结果
这个32位的结果就是下一步的右32位
而上一步的右32位
变成了第二步的左32位
那我们可以看的到
在这个这个Flow chart里面的第三行
这个L2和R2
实际上这个L2它就是R1
就是在这个第一步里面的
这个右32位是下一步的左32位
而新的这个右32位呢
是前面那一步的这个函数生成的结果
那我们通过这个
就光是这一步的一个简单的运算过程
我们就看的到
它实际上是一个
Safer block training的这样一个算法
就是说我现在的这个块
它的结果是依赖于上一个块的结果的
就是加密的结果的
所以就以此类推
它做16次这种相同的这样的算法
一直到最后这个L17和R17
通过这16步以后
我在最最后得到的这个结果
再做一次位数的置换
最终得到一个64位的密文
整个这个过程实际上差不多18步对吧
我们有第一步的permutation
然后16步相同的这样子的
这种函数算法
然后做交换呀 加密啊
然后再做交换在加密啊16次
然后再做最终的一次终结排列
那一共是18步的这样一个算法
最最后得到一个64个比特的
这样一个输出
这个输出就是我们最终得到的密文
就是说感觉上讲
它应该也是非常非常安全了对吧
应该已经很难破译了
但实际上也还是有破译的方法
这个是DES简介
那我想呢通过这个例子呢
给大家至少就是描述一下吧
这个共享密钥加密它是一个怎么回事
尤其呢描述一下这个区块链加密
它在实际应用中实际上是非常重要的
因为DES是一个真正用到的
在具体的这个网络安全的
很多协议里面是用到的
这样的一个加密算法
-第一节 电子邮件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