EBU7140 Security and Authentication(一)常见加密算法

news2025/1/20 5:53:44

前言

主要根据 EBU7140 课程内容整理,比较偏向应试~

Block1:介绍课程,传统加密方式。

Block2:公钥加密的原理和应用。

Block3:一些特定安全协议技术(如防火墙 Kerberos身份验证协议等)。

Block4:电子邮件安全,网络安全。

B1

网络安全的意义不必多说。军事领域通信,日常生活交易……

这门课程的标题叫做“安全与认证”,安全和认证分别是指什么?

security system: Deter, Prevent, Detect and Correct security violations of data transmission.

安全系统:阻止、预防、检测和纠正数据传输中的安全违规行为。

安全架构 security architecture

安全架构主要包含三个内容:使数据信息泄露的安全攻击 attack,检测、预防、恢复安全攻击的安全机制 mechanism,防止攻击的进程安全服务 services。

安全攻击主要有以下几种,都比较好理解:

1701581604261

安全攻击也分为被动 passive 和主动 active。

安全机制:我们知道“安全”是一个抽象的东西,不能被提供。但是可以通过增加安全攻击的难度使得系统被称为“更安全”,比如加密技术。Cryptography

安全服务:比如安全认证 Authentication 鉴别用户权限;access control 只让有权限的人访问;校验数据机密性完整性……

下图是一些术语,我感觉不会考概念,只是题干里出现的时候要知道意思。

image-20231203134408877

从上到下:明文(未加密的数据),加密,密文,解密,密钥(用于加密解密,用法要看具体加密算法);加密,哈希算法,数字签名(通过加密算法来确保这个信息是我发送的);访问控制,数据机密性,数据完整性,不可否认性,身份认证。image-20231203134942164

三者是包含的关系,security 是一些基本定义,mechanism 是利用 security 的一些算法,services 是结合 mechansim 实现的一些功能。

网络安全模型

简化一下就是发送信息的时候,网络安全服务帮我们加密后发给对方,对方借助网络安全服务解密后得到数据。1701583057001

加密举例

凯撒密码

最古老,最简单的加密方法:凯撒密码 Caesar Cipher,字母平移。凯撒当时用过这种方式和他的军官联络。image-20231203135900106

如果我们知道密文是通过凯撒加密的,那么破解非常简单,顶多试25次就能得到答案。

维吉尼亚密码

维吉尼亚密码 Vigenère Cipher:多字码替换 Polyalphabetic Substitution,本质上是多次凯撒密码得到的。

我们需要一个明文字符串和 key 字符串(用于加密)。1701583540014

image-20231203140434357

比如明文 M,key 第一个是 S,那么对应密码表中的 E 字母。

明文 Y,第二个 key 是 T,对应 R。

算法:(明文对应字母 + key 对应字母) mod 26 (A 算 0)

解密:(密文对应字母 - key 对应字母) mod 26 (A 算 0)

转子加密

转子加密 Rotor Encryption:多层滚轮的机械结构。

单滚轮:

1701584519743

每加密一个,滚轮左移一下。

多滚轮:不同层滚轮转速不同。

这是德国发明的加密机器,不过后来也是逐渐被破解了。

格栅加密

格栅加密 the grille:利用一个格栅图区遮挡。收发双方应该是共有一份格栅图。

image-20231203142409238

每次取一部分数据后顺时针旋转格栅图,再取一部分数据。

加密系统的分类

  • 隐写术 Steganography :把数据藏起来,不能直接发现的加密方式。比如调整像素的最低有效位,音频文件中通过频谱调整或频率转移……本质是你第一眼看不到明文。

  • 加密 Cryptographic :密文给你了,就在这张纸上,这个就是数据。但是你需要解密才能看。

  • 加密方法:替换和移位 Substitution & Transposition. 比较好理解。

  • 使用的密钥数量:对称加密和非对称加密 Transposition & Asymmetric。加密解密用一个密钥就是对称加密。

  • 明文处理方式:流加密和块加密 Stream Cipher & Block Cipher。一次处理一个元素和一块多个元素的区别。

