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

前言

主要根据 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.xdnf.cn/news/823391.html

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

相关文章

【教学类-43-03】20231229 N宫格数独3.0(n=1、2、3、4、6、8、9) (ChatGPT AI对话大师生成 回溯算法)

作品展示: 背景需求: 大4班20号说:我不会做这种(九宫格),我做的是小格子的, 他把手工纸翻过来,在反面自己画了矩阵格子。向我展示:“我会做这种!” 原来他会…

《PCI Express体系结构导读》随记 —— 第I篇 第1章 PCI总线的基本知识(15)

接前一篇文章:《PCI Express体系结构导读》随记 —— 第I篇 第1章 PCI总线的基本知识(14) 1.3 PCI总线的存储器读写总线事务 1.3.4 PCI读写主存储器 前文已提到,由于本节内容较长,因此将后一部分内容放在本文中。 为…

Java多线程技术五——单例模式与多线程

1 概述 本章的知识点非常重要。在单例模式与多线程技术相结合的过程中,我们能发现很多以前从未考虑过的问题。这些不良的程序设计如果应用在商业项目中将会带来非常大的麻烦。本章的案例也充分说明,线程与某些技术相结合中,我们要考虑的事情会…

java注解和反射

java注解和反射 内置注解 Override 重写生命 Deprecated 已过时的方法,不推荐使用,可以使用 SuppressWarning 镇压警告,懂的都懂 元注解 作用:负责注解其他的注解 Target 描述注解的使用范围 Retention 描述注解的生命周期 Docu…

从座舱到跨域融合,老牌汽车零部件厂商如何破局数字化变革

当前,整个汽车供应链正在经历深层次的重构,传统零部件厂商必须加速“自我革新”。 在汽车“新四化”的巨变下,大量传统零部件濒临消失或者减少了需求,传统汽车零部件企业的相关业务开始日益萎缩,生存空间遭受不同程度…

我的128天之创作纪念日

目录 序 机缘 收获 日常 成就 憧憬 序 今天收到CSDN的一条消息推送,“初九之潜龙勿用 ,不知不觉今天已经是你成为创作者的 第128天 啦。。。” 是啊,自今年8月24日开始写文章以来,时间过得好快,无论开心、痛苦…

51单片机之LED灯

51单片机之LED灯 🌴前言:🏮点亮LED灯的原理💘点亮你的第一个LED灯💘点亮你的八个LED灯 📌让LED灯闪烁的原理🎽 LED灯的闪烁🏓错误示范1🏓正确的LED闪烁代码应该是这样&am…

【开源】基于Vue+SpringBoot的公司货物订单管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 客户管理模块2.2 商品维护模块2.3 供应商管理模块2.4 订单管理模块 三、系统展示四、核心代码4.1 查询供应商信息4.2 新增商品信息4.3 查询客户信息4.4 新增订单信息4.5 添加跟进子订单 五、免责说明 一、摘要 1.1 项目…

4.26 构建onnx结构模型-Suqeeze

前言 构建onnx方式通常有两种: 1、通过代码转换成onnx结构,比如pytorch —> onnx 2、通过onnx 自定义结点,图,生成onnx结构 本文主要是简单学习和使用两种不同onnx结构, 下面以 Suqeeze 结点进行分析 方式 方法一…

three.js实现点击选中模型,模型描边高亮效果

射线投射器Raycaster通过.intersectObjects()判断模型是否选中EffectComposer.js进行后期处理&#xff0c;添加描边高亮效果 <template><div class"app"><div ref"canvesRef" class"canvas-wrap"></div></div> &…

Python面向对象编程 —— 类和异常处理

​ &#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 1. 类 1.1 类的定义 1.2 类变量和实例变量 1.3 类的继承 2. 异常处理 2.1类型异常 2.…

【docker实战】安装tomcat并连接mysql数据库

本节用docker来安装tomcat&#xff0c;并用这个tomcat连接我们上一节安装好的mysql数据库 一、拉取镜像 [rootlocalhost data]# docker pull tomcat:8.5.69二、运行tomcat bitnami的tomcat的根目录在/opt/bitnami/tomcat/webapps下面&#xff0c;所以我们为了方便部署我们的…

Springboot整合MybatisPlus的基本CRUD

目录 前言1. 搭建项目2. 基本的CRUD 前言 发现项目框架是MybatisPlus的&#xff0c;由于个人使用该框架的CRUD比较少 对此学习过程中&#xff0c;从零到有开始搭建学习还是比较重要的&#xff0c;感悟会比较多 关于各个类的使用&#xff0c;可看如下文章&#xff1a; 剖析Ja…

DotNet 命令行开发

DotNet 命令行开发 下载安装下载 SDK安装 SDK绿色版下载绿化脚本 常用命令创建 dotnet new运行 dotnet run发布应用 dotnet publish更多命令 VSCode 调试所需插件调试 CS 配置项目.csproj排除依赖关系 launch.jsontasks.json 参考资料 下载安装 下载 SDK 我们就下最新的好&am…

每日一题——LeetCode961

方法一 排序法&#xff1a; 2*n长度的数组里面有一个元素重复了n次&#xff0c;那么将数组排序&#xff0c;求出排序后数组的中间值&#xff08;因为长度是偶数&#xff0c;没有刚好的中间值&#xff0c;默认求的中间值是偏左边的那个&#xff09;那么共有三种情况&#xff1a;…

【java爬虫】获取个股详细数据并用echarts展示

前言 前面一篇文章介绍了获取个股数据的方法&#xff0c;本文将会对获取的接口进行一些优化&#xff0c;并且添加查询数据的接口&#xff0c;并且基于后端返回数据编写一个前端页面对数据进行展示。 具体的获取个股数据的接口可以看上一篇文章 【java爬虫】基于springbootjd…

开源radishes高仿网易云音乐完整源码,可试听和下载“灰色”歌曲,跨平台的无版权音乐平台

源码介绍 Radishes是项目名称&#xff0c;是由萝卜翻译而来。可以在这里试听和下载“灰色”歌曲&#xff0c;是一个可以跨平台的无版权音乐平台。 萝卜音乐界面和功能参考 windows 网易云音乐界面和 ios 的网易云音乐 安装依赖 cd radishes/ yarn bootstrap 运行项目 web:…

nodejs+vue+ElementUi摄影预约服务网站系统91f0v

本系统提供给管理员对首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;员工管理&#xff0c;摄影套餐管理&#xff0c;套餐系列管理&#xff0c;客片欣赏管理&#xff0c;摄影预约管理&#xff0c;摄影订单管理&#xff0c;取片通知管理&#xff0c;摄影评价管理&…

智能硬件(8)之蜂鸣器模块

学好开源硬件&#xff0c;不仅仅需要会编程就可以了&#xff0c;电路基础是很重要的&#xff1b;软件和硬件都玩的溜&#xff0c;才是高手&#xff0c;那么小编为了方便大家的学习&#xff0c;特别画了一块智能传感器板子&#xff0c;来带领大家学习电路基础&#xff0c;玩转智…

平台无关性和语言无关性的记录

目录 背景 平台无关性 语言无关性 背景 最近在学习Java虚拟机&#xff08;JVM: Java Virtual Machine&#xff09;,在学习过程中&#xff0c;再一次学习了JVM的平台无关性这一特性&#xff0c;此外也了解到了虚拟机的另外一种中立特性 --- 语言无关性&#xff0c;下面进行简单…