密码学系列(四)——对称密码2

一、RC4

RC4(Rivest Cipher 4)是一种对称流密码算法,由Ron Rivest于1987年设计。它以其简单性和高速性而闻名,并广泛应用于网络通信和安全协议中。下面是对RC4的详细介绍:

  1. 密钥长度:

    • RC4的密钥长度可变,通常为8至256字节之间。
    • 密钥长度的选择对RC4的安全性和性能产生影响。
  2. 算法原理:

    • RC4是一种流密码算法,它使用一个伪随机数发生器(PRNG)生成密钥流,然后将明文与密钥流进行异或运算得到密文。
    • RC4算法主要包括密钥初始化和密钥流生成两个阶段。
  3. 密钥初始化:

    • 密钥初始化阶段通过对内部状态数组进行初始化来准备生成密钥流所需的数据结构。
    • 这包括将0到255的字节值填充到内部状态数组(S)中,并根据密钥的字节值进行初始的排列操作。
  4. 密钥流生成:

    • 密钥流生成阶段利用内部状态数组(S)和两个指针(i和j)来生成伪随机的密钥流。
    • 指针i和j的更新和内部状态数组的排列操作是密钥流生成的核心过程。
    • 密钥流可以根据需要生成任意长度的密钥流,并与明文进行异或运算以产生密文。
  5. 安全性:

    • RC4的安全性受到多种攻击的影响,包括密钥重用、密钥流偏置和明文相关性等。
    • 长期以来,RC4已经被发现存在严重的安全漏洞,导致其在实际应用中的使用受到限制。
  6. 应用领域:

    • RC4曾被广泛应用于诸如SSL/TLS等安全协议中的数据加密。(现在很少使用)

二、流密码

流密码是一种对称加密算法,它使用密钥流(也称为伪随机密钥流)和明文按位进行异或运算,从而生成密文。与分组密码不同,流密码以连续的比特流方式处理数据,而不是将数据分成固定大小的块。

  1. 密钥流生成:

    • 流密码的核心是生成伪随机的密钥流,该密钥流与明文按位进行异或运算以产生密文。
    • 密钥流的生成通常通过伪随机数发生器(PRNG)实现。
    • PRNG接受一个密钥和一个初始向量(IV)作为输入,并生成一个长密钥流。
  2. 密钥流复用:

    • 密钥流可以按需生成,因此可以在不同的加密操作中重复使用。
    • 为了确保安全性,每个使用相同密钥流的加密操作都应使用不同的初始向量(IV)。
  3. 加密过程:

    • 加密过程中,明文按位与密钥流进行异或运算,生成相应的密文。
    • 密文的生成速度与密钥流的生成速度相同。
  4. 解密过程:

    • 解密过程与加密过程完全相同,将密文按位与相同的密钥流进行异或运算,以恢复原始的明文。
  5. 安全性:

    • 流密码的安全性主要依赖于密钥流的质量和密钥流复用的方式。
    • 密钥流必须具有高度随机性和统计特性,以保证密文的安全性。
    • 密钥流复用时,必须使用不同的初始向量(IV)来保证密钥流的唯一性。

LFSR线性反馈移位寄存器

 

  1. 结构和原理:

    • LFSR通常由一个移位寄存器和一个线性反馈函数组成。
    • 移位寄存器是一个包含多个存储单元的寄存器,每个存储单元存储一个比特。
    • 线性反馈函数根据寄存器中的比特值计算下一个比特的值,并将其放入寄存器的最左侧。
  2. 工作原理:

    • 初始时,LFSR的移位寄存器被初始化为一个特定的比特序列。
    • 通过连续地进行移位操作和应用线性反馈函数,LFSR生成一个伪随机的比特序列。
    • 每次移位时,最右侧的比特被丢弃,而通过线性反馈函数计算得到的新比特被插入到最左侧。
  3. 线性反馈函数:

    • 线性反馈函数定义了计算下一个比特的方法,通常是通过异或运算(XOR)来实现。
    • 线性反馈函数使用移位寄存器的特定比特作为输入,并根据预定义的规则计算下一个比特的值。
  4. 伪随机性:

    • LFSR生成的序列是伪随机的,因为它们是通过确定性的移位和线性反馈函数计算得到的。
    • 伪随机序列的周期性取决于移位寄存器的长度和线性反馈函数的选择。

示例:

假设我们有一个3位的LFSR,并且初始状态为"101",线性反馈函数为异或运算。

移位寄存器(初始状态): 1 0 1

生成的比特序列: 1 0 1 0 1 0 1 ...

下一步的计算过程如下:

  • 移位操作: 1 0 1 -> 0 1 0
  • 线性反馈函数: 0 XOR 1 XOR 0 = 1
  • 插入新比特: 1 0 1 -> 1 0 1

这样,LFSR会不断重复生成比特序列"101010..."。

三、分组密码

分组密码与流密码的区别就在于有无记忆性

1. 二重DES

二重DES是一种对称分组密码算法,它是对DES算法的一种扩展。在二重DES中,明文数据经过两次DES加密来提供更高的安全性。

  1. 工作原理:

    • 二重DES使用两个独立的DES加密步骤来加密数据。
    • 首先,明文数据通过第一个DES加密成为中间密文。
    • 然后,中间密文再经过第二个DES加密,生成最终的密文。
  2. 密钥使用:

    • 二重DES使用两个密钥:K1和K2。
    • 第一个DES加密使用密钥K1,第二个DES加密使用密钥K2。
    • 密钥长度为56比特,与标准的DES算法相同。
  3. 加密过程:

    • 明文数据首先通过第一个DES加密,使用密钥K1生成中间密文。
    • 然后,中间密文通过第二个DES加密,使用密钥K2生成最终的密文。

    明文数据 -> 第一个DES加密(K1) -> 中间密文 -> 第二个DES加密(K2) -> 密文数据

  4. 解密过程:

    • 密文数据首先通过第二个DES解密,使用密钥K2生成中间密文。
    • 然后,中间密文通过第一个DES解密,使用密钥K1生成最终的明文数据。

    密文数据 -> 第二个DES解密(K2) -> 中间密文 -> 第一个DES解密(K1) -> 明文数据

  5. 安全性:

    • 二重DES相对于单个DES提供了更高的安全性,因为它需要两个独立的密钥进行加密。
    • 由于DES算法的密钥长度较短,被认为容易受到暴力破解和差分密码分析等攻击。
    • 通过使用两个DES加密步骤,二重DES增加了破解的复杂性,提高了安全性。

2.ECB(电子密码本模式)

  1. ECB是最简单的密码模式之一,将明文划分为固定大小的数据块,然后使用相同的密钥对每个数据块进行独立的加密。
  2. 每个数据块使用相同的密钥和相同的加密算法进行加密,因此对于相同的明文块,总是生成相同的密文块。
  3. ECB模式的主要缺点是,相同的明文块会生成相同的密文块,这可能导致一些安全性问题,并且不适用于加密大量重复模式的数据。

3.CBC(密码分组链接模式)

ECB的最大特性是同一明文分组在消息中重复出现的话,产生的密文分组也相同。ECB用于长消息时可能不够安全。为了解决ECB的安全缺陷,可以让重复的明文分组产生不同的密文分组——CBC

        CBC模式引入了初始化向量(IV,Initialization Vector)的概念,并将其与明文块进行异或操作,然后再进行加密。

        初始向量是一个随机生成的数据块,用于第一个数据块的加密,并且每个后续数据块的加密都使用前一个密文块作为初始向量。

        CBC模式通过引入数据块之间的依赖性,增加了安全性,避免了ECB模式相同明文块生成相同密文块的问题。

CBC模式,它一次对一个明文分组加密,每次加密使用同一密钥,加密算法的输入是当前明文分组和前一次密文分组的异或,因此加密算法的输入不会显示出与这次的明文分组之间的固定关系,所以重复的明文分组不会在密文中暴露出这种重复关系。

4.CFB(密码反馈模式)

        CFB模式将分组密码算法(如DES或AES)转换为自反函数,可以用于加密任意长度的数据。

        CFB模式将前一个密文块作为输入,通过加密算法生成密钥流,然后将其与明文进行异或操作,得到密文。

        密文反馈模式允许加密算法在每个密文块之间产生不同的密钥流,因此可以对数据进行流加密。

cfb加密

cfb解密

四、IDEA

IDEA(International Data Encryption Algorithm)是一种对称分组密码算法,由Xuejia Lai和James L. Massey于1991年设计开发。它以其高度的安全性和较快的加密速度而闻名,并被广泛应用于各种领域。