前面的凯撒密码算是流加密,格栅我觉得应该算块加密。

流加密1:简单的异或

举一个流加密的例子,简单说就是明文和密钥逐位异或运算得到密文,再异或一次解密。因为一个位和0或者1异或2次都会得到他自己。

image-20231224142256770

计算量小,加密快。但是太简单了,如果知道明文密文就知道密钥了;且攻击者篡改消息后无法被察觉,没有类似奇偶校验的那种保证信息没有被篡改的机制。

流加密2:one time pad

第二种流加密方法叫 one time pad 一次性记事本,无法被破坏。即每次传输都使用一个新的随机密钥,长度和要传输的信息一样,**密文和明文没有统计上的关系,**用这个密钥来加密。问题在于怎么把密钥发给对方,密钥太大,而且该算法也容易出错。

块加密1:乱序

比如每10个字母重新排一次顺序,from {1,2,3,4,5,6,7,8,9,10} to {3,1,2,10,7,5,4,8,6,9}。

image-20231224143239261

块加密2:普莱费尔方阵密码

playfair 方阵密码,初见有点蒙,看明白了发现还是挺有意思的。

首先我们用密钥生成一个5*5的加密方阵。比如密钥是 “MY SECRET CODE IS”,我们去掉重复字母和空格,变为 “MYSECRTODI”,写在方阵里,其余部分按字母表没出现的字母顺序填充。

1703400024911

对于明文,首先我们把明文拆成一对一对的字母组合,如果出现某一对字母组合重复,就把第二个换成 X 或 Q。

1703400165306

对于每一对字母,我们先去加密方阵里找到对应的字母位置。

  1. 如果他俩不在同一行同一列,那么就组成了一个矩形的两个对角线,我们用这个矩形的另外两个对角线字母替换他俩。

1703400279889

  1. 如果他俩在同一行,就都用右边的字母替换。

1703400308311

  1. 如果他俩在同一列,就都用下面的字母替换。

1703400332750

挺安全的哈,这么复杂。问题在于密钥不能泄露出去(用于生成加密矩阵的密钥),一旦泄露就完蛋。

密钥协商协议 key agreement

上面这些都是一些比较传统的加密方式,问题基本在于:密钥不能泄露。所以当时人们就需要一些双方制定协商密钥的方式,不然如果第一次发密钥的时候被截获了,后面的信息传输都相当于是透明的了。

针对破解密钥的攻击方式主要有两种,一种是密码分析攻击 Cryptanalysis Attacks,针对可能使用的加密方式和该方式明文和密钥的一些加密规律进行破解。比如福尔摩斯里面有一章(跳舞的人),当时密信只是给每个字母创建了一个不同动作的小人符号,福尔摩斯先从英语中e出现次数最多的规律开始推,得到了e对应的符号,接着是其他字母……逐渐破解。

第二种是暴力破解法 Brute-force Attacks,想起以前搬校区的时候我有个3位密码锁是隔壁宿舍同学帮我暴力试出来的hhh。不过有一点区别,那个是试密码,这里的暴力破解是试密钥。

加密算法的安全性怎么评价,其实任何一个密码肯定早晚都是能破译出来的(大不了破译50年,100年,1万年?),要说密钥安全不是说绝对破解不出来,而是:

  1. 破解出来的性价比不高,破解需要花费的人力财力物力比不上密钥的价值。我给同学传个纸条我估计没人闲的没事干来破解,像核弹密码那种估计很多人虎视眈眈。
  2. 明文有效期比破解时间短。比如军队发消息:今晚发起总攻,敌人明天中午破解出来了,大势已去了。

破解

以撒密码破解

和福尔摩斯一样的方法,我们根据字母出现频率去猜。

image-20231224150352021

大不了 shift 25次,总能破解出来吧?

