密码学:分组密码.(块密码:是一种对称密码算法)

news2024/11/19 2:32:50

密码学:分组密码.

分组加密(Block Cipher) 又称为分块加密或块密码是一种对称密码算法,这类算法将明文分成多个等长的块 (Block) ,使用确定的算法和对称密钥对每组分别加密或解密。分组加密是极其重要的加密体制,如DES和AES曾作为美国政府核定的标准加密算法,应用领域从电子邮件加密到银行交易转账,非常广泛。
本质上,块加密可以理解为一种特殊的替代密码,只不过每次替代的是一大块。因为明文空间非常巨大,所以对于不同的密钥,无法制作一个对应明密文的密码表,只能用特定的解密算法来还原明文。


目录:

密码学:分组密码.

分组密码常见工作模式:

(1) ECB

(2) CBC

(3)OFB

(4)CFB

(5)CTR

费斯妥密码和DES:

(1)费斯妥密码

(2) DES

(2.1)初始置换 (Initial Permutation)

(2.2)subkeys 的生成

(2.3)轮函数

(3)AES:

(3.1)有限域

(3.2)Rijndael 密钥生成:

(3.3)AES步骤:

(3.4)常见攻击:

1.Byte-at-a-Time

2..CBC-IV-Detection

3.CBC-Bit-Flipping


分组密码常见工作模式:

密码学中,分组密码的工作模式允许使用同一个分组密码密钥对多于一块的数据进行加密,并保证其安全性。分组密码自身只能加密长度等于密码分组长度的单块数据,若要加密变长数据,则数据必须先被划分为一些单独的密码块。通常而言,最后一块数据需要使用合适填充方式将数据扩展到匹配密码块大小的长度。分组密码的工作模式描述了加密每个数据块的过程,并常常使用基于一个称为初始化向量 (lnitialization Vector,IV) 的附加输入值进行随机化,以保证安全。
对加密模式的研究曾经包含数据的完整性保护,即在某些数据被修改后的情况下密码的误差传播特性。后来的研究则将完整性保护作为另一个完全不同的,与加密无关的密码学目标。部分现代的工作模式用有效的方法将加密和认证结合起来,称为认证加密模式。


(1) ECB

ECB (Electronic Code Book,电子密码本) 是分组加密最简单的一种模式,即明文的每个块都独立地加密成密文的每个块。

如果明文的长度不是分组长度的倍数,则需要用一些特定的方法进行填充。设明文为P,密文为C,加密算法为E,解密算法为D,则ECB模式下的加密和解密过程可以表示为:

ECB模式的缺点在于同样的明文块会被加密成相同的密文块,因此不能很好地隐藏数据模式。在某些场合,这种方法不能提供严格的数据保密性,因此并不推荐用于密码协议。


(2) CBC

在CBC (Cipher Block Chaining),密码分组链接)模式中,每个明文块先与前一个密文块进行异或(XOR)后再进行加密。在这种方法中,每个密文块都依赖于它前面的所有明文块;同时,为了保证每条消息的唯一性,在第1个块中需要使用初始化向量。

(3)OFB

OFB (Output FeedBack,输出反馈模式)可以将块密码变成同步的流密码,将之前一次的加密结果使用密钥再次进行加密(第1次对IV进行加密),产生的块作为密钥流,然后将其与明文块进行异或,得到密文。由于异或(XOR)操作的对称性,加密和解密操作是完全相同的。

OFB模式的公式表示为:

(4)CFB

CFB (Cipher FeedBack,密文反馈)类似OFB,只不过将上一组的密文作为下一组的输入来加密进行反馈,而OFB反馈的是每一组的输出再次经过加密算法后的输出。

CFB的加密与解密可以表示为:


(5)CTR

CTR模式 (Counter Mode,CM) 也被称为ICM模式 (Integer Counter Mode,整数计数模式)、SIC模式(Segmented nteger Counter) 。与OFB类似,CTR将块密码变为流密码,通过递增一个加密计数器来产生连续的密钥流。其中,计数器可以是任意保证长时间不产生重复输出的函数,但使用一个普通的计数器是最简单和最常见的做法。CTR模式的特征类似OFB,但允许在解密时进行随机存取。

图中的“Nonce”与其他图中的IV (初始化向量)相同。IV、随机数和计数器均可以通过连接,相加或异或使得相同明文产生不同的密文。


费斯妥密码和DES:

(1)费斯妥密码

