网络安全——密码学基础(一)

1、密码学的基本概念

密码学是研究密码编制、密码破译和密钥管理的一门综合性应用科学。密码学包括两个分支:密码编码学和密码分析学。其中,密码编码学研究对数据进行变换的原理、手段和方法,应用于编制密码以保守通信秘密;密码分析学研究如何破译密码以获取通信情报。密码编码学和密码分析学是两个既对立又统一的矛盾体,安全的密码机制能促进分析方法的发展,而强大的分析方法又加速了更加安全密码体制的诞生。密码编码学和密码分析学两者相互对立、相互依存并共同发展。

1.1、密码学发展简况

密码作为一种技术或一种通信保密的工具,其发展历史极为久远,起源可以追溯到几千年前的埃及、巴比伦和古希腊。例如,在公元前50年左右,著名的凯撒(Caesar)密码就已经用于古代军队的秘密通信。在这几千年的历史中,密码学经历了从古典密码学到现代密码学的演变,大致可分为古代加密方法、古典密码方法、近代密码学、现代密码学,以及量子密码学等阶段。

1.1.1、古代加密方法

古代加密方法阶段被称为科学密码学的前夜。这一阶段的密码技术可以说是一种艺术,还不是一种科学,密码学专家常常凭直觉和经验进行密码设计和分析,而不是基于推理和证明。古代加密方法大约起源于公元前440年,当时为了安全传送军事情报,奴隶主剃光奴隶的头发,将情报写在奴隶的光头上,待头发长长后将奴隶送到另一个部落,再次剃光头发,原有的信息复现出来,从而实现这两个部落之间的秘密通信,这就是最初的隐写术。公元前405年,古希腊斯巴达海军统帅斯巴达的将领莱山德(Lysander)使用了原始的错乱密码。公元前400年,斯巴达人发明了“塞塔式密码”​,即把长条纸螺旋形地斜绕在一个多棱棒上,将文字沿棒的水平方向从左到右书写,写一个字旋转一下,写完一行再另起一行从左到右写,直到写完。解下来后,纸条上的文字消息杂乱无章、无法理解,这就是密文;但将它绕在另一个同等尺寸的棒子上后,就能看到原始的消息。我国古代也有以藏头诗、藏尾诗以及绘画等形式将要表达的秘密信息隐藏在诗文或画卷中特定位置的记载,一般人只注意诗或画的表面意境,而不会去注意或很难发现隐藏其中的秘密信息。

1.1.2、古典密码方法

古典密码通常是一种文字置换,通过手工或机械变换的方式实现。古典密码系统已经初步体现出近代密码系统的雏形,它比古代加密方法复杂,但变化相对有限。比较经典的古典密码例子包括:

1)掩格密码

16世纪,米兰的物理学和数学家卡尔达诺(Cardano)发明了掩格密码,这种密码方法可以事先设计好方格的开孔,将所要传递的信息和一些其他无关的符号组合成无效的信息,使截获者难以分析出有效信息。

2)凯撒(Caesar)密码

据记载,在罗马帝国时期,凯撒大帝设计了一种简单的移位密码,用于战时通信。这种加密方法是将明文的字母按照字母顺序,往后依次递推相同的字母,从而得到加密的密文;而解密的过程则与加密过程相反。凯撒密码属于单表代换密码,之后逐步发展为多表代换及随机乱序等各种密码体制。

古典密码可以分为两大类:一是代换加解密方法,将一组字母换成其他字母或符号;二是置换加解密方法,将字母的顺序重新排列。古典密码算法易遭受统计攻击,通过分析字母出现的频率来发现统计规律,就可能被破译。

1.1.3、近代密码学

从古典密码的应用发展来看,直到第二次世界大战,密码学的研究一直处于初级阶段。为寻求新的密码设计方法,人们一直在不断探索。19世纪,普鲁士人卡西斯基(Kasiski)的《密码和破译技术》以及法国人柯克霍夫(Kerckhoffs)的《军事密码学》等著作,都对密码学理论和方法进行了一些论述及探讨。1949年,美国人香农(Claude Shannon)在Bell System Technical Journal上发表了一篇名为《保密系统的通信理论》​(Communication Theory of Security System)的论文。这篇论著提出了密码设计必须遵守“扩散”​(Diffusion)和“混淆”​(Confusion)原则。扩散是指将每位明文编码的影响尽可能地扩散到更多的密文中,混淆是指将明文和密文之间的统计关系复杂化。随后出现的对称密码(分组密码、序列密码等)都用不同的方法贯彻了这两个原则。香农的这篇论文阐述了信息论,为对称密码系统建立了理论基础,使得保密通信从艺术变成了科学,将密码学研究纳入了科学的轨道。因此,从第一次世界大战、第二次世界大战到1976年这段时期被认为是近代密码学阶段。

密码技术在军事领域的应用促进了密码学的快速发展。1917年,英国破译了德国外长齐默尔曼的电报,促成了美国对德国宣战。1942年,美国从破译的日本海军密报中,获悉日军对中途岛地区的作战意图和兵力部署,从而以劣势兵力击破日军海军的主力,扭转了太平洋地区的战局。在保卫英伦岛和其他著名的历史事件中,成功破译密码均起到了极其重要的作用。

20世纪初,产生了最初可以实用的机械式和电动式密码机,包括Enigma密码转轮机在内的一些机械设备,这些密码机产生的密码增加了密码分析的难度,需要付出相当大的努力才能破译。与此同时,商业密码机公司及市场也随之出现。20世纪60年代后期,电子密码机得到较快的发展和广泛的应用,使密码学的发展进入了一个新的阶段。

1.1.4、现代密码学

20世纪70年代,快速电子计算机和现代数学方法一方面为加密技术提供了新概念和工具,另一方面也给破译者提供了有力武器。利用电子计算机可以设计出更为复杂的密码系统。1976年,迪菲和赫尔曼(W.Diffie、M.Hellman)在所发表的《密码学的新方向》​(New Direction in Cryptography)文章中,提出了一种新的密码设计思想,从而开创了公钥密码学的新纪元,使密码学取得了重大突破,进入现代密码学阶段。近现代密码学改变了古典密码方法单一的加密手法,融入了大量的数论、几何、代数等知识,使密码学得到更加蓬勃的发展。从此之后,密码开始从军事领域扩展到人们的社会生活,充分发挥了其商用价值和社会价值,使普通大众也能够接触到密码学并从中受益。

在现代密码学这一阶段,密码理论得到了蓬勃发展,密码算法的设计与分析互相促进,从而出现了大量的密码算法和各种密码分析方法。除此之外,密码的使用也开始扩展到各个领域,而且出现了许多通用的加密标准,从而促进了网络和技术的发展。现代密码学领域的发展有如下一些重大里程碑事件。

  • (1)1976年,美国政府采纳IBM公司设计的方案,正式将其作为数据加密标准(DES)​。
  • (2)1976年,W.Diffie和M.Hellman发表的《密码学的新方向》文章,首先证明了在发送端和接收端无密钥传输的保密通信是可能的,奠定了公钥密码学的基础。
  • (3)1978年,R.L.Rivest、A.Shamir和L.Adleman实现了RSA公钥密码体制。
  • (4)1984年,H.Bennett和G.Brassard在哥伦比亚大学Stephen和Wiesner于1969年提出的“共轭编码”概念的基础上,提出了量子理论BB84协议,可以认为是宣告了量子密码理论的诞生。
  • (5)Miller和Koblitz首次将有限域上的椭圆曲线应用到公钥密码系统,其安全性基于椭圆曲线上的离散对数问题。
  • (6)1989年,R.Mathews、D.Wheeler、L.M.Pecora和Carroll等人首次把混沌理论应用到序列密码及保密通信理论,为序列密码研究开辟了新途径。
  • (7)2001年11月,NIST发布高级加密标准AES,代替DES作为商用密码标准。