不过更有效的破解方式是向量计算概率,深度学习里面对分类问题的预测也有异曲同工之妙,我们通过一定的算法量化不同 key 是正解的概率,最后比较并选出最可能是 key 的偏移量,而我们并不用关心对于非正确的预测值(感兴趣可以看看我的这篇文章:深度学习(五)softmax 回归之:分类算法介绍,如何加载 Fashion-MINIST 数据集-CSDN博客)。

1703401974314

上表是当前密文的字母出现频率(我称其为密文向量),下图是统计字幕出现频率(我称其为频率向量)。

破解方法:我们让密文向量 shift 一下,与频率向量相乘,算出预测概率;shift 值尝试从1到25,算出每种预测值大小,最后取其最大值。

1703402083556

维吉尼亚密码破解

维吉尼亚密码是一个26*26的矩形,通过明文和密钥找对应位置的字母那个。也就是说密钥不是一个简单的数字偏移量了,而是一个字符串。

首先我们需要猜出密钥长度。我们观察一下重复组合出现的次数(好像是2-3个字母?)

1703402831149

感觉上重复组合出现的比较常见的距离为3,所以密钥是3的倍数(这不依靠算法的话应该还是挺难找的)。

然后我们还是尝试密文 shift 偏移,每次偏移记下偏移量和发生的数字重复情况。比如下图是 shift +2 的偏移情况。

1703402913331

偏移量与重复情况如下:

image-20231224153018033

而且我们知道密钥长度很可能是3的倍数。那么我们把密文分成三等分,3k,3k+1,3k+2。

image-20231224153127390

接下来,对于这三组数据,分别做和以撒密码破解类似的向量破解运算,并求和得出最可能的密钥。

原理上,首先以撒密码和维吉尼亚密码区别在于维吉尼亚密码是一个密钥字符串重复多次的以撒密码,比如 abcabcabc…… 如果我们估测出维吉尼亚密码长度为3,那么 3k 位置的字符串相当于都用 a 加密的凯撒密码,3k+1 位置的字符串都用 b 加密,3k+2 位置都用 c 加密,分别运用以撒密码破解即可。

传统加密

用对称加密的块加密算法也被称为传统加密。

Feistel Algorithm:对密码分块,进行多轮加密处理的算法。比较典型的是 DES。

DES

DES data encryption standard 是一种加密标准。具体 DES 算法有很多。

b9b70bf83ca39e1f461c945e70ab6b9

取64位数据,右边的32位用置换表扩展到48位和密钥异或,再通过s-box置换表置换到32位,和左边的32位异或得到新一轮的右边32位,然后下一轮的时候右边32位变成新的左边32位。

密钥是64位密钥,置换表后变为56位,每一轮是移位后置换表变为48位,再和48位message异或。

S-Box 作用第一是压缩长度进行密钥运算,第二是增加安全性。

1703885492600

DES 安全性和密钥长度,s-box 和特定排列的选择有关(就是替换表和密钥长度)。

DES 56位密钥相对来说安全性不高(虽然已经足够把我绕晕了我觉得),因此可以多重 DES。

Double DES

两次 DES 加密,用不同的密钥。

E K 1 ( E K 2 ( m ) ) E_{K1}(E_{K2}(m)) EK1(EK2(m))

一开始我觉得有没有可能找到一种密钥 k3 使得他和 k1 k2 加密两次是一样的效果呢,那两次加密就没意义了。不过好像根据算法特性,这是不可能发生的。

单重 DES 密钥等级是 256 ,双重是 257

双重 DES 的一个破解方式:中间相遇攻击 Meet-in-the-middle attack。假设双重 DES 只加密一次时的中间值为 X(即 E_{K2}(m) 或者 D_K1©),我们只需要两对已知明文密文对就可以破解双重 DES。

  1. 明文用所有可能密钥加密一次,密文用所有可能密钥解密一次。看看其中得到的中间值 X 相同的密钥对有哪些。
  2. 把这个密钥对拿去检验另一组已知的明文密文(可选),如果也得到相同的中间值 X,说明这个密钥对是正确的。

