对称密码体制的工作模式及标准解析

news2024/9/19 10:53:15

目录

1. 对称加密

2. 分组密码工作模式

2.1 ECB

2.2 CBC

2.3 CFB

2.4 OFB

2.5 CTR

​​​​​​​2.6 XTS

3. DES/3DES

​​​​​​​4. AES

​​​​​​​5. SM4


1. 对称加密

对称加密是一种发送方和接收方都使用相同密钥对数据进行加解密的方法。它只提供保密性,不提供真实性。

由于对称分组加密以固定长度分组(DES固定64位分组,AES固定128位分组),但保密传输的消息内容不一定刚好是一个分组,对于长报文还需要划分为多个分组,因此为应对不同应用场景,分组密码还提供了各种工作模式。

2. 分组密码工作模式

2.1 ECB

ECB(Electronic Code Book)是分组密码最简单的操作模式。每个数据分组(下文称数据块)都以相同的方式加密。

图 1 ECB模式

由于每个数据块相互独立,因此可并行计算,提高效率,但相同的明文块始终会输出相同的密文块,难以抵抗统计分析攻击。因此只建议用在密钥保护等小数据量的安全保护。

2.2 CBC

CBC(Cipher Block Chaining):为了克服 EBC 的缺点,引入初始向量 IV,可以防止同样的明文块始终加密成同样的密文块。

IV 作为初始化变量,参与第一个明文块的异或,后续的每一个明文块和它前一个明文块所加密出的密文块相异或。

图 2 CBC 模式

2.3 CFB

CFB(Cipher Feedback)可以实现对明文进行逐比特加密。

该模式需要初始IV作为初始输入数据块,在标准中,CFB模式还需要提供一个整数s,用于表示每个明文\密文块包含s位,s取指包括1、8、64、128。在本文中,s= 128。

加密时,第一个输入数据块为IV,经由加密计算出第一个输出数据块,然后取该块的最高s 位与明文的最高s位进行异或,得到流密文块;剩余的block size(128位) - s位的数据作为高位与密文块s位数据进行拼接,作为下一个输入数据块,依次类推。因此该模式被称为密文反馈模式。

在本文中,s= 128,因此该数据块所有位将参与异或,得到的密文块继续作为下个输入数据库。

图 3 CFB模式

2.4 OFB

OFB(Output Feedback)与CFB模式类似,OFB是将IV加密后的数据直接作为下一个输入数据块,明文与该数据块异或后得到密文块。

二者区别仅仅在于密码算法的输入。

CFB模式中,密码算法的输入是前一个密文分组反馈到密码算法中,因此就叫“密文反馈模式”。

OFB模式中,密码算法的输入是密码算法的前一个输出反馈给密码算法,因此叫“输出反馈模式”。

图 4 OFB模式

​​​​​​​2.5 CTR

CTR(Counter)模式,每个数据块对应一个逐次累加的计数器,通过对计数器进行加密来得到输出块,最终与明文进行异或,得到密文块。

图 5 CTR模式

CTR模式能够对多块报文加解密进行并行处理,提升了处理效率;在该模式下,进行异或之前所有操作不依赖明文或者密文,因此可以进行预处理,极大提高吞吐量,针对实时性和速度要求较高的场景。

​​​​​​​2.6 XTS

XTS(XEX encryption mode with tweak and ciphertext stealing)主要用于磁盘加密,引入可调整的分组密码概念,除了密钥和明文作为输入外,新增另一个输入tweak,通过改变tweak值来改变密文。

图 6 XTS模式encrypt过程

从图5可以看到,XTS与上述其他模式相比,最明显特征为有两个密钥,Key1、Key2,其中Key2用于对tweak(上图i)进行加密,Key1用于分组加密,具体步骤如下:

  1. Tweak(上图i)使用密钥K2进行AES加密,然后与有限域数​​​​​​​αj进行乘运算,得到T
  2. T跟明文块P进行异或得到PP
  3. PP再使用K1进行AES加密得到CC
  4. CC再和T异或得到最终的密文C

解密同理,如下图所示:

图 7 XTS Decrypt过程

值得注意的是,当最后一个密文块不足128bit时,就需要进行数据窃取和补充,如下图所示:

图 8 XTS-AES encryption of last two blocks when last block is 1 to 127 bits

伪代码逻辑如下:

将明文划分为m+1块,P = P0|...|Pm-1|Pm,

前m-2块正常加密,最后两块处理分为两种情况:

  1. 当最后一块数据分组Pm长度为0时,Cm为空,Cm-1正常计算即可;
  2. 当0 < Cm长度< 128时,首先需要计算出Pm-1的密文CC,然后取出CC中前b(Pm长度)作为最后一块Cm;取CC中128-b位作为CP与最后一块明文Pm拼接得到PP,计算得到Cm-1

