A5-1和DES两个加密算法的学习

A5-1加密算法

1、基本原理

A5-1加密算法是一种流password,通过密钥流对明文进行加密。然后用密钥流进行对密文的解密操作。

这样的算法主要用于GSM加密。也就是我们平时打电话的时候。通信数据发送到基站,基站发送到还有一个基站,基站发送到接收方。

每次通话的时候,基站会产生一个64位的随机数,与我们手机sim卡内本身带的一个password利用一种加密算法生成一个密钥。这个密钥就是这次通话过程中使用的主密钥,此密钥的生命周期为这一次通话的開始到结束。一旦通话完毕。那么这个密钥也就没实用了。


该加密算法把整个通讯的数据划分为每一帧来进行加密。每一帧是有228位,当中发送端给接收端的数据114位。接收端反馈给发送端的数据有114位。

除了上面提出的基站给出的64的总密钥,针对每一帧的加密,另一种叫做会话密钥。这样的会话密钥每加密一帧都会改变。会话密钥的生成是由帧号来决定的。

每一次的会话密钥都会产生一个228位的乱数来加密这一帧的数据。加密的方式是异或。帧号一共用22位的二进制数来表示,也就是说一次通话仅仅能传递2^22次方的通讯数据。由于每一次通话仅仅有这么多帧能够进行加密数据而且传递。

A5-1算法基于三个线性移位反馈寄存器实现的。

三个LFSR的级数各自是19 22 23。

f1(x) = x^19 + x^18 + x^17 + x^14 + 1

f2(x) = x^22 + x^21 + 1

f3(x) = x^23 + x^22 + x^21 + x^8 + 1

三个反馈多项式如上所看到的。


2、所用工具

依据上面所讲的。我们基本能够确定,假设要实现a5-1的加密算法。我们须要哪些工具:

首先是明文,其次是64位的密钥。三个LFSR。以及帧号。

算法的输入应该就是三个LFSR的初始值,算法的输出就是我们加密明文所须要的乱数。


3、实现步骤

算法整体来说分为三个部分。初始化,运算,输出乱数

A5-1加密算法实现的逻辑结构图例如以下:


首先是初始化部分:

(1)将三个寄存器内的全部位全都赋值为0

(2)将三个寄存器做64次的移位操作。每第i次操作,寄存器的反馈内容都先与密钥中的第i位进行异或,然后把这样异或的结果作为寄存器此次的反馈内容。三个LSFR都要并行的做这种工作64次。

(2)将三个寄存器做22次的移位操作。没第i次操作,寄存器的反馈项都先与帧序号的第i位进行异或。将异或的结果作为寄存器的终于反馈内容,相同,三个LSFR也都要并行做22次。

上述三步昨晚,A5-1加密算法的初始化操作也就做完了。

另外须要注意的是,A5-1加密算法的LSFR是左移操作,而且。密钥和帧号都是从最低位到最高位编号。

当初始化步骤完毕的时候,此时三个LSFR的状态合称为S0状态。


接下来是计算和输出部分:

大家能够看到,上面的逻辑结构图中,有一个叫做钟控的部分,他有三个输出三个输入,三个输入是分别来三个LSFR的某一个固定位,输入会输出0或者1.0表示此次这个LSFR不会工作,也就是不会发生移动等等。输出的是1的话,那么这个LSFR此次就会移动一位而且得出反馈的结果。

也就是说这个钟控在控制着三个LSFR的工作与否。

首先依据钟控的方式三个LSFR连续移动100次,可是不输出乱数,此时应该仅仅是做一个混乱的操作。由于LSFR在移动过程中,每一位寄存器内的数值都会不一样。所以在钟控决定每一个寄存器执行与否的结果时也会不同样。

接下来会三个LSFR会接着进行连续的114次的移动,也是依据钟控的方式。

这一次的移动过程中,三个寄存器将分别把最高位寄存器的值输出,然后三个值做异或运算,形成第i个乱数。

这次114次移动会生成一个114位的乱数,用于对手机到基站这一段的数据加密。

之后再进行一次100次的移动和114次的移动,结果和上面说的同样。终于产生的114位密钥用于基站到手机这段的通讯数据加密。


关于钟控:

钟控将第一个寄存器的第八位,第二个寄存器的第10位,第三个寄存器的第10位。

抽取这三个位用于控制三个LSFR的动作与否。他们决定的原则类似少数服从多数。三位一共同拥有8中排列方式,当三位中1的个数多余0的个数时,那么这三位是1的相应的寄存器将会移动, 为0的不会,假设三位数中0的个数多余1的个数时。那么三位之中是0的相应的寄存器将会移动。


