分组密码算法与DES算法

2023-10-30

目录

1 分组密码的含义

1.1 分组密码介绍

1.2 分组密码的含义

1.3 分组密码的要求

2 分组密码的设计思想

2.1 分组密码的设计思想

3 分组密码的基本特点

 3.1 分组密码的基本特点

 3.2 分组密码的迭代结构

3.3 子密钥的生成方法

3.4 轮函数的设计准则 

 3.5 迭代的轮数

4 分组密码的迭代结构

4.1 分组密码迭代结构 

feistel结构:

加密过程中一轮:

 解密过程中一轮:

5 DES分组密码算法 

5.1 DES起源

5.2 DES概述 

5.3 DES加密流程图 

 5.4 DES函数F的实现流程图

 5.5 选择扩展置换E(32位扩展到48位)

5.6 DES子密钥的生成算法

5.7  S盒代替——压缩替代变换

 5.8 置换P盒的构造方法

​ 5.9 轮函数步骤

 5.10 逆初始置换​

 5.10 DES解密流程图

6 DES其他知识

6.1 弱密钥

6.2 半弱密钥

6.3 差分分析

6.4 线性分析

6.5 多重DES


1 分组密码的含义

1.1 分组密码介绍

  •  分组密码(block cipher)是现代密码学中的重要体制之一,也是应用最广泛、影响最大的一种密码体质,其主要任务是提供数据保密性,也可以用到再许多方面,如构造伪随机数生成器、序列密码、认证码和哈希函数等。
  • 由于分组密码加解密速度较快,安全性好,以及得到许多密码芯片的支持,现代分组密码发展非常快,在许多研究和应用领域得到了广泛的应用。

1.2 分组密码的含义

        分组密码,也称块密码,它是将明文消息经编码表示后的二进制序列 p_{0},p_{1},\cdots,p_{i},\cdots划分成若干固定程度(譬如m)的组(或块)p=(p_{0},p_{1},\cdots,p_{m-1}),各组分别在密钥k=(k_{0},k_{1},\cdots,k_{t-1})的控制下转换成长度为n的密文分组c=(c_{0},c_{1},\cdots,c_{n-1})。其本质是从一个明文空间(m长的比特串的集合)P到密文空间(n长的比特串的集合)C的一一映射。(一般而言,m=n,但与t不一定相等)。

1.3 分组密码的要求

  •  分组长度要足够大:当分组长度较小时,攻击过穷举明文空间,得到密码换规律,难于抵御选择明文攻击。
  • 密码量要足够大:如果密钥量小,攻击者可以有效地通过穷举密钥的方法进行破译
  • 密码变换足够复杂:使攻击者除了穷举法攻击以外,找不到其他有效的攻击方法。
  • 加密和解谜运算简单:便于软件和硬件实现,性能好
  • 无数据扩展或压缩

2 分组密码的设计思想

2.1 分组密码的设计思想

  •  扩散

所谓扩散,是指要将算法设计成明文每一比特的变化尽可能多地影响到输出密文序列的变化,以便隐蔽明文的统计特性。形象地称为雪崩效应。 

扩散的另一层意思是密钥每一位的影响尽可能迅速地扩展到较多的密文比特中去。即扩散的目的是希望密文中的任一比特都要尽可能与明文、密钥相关联,或者说,明文和密钥中任何一比特值发生改变,都会在某种程度上影响到密文值得变化,以防止将明文或密钥分解成若干孤立的小部分,然后被逐个击破。

  • 混乱

所谓混乱,指在加解密变换过程中明文、密钥以及密文之间的关系尽可能地复杂化 ,以防密码破译者采用解析法(即通过建立并求解一些方程)进行破译攻击。

混乱可以用“搅拌机”来形象地解释,将一组明文和一组密钥输入到算法中,经过充分混合,最后变成密文。同时要求,执行这种“混乱”作业的每一步必须是可逆的,即明文混乱以后能得到密文,反之,密文经过逆向的混乱操作后能恢复出明文。(按照混乱原则,分组密码算法应有复杂的非线性因素)。

  • 乘积密码