在密码学中,费斯妥密码(Feistel Cipher)用于构造分组密码的对称结构,以德国出生的物理学家和密码学家Horst Feistel命名,通常称为Feistel网络。他在美国IBM工作期间完成了此项开拓性研究。多种知名的分组密码都使用该方案,包括DES、Twofish、XTEA、Blowfish等。Feistel密码的优点在于加密和解密操作非常相似,在某些情况下甚至是相同的,只需要逆转密钥编排即可。图是Feistel密码的加密、解密结构。


(2) DES

DES (Data Encryption Standard,数据加密标准)是一种典型的基于 Feistel 结构的加密算法,1976年被美国国家标准局确定为联邦资料处理标准(FIPS),随后在国际上广泛应用。DES 是基于 56bit 密钥的对称算法,因为包含一些机密设计元素,密钥长度相对较短,并且被怀疑内含美国国家安全局(NSA)的后门,DES算法在刚推出时饱受争议,受到了严密的审查,并推动了现代的块密码及其密码分析的发展。


(2.1)初始置换 (Initial Permutation)

首先,DES会对用户的输入进行处理,称为初始置换 (nitial Permutation) ,用户的输入将会按照表的顺序进行置换。

按照表中的索引,用户输入M的第58位会成为这个过程的结果IP的第1位,M的第50位会成为IP的第2位,以此类推。下面是一个特定的输入M经过IP后的结果:

M=0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 11101111

IP 1100 1100 0000 0000 1100 1100 11111111 1111 0000 1010 1010 1111 0000 10101010

将IP分成等长的左右两部分,可以获得初始的L和R的值:

L0 1100 1100 0000 0000 1100 1100 1111 1111

R0 1111 0000 1010 1010 1111 0000 1010 1010

(2.2)subkeys 的生成

首先,传入的原始key会根据表7-3-2置换生成64位密钥。表中的第一个数为57,这意味着原始密钥key的第57位成为置换密钥key+的第1位;同理,原始密钥的第49位成为置换密钥的第2位。注意,这里的置换操作只从原始密钥取了56位,原始密钥中每字节的最高位是没有被使用的.

下面是一个输入的key被转换成置换密钥key+的一个例子:

key=00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001

key+=1111000 0110011 0010101 0101111 0101010 1011001 1001111 0001111

得到key+后,再将其分成两部分CO和DO:

C0=1111000 0110011 0010101 0101111

D0=0101010 1011001 1001111 0001111

得到C0和D0后,对CO和D0进行循环左移操作,即可得到C1 ~ C16和D1~D16的值,每一次循环移位的位数分别如下:

1122222212222221

例如,对于之前的CO和D0,第一轮对其进行循环左移一位操作,即可得到C1和D1,而在C1和D1的基础上继续循环左移一位,即可得到C2和D2。

C1=1110000110011001010101011111

D1 1010101011001100111100011110

C2=1100001100110010101010111111

D2=0101010110011001111000111101

接下来,将每组Cn和Dn进行组合,就得到了16组数据,每组数据有56位。最后将每组数据按照表的索引进行誉换,就可以得到K1~K16

比如,对于之前提到的C1D1,通过计算可以得到对应的K1:

C1D1=1110000 1100110 0101010 1011111 1010101 0110011 0011110 0011110

K1=000110 110000 001011 101111 111111 000111 000001 110010

(2.3)轮函数

DES中使用的轮函数F结构见图:

每轮的输入会进入E函数并扩展成48位,扩展的方法与前面所使用的索引替换是一样的,替换时直接按照表进行索引即可。

下面是一个输入被E函数扩展的例子:

R0=1111 0000 1010 1010 1111 0000 1010 1010

E(R0)=011110 100001 010101 010101 011110 100001 010101 010101

完成扩展后,这个输入会与对应的subkeys进行异或,得到48位的数据。这48位分为8组,每组6位,再分别去索引S1~S8数组中对应的元素。而S1~S8中元素的大小都在0~15范围,即4位。最后,这8个4位的数会被重新拼起来,成为一个32位的数据,再经过置换操作得到F函数的输出。这里的置换操作与前面没有区别,只不过是索引的表变了,所以不再赘述。


(3)AES:

AES(Advanced Encryption Standard) 又称为Rijndael加密法,是美国政府曾采用的一种分组加密标准,用来替代DES,已经被多方分析且广为全世界所使用。与DES不同,AES使用的并不是Feiste的结构,它在每轮都对全部的128位进行了加密。AES的加密过程是在一个4x4字节大小的矩阵上运作的,这个矩阵又称为“体(state) ”,其初值是一个明文区块(矩阵中的一个元素就是明文区块中的1 Byte)。