3. DES/3DES

DES(Data Encryption Standard)起源于1973年美国国家标准局NBS(先国家标准与技术研究所NIST)征求国家密码标准方案,最终于1977年确定为联邦信息处理标准(FIPS-46),DES处理明文分组长度为64位,密钥长度尽管有64位,但实际使用只有56位,其余8为可做奇偶校验位或者随机处理。

随着计算机处理能力提高,56位密钥不再被认为是安全可靠(1999年EFT在一次会议中破解了一个DES密钥),因此3DES作为替代者出现。

所谓3DES即三重DES,常见有如下几种使用策略:

  1. DES-EEE3策略:使用三个不同密钥,顺序使用三次DES加密;
  2. DES-EEE2策略:顺序使用三次DES加密,其中第一次和第三次密钥相同
  3. DES-EDE3策略:使用三个不同密钥,顺序进行加密-解密-加密算法。

可以看到,在3DES下,密钥增加到112位或者168位,有效防御蛮力攻击;但从实现角度来看,处理速度进一步变慢,同时明文分组长度仍为64位,就效率而言,与密钥长度增长不匹配。

​​​​​​​4. AES

Advanced Encryption Standard (AES)作为DES的替代者,由NIST于1997年进行征集,并在1999年公布了5个候选算法:MARS、RC6、Rijindael、SERPENT和Twofish。最终根据安全性、性能、大小、实现难易性选定了Rijindael(音译”Rain Doll”)算法作AES算法,并于2001年由NIST正式发布,即FIPS PUB 197。

Rijindael算法作为DES的另一种替代方案,要求分组长度固定位128位,密钥长度可为128、192或者256位,对应加密轮数为10、12、14轮;总结如下:

表 1 AES密钥、分组和轮数关系

标准变体

密钥长度(bits)

分组大小(bits)

加解密轮数

AES-128

128

128

10

AES-192

192

128

12

AES-256

256

128

14

该算法也是目前常用的对称加密算法。

​​​​​​​5. SM4

国家标准《信息安全技术 SM4分组密码算法》 由TC260(全国网络安全标准化技术委员会)归口 ,主管部门为国家标准化管理委员会。

该算法分组长度为128位、密钥长度为128位,加密算法与密钥扩展算法均采用非线性迭代结构,运算轮数为32轮。数据加密和解密算法结构相同,解密轮密钥是加密轮密钥的逆序。

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

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

相关文章

Django的响应对象

【图书介绍】《Django 5企业级Web应用开发实战&#xff08;视频教学版&#xff09;》_django 5企业级web应用开发实战(视频教学版)-CSDN博客 《Django 5企业级Web应用开发实战&#xff08;视频教学版&#xff09;》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com) Django的请…

支持向量机和梯度提升决策树

支持向量机&#xff08;SVM, Support Vector Machine&#xff09; 原理 支持向量机是一种监督学习模型&#xff0c;适用于分类和回归任务。SVM 的目标是找到一个能够最大化类别间间隔的超平面&#xff0c;以便更好地对数据进行分类。对于非线性数据&#xff0c;SVM 通过核技巧…

C语言程序设计17

程序设计17 问题17_1代码17_1结果17_1 问题17_2代码17_2结果17_2 问题17_3代码17_3结果17_3 问题17_1 下列给定程序的功能是 &#xff1a;调用函数 f u n fun fun 将指定源文件中的内容复制到指定的目标文件中&#xff0c;复制成功时函数返回 1 1 1 &#xff0c;失败时返回 …

Brant-2:开启脑信号分析新篇章的基础模型

人工智能咨询培训老师叶梓 转载标明出处 脑信号&#xff0c;包括通过侵入性或非侵入性方式收集的脑电图&#xff08;EEG&#xff09;和立体脑电图&#xff08;SEEG&#xff09;等生物测量信息&#xff0c;为我们理解大脑的生理功能和相关疾病的机制提供了宝贵的洞见。然而脑信号…

vue3+cesium创建地图

1.我这边使用的是cdn引入形式 比较简单的方式 不需要下载依赖 在项目文件的index.html引入 这样cesium就会挂载到window对象上面去了 <!-- 引入cesium-js文件 --><script src"https://cesium.com/downloads/cesiumjs/releases/1.111/Build/Cesium/Cesium.js"…

Java二十三种设计模式-外观模式(9/23)

外观模式&#xff1a;简化复杂系统的统一接口 引言 外观模式&#xff08;Facade Pattern&#xff09;是一种结构型设计模式&#xff0c;它为子系统中的一组接口提供一个统一的高层接口。外观模式定义了一个可以与复杂子系统交互的简化接口&#xff0c;使得子系统更加易于使用…

科研绘图系列:R语言GWAS曼哈顿图(Manhattan plot)