依据上面的步骤就能够算出当我们把通讯数据分割成每一帧,然后对每一帧进行加密传输的时候。所须要的那个加密的乱数是怎么得来的。至于加密过程非常easy。就是明文和乱数的异或操作。



DES加密算法

假设说A5-1是流password的加密算法的话,那么DES就是分组password体制中典型的一个算法。

分组password的主要思想。就是把明文和密钥都分成一定长度的很多断数据,为了保证每个明文都只唯独一个密钥。须要做的就是分组的密钥长度要大于等于分组的明文长度。通过分组加密,每一组使用的密钥都不同样,这就是主要的分组password。


分组password的安全性除了收到一些密钥长度參数的影响之外。最重要的两个原则就是混乱原则和扩散原则。

混乱原则要求明文和密文在逻辑上的关系越复杂越好。为了保证混乱原则的实行。我们将尽可能使用非线性的变换。

扩散原则,我理解是这样的,在设计password的时候,通过实行混乱原则。使得我们的password会在整个序列的某基础发生混乱,那么扩散原则要做的,就是要通过移位的方式,将这样的混乱最大化。让明文和密钥的变化尽可能多的影响密文的生成。这样的思想最典型的体现,就是S-P网络。


分组password中的一个非常典型的样例就是DES算法:

DES算法也是分组password的一个案例,它属于分组password中的迭代分组password。即用简单的加密措施先构造出一个加密函数来,之后不断的进行乘积迭代。两个简单的方式乘积在一起的话。会形成一个更加复杂的password函数,DES正式利用这种思想来实现。


DES加密算法的实现须要几个工具:

1.分组长度2.密钥长度3.迭代次数4.子密钥长度

DES默认分组长度为64bit,密钥长度也是64bit,迭代次数为16,子密钥的长度为48位

DES加密算法的输入是一组64bit的明文,输出是64bit的密文

算法运行过程中有3步:初始变换, 16轮迭代, 初始逆变换

要注意的是。DES的算法中的比特序号是从1開始。而且是从左边開始。



DES算法中的初始变换:

初始变化实际上就是对明文序列进行顺序打乱操作。

他会依照一个特定的表格进行对比移动。

初始逆置换是对16次迭代后的结果序列进行移位操作,也是有一个对比表,告诉你移动的规则。


DES算法中的圈函数:

从上面的DES算法的逻辑结构图中能够看出。他李永乐Feistel模型进行迭代password的实现。那么这个迭代有一个圈函数

Li = Ri-1  Ri = Li-1^f(Ri-1, ki)(i = 1, 2, ...)

在进行完初始置换之后,我们得到一个长度为2w的序列,也就是64位的明文序列。把他们一分为二,分为左半部分和右半部分,在进行第一次迭代的时候。右半部分变为下一次迭代的左半部分,左半部分与F函数的结果进行按位异或形成下一轮迭代的右半部分。最后在迭代到第16次的时候。不在进行这种左右交换操作,直接转换为相应的部分。

那么非常显然,整个算法的核心就在于F函数的内容



F函数:

F函数的输入有两部分,一个是这一轮的子密钥48bit,另外一个是序列的右半部分的32bit。

F(R,K) = P(S(E(Ri)^Ki))

上述表达式告诉我们F函数一共同拥有四个步骤,先是对R进行E盒的变换,E盒又称为是扩展变换盒



1、E盒

E盒的作用就是把32位的数据扩展称为48位的数据,我认为是由于密钥是48位,所以必需要扩展一下要变换的明文序列,由于分组password的加密原则强调过。分组password的加密。密钥是必须大于等于要加密的明文的。

把32位的序列分成8组,每组序列在开头和结尾处分别加入开头和结尾元素相邻的元素。每一组加入2位,一共八组,田间16位。即扩展为48位。这是一种非线性的扩展。然后接下来就是与这一轮的子密钥Ki进行按位异或操作。


2、S盒

S盒宏观上的一个作用,是把刚刚异或生成的48位结果变换成32位。首先把48位的生成结果分成8组。每组6位。每6位分别作为S盒的输入,这样一共同拥有8个S盒并行工作。将6位输入变为4位输出。终于得到32位的结果。

对于每个S盒来说,有a1~~~a6的二进制比特输入。有这种一个表格存在:



如今S盒一共同拥有6位的输入,a0a1a2a3a4a5a6

我如今算的是S1盒的输出。首先计算2a1+a6最后的十进制结果是多少,这个结果代表了行数。

之后计算8a2+4a3+2a4+a5最后的十进制结果代表了列数。拿到行数和列数之后,在表格中找到相应的数字。这里注意,假设我算出来的是1 3,那么我在找的时候,也是找表格中相应的标号是1行3列的元素,由于我们能够看到表格中的标号是从0開始的。