自此,现代密码学形成了比较完备的标准体系。

1.1.5、量子密码学

进入20世纪以来,密码学已经成为结合物理学、量子力学、电子学、语言学等多个专业的综合科学,出现了“量子密码”​“混沌密码”等先进理论,在信息网络安全中扮演着十分重要的角色。量子密码学代表着密码学发展的新方向。

量子密码学是量子力学和密码学相融合的产物,1994年,Shor提出了量子计算机上整数分解和离散对数求解的概率多项式时间算法;2003年Shor的量子算法又被推广到了椭圆曲线上。这些进展从理论上使传统公钥密码体制的安全性受到质疑,密码学家开始研究量子计算机时代的密码体制。

量子密码采用量子态作为信息载体在用户之间传送信息。在量子信息中,基本元素被称为量子比特,量子比特所处的状态即量子态,是处于二维空间Hilbert空间里的矢量表示。根据量子态的特性,在一个安全的量子密码协议中,通信双方可以发现所有有效的窃听/攻击行为。可见,量子密码的安全性不再基于数学问题求解的困难性,而是基于量子力学的海森堡测不准原理、量子的不可克隆特性以及量子的纠缠特性等基本原理。

  • (1)海森堡测不准原理:对于未知的量子态,当对其中任何一个进行测量时,都会引起量子坍缩。
  • (2)量子不可克隆特性:对于量子而言,无法基于现有的量子比特复制出一个完美的副本。因为测量量子态的过程势必会引起量子信息的改变。
  • (3)量子纠缠:测量一个粒子的量子态,另一个粒子的量子态也会随之确定。

量子密码通信是目前公认的唯一能实现绝对安全的通信方式,能够保证合法的通信双方可觉察潜在的窃听行为,并采取相应的措施使窃听者无法破解量子密码,可以抗击无限能力计算行为。也就是说,无论破译者有多么强大的计算能力,都不能破译量子密码。但需指出,量子密码通信不是用来传送密文或明文的,而是用来建立和传送密钥的。量子加密保护的就是传统加密通信中的“密钥”​,也就是所谓的量子密钥分发(Quantum Key Distribution,QKD)​。目前,最为知名的QKD算法主要是BB84和B92:the Bennett-Brassard 84(BB84)protocol, the Bennett 92(B92)protocol。利用获得的量子密钥,发送方把信息加密成一段密文,接收方将收到的密文解密,进而实现通信的完全保密。

1.1.6、国产密码算法

密码算法是国之重器,是各国之间战略竞争的制高点。必须掌握自主密码技术,才能够赢得安全和发展的主动权。我国密码研究及应用具有悠久的历史,可追溯的标志性密码可谓是我国古代通信中保守军事秘密的阴符和阴书。据《六韬》记载,3000年前由姜尚(即姜子牙,公元前1128年—公元前1015年)发明,后被广泛运用于我国古代维护国家安全的军事活动和情报传递活动中。我国古代官方主持编修、宋曾公亮和丁度创作的第一部新型兵书《武经总要》​“字验”记载,北宋前期,在作战中曾用一首五言律诗的40个汉字分别代表40种情况或要求。这种方式已具有了密码体制的特点。

自20世纪末国家发布《商用密码管理条例》以来,我国的密码研究及密码应用进入了快速发展时期。目前,我国已经发布了40多项密码标准,形成了较为完善的密码标准体系。

国产密码算法主要指国家商用密码管理办公室指定的一系列密码标准,又称商用密码,例如SM2、SM3、SM4等系列密码算法。商用密码用于保护不属于国家秘密的信息,能够实现加密、解密和认证等功能,公民、法人和其他组织可依法使用商用密码保护信息与网络安全。

1.2、密码系统

Shannon在《保密系统的通信理论》中提出密码设计需遵守“扩散”​(Diffusion)和“混淆”​(Confusion)原则后,随之出现的对称密码用不同的方法贯彻了这两项原则,逐步完善形成了密码系统。密码系统或密码体制通常也称为密码方案,它是指一个密码算法、相关参数及其使用方法的总和。其中,参数包括密钥、密文和明文。有时也将密码系统或密码体制、密码方案和密码算法看成一回事。

1.2.1、密码学中的常用概念及术语

“密码”一词对人们来说并不陌生,在日常工作生活中可以列举许多有关密码使用的例子。例如在银行取款时使用“密码”​,在登录计算机系统时使用“密码”​,在保密通信设备中使用“密码”等。但这些密码除了保密通信设备中使用的密码之外,其他使用的并不是密码,而是一种特定的暗号或口令字。那什么是密码呢?在《辞海》中是这样解释的:​“按特定法则编成,用以对通信双方的信息进行明密变换的符号。​”换言之,密码是隐藏了真实内容的符号序列。因此,密码学的基本思想是隐藏、伪装信息,使未经授权者不能得到信息的真正含义。伪装信息的方法就是进行一组数学变换。密码学涉及许多基本概念及专业术语,通常需要熟悉如下几个基本概念的含义。

  • 明文(Message)​:一般可以简单地认为,明文是有意义的字符或比特集,或通过某种公开的编码标准就能获得的消息。明文常用M表示。
  • 密文(Ciphertext)​:对明文施加某种伪装或变换后的输出,也可认为是不可直接理解的字符或比特集。密文常用C表示。
  • 加密(Encryption)​:把原始信息(明文)转换为密文的信息变换过程。
  • 解密(Decryption)​:把已加密的信息(密文)恢复成明文的过程,也称为脱密。
  • 密码算法:也简称密码,通常是指加、解密过程所使用的信息变换规则,是用于信息加密和解密的数学函数。
  • 加解密算法:对明文进行加密时所采用的一组规则(或函数)称作加密算法,而对密文进行解密时所采用的规则称作解密算法。
  • 对称加密:也称单密钥加密,是指发送者和接收者双方都使用相同的密钥,也称为单密钥加密。
  • 非对称加密:也称为双密钥加密或公钥加密,是指发送者和接收者各自使用一个不同的密钥。这两个密钥形成一个密钥对,一个可以公开,称之为公钥;另一个必须为密钥持有人秘密保管,称之为私钥。
1.2.2、密码系统的定义

在香农的论文中,对密码系统的执行和运作过程进行了如下的描述:通信双方是Alice和Bob。他们首先通过一个安全信道协商确定了一个共享密钥K; Alice想通过一个不安全信道向Bob发送明文信息M;为了确保安全,Alice使用了钥控加密算法EK(·)将明文M变换为密文C, C=E(MK)​;然后Alice通过不安全信道将密文C发送给Bob;Bob使用共享密钥K,使用钥控解密算法DK(·)将密文C变换成明文M, M=D(CK)​。窃听者Eve在不安全信道上截获了密文C,他采用两种形式进行攻击:一种是被动攻击(指破解密文C)​,从而得到明文M或密钥K;另一种是主动攻击(指毁坏或篡改密文)​,以达到破坏明文的目的。

