1、基于 Misty1 算法的加密软件(Java)的实现摘 要随着计算机网络及通信技术的飞速发展,信息安全成了信息社会急需解决的最重要的问题之一,密码技术是保证信息安全的核心技术。本文用 JAVA 语言开发了一个基于 Misty1 算法的加密软件,该软件能对文件进行加密和解密。在具体实现时,首先分析了 Misty1 算法的基本结构,设计出相应的实施方法,正确实现了该算法,其次,设计了一个图形用户界面,最后对软件进行了测试,验证了实现方法的正确性。关键词:Misty1 ;Java;加密;解密The Implementation of Encryption Software (Java) Based
2、on Misty1 Algorithm AbstractWith the rapid development of computer networks technology and communication technology, Information security has become one of the most important problems urgent to resolve in information society, Cryptographic technology is the core technology to guarantee information s
3、ecurity. In this paper, the software of encryption based on Misty1 algorithm is developed by using JAVA language. It can encrypt and decrypt a file. During the process of implementation, the basic structure of the algorithm is analyzed first and the counterpart method is designed, secondly, a GUI is
4、 designed, finally, the software is tested, the result shows that method of implementation is right.Key words: Misty1; Java ; Encryption; Decrypt目 录论文总页数:24 页1 引言 .11.1 课题背景 .11.2 国内外研究现状 .11.3 本课题研究的意义 .21.4 本课题的研究方法 .32 MISTY1 算法描述 .32.1 秘钥产生部分 .32.2 数据随机化部分 .42.3 函数描述 .42.3.1 FI 函数 .42.3.2 FO 函数
5、.52.3.3 FL 函数 .72.3.4 FL-1函数 .83 MISTY1 加密软件的设计与实现 .93.1 工作环境介绍 .93.2 JAVA 及程序编辑工具介绍 .93.2.1 Java 介绍 .93.2.2 程序编辑工具介绍 .103.3 MISTY1 算法应用于文件加密的分析 .123.4 MISTY1 算法的实现 .133.4.1 加 密 .133.4.2 解密 .153.5 设计流程图、图形界面及事件处理 .183.5.1 加密/解密流程图 .183.5.2 图形界面 .183.5.3 处理按钮事件 .204 程序演示 .214.1 程序演示 .214.2 结果及存 在的问题
6、.21结 论 .22参考文献 .22致 谢 .23声 明 .24第 1 页 共 24 页1 引言1.1 课题背景现代密码学是一门迅速发展的应用科学。随着因特网的迅速普及,人们依靠它传送大量的信息,但是这些信息在网络上的传输都是公开的。因此,对于关系到个人利益的信息必须经过加密之后才可以在网上传送,这将离不开现代密码技术。Misty1 算法是在 1996 年公布的,它是一个分组密码算法,密钥长度是 128位,明文长度是 64 位。它是由在三菱工作的 Eisaku Takeda 提交给NESSIE。MISTY1 可以在资源紧张的环境下实现。整个算法是由递归等组成,每一个层次的结构又一稳妥的 Fei
7、stel 结构。MISTY1 是一迭代密码可以迭代超过8 轮,或者更普遍,迭代 4 回。它用 128 位密钥对 64 位数据进行不确定轮回的加密。它采用了两个 S -盒,一个 7 7 S-盒, s7 ,一个 9 9 S-盒,s9。它取得了良好的良好的阻力线和鉴别攻击,而且还使能实行以相对较少的逻辑组件中执行函数的程度相对较低。1.2 国内外研究现状随着我国对计算机的普及,计算机和通信技术已经在我国得到了广泛发展及应用,从而使我们对信息的安全存储、安全处理和安全传输的需要越来越迫切。特别在 Internet 的应用中,以及个人通信、个人电子身份证、办公自动化,电子邮件、电子自动转帐支付系统和自动
8、零售业务网的建立与实现,信息的安全保护问题已经显得十分突出,而能够解决这一问题的一个有效手段就是使用现代密码技术。美国早在 1977 年就制定了本国的数据加密标准,即 DES。随着 DES 的出现,人们对分组密码展开了深入的研究和讨论,已有大量的分组密码,如 DES 的各种变形、IDEA 算法、SAFER 系列算法、RC 系列算法、Skipjack 算法、FEAL 系列算法、REDOC 系列算法、CAST 系列算法 Khufu, KhafreMMB, 3-WAY, TEA, Blowfish,GOST,SQUARE,MISTY,Rijndael 算法和 AES15 种候选算法(第一轮) ,另有
9、 NESSIE17 种候选算法(第一轮)等。目前分组密码所采用的整体结构可分为 Feistel 结构(例如 CAST256、DEAL、DFC、E2 等)、SP 网络(例如 Safer+、Serpent 等)及其他密码结构(例如 Frog 和 HPC)。加解密相似是 Feistel 型密码的一个实现优点,但它在密码的扩散似乎有些慢,例如需要两轮才能改变输入的每一个比特。SP 的网络结构非常清晰,S 一般被称为混淆层,主要起混淆作用。P 一般被称为扩散层,主要起扩散作用。在明确 S 和 P 的某些密码指标后,设计者能估计 SP 型密码抵第 2 页 共 24 页抗差分密码分析和线性密码分析的能力。S
10、P 网络和 Feistel 网络相比,可以得到更快速的扩散,但是 SP 密码的加/解密通常不相似。目前对分组密码安全的讨论主要包括差分密码分析、线性密码分析和强力攻击等。从理论上讲,差分密码分析和线性密码分析是目前攻击分组密码的最有效的方法,而从实际上说,强力攻击是攻击分组密码最可靠的方法。到目前为止,已有大量文献讨论各种分组密码的安全性,同时推出了譬如截断差分分析、非线性密码分析及插值攻击等多种分析方法。自 AES 候选算法公布以后,国内外许多专家学者都致力于候选算法的安全分析,预计将会推出一些新的攻击方法,这无疑将进一步推动分组密码的发展。1.3 本课题研究的意义标准化是工业社会的一个基本
11、概念,它意味着生产规模化、降低成本、方便维修和更换为了实现非相关团体之间的保密通信,加密体制的标准化是必要的。分组密码由于其固有特点,已经成为标准化进程的首选体制。信息安全的最大特点之一是自主性,因而其核心技术密码学的研究与开发应当是一种本土性的科学。对于有些产品,可以通过外方引进来解决由于技术落后而带来的问题。然而对于安全产品,除非能完全确信它在硬件和软件上没有陷门,否则,贸然使用可能带来不可预测的后果。而要做到软硬件上的确认通常是十分困难的。因此,最明智的方法是依靠自己的力量并汲取现有的先进经验进行研究、设计和开发。为了维护通信安全、打击犯罪,1993 年 4 月,美国政府宣布了一项新的建
12、议,该建议倡导联邦政府和工业界使用新的具有密钥托管功能的联邦加密标准。该建议称为托管加密标准(escrowed encrytion standard,EES),又称C1ipper 建议。其目的是为用户提供更好的安全通信方式,同时允许政府机构在必要情况下进行监听。EES 系统中嵌入了分组加密算法 Sk -ipjack,尽管目前对该系统和算法有许多争议,但从维护国家通信安全的角度,这项建议是有积极意义的。在区域通信系统中,用户较多,他们的地位、作用都不相同,所流通的信息的重要性也不可能完全相同,因此他们要求得到的安全保护等级也不应该相同。由此可见,研究多安全级密码算法非常必要。迭代分组密码(所谓选
13、代分组密码就是以迭代一个简单的轮函数为基础的密码,即通过选择某个较简单的密码变换,在密钥控制下以迭代方式多次利用它进行加密变换,例如 Feistel 型密码就是一种选代密码,是分组密码的典型代表,其数学思想简单而灵巧。特别是在相同的轮函数之下,迭代次数的不同即代表了安全强度的不同级别。在 InternetIntranet 中随着通信量和业务种类的增加,对安全认证和保第 3 页 共 24 页密业务的需求日益迫切。比如,PGP(Pretty Good Privacy)就是一种广泛应用于 Internet 中 E-mail 系统的一种安全技术方案,它也可以用于其他网络中。PGP 的安全业务包括机密性
14、、认证性、不可抵赖性等,其中的机密性就是利用分组密码算法 IDEA 来保证的。另外,分组密码的工作模式可提供一些人们所需要的其他密码技术,比如流密码技术和杂凑技术等。1.4 本课题的研究方法研究相关资料,理解 Misty1 算法的原理,并参考学习使用其他编程语言编写的基于此算法的加密软件的代码。深入学习 Java 编程语言,熟悉其编写程序的流程。然后尝试用 Java 来实现 Misty1 算法,能对数据进行加密和解密。对程序进行测试,对测试结果进行分析研究,进而对程序进行改进,对关键算法代码进行尽可能的优化,最终得到一个在 windows 运行的可以用指定密钥对文件进行 MISTY1 加密并可
15、解密的完整应用程序。2 Misty1 算法描述MISTY1 算法是用 128 位密钥对 64 位数据进行不确定轮回的加密。它在设计时就采用了经证实可以抵抗密码微分分析和线形分析的安全理论,而且它实现了在硬件环境和软件环境下都比较高的加密速度。算法可以分为两部分,一部分是密钥的产生部分,另一部分是数据随机化部分。密钥产生部分根据 128位的输入密钥,产生 128 位的扩展密钥。数据随机化部分输入 64 位的数据进行混合,也就是所谓的加密。2.1 秘钥产生部分K 为输入密钥,K为扩展密钥,K 和 K都是 128 位,扩展密钥是由函数 FI从 K,1,. K,8中产生,并存储在 K,9,., K,1
16、6中。K i代表 K 的一个元素,1i8,每个的长度为 16 位;然后 Ki被认为作输入到 FI,K i+1作为 FI 模的密钥。FI 模的输出是 16 位的 K,i, 1i8,K 9=K1(图 2-1)图2-1 密钥产生第 4 页 共 24 页K=K1K 2K 3K 4K 5K 6K 7K 8for i=1 to 8 doK,i=FI(Ki,Ki+1)K,= K,1K ,2K ,3K ,4K ,5K ,6K ,7K ,82.2 数据随机化部分数据随机化部分使用了两种函数,FO 和 FL,函数 FO 调用函数 FI。密钥扩展部分也使用函数 FI。FI 函数使用两个 S 盒,S7 和 S9。2.
17、3 函数描述2.3.1 FI 函数FI 函数将 16 位输入分为两部分 L0和 R0(图 2-2)图 2-2 FI 函数FI 的输入为:X16= L0R 0KIij=KIijLKI ijRFI 则定义为:R1=S9L0(00 bR 0)L1=R0R2=S7L1 (truncate(R 1)KIijL第 5 页 共 24 页R3=S9L2 (00 bR 2)L3=R2Y16=L3R 3FI 函数程序代码:public int FI(int x,int KI)/FI 函数int L1,L2,L3,R1,R2,R3;R1=S9(x7)L1=xR2=S7L1(R1L2=R1(KIR3=S9L2R2;L
18、3=R2;return (L39)|R3;2.3.2 FO 函数FO 函数将 32 位的输入 X32 分为两个 16 位的 L0和 R0(图 2-3)第 6 页 共 24 页图 2-3 FO 函数FO 的输入为:X32=L0R 0KOi= KOi1KO i2KO i3KO i4KIi= KIi1KI i2KI i3FO 的功能能表现为:for i=1 to 3 do:Rj=FI(Lj-1KO ij,KIij) R j-1Lj=Rj-1Y32=(L3KO i4)R3FO 函数程序代码:public long FO(long x,int y,int z)/FO 函数int i;int KOS= new int4;int KIS= new int3;