密码学基础知识(四)分组密码

首先再说说密码体制那点事,密码体制按密钥分为两派,对称和公钥,不过也可以分为分组密码和流密码(序列密码)。刚才看了一眼,发现忘把图片传上来了,下次有功夫的。

说句废话,分组密码主要采用混淆原则和扩散原则来抵抗攻击者对该密码体制的统计分析。

那分组密码是什么东西呢?

通俗讲就是将明文分块,然后分块加密。

分组密码设计的准则:

①分组长度

分组长度越长意味着安全性越高,但是会影响加密解密的速度。1977年之后,由于计算速度和分析技术的提高,建议使用分组长度128位。

②密钥长度

密钥越长同样意味着安全性越高,但会影响加密和解密的速度。现在一般认为64位的密钥是不安全的,通常使用的密钥长度为128位。

③轮函数F

轮函数F通常之迭代分组密码中单轮加密解密算法的实现部分,是分组密码结构的核心,由其实现数据的混乱和扩散。在设计中,轮函数要遵循雪崩效应准则和位独立准则。评价轮函数实际质量的指标有安全性,速度和灵活性。

④迭代的轮数

迭代分组密码的本质是单轮不能提供足够的安全性而多伦迭代增强其安全性。一般而言,迭代轮数越多,密码分析越困难,但过多的迭代会使输入和输出的关系复杂化,影响加解密速度,而安全性增强不明显,一般而言,决定迭代轮数的准则是:是密码分析的难度大于简单穷举攻击的难度。

⑤子密钥的生成方法

理论设计目标是子密钥的统计独立性和密钥更换的有效性。包括:实现简单,便于硬件实现,子密钥的生成不影响迭代轮函数的执行;不存在简单关系;种子密钥的所有比特对每个子密钥比特影响大致相同;没有弱密钥或弱密钥容易避开;保证密钥和密文符合位独立准则和雪崩效应。

分组密码的设计应满足的要求:

①分组要足够长。假设n为分组长度,则要使分组代换字母表中的元素个数2n足够大,以防止明文穷举攻击。

②密钥长度要足够长,以防止密钥穷举攻击。但密钥又不能过长,这不利于密钥的管理且影响加解密的速度。

③由密钥确定的置换算法要足够复杂,足以抵抗各种已知的攻击,如查分攻击和线性攻击等,使攻击者除了利用穷举攻击外,无其他更好的攻击方法。

④加密解密运算简单,易于软件和硬件的快速实现。为了便于软件编程和通过逻辑电路实现,算法中的运算应尽量简单,如二进制加法或移位运算,参与运算的参数长度也应选择在8的整数倍,可以充分发挥计算机中字节运算的优势。

⑤一般无数据扩展,即明文和密文长度相同。在采用同态置换和随机话加密技术时可引入数据扩展。

⑥差错传播尽可能的小。

设计密码时,①②③的安全性为必要条件,同时还需考虑④⑤⑥。

归纳起来,一个分组密码在实际应用中需要在安全性和实用性之间寻求一种平衡,使算法在足够安全的同时,又具有尽可能短的密钥,尽可能小的存储空间以及尽可能快的运行速度。

http://blog.csdn.net/qwewoshixiaoxuan/article/details/46770421

时间: 2024-12-21 10:36:57

密码学基础知识(四)分组密码的相关文章

C# 基础知识 (四).C#简介及托管代码

        暑假转瞬即逝,从10天的支教生活到1周的江浙沪旅游,在这个漫长的暑假中我经历了很多东西,也学到了很多东西,也认识到了很多不足之处!闲暇之余我准备重新进一步巩固C#相关知识,包括C#入门知识.C#并行开发.ASP网站等.这篇文章我介绍的是书籍--C#入门经典(Beginning C#) 作者Karli Watson.主要包括的是我自己缺乏的一些C#简介知识和托管代码的内容.内容比较简单,参照该书籍较多,相当于自己的在线笔记!                             

Python基础知识(四)