密码系统是指能完整地解决信息安全中的机密性、完整性、认证、身份识别、可控性及不可抵赖性等问题中的一个或若干问题的系统。通常,一个密码系统可以用一个五元组[M, C, K, EK(·)​,DK(·)​]来描述。其中,EK(·)​、DK(·)为密码函数,构成密码体制模型,各参数的含义如下:

  • 消息空间M(又称为明文空间)​:所有可能明文m的有限集。

  • 密文空间C:所有可能密文c的有限集。

  • 密钥空间K:所有可能密钥k的集合,其中每一密钥k由加密密钥ke和解密密钥kd组成,即k=(ke, kd)​。

  • 加密算法EK:一簇由加密密钥控制的、从M到C的加密变换。加密函数EK(·)作用于M得到C。设m∈M,对于给定的ke,用数学表示为:在这里插入图片描述

  • 解密算法DK:一簇由解密密钥控制的、从C到M的解密变换。解密函数DK(·)作用于C得到M。设m∈M,对于给定的kd,用数学表示为:
    在这里插入图片描述
    如果先加密后再解密消息,则原始的明文将被恢复出来。因此,对于给定的m∈M,下述等式必须成立:
    在这里插入图片描述
    密码系统的核心实质上就是一个密码体制。从数学的角度来看,一个密码体制就是一族映射,它在密钥的控制下将明文空间中的每一个元素都映射到密文空间上的某个元素。这一族映射由密码方案确定,具体使用哪一个映射由密钥决定。一个密码系统要得到实际应用,还需要满足如下条件:

  • 每个加密函数EK(·)和每一个解密函数DK(·)都能有效地计算。

  • 破译者获得密文C后将不能在有效时间内破解出密钥K或者明文M。

  • 一个密码系统安全的必要条件是穷举密钥搜索将是不可能的,即密钥空间非常大。

1.2.3、保密通信系统模型

在网络通信系统中,除给定的接收者外,还存在非授权者,他们通过各种方法来窃取保密信息,这类非授权者被称为窃听者或攻击者。窃听者虽不知道解密密钥,但通过分析可能会从截获的密文中破译密钥或者推断出明文,这种攻击称为被动攻击。另一种是主动攻击,即非法入侵者或者攻击者主动向系统注入干扰,采用删除、添加、伪造、重放等手段向系统注入虚假信息,以达到攻击的目的。一般而言,保密通信系统模型如图2.1所示,主要由密码系统的明文空间M、密文空间C、加解密密钥空间K(k1, k2)​、加密函数EK(·)和解密函数DK(·)几个部分组成。其中,在对称密钥体制下,K=K1=K2,此时密钥K需通过安全的密钥信道由发送者传给接收者;加密变换在这里插入图片描述
k1∈K1,由加密器完成;解密变换
在这里插入图片描述
,c∈C, k2∈K2,由解密器完成。

在这里插入图片描述
依据柯克霍夫(Kerckhoffs)原则,即使密码分析者获得了保密通信系统中的密码算法,也难以推导出明文或密钥,也就是说,密码系统的安全强度不依赖于密码算法、密钥长度和密文的保密性。简单来说,即使保密通信系统的密码体制被所有人知道其运作步骤,它仍然是安全的。从保密通信系统模型来看,需要做如下几点说明:

  • 安全的密钥信道通常是低速率的,只能用于进行密钥协商,其中不能太频繁地更换密钥,更不能直接用于消息传递。
  • 要求密码函数具有伪随机性。加密函数EK(·)和解密函数DK(·)的设计必须满足各种置乱功能。当两个密钥K1和K2不同时,EK(·)和DK(·)应该“差别很大”​;当两个明文M1和M2“差别很小”时,对应密文C1和C2应该“差别很大”​,反之亦然。
  • 要求密钥具有一定的弹性。当攻击者已经取得了部分密钥或部分明文时,整个密码体制不至于因此而立即崩溃。例如,密钥是一个长度为n的比特串,且攻击者已获取其中的k位。如果密码体制的安全性过分地依赖于这k位,那就非常危险。反之,如果密钥中的k位对密码的安全性贡献是平均的,则无论攻击者知道的是哪个k位,他所面对的破解难度是一样的。特别地,如果密文独立于密钥中的任意一位,则这时攻击者无论得到的是哪一位,保密者仍能获得良好的安全性。
  • 要求密码系统满足柯克霍夫原则,即密文的保密性仅依赖于密钥的保密性,而与密码算法、密钥长度和密文的公开与否无关。也就是说,在评估密码强度时,通常假设密码算法、密钥长度和密文是公开的。
1.2.4、密码学的应用

如今,密码学实际上已经深深地融入了人们的日常工作中,在现实世界中有着广泛的应用。例如,用于保密通信、数字签名、秘密共享、认证及密钥管理等。

  • 保密通信:这是密码学产生的动因。使用密码体制进行保密通信时,信息接收者只有知道相应的密钥才可以解密该信息。
  • 数字签名:该技术可以代替传统的手写签名,而且从安全的角度考虑,数字签名具有很好的防伪功能。它在政府机关、军事领域、商业领域有广泛的应用环境。
  • 秘密共享:该技术将一个秘密信息利用密码技术分拆成n个称为共享因子的信息,分发给n个成员,只有k(k≤n)个合法成员的共享因子才可以恢复该秘密信息,其中任何一个或m(m≤k)个成员合作都无法得知该秘密信息。利用秘密共享技术可以控制任何需要多个人共同控制的秘密信息、命令等。
  • 认证功能:在公开的信道上进行敏感信息的传输,采用签名技术实现对消息的真实性、完整性的验证,通过验证公钥证书实现对通信主体的身份认证。
  • 密钥管理:指对密钥进行管理的行为,包括从密钥产生到密钥销毁的各个环节。公钥密码体制是进行密钥管理工作的有力工具,利用它可以进行密钥的分发、保护、托管、恢复等。

1.3、现代密码体制

密码体制是指一个加密系统所采用的基本工作方式,有加密/解密算法和密钥两个基本构成要素。按照所使用密钥数量情况,密码系统分为单密钥加密和双密钥加密。相应地,现代密码体制分为对称密钥密码体制和非对称密钥密码体制两大类。

1.3.1、对称密钥密码体制

对称密钥密码体制也称为私钥密码体制、单密钥密码体制,是广泛应用的普通密码体制。其基本特征是加密密钥与解密密钥相同,也就是说加密和解密采用相同的密钥,这个密钥对于加密方和解密方来说是保密的,双方必须信任对方不会将密钥泄露出去,这样就可以实现数据的机密性和完整性。一般来说,加密方先产生一个私钥,然后通过一个安全的途径告知解密方。对称密钥加密技术的加解密过程如图所示。对称密钥密码体制可以看成一个保险箱,密钥就是保险箱的号码。持有保险箱号码的人能够打开保险箱取出文件,没有保险箱号码的人就必须摸索保险箱的打开方法。当用户应用这种体制时,数据的发送者和接收者必须事先通过安全通道交换密钥,以保证发送数据或接收数据时能够有可供使用的密钥。

在这里插入图片描述
对称密钥密码体制对明文信息的加密有两种方式:

  • 一种是对明文信息按字符(如二元数字)进行逐字符加密,称之为流密码或序列密码。
  • 另一种是将明文信息分组(含多个字符)​,逐组进行加密,称之为分组密码。

