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

news/发布时间2024/5/18 11:43:11

一、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.bcls.cn/jFTl/5623.shtml

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

相关文章

动态绑定样式,uniapp,用三元运算动态绑定多个class类样式,动态绑定的样式可以和原始样式共存

介绍 | uni-app官网 vue、uniapp中动态添加绑定style、class 9种方法实现_vue style动态绑定-CSDN博客 uniapp使用三元运算符动态绑定元素的style样式_uniapp style动态绑定-CSDN博客 对象写法,可以写多个class类 class类的名字:判断条件,最后结果只有…

数学建模【模拟退火】

一、模拟退火简介 模拟退火的基本思想,就是走出舒适圈,多去“试一试”,万一成了呢? 舒适区:当前处于局部最优解试一试:随机试探新解,有更好的解就直接选择新解,没更好的则以一定概…

c++数据结构算法复习基础--1

一、大体复习内容 复习思路; 二、数据结构算法-常见复杂度汇总介绍-性能对比-图表展示 数据结构: 相互之间存在一种或者多种特定关系的数据元素的集合。在逻辑上可以分为线性结构,散列结构、树形结构,图形结构等等。 数据结构说的是组织…

助力探索社交出海最短变现路径,融云 1V1 音视频「限时免费」

在社交赛道,1V1 业务是最好的切入点。 对于初创公司来说,1V1 业务的技术成本和运营成本相对可控,并且具备与秀场直播等业务融合拓展的巨大空间。未来,相信 1V1 业务会吸引更多开发者投身其中。 一位社交出海经验丰富的从业者曾在…

vscode与vue/react环境配置

一、下载并安装VScode 安装VScode 官网下载 二、配置node.js环境 安装node.js 官网下载 会自动配置环境变量和安装npm包(npm的作用就是对Node.js依赖的包进行管理),此时可以执行 node -v 和 npm -v 分别查看node和npm的版本号: 配置系统变量 因为在执…

【算法与数据结构】链表、哈希表、栈和队列、二叉树(笔记二)

文章目录 四、链表理论五、哈希表理论五、栈和队列理论5.1 单调栈 六、二叉树理论6.1 树的定义6.2 二叉树的存储方式6.3 二叉树的遍历方式6.4 高度和深度 最近博主学习了算法与数据结构的一些视频,在这个文章做一些笔记和心得,本篇文章就写了一些基础算法…

面试redis篇-13Redis为什么那么快

Redis是纯内存操作,执行速度非常快采用单线程,避免不必要的上下文切换可竞争条件,多线程还要考虑线程安全问题使用I/O多路复用模型,非阻塞IOI/O多路复用模型 Redis是纯内存操作,执行速度非常快,它的性能瓶颈是网络延迟而不是执行速度, I/O多路复用模型主要就是实现了高效…

开源的表单设计器拥有什么显著特点?

开源的表单设计器的特点是什么?广州流辰信息是专业研发低代码技术平台的服务商,可以为企业提供系统开发、数据治理、数据分析各环节技术和方案支撑。为了帮助大家了解开源的表单设计器的相关优势特点,小编将为大家做一个详细介绍。 什么是开源…

node.js使用multer在vue中实现图片上传

效果演示 点击上传选择要上传的图片。 上传成功会加载图片的缩略图。 此时,图片以保存在后端的静态目录中。 设计思路 vue中使用input标签上传图片,绑定change事件,事件负责把图片发送给后端,后端通过multer模块处理前端传来的…

SpringBoot使用classfinal-maven-plugin插件加密Jar包

jar包加密 1、在启动类的pom.xml中加入classfinal-maven-plugin插件 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><…

10分钟快速开始SkyWalking结合Springboot项目

10分钟快速开始SkyWalking结合Springboot项目 实习期间&#xff0c;公司让我去学习一下链路追踪如何集成到Springboot项目中。 为此有两个方案&#xff1a; 1.opentelementryjaegerprometheus opentelementry 收集器收集线上的metrics和traces&#xff0c;然后发送给jaeger和p…

css transform 会影响position 定位

比如通过以下代码.实现导航条上的每个li栏目,以不同的时间间隔,从上向下移动进来并显示 .my-navbar ul li {position: relative;opacity: 0;transform: translateY(-30px);transition: transform .6s cubic-bezier(.165,.84,.44,1),opacity .6s cubic-bezier(.165,.84,.44,1);…

第12章-生成树协议

1. STP产生背景 1.1 桥接网络&#xff1a;网桥 1.2 交换机网络 1.3 解决方案 2. STP生成树协议 2.1 概念 2.2 BPDU(Bridge Protocol Data Unit) 2.3 选举机制&#xff08;网桥&#xff1a;一进一出&#xff09; 2.4 例题 2.5 端口状态 2.6 STP计时器 2.7 STP的问题 …

计算机网络实验八 利用 Java /C++开发网络聊天应用程序

一、实验目的和要求 1)基本掌握利用 Java 开发环境调试应用程序的方法。 2)理解基于套接字开发网络应用程序的过程,深入理解客户/服务器方式工作原理。 3)掌握基于Java和C++开发网络通信程序的方法。 二、实验环境 1)运行 Windows 2008 Server/XP/7 操作系统的 PC 2 台…

git commit 后,本地远端都没有记录,消失不见

今天git commit 之后发现远端没有记录&#xff0c;本地没有最新代码记录 git commit 后&#xff0c;提交记录会消失不见的原因可能是&#xff1a; git只git commit了&#xff0c;没有push到远程分支&#xff0c;切换到其他分支时丢失。而且看不到提交记录&#xff0c;和找不到…

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

一、需求分析 后台管理系统在多个层次上提供了丰富的功能和细致的管理手段&#xff0c;帮助管理员轻松管理和控制系统的各个方面。其灵活性和可扩展性使得后台管理系统成为各种网站、应用程序和系统不可或缺的管理工具。 当我们从多个层次来详细分析后台管理系统时&#xff0…

一文读懂什么是HTTPS检查

我们在什么情况下需要做HTTPS检查&#xff1f; 做HTTPS检查是为了确保通过HTTPS协议传输的数据的安全性&#xff0c;防止数据在传输过程中被窃取或篡改&#xff0c;保护用户隐私和企业数据安全。 HTTPS检查是指通过使用与网络连接上的在途攻击相同的技术来检查加密的Web流量的…

【Android】View 与 ViewGroup

View 是 Android 所有控件的基类&#xff0c;我们平常所用的 TextView 和 ImageView 都是继承自 View 的&#xff0c;源码如下&#xff1a; public class TextView extends View implements ViewTreeObserver.OnPreDrawListener {... }public class ImageView extends View {.…

抖音视频评论抓取软件|视频批量下载

抖音视频评论采集软件是一款基于C#开发的高效、便捷的工具&#xff0c;旨在为用户提供全面的数据采集和分析服务。该软件不仅支持通过关键词进行搜索抓取&#xff0c;还能够通过分享链接进行单个视频的抓取和下载&#xff0c;让用户轻松获取抖音视频评论数据。 &#x1f50d; …

python 循环语句 while 循环

while循环 Python 编程中 while 语句用于循环执行程序&#xff0c;即在某条件下&#xff0c;循环执行某段程序&#xff0c;以处理需要重复处理的相同任务。其基本形式为&#xff1a; while 判断条件(condition)&#xff1a; 执行语句(statements)…… 执行语句可以是单个语句…
推荐文章