依次使用两个或两个以上的基本密码,所的结果的密码强度将强于所有单个密码的强度。实际上,乘积密码就是扩散和混乱两种基本密码操作的组合变换。 这样能够产生比各自单独使用时更强大的密码系统。选择某个较为简单的密码变换(包含多个基本密码),在密钥控制下以迭代方式多次利用它进行加密变换,就可以达到预期的扩散和混乱效果。乘积密码有助于利用少量的软硬件资源实现较好的扩散和混乱效果,再通过迭代方法,达到预期设计效果,这种思想在现代代码设计中使用非常广泛。

3 分组密码的基本特点

 3.1 分组密码的基本特点

  • 分组长度:能够抵御选择明文攻击
  • 密钥长度:能够抵御穷举攻击
  • 子密钥
  • 轮函数F
  • 迭代 

 3.2 分组密码的迭代结构

 

3.3 子密钥的生成方法

子密钥的生成是迭代分组算法的一个重要组成部分,是从初始(种子)密钥产生各迭代要是用的子密钥的算法。 也就是说,轮函数F的功能是在子密钥的参与和控制下实现的,子密钥的生成很重要,其评价指标:

  • 实现简单、速度,满足轮函数F的要求;
  • 种子密钥的所有比特对每个子密钥比特的影响大致相同;
  • 没有弱密钥或弱密钥容易确定

3.4 轮函数的设计准则 

轮函数F是分组密码的核心,是分组密码中单轮加解密函数,其基本准则:

  • 非线性
  • 可逆性
  • 雪崩效应 

其主要的性能指标是安全性、速度、灵活性。 

 3.5 迭代的轮数

分组密码一般采用简单的、。安全性弱的密码函数进行多轮迭代运算,使得安全性增强。一般来说,分组密码迭代轮数越多,密码分析越困难,但也不是追求迭代轮数越多越好,过多的迭代轮数会使加解密算法的性能下降,而实际的安全性增强不明显。决定迭代轮数的准则:密码算法分析的难度大于简单穷举搜索攻击的难度。分组密码迭代轮数一般采用8、10、12、16、20的居多。

在密码学的学术理论中,任何攻击方式,其计算复杂度若少于暴力搜寻法所需要计算复杂度,就能被视为针对该密码系统的一种破解法;但这并不表示该破解法已经进入可以实际应用的阶段。 

4 分组密码的迭代结构

4.1 分组密码迭代结构 

feistel结构:

 

加密过程中一轮:

  • Feistel加密一轮的迭代过程
  • 明文被分为等长的两部分
  • 第i轮子密钥由初始密钥k推导出的
  • 一般来说,每轮子密钥与k不同,也互不相同
  • F称为轮函数

 

 解密过程中一轮:

 

  • Feistel解密一轮迭代过程
  • 被解密的数据左右互换
  • 解密过程按照与加密过程相反顺序使用密钥

 

 解密同加密一样,也需要进行左右消息分组的运算,并且要将运算结果传递给下一轮。通过feistel结构的加密和解密,我们可以发现在明文消息在经过加密以后的密文,可以通过解密算法将其还原为原始的明文,也就是说该加密算法是可逆的。 

5 DES分组密码算法 

5.1 DES起源

1973年,美国的国家标准局认识到建立数据加密标准的迫切性,开始在全国征集国家数据加密标准。有很多公司着手这项工作并提交了一些建议,经历了海选、初选、决赛,最后IBM公司的Lucifer加密系统获得了胜利。经过两年多的公开讨论之后,1997年1月15日NBS决定利用这个算法,并将其更名为数据加密标准(Data Encryption Stand-ards,DES)。不久,其他组织也认可和采用DES作为加密算法,供商业和非国防行政府部门使用。当时,确定有效期为5年,随后在1983年、1988年、1993年三次再次授权该算法续用五年,1997年开始征集AES(高级机密标准),2000年选定比利时人设计的Rijndael算法作为新标准(AES)。

5.2 DES概述 

  • 分组加密算法:明文和密文为64位分组长度。
  • 密码算法:加密和解密除密钥编排不同外,使用同一算法。
  • 密钥长度:56位,但存在弱密钥,容易避开。
  • 采用混乱和扩散的组合,每个组合先代换后置换,共16轮。
  • 只使用了简单的逻辑运算,易于实现,速度快。
  • 现代密码学诞生的标志之一,揭开了商用密码研究的序幕。 