Python基础知识(四) 一丶列表 定义格式: 是一个容器,由 [ ]表示,元素与元素之间用逗号隔开. 如:name=["张三","李四"] 作用: 存储任意类型的数据 (32位机器能存5亿多,64为机器存储更多) 特点: 可变 (增,删,改,查) 默认从左到右 ,从0开始 . 有序(索引,切片,步长) 操作: 增 , 删 , 改 ,查 ,索引,切片,步长 ?? #列表的两种定义方式 name=["香蕉","西瓜",&quo

密码学基础知识整理

最近在研究密码学加密,签名方面的东西.经过几天的学习对一些基础知识进行一下整理 PKI:PKI是Public Key Infrastructure的首字母缩写,翻译过来就是公钥基础设施,在X509标准中PKI为支持共有密钥管理并且支持认证.加密.完整性.可追究性服务的基础设施. CA:CA是 Certificate Authority首字母的缩写,翻译过来的意思是:证书认证授权机构,其主要作用是负责发放管理数字证书的具有权威性的第三方机构.CA通过证书证实他人的公钥信息,证书上有CA的签名.用户

密码学基础知识(三)古典密码

说完了前面那些,想起个事,本系列依据内容主要来自<现代密码学>马春光编著.我就是学这本书的. 好了,古典密码就是古时候的密码,哈哈,逗你玩的,shannon的保密系统的通信理论发表前的都是古典密码,会在密码学简史中介绍这位牛人的. 学习古典密码学的意义:学习设计原理和分析方法 古典密码也是,俩门派:置换和代换,顾名思义,一个是换了个原来有的,一个是换了个原来没有的.学术点讲就是前者明文和密文空间一样,后者 不一样.你要是问我啥是明文空间和密文空间啊,我就呵呵.是M 和 C.m明文的集合,c密文

计算机科学基础知识(四)动态库和位置无关代码

一.前言 本文主要描述了动态库以及和动态库有紧密联系的位置无关代码的相关资讯.首先介绍了动态库和位置无关代码的源由,了解这些背景知识有助于理解和学习动态库.随后,我们通过加-fPIC和不加这个编译选项分别编译出两个relocatable object file,看看编译器是如何生成位置无关代码的.最后,我们自己动手编写一个简单的动态库,并解析了一些symbol Visibility.动态符号表等一些相关基本概念. 本文中的描述是基于ARM MCU,GNU/linux平台而言的,本文是个人对动态库

KnockoutJS基础知识(四)

几乎所有Web应用程序都要和服务器端交换数据,交换数据时最方便的就是使用JSON格式.Knockout可以实现很复杂的客户端交互,对于前后端交互使用的技术最为基本且常用的是Ajax,本次利用Ajax和ko的双向绑定完成一些简单的功能,可以快速展示出ko的方便之处. Demo地址: https://gitee.com/530521314/koInstance.git 一.服务端返回数据绑定到客户端 1.准备好一些初始数据,直接通过View方法将视图实体返回到视图文件中. 2.前端设置为强类型,初始

python 基础知识四、字典

常见字典常量和操作 操作 解释 D = {} 空字典 D = {'spam':2 , 'egg':3} 两项目字典 D = {'food':{'ham':1,'egg':2}} 嵌套 D = dict.fromkeys(['a','b']) 其他构造技术 D = dict(zip(keylist, valslist)) 关键之.对应的对.键列表 D = dict(name='bob', age=42) D['eggs'] 以键进行索引运算 'eggs' in D  成员关系:键存在测试 D.ke

Linux基础知识四

1.复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限. [[email protected] ~]# cp -a /etc/skel /home/tuser1/ [[email protected] ~]# chmod -R go-rwx /home/tuser1/ 2.编辑/etc/group文件,添加组hadoop. [[email protected] ~]# echo "hadoop:x:3007:"

HTML基础知识四

1.  内嵌入式框架 <iframe src="网页位置" width="宽度" height="高度"frameboeder="0/1(框架边框,0表示没有边框:1表示有边框)" scrolling="滚动条方式yes /  no  /auto(默认,当文字多余高度,自动显示滚动条)"> </iframe> 2.  滑动字幕:方向->方式->速度à延时à次数à鼠标à样式