各轮AES加密循环 (除最后一轮外) 均包含4个步骤:

(1)AddRoundKey: 矩阵中的每字节都与该回合密钥 (round key) 做XOR运算,每个子密钥由密钥生成方案产生

(2) SubBytes: 透过一个非线性的替换函数,用查找表的方式把每字节替换成对应字节.

(3) ShiftRows: 将矩阵中的每个横列进行循环式移位

(4)MixColumns: 充分混合矩阵中各列的操作,使用线性转换混合每列的4字节。最后一个加密循环中省略本步骤,而以AddRoundKey取代。

因为AES的部分操作是在有限域上完成的,所以我们需要了解有限域的相关知识。


(3.1)有限域


(3.2)Rijndael 密钥生成:

AES的加密过程中用到的并不是输入的128~256位的短密钥,而是基于该短密钥生成的一系列子密钥,通过原密钥生成子密钥的算法称为Riindael密钥生成方案 (Riindael Key Schedule) 。每轮中,数据都需要与128位的子密钥异或,根据原始密钥生成各轮子密钥的过程是由Rindael密钥生成方案完成的。


(3.3)AES步骤:


(3.4)常见攻击:

1.Byte-at-a-Time

例如,对于pwnable.kr的crypto1,核心代码如下:


2..CBC-IV-Detection

 


3.CBC-Bit-Flipping

         

        

    

学习书籍:从0到1:CTFer成长之路... 

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

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

相关文章

CE游戏特例说明

1.CE修改游戏特例说明 模拟器游戏不能直接修改游戏的程序代码(即不能直接使用代码注入的手段修改code段代码),因为游戏并非使用平台语言所写,只有模拟器是使用平台语言写的,即壳是汇编写的,壳用来翻译跨平台…

设计模式 -- 中介者模式

前言 月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂) 央是一片海洋,海乃百川,代表着一块海绵(吸纳万物) 泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出) 月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容 希望大家一起坚持这个过程,也同…

瑞芯微RK3568开发板在智慧交通行业中的应用方案

智能交通安全监测系统是通过利用高性能处理器和先进的图像处理算法,实现对交通场景的实时监测、分析和预警,以提高交通安全水平。以下是基于RK3568处理器的智能交通安全监测系统产品的应用方案: 视频采集与处理: 使用RK3568处理器…

验证码短信 API 接入指南:Java 语言示例代码

短信验证码是一种通过短信发送的验证码,通常用于验证用户的身份、保障账户安全和防止恶意攻击等。短信验证码已经成为现代社会中不可或缺的一部分,广泛应用于各种场景,包括用户注册和登录、找回密码等等。 为了满足企业在账户安全验证和业务…

(详解)Object.keys() Object.values() Object.entries()