对称密钥加密技术的优点是计算开销小、算法简单、加密速度快、保密强度高,能够经受住时间的检验和攻击;但比较明显的缺陷是密钥分发管理困难,规模复杂。

比较典型的对称密码算法有DES、AES、RC4、RC2和IDEA等。

1.3.2、公钥密码体制

1976年,W.Diffie和M.Hellman在国际计算机会议上发表的《密码学的新方向》一文,首次提出了公钥密码体制(或称公开密钥体制)​。公钥密码体制使用不对称加密,因此也称为非对称密钥密码体制、双密钥密码体制。公钥密码体制的发现是密码学发展史上的一次革命。公钥密码体制的基本原理是:每个用户都有两个密钥,其中一个是公开的,称为公钥;另一个由用户秘密保存,称为私钥。公钥和私钥是不相同的,也就是说解密的一方首先生成一对公私密钥,私钥不会泄露出去,而公钥则可以任意对外发布。用公钥进行加密的数据,只能用私钥才能解密。这种采用两个不同密钥的方式,对于在公开的网络上进行保密通信、密钥分配、数字签名和认证等有着深远的意义和影响。

非对称密钥加密技术分为两种情况:

  • 一种是用接收方公钥加密数据,用接收方私钥解密;
  • 另一种是用发送方私钥加密,用发送方公钥解密。但需注意,虽然它们的工作原理相同,但用途不同。

在公钥基础设施(PKI)中,使用第一种加密机制对数据进行加密,而用第二种加密机制进行数字签名。

1)用于数据加密的公钥密码加密技术

该密钥对一般称为加密密钥对,由加密公钥和解密私钥组成。为了防止密钥丢失,解密私钥应该进行备份和存档。加密公钥无须进行备份和存档,加密公钥丢失后,只需重新产生密钥对。该加密机制可以由多个用户来加密信息,而只能由一个用户来解读,从而实现保密通信。在PKI中,该加密机制提供了数据完整性服务。这种情况下的加解密过程如图所示。

在这里插入图片描述
加密方首先从接收方获取公钥,然后利用这个公钥进行加密,把数据发送给接收方。接收方利用他的私钥进行解密。如果解密的数据在传输的过程中被第三方截获,也不用担心;因为第三方没有私钥,没有办法进行解密。

2)用于数字签名的公钥密码加密技术

签名密钥对由签名私钥和验证公钥组成。签名私钥具有日常生活中公章、私章的效力,为保证其唯一性,签名私钥绝对不能做备份和存档,丢失后需重新生成新的密钥对,原来的签名可以使用旧公钥的备份来验证。验证公钥需要存档,用于验证数字签名。签名密钥一般可以有较长的生命期。

在这种加密/解密机制中,用发送方的私钥进行加密,用发送方的公钥进行解密。该加密机制可以由一个用户来加密信息,并由多个用户解读,从而实现数字签名。在PKI中,该加密技术提供不可否认性服务以及数据完整性服务。具体的加解密过程如图所示。

在这里插入图片描述

公钥密码加密技术的优点是:便于管理和分发,在多人之间进行保密信息传输所需的密钥组和数量很小,便于通信加密和数字签名;密钥分配简单,不需要秘密的通道和复杂的协议来传送密钥。其缺点是处理速度较慢,公开密钥加密比私有密钥加密在加解密时的速度慢;密钥尺寸大,在同样安全强度下公钥密码体制的密钥位数要求多一些。

比较典型的公钥密码算法有RSA算法、ElGamal算法、椭圆曲线密码算法(ECC)等。

1.3.3、密码算法安全性度量及准则

如何评价一个密码算法的安全性,需要一个度量标准。通常认为,如果破解密文所用的成本超过了被加密信息本身的价值,或者破解密文所需的时间超过了信息的有效期,两个条件满足其中之一,就可以说这个密码算法是安全的,加密方式是可行的。

密码算法的安全性一般遵照如下三项准则:

  • 计算安全性:这种度量涉及破译密码算法所需计算上的努力。如果使用最好的算法破译一个密码算法需要至少N次操作,这里的N是一个特定的非常大的数字,就可以定义这个密码算法是计算安全的。
  • 可证明安全性:将密码算法的安全性归结为某个数学难题。
  • 无条件安全性:这种度量考虑的是对密码分析者的计算量没有限制时的安全性。即使提供了无穷的计算资源也无法破译,就定义这种密码算法是无条件安全的。

2、对称密码体制

信息加密过程是通过各种加密算法实现的,目的是以尽量小的代价提供尽量可靠的安全保护。在大多数情况下,信息加密是保证信息在传输中机密性的唯一方法。据不完全统计,已经公开发表的加密算法多达数百种。这些密码算法可简单地归类为对称密码算法、非对称密码算法(公钥密码)和消息摘要算法。下面先介绍对称密码算法,其他两种算法稍后再讲述。

对称密码算法有时又叫传统加解密算法,其特点是加密密钥能够从解密密钥中推算出来,反之亦然。在大多数对称密码算法中,加解密密钥是相同的。这些算法也叫私钥加密算法或单密钥加密算法,它要求发送者和接收者在安全通信之前,商定一个密钥。对称加密算法的安全性依赖于密钥,泄露密钥就意味着任何人都能对消息进行加解密。只要通信需要保密,密钥就必须保密。对称密码算法的加密和解密过程可以表示为EK(M)=C, DK(C)=M。

对称密码算法按照处理明文的方法又可分为分组密码与序列密码两类。分组密码是每次只能处理特定长度的一块数据的一类加解密算法,即将明文分组后逐组加密。常见的对称密码算法如DES、3DES、AES和SM4都属于分组密码,古典密码也属于分组密码。序列密码是将明文作为序列处理,用产生的密钥流加密明文序列。

2.1、古典密码

古典密码一般指从人类有文字记载至第二次世界大战结束前后所出现的各类密码算法。古典密码一般是对称密码,虽然它们的安全性较弱,但反映了密码设计的一些基本原则和方法,为现代密码算法设计提供了借鉴。作为历史上有记载的古典密码体制,凯撒密码是最为著名的例子;后来,密码学家们又发明了各种形式的代换密码、置换密码等。

2.1.1、代换密码

古典密码中的代换密码技术是将明文的每一字母都代换为字符表中的另一字母,代换前先将明文字母用等价的十进制数字建立索引,再把用于索引的十进制数进行运算。例如,用数字0~25依次代表英文小写字母a~z,则英文字母与十进制数字的索引关系如表所示。

在这里插入图片描述
根据代换是对每个字母逐个进行还是对多个字母同时进行,代换密码又分为单表代换密码、多表代换密码即多字符代换等加解密码算法。

1)单表代换密码

单表代换密码是以代数运算为核心的一种密码算法。这种算法只使用一个密文字母表,并且用密文字母表中的一个字母来替代明文字母表中的一个字母。典型的单表代换密码示例是凯撒密码,它通过将字母按顺序移位来实现加解密。以m表示明文字母,c表示对应的密文字母,用数学表达式描述凯撒密码的加解密过程如下:

在这里插入图片描述
其中,3可以看作是加解密所用的密钥,每个字母都向后移3位(循环移位,字母x移到a, y移到b, z移到c)​。解密时每个字母都向前移3位(循环移位)​;mod是一种求除法余数的运算符,≡为同余号。

