安全程序设计方法——密码算法设计与实现黄玉划问题南京航空航天大学信息科学与技术学院导入文件加密解密(显示导入的文件)浏览…选择加密套件(下拉式,默认0)输入加密密钥********确认加密密钥********输入校验密钥******(默认与加密密钥相同)确认校验密钥******(6~256字符)(6~64字符)(可选)点加/解密,可生成一个新文件(有默认目录和名称,可更改)。如果消息校验失败,则输出解密失败信息,不会生成新文件。问题分析——加密我们用EA、DA和AA分别表示加密算法、解密算法和数据认证算法,则加密过程如图所示,可表示为:(1)校验值ICV=AA(P,Ka,IV);(2)密文C=EA(K,IV,P||ICV)加密密钥KIV加密算法Message数据认证算法初始向量明文PIV认证密钥KaIV校验值ICV加密套件密文C加密ICV问题分析——加密(续)上图中,IV一般为计数器,功能是抗重放攻击,对于相同的明文和密钥,每次可以加密成不同的密文。数据认证算法AA的功能是检测密文是否被篡改,保证数据的完整性,即消息的接收者能够验证在传送过程中消息没有被修改,入侵者不能用假消息代替合法消息。认证密钥Ka与加密密钥K可相同,也可不相同。问题分析——解密解密过程根据加密套件选择相应的解密算法,如图所示,可表示为:(1)P||ICV=DA(K,IV,C);(2)认证码MAC=AA(P,Ka,IV);(3)MAC=ICV?IV认证密钥Ka加密认套件证认证码明文算MAC比密文CP法较校验值MAC=ICV?ICV加密ICV解密密钥K解密算法密码算法选择(1)加密算法(流密码算法、分组密码算法、公钥密码算法)实现保密性;(2)数据认证算法(分组密码算法的认证模式、CRC、单向Hash函数、数字签名算法)保证完整性(消息真实性)。密码算法具体选用1分组密码算法:AES、SHACAL2、DES、IDEA、MISTY1、Camellia、RC62分组密码模式:CBC+PXOR(或CRC)、ECB(或CTR或OFB)+CBC-MAC、OCB、PMAC、RMAC、XCBC3流密码算法和PRNG(与CBC-MAC结合):RC4、SEAL、A5、ANSIX9.17(基于3DES)、G-SHA-14CRC-325单向Hash函数(备用):SHA1、SHA256、Whirlpool、RIPEMD160、SHA384、SHA512、HMAC、UMAC、T-T-MAC、MD51分组密码算法1.0概述1.1DES(数据加密标准)算法1.2IDEA(国际数据加密算法)1.3AES(Rijndael)算法1.4NESSIE候选分组密码算法1.0分组密码算法概述美国的第一代分组密码算法标准是DES算法,也是一个早期的国际标准;第二代标准是AES算法。欧洲的第一代分组密码算法标准是IDEA算法,新标准是日本人EisakuTakeda设计的MISTY1算法、ShihoMoriai和MitsuruMatsui设计的Camellia算法、以及法国人HelenaHandschuh和DavidNaccache设计的SHACAL2算法。日本在分组密码算法领域的研究非常活跃,向NESSIE提交了5个分组密码算法,是递交数量最多的国家。Camellia算法也是日本的分组密码算法标准,据说某些性能超过了AES算法。第三代移动通信系统3GPP的标准加密算法KASUMI是MISTY1算法的变种。巴西在分组密码算法领域的研究也比较活跃,向NESSIE提交了3个分组密码算法,其中,PauloS.L.M.Barreto和比利时人VincentRijmen合作设计的Khazad算法是入围欧洲决赛的算法。在美国和欧洲新标准征集过程中,俄罗斯、加拿大、澳大利亚和韩国也提交了几个分组密码算法。国内科研人员提出了几个分组密码算法,性能还不错。1.1DES算法——有陷门?DES的半公开性:S盒的设计原理至今未公布,可能隐含有陷门(Hiddentrapdoors)。有趣的是,DES算法是由IBM公司设计的;当时的美国国家标准局(NSA)修改了S-盒设计,以确保IBM没有在算法中嵌入陷门,因为NSA没有理由相信IBM的研究成果,而他们不能绝对确定DES算法没有陷门,如果有陷门,将是他们失职,所以只好修改S-盒;而人们又怀疑NSA在DES算法中强加了弱点。1.2IDEA(国际数据加密算法)IDEA算法是欧洲的第一代分组密码算法标准,是由我国旅欧学者来学嘉和他的导师JamesMassey设计的,也是PGP的标准之一。该算法的设计原则是“来自于3个不同代数群的混合运算”,即异或、模216加、模216+1乘,这就使得IDEA算法易于软硬件实现。在代数结构上,IDEA算法也不是一个群。该算法的软件实现速度是DES算法的2倍。BruceSchneier认为,在早期的分组密码算法中,IDEA算法是最好和最安全的。1.3AES(Rijndael)算法DES算法的安全强度越来越满足不了技术发展的需要。为此,美国NIST于1997年开始制定AES(高级加密标准)算法以满足新时代的信息安全需求。1999年,NIST宣布已从15个候选算法中选出5个较好的算法:MARS,RC6,Rijndael,Serpent,Twofish。2000年底,NIST最终确定采纳Rijndael算法作为AES算法。AES算法是由比利时的JoanDaemen和VincentRijmen设计的,经过全世界密码学者3年多的密集评估,被认为是安全的。由于评估过程公开,AES算法会有陷门的可能性很小。1.3AES(高级加密标准)算法——设计思路通常,分组密码算法的结构是Feistel结构,不过AES算法使用了一种称为宽轨迹策略(WTS)的方法。该算法有3条设计准则:①抗所有已知的攻击;②在多个平台上快速简洁地实现;③设计简单。其分组长度为128位(Rijndael算法本身的分组长度可以是128、192或256位),密钥长度可以是128、192或256位,分别记为AES-128、AES-192和AES-256。对于AES-128,迭代轮数r=10+1;对于AES-192,r=12+1;对于AES-256,r=14+1。AES算法过程可分为轮密钥编排和加密过程两个独立的部分。1.3AES算法——加密全过程加密全过程包括:轮密钥编排(扩展);轮密钥异或,前(r-1)轮迭代,一个结尾轮。即Rijndael(State,CipherKey){KeyExpansion(CipherKey,ExpandedKey);AddRoundKey(State,ExpandedKey);for(i=1;ir;i++)Round(State,ExpandedKey+Nb*i);FinalRound(State,ExpandedKey+Nb*Nr);}1.3AES算法——加密流程明文Xr轮迭代密文Y子密钥K0Xi-1字节代换行移位列混合Ki-1XiAES算法框图一轮AES结构图1.3AES算法——加密过程其加密过程可分为三个步骤,用伪码表示为:①将轮密钥RoundKey与明文State异或AddRoundKey(State,RoundKey);②对前r-1轮中的每一轮进行相同的变换Round(State,RoundKey){SubBytes(State);(用S盒对State的字节进行非线性变换)ShiftRow(State);MixColumn(State)(列线性混合);AddRoundKey(State,RoundKey);(轮密钥异或)}③最后一轮变换:FinalRound(State,RoundKey){SubBytes(State);ShiftRow(State)(行循环移位);AddRoundKey(State,RoundKey);}最后的State即为密文。解密过程把加密过程完全反过来即可。1.4NESSIE候选分组密码算法共有17个分组密码算法参与NESSIE评选。2003年2月NESSIE公布了最终决选结果:过渡型的标准是日本人EisakuTakeda设计的MISTY1算法,普通型的标准是AES算法和日本人ShihoMoriai与MitsuruMatsui设计的Camellia算法,高级型的标准是法国人HelenaHandschuh和DavidNaccache设计的SHACAL2算法。1.4NESSIE分组密码算法(续)MISTY1:MISTY1算法公布6年来得到了广泛的研究,到目前为止尚未发现安全缺陷。该算法的性能很好且密钥编排算法非常快,其主要优点是具有抵抗差分和线性密码分析的能力,其主要缺点是比较复杂。Camellia:Camellia算法在各个平台上的性能与AES相当。SHACAL2:SHACAL2算法基于散列函数SHA-2,其分组长度为32B,密钥长度为64B。RC6:值得一提的是,瑞典人JakobJonsson和美国人BurtKaliski设计的RC6算法性能不错,入围了美国和欧洲分组密码算法评选决赛,最终未中选的原因和知识产权有关。2分组密码模式2.0概述2.1电子码本(ECB)模式2.2密码分组链接(CBC)模式2.3输出反馈(OFB)模式2.4计数器(CTR)模式2.5并行消息认证码(PMAC)模式2.6偏移码本(OCB)模式2.7国产分组密码模式2.0分组密码模式概述分组密码算法本身只定义了将一组明文加密成一组密文的变换,而实际应用中要加密和认证的数据长度远远大于一个分组,这就需要为分组密码算法选择工作模式,避免采用固定格式带来的安全隐患。分组密码模式包括加密模式、认证模式和认证加密模式。认证模式是一种陷门MAC算法。在分组密码模式领域,原来有4种标准工作模式:ECB、CBC、CFB和OFB。美国NIST在制定了AES标准之后,也在征集新的分组密码模式。NIST增加了一种新加密模式CTR和一种认证加密模式CCM(CTRwithCBC-MAC),并推荐了一种新认证模式RMAC。2.0分组密码模式概述(续)IEEE802.15.3型WPAN(无线个域网)、IEEE802.11型WLAN(无线局域网)和IEEE802.16型WMAN(无线城域网)已经采用CCM模式,HP支持CBC-MAC模式。埃及人AhmedA.Belal和MoezA.Abdel-Gawad提交了一个有特色的模式(2DEM),适用于图象加密。CBC模式有很多变体,实质上只是增加了一些进程,例如XCBC和RMAC模式,其综合性能和CBC模式差不多。2.0分组密码模式概述(续)在现有的认证模式中,PMAC模式是一种并行认证模式,有其思想特色,其他认证模式一般未超出CBC-MAC模式的思想范畴;不过,PMAC模式的串行速度比CBC-MAC模式慢。另外,P.Rogaway等提出的OCB模式是同时实现加密和认证的并行模式,也有其思想特色。国内科研人员也提出了一些分组密码模式。分组密码模式一般有3个输入参数:明文P、密钥K和初值IV。IV一般为计数器,或为不重复的伪随机数,功能是抗重放攻击。2.0分组密码模式概述(续)符号:1)C=EK(P)表示用密钥K把一组明文P加密成一组密文C;2)P=DK(C)表示用密钥K把密文C加解成明文P;3)分组长度为T;4)输出MAC长度为m比特;5)明文分组个数为n;6)||表示串联;7)⊕表示按位逻辑异或;8)MSBm(Y)表示截取Y的前m比特;9)最后一组明文长度为τ;10)Pi表示明文P的第i个分组;11)P[i]表示明文P的第i个字节。2.1电子码本(ECB)模式ECB模式是个加密模式,是最简单的模式,它将明文数据划分为一个个的分组,各个分组独立地直接采用基本分组密码算法进行加解密,不必按次序进行,可并行处理,适合于加密随机存取的文件,如数据库。可见ECB模式实际上没有使用模式,