TDEA

三重 DES。

C = E K 3 ( E K 2 − 1 ( E K 1 ( m ) ) ) C=E_{K3}(E_{K2}^{-1}(E_{K1}(m))) C=EK3(EK21(EK1(m)))

-1 代表解密。解密正相反,K3 解密,K2 加密,K1 解密。

AES

随着计算机计算能力的进步,DES 相对不再安全了,因此 AES 新的加密标准被推出。

标准如下:

  1. 需要支持三种长度密钥,128位 192位 256位。
  2. 块大小只能是128位。
  3. 不像 Feistel Algorithm 拆开几部分分别处理(对于一块数据,拆成左右两部分),AES 每次都是对一整块数据进行处理的。

当时美国国家标准技术研究所制定 AES 标准后征集大家的算法实现,想找到更加安全的算法。比较有名的作品就是 Rijndael。

Rijndael

简单来说分为以下四轮:

image-20231230151610413

  1. S-box 字节替换。一个字节8位,前4位表示16行,后4位表示16列,去替换表里找到对应替换项。

    img

  2. 行移位,不同行移位不同。

    img

  3. 列混合 MixColumns,列与常数矩阵做乘法运算得到新的列。

    img

    比如:

    在这里插入图片描述

  4. 轮密钥加 AddRoundKey,这一步算是真正的加密,密钥和 state 矩阵异或。一般会根据用户密钥进行密钥扩展,生成多轮子密钥,每一轮加密的时候使用不同的密钥。

    img

整体流程是先 add round key 一次,然后 substitute bytes, shift rows, mix cloumns, add round key 这四部分重复 N_{r-1} 次。

不过其实这个加密方法也没有看着那么复杂,甚至不需要尝试2128 次密钥,2100 就可以(应该是根据一些密钥分析技术)。

操作模式

Mode of operation 改进加密方式的方法,原则上尽量避免同一个密钥会产生相同的加密结果,这也是我们前面几种加密方式最大的弊端。反正相同密钥会产生相同的加密结果,那么大不了暴力尝试2128 次不也就尝试出来了么。

ECB Electronic Code Book

电子代码簿,就是简单的分组加密。

1703923215199

不过想想我们破解 DES 的方法,相同密钥加密会产生相同结果的问题并没有解决,我们只要知道明文密文对,尝试所有密钥即可破解。

CBC Cipher Block Chaining

每个明文块先和前一个密文异或,再用密钥加密。c0 初始密文块是双方约定好的一个用于加密的信息。

1703923885608

解密正好相反。

1703923901681

复杂度更高了。不过加密的时候没法并行加密,必须串行加密因为依赖关系。解密的时候还是可以并行解密的。

CFB Cipher feedback

初始向量加密后与明文块1异或,得到密文块1;密文块1加密后与明文块2异或,得到密文块2;……

IV 初始化向量类似 CBC 的 c0,是双方用于起始加密的一个信息。

1703924346531

解密流程差不多,不过不是和明文异或得到异或了,是和密文异或得到明文。

1703924499062

缺点也是加密无法并行运算,而且前面计算错误会影响后面的计算结果。

OFB Output feedback mode (OFB)

和 CFB 区别在于 CFB 是前一个密文块作为后一块加密的初始向量,因此会发生错误传播 Error Propagation。而 OFB 是没和明文异或的时候就作为下一个块的初始向量了,不会发生错误传播。而且如果提前计算好了 IV 向量的多轮加密值,可以直接与分组明文进行并行加密运算。

1703924930996

CTR Counter mode

一个自增的加密计数器作为初始向量。

1703925187031

也可以并行计算,速度很快。

1703925245706