一般地,将凯撒密码扩展为移位密码算法,移位代换的加解密可分别表示为:
在这里插入图片描述
仿射代换是基于凯撒密码(替换)和移位变换的一种单表代换,但需要两个密钥,一个为相乘a,一个为移位b。因此,仿射代换密码算法的加解密算法可表示如下:
在这里插入图片描述
其中,密钥a, b是满足0≤a, b≤25和gcd(a, 26)=1的整数;gcd(a, 26)表示a和26的最大公因子,gcd(a,26)=1表示a与26互素;a-1表示a的逆元,即a-1·a≡1mod 26。

单表代换密码算法的优点是加解密公式简单,缺点是容易破译。由于密钥空间为[0, 25]区间的整数,需要测试的密钥空间中只有26种密钥,因此可以用穷举法逐个尝试可能的密钥,便能很快找到正确的密钥。当然,并非所有单表代换密码都像凯撒密码那样容易被破译。只要单表代换密码的明文字母与密文字母之间的映射关系不像凯撒密码那样固定,就能显著增加破译的难度。例如,密钥可以采用26个字母按序排列的各种组合,若采用穷举法进行破译,需要尝试26!次,约为4×1026次,破译的难度是非常大的。

2)多表代换密码

为了增加密码破译的难度,人们在单表代换密码算法的基础上扩展出多表代换密码算法。多表代换密码就是多个代换表依次对明文消息的字母进行代换的加密方法。最具代表性的多表代换密码算法是16世纪法国数学家维吉尼亚(Vigenère)设计的,并将其称为维吉尼亚密码。维吉尼亚密码加解密过程为:首先将明文M分为由n个字母构成的分组M1, M2,…,Mj,对每个分组Mi的加密运算可表示如下:
在这里插入图片描述
其中,​(A, B)是密钥,A是n×n的可逆矩阵,满足gcd(|A|,N)=1|A|是行列式)​。

在这里插入图片描述
对密文分组Ci的解密运算为:

在这里插入图片描述
为便于理解上述密码机制和用法,可以构造一个如表2.2所示矩阵形式的维吉尼亚密码表,其加密过程为:如果第一行为明文字母,第一列为密钥字母,则行与列的交点就是密文字母,以此类推。

在这里插入图片描述
用维吉尼亚密码加密需要使用一个与明文等长的密钥,若密钥小于明文长度,则通过重复拼接密钥直到其长度与明文相同。每个明文字母与密钥中的一个字母对应,执行加密操作。例如,要加密的明文是“attack at six thirty”​,使用关键字“stay”作为密钥,则明文与密文的对应关系如下:

  • 明文:attackatsixthirty(非字母字符均被忽略)​;
  • 密钥:staystaystaystays;
  • 密文:SMTYUDARKBXRZBRRQ。

在该示例中,明文中的第一个字母是a,它所对应的密钥字母为s,通过维吉尼亚密码表可以确定相应的密文字母为S。明文中的第二个字母是t,对应的密钥字母为t,相应得到的密文字母为M。以此类推,可以得到完整的密文。

解密操作也依据维吉尼亚密码表进行。在对密文解密时,首先通过关键字的重复来产生与密文等长的密钥。解密密文时,必须确定每个密文字母对应的密钥字母。在该示例中,密文的第一个字母S对应的密钥字母是s,密文中的第二个字母M对应的密钥字母是t,在此基础上,通过密钥字母在维吉尼亚密码表中定位行,在相应行中找到密文字母,密文字母所在列对应的明文字母即为解密结果。例如,示例中的最后一个密文字母是Q,参照维吉尼亚密码表,在由密钥字母s定位的行中找到密文字母Q, Q所在列对应的明文字母为y,即y是密文字母Q所对应的明文字母。

3)多字符代换密码

在多表代换加密过程中,由于每个字符被单独处理,字符之间没有相互影响,易于通过词频统计规律分析破译密码。所谓多字符代换密码,就是把原来的代换表,由单个字符到单个字符的映射,变成了多个字符到多个字符的映射。简言之,多字符代换密码通过同时加密多个字符来隐藏字符的自然出现频度。例如,原来在单表代换中,明文字符a用b代换,字符b用d代换,故ab加密成bd。多字符代换则是一次加密多个明文字符,比如ab,直接用另一个字符对ac代替,形成密文ac。本质上来说,多字符代换并没有引入新的东西,只是把原来代换表变大了,也就是扩充了明文字符集。

多字符代换密码主要有Hill、Playfair等密码。多字符代换密码容易受到已知明文攻击,若分析者已知明文与密文,则加密密钥易于被破译。

2.1.2、置换密码

置换密码(Permutation Cipher)是古典密码的重要一员,由于这种密码算法涉及对明文字母进行位置变换,也被称为转置密码(Transposition Cipher)或换位密码。置换密码是通过重新排列明文中的比特或字符位置,使其变得不可读懂。因为不同的密钥会导致明文中的比特或字符有不同的顺序(或者称为排列)​,所以破译者难以知道如何将密文重新排列还原成原始消息。

置换密码的典型算法有栅格转置、矩阵转置等。置换密码算法比较简单,优点是加解密过程方便,计算量小,速度较快;缺点是完全保留字符的统计信息,加密结果简单,容易通过字母频率予以破译。通常将代换和置换密码算法结合在一起使用,一般是先用代换技术加密,再用置换技术二次加密。

代换和置换算法这两种操作实际上形成了近代密码学的雏形,它们充分体现了Shannon有关扩散(Diffusion)与混淆(Confusion)的密码学思想。

2.2、数据加密标准(DES)

在Shannon提出的对称密码设计原则下,20世纪60年代到70年代期间,设计提出了许多新的对称密码算法。其中,最具代表性的是由Feistel领导的IBM公司设计小组设计的LUCIFER密码。1973年,美国国家标准局(BNS)开始征集数据加密标准。IBM将LUCIFER密码的改进版本递交评审,并于1977年获得批准,此后,人们一直将这一密码算法称为数据加密标准(Data Encryption Standard, DES)​。DES是最早得到广泛应用并具有深远影响的分组密码。DES密码算法框图如图所示,它表明了DES加密的整个机制,是一个16轮的迭代型分组密码。DES加密函数有两个输入:待加密的明文和密钥。DES的明文长度为64bit,密钥长度为56bit(实际上,这个密码函数希望采用64bit密钥,然而仅使用了56bit,其余8bit用作奇偶校验)​。

在这里插入图片描述

2.2.1、DES的轮密钥生成

轮密钥的生成是DES算法的重要步骤之一。将上图右半部分进一步细化为如下图所示,16个48bit轮密钥的生成过程如下。

在这里插入图片描述

  • (1)开始时,对给定的64bit密钥k,删除其中8个校验位,通过置换选择PC-1操作后将56bit分为C0、D0左右两个部分,其中C0和D0分别为前后各28bit。
  • (2)遵照循环左移位数计算逻辑分别进行循环左移位:其中,LSi表示按轮数不同循环左移1位或2位,由图中循环左移移位数表可知,第1、2、9、16轮移1位,其他轮移2位。
    在这里插入图片描述
  • (3)经过循环左移之后,左右两部分合并,再按照置换选择PC-2操作,产生48bit轮密钥ki,供每一轮的迭代加密操作使用。对于1≤i≤16,计算轮密钥ki:每一轮的置换选择PC-2都一样,但第i轮的循环左移位输出作为第i+1轮密钥产生的输入,再次进行循环左移位,直到产生16个轮密钥。由于轮密钥的位置重复迭代使得每轮密钥ki互不相同。
    在这里插入图片描述