5.3 DES加密流程图 

初始置换:

 在这里插入图片描述

 ·在这里插入图片描述

Feistel结构:feistel结构把任何函数(一般称为F函数,又称轮函数)转化为一个置换。
子密钥的生成:子密钥K的生成大致分成三个过程:置换选择PC1,循环左移,置换选择PC2。
Ln = R(n - 1);
Rn = L(n - 1)⊕f(Rn-1,kn-1)

 5.4 DES函数F的实现流程图

 

 5.5 选择扩展置换E(32位扩展到48位)

 E盒扩展的作用是把32比特的输入扩展成48比特,扩展的方式如下图所示,把输入的32比特从左到右编号为1,2,3.。。。32,并把 这32比特写成每行4个,共8行的形式。然后把第i-1行最右比特和第i+1行最左比特添加到第i行的左边和右边,这样就得到了48bit的输出。(即c1c2c3c4c5c6 = m32m1m2m3m4m5 .... 以此类推)。

 

5.6 DES子密钥的生成算法

 

  • 初始密钥也称种子密钥,64位,经过子密钥换位表PC-1的变换后,由64位变成56位(因为只有56位是有用的位数,有八位为奇偶校验位),这56位分为两组C0和D0; 子密钥换位表PC-1:

https://pic-1259640338.cos.ap-shanghai.myqcloud.com/img/PC1.png

 将明文中第57位数据放在转换后生成表的第一位,第49位放在生成表的第2位……

  • C0和D0作一次循环左移得到C1和D2;循环左移的规则为:16次循环,每次左移 1 1 2 2, 2 2 2 2, 1 2 2 2, 2 2 2 1。
  • C1和D2合并为56位,再经过子密钥换位表PC-2的变换后,由56位变成48位,即得到第一个子密钥K1 子密钥换位表PC-2:

https://pic-1259640338.cos.ap-shanghai.myqcloud.com/img/PC2.png

  •  总流程图

5.7  S盒代替——压缩替代变换

 S盒的作用是将输入的48比特数据压缩为32比特。

 

8个6进4出的S盒如下图所示,每个S盒有4行,记为第0,1,2,3行,有16列,记为第0,1,2,3.。。。,15列。

以s6为例解释s盒的使用方法:

对于6位输入b1b2b3b4b5b6,用b1b6组成的二进制数表示行标,b2b3b4b5组成的二进制数表示列标,查s盒的表,表中的十进制数字转为4位二进制即为输出

 

 5.8 置换P盒的构造方法

 5.9 轮函数步骤

 令+表示XOR加法 (模2诸位加法) ,对于第n轮有:

在这里插入图片描述

 5.10 逆初始置换IP^{-1}

 轮函数最后一步的左边32 bit和右边32 bit合成64 bit,再进行逆初始置换,得到最终密文。

在这里插入图片描述

 5.10 DES解密流程图

6 DES其他知识

6.1 弱密钥

  • 如果给定初始密钥k,经子密钥产生器产生的各个子密钥都相同,即有k_{1} = k_{2} = \cdots = k_{16},则称给定的初始密钥k为弱密钥
  • 若k为弱密钥,则对任意的64bit信息有:E_{k}(E_{k}(m)) = mD_{k}(D_{k}(m)) = m
  • 弱密钥的构造由子密钥产生器中寄存器C和D中的存数在循环移位下出现重复图样决定的(C和D中的存数为全0或全1)。共有四个(十六进制):

 

6.2 半弱密钥

  •  若给定初始密钥k,产生的16个子密钥只有两种,且每种都出现8次,则k称为半弱密钥。
  • 半弱密钥的特点是成对出现,且具有下述性质:若k_{1}k_{2}为一对半弱密钥,m为明文组,则有:E_{k2}(E_{k1}(m)) = E_{k1}(E_{k2}(m)) = m
  • 此外,还有四分之一弱密钥和八分之一弱密钥。
  • 在DES的256(72057594037927936)个密钥中,弱密钥(256)所占 的比例是非常小的,而且极易避开,因此,弱密钥的存在对DES的安全性威胁不大