密钥和分组大小:

    • IDEA使用128位密钥和64位分组大小。
    • 密钥长度为128位,但事实上,IDEA使用了128位密钥中的91位,其余位用于校验和完整性。
    • 分组大小为64位,即每次加密的明文或密文数据块长度为64位。
  1. 加密过程:

    • IDEA算法使用迭代结构,将明文数据块分为左右两个32位部分(L0和R0)。
    • 加密过程包括16轮迭代,每轮中,右半部分(Ri)与轮密钥(Ki)进行一系列运算,然后与左半部分(Li)进行异或操作。
    • 最后,左右半部分进行交换,得到加密后的数据块。
  2. 解密过程:

    • 解密过程与加密过程相反,使用相同的轮密钥,但按相反的顺序应用。
    • 解密过程中,右半部分(Ri)与轮密钥(Ki)进行一系列运算,然后与左半部分(Li)进行异或操作。
    • 最后,左右半部分进行交换,得到解密后的数据块。
  3. 安全性:

    • IDEA算法被广泛认为是一种安全性较高的对称分组密码算法。
    • 它使用了复杂的数学运算,包括模运算、异或运算、加法运算和乘法运算,以增加密码的强度。
    • IDEA的密钥长度较长,增加了破解的难度。
    • 经过多年的分析和广泛的应用,IDEA算法尚未出现严重的弱点或漏洞。

IDEA加密块长度是64bits,密钥长度是128bits,是由八轮变换和半轮输出转换组合而成的。加密和解密的过程是类似的。我们看下IDEA的基本流程图:

上面图中, 蓝色圆圈是XOR异或操作,绿色框是加法模数216。红色的点是乘模216 + 1,如果输入都是0(0x0000)那么将会被转换为216,如果输入是216,那么会被转换为0(0x0000)。

八轮操作之后,中间两个值的交换抵消了最后一轮结束时的交换:

 

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

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

相关文章

GPT 的基础 - T(Transformer)