目录 一、Object.keys(obj) 二、Object.values() 三、Object.entries() 一、Object.keys(obj) 参数:要返回其枚举自身属性的对象返回值:一个表示给定对象的所有可枚举属性的字符串数组 处理对象,返回可枚举的属性数组 let person {name:…

【机器学习实战】Python基于K均值K-means进行聚类(九)

文章目录 1 前言1.1 K-means的介绍1.2 K-means的应用 2 demo实战演示2.1 导入函数2.2 创建数据2.3 拟合聚类2.4 查看结果 3 使用高级技术评估集群性能*3.1 导入函数3.2 整合数据3.3 计算 4 讨论 1 前言 1.1 K-means的介绍 K均值(K-means)是一种基于距离…

改写句子的软件有哪些-免费改写文章的软件

改写句子的软件 改写句子的软件是一种广泛应用于文字处理的工具,其主要作用是通过对原文中的语言结构和表述方式进行调整和优化,以改进文章的质量和可读性。改写句子的软件广泛用于新闻报道、科学文章、学术论文、书籍等各类文本材料中,旨在…

Elasticsearch的索引库和文档操作、RestClient的索引库和文档操作

一、Elasticsearch Linux系统通过Docker安装Elasticsearch、部署kibana 1.Elasticsearch Elasticsearch 是位于 Elastic Stack 核心的分布式搜索和分析引擎。Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elasticsearch 中。Kibana 使您能够以交互方式探索…

梅果提取物激增2782%?因字成分崛起|3月功效成分TOP100

全文速览 全文字数:6015字 阅读时长:8-12分钟 1.目前已有11款新原料成分进入监测期,三月新原料备案占比达27.1%。 2.天赐高新成为仅次于美国路博润的全球第二大卡波姆供应商,市占率将近两成。 3.氨基酸洗面奶凭多重功效替代皂…

Flink Dashboard的数据监控功能

一、数据反压 1.1 数据反压是啥 数据反压是在实时数据处理中,数据处理流的某个节点上游产生数据的速度大于该节点处理数据速度,导致数据堆积,从该节点向上游传递,一直到数据源,并降低数据源的摄入速度。导致数据反压…

如何远程内网电脑

要远程访问内联网计算机,您需要遵循以下一般步骤: 连接到与目标计算机相同的局域网 (LAN)。 这可能涉及到现场或使用 VPN 远程连接到 LAN。 获取目标计算机的 IP 地址或网络名称。 确保在目标计算机上启用了远程桌面访问。 使用远程桌面软件与目标计…

ASP.NET Core 8 中身份验证的改进

ASP.NET Core 团队正在改进 .NET 8 中的身份验证、授权和身份管理(统称为“身份验证”)。新的 APIs 将使自定义用户登录和身份管理体验变得更加容易。新的端点将在没有外部依赖的单页应用程序(SPA)中启用基于令牌的身份验证和授权。我们还将改进我们的指引和文档,使…

数据结构绪论

数据结构绪论 1.数据结构 数据结构 数据结构是相互之间存在一种或多种特定关系的数据元素的集合。数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及他们之间的关系和操作等相关问题的学科。 数据 数据:是描述客观事物的符号,是计算机中可以…

Dtop环球嘉年华全球Web3.0分布式私域电商生态发展峰会圆满举办

5月7日,Dtop环球嘉年华全球Web3.0分布式跨境私域电商生态发展峰会暨战略合作备忘录签署仪式在马来西亚首都吉隆坡隆重举办。此次峰会汇集了Dtop环球嘉年华韩国、新加坡、澳洲、泰国、印尼等国家的社区联合发起人,环球自治商学院地区代表及来自Dtop环球嘉年华不同国家的粉丝用户…

nas各种共享访问协议的使用(smb,nfs,ftp,ftps,sftp,afp,webdav)

使用群晖、UNRAID、FREENAS等NAS系统的小伙伴肯定会有传输文件的需求,无论是在本地局域网还是远端设备,这种情况下当然可以使用群晖的WEB管理界面中File Station,但是这种方式便捷性不够,于是nas与本地设备文件的传输最好的方式是…

lua | table表的使用操作

目录 lua table表 表的构造 Table的使用 table.concat() table.insert()与table.remove() table.sort() table.maxn() 本文章为笔者学习分享 学习网站:Lua 基本语法 | 菜鸟教程 lua table表 table:是lua的一种数据结构,用来帮助我们…

为什么Windows 10电脑运行缓慢?如何解决?

​虽然电脑是大家生活中的常用工具,但它经常会出现一些烦人的小问题,比如Windows 10系统在长时间使用后运行会变的缓慢。这时你必须等待一会才能打开/关闭电脑、打开和访问文件夹或软件,那要如何优化Windows 10电脑来解决运行缓慢的问题呢&am…

如何在 Espressif-IDE 中使用 Wokwi 模拟器

乐鑫近期已发布 Espressif-IDE v2.9.0,您可直接在此版本的 IDE 中使用 Wokwi 模拟器。 什么是 Wokwi 模拟器? Wokwi 是一款在线电子模拟器,支持模拟各种开发板、元器件和传感器,例如乐鑫产品 ESP32。 Wokwi 提供基于浏览器的界面…

C++学习day--08 数组和字符串

1、什么是数组 数组,就是多个元素的有序“组合”。 C 和 C语言中的数组: 1 )由多个大小相同的小柜子组成 > 相同大小的内存块组成,即相同类型的数据 2 )这些小柜子,有自己对应的编号 > 编号从 …

软考中级工程师笔记(持续更新)

进制 正负0 -0原000110010000 1000反000111100000 1111补000111110000 0000 取值范围 原 -(2n-1)-1~(2n-1)-1 数量 [(2n-1)-1]-[-(2n-1)-1] 1(1代表0)(2*2n-1)-1**2n-1** 反 -(2n-1)-1~(2n-1)-1 数量 [(2n-1)-1]-[-(2n-1)-1] 1(1代表0)(2*2n-1)-1**2n-1** 补 -(2n-1)~(2n-…