6.3 差分分析

 差分分析是一种攻击迭代密码体制的选择明文攻击方法, 与一般统计分析法的不同之处是,它不是直接分析密文或密 钥和明文的统计相关性,而是分析一对给定明文的异或(对 应位不同的个数称为差分)与对应密文对的异或之间的统计 相关性。差分分析的基本思想是在攻击的迭代密码系统中找 出某些高概率的明文差分和密文差分对来推算密钥。利用此 法攻击DES,需要用247个选择明文和247次加密运算,比穷举 搜索的工作量大大减少。然而找到247个选择明文的要求使这
种攻击只有理论上的意义。

6.4 线性分析

该方法是日本密码学家松井充(Mitsuru Matsui)于1993年公 开的另一种对分组密码进行分析攻击的方法,这种方法试图 通过大量的“明-密文对”找出分组密码算法中与密钥有关的 线性方程,然后试着得到大量的这类关系从而确定密钥。其 基本思想是以最佳的线性函数逼近DES的非线性变换S盒,这 是一种已知明文攻击方法,可以在有243个已知明-密文对的情 况下破译DES。虽然获得已知明文比选择明文更容易,但线性分析作为一种攻击手段针对DES在实际上仍然不可行。

6.5 多重DES

  • 为了提高DES的安全性能,并充分利用已有DES的软件 和硬件资源,可以使用多重DES。多重DES就是使用多个密 钥利用DES对明文进行多次加解密,使用多重DES可以增加密钥量,从而大大提高抵抗对密钥的穷举搜索攻击的能力。
  • 已经证明多重DES并不等价于使用一个56位密钥的单重DES:Ø 二重DES Ø 三重DES。
    所有可能的64位明文分组映射到所有可能的64位密文分 组共有264!(>101020)种不同的方法,56位密钥的DES算 法,提供了256(<1017)个这种映射关系,所以,多重 DES所对应的映射不同于单DES所定义的映射。以双重 DES为例,对于消息m1,能够找到一个k3满足: Ek2(Ek1(m1))=Ek3(m1);对于消息m2,能够找到一个k4 满足:Ek2(Ek1(m2))=Ek4(m2) ;但k3和k4相同的概率只 有1/264。也就是说,针对任意消息m不存在k3满足
    Ek2(Ek1(m))=Ek3(m)。
  • 二重DES
  • 三重DES

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分组密码算法与DES算法 的相关文章