介绍 曼哈顿图(Manhattan Plot)是一种常用于展示全基因组关联研究(Genome-Wide Association Study, GWAS)结果的图形。GWAS是一种研究方法,用于识别整个基因组中与特定疾病或性状相关的遗传变异。 特点: 染色体表示:曼哈顿图通常将每个染色体表示为一个水平条,染色体…

Git 基础操作手册:轻松掌握常用命令

Git 操作完全手册&#xff1a;轻松掌握常用命令 引言一、暂存&#xff1a;git add ✏️二、提交&#xff1a;git commit &#x1f4dd;三、拉取、拉取合并 &#x1f504;四、推送&#xff1a;git push &#x1f310;五、查看状态&#xff1a;git status &#x1f4ca;六、查看历…

第09课 Scratch入门篇:小鸡啄米-自制积木实现

小鸡啄米-自制积木 故事背景&#xff1a; 在上一章的案例中&#xff0c;实现了小鸡啄米的动画&#xff0c;但是发现太多的重复代码&#xff0c;是我们编程的时候代码泰国繁琐&#xff0c;我们可以使用自制积木&#xff0c;将相同的代码提取出来制作成一个新的积木&#xff0c;在…

ESP32CAM人工智能教学17

ESP32CAM人工智能教学17 内网穿透,视频上云 小智一心想让ESP32Cam视频能发送到云端,这样我们在任何地方,都能查看到家里的摄像头了,甚至能控制摄像头的小车了。 内网穿透的技术原理想要让ESP32Cam把视频发送到云端,就必须要做内网穿透。也就是用户的手机(或电脑),可以…

Windows中如何配置Gradle环境变量?

本篇教程,主要介绍,如何在Windows中配置Gradle7.4环境变量 一、下载安装包 安装包下载;gradle-7.4-all.zip 二、解压安装包

Python基础知识笔记---保留字

保留字&#xff0c;也称关键字&#xff0c;是指被编程语言内部定义并保留使用的标识符。 一、保留字概览 二、保留字用途 1. False&#xff1a;表示布尔值假。 2. None&#xff1a;表示空值或无值。 3. True&#xff1a;表示布尔值真。 4. not&#xff1a;布尔逻辑操作符…

LabVIEW 使用 I/O 服务器

I/O 服务器是共享变量引擎&#xff08;SVE&#xff09;插件&#xff0c;用于与不使用NI专有的NI发布-订阅协议&#xff08;NI-PSP&#xff09;的设备和应用程序通信。I/O 服务器充当LabVIEW VI中的共享变量与OPC、Modbus或EPICS数据标签之间的桥梁。它们插入SVE中&#xff0c;提…

生成式人工智能最重要的三个神经网络,从谷歌DeepDream、Magenta、到NVIDIA的StyleGAN

神经网络模型&#xff08;Neural Network Model&#xff09;是一种受生物大脑启发的机器学习模型&#xff0c;用于模拟人脑的结构和功能。它由大量相互连接的人工神经元&#xff08;节点&#xff09;组成&#xff0c;这些神经元按层级结构排列&#xff0c;通常包括输入层、隐藏…

OSI七层网络模型:构建网络通信的基石

在计算机网络领域&#xff0c;OSI&#xff08;Open Systems Interconnection&#xff09;七层模型是理解网络通信过程的关键框架。该模型将网络通信过程细分为七个层次&#xff0c;每一层都有其特定的功能和职责&#xff0c;共同协作完成数据从发送端到接收端的传输。接下来&am…

制品库nexus

详见&#xff1a;Sonatype Nexus Repository搭建与使用&#xff08;详细教程3.70.1&#xff09;-CSDN博客 注意事项&#xff1a; 1.java8环境使用nexus-3.69.0-02-java8-unix.tar.gz包 2.java11环境使用nexus-3.70.1-02-java11-unix.tar.gz包 3.注意使用制品库/etc/yum.repos.…

leetcode 1596 每位顾客经常订购的商品(postgresql)

需求 表&#xff1a;Customers ---------------------- | Column Name | Type | ---------------------- | customer_id | int | | name | varchar | ---------------------- customer_id 是该表主键 该表包含所有顾客的信息 表&#xff1a;Orders ---------------------- …

LeetCode 144.二叉树的前序遍历 C写法

LeetCode 144.二叉树的前序遍历 思路&#x1f9d0;&#xff1a; 遍历很简单&#xff0c;但是我们需要开空间进行值的存储&#xff0c;结点个数也可以用递归进行统计&#xff0c;开好空间就可以用数组进行值的存储&#xff0c;注意下标要么用全局&#xff0c;要么指针解引用&…

【Canvas与艺术】五色五角大楼

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>五L莫比乌斯五角大楼</title><style type"text/css&qu…