密码学系列(四)——对称密码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://xiahunao.cn/news/2814593.html

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

相关文章

数据结构:栈和队列与栈实现队列(C语言版)

目录 前言 1.栈 1.1 栈的概念及结构 1.2 栈的底层数据结构选择 1.2 数据结构设计代码(栈的实现) 1.3 接口函数实现代码 (1)初始化栈 (2)销毁栈 (3)压栈 (4&…

Unity(第九部)物体类

拿到物体的某些数据 using System.Collections; using System.Collections.Generic; using UnityEngine;public class game : MonoBehaviour {// Start is called before the first frame updatevoid Start(){//拿到当前脚本所挂载的游戏物体//GameObject go this.gameObject;…

踩坑wow.js 和animate.css一起使用没有效果

踩坑wow.js 和animate.css一起使用没有效果 问题及解决方法一、电脑系统配置问题二、版本问题 问题及解决方法 一、电脑系统配置问题 在系统属性里面把窗口内的动画和元素勾选 二、版本问题 使用wow加animate4.4.1也就是最新本,打开网页没有任何动画效果 但是把…

CSS——PostCSS简介

文章目录 PostCSS是什么postCSS的优点补充:polyfill补充:Stylelint PostCSS架构概述工作流程PostCSS解析方法PostCSS解析流程 PostCSS插件插件的使用控制类插件包类插件未来的CSS语法相关插件后备措施相关插件语言扩展相关插件颜色相关组件图片和字体相关…

45、上海大学:轻量级多特征神经网络M-FANet,用于MI-BCI解码

本文由上海大学机电工程与自动化学院于2024.1.9日发表于《IEEE Transactions on Neural Systems and Rehabilitation Engineering》(SCI中科院分区二区,IF:4.9) 论文链接:M-FANet: Multi-Feature Attention Convolutional Neural Network fo…

数据结构--二叉排序树(Binary Search Tree,简称BST)

这里写自定义目录标题 二叉排序树二叉排序树与排序数组没有排序数组,链式存储链表的对比二叉排序树概念对于搜索操作,对于插入操作,对于删除操作, 分析删除节点代码运行结果 二叉排序树 二叉排序树与排序数组没有排序数组&#x…

【React源码 - 调度任务循环EventLoop】

我们知道在React中有4个核心包、2个关键循环。而React正是在这4个核心包中运行,从输入到输出渲染到web端,主要流程可简单分为一下4步:如下图,本文主要是介绍两大循环中的任务调度循环。 4个核心包: react:…

SpringMVC了解

1.springMVC概述 Spring MVC(Model-View-Controller)是基于 Java 的 Web 应用程序框架,用于开发 Web 应用程序。它通过将应用程序分为模型(Model)、视图(View)和控制器(Controller&a…

SpringMVC 学习(八)之文件上传与下载

目录 1 文件上传 2 文件下载 1 文件上传 SpringMVC 对文件的上传做了很好的封装,提供了两种解析器。 CommonsMultipartResolver:兼容性较好,可以兼容 Servlet3.0 之前的版本,但是它依赖了 commons-fileupload …

kubectl 命令行管理K8S(上)

目录 陈述式资源管理方式 介绍 命令 项目的生命周期 创建 kubectl create命令 发布 kubectl expose命令 更新 kubectl set 回滚 kubectl rollout 删除 kubectl delete 应用发布策略 金丝雀发布 陈述式资源管理方式 介绍 1.kubernetes 集群管理集群资源…

python 基础知识点(蓝桥杯python科目个人复习计划53)

今日复习内容:做题 例题1:最大的卡牌价值 问题描述: 给定n副卡牌,每张卡牌具有正反面,正面朝上数字为ai,背面朝上数字为bi。一副卡牌的价值为正面朝上数字之和,一开始所有卡牌都是正面朝上的…

【已解决】用ArcGIS处理过的数据在QGIS中打开发生偏移怎么办?| 数据在ArcGIS中打开位置正常,在QGIS中偏移

1. 问题描述 栅格或者矢量数据用ArcGIS打开时位置正确(可以和其他数据对应上)。但是用QGIS打开后发现位置不对 2. 问题的原因 因为该数据用了ArcGIS自定义的坐标系,QGIS不支持,识别有误。因此在数据QGIS中的坐标系参数有误&a…

HTTP 的 multipart 类型

上一篇文章讲到 http 的 MIME 类型 http MIME 类型 里有一个 multipart 多部分对象集合类型,这个类型 http 指南里有讲到:MIME 中的 multipart(多部分)电子邮件报文中包含多个报文,它们合在一起作为单一的复杂报文发送…

【生态适配】亚信安慧AntDB数据库与FT-2000+/64处理器完成兼容互认

日前,亚信安慧AntDB数据库完成了与FT-2000/64处理器的兼容互认。经湖南亚信安慧科技有限公司(简称“亚信安慧”)与飞腾信息技术有限公司(简称“飞腾公司”)的严格测试,亚信安慧AntDB数据库V6.2在FT-2000/64…

《大模型时代-ChatGPT开启通用人工智能浪潮》精华摘抄

原书很长,有19.3w字,本文尝试浓缩一下其中的精华。 知识点 GPT相关 谷歌发布LaMDA、BERT和PaLM-E,PaLM 2 Facebook的母公司Meta推出LLaMA,并在博客上免费公开LLM:OPT-175B。 在GPT中,P代表经过预训练(…

一看就会:使用nvm实现多个版本的node自由切换

一、介绍 使用nvm可以方便的在同一台设备上进行多个node版本之间切换,解决不同的项目所使用的node版本不一样的问题 二、安装nvm 如果已安装node环境先卸载后再安装nvm,防止出现不确定错误 1、卸载node环境,并清除node环境变量配置 通过…

【README 小技巧】 展示gitee中开源项目start

【README 小技巧】 展示gitee中开源项目start <a target"_blank" hrefhttps://gitee.com/wujiawei1207537021/wu-framework-parent><img srchttps://gitee.com/wujiawei1207537021/wu-framework-parent/badge/star.svg altGitee star/></a>

我在使用 Copilot 时遇到了许可证验证错误。

如果使用的是 Copilot&#xff0c;并收到以下错误消息&#xff0c;请按以下步骤进行操作&#xff1a; We encountered a problem validating your Copilot license. For more information, see https://aka.ms/copilotlicensecheck 请确保使用的是正确的帐户 请确保已使用具…

Flink动态分区裁剪

1 原理 1.1 静态分区裁剪与动态分区裁剪 静态分区裁剪的原理跟谓词下推是一致的&#xff0c;只是适用的是分区表&#xff0c;通过将where条件中的分区条件下推到数据源达到减少分区扫描的目的   动态分区裁剪应用于Join场景&#xff0c;这种场景下&#xff0c;分区条件在joi…

kafka平滑升级过程指导

一、前言 Apache Kafka作为常用的开源分布式流媒体平台&#xff0c;可以实时发布、订阅、存储和处理数据流,多用于作为消息队列获取实时数据&#xff0c;构建对数据流的变化进行实时反应的应用程序&#xff0c;已被数千家公司用于高性能数据管道、流分析、数据集成和任务关键型…