比如,假设计算的s1,得出的结果是1行3列,那么结果应该是4.查表得到这个结果之后。表格能够保证,得出的结果4位二进制数十全然能够表示的,所以将这个十进制数化为4位二进制数就完毕了S盒的一部分操作,之后每个S盒都依照这种原则操作,之前异或的48位结果就会顺利的变成32位。


3、P盒

P盒也是很easy,就是依据一个表格进行一个移位操作。表格到时候会详细给出。


经过上述的计算,我们能够顺利的得到F函数的计算结果。F函数的计算过程图例如以下:



经过上述的计算我们能够准确的得到F函数的详细结果,那么下轮迭代的右半部分也就是R1就能够由上一层的左半部分和F函数的结果异或得到。不知道为什么的,能够翻上去看一下DES实现的逻辑框图。

DES的算法基本运行流程就是这种。那么另一个问题可能我们没有考虑到,我们拥有的是一个64位的初始密钥。那么每一次的子密钥是怎么生成的呢?



DES子密钥的生成:

DES的初始密钥一共同拥有64位,当中密钥的每个字节的最后一位都用作奇偶校验,所以说,实际的有效密钥长度为56位。

DES子密钥的生成逻辑框图例如以下:




首先。64位的初始密钥进来,最先要运行的就是置换选择操作1.

那么置换选择操作详细的内容是什么呢:

置换选择操作1有两个步骤:

(1)将64位中每个密钥字节的最后一位丢弃

(2)将剩余的56位依照表格的规则打乱顺序。生成一个乱序的56位序列

之后将输出的56比特的有效密钥序列一分为二。分为D0和C0两部分(生成C0D0到此为止仅仅能算是密钥生成算法的初始化操作,不能算作一次迭代)。之后从第一次開始的每一次的迭代中,分别要对上一次的Di-1 Ci-1两部分进行循环左移操作,循环左移的次数和所在的迭代次数有关,比方D0C0--->D1C1是第一次迭代要循环左移1位。D2C2--->D3C2要左移2两位,详细的移位次数会有个明白的表格告诉大家。

每一次迭代的循环移位操作之后得到的两部分DiCi,将进行置换选择2的操作。置换选择2与1类似。都是打乱顺序。丢掉一部分元素,最后形成一个48位的序列。就是上面DES算法中第i次迭代所须要的子密钥。可是本次迭代生成的Di和Ci不会改变,由于他们将会用于下一次子密钥的生成操作。由于DES须要16次的迭代。那么子密钥的生成自然也须要16轮的迭代。


也就是说。什么样算一次迭代操作呢,从循环位移。一直到置换选择2,再到终于生成第i次的子密钥ki算作是一次迭代,之前生成d0c0的部分不算。

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

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

相关文章

从0到1简易区块链开发手册V0.3-数据持久化与创世区块

Author: brucefeng Email: brucefengbrucefeng.com 编程语言:Golang 1.BoltDB简介 Bolt是一个纯粹Key/Value模型的程序。该项目的目标是为不需要完整数据库服务器(如Postgres或MySQL)的项目提供一个简单,快速,可靠的数据库。 Bolt…

ELK之elasticsearch5.6的安装和head插件的安装

这里选择的elasticsearch为5.6的新版本,根据官方文档有几种暗装方式: https://www.elastic.co/guide/en/elasticsearch/reference/current/install-elasticsearch.html 这里选择rpm包安装https://www.elastic.co/guide/en/elasticsearch/reference/curre…

Nginx 基础(一)

一 、Nginx简述 Nginx是一个开源、高性能、可靠的HTTP中间件、代理服务。二 、常见的HTTP服务 1. HTTPD-Apache基金会 2. IIS-微软 3. GWS-Google 4. Nginx三、为什么选择Nginx 原因一:IO多路复用epoll (主要解决了并发性的问题) 注1&#xf…

ASP.NET Core高性能服务器HTTP.SYS

如果我们只需要将ASP.NET CORE应用部署到Windows环境下,并且希望获得更好的性能,那么我们选择的服务器类型应该是HTTP.SYS。Windows环境下任何针对HTTP的网络监听器/服务器在性能上都无法与HTTP.SYS比肩。[本文节选《ASP.NET Core 6框架揭秘》第18章]一、…

Nginx 基础 ( 二)

一、HTTP请求 http请求包括客户端请求服务端 以及 服务端响应数据回客户端,如下 请求:包括请求行、请求头部、请求数据 响应:包括状态行、消息报头、响应正文 比如在Linux中curl请求网站获取请求信息和响应信息 curl -v http://www.kugou.com…

《金融行业应用解决方案白皮书》发布,金融自主创新未来可期!