密钥分发

  • 一个最重要的问题:双方怎么同步密钥。如果发密钥的过程中被截住了,那算法再吊也没用啊。

  • 密钥传送通道必须要比发信息通道更安全。

  • 还有一个问题就是怎么通过签名确保密钥是对方发给我的。比如中间人截获了A给B发的密钥,自己伪造了一个密钥给B,B根本不知道他的密钥被修改过。

密钥发送可以通过物理通道(亲手给对方?)。或者如果两个人以前有旧的密钥,现在想换新了,新密钥可以通过旧密钥加密发送。或者两个人可以通过彼此之间的加密连接发送。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1344726.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PLC龙门刨床横梁运动控制程序示例

一、龙门刨床横梁运动控制 二、按钮信号地址分配 三、对应的程序梯形图 1、首先按下上升按钮, 同时接通这两个触点(上升之前先对横梁进行放松) 2、当放得足够松的时候,放松通路断开,上升通路接通,横梁开始上…

20231229在Firefly的AIO-3399J开发板的Android11使用挖掘机的DTS配置单前后摄像头ov13850

20231229在Firefly的AIO-3399J开发板的Android11使用挖掘机的DTS配置单前后摄像头ov13850 2023/12/29 11:10 开发板:Firefly的AIO-3399J【RK3399】 SDK:rk3399-android-11-r20211216.tar.xz【Android11】 Android11.0.tar.bz2.aa【ToyBrick】 Android11.…

Java设计模式实战:从If-Else到策略+工厂方法的演变

引言 可能很多开发者,虽然理解了设计模式的概念,但在实际工作中应用却是另一回事。本篇文章旨在用一个具体的案例来展示如何将设计模式应用到工作的编程问题中。正所谓:“纸上得来终觉浅,绝知此事要躬行。”理论的学习固然重要&a…

Mybatis底层原理分析以及源码阅读

费话不多少先上图,我只喜欢画图分析,看图片: 有两个问题: 问题1: 我们一直在写Mapper/DAO只写了接口,没有写具体的实现吧? 【是的】 问题2: 没有写实现类就没办法实例化执行后续的操…

Windows系统清理优化方法总结

一、禁用不必要的系统服务 1、家庭组:家庭组是Win10磁盘,CPU需要高服务,多数用户都没有使用,因此建议关闭,不会造成其他负面影响。 快捷键 winr 调出服务输入框键入services.msc点击确定 找到家庭组相关的两个服务双…

【已解决】 ubuntu apt-get update连不上dl.google.com

在终端使用apt-get update时,连接dl.google.com超时,一直卡在0%,原因是当前ip无法ping到google(墙)。 解决方法: dl.google.com国内可用IP 选一个,然后按以下命令操作: cd ~ vim …

css实现一个斑马条纹动画,实现一个理发店门口的小转转,进度条动画同理!

css实现一个斑马条纹动画,实现一个理发店门口的小转转 前置基础知识 css背景background的重复渐变属性repeating-linear-gradient() 该属性类似于linear-gradient(),但他会在整个方向上重复渐变以覆盖整个容器 一、先写一个普通渐变例子linear-gradient() &…

【STM32】STM32学习笔记-TIM输出比较(15)

