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

news2024/11/19 5:40:22

一、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.coloradmin.cn/o/1475821.html

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

相关文章

精品springboot相亲网站预约

《[含文档PPT源码等]精品基于springboot相亲网站[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功! 软件开发环境及开发工具: Java——涉及技术: 前端使用技术:HTML5,CSS3、Ja…

在Golang中简化日志记录:提升性能和调试效率

最大化效率和有效故障排除:在Golang中简化日志记录 日志记录是软件开发的一个基本方面,有助于调试、监控和理解应用程序的流程。在Golang中,有效的日志记录实践可以显著提高性能并简化调试过程。本文探讨了优化Golang日志记录的技术&#xf…

常用git 打tag命令

1.查看所有tag git tag 2.创建 v5.0.0的tag git tag v5.0.0 git tag (创建后查看) 3.推送到远程tag git push origin v5.0.0 4.删除远程tag git push origin --delete v5.0.0 5.删除本地tag git tag -d v5.0.0 6.添加带有备注信息的tag git tag v5.…

SpringCloud认识微服务

文章目录 1.1.单体架构1.2.分布式架构1.3.微服务1.4.SpringCloud1.5.总结 随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢? 微服务架构是一种架构模式&…

Qcom camera hal简介

目录 背景 Android相机软件框架 Qcom HAL主要包括Camx和Chi两部分 Camx中Pipeline 和 node 下图是简单模型的pipeline (sensor --> IFE --> IPE --> SinkTarget) Pipeline中的buffer管理 IFE output port的buffer在Camx中申请 IPE output port使用的buffer来自…

JavaEE进阶(7)Spring Boot 日志(概述、用途、使用:打印日志,框架介绍,SLF4J 框架介绍、更简单的日志输出)

接上次博客:JavaEE进阶(6)SpringBoot 配置文件(作用、格式、properties配置文件说明、yml配置文件说明、验证码案例)-CSDN博客 目录 日志概述 日志的用途 日志使用 打印日志 在程序中获取日志对象 使用日志对象…

Twing模板注入 [BJDCTF2020]Cookie is so stable1

打开题目 我们先抓包分析一下 可以输入{{7*7}}处发包试一下 可以看到在cookie处存在ssti模板注入 输入{{7*‘7’}},返回49表示是 Twig 模块 输入{{7*‘7’}},返回7777777表示是 Jinja2 模块 在这里可以看出是Twing模块 我们直接用固定payload就可以…

【STM32】STM32学习笔记-修改主频 睡眠模式 停止模式 待机模式(45)

00. 目录 文章目录 00. 目录01. PWR简介02. 修改主频接线图03. 修改主频相关API04. 修改主频程序示例05. 睡眠模式接线图06. 睡眠模式相关API07. 睡眠模式程序示例08. 停止模式接线图09. 停止模式相关API10. 停止模式程序示例11. 待机模式接线图12. 待机模式相关API13. 待机模式…

算法:动态规划全解(上)

一、动态规划初识 1.介绍 动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的。 例如:有N件物品…

Java基础八股

基础概念与常识 Java 语言有哪些特点? 简单易学;面向对象(封装,继承,多态);平台无关性( Java 虚拟机实现平台无关性);支持多线程( C 语言没有内置的多线程…

设计模式----装饰器模式

在软件开发过程中,有时想用一些现存的组件。这些组件可能只是完成了一些核心功能。但在不改变其结构的情况下,可以动态地扩展其功能。所有这些都可以釆用装饰器模式来实现。 装饰器模式 允许向一个现有的对象添加新的功能,同时又不改变他的…

Window系统安装USB Redirector结合cpolar实现远程访问本地USB设备

文章目录 前言1. 安装下载软件1.1 内网安装使用USB Redirector1.2 下载安装cpolar内网穿透 2. 完成USB Redirector服务端和客户端映射连接3. 设置固定的公网地址 前言 USB Redirector是一款方便易用的USB设备共享服务应用程序,它提供了共享和访问本地或互联网上的U…

Docker之数据卷自定义镜像

目录 一、数据卷 ​二、自定义镜像 2.1自定义centos 一、数据卷 在docker中,数据卷是宿主机的一个可以供一个或多个容器使用的特殊目录,它可以在容器之间共享和重用,本地与容器间传递数据更高效;对数据卷的修改会立马有效&#…

08 MyBatis之查询专题(返回对象/Map/List封装Map/Map封装Map)+列名与属性名映射的三种方法

准备: INSERT INTO t_car (id, car_num, brand, guide_price, produce_time, car_type) VALUES (165, 6666, 丰田霸道, 32.00, 2020-11-11, 燃油车); INSERT INTO t_car (id, car_num, brand, guide_price, produce_time, car_type) VALUES (166, 1202, 大众速腾, 30.00, 2020…

分布式存储 ZBS 的 RoCE 技术支持与大数据应用场景性能评测

作者:深耕行业的 SmartX 金融团队 闫海涛 在《解决 SAN 交换机“卡脖子”并升级存储架构?一文解析 RoCE 与相关存储方案趋势》文章中,我们分析了如何利用支持 RoCE 技术的分布式存储,同步实现 IT 基础架构的信创转型与架构升级&a…

源码和包管理器安装U-Boot tools

源码和包管理器安装U-Boot tools U-Boot(Universal Bootloader)是一个开源的嵌入式系统引导加载程序,用于引导嵌入式系统,如单板计算机、嵌入式开发板等。U-Boot 提供了一种灵活的引导解决方案,支持多种处理器架构和嵌…

时隔一年的测评:gpt3.5发展到什么程度了?

名人说:一花独放不是春,百花齐放花满园。——《增广贤文》 作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、简要介绍1、chatgpt是什么?2、主要特点3、工作原理4、应用限制5、使…

6.5 共享数据

本节介绍Android的四大组件之一ContentProvider的基本概念和常见用法:首先说明如何使用内容提供器封装内部数据的外部访问接口,然后阐述如何使用内容解析器通过外部接口操作内部数据,最后叙述如何利用内容解析器读写联系人信息,以…

国考省考行测:图形推理,数量规律,多面体截面图,视图

国考省考行测:图形推理,数量规律 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能,附带行测和申论,而常规国考省考最重要的还是申论和行测,所以大家认真准备吧,我讲一起屡屡申论和…

JavaWeb——005 请求响应 分层解耦(Postman、三层架构、IOC、DI、注解)

SpringBootWeb请求响应 这里写目录标题 SpringBootWeb请求响应前言1. 请求1.1 Postman1.1.1 介绍1.1.2 安装 1.2 简单参数1.2.1 原始方式1.2.2 SpringBoot方式1.2.3 参数名不一致 1.3 实体参数1.3.1 简单实体对象1.3.2 复杂实体对象 1.4 数组集合参数1.4.1 数组1.4.2 集合 1.5 …