网络安全之密码技术
一次性进群,长期免费索取教程,没有付费教程。
教程列表见微信公众号底部菜单
进微信群回复公众号:微信群;QQ群:16004488
微信公众号:计算机与网络安全
ID:Computer-network
本文主要对密码技术的相关背景、发展历程和一些常见的数据加密技术以及加密技术的部分应用做简要的概述和介绍。其目的是让您对于密码技术有初步的认识和了解,同时,尽可能地激发您学习和应用密码技术的兴趣。
一、密码学概述
密码学(Cryptography)是研究编制密码和破译密码的技术科学。研究编制密码的科学称为密码编码学,而研究密码破译的科学称为密码分析学,两者共同组成了密码学。密码编制的基本思想在于“伪装”信息,使未授权者不能理解它的真正含义。而密码破译则是未授权者想尽一切办法从“伪装后”的消息中获取“有用”的信息。
在现代,密码学特别指对信息以及其传输的数学性研究,常被认为是数学和计算机科学的分支,此外,它还和信息论、电子学、声学、语言学等密切相关。随着信息化和互联网技术的发展,人们对于信息安全和保密的重要性认识不断提高,如网络银行、电子商务、电子邮件等正在悄悄融入普通百姓的日常生活中,人们自然要关注其安全性如何。而密码学在解决信息的隐私性、可鉴别性、完整性和信息的抗抵赖等方面都发挥着极其重要的作用,它已经成为解决网络信息安全的关键技术和现代数据安全的核心。
(一)起源与发展
密码学的起源几乎可以追溯到人类刚刚出现,并且尝试去学习如何通信的时候。它的发展大致可以分为古典密码学和现代密码学2个阶段。
1、古典密码学
20世纪中期以前出现的密码都属于是古典密码学的范畴。
早在公元前1900年左右,一位佚名的埃及书吏在碑文中就使用了非标准的象形文字。公元前1500年左右,美索不达米亚的一块板上记录了被加密的陶器上釉规则。斯巴达克人最早将加密技术用于军事消息的传递。他们使用一根有固定面的竿,把一块布缠在竿上,再在竿上书写消息。当把布解开后,上面的字母顺序就全乱了。要想恢复原文,必须将布缠回类似的竿上。
从19世纪末期到20世纪中期左右,随着军事、数学、通信等相关技术的发展,特别是二次世界大战中对军事信息保密传递和破坏敌方信息的需求,密码学得到了比较大的发展,并广泛应用于军事情报部门的决策。
这个阶段的密码学可以说是一种艺术,是一种技巧和经验的综合体。不论是构造好的编码,还是破解已有的编码,都依赖于创造性和个人技巧。密码专家常常凭直觉和信念来进行密码的设计与分析,只有非常少的理论可以依靠,甚至没有一个清晰的定义来说明什么样的编码才是好的。同时,它的主要使用者是军事和智囊机构。
2、现代密码学
在20世纪中后期,随着计算机信息产业的飞速发展,密码学的面貌从根本上得到了改变,出现了丰富的理论。
1949年,香农(Shannon) 发表了论文《保密系统的通信理论》(《Communication Theory of Secrecy Systems》),首次将信息论引入密码技术的研究中,为现代密码学的研究与发展奠定了坚实的理论基础。
1976年,美国斯坦福大学的著名密码学家Diffie和Hellman发表了论文《密码学的新方向》(《New Directions in Cryptography》),首次提出了公钥密码体制的概念和设计思想,正式掀开了公钥密码研究的序幕,也极大地促进了密码学各个领域的发展。
1977年,Rivest、Shamir 和Adleman首次提出了比较完善的公钥密码算法,即著名的RSA 加密算法。1977年,美国国家标准局首次颁布由 IBM 公司开发设计的数据加密标准(DES,Data Encryption Standard)。这也是密码史上的一个创举。原定服役10年,但是由于在这期间,DES并未受到真正的威胁,因此,它在国际保密通信的舞台上一直活跃了20多年。近年来,随着计算机技术的快速发展,已经有了比较现实的威胁。
2001年,由美国国家标准与技术研究院颁布了高级加密标准(AES,Advanced Encryption Standard)用来替换原来的标准DES。在密码学中,AES又被称为Rijndael加密算法,它是由比利时密码学家Joan Daemen和Vincent Rijmen所设计,已成为当前最为流行的一种密码算法。
这些都是现代密码学发展史上重要的里程碑。密码学已经从一种军事中处理秘密通信的艺术变成一种全世界普通人都可以使用并且非常需要的一门科学。在现代,密码学已经与人们的生活息息相关。例如,为了防止别人查阅你的文件,你可以将文件进行加密;为了防止别人盗刷你的信用卡,你可以设置密码等。
(二)加密体制简介
密码技术的一个核心功能是实现保密通信,如图1所示。参与的个体包括发送者(Sender)、接收者(Receiver)和攻击者(Attacker),攻击者也叫敌手。发送者将需要传输的消息或明文(Plaintext)和某一个密钥(Key)输入到一个加密算法中,由加密算法经过一定的运算输出相应的密文(Ciphertext)。然后,经过一定的信道(Channel)传递给接收者。接收者在收到密文后,结合自己拥有的密钥,通过解密算法对密文进行解密而得到相应的明文。通常情况下,信道是不安全的。因此,攻击者可以从中截获密文,其目的是设法在不知道解密密钥的情况下,从密文中获得明文的一些信息。而保密通信就是为了保证攻击者在这种情况下不能成功的一项技术。
图1 保密通信基本模型
(三)加密体制的分类
对加密体制分类的方法有很多种,下面介绍几种常见的分类方法。
1、根据加解密密钥的相同与否可以将密码体制分为对称加密体制(Symmetric Cryptosystem)和非对称加密体制(Asymmetric Cryptosystem)。
在图1的保密通信模型中,如果发送者的加密密钥与接收者的解密密钥相同,称为对称加密体制;反之,则称为非对称加密体制。习惯上,也称对称加密体制为私钥加密体制(Secret-Key Cryptosystem),而非对称加密体制则称为公钥加密体制(Public-Key Cryptosystem)。在非对称加密体制中,加密密钥一般是公开的,即任何人都可以得到它而进行加密运算。但是,相对应的解密密钥则(必须)是保密的。显然,要实现保密通信,自然要求从加密密钥难以推导出解密密钥。
常见的对称加密方案有DES、AES等。而非对称加密体制中,最典型且最常用的主要有RSA加密体制、El Gamal加密体制等。
2、根据对明文信息的处理方式可以将加密体制分为分组密码(Block Cipher)和流密码(Stream Cipher),流密码也称为序列密码。
简单来说,分组密码是将明文消息按某种方式进行分组形成数据块,而每次进行加密或解密运算时是按数据块来处理的。常用的分组大小是64bit或者128bit。DES和AES都属于分组密码的范畴。而流密码则一般是逐比特进行的。在后面将介绍一个非常经典的流密码算法——Grain。
3、根据加密过程中是否使用随机数可以将加密体制分为概率加密体制和确定性加密体制。
如果在加密算法中使用了除明文和加密密钥以外的随机数,则称它为概率加密体制;相反,如果加密算法除了明文和加密密钥外没有使用任何的随机数,则称为确定性加密体制。显然,对于确定性加密体制来说,一个明文在相同密钥下的密文是确定的,而对概率加密体制来说,则不一定。后面将会看到,在公钥加密体制中,RSA方案就是确定性的,而El Gamal方案则是概率性的。
(四)现代密码学中的其他重要分支
现代密码学的研究领域已经远远超越了保密通信这一范畴,它还包括如消息认证码(MAC,Message Authentication Code)、数字签名(Signature)、密钥交换协议(Key Exchange Protocol)、认证交换协议(Identification Protocol)、访问控制(Access Control)等。
消息认证码和数字签名都是用来验证消息的完整性的。当接收方收到发送方发出的消息时,能够验证该消息是真实、未被篡改的。区别在于消息认证中的接收方和发送方验证密钥是相同的;而数字签名中的接收方密钥和发送方密钥则不相同,而且接收方的验证密钥是可以公开的。
密钥交换协议用于解决通信双方的密钥分配问题。尤其在私钥加密体制中,需要发送方和接收方事先共享一个共同的密钥。而密钥交换协议可以解决通信双方如何共享这一密钥的问题。
认证交换协议是以交换信息的方式来确认对方身份的机制。访问控制机制可以防止非授权的个体使用资源,即控制谁可以访问资源、在什么条件下可以访问、可以访问哪些资源等。此外,一些新型的密码技术也正在不断涌现,如混沌密码、量子密码、DNA密码等,这些新的技术也与传统的密码技术相互结合而不断发展。
二、数据加密技术
对于私钥加密体制,介绍流密码和分组密码的工作机制和原理;对于公钥加密体制,介绍非常著名的RSA密码方案和ElGamal加密方案。
(一)私钥加密体制:流密码
流密码,也叫序列密码,是一种重要的对称密码体制,它具有实现简单、便于硬件实施、加解密处理速度快、没有或只有有限的错误传播等特点,因此,在实际应用中,特别是专用或机密机构中保持着优势。其基本思想是,在加密明文串x=x1x2…时,首先产生一个密钥流z=z1z2…,然后根据式规则进行加密。
其中,e是加密算法,y是对明文x加密所得的密文。
严格来说,序列密码(Stream Cipher)是一个密码学意义上伪随机数生成器(PRG, Pseudorandom Generator),它以密钥(Key)和初始向量(IV)作为输入,输出一串看起来随机的比特串,或者称为密钥流(Keystream)。为了加密明文数据(Data Stream),只需要将这些密钥流与明文简单地按位异或,而在解密时只需要将密文(Ciphertext Stream)与密钥流进行按位异或。具体操作如图2所示。
图2 流密码的工作模式
尽管具体的序列密码方案之间差别很大,但它们有一些共同的特征。一个序列密码一般包括一定数量的内部存储单元,为了抵抗穷搜索攻击,内部存储单元的数量应至少为密钥长度的两倍。给定密钥和初始向量(IV)后,先进行初始化,在这个阶段,密钥和IV以非线性的方式进行混合。初始化完成之后,开始输出密钥流,密钥流的每一比特都是内部状态的某个函数值(这个函数由具体方案定义)。在输出每个比特的同时,内部状态也在不断地更新(更新函数也由具体方案定义),为输出下一个比特做准备。一个特定的序列密码需要明确说明:
①每个密钥与IV对能够输出多长的密钥流;
②多少个IV被用过后需要更换密钥。
线性反馈移位寄存器曾经被广泛用来构造序列密码,常用的模式有前馈模式、非线性组合模式和钟控模式。关于线性移位寄存器的很多理论问题已经得到解决,比如,它们生成序列的周期等于它们的特征多项式的周期;它们生成极大周期序列(m序列)当且仅当特征多项式是本原的等。由于这类生成器内在的线性性质,它们容易遭受代数攻击和相关攻击。后来人们渐渐开始使用非线性反馈移位寄存器,但对于非线性反馈移位寄存器,到现在为止知道的结果还很少,比如,它们生成序列的周期性质、线性复杂度、相关函数、统计特性等。这是序列密码面对的一个重要问题,目前这方面研究仍在进行中。
关于序列密码的安全性,一般假设敌手拥有除密钥以外的任何信息。也就是说,敌手可以适应性地选择一些IV,并得到在未知密钥和此IV下的密钥流序列。而敌手的目标是:
①将密钥流和真正的随机串区分出来(区分攻击);
②将某个中间状态恢复出来(状态恢复攻击);
③将密钥恢复出来(密钥恢复攻击)。
显然,这些目标按照顺序一个比一个更困难。对于一个密钥长度为k bit的序列密码,如果用穷搜索算法,能够在2k时间内将未知密钥恢复出来。因此,一般认为,如果敌手不能在2k时间内达到上述某个目标,则该算法是安全的。目前,常用的流密码攻击方法主要有立方攻击、代数攻击、相关攻击、猜测确定攻击等。
为了推动序列密码的发展,2004年,欧洲启动了eSTREAM序列密码的研究项目,其主要目标是帮助密码研究人员展开对序列密码的研究和设计,并征集“适合广泛应用的新的序列密码方案”。该计划征集了多达34个序列密码方案,这些密码方案几乎涉及了序列密码的各个方面。经过3轮测评,最终有8个算法被选为候选算法。其中,基于带进位反馈移位寄存器的算法F-FCSR,因在2008年9月被发现有漏洞而被从候选算法中除去。eSTREAM计划的提交算法中涌现了很多新的设计思路,同时很多新的漏洞和攻击方法也被挖掘出来,因此,e STREAM计划的候选算法反映了当时序列密码的发展水平。
下面给出eSTREAM计划的7个候选算法之一——Grain的算法描述。Grain有2个版本,Grain−80和Grain−128,密钥长度分别是80bit和128bit。2个版本的设计思路是相同的,为避免重复,只给出Grain−80参数设置。
Grain−80的初始向量IV的长度是64bit。它包含3个主要的部件,即一个线性移位寄存器(LFSR)、一个非线性移位寄存器(NFSR)和一个输出函数(Output Function)。2个移位寄存器的级数和密钥的长度相同,都是80bit。为了描述方便,将LFSR和NFSR在t时刻的状态分别记作:
和
输出函数定义为
其中
2个移位寄存器以级联的方式连接,如图3所示。
图3 移位寄存器的连接方式
2个移位寄存器的反馈函数分别为:
在输出密钥流之前要先进行初始化,设密钥为:
初始化向量为IV=(IV, IV1,…, IV63),其中,ki和IVi分别是密钥K和初始化向量(IV)的第i位。初始化过程如下。
首先,将密钥K和初始化向量IV放到2个移位寄存器中:
线性移位寄存器LFSR中剩余的那些位置都赋值为1,即:
然后,触发2个移位寄存器进行160轮迭代,并且在此期间输出函数输出的比特并不进行输出,而是附加到2个移位寄存器上,如图4所示。在完成初始化过程之后就可以进行密钥流输出了。
至此,就完成了Grain−80的算法描述。
图4 Grain-80的初始化
(二)私钥加密体制:分组密码
从社会应用密码的需求来看,分组密码是目前国际上最关心的2种加密技术之一(另外一种是后面要介绍的公钥加密体制)。分组密码具有速度快、易于标准化和便于软硬件实施等特点,通常作为信息与网络安全中实现数据加密、消息鉴别、认证以及密钥管理的核心密码算法。最典型的分组密码如DES和AES作为美国政府核定的标准加密算法,应用领域从电子邮件加密到银行交易转账等非常广泛。
分组密码是将明文串x1x2…划分成长为m的组x=(x1,x2,…,xm),各组分别在密钥k=(k1,k2,…,kt)的控制下变成等长的输出数字序列y=(y1,y2,…,yn)。若n>m,称为有数据扩展的分组密码;若n<m,称为有数据压缩的分组密码;若n=m,称为无数据扩展和压缩的分组密码,通常为这种情况。
设明文x和密文y均为二元数字(0和1)的序列。F2为二元域(含有0和1这2个元素)。
1、数据加密标准DES
1972年,美国国家标准局(NBS,National Bureau of Standards),现改为美国国家标准技术研究所(NIST),开始了一项计算机数据保护标准的发展规划。1973年5月15日,NBS在联邦记录中公开征集密码算法,这一举措最终导致了数据加密标准(DES)的研制。它曾是世界上使用最广泛的密码体制,由IBM公司开发,早期被认为是Lucifer密码的改进。DES在1975年3月17日首次被公布在联邦记录中,经过大量公开讨论,于1977年2月15日被批准作为美国联邦信息处理标准,即FIPS-46。大约每隔5年DES会被评估一次,最后一次是在1999年1月。当时已经开始征集DES的替代物。当前DES的地位已经被新的高级加密标准AES替代。但是DES对于推动密码理论的发展和应用起了重大作用。
DES是一个16轮的Feistel型密码,它用长度为56bit的密钥去加密长度为64bit的明文块,产生一个长度为64bit的密文。接下来,描述一下Feistel型密码。
Feistel型密码的第i轮进行步骤如图5所示。首先,将这一轮的输入分为等长的两半Li−1和Ri−1,如果密文的长度是n bit,那么,Li−1和Ri−1的长度都为:
第i轮的轮函数fi的输入和输出也都为:
这一轮的输出Li和Ri定义为:
其中,⊕表示2个比特串的异或。
在一个t轮的Feistel型密码中,将n bit的输入分为(L, R),输出是一个n bit的值(Lt, Rt)。
图5 第i轮Feistel型密码
轮函数不需要满足任何单射条件,Feistel型密码是可逆的。只需要给出任意轮都是可逆的。给定第i轮的输出(Li, Ri),按式规则计算(Li−1, Ri−1)
在上述的介绍中并没有涉及密钥的问题。设Feistel型密码的主密钥为k,从k中可以得到每一轮的子密钥,设第i轮的子密钥为ki。通常,设计Feistel型密码时会给每一轮公开指定Mangler函数,设第i轮的Mangler函数为:
定义:
DES的轮函数的输入和输出都是32bit。每一轮的轮函数都是由相同的Mangler函数得到的。轮密钥ki长为48bit,是由一个长为56bit的主密钥k得到的。
DES的加密算法如下。
(1)给定一个明文x,先对x做一个固定的初始置换IP,得到IP(x)=LR,L和R长度都为32bit。
(2)进行16轮式运算
(3)对比特串L16R16做初始置换的逆运算IP−1,获得密文y。
一个一轮DES加密如图6所示,轮函数f:{0,1} 32×{0,1} 48→{0,1} 32的输入是一个32bit的串和轮密钥。计算f(A,J)的过程如下。
图6 DES的f函数
① 根据一个固定的扩展函数E,将f的第一部分输入A扩展成长度为48bit的串。
② 计算E(A) ⊕J , 并将计算结果写成8个长度为6的比特串,记为A
③ 使用8个S盒:S1S2…S8。每个S盒输入为6bit的串,输出为4bit,由一个固定的4×16 阶矩阵来描述,矩阵的每个元素都来自整数0~15。给定一个长度为6的比特串Bi=b1b2…b6,按如下方法计算Si(Bi):用2个比特b1b6对应的整数r(0≤r≤3)决定Si某一i行(将b1b6看做r的二进制表示),4个比特b2b3b4b5对应的整数c(0≤c≤15)决定Si某一列,Si(B i)的取值就是Si的第r行第c列的整数所对应的二进制表示。记Ci=Si(Bi),(0≤i≤8)。
④ 根据置换P对32 bit的串C=C1C2…C 8做置换可知,所得的结果P(C)就是f(A,J)。
为了参考方便,给出并描述DES 的轮函数f中所使用到的具体函数。分别为S盒、扩展函数E、置换P。具体如下。
S盒(如图7所示)。
图7 DES的8个S盒
例1 如何应用上述的表达来计算一个S盒的输出。考虑S盒S2,并设输入的6元组100110,第一个和第六个比特是10,表示整数2。中间的4个比特0011,表示整数3。S2的标号为行2,列3的数字是11(行标和列标都是从0开始的),二进制表示为1011,所以, S2在输入为100110时的输出是1011。
扩展函数E(如图8所示)。
图8 DES的扩展函数E
给定一个长为32的比特串A=(a1, 2a ,…,a32),E(A)为 长48bit的串:
置换P(如图9所示)。给定一个比特串C=(c1,c2,…,c32), 置换后输出的比特串P(C)为:
DES的解密算法:解密采用同一算法实现,把密文y作为输入,以逆序k16,k15,…, k1使用密钥方案,输出就是明文x。
图9 DES的置换函数P
2、高级加密标准(AES)
1997年1月,美国国家标准技术研究院(NIST)开始筛选新的分组密码的工作来代替DES,该替代者叫作高级加密标准,即AES。AES的基本要求是至少要比三重DES快而且至少要与三重的DES一样安全。分组的长度为128bit,密钥的长度分别为128bit、192bit和256bit。在AES的筛选过程中,NIST主要以3条原则进行评判:安全性、代价、算法的实现特性。算法的安全性是最主要的,如果一个算法不是安全的,就没有实际应用价值;代价是指该算法的实现效率,包括算法的运行速度和存储需求:算法的实现特性是指该算法的灵活性、简洁性以及一些其他的因素。NIST一共收到了15个候选算法,经过公开评测,NIST宣布最终获胜者是比利时学者Daemen和Rijmen提交的Rijndael算法,并于2001年11月作为美国新的数据加密标准(FIPS-197)对外公布。
AES的分组长度为128 bit,它可以使用128 bit、192 bit、256 bit长度的密钥。密钥的长度会影响加密的轮数,但是不会影响每轮加密的方式。当密钥的长度为128 bit时,加密轮数为Nr=10;当密钥长度为192 bit时,加密轮数为Nr=12;当密钥长度为256 bit时,加密轮数为Nr=14。不同于DES的Feistel加密方式,AES的设计主要是基于代换和置换的工作方式。在AES算法执行过程中,加密和解密都会涉及到一个状态(State),每个状态是一个128 bit的字符串。下面先给出一个AES算法的总体操作过程,然后再对每一步做详细描述。
① 输入明文x,将x更新成初始状态State,然后,进行AddRounKey操作,也就是用轮密钥和初始状态做异或操作。
② 对前Nr−1轮中的每一轮,用S盒对State进行一次代换操作Sub Bytes:对State做一置换ShiftRows;再对State做一次操作MixColumns;然后进行AddRoun Key操作。
③ 依次进行SubBytes、ShiftRows、AddRounKey操作。
④ 将最后的状态State作为密文输出。
明文x和中间状态State都是由16个字节组成的。State用式4×4字节矩阵表示为:
称该矩阵为状态数组。AES中每一步的变化都是对状态数组来进行处理的。用十六进制来代表一个字节的内容,这样每个字节将含有2个十六进制数字。
①字节代替变换SubBytes
它是一个关于字节的非线性变换,将状态中的每个字节非线性的变换为另一个字节。每个字节做两步变换:首先,将一个字节变换为有限域:
中的乘法逆元素,规定00变为00;然后,对结果做式的仿射变换。
也可以通过查表直接得到(十六进制),行标号为X、列标号为Y的项是πs(XY),如图10所示。
图10 πs的矩阵表示
下面,举例说明上面的字节代替变换SubBytes。以十六进制的B9开始。可以得到B9在二进制下的表示为10111001,然后把它表示为域元素:
x7+x5+x4+x3+1
计算它的乘法逆元,在有限域
x7+x3+x2+x
表示成二进制,有
(b7b6b5b4b3b2b1b)=(10001110)
下面计算:
一直算到b′7,得到结果是:
以十六进制表示为56,也可以通过查表B9得到56,如图10所示。
② 行移位变换Shift Rows
它是对一个状态数组的每一行循环左移不同的位移量。第一行保持不变,第二行左移一个位置,第三行左移2个位置,第四行左移3个位置,具体为:
③ 列混合变换Mix Columns
将对一个状态数组每一列进行变换,它将一个状态的每一列视为有限域GF(28)上的多项式
令
则s′j(x)=a(x)⊗sj(x),0≤j≤3,其中,a(x )={03}x3+{01}x2+{01}x+{02},⊗表示模x4+1乘法。可以将s′j(x)=a(x)⊗s j(x)表示为式的矩阵乘法。
④ 子密钥加交换AddRoundKey
将一个轮子密钥按位异或到一个状态上。子密钥加交换是面向字的(一个字由4个字节组成,即32bit),轮子密钥的长度是4个字。轮子密钥按顺序取自扩展密钥。扩展密钥是原始密钥经过扩展后得到的。扩展密钥的长度为4(Nr+1)个字
其中,(k0,j,k1,j,k2,j,k3,j)表示扩展密钥中的第4r+j个字,0≤j≤Nr。
至此,已把AES加密所需的所有操作描述完毕。解密算法只需要把所有的操作逆序进行,并逆序使用密钥编排方案。操作ShiftRows、MixColumns、AddRounKey都需要它们的逆操作来代替。
(三)公钥加密体制
与私钥加密体制不同的是,公钥加密体制不需要加密密钥和解密密钥相同。因此,可以将公钥公开,任何人(包括敌手)都可以得到,而安全性完全依赖于私钥的安全性。一个自然要求是:敌手得到公钥后不能恢复出私钥。公钥密码体制往往是建立在一定的困难性假设上,如大整数分解问题(Factoring)、离散对数问题(Discrete Logarithms)等。
1977年,Rivest、Shamir和Adleman基于大整数分解问题的变体(称为RSA假设)设计了著名的RSA加密。1985年,ElGamal基于离散对数问题的变体(称为判定性Diffie-Hellman假设,即DDH假设)设计了ElGamal加密方案。它们是公钥密码学中最经典的2个方案,下面分别介绍这2个方案。
1、RSA密码体制
简单介绍一些所需要的背景知识。首先来介绍大整数分解问题。粗略来讲,大整数分解问题是说,对于随机选择的2个很大的素数p和q,计算N=pq,则任何计算能力受限的算法在得到N后,“很难”计算出N的分解p和q。
定义1 大整数分解假设
当安全参数为1n时,随机选择2个(二进制)长度为n的素数p和q,计算N=pq。对于任意运行时间为n的多项式的算法A在得到1n和N后,计算并输出p和q的概率是“可忽略的”,则称与N相关的大整数分解假设是成立的。
下面介绍欧拉定理。
定理1 欧拉定理
设N是一个正整数,
若N=pq,其中,p, q为不同的素数,则φ(N)=(p−1)(q−1)。
对于满足与φ(N)互素且小于φ(N)的正整数 e,一定存在小于φ(N)的正整数d使ed=1modφ(N),即d=e−11modφ(N)。由欧拉定理可知,对于任意
与大整数分解假设密切相关的假设是RSA假设。
定义2 RSA假设
当安全参数为1n时,随机选择2个(二进制)长度为n的互不相同的素数p和,q计算N=pq,φ(N)=(p−1)(q−1)。取整数e满足1<e<φ(N),且gcd(e, φ(N))=1。
另外,随机选择
显然,若大整数分解假设不成立,则RSA假设也不成立。因为,若多项式时间的敌手可以将N分解得到p和q,则它可以计算φ(N)=(p−1)(q−1)和d=e−1modφ(N)。输出x=ydmodN即可。
下面给出基于RSA假设的RSA公钥密码体制。具体来说,该密码体制由3个算法组成:密钥生成算法Gen、加密算法Enc和解密算法Dec。
①Ge :n 输入安全参数1n。与上述RSA假设一样来选取N,φ(N)和e。计算d=e−1mod φ(N)。输出公钥为pk=(N,e ),私钥为sk=(N,d)。
② Enc:输入公钥pk=(N,e)和一个消息
③ Dec:输入私钥sk=(N,d)和密文
该方案满足正确性:由ed=1 mod ( )Nφ 可知:
需要强调的是,上述的RSA密码体制是确定性的。即每一个消息在固定的公钥下的加密结果都是确定的。
例2 假设接收者选取p=19,q=31。那么,N=589和φ(N)=560。选取 101e= ,可以计算gcd(e,φ(N))=1成立。同时计算e−1mod560=61。因此,接收者得到解密指数d=61。接收者在个人网站上发布N=589和e=101。假定,接收者希望发送明文m=235给接收者,他计算235101mod 589=448,然后把密文448通过信道发出。当接收者收到密文448,他将用秘密解密指数来计算44861mod 589=235。
2、El Gamal加密方案
El Gamal 加密方案是建立在与离散对数假设相关的判定性 Diffie-Hellman (DDH, Decisional Diffie-Hellman)假设上。因此,下面首先介绍离散对数假设及相关的预备知识。
假设G是一个q阶的循环群,则存在一个生成元g∈G使{g,g1,…,gq−1}=G。也就是说,对任意的h∈G,存在一个唯一的x∈ZN,使gx=h成立。称x为h的(在群G中关于g的)离散对数,并记为x=loggh。
直观上说,离散对数假设是指对于计算能力受限的敌手在得到生成元g和一个随机选择的h G∈ 后,“很难”求出h关于g的离散对数。
定义3 离散对数假设
当安全参数为1n时,生成一个带有生成元g的q阶循环群G,其中,q的(二进制)长度为n。随机地得到1n和(G,g,q)后,输出x∈Zq满足gx=h的概率是“可忽略的”,则称在G中离散对数假设成立。
对于带有生成元g的循环群G和2个群元素h1=gx∈G,h2=gy∈G,定义
选择h∈G。如果对于任意运行时间为n的多项式的算法A在
即
定义4 DDH假设
与离散对数假设类似,当安全参数为1n时,生成一个带有生成元g的q阶循环群G,其中,q的(二进制)长度为n。随机地选择2个群元素h1=gx∈G2,h=gy∈G。如果对于任意运行时间为n的多项式的算法A在得到(1n,G,g,q,h1,h2)后,可以将DH g(h1,2h)和一个随机群元素区分开来的概率是“可忽略的”,则称在G中DDH假设成立。
显然,若在G中离散对数假设不成立,则相应的DDH假设也不成立。
下面描述基于DDH假设的ElGamal公钥密码体制。具体来说,它由3个算法组成:密钥生成算法Gen、加密算法Enc和解密算法Dec。
① Gen:输入安全参数1n。生成一个带有生成元g的q阶循环群G,其中,q的(二进制)长度为n,随机选取 x∈Zq并计算h=gx。输出公钥为pk=(G,q,g,h),私钥为sk=(G,q,g,x)。
② Enc:输入公钥pk=(G,q,g,h)和一个消息m∈G。随机选取 y∈Zq,输出密文<c1=gy,c2=hy·m>。
③ Dec:输入私钥sk=(G,q,g,x),和密文<c1,c2>,计算并输出消息
很显然,解密是正确的
需要强调的是,与前面的RSA密码体制不同,上述ElGamal密码体制是概率性的。即每一个消息在固定的公钥下加密结果不是唯一的,而是随着随机数y的变化而变化。
例3 设q=101,g=2。g是模q的生成元。令x=31,则可以得到h=gx=231mod 101=34。假定发送者要传送消息m=55给接收者。如果发送者选择随机数y=43,则计算:
当接收者收到密文(c1=86,c2=6)后,计算
就得到了发送者加密的消息55。
三、加密技术应用
在现代,加密技术已经被广泛应用于计算机科学的各个领域,包括网络通信、信息隐藏、数字版权保护、文件加密、软件加密、电子邮件加密以及数字签名技术等。下面简单介绍一些关于加密技术的常见应用。
(一)TLS/SSL
TLS(Transport Layer Security)和它的前身SSL(Secure Socket Layer)位于传输层和应用层之间,是为网络通信建立安全通道的协议。它们是针对HTTP通信的安全风险提出并设计的,使用X.509证书和非对称密码学来验证通信双方,并协商对称的会话密钥,对二者之间通信的数据流进行加密。
TLS/SSL协议主要由Record协议和Handshake协议两部分组成,其中,Record协议建立在可靠的传输协议之上,为高层协议提供数据封装、压缩、加密等基本功能的支持;Handshake协议建立在Record协议之上,用在实际数据传输之前,通信双方进行身份认证、协商加密算法和交换加密密钥等。
(二)VPN
VPN(Virtual Private Network)是指用公用网络实现专用网络的功能,即通过使用专有连接、虚拟隧道协议或通信加密算法建立一条虚拟的端到端连接。它的主要实现有Open VPN和IPSec。
Open VPN是基于SSL的VPN开源软件,其开发站点在www.openvpn.net,它工作在OSI模型的第二层或第三层,使用Open SSL库加密数据与控制信息,支持预享私钥、第三方证书、用户名/口令等多种身份认证方法。其技术核心虚拟网卡在很多操作系统下都有相应的实现,是其能够跨平台使用的一个重要原因。
(三)PKI
PKI(Public Key Infrastructure)是一组由硬件、软件、参与者、管理政策与流程组成的基础架构,可通过创建、管理、分发、使用、存储和撤销数字证书来支持公钥管理,并提供机密性、认证性、完整性和抗抵赖服务。
一个典型的PKI系统包括PKI策略、软硬件系统、证书机构(CA)、注册机构(RA)、证书发布系统和PKI应用等基本组成部分。
基于PKI技术的IPSec协议现在已经成为架构VPN的基础,它可为路由器之间、防火墙之间或路由器与防火墙之间的通信提供加密和认证。
(四)PGP
PGP(Pretty Good Privacy)是一套基于混合加密体系、为数据通信提供机密性和认证性的加密技术,PGP的出现与应用很好地解决了电子邮件的安全传输问题。
1991年,当时工作于PKWARE的Phil Zimmermann开发出了第一个版本的PGP,受Symantec公司收购的影响,PGP 从10.0.2之后,不再推出独立安装包,而是以安全插件等形式集成于Norton等Symantec公司安全产品中。
作为电子邮件加密软件,PGP的工作过程为:
(1)提供基数64转换,保证电子邮件的兼容性;
(2)对邮件内容进行数字签名,保证收信人确认邮件的发送者;
(3)PGP内核使用PKZIP算法压缩明文内容,既节省网络传输的时间和存储空间,也可加强密码的安全性;
(4)用会话密钥加密消息和签名,再用接收方的公钥加密会话密钥;
(5)基于电子邮件设施的限制,必要时自动对长消息分段和重组。
(五)SSH
SSH(Secure Shell),由IETF网络工作小组制定,是创建在应用层和传输层之上的、专为远程登录会话和其他网络服务提供安全性的协议。
1995年,为了取代既不能提供强认证、也不能保证机密性的rlogin、Telnet、rsh等传统协议,芬兰赫尔辛基理工大学的一位研究人员 Tatu Ylönen 设计出了该协议的第一个版本SSH−1,SSH−2不兼容SSH−1。最常用的是它的免费版本OpenSSH,被大多数操作系统默认支持,其开发站点在http://www.openssh.com/。
SSH协议主要有3个组件:传输层协议、用户认证协议和连接协议。其中,传输层协议提供通信前协商、服务器认证、数据加密、压缩和完整性校验等服务;用户认证协议提供多种认证方式,为服务器提供对客户端的身份鉴别;连接层协议将加密的信息隧道复用成若干个逻辑信道,供更高层的应用协议使用。
(六)数字版权保护技术:DRM
数字版权保护(DRM,Digital Right Management)是一种使用较多的对数字作品进行版权保护的技术手段。DRM 是通过在交易过程中对数字作品的分发和使用进行控制,来对该作品知识产权进行保护的。DRM 的主要服务对象是数字化的书籍、图像、音频、视频资料等出版物。通过在这些数字化的出版物中应用数字版权保护技术,可以有效地防止非授权用户获取或者阅读数字出版物的内容。
DRM综合性地利用了密码学的研究成果,不仅使用了加密技术来对数字媒体进行加密,防止非法获得者得到数字媒体中的明文信息,还充分利用了数字签名对用户身份进行认证,确保只有合法用户才能得到和打开相应的数字媒体。
DRM 的工作原理:首先建立一个可信的授权中心,将编码后的数字媒体利用密钥进行加密保护,加密的数字媒体头部存放着密钥标识(Key ID)和媒体授权中心的网络地址(URL),用户在点播时,根据节目头部的Key ID和URL的信息,就可以通过数字节目授权中心的验证授权后送出相关的密钥解密,此后数字媒体就能进行播放。
DRM 的加密采用公钥加密的方式。公钥用于加密节目内容本身,私钥用于解密节目,私钥还可以防止当媒体头部有被改动或破坏的情况,利用密钥就可以判断出来,从而阻止节目被非法使用。
DRM的使用十分广泛,Applei Pod、Apple i Tunes、Windows Media Player以及家庭游戏机Xbox和PS3中都使用DRM作为其验证用户身份的手段。
(七)文件加密技术
文件加密是一种在计算机操作系统层上的对写入存储介质的数据进行加密的技术,要求计算机操作系统能够完成对文件中数据的加密操作和输入输出的合理控制。
随着数字化进程的发展,越来越多的不易携带的传统纸介质文档已经被更为方便的移动存储设备所代替。在使用这些方便的移动存储设备进行文件传递或移动的过程中,可能会出现移动设备的丢失或被盗等情况。在这种情况下,移动设备中存放有较为机密的文件就可能会被未经授权的人员查看,从而可能出现机密信息的泄露,导致严重的后果。为了尽可能降低在移动设备失窃情况下机密信息被泄露的可能性,文件加密技术应运而生。为了防止离职人员泄密,自动文件加密成为对文件类数据安全的基本要求。自动文件加密要求在用户使用计算机进行文件编写和复制剪切等操作的过程中,被操作的文件能够自动完成加密和解密过程,不需要操作人员的参与。由于自动加密能够减少人为因素带来的泄密危险,自动化文件加密技术称为文件加密技术的主流趋势。
根据加密对象的不同,可以将文件加密技术分为三类:应用层加密技术、磁盘加密技术、驱动级加密技术。
应用层加密技术主要是通过应用程序来直接进行文件的加解密操作,如Win RAR可以在使用时就设置密码来对所选择的压缩文件进行加密,当用户需要阅读文件的时候,只有输入正确的密码才能够解密得到相应的明文文件。由于这种加密方式对执行加解密的应用程序的依赖程度较高,同时,也存在着很多兼容性上的问题,应用层加密技术已经不再被各大安全厂商所青睐。
磁盘加密技术是对整个磁盘空间进行加密的技术,它能够给用户提供一个安全的工作环境,同时不需要用户对每个文件进行加密。在操作系统启动过程中,用户看不见整个加密过程,在操作系统启动完成后,磁盘中的文件是以明文的形式显示的。但是,由于磁盘加密技术是对整个磁盘的信息进行安全管控,所以大大增加整个系统的负载。
驱动级加密工作于操作系统内核,随着操作系统开机运行,在运行过程中不会被恶意停止。相比于磁盘加密技术,驱动级加密技术会对用户的数据本身进行保护。同时,由于驱动级加密位于操作系统内核,对于用户来说完全是透明的,使用者感觉不到加密过程的存在。这么做的好处是可以在不改变用户习惯操作的基础上保证文件的安全。脱离了安全环境的文件将无法被阅读和使用。
目前,国内外各个安全厂商都有提供针对文件加密的解决方案,其中最出名的加密技术为微软在其操作系统中绑定的Bit Locker,可以进行磁盘加密和驱动级加密。
(八)软件加密技术
软件加密技术指的是用户在发送数据之前,首先利用密码学手段对即将传递的数据进行加密,在接收方拿到数据之后使用相应的解密软件进行解密并还原的技术。其中,传递数据的手段可以通过物理传输介质,如光盘或者移动硬盘,也可以通过网络进行传输。软件加密技术广泛应用于软件保护领域,最著名的应用包括软件序列号,用来保护正版软件,通过外界硬件加密设备进行软件的加解密,通过“加壳”来防止黑客进行软件的反编译等。
软件序列号是使用最为广泛的软件加密模式。大多数收费的商业软件都是采用软件序列号的形式进行正版软件的销售和授权。当用户从合法渠道获取到正版软件后,需要注册后才能合法地使用。注册的过程,就是用户通过购买软件公司提供的序列号,再将购买到的序列号输入到软件的认证界面中,通过软件内部的认证机制或者经过网络传输到软件公司的服务器上进行验证。一旦通过验证,用户就可以无阻碍地使用该款软件。但是,在注册过程中,如果软件公司采用的加密算法中有明显的漏洞,恶意用户就可以通过诸如软件注册机、激活工具等软件完成非法注册,从而获得合法的使用权限。
除了软件序列号外,还有通过外接硬件设备的方式进行软件的加解密操作。“加密锁”是最为常用的一种外接式软件加密产品。“加密锁”(也成为“加密狗”),是一种能够插在计算机USB接口上的即插即用式的软硬件结合式加密产品。计算机软件的开发者可以通过“加密锁”提供的接口函数对加密锁的内容进行读写,用以检查计算机是否已插入加密锁,并利用“加密锁”对软件进行加密。被开发者加过密的软件只有利用硬件“加密锁”才能打开,没有插入加密锁或加密锁不匹配都无法使软件正常执行。因此,这种基于硬件保护技术的加密锁可以对软件和数据进行较好的保护,防止知识产权被非法使用。
除了上面 2 种防止用户非法使用具有知识产权的软件的加密技术之外,还有一种专门防止软件非法分析的加密技术——软件加壳。普通的软件在进行反编译之后,会形成开发人员可阅读的代码,从而可以帮助黑客对软件进行分析,窃取该软件的核心技术。软件加壳通过对软件本身的保护性处理,使黑客不能够获得可读的代码,从而保护了软件的核心技术。
软件加壳类型主要有3种:保护型壳、压缩型壳、密码型壳。保护型壳中加入了大量防止调试程序进程分析与脱壳的代码,加壳的时候会先对源程序的代码进行分析,然后进行关键代码替换与加密,替换的过程中会生成相应的解密代码插入到程序中,加壳后的程序执行是分段解密执行的。压缩型壳程序在执行的时候首先会将解压代码自身进行解码,然后再对原程序进行解压。密码型壳一般应用在共享软件的注册上。密码型加壳程序根据用户输入的密码以相应的算法对程序代码区进行加密工作,当程序执行的时候会提示用户输入口令或注册码。如果破解者强行更改密码检测指令,会导致程序不正确地执行,因为被加密的代码并没有用相应的口令进行解码,因而程序不能够被还原。
(九)隐蔽通信技术
隐蔽通信技术是信息隐藏技术的一个重要分支。信息隐藏技术是利用载体中存在的冗余信息来隐藏秘密对象的技术,是一个涉及了密码学、信息论、计算机视觉等学科的交叉技术。传统的信息隐藏与信息加密的目的不同,传统的信息加密注重隐藏信息的内容,而信息隐藏注重于隐藏信息的存在性。但两者不能截然分离。现在的信息隐藏打破了传统的密码学的思维方式,从一个全新的角度审视信息安全。现在的信息隐藏技术结合了这2项技术,先将秘密信息进行加密处理,再把加密后的秘密信息放入载体中进行隐藏,使秘密信息的机密性和不可察觉性的效果更好。
隐蔽通信将通信网络和信息隐藏结合起来,以达到隐藏通信的效果。在隐蔽通信中,信息是通过隐藏信道进行传送的,根据可公开的资料来看,隐藏信道主要包括阈下信道和隐蔽信道2种方式。阈下信道是指在基于公钥密码技术的数字签名、认证等应用密码体制的输出密码数据中建立起来的一种隐蔽信道,除指定的接收者外,任何人都不知道有这条信道的存在。此外,由于敌手可以在信道中作为中间人进行消息的监听,通过获取通信双方的数据分组进行通信量分析,从而得到通信双方所要交互的敏感信息,选择一条不会被敌手发现并监听的信道就变得尤为重要。隐蔽信道的主要目标就是为了保护信息不会被敌手发现并进行通信量分析的技术手段。这种技术提供了基于TCP/IP协议的匿名连接,能够从数据流中去掉用户的身份信息。在建立连接时,并不是直接连到目的端主机,而是经过多个代理服务器,层层传递后到达目的端主机。在传递过程中,由第一层的路由设备对整个连接进行多次加密处理,之后每经过一层路由设备,就会进行一次解密操作,直到到达目的端主机后,才将明文完全解密出来,并在连接终止后,清空各层路由设备的信息。由于每层路由设备处理的数据都不一样(加密的原因),敌手就无法持续跟踪整个通信过程,也就无法得到敏感信息了。
在隐蔽通信的实现上,最出名的是洋葱路由器(Tor,The Onion Router)。Tor是第二代洋葱路由的一种实现,用户通过Tor可以在互联网上进行匿名交流。Tor专门防范流量过滤、嗅探分析。其在由“onion routers”(洋葱)组成的表层网(Overlay Network)上进行通信,可以实现匿名对外连接、匿名隐藏服务。
(十)数字签名技术
数字签名是通过使用公钥加密领域的技术实现的,用于鉴别数字消息的方法。一套数字签名通常定义2种互补的运算:一个用于签名;另一个用于验证签名的有效性。常用的签名算法有RSA、ElGamal、Fiat-Shamir、Guillou-Quisquarter、Schnorr、Ong-Schnoor-Shamir算法、Digital Signature Algorithm(DSA)等。除此之外,还有用于特殊环境下的签名方法。盲签名、代理签名、群签名等针对特殊环境下的签名算法大大丰富了数字签名的应用。
虽然数字签名方法多种多样,但是这些方法可以分为2类:直接数字签名和仲裁数字签名。
直接数字签名只涉及通信双方,发送方通过自己的私钥来对整个消息或者消息的散列值进行加密,生成数字签名。之后,再使用接收方的的公钥或者通信双方的共享密钥来对整条消息和签名进行加密,进一步保护消息的机密性。先对消息进行签名,再对签名之后的消息进行加密,这样在发生纠纷时,第三方能够查看消息以及其签名。但是,直接签名方法有一个通用的弱点,这种方法的有效性依赖于发送方私钥的安全性。如果发送方想否认以前曾经发送过的消息,他可以冒称其私钥丢失或者被盗。这样,发送方就可以抵赖自己曾经签名过的消息。为了避免发生发送方抵赖的情况,仲裁数字签名发挥了重要的作用。
仲裁签名中的仲裁者A扮演的是可信第三方的角色,仲裁数字签名的方法也有很多种,但是它们的执行过程很相似。首先,发送方S将要送到接收方R的每条已签名的消息都先送到仲裁者A处。经过仲裁者A对消息和其签名的检查以验证消息的来源和内容,然后给消息加上时间戳并发送给接收方R,同时指出这条消息已经通过仲裁者的检验。如果仲裁者A是可信第三方,A的加入可以有效地避免直接签名中出现的发送方的可抵赖性。一旦A也变得不可信,它就可以伙同发送方共同否认一个已签名的消息,或者伙同接收方共同伪造发送方的签名。为了解决这个问题,采用了公钥加密的方式。首先,发送方S对消息M进行2次加密,先用S自己的私钥sk对消息M进行加密;之后,再用接收方R的公钥对消息进行加密,得到加密后的签名。S再用它的私钥sk对S自己的标识s-ID和之前加密后的签名加密并连同自己的s-ID一同发给A。此时,A收到的消息是经过2次加密的,由于其中使用了接收方R的公钥加密,所以,对除了R外的所有人来说,消息均不能被解密。但是,A可以通过对外层的加密进行解密用以验证消息确实发自S,但是不能够看到消息本身的内容。这样,就可以防止仲裁者A伙同发送方或者接收方来进行联合欺骗。
相对于不加公钥的直接数字签名和仲裁签名,加上公钥的仲裁数字签名的优点有:
(1)通信各方在通信前不共享任何消息,从而避免合作欺骗行为;
(2)即使发送方私钥泄露,但是只要仲裁者的私钥没有泄露,那么时间戳不正确的消息是不会被仲裁者发送的;
(3)消息对于除了发送方和接收方以外的所有人(包括仲裁者)来说是保密的。
数字签名已经被广泛地应用于多种认证协议中。例如,Kerberos认证协议中使用RSA签名技术作为其认证用户身份的数字签名。
四、技术标准化
(一)国内密码标准
为了保障我国商用密码安全,国家密码管理局制定了一系列密码标准,包括SM1、SM2、SM3、SM4、SM7、SM9、ZUC、SSF33等算法。其中,SM1、SM4、SM7、ZUC算法、SSF33是对称算法;SM2、SM9是非对称算法;SM3是散列算法。下面分别进行介绍。
1、SM1分组密码算法
SM1 算法是分组密码算法,分组长度为128 bit,密钥长度也是128 bit,算法安全保密强度及相关软硬件实现性能与AES(高级加密标准)相当,算法不公开,仅以IP核的形式存储于芯片中。
采用该算法已经研制了系列芯片、智能IC卡、智能密码钥匙、加密卡、加密机等安全产品,广泛应用于电子政务、电子商务及国民经济的各个应用领域(包括国家政务通、警务通等重要领域)。
2、SM2椭圆曲线公钥密码算法
SM2算法是椭圆曲线密码机制,但在签名、密钥交换方面不同于椭圆曲线数字签名算法(ECDSA)、椭圆曲线Diffie-Hellman密钥交换协议(ECDH)等国际标准,而是采取了更为安全的机制。SM2标准包括总则、数字签名算法、密钥交换协议和公钥加密算法4个部分,并在每个部分的附录详细说明了实现的相关细节及示例。另外,SM2推荐了一条素数域256bit的曲线作为标准曲线。
SM2总则中首先介绍了算法中用到的域的表示、运算以及域上的椭圆曲线的点的表示、运算。然后介绍了编程语言中的数据转换,包括整数和字节串、字节串和比特串、域元素和字节串、域元素和整数以及点和字节串之间的数据转换规则。详细说明了有限域上椭圆曲线的参数生成方法,并给出了选取的标准以便于验证。最后,给出了用户密钥对的生成方法,用户的密钥对为(d,P),其中,d为用户的私钥,P为用户的公钥,并针对素域和二元扩域给出了公钥有效性的验证方法。总则中的知识也适用于SM9算法。
数字签名算法适用于商用密码应用中的数字签名和验证,可满足多种密码应用中的身份认证、数据完整性和真实性的安全需求。密钥交换协议适用于商用密码应用中的密钥交换,可满足通信双方经过2次或3次信息传递过程,通过计算获取一个由双方共同决定的共享秘密密钥(会话密钥)。公钥加密算法适用于国家商用密码应用中的消息加解密,消息发送者可以利用接收者的公钥对消息进行加密,接收者用对应的私钥进行解密,获取消息。
数字签名算法、密钥交换协议以及公钥加密算法都使用了国家密码管理局批准的 SM3密码杂凑算法和随机数生成器。数字签名算法、密钥交换协议以及公钥加密算法根据总则来选取有限域和椭圆曲线的相关参数,并生成密钥对,具体算法和流程可查阅SM2标准。
3、SM3密码杂凑算法
SM3密码杂凑算法给出了杂凑算法的计算方法和计算步骤,并给出了运算示例。此算法适用于商用密码应用中的数字签名和验证、消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求,在SM2、SM9标准中使用。此算法对输入长度小于264bit的消息,经过填充和迭代压缩,生成长度为256 bit的杂凑值。其中,使用了异或、模、模加、移位、与、或、非运算,由填充、迭代过程、消息扩展和压缩函数所构成。具体算法及运算示例可查阅SM3标准。
4、SM4分组密码算法
SM4算法是分组密码算法,用于无线局域网产品。该算法的分组长度和密钥长度均为128 bit。加密算法与密钥扩展算法都采用32轮非线性迭代结构。解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。此算法采用非线性迭代结构,每次迭代由一个轮函数给出,其中,轮函数由一个非线性变换和一个线性变换复合而成,非线性变换由S盒所给出。SM4算法的具体描述和示例可查阅SM4标准。
5、SM7分组密码算法
SM7算法是一种分组密码算法,分组长度和密钥长度都是128bit。SM7的算法文本目前没有公开发布。SM7适用于非接触式IC卡应用,包括身份识别类应用(门禁卡、工作证、参赛证),票务类应用(大型赛事门票、展会门票),支付与通卡类应用(积分消费卡、校园一卡通、企业一卡通、公交一卡通)。
6、SM9非对称密码算法
SM9是基于标识的密码算法,与SM2类似,包含4个部分:总则、数字签名算法、密钥交换协议以及密钥封装机制、公钥加密算法。在这些算法中使用了椭圆曲线上的双线性对,不同于传统意义上的SM2算法,可以实现基于身份的密码体制,即公钥与用户的身份信息相关,从而比传统意义上的公钥密码体制优越,省去了证书管理等。
数字签名算法适用于接收者通过签名者的标识验证数据的完整性和数据发送者的身份,也适用于第三方确定签名的真实性及所签数据的完整性。密钥交换协议可以实现通信双方通过双方的标识和自身的私钥经过2次或者3次信息传递过程,计算获取一个由双方共同决定的共享秘密密钥。密钥封装机制可以封装密钥给特定的实体。公钥加密和解密算法是基于标识的非对称密码算法,该算法使消息发送者可以利用接收者的标识对消息进行加密,唯有接收者可以用相应的私钥对密文进行解密,从而获取消息。基于双线性对的数字签名算法、密钥交换协议以及密钥封装机制、公钥加密算法的具体算法,流程图和示例见SM9标准。
7、ZUC算法
祖冲之算法集(ZUC算法)是由我国学者自主设计的加密和完整性算法,包括祖冲之算法、加密算法128−EEA3和完整性算法128−EIA3,已经被国际组织3GPP推荐为4G无线通信的第三套国际加密、完整性标准的侯选算法。祖冲之密码算法的名字源于我国古代数学家祖冲之,是一种流密码。它是2个新算法的核心,这2个算法分别是加密算法128−EEA3和完整性算法128−EIA3。祖冲之算法由3个基本部分组成:比特重组、非线性函数F、线性反馈移位寄存器。祖冲之密码算法成为国际标准,代表我国商用密码算法首次走出国门参与国际标准竞争并取得重大突破。
8、SSF33算法
SSF33算法是由国家密码管理局编制的一种商用分组密码算法,分组长度和密钥长度都为128 bit,该算法不公开,仅以IP核的形式存在于芯片中。但是SSF33算法性能比较差,因此在实用中,逐步被SM1、SM4代替。
(二)国际密码标准
目前国际上的密码技术标准主要包括由美国国家标准技术研究所(NIST)制定的加密技术标准(DES、3DES、AES)、安全散列标准(SHS)以及数字签名标准(DSS),还有美国RSA实验室制定的PKCS系列公钥密码标准。
1、DES
前面已经详细地介绍了这一标准。目前,DES现在已经不被视为一种安全的加密算法,主要因为它使用的56 bit密钥过短。1999年1月,distributed.net与电子前哨基金会合作,在22 h 15 min内即公开破解了一个DES密钥。
2、3DES(Triple DES)
3DES是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)的通称。它相当于对每个数据块应用3次DES加密算法。由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解;3DES提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的分组密码算法。由于密钥长度增加,安全性比DES虽有所增强,但性能有所下降。使用2个密钥的3DES已经广泛地替代了DES,并已用于密钥管理标准ANS X9.17和ISO8732。
3、AES
前面详细地介绍过AES标准。如今,它已经成为对称密码加密中最流行的算法之一。
4、PKCS系列标准
PKCS是由美国RSA实验室及其合作伙伴制定的一系列公钥密码学标准,其中包括公钥加密算法、密钥交换协议、数字签名算法、数字信封的格式以及证书申请、证书更新、证书作废表发布、扩展证书内容等方面的相关协议。标准中使用的核心算法是RSA算法。
5、SHS
SHS,即安全散列标准(Secure Hash Standard),它包含SHA−1和SHA−2这2种算法。安全散列算法(SHA)是一种将任意长度的消息变换成固定长度的消息摘要的算法,用于消息的完整性检验,一般和其他的密码算法(如数字签名算法、消息验证码)结合使用。消息摘要的长度从160~512 bit,依赖于所使用的具体算法。SHA−1在许多安全协议中广为使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec,曾被视为是MD5(更早之前被广为使用的杂凑函数)的后继者。SHA−2包括SHA−224、SHA−256、SHA−384、SHA−512、SHA−512/224和SHA−512/256。散列算法运行很快,其中,SHA2的性能略低于SHA1。
6、DSS
DSS,即数字签名标准(Digital Signature Standard),是由美国国家标准与技术研究所制定的一种联邦信息处理标准。数字签名,也称为电子签名,是附加在电子形式消息上的一些数据,用于确认消息的来源和消息的完整性。目前,数字签名主要是基于公钥密码体制,签名者用自己的私钥对消息签名,验证者用签名者的公钥进行验证,数字签名必须至少具备手写签名的2个性质,即可验证性与不可伪造性。数字签名可以用于电子商务、电子政务和电子选举,在电子邮件、电子资金转账、电子数据交换、软件分发和数据存储等方面有着广阔的应用前景。
DSS最初的版本是1991年的FIPS 186,该版本只包含一种算法,即数字签名算法(DSA),之后经过修订,最新版本中除了DSA,还包括RSA数字签名算法和椭圆曲线数字签名算法(ECDSA)。DSA是El Gamal数字签名算法的变形,它的安全性是基于乘法群上求解离散对数的困难性。DSA的优势为签名更短、效率更高。RSA数字签名算法是由Rivest、Shamir和Adleman于1978年提出的,它是现有签名方案中最易于理解和实现的签名方案,也是目前应用最广泛的公钥密码体制,也被用于ISO/IEC14888−2:2008、ANS X9.31和PKCS #1等标准中。RSA签名算法的缺点为速度较慢、签名较长。椭圆曲线数字签名算法是使用椭圆曲线对数字签名算法的模拟。它先后成为ANSI、IEEE、NIST和ISO的标准,其他的一些组织也正在考虑将其作为标准。由于ECDSA具有处理速度快、系统参数小、密钥尺寸小、抗攻击性强和带宽要求低等优点,它在电子商务、电子政务和电子选举等领域中得到了广泛应用。
微信公众号:计算机与网络安全
ID:Computer-network