2.2.2、DES加密过程

由图的左半部分可知,明文的加密处理经过以下3个阶段。

1)变换明文M,即初始置换

首先,对给定的64 bit的明文M,经过一个初始置换IP计算重新排列M,从而构造出64bit的M0, M0=IP(M)=L0R0,其中L0表示M0的左半边32bit, R0表示M0的右半边32bit。初始置换IP将明文M中数据的排列顺序按一定的规则重新排列,生成新的数据序列。初始变换不会影响DES算法本身的安全性,其意义在于打乱输入分组M的ASCII码字关系。

2)16轮迭代操作

初始置换后,按照规则进行16轮相同的迭代操作。每一轮执行的操作相同,每一轮都以上一轮的输出作为输入。在每一轮迭代中,64bit的明文都被分成两个独立的32bit进行处理,并且从56bit的密钥中生成48bit的轮密钥。如果定义在第i次迭代的左半边和右半边数据分别为Li和Ri,而且在第i轮的48bit的轮密钥为ki,那么在任何Feistel密码中,每轮变换的过程可以用如下公式表示:
在这里插入图片描述
其中,F是一个置换函数,主要由S盒置换构成;​“⊕”表示异或操作XOR。置换函数F包括如图所示的4项操作。

在这里插入图片描述

  • 扩展:使用扩展置换运算E的转置矩阵,将32bit(每一轮右半部分输入Ri-1)扩展成48bit。从图2.7中E的转置矩阵可以看出,扩展操作实际上是将原有的32bit按8行4列排列后构成输入矩阵,复制输入矩阵第1列并循环下移1位,添加到输入矩阵的右侧;复制输入矩阵第4列并循环下移1位,添加到输入矩阵的左侧,构成8行6列输出矩阵,共48bit。
  • 密钥混合:扩展操作输出的48bit与48bit轮密钥做异或运算,即ki与Ri-1的扩展异或,其中的轮密钥是由56bit原始密钥生成的。
  • S盒置换:将密钥混合后输出的48bit分为8组,每组6bit,经过8个独立的S盒将异或得到的结果压缩回32bit。其中,S盒是实现非线性映射的常用手段,其输出根据输入查表确定。每个S盒可以看作是一个4行6列的表格,可以查阅标准文档获得。
  • P盒置换:S盒压缩替换输出32bit,再经过一个固定的P盒置换。P盒置换依照P盒的转置矩阵进行操作,例如将输入的第16、7、20位置的值重排到输出的第1、2、3比特位置。该置换操作使得本轮每个S盒压缩输出,在下一轮经过扩展后,扩展到6个不同的S盒中。

置换函数F中S盒的压缩替换操作实现了所谓的“混淆”​,P盒置换和扩展置换操作实现所谓的“扩散”​,从而保证了DES算法的安全性。

3)输出密文C

对L16和R16利用IP-1进行逆置换,得到64bit的密文C,即C=IP-1(R16L16)​。这个置换是初始置换的逆置换。注意,在第16轮迭代后,左边与右边未交换,而将R16L16作为IP-1的输入,因此输出实际为R16L16,而不是L16R16,其目的是使算法可同时用于加密和解密变换。

在DES算法中,IP置换计算和IP-1逆置换计算、置换函数F、轮密钥ki的生成及使用,以及S盒的工作原理是四个主要问题。其中最为关键的是置换函数F,这是一个非常复杂的置换变换,它依赖于S盒的使用。S盒的运算规则是:S盒的输入6bit,输出4bit;将输入的二进制数的第1、第6位作为S盒的行号,由第2、3、4、5位确定列号,从而唯一确定S盒的输出元素,然后再将其转换成二进制数。

2.2.3、DES解密过程

DES算法的解密过程与加密类似,只是生成16个子密钥的顺序恰好相反,即以逆序k16, k15,…,k1密钥方案恢复输出明文M。

由以上所述可知,DES算法加密使相同明文对应相同密文,并且攻击者易于进行分组的删除和添加。为弥补这个缺陷,一个分组密码除了密钥生成、加密、解密,还需要提供可选择的“工作模式”​。所谓分组密码工作模式是指以分组密码为基础,用不同的方式构建新的密码算法。当然,工作模式不仅可以克服上述缺陷,还可满足处理变长的分组需求。直接使用分组密码的方式称为电子密码本(ECB)模式,其他工作模式还有密文分组链接(CBC)​、密文反馈(CFB)​、输出反馈(OFB)​、级联(CM)等。

DES是密码学历史上第一个广泛应用于商用数据保密的密码算法。整个DES算法是公开的,其安全性依赖于密钥的机密性。随着计算设备功能的增强和密码分析技术的发展,DES算法的安全性日益受到威胁。关于DES安全性的一个争论焦点就是其密钥长度太短,仅为56bit,密钥量为256,难以抵御密钥穷举攻击。密钥穷举攻击是逐一枚举并验证可能的密钥,即穷举所有可能的256个密钥,或者平均来说需要穷举一半的密钥空间。为了弥补DES密钥长度太短的缺陷,研究者们提出了三重DES(TripleDES, 3DES)密码算法。

2.2.4、三重DES(3DES)密码算法

3DES是DES的扩展,对一组数据用3个不同的密钥连续执行3次DES算法,安全强度更高,可足以抵抗穷举攻击。简单地说,就是3次DES加解密的组合。该算法的加解密过程分别是对明文/密文数据进行3次DES加密或解密,得到相应的密文或明文。

假设EK(·)和DK(·)分别表示DES的加密和解密函数,m表示明文,c表示密文,k1表示3DES中第一个8Byte密钥,k2表示第二个8Byte密钥,k3表示第三个8Byte密钥。3个密钥的3DES的加解密过程如下。

  • (1)加密:加密方式是在3个密钥的控制下,对明文数据实施“加密→解密→加密”的过程,表示为:[插图]。整个加密过程如图所示,最后得到密文数据。
    在这里插入图片描述
    在这里插入图片描述

  • (2)解密:解密方式是在3个密钥的控制下,对密文数据实施“解密→加密→解密”的过程,表示为:[插图]。整个解密过程如图所示,最后得到明文数据。通常,3DES的密钥为双倍长密钥,使用两个密钥(即k3=k1)​,而不采用3个密钥,称之为两个密钥的三重DES。其原因是两个密钥合起来的长度已有112bit,对于商用已经足够。若使用总长度168bit的3个密钥三重DES,会产生不必要的开销。另外,由于DES加解密算法是每8Byte作为一个加解密数据分组,因此在实现该算法时,还需要对数据进行分组和补位,即最后不足8Byte时要补足8Byte。
    在这里插入图片描述
    在这里插入图片描述
    至于为什么在加密时采用“E→D→E”的加密过程而不是“E→E→E”的加密过程,是因为需要满足已有DES系统的向后兼容性。其实无论是加密还是解密过程,都是在64bit的数之间的一种映射。从密码学的角度看,这种映射的作用是一样的,但采用“E→D→E”方式的优势在于当k1=k2时,三重DES算法则与DES算法一样,有利于推广应用3DES算法。显然,3DES也不是太好的密码算法,软件实现起来速度比较慢。随着密码分析技术的发展,已有一些在效率上优于穷举攻击的方法,如差分分析、线性分析等,能够有效减小穷举密钥的空间。

