密码算法应用实践(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-04 09:26:40

点击下载

作者:文仲慧 等

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

密码算法应用实践

密码算法应用实践试读:

前言

目前,越来越多的重要信息是以电子的形式存储和交换的,信息安全对密码提出了越来越高的要求。作为密码学重要组成部分的密码体制,近十几年来取得了长足的发展,特别是进入20世纪90年代以来,单钥密码新体制大量涌现,公钥密码标准化得到了迅速的发展。由于目前难以找到一本系统、全面介绍各种密码算法的图书,为使有关研究人员能够及时掌握各种密码算法,了解密码算法的发展新动向,开阔视野、活跃思路,我们编著了《密码算法应用实践》。

本书共分4章。

第1章为分组密码。

分组密码是现代密码学中的一个重要研究分支,其诞生和发展有着广泛的实用背景和重要的理论价值。目前这一领域还有许多理论和实际问题有待继续研究和完善。这些问题包括如何设计可证明安全的密码算法、如何加强现有算法及其工作模式的安全性、如何测试密码算法的安全性、如何设计安全的密码组件等。

对于分组密码,早期的研究基本上是围绕DES进行的,推出了一些类似的加密算法,如LOKI、FEAL、GOST等加密算法。进入20世纪90年代,人们对DES的研究更加深入,特别是差分密码分析(Differential Cryptanalysis)和线性密码分析(Linear Cryptanalysis)的提出,使人们不得不研究新的密码结构。IDEA加密算法打破了DES的垄断局面,随后出现了SQUARE、SHARK、SAFER-64等加密算法,从理论上给出了最大差分特征概率和最佳线性逼近优势的界,证明了密码对差分密码分析和线性密码分析的安全性。

AES的征集掀起了分组密码研究的新高潮,15个AES候选加密算法反映了当前分组密码设计的水平,也可以说是近几年研究成果的一个汇总。

本章介绍的分组算法可以分为3类:第一类是采用菲斯特(Feistel)结构的分组密码,包括采用非平衡Feistel结构的分组密码和可看成Feistel结构扩展的SKIPJACK加密算法,以及采用Hash函数和其他密码函数构建的基于Feistel结构的分组密码;第二类是采用非Feistel结构的分组密码;第三类是AES征集的15个候选的加密算法。

由本章给出的分组密码的加密算法可以看出,分组密码的基本编码思想是由一些简单的基本变换构成层变换,通过多层迭代来达到混乱和扩散的目的的,从而构成强的密码变换。虽然加密的理论和技术又有了许多新发展,提出了一系列新思想、新技巧,但各种算法的研究和改进都是万变不离其宗,都是根据使用需求和实现环境,以期使单位时间的计算取得更好的安全效益,是权衡加密算法密度和计算时间开销的折中。

分组密码加密的新思想和新发展表现为:一是在体系结构上更灵活多样;二是在基本运算选择上更多变快速;三是非线性变换的理论基础更趋完善;四是层密钥生成方法变化纷呈;五是分组密码与其他密码函数的内在联系越来越清晰;六是在密码中设置陷门的研究已深入到分组密码。

第2章为Hash函数。

20世纪70年代以来,随着网络的逐步普及,人类社会步入信息化时代。自此,电子文件大量出现,其安全性一开始就令人担忧。电子文件的安全问题之一是电子文件的完整性。所谓完整性,主要是指电子文件是否有部分改动、删除或插入。在社会客观需求推动下,经过包括密码学家在内的大批学者的共同努力,创造性地设计出了可满足消息完整性验证的密码算法——Hash函数。

本章主要介绍了典型的基于Hash函数的消息压缩值算法。

第3章为序列密码。

序列密码也称为流密码(Stream Cipher),是对称密码算法的一种。序列密码具有实现简单、便于硬件实施、加解密处理速度快、没有或只有有限的错误传播等特点,因此在实际应用中,特别是在专用或机密机构中保持着优势,典型的应用领域包括无线通信、外交通信。

分组密码以一定大小作为每次处理的基本单元,而序列密码则是以一个元素(一个字母或一个比特)作为基本的处理单元。序列密码是一个随时间变化的加密变换,具有转换速度快、低错误传播的优点,硬件实现电路更简单;缺点是低扩散(意味着混乱不够)、插入及修改的不敏感性。分组密码使用的是一个不随时间变化的固定变换,具有扩散性好、插入敏感等优点;缺点是加解密处理速度慢、存在错误传播。

序列密码涉及大量的理论知识,提出了众多的设计原理,也得到了广泛的分析,但许多研究成果并没有完全公开。这也许是因为序列密码目前主要应用于军事和外交等机密部门的缘故。目前,公开的序列密码加密算法主要有RC4、SEAL等。

本章主要介绍序列密码体制以及由此反映出来的加密新思想,主要包括:基于Fibonacci序列和CA构建的乱源发生器,FISH加密算法和PIKE加密算法以模232的Fibonacci序列为乱源,是乘同余序列的推广,CA是移位寄存器(或级间模二加移位寄存器)的推广,可看成是一种特殊的自动机;采用择多走/停的新步进方式的密码体制,PIKE加密算法和A5加密算法的控制信息可来自乱源序列的某些位,也可来自信息的奇、偶校验位;各种新颖的加密技术,如面向软件实现的RC4加密算法,与常见的基于线性反馈移存器的序列密码不同,以一个相对比较大的代替表为基础,在自身的控制下,通过表中元素的对换进行缓慢的变化,同时生成随机数序列;序列密码许多比较成熟的密码分析方法难以直接用于RC4的密码分析;与RC4加密算法类似的ISAAC加密算法,但它不用对换,而是采用移位和算术加;TwoPrime加密算法吸取了分组密码的加密方法,以线性和非线性变换交替复合,以块为单位进行加乱,每一周期生成64比特的乱数序列;WAKE加密算法和SEAL加密算法是速度极快的序列密码,用5条指令即可生成1字节的乱数。

第4章为P1363公钥标准简介。

公开密钥加密(Public-Key Cryptography)也称为非对称加密(Asymmetric Cryptography),是密码学发展史上的一次革命。公钥密码体制的编码系统是基于数学中的单向陷门函数。更重要的是,公钥密码体制采用了两个不同的密钥,对在公开的网络上进行保密通信、密钥分配、数字签名和认证有着深远的影响。

本章简要地介绍了P1363公钥标准,主要包括RSA方案、共同密钥生成方案、数字签名方案和校验方法,以及密钥交换算法KEA。

本书在编写过程中,参考了大量关于密码算法的论文和标准,在此表示衷心的感谢。

鉴于笔者水平有限,加之时间仓促,本书难免会有不足和疏漏之处,敬请广大读者批评指正。作者2019年7月第1章 分组密码1.1 数据加密标准和分组密码的四种工作方式1.1.1 DES加密算法的研制经过

DES(Data Encryption Standard)加密算法的研究历经6年的时间(1968年—1974年)。20世纪60年代末,IBM公司的一个研究组在菲斯特(Feistel)的带领下研制出了Lucifer密码。1971年,IBM公司请塔其曼(Tuchman)和迈耶(Meyer)在Lucifer密码的基础上进一步做研究,以增加密码强度。他们经过3年多的研究,试图破解Lucifer密码,通过搜索强有力的代替置换网络和密钥编制函数,完成了DES加密算法的设计和编制工作。

1976年年底,DES加密算法被采纳为联邦标准,自1977年7月15日起正式生效。1986年,NSA宣布停止执行DES计划。从1988年1月1日起,除了电子资金过户(Electronic Fund Transfer),不再批准政府部门使用采用DES加密算法的产品,但已批准的产品可继续销售和使用。美国安全局(National Security Agency,NSA)感到DES加密算法的广泛使用已使之成为众矢之的。1.1.2 DES加密算法1.DES加密算法的框架

DES加密算法如图1.1.1所示。输入明文块M(64比特),0M=mm…m,经初始置换IP(见表1.1.1)换位成M=mm…m。00163057496

将M分成左右两个半块(32比特),M=(L,R),(L,R)经过第0000001层变换后记为(L,R),其中,L=R,R=L⊕f(R,K)。11101001

经过第i(i=1,2,…,16)层变换后记为(L,R)。其中,L=R,iiii-1R=L⊕f(R,K),此处的f函数将在下面详述,K为密钥,经过16层ii-1i-1ii-1变换后,预输出为(R,L),再经IP置换成密文块C。1616

2.f函数

f函数是DES加密算法的核心部分(见图1.1.2),进入第i层时,f函数的输入R(32比特)先经扩张函数E变成48比特,设i-1R=rrr…r经E扩张后记为T=E(R)。i-101231i-1i-1T=ttt…ti-101247图1.1.1 DES加密算法-1表1.1.1 置换表IP和IP图1.1.2 f函数框图

参考表1.1.2的比特选择表和置换表,其中t=r,t=r,t=r,0311021…,t=r,t=r。T与K的48比特按位进行模2加可得B=bb…b。4631470i-1i0147B顺序地按6比特分组,分别进入代替表(S盒)S,S,…,S,见表0171.1.3。表1.1.2 比特选择表和置换表表1.1.3 S盒续表

代替的规则如下:输入S的6比特的左端1比特和右端1比特组成i二进制数0~3中的某个数,作为取S的行数;中间4比特组成二进制i数0~15中的某个数,作为取S的列数;在S表行列交叉处取得一个ii数,用4比特表示作为S盒的输出。例如,若输入S盒的6比特为i0“011011”,则行数为“01”,列数为“1101”,即13。S的第1行第130列的元素为5,于是输出为“0101”,如下所示。S盒0

经过S盒后的32比特再经过置换表可改变比特位置,结果作为f函数的输出。

3.子密钥发生器

64比特的初始密钥K通过子密钥发生器变成K,K,…,K,分别作1216为1到16层的f函数子密钥(48比特)。

在64比特的初始密钥K中,除去8比特(第7、15、23、31、39、47、55、63比特作为校验位),其余56比特送入置换PC I,经过坐标置换后分成两组,每组28比特,分别送入C寄存器和D寄存器中。在各次迭代中,C和D寄存器分别将存储的数按移位次数表进行循环左移。每次移位后将C和D寄存器的第6、9、14、25比特除去,其余比特经置换后PC II送出48比特,作为第i次迭代时所用的子密钥K。子i密钥发生器如图1.1.3所示。图1.1.3 子密钥发生器

DES加密算法可以简单归结如下。

加密过程:L,R←IP(64比特输入)00L←Rii-1R←L⊕f(L,…,K),i=1,2,…,16ii-1ii-1(64比特密文)←IP(RL)1616

DES的加密运算是可逆的,其解密过程与加密过程类似。

解密过程:R,L←IP(<64比特密文>)1616R←Li-1iL←R⊕f(R,K),i=16,15,…,1i-1ii-1i-1<64比特明文>←IP(LR)00

这里给出了一个加密过程的例子(用十六进制表示):1.1.3 DES的工作方式

DES的工作方式也适用于其他分组密码。(1)电子密本(ECB)方式。将明文分成m个64比特分组,即=(x,x,…,x)01m-1

如果明文长度不是64比特的整数倍,则在明文末尾填补适当数目的规定符号。ECB方式对明文分组用给定的密钥K分别进行加密,可得密文=(y,y,…,y)01m-1式中,y=DES(K,x),i=0,1,…,m-1。这种工作方式组间同明即同密,ii组间可能出现重复。(2)密文分组连接(CBC)方式。在CBC方式下,在对每个明文分组x加密之前先与前一分组的密文y按位进行模2加后,再进行ii-1DES加密,需预置一个初始向量(IV)y=IV。-1

CBC方式:,=CBC(k,)y=IV-1y=DES(K,x⊕y), 0≤j≤mjjj-1-1

脱密CBC:y=IV-1-1x=DES(K,y)⊕yjjj-1

CBC方式克服了ECB方式组间重复的缺点,但由于明文分组的加密与前一分组密文有关,因此前一分组密文的错误会传播到下一分组。(3)密文反馈(CFB)方式(可用于序列密码)。设明文为=(x,x,…,x),其中x由t比特组成,0

由图1.1.4可知,CFB方式实际上将DES作为一个密钥流发生器,在t比特密文的反馈下,每次输出t比特乱数来对t比特明文进行加密,即:y=left[DES(k,Z)]⊕xitii或y=right[DES(k,Z)]⊕xitii式中,Z=IV(初始向量为64比特)。0Z=right[Z‖y], 1≤i

由于CFB方式采用密文反馈,因此对密文错误(通常由信道传输等造成)比较敏感,t比特密文中只要有1比特的错误,就会导致连续数个t比特出错。(4)输出反馈(OFB)方式(可用于序列密码)。

由图1.1.5可看出,OFB方式与CFB方式的不同点只是OFB方式直接取DES加密算法输出的t比特作为反馈(而CBF方式以密文y作为反i馈),其余都与CFB方式相同。图1.1.5 OFB方式示意图y=left[DES(k,Z)]⊕xitii或y=right[DES(k,Z)]⊕xitiiZ=IV(初始向量为64比特)0Z=right{Z‖left[DES(k,Z)]}i64i-1ti-1或Z=right[Z‖right[DES(k,Z)]]i64i-1ti-1

OFB方式以DES加密算法的输出作为反馈,因而克服了CFB方式密文错误传递的缺点。1.1.4 DES加密思想和特点

香农(Shannon)曾建议使用不同类型的函数(如反复、交替地进行代替和简单的线性变换)来构成一个混搅变换(Mixing Transformation),通过这种变换可以把明文消息随机、均匀地分布在所有可能的密文消息集合上。DES加密算法每层的f函数包含加乱(⊕K)、代替(S盒)、移位(置换P),也就是反复、交替地使用这些i变换使输出的每个比特都依赖于整个输入组,使加密的每个比特都依赖于整个密钥,即通过多层的反复变换,使密文的每个比特都是明文和密钥的完全函数。

DES加密算法采用扩张函数E实现S盒和P置换,采用S盒进行小块的非线性变换,以达到混合(Confusion);采用P置换进行大块的线性变换,以达到扩散(Diffusion)。因此,S盒的设计是DES加密算法的一个核心问题。实际使用的S盒是经过精心设计和严格挑选的,因为S盒的某些设计原则是敏感的,NSA给出了下列三条属于设计准则。

① S盒的输出不是输入的线性函数或仿射函数。

② 改变S盒的1个输入比特,就至少可引起S盒的2个输出比特不同。

③ S(X)与S(X+001100)至少有2个比特不同。

DES加密算法具有互补性的特点,假设对明文X逐位取补,记为;密钥逐位取补,记为。若密文组为:Y=DES(X)K则有式中,是Y的逐位取补。互补性特点是由DES加密算法中的两次异或运算决定的,一次是在S盒之前,另一次是在P置换之后。

DES加密算法存在弱密钥和半弱密钥。

DES加密算法每次迭代都有一个子密钥供加密使用,16次迭代子密钥分别为K, K,…,K,由初始密钥K生成。如果K通过子密钥发生1216器生成的K,K,…,K都相同,则称密钥K为弱密钥,DES加密算法存1216在4个弱密钥。如果用初始密钥K对明文X进行2次加密或2次解密,都可恢复出明文(即加密运算与解密运算没有区别),则称这类密钥K为半弱密钥,即DES[DES(X)]=XKK

DES加密算法存在6对半弱密钥。

弱密钥和半弱密钥是不安全的,属于禁用密钥。当采用随机途径生成密钥时,要检查并删除禁用密钥。1.2 Lucifer加密算法(DES前身)

Lucifer加密算法是美国IBM公司Watson实验室在1970年研制的用于数据加密的分组密码体制。

Lucifer加密算法的输入分组、输出分组和密钥分组均为128比特(16字节)。Lucifer是乘积密码,加密变换由16层(Round)变换迭代而成,每层都对输入进行C-I-D变换:C代表混乱(Confusion),I代表密钥加扰(Key Interruption),D代表扩散(Diffusion)。

输入消息分组(明文分组)的16字节(128比特)分成左半组和右半组,层与层之间的左、右半组进行变换,如图1.2.1所示。图1.2.1 Lucifer加密算法

在每一层中,输入的8字节要经过C-I-D变换,如图1.2.2所示。图1.2.2 C-I-D变换(1)经过S或S代替。8个消息字节M,M,…,M,每个字节的左01017(i)4比特与右4比特分别进入S或S进行代替,在第i层,由层密钥K10(1≤i≤16)的第一个字节的8个比特(密钥比特)分别控制8个消息字节选择S和S。当密钥比特为0时,对应的消息字节的左4比特进入01S,右4比特进入S;当该密钥比特为1时,对应的消息字节的左4比10特进入S,右4比特进入S。第1层迭代时,层密钥01,控制字节的第0,1,2,…,7比特分(i)别控制M,M,…,M,以选择S或S。在第i层代替时,层密钥K如表760011.2.1所示。控制字节为表中第1列所指的密钥字节。

S、S是输入为4比特、输出为4比特的非线性变换,把输入、01输出的4比特都看成0~15的数,S、S可看成0,1,…,15到0,1,…,15的01一个16元置换。(2)与密钥字节进行xor运算。经过S和S代替后的8字节与指01定的密钥字节进行xor运算(对应比特分别进行模2加)。(3)经P置换后调整比特位置。经过与密钥字节进行xor运算后的64比特进行图1.2.2中的P置换,即新的64比特的第0比特是原来的第10比特,第1比特是原来的第21比特,…,第63比特是原来的第30比特。(4)与左半组(64比特)分别进行xor运算。经P置换后的64比特分别与左半组的64比特进行模2加,得到的新的64比特为C-I-D变换的输出。表1.2.1 层密钥

脱(解)密实际上是将密码分组(128比特)作为输入,从第16层到第1层进行逆变换,每层的左半组与右半组交换位置,C-I-D变换16151也倒过来,按密钥从K, K,…, K,从第16层到第1层,密文分组从第16层进行到第1层,即可得到明文分组。

作为DES加密算法的前身,Lucifer加密算法与DES加密算法有许多相似的地方。在加密时,明文分组都要经过16层变换,明文分组分成左右两个半组交替进行变换,并相互渗透。每层的变换都通过S盒来进行混乱,通过与密钥字节进行模2加来实现加扰,通过与另一个半组进行模2加来实现扩散。

Lucifer加密算法通过左右两个半组相互交替进行多层混乱-加扰-扩散,从而实现对明文分组的加密,使得密文分组的每个比特与明文分组的每个比特都有关,尽管破译者得到密文也不易分析。与DES加密算法比较,Lucifer加密算法中每层的变换比DES加密算法简单得多。例如,S盒只有2个,每个只含一个置换,没有扩张变换。另外,DES加密算法先与层密钥加乱,再经S盒代替;而Lucifer加密算法先经S盒代替,再与层密钥加乱。Lucifer加密算法的输入、输出和密钥分组长均为128比特,比DES加密算法长得多,能有效地抵抗穷举破译法。1.3 NewDES加密算法

NewDES加密算法是Robert Scott于1985年设计的,其目的是成为DES加密算法的替代算法。NewDES加密算法是基于64比特的明文分组进行运算的,密钥长度为120比特。在设计上,所有的运算都针对完整的字节,而不像DES加密算法那样要进行大量特定比特的读写或置换操作,这使得NewDES加密算法的软件实现更为简单方便。1.3.1 NewDES加/脱密编制

将64比特的明文分组分成8个单字节长的子分组B、B、…、B、016B,这些子分组要运行17轮,每一轮有8步。在每一步中,其中一个7子分组与某个密钥进行模2加,然后用非线性函数f输出代替字节,接着与另一个子分组进行模2加并生成这个子分组。120比特的密钥分成15个密钥子分组K、K、…、K、K。NewDES加密算法如图0113141.3.1所示。图1.3.1 NewDES加密算法

NewDES加/脱密算法的C语言表述如下:

当加密时,初始设置为:

当脱密时,初始设置为:

相关代码如下:1.3.2 非线性函数f的选取

NewDES加/脱密编制中的非线性函数f实际上是一个字节到字节的伪随机置换,其输入和输出都是0~255之间的一个数。

Robert Scott在设计此函数时以著名的美国“独立宣言”为输入文本,通过执行如下过程:

得到的置换表为

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载