随机推荐

  • 用Ehcache查询性能提升了100倍

    文章来源 石杉的架构笔记原创文章 目录 业务场景 如何通过缓存优化查询接口 基于大数据离线平台进行缓存预热 本地缓存框架 Ehcache 今天给大家来分享一个知识 那就是平时我们开发系统的时候 如何运用 Ehcache 这款本地缓存框架 把
  • matlab 点云精配准(2)——point to plane ICP(点到面的ICP)

    目录 一 算法原理 1 原理概述 2 参考文献 二 代码实现 三 结果展示 1 初始位置 2 配准结果 四 参考链接 五 测试数据 本文由CSDN点云侠原创 matlab 点云精配准 2 point to plane ICP 点到面的ICP
  • openwrt笔记3_自启动+golang

    Openwrt设置开机启动 设置开机启动原理 etc init d目录下面就是系统加载的开机配置 每个配置可以设置START优先级 数字越大启动越靠后 如果有很多需要依赖网络或者USB之类的启动程序最好设置靠后一些 等其他程序启动了再启动
  • 5G/NR PDCCH总结

    1 CCE PDCCH主要用于传输下行控制信息和UL Grant 以便UE正确接收PDSCH及为PUSCH分配上行资源 其分配单位为CCE 1 CCE 6 REG 72 RE 1 REG 1 OFDM symbol 12 subcarrie
  • 开发文档怎么写

    项目开发过程中为了增加程序的可读性和程序的健壮性 方便后期程序的调试和维护 所以需要在开发过程中统一技术规范 一般会在项目初期确定好相关文档作为这一统一的规范 不同公司会对文档做不同要求 划不同的分类 但一般来说 或者拿自己的经验说 大致可
  • -128----127缓存,在栈中获取

    span style font size 13px package test span br style font size 13px br style font size 13px br style font size 13px span
  • nginx负载均衡的5种策略

    nginx负载均衡的5种策略 要理解负载均衡 必须先搞清楚正向代理和反向代理 负载均衡的几种常用方式 1 轮询 默认 每个请求按时间顺序逐一分配到不同的后端服务器 如果后端服务器down掉 能自动剔除 upstream backserver
  • 如何根据excel文档中的内容同步更新数据库中的数据

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 根据excel中的内容同步更新数据库中的数据 需求概述 一 解决思路 二 具体解决方案 1 使用navicat将excel导入到mysql数据库中 2 写SQL语句做更新操作
  • python中rfind函数作用_python中的rfind函数如何使用

    python中rfind函数的用法 rfind 函数用于返回字符串最后一次出现的位置 从右向左查询 如果没有匹配项则返回 1 具体使用方法如 print str rfind substr 0 10 函数描述 推荐教程 Python入门教程
  • Ubuntu系统无法联网问题

    在网上看到许多解决方案是修改网络配置文件 但是ubuntu系统的目录结构中甚至都没有对应文件 因此找到以下解决方案 能够顺利联网并进行sudo install 亲测有效解决方案 1 在虚拟机设置中将网络适配器修改为NAT模式 2 找到net
  • please check whether the configs are released in Apollo!

    项目启动一直报错 其他同事 其他模块都没有这个错误 关键信息如下 Cause status code 404 Could not find config for namespace appId m ln contractmanage clu
  • Java程序员必须要了解的七个开源协议介绍

    1 Mozilla Public License MPL License 允许免费重发布 免费修改 但要求修改后的代码版权归软件的发起者 这种授权维护了商业软件的利益 它要求基于这种软件得修改无偿贡献版权给该软件 这样 围绕该软件得所有代码
  • 【C++】模板定义位置引发未定义标识符 “E“

    代码如下 include
  • 为什么怕写代码(自己的亲身经历)

    下班了 坐在工位不知不觉就又想起了刚开始接触java编程的日子 其实我觉得这个毛病也不在少数人 因为在我上学的时候班里面分组做项目 基本都是什么情况呢 一人做好 全部就可以交任务了 最后导致了如果代码某个地方出错了 全班90 的都出错了 归
  • pytorch下载与安装(离线包版本)

    笔者因为实验需要 不同的模型需要不同版本版本的pytorch 于是安装pytorch就总是出现一个问题 那就是断 比如需要安装torch1 4版本 使用Anaconda Prompt尝试了几次 pip install torch 1 4 0
  • python中eoferror是啥错误,python怎么看错误类型是什么

    以下是python的错误类型的总结 希望能帮助到有需要的小伙伴 Python全部的错误类型 错误类型 说明 ZeroDivisionError 除 或取模 零 所有数据类型 ValueError 传入无效的参数 AssertionError
  • 【精华】详解Qt中的内存管理机制

    前言 内存管理 是对软件中内存资源的分配与释放进行有效管理的方法和理论 众所周知 内存管理是软件开发的一个重要的内容 软件规模越大 内存管理可能出现的问题越多 如果像C语言一样手动地管理内存 一会给开发人员带来巨大的负担 二是手动管理内存的
  • 人生百味-7:一个人干活,一群人催进度,谁之过?

    如果你曾经是程序员 我相信你会深有体会 如果你曾经是项目管理 我相信你会有感受 旁观的说 那是专业活 只有他能做得来 干活的说 对不起大家 还还需要一段时间查
  • 论文阅读-Attention Bottlenecks for Multimodal Fusion(多模态特征融合)

    一 论文信息 论文题目 Attention Bottlenecks for Multimodal Fusion paperwithcode https paperswithcode com paper attention bottlenec
  • 分组密码算法与DES算法

    目录 1 分组密码的含义 1 1 分组密码介绍 1 2 分组密码的含义 1 3 分组密码的要求 2 分组密码的设计思想 2 1 分组密码的设计思想 3 分组密码的基本特点 3 1 分组密码的基本特点 3 2 分组密码的迭代结构 3 3 子密