2.3、高级加密标准(AES)

由于DES的安全强度不够,1997年美国国家标准技术研究所(NIST)开始征集DES的替代者,并称之为高级加密标准(Advanced Encryption Standard, AES)​。征集要求AES能够支持128bit、192bit和256bit的密钥长度,分组长度为128bit,能够在各类软件、硬件设备下方便实现,应具有令人满意的效率和安全性。最终,由比利时研究人员Daemen和Rijmen提交的Rijndael算法被采纳为AES。2001年,NIST将Rijndael算法作为联邦信息处理标准FIPS PUB197对外公布。

AES是一种对称分组密码算法,具有速度快、安全级别高的特点。AES把明文分成一组一组的,每组长度相等,每次加密一组数据,直到加密完成全部明文。在AES标准规范中,分组长度只能是128bit。也就是说,每个分组为16个字节。密钥的长度可以是128bit、192 bit或256 bit。

密钥的长度不同,加密轮数也不同。根据密钥的长度,AES算法有AES-128、AES-192或者AES-256之分。

AES算法基于排列和置换运算,排列是对数据重新进行安排,置换是将一个数据单元替换为另一个。AES使用几种不同的方法来执行排列和置换运算,涉及轮函数的字节替换(SubByte)​、行移位(ShiftRow)​、列混淆(MixColumn)和轮密钥加(AddRoundKey)4种操作。AES加解密算法流程如图所示。

在这里插入图片描述

从图可知,AES是一个迭代型分组密码,其迭代轮数R依赖于选取的密钥长度。当密钥长度为128bit、192bit和256bit时,R分别为10、12和14。

2.3.1、AES中的轮函数

Rijndael算法中的轮函数由字节替换、行移位、列混淆和轮密钥加4个不同的计算单元组成。在每轮迭代中,AES都采用如下4种操作。

1)字节替换

字节替换是基于替换表(Rijndael S盒)的非线性变换,独立地对状态的每个字节进行替换。替换表(S盒)是可逆的,根据FIPS197, S盒由以下两个变换的合成得到:

  • 求GF(28)有限域内各元素的乘法逆元(利用扩展欧几里得算法)​;
  • 用(1)的结果做如下(GF(28)上的、可逆的)仿射变换:
    在这里插入图片描述
    上述S盒对状态的所有字节所做的变换记为:SubByte(State)​。
    字节替换的原理就是通过式(2-1)所示替换表(S盒)对每个字节进行替换,实际上是一个查表操作,将每一个字节的前4位作为行值,后4位作为列值,去S盒查找并进行输出。逆S盒与S盒对应,用于解密时对数据处理,称为逆字节替换。
    以密钥长度为128bit、分组长度为128bit为例,128bit的明文消息分组分成16Byte,记为:InputBlock=m0,m1,…,m15。先将字节看作GF(28)上的元素,映射到自己的乘法逆元,00映射到自己。一般地,明文分组用字节为单位的正方形矩阵描述,称为状态矩阵,即将128bit分组分成16Byte,按照每行4Byte排列成矩阵:
    在这里插入图片描述
    然后,对字节做如下(GF(28)上的、可逆的)仿射变换,即用8bit输入、8bit输出的式(2-1)所示S盒分别替换以上每个字节,得到:
    在这里插入图片描述
    其中,bi, j就是式(2-1)所述S盒的(z0, z1, z2, z3, z4,z5, z6, z7)​。
    SubByte的逆变换由替换表的逆表(逆S盒)做字节替换。

2)行移位

行移位操作较为简单,用来将输入的数据作为一个4×4的字节矩阵进行位置上的置换。在加密时,对于式(2-3)中矩阵的第0~3行循环左移位,移动的位数分别为0~3,得到:
在这里插入图片描述
解密时,恰恰相反,依然保持第一行不变,将式(2-3)中矩阵的第0~3行循环右移位,移动的位数分别为0~3。

3)列混淆

列混淆是AES算法中最为关键且复杂的扩展操作,它能够混淆输入矩阵的每一列,使输入的每个字节都会影响到4个输出字节。在加密的列混淆过程中,将式(2-4)所示矩阵左乘一个给定的矩阵。若将其矩阵元素视为有限域GF(28)中的成员,它们之间的加法、乘法均在GF(28)中进行,则列混淆操作(MC)可以表示为:
在这里插入图片描述
这个运算需要做GF(28)上的乘法,但由于所乘因子是00000010、00000011、00000001这3个固定的元素,因而是比较简单的乘法运算。对状态State的所有列所做的列混淆运算记为:MixColumn(State)​。

列混淆运算的逆运算与此类似,不同之处在于所使用的左乘矩阵是互逆的。

4)轮密钥加

轮密钥加是将轮密钥简单地与状态进行逐个比特异或。轮密钥由128bit的种子密钥k0, k1,…,k15按照4×4字节矩阵形式排列得到状态State,然后对相应位置上的字节执行异或操作,可表示为:
在这里插入图片描述
状态State与轮密钥RoundKey的密钥加运算记为:AddRoundKey(State, RoundKey)​。密钥加运算的逆运算是其本身。

2.3.2、AES密码算法描述

设轮数为R,密钥长度为128bit, AES密码算法总体描述如下。

1)AES密钥编排

密钥编排是指从种子密钥得到轮密钥的过程。AES不直接(完全)使用原始密钥,而要将其做一些处理后再使用。密钥编排有时候也称为密钥扩展。AES支持3种不同长度的密钥,因此有3种不同的密钥编排方式。

以128bit密钥的密钥编排为例,将原始密钥K0K1K2…K15每4个分为一组,分别记为W0W1W2W3,每个Wi为4Byte(32bit)​。然后进行10轮循环处理,生成44个Wi。对于每一轮i=1, 2, 3,…,10,按以下公式进行计算:

在这里插入图片描述
其中,函数g(​)用于增加密钥编排中的非线性、消除AES结构中的对称性。g(​)首先将4个输入字节进行翻转,并执行一个按字节的S盒替换,然后用第一个字节与轮系数RC[i]进行异或运算。轮系数RC[i]是一个有10个元素的唯一数组,一个元素一个字节。这样生成44个Wi,每4bit为一组组成一个子密钥ki,共生成11个子密钥k0,k1, k2,…,k10用于加密、解密过程中操作轮中的轮密钥加。注意,第一个子密钥k0是一个非常特殊的子密钥,即原始密钥。

2)AES加密操作

对明文连续执行如下操作:

  • 轮密钥加。
  • 依次迭代执行R-1轮字节替换、行移位、列混淆、轮密钥加。
  • 在第R轮中执行字节替换、行移位、轮密钥加。

3)AES解密操作

AES加密中的各操作均可逆,解密算法的每一步分别对应加密算法的逆操作;解密与加密的所有操作的顺序恰好相反。正是由于这两点,再加上加密算法与解密算法每一步的操作都互逆,保证了算法的正确性。加、解密中每轮的密钥分别由种子密钥经过密钥扩展算法得到。算法中16Byte的明文、密文和轮密钥都以一个4×4的矩阵表示。

对于当前已有的密码攻击而言,AES是安全的,尚未发现有效的攻击。通过构造操作如字节替换、列混淆等,AES的设计可以抵御差分和线性分析攻击。AES已经取代了DES,成为主流的分组密码算法。