日前,以“聚势赋能 行业共创”为主题的金融行业解决方案发布会在线上举行。麒麟软件发布《金融行业应用解决方案白皮书》,并发起成立“金融机具生态圈俱乐部”,助力金融行业用户高质量发展。金融信息系统曾经被国外厂商垄断金融信息系统作为国…

leetcode53 Maximum Subarray 最大连续子数组

题目要求 Find the contiguous subarray within an array (containing at least one number) which has the largest sum.For example, given the array [-2,1,-3,4,-1,2,1,-5,4], the contiguous subarray [4,-1,2,1] has the largest sum 6.即:寻找数列中的一个子…

详解go语言的array和slice 【二】

上一篇 详解go语言的array和slice 【一】已经讲解过,array和slice的一些基本用法,使用array和slice时需要注意的地方,特别是slice需要注意的地方比较多。上一篇的最后讲解到创建新的slice时使用第三个索引来限制slice的容量,在操作新slice时…

详解Objective-C的meta-class

2019独角兽企业重金招聘Python工程师标准>>> 比较简单的一篇英文,重点是讲解meta-class。翻译下,加深理解。 原文标题:What is a meta-class in Objective-C? 原文地址:http://www.cocoawithlove.com/2010/01/what-is…

十倍程序员 | 使用 Source Generator 将 JSON 转换成 C# 类

前言有时候,我们需要将通过 WebAPI 接收 JSON 字符串转换成 C# 代码。Visual Studio 提供了一个功能菜单可以轻松实现:执行完成后,它会将生成的代码放在打开的的代码窗口中。但是,如果有多个 JSON 字符串需要转换,这个…

微软Microsoft Azure 机器学习工作室的案例之Image Classification using DenseNet

点击上方蓝字关注我们(本文阅读时间:10分钟)Microsoft Azure Machine Learning Studio是微软强大的机器学习平台,在设计器中,微软内置了15个场景案例,但网上似乎没有对这15个案例深度刨析的分析资料,所以我…

音乐分类

代码: 1 import numpy as np2 from scipy import fft3 from scipy.io import wavfile4 from sklearn.linear_model import LogisticRegression5 import random6 """7 使用logistic regression处理音乐数据,音乐数据训练样本的获得是使…

不管对不对,先把闹钟关了再说

小榆提前关闭早上闹钟,几乎工作日的早晨都是被这魔怔的铃声给拉扯醒,无论有多么不愿还是痛苦,可对这闹钟也无可奈何,就算一时果断掐掉接下来是另一回麻烦事。最后一天,已经顾不得多少,没什么令人惧怕的人或…

pycharm(windows)安装及其设置中文菜单

pycharm(windows)安装及其设置中文菜单 1.下载 在官网(http://www.jetbrains.com/pycharm/download/#sectionwindows)进行下载 或者到百度云进行下载 专业版:链接:http://pan.baidu.com/s/1bSSRds 密码&…

Tomcat定义虚拟主机案例

Tomcat定义虚拟主机案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 一.准备环境 1>.创建web程序的根目录 [rootyinzhengjie ~]# mkdir -pv /home/yinzhengjie/data/www/webapps/ROOT mkdir: created direc…

将域名绑定到ip上,并实现访问不同二级子域名对应不同目录

一、将域名绑定到ip上1、环境介绍:阿里云服务器ESC(美国硅谷) 2、购买域名 3、备案 注:由于我买的是美国地区服务器,所以不用备案,如果买的国内服务器,这里需要添加一个备案操作。 4、域名实名认…

ABP vNext微服务架构详细教程(补充篇)——单层模板(中)

框架搭建2聚合服务这里我们将聚合服务命名为Domain.Core和基础服务层一致,我们先通过命令创建单层模板项目Domain.Core,这里我们删除wwwroot、Data、Entities、Localization、ObjectMapping文件夹及其所有子文件,并删除package.json文件和Ser…

谈一谈synchronized关键词

1.使用 java中的每一个对象都可以作为synchronized的锁进行代码同步,常见的形式 同步代码块锁是synchronized括号内的对象普通成员方法上,锁是当前的对象,synchronized(this)静态方法上,锁是当前类的Class对象2. 原理 synchronize…

系统学习redis之二——redis集群搭建

redis单点部署: 安装命令: # cd /usr/local/ # wget http://download.redis.io/releases/redis-4.0.1.tar.gz #下载安装包 # yum -y install gcc psmisc #安装依赖包 # tar xf redis-4.0.1.tar.gz # cd /usr/lo…

业务技术协同线上化的研发管理实战

摘要:2017年1月13日举办的【云栖计算之旅】线下沙龙第4期研发管理专场,阿里巴巴B2B事业群产品专家代平为大家带来了题为业务技术协同线上化的研发管理实战的演讲。本文主要从管理产品研发的理念开始谈起,着重说明了云效指挥部的六大步骤&…