00. 目录 文章目录 00. 目录01. 输出比较简介02. PWM简介03. 输出比较通道(高级)04. 输出比较通道(通用)05. 输出比较模式06. PWM基本结构07. PWM参数计算08. 舵机简介09. 舵机硬件电路10. 直流电机及驱动简介11. 直流电机硬件电路12. 附录 01. 输出比较简介 OC(Ou…

如何解决“电脑缺失msvcp110.dll”错误,msvcp110.dll文件解决方法

“msvcr110.dll丢失”。那么,msvcr110.dlll丢失到底是什么意思呢?它对我们的电脑有什么影响?本文将详细介绍msvcr110.dll的作用以及msvcr110.dll丢失对电脑的影响,并提供5个解决方案来解决这个问题。 一、msvcr110.dll的作用 ms…

成为一名FPGA工程师:面试题与经验分享

在现代科技领域,随着数字电子技术的迅猛发展,FPGA(可编程逻辑器件)工程师成为了备受瞩目的职业之一。FPGA工程师不仅需要掌握硬件设计的基本原理,还需要具备良好的编程能力和解决问题的实践经验。面对如此竞争激烈的行…

超简单一行命令在电脑上部署安装短视频直播、引流推流人气的工具,7个开源免费流媒体直播平台和3款开源免费直播推流工具

超简单一行命令在电脑上部署安装短视频直播、引流推流人气的工具,7个开源免费流媒体直播平台和3款开源免费直播推流工具。爆款引流短视频关注的指标、分类和引流技巧,引流短视频应用技巧,直播短视频引流五维方法论,实操干货整理分享。 如今上到太空站、下到在家养猪,各行…

编程羔手解决Maven引入多个版本的依赖包,导致包冲突了

最近升级了些依赖发现有个hutool的方法老报错,java.lang.NoSuchMethodError: cn.hutool.core.util.ObjectUtil.defaultIfNull(Ljava/lang/Object;Ljava/util/function/Supplier;) 在 Maven 项目中,当不同的依赖模块引入 Hutool 的不同版本时&#xff0c…

ubuntu20部署Bringing-Old-Photos-Back-to-Life

环境准备: ubuntu20.04 Python 3.8.10 首先将微软的「Bringing-Old-Photos-Back-to-Life」库 clone 到本地: git clone https://github.com/microsoft/Bringing-Old-Photos-Back-to-Life.git cd Face_Enhancement/models/networks/ git clone https:/…

迷宫问题的对比实验研究(代码注释详细、迷宫及路径可视化)

题目描述 对不同的迷宫进行算法问题,广度优先、深度优先、以及人工智能上介绍的一些算法:例如A*算法,蚁群算法等。 基本要求: (1)从文件读入9*9的迷宫,设置入口和出口,分别采用以上方…

Vscode —— 解决Vscode终端无法使用npm的命令的问题

在cmd中可以正常执行npm -v等指令,但是在vs code终端中,无法执行npm -v,node -v等指令 出现报错 解决办法👇 方法一:【右键单击Vscode】以【管理员身份运行】,【重启Vscode】 方法二:①【用户变量】的【path】添加npm所在路径的…

C语言实验3:函数的定义

目录 一、实验要求 二、实验原理 1.函数头 2.函数体 3.函数的定义及使用 三、实验内容 1. sum函数 代码 截图 分析 2. sum函数 代码 截图 分析 3. rank_grade函数 代码 截图 分析 4. rank_grade函数 代码 截图 分析 5. 函数的嵌套使用 代码 截图 分析…

实现二叉树的基本操作与OJ练习

目录 1.二叉树的基本操作 1.1二叉树基本操作完整代码 1.2检测value值是否存在 1.3层序遍历 1.4判断一棵树是不是完全二叉树 2.OJ练习 2.1平衡二叉树 2.2对称二叉树 2.3二叉树遍历 1.二叉树的基本操作 1.1二叉树基本操作完整代码 public class BinaryTree {static…

推荐系统/电商中的 业务指标GMV

GMV(Gross Merchandise Volume)是指在一定时间内,一个电商平台上所有商品的总销售价值,通常以货币单位(例如美元、人民币等)表示。GMV是一个关键的电商业务指标,用于衡量平台的交易规模和业务增…

Flink(十一)【状态管理】

Flink 状态管理 我们一直称 Flink 为运行在数据流上的有状态计算框架和处理引擎。在之前的章节中也已经多次提到了“状态”(state),不论是简单聚合、窗口聚合,还是处理函数的应用,都会有状态的身影出现。状态就如同事务…

【网络安全】upload靶场pass1-10思路

目录 Pass-1 Pass-2 Pass-3 Pass-4 Pass-5 Pass-6 Pass-7 Pass-8 Pass-9 Pass-10 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。 💡本文由Filotimo__✍️原创,首发于CSDN&#x1…