2.4、中国商用分组密码算法(SM4)

SM4密码是我国国家密码管理局于2006年公布的中国商用分组密码标准,主要应用于无线局域网、数据加密等领域。这是我国首次公布自己的商用密码算法,意义重大且影响深远。SM4也已经成为ISO/IEC国际标准。

2.4.1、SM4算法描述

与DES、AES算法类似,SM4是一种迭代型分组密码算法。其分组长度为128bit,密钥长度也为128bit。加密算法与密钥扩展算法均采用32轮非线性迭代结构,以字(32bit)为单位进行加密运算,每一次迭代运算均为一轮变换函数F。SM4是对合运算,其加密、解密结构相同,只是轮密钥的使用次序相反,解密的轮密钥是加密轮密钥的逆序。

1)基本运算

SM4使用模2加和循环移位作为基本运算。

  • 模2加:⊕,32bit异或运算。
  • 循环移位:<<<i, 32bit循环左移i位。

2)置换运算:S盒

SM4的S盒是一种以固定字节为单位的非线性变换操作,其密码学的作用是起混淆作用。S盒的输入输出都是8bit,其置换运算记为Sbox(·)​。本质上S盒是8bit的非线性转置运算,其中数据均采用16进制表示,横向为低位,纵向为高位。

S盒的转置规则:输入的高半字节为行号,低半字节为列号,行列交叉点处的数据即为输出。

3)非线性字变换τ

SM4的非线性字变换τ是一种以字为单位的非线性变换,起混淆作用,具体为4个S盒并行转置。设输入字为A=(a0, a1, a2, a3)​,输出字为B=(b0, b1, b2, b3)​,则:

在这里插入图片描述
4)线性变换L

线性变换L是以字为处理单位的线性变换部件,输入输出都是32bit的字,其密码学作用是起扩散作用。设L的输入为字B,输出为字C,则:

在这里插入图片描述
5)合成变换T

合成变换T由非线性字变换τ和线性变换L复合而成。数据处理单位是字,即:T(·)=L(τ(·)​)​。合成变换T(·)在密码学中起到混淆和扩散作用,以提高密码安全强度。

6)轮函数F

轮函数F采用非线性迭代结构,以字为单位进行加密运算,一次迭代运算称为一轮变换。设F的大小为(X0, X1,X2, X3)​,是4个32bit字;轮密钥为(rk0, rk1,…,rk31)​,rki(i=0, 1,…,31)也是一个32bit字。轮函数的运算公式为:

在这里插入图片描述
简记B=(X1⊕X2⊕X3⊕rk)​,再由合成变换T(·)展开为非线性字变换τ与线性变换L,可以得到:
在这里插入图片描述

2.4.2、SM4算法加密流程

SM4加密算法采用32轮迭代运算,每一轮迭代使用一个轮密钥。设输入明文为(M0, M1, M2, M3)=(X0, X1,X2, X3)​,4个32bit字。输入轮密钥为rki(i=0, 1,…,31)​,共32个轮密钥。输出密文为(Y0, Y1, Y2, Y3)​,4个32bit字。算法结构:轮函数32轮迭代,每轮使用一个轮密钥。SM4算法的加密流程包括加密变换和反序变换两部分。

  • 加密变换:Xi+4=F(Xi, Xi+1, Xi+2, Xi+3, rki)=Xi⊕T(Xi+1⊕Xi+2⊕Xi+3⊕rki)​。
  • 反序变换:​(Y0, Y1, Y2, Y3)=R(X32, X33, X34,X35)=(X35, X34, X33, X32)​。
2.4.3、SM4解密算法

SM4是对合运算,解密与加密算法相同,只是轮密钥的使用顺序相反。解密时,使用轮密钥序列(rk31,rk30,…,rk0)​。

2.4.4、SM4密钥扩展算法

在SM4的加密算法中,由于采用了32轮迭代运算,每一轮迭代使用一个轮密钥,因此总共需要32个轮密钥,这些轮密钥由加密密钥通过扩展算法生成。在密钥扩展算法中使用FK、CK等参数。

1)系统参数FK

系统参数FK=(FK0, FK1, FK2, FK3)采用十六进制表示,具体取值如下:FK0=(A3B1BAC6)​,FK1=(56AA3350)​,FK2=(677D9197)​,FK3=(B27022DC)​。

2)固定参数CK

固定参数CK是一个字,CKi=(CK0, CK1,…,CK31)​。

3)密钥扩展算法描述

设密钥扩展算法中输入的加密密钥为MK=(MK0, MK1,MK2, MK3)​,输出轮密钥为rki(i=0, 1,…,31)​。中间数据为Ki(i=0, 1,…,34, 35)​。密钥扩展算法描述如下:

设(K0, K1, K2, K3)=(MK0⊕FK0, MK1⊕FK1,MK2⊕FK2, MK3⊕FK3)​,对于i=0, 1,…,31,执行以下操作:
在这里插入图片描述
其中,T’(​)是将原来的T(​)中的线性变换L(​)替换成L’(​)​:
在这里插入图片描述
SM4密钥扩展算法需要采用32轮的迭代处理。算法中涉及的非线性变换大大提高了密钥扩展的安全性。

2.5、序列密码

序列密码也称为流密码,是一种对称密钥密码体制。序列密码具有实现简单、便于硬件实施、加解密处理速度快、没有或只有有限的错误传播等特点,因此在实际应用中,特别是在专用或机密机构中保持着优势。

序列密码与分组密码之间的主要区别在于其记忆性。序列密码的工作原理是将明文消息以比特为单位逐位加密。在序列密码中,将消息当成连续的符号序列,即m1m2m3…;用密钥流k1k2k3…加密,即[插图]因此,序列密码也称为流密码。与明文对应,密钥也是以比特为单位参与加密运算。简单说来,序列密码的加密方式就是将明文和密钥进行异或运算。例如,明文a, ASCII码为97,二进制码为01100001;密钥为B, ASCII码为66,二进制码为01000010;然后按位异或:

在这里插入图片描述
在这里插入图片描述
这样就得到了密文00100011,对应的ASCII码为35,即“#”​。当获得密文“#”以及密钥“B”以后,按照同样方式转换ASCII码,按位异或操作可获得明文:

显然,序列密码有两大特点:一是密钥长度与明文长度一致,若要加密20MB的明文,就需要20MB的密钥。二是序列密码容易被篡改,若使用同一密钥被多次拦截后,易于由其规律推导出密钥。例如,1941~1946年,苏联为节约成本曾多次使用同一密码本,结果被美国破译。为让序列密码更加安全,于是产生了一次一密。

由于常用的加密方法仅仅是将明文序列和密钥流逐位相加,因此序列密码设计的核心是密钥流生成方法。在密钥流生成方法中,线性反馈移位寄存器(LFSR)通常是重要的部件之一,但其产生序列的线性性质使其不能直接作为密钥流使用,因此常用非线性滤波和非线性组合两种方法将LFSR的输出转换为密钥流。

典型的序列密码算法包括基于非线性数据表变换的序列密码(Rivest Cipher 4, RC4)和A5流密码算法。RC4算法是基于软件实现的方法,被广泛应用于Windows软件和安全套接字层(SSL)​、无线局域网安全协议(WEP)等。A5算法是移动通信系统GSM采用的流密码算法,用于加密从手机到基站之间的语音通信。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值