博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[信息安全]密码学基础(二)
阅读量:4101 次
发布时间:2019-05-25

本文共 2243 字,大约阅读时间需要 7 分钟。

文章目录

编码与解码

现代密码建立在计算机技术上,计算机操作的对象不是文本,而是比特序列。编码就是将现实中的事物映射为比特序列,并执行加密操作转换为密文序列。例如,ascii码将字符编码为01bit序列

xor是计算机加密算法中常用的bit序列算法,通过对同一bit序列进行两次xor操作能够得到原始的数据。

在这里插入图片描述

一次性密码本

一次性密码本是永远不会被破译的,即使是用暴力破解的方式。一次性密码本的加密和解密就是用一串和明文长度相同的bit序列进行xor操作。之所以无法破解一次性密码本,是因为我们无法判断破译出的结果是否是正确的明文,明文中所有的组合都有可能出现。

一次性密码本由维纳在1917年提出,其无法破译这一特性是由香农与1949年通过数学方法加以证明的,因此一次性密码本是无条件安全的,在理论上是无法破译的

然而一次性密码本没有被广泛使用,最大的问题在于密钥的配送密钥的保存,因为如果我们能构实现密钥的安全配送和保存,那就没有理由认为不能实现明文的安全配送和保存。其次,一次性密码本不能重用,传输过程中不能出现丝毫错误。一次性密码本的密钥生成需要大量随机数(并非伪随机数)

虽然一次性密码本没有实用性,但是却孕育了流密码的思想

DES

DES(data enryption standard)是1977年FIPS采用的一种对称密码,现在计算机已经能够暴力破解DES。

DES是一种能够将64bit的明文加密成64bit的密文的对称加密算法,每个7bit会设置错误校验的1bit,所以实质上其密钥长度为56bit

DES以64bit的明文为单位进行加密,称为分组。以分组为单位进行处理的密码算法称为分组密码

DES每次只能加密64bit的书籍,如果明文较长,就需要对DES进行迭代,迭代的具体方式称为模式

在这里插入图片描述

Feistel网络

DES的基本结构是由Feistel设计的,在Feistel网络中,加密的每个步骤被称为,DES是一种16轮循环的Feistel网络。

DES加密
子密钥是本轮加密所使用的密钥,在Feistel网络中,每一轮需要使用一个不同的子密钥,并且仅在一轮中使用(局部密钥)

轮函数根据右侧和子密钥生成比特序列,对左侧进行加密,是密码系统的核心

DES的具体步骤

  • 将输入的数据等分为左右两部分。
  • 将输入的右侧直接发送到输出的右侧。
  • 将输入的右侧发送到轮函数。
  • 轮函数根据右侧数据和子密钥,计算出一串看上去是随机的比特序列。
  • 将上一步得到的比特序列与左侧数据进行XOR运算,并将结果作为加密后的左侧。

DES的右边没有实现加密,因而需要不停调转左右两侧,Feistel可以实现任意轮加密。DES的解密过程和加密过程恰好相反。

在这里插入图片描述
DES的特点:

  • 加密时无论使用任何函数作为轮函数都可以正确解密
  • 加密和解密可以使用完全相同的结构

MARS,RC6,Twofish都使用了feistel网络

三重DES

三重DES就是为了增加DES的强度,将DES重复3次所得到的的一种加密算法,简写为3DES

之所以采用加密->解密->加密的方式,是因为IBM公司设计能够让3DES兼容DES算法

在这里插入图片描述
如果密钥1和密钥3使用相同的密钥,密钥2使用不同的密钥,则成为DES-EDE2
密钥1,密钥2,密钥3全部使用不同密钥的三重DES称为DES-EDE3
在这里插入图片描述

AES

AES( Advanced Encryption Standard)是取代其前任标准(DES)而成为新标准的一种对称密码算法。AES的选拔过程是对全世界公开的。对密码算法的评审不是由NIST来完成的而是由全世界的企业和密码学家共同完成的,这其中也包括AES竞选的参加者。

Rijlndael

Rijndael于2000年被选为新的AES算法。

Rijndael的分组长度和密钥长度可以分别以32比特为单位在128比特到256比特的范围内进行选择。不过在AES的规格中,分组长度固定为128比特,密钥长度只有128、192和256比特三种。

和DES一样, Rijndael算法也是由多个轮构成的,其中每一轮分为 Sub Bytes、 Shiftrows、MixColumns和 AddRoundKey共4个步骤。DES使用 Feistel网络作为其基本结构,而 Rijndael没有使用 Feistel网络,而是使用了SPN结构

  1. Rijndael的输入分组为128比特,也就是16字节。需要逐个字节地对16字节的输入数据进行 SubBytes处理。所谓 Sub Bytes,就是以每个字节的值(0~25的任意值)为索引从一张拥有256个值的替换表(S-Box)中查找出对应值的处理。

    在这里插入图片描述

  2. SubBytes之后需要进行 ShiftRows处理。这一步是将以4字节为单位的行(row)按照一定的规则向左平移,且每一行平移的字节数是不同的。

在这里插入图片描述

  1. Shiftrows之后需要进行 MixColumns处理。这一步是对一个4字节的值进行比特运算,将其变为另外一个4字节值

在这里插入图片描述

  1. 需要将 MixColumns的输出与轮密钥进行XOR,即进行 AddRoundKey处理,到此一轮处理完毕

在这里插入图片描述

输入的所有比特在一轮中都会被加密。和每一轮都只加密半输入的比特的 Feistel网络相比,这种方式的优势在于加密所需要的轮数更少。此外 SubBytes、 Shiftrows和 MixColumns可以分别以字节、行和列为单位进行并行计算。

解密时和加密时进行相反操作

参考:

转载地址:http://nzksi.baihongyu.com/

你可能感兴趣的文章
破4!《我想进大厂》之Java基础夺命连环16问
查看>>
音视频干货|深入Storyteller:实时协同Tutorial编辑器
查看>>
年轻人不讲武德,竟然重构出这么优雅后台 API 接口
查看>>
这份笔记研究完,进大厂是个“加分项”...
查看>>
10个经典又容易被人疏忽的JVM面试题
查看>>
写代码有这16个好习惯,可以减少80%非业务的bug
查看>>
这几款 IDEA 主题也太好看了吧!!
查看>>
一文读懂线程池的工作原理(故事白话文)
查看>>
我被喷上了热门,这其实反映了当今面试的一种现状
查看>>
《我想进大厂》之Spring夺命连环10问
查看>>
太赞了!Github上都没有的“网约车”项目!!!
查看>>
来自朋友最近阿里、腾讯、美团等P7岗位面试题
查看>>
空指针的传说
查看>>
为什么阿里巴巴禁止使用 Executors 创建线程池?
查看>>
面试官:说说CountDownLatch,CyclicBarrier,Semaphore的原理?
查看>>
腾讯牛逼!终于开源了自家的 Tencent JDK——Kona!!
查看>>
一次群聊引发的血案
查看>>
从 Servlet 入手带你看架构和框架设计的套路
查看>>
世界上最好玩的6种表情符号编程语言
查看>>
漫话:如何给女朋友解释什么是语法糖?
查看>>