我们知道GPT的含义是: Generative - 生成下一个词 Pre-trained - 文本预训练 Transformer - 基于Transformer架构 我们看到Transformer模型是GPT的基础,这篇博客梳理了一下Transformer的知识点。 BERT: 用于语言理解。(Transformer的Encoder…

九州金榜|父亲在教育中的作用及重要性

随着社会进步,对比以前教育,现在父亲在教育中的作用越来越明显,孩子的教育离不开父亲,父亲在孩子教育中有什么作用?重要性又是什么呢?下面九州金榜家庭教育就带大家一起分析一下作为父亲,在孩子…

VUE3搭载到服务器

1.搭建服务器 使用 Windows 自带的 IIS 作为服务器。 步骤如下:https://blog.csdn.net/qq_62464995/article/details/130140673 同时,上面的步骤中,还使用了 cpolar 将 IIS 本地网址映射到公共网址。 注: cpolar客户端&#xf…

Ant for Blazor做单个表的增删查改

Ant for Blazor做单个表的增删查改 2024年02月27日花了一天时间弄出来了,基本弄好了,vs2022blazor servernet8,引用的AntDesign版本是0.17.4 代码里的model和repository是用自己牛腩代码生成器生成的东西,sqlsugar的,记得在prog…

括号生成(力扣题目22)

题目描述: 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例 1: 输入:n 3 输出:["((()))","(()())","(())()&q…

Modern C++ std::any的实现原理

1. 前言 std::any 是 C17 中引入的一个新特性,它是一个类型安全的容器,可以在其中存储任何类型(但此类型必须可拷贝构造)的值,包括基本类型、自定义类型、指针等。相比于void* 指针,std::any 更为类型安全,可以避免由…

NC65 rest接口 开发 NC65接口开发

一、在对应模块META-INF下编写 xxx.rest 文件,也要放在Home里对应的目录下。 二、开发接口,继承extends AbstractUAPRestResource,(有的项目会继承别的方法如:AbstractNCCRestResource,MTFRestResource;有…

使用 kubeadm 部署k8s集群

一、所有节点系统初始化 1、常规初始化 2、内核版本升级以及内核限制文件参数修改 还可以考虑将旧版本的内核卸载 二、准备nginx负载均衡器和keepalived nginx四层代理: keepalived配置: nginx检测脚本: 三、所有节点部署docker&#xff0c…

SQL函数学习记录

聚合函数 函数是编程语言的基础之一,在对数字的运算中,我们用的最多的就是聚合函数,本篇接下来就详细阐述下SQL中聚合函数的运用。 什么是聚合函数(aggregate function)? 聚合函数指的是对一组值执行计算…

2023秋季飞书未来无限大会--随笔

这个时代的飞书 数字时代 工作协同平台 AI时代 帮助企业和个人用好AI 企业如何引用大模型能力? 智慧体— 接近人,有进步空间智能伙伴 用时代的科技打造爱不释手的好产品 移动互联网 – 改变信息分发方式 大模型 –自然的人机交互方式 业务协同 …

如何使用便签快速分类工作待办事项

在日常工作和生活中,我们经常需要处理各种各样的待办事项。而有效地分类这些任务,可以帮助我们更好地管理时间和提高工作效率。使用便签是一种简单而实用的方法,下面将介绍如何利用好用便签来快速分类工作待办事项。 首先,你可以…

【数据结构和算法初阶(C语言)】链表-单链表(手撕详讲单链表增删查改)

目录 1.前言:顺序表回顾: 1.1顺序表的优缺点 2.主角----链表 2.1链表的概念 2.2定义一个单链表的具体实现代码方式 3.单链表对数据的管理----增删查改 3.1单链表的创建 3.2单链表的遍历实现 3.2.1利用遍历实现一个打印我们链表内容的函数的函数…

【前端素材】推荐优质后台管理系统Salreo平台模板(附源码)

一、需求分析 当我们从多个层次来详细分析后台管理系统时,可以将其功能和定义进一步细分,以便更好地理解其在不同方面的作用和实际运作。 1. 结构层次 在结构层次上,后台管理系统可以分为以下几个部分: a. 辅助功能模块&#…

Mycat核心教程--ZooKeeper集群搭建【三】

Mycat核心教程--ZooKeeper集群搭建 八、 ZooKeeper集群搭建8.1.ZooKeeper简介8.2.数据复制的好处8.3.Zookeeper设计目的8.4.zookeeper集群包括3种角色8.4.1.Leader角色8.4.2.Follower 角色8.4.3.Observer 角色 8.5.zookeeper集群工作流程8.6.zookeeper集群节点数量为奇数&#…

JS进阶——深入对象

版权声明 本文章来源于B站上的某马课程,由本人整理,仅供学习交流使用。如涉及侵权问题,请立即与本人联系,本人将积极配合删除相关内容。感谢理解和支持,本人致力于维护原创作品的权益,共同营造一个尊重知识…

liunx操作系统 进程的基本概念

进程的基本概念 计算机结构体系冯诺依曼 操作系统的管理进程进程的特性标识符系统的调用 创建新的进程 进程的状态进程队列进程的状态在liunx查看进程状态、 计算机结构体系 冯诺依曼 在没有存储器之前,所有的信息都是直接进入CPU,这样效率很差&#xf…

智慧公厕:打造智慧城市环境卫生新标杆

随着科技的不断发展和城市化进程的加速推进,智慧城市建设已经成为各地政府和企业关注的焦点。而作为智慧城市环境卫生管理的基础设施,智慧公厕的建设和发展也备受重视,被誉为智慧城市的新标杆。本文以智慧公厕源头厂家广州中期科技有限公司&a…

Java代码实现获取本机服务的IP地址

要通过Java代码获取一个IP地址的信息,你可以使用多种方法。其中一种常见的做法是通过IP地址查询服务API来获取详细信息,比如地理位置、ISP(互联网服务提供商)等。这里有一个简单的例子,展示如何使用Java代码调用一个公…

RRT算法学习及MATLAB演示

文章目录 1 前言2 算法简介3 MATLAB实现3.1 定义地图3.2 绘制地图3.3 定义参数3.4 绘制起点和终点3.5 RRT算法3.5.1 代码3.5.2 效果3.5.3 代码解读 4 参考5 完整代码 1 前言 RRT(Rapid Random Tree)算法,即快速随机树算法,是LaVa…

Latex中大括号书写多行方式【已解决】

在写论文时需要写一个非1即0的公式,因此写了这篇文章。 本文主要分为两个部分:1.在括号外赋值、2、在括号内赋值 1.在括号外赋值 示例 \begin{equation}A\begin{cases}1x, x \textgreater 0\\1-x, x \leq 0 \end{cases} \label{KD} \end{equation} 效…