- 1 -
中国科技论文在线
一种基于对称加密算法的口令加密方案
黄炳洁*
作者简介:黄炳洁(1986-),女,研究生在读,主要研究方向:信息安全
(中国矿业大学计算机学院,江苏 徐州 221116)
摘要:网络提供的信息共享在给我们带来巨大效益的同时,随之而来的安全问题也日益突出。
为了保证信息传输中文件的安全性,本文提出一种基于口令加密技术的加密方案,在保证文
件的机密性的同时也保证了密钥的安全性;文中分析了 Blowfish 对称加密算法系统,将口
令与加密算法结合确保了密钥的安全。在此基础上,本文描述了一种创建自提取可执行加密
文件的方法,实现了文件加密的独立进行,并给出了其中主要函数的实现。
关键词:数据安全及计算机安全;口令加密;自提取可执行文件
中图分类号:TP393
A Password-based Encryption Scheme with Symmetric Key
Cryptography
Huang Bingjie
(School of Computer,China University of Mining and Technology,JiangSu XuZhou 221116)
Abstract: Information sharing provided by network brought us great benefits, but in the same time, the
attendant security issues are also increasingly prominently. This paper proposes a scheme to encrypt
the key by using password-based encryption technology in order to ensure the safety of the files in
information transmission, which ensuring the confidentiality of documents while also ensuring the
security of the keys; and Blowfish symmetric encryption algorithm system is analyzed in this paper, the
combination of the password and encryption algorithms ensures the security of the keys,On this basis, a
method of creating self-extracting executable encryption file is described, which makes the
password-based encryption independently, and the main method of implementation are given.
Keywords:DataSecurityandComputerSecurity;Password-based Encryption;Self-extracting Executable
File
0 引言
随着信息科技的普及以及互联网的广泛应用,电脑的使用已与现代生活密不可分了。人
们越依赖电脑,越沉溺于网络所带来的效率与便利,如何确保资料的安全,传输的可靠性就
变得越来越重要。随着信息化建设的普及与深入,涉密文档大量采用电子化手段存储、交换
和管理。然而,涉密文档电子化应用和管理中存在突出的安全问题,如何在重要文档应用和
交换中有效防止泄密,成为信息化技术应用的亟待解决的关键问题[1]。保证涉密文档和敏感
数据安全的关键是数据加密技术。
目前,已经有很多加密文件系统被广泛的应用,对涉密文档都实施了不同程度的保护.
密钥管理是安全系统主要考虑的问题。保护密钥的一个办法是把它保存在软盘或 U 盘中,
只有在文件加解密时才使用它;另一个办法是使用智能卡存储密钥,通过连接在计算机上的
特殊读取装置进行加解密操作。用软盘、U 盘或智能卡保存密钥有一些不方便之处,需要外
在的物理媒介来保存密钥[2]。在保证安全性的前提下,较简便的方法是将密钥保存在计算机
文件系统中,使用基于口令的加密(PBE)技术对密钥加密,然后用本地文件系统的权限加
以保护。这个口令必须非常强大,使任何人都无法破解。这样攻击者必须先攻入密钥所在的
- 2 -
中国科技论文在线
计算机,然后才能破解密钥
1 密码体制
非对称密码体制的算法是公开的,所以它的保密性不是依赖于加密体制和算法,而是依
赖于密钥。非对称密码系统从根本上克服了传统密码体制的困难,解决了密钥分配和消息认
证等问题,它可以实现保密通信、数字签名以及认证。虽然非对称密码体制安全性高,保密
性强,弥补了对称密钥密码体制自身固有的缺陷,但还是有其不可避免的缺点:
(1)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。
(2)密钥长度太大,为了保证安全性,密钥的位数一直在增加,使得运算代价很高,尤
其是其加解密速度大为降低,较对称密码算法慢几个数量级,且随着分解大数方法的进步及
完善、计算机速度的提高以及计算机网络的发展(可以使用成千上万台机器同时进行大数分
解),这个长度还在增加。
(3)加解密速度慢,由于进行的都是大数计算,无论是软件还是硬件实现,速度一直是
非对称密码算法的缺陷。
对称密码算法有两种类型:分组密码( ;L"IM> IK$NO()和流密码( P&(’+Q, IK$NO()。
分组密码一次对一个数据块通常是 64 位,有些算法是 128 位进行加密。流密码对数据流进
行加密,一次一位或一个字节。分组密码可以用来创建流密码,反之亦然。如果对单条信息
加密,应使用分组密码。如果是一个稳定的信息流,如套接字 Socket,最好使用流密码。
对称密码算法的强度主要由密钥的长度决定。密钥越长,破解难度越大。密钥长度按位
表示,通常从 40 位到 448 位不等。要破解一段加密过的信息,攻击者需要通过穷举法才能
得到密钥。加密算法使用的所有可能的密钥集合叫“ 密钥空间 key space”。对于一个 40
位的密钥,所有可能的密钥有 240 个,密钥每增加一位,安全性就提高一倍[3]。
2 基于口令的加密
对称加密可以运用在许多领域中,它比非对称加密要快,主要适合于大量数据转换的情
况,如文件加密、网络加密、数据库加密等。对称加密的主要缺点是密钥对称性,加密和解
密都使用相同的密钥,因此对称加密的密钥本身也要秘密保存[4]。基于口令的加密使用一个
口令对密钥进行加密,用户自己掌握密钥会比采用其它物理媒介更为安全。
Blowfish 对称加密算法系统分析
Blowfish 算法是一个对称的分组加密密码算法,执行速度很快,在 32 位的微处理器上,
它加密一个字节数据只需要 18 个时钟周期。它还是一种非常紧凑的算法,可以在小于 5KB
的内存上运行。而且,Blowfish 结构简单、易于实现[5]。
Blowfish 是一个 64 位分组及可变密钥长度的分组密码算法,算法由两部分组成:密钥
扩展和数据加密。密钥扩展把长度可达到 448 位的密钥转变成总共 4168 字节的几个子密钥。
数据加密由一个简单函数迭代 16 轮,每一轮由密钥相关的置换,密钥相关和数据相关的代
替组成。所有的运算都是 32 位字的加法和异或,仅有的另一个运算是每轮的四个查表。
Blowfish 使用了大量的子密钥,这些密钥必须在加密及解密之前进行预计算[6]。
初始化子密钥和 S 盒
Blowfish 算法的密钥长度可在 32 bit 到 448 bit 之间变化,即字长若为 32 bit,密钥长度可
为 1Byte 到 14Byte。这个密钥用来产生 18 个 32 bit 的子密钥和 4 个 8×32 的 S 盒,这些 S 盒
- 3 -
中国科技论文在线
总共有 1024 个 32 bit 项,加上子密钥一共是 1042 ×32 bit 或 4168Byte。
Blowfish 算法的密钥可表示为数组 K:
K1, K2, K3 , K4 , ⋯ , Kj, 1 ≤ j ≤ 14
子密钥可表示为数组 P:
P1 , P2 , P3 , P4 , ⋯ , P18
4 个 S 盒,每个有 256 项,每项 32 bit,可表示为:
S[1,0], S[1,1], S[1,2], S[1,3], ⋯ , S[1,255]
S[2,0], S[2,1], S[2,2], S[2,3], ⋯ , S[2,255]
S[3,0], S[3,1], S[3,2], S[3,3], ⋯ , S[3,255]
S[4,0], S[4,1], S[4,2], S[4,3], ⋯ , S[4,255]
依次初始化子密钥数组 P 和 4 个 S 盒各项,方法是将常数π的小数部分按 32 位依次分配
给这些项。对应写成十六进制为:
P1 = 0x243F6A88, P2 = 0x85A308D3, ⋯ ,P18 = 0x8979FB1B,
S[1,0] = 0xD1310BA6,S[1,1] = 0x98DFB5AC, ⋯ , S[4,255] = 0x3AC372E6
将 P 和 K 按位异或,并重复使用 K。对于最大长度的密钥,有:
P1 = P1⊕ K1 , P2 = P2⊕ K2 , ⋯ , P14 = P14⊕ K14 ,
P15= P15⊕ K1 , ⋯ P18 = P18⊕ K4
用当前的 P 和 S 加密 64 bit 的全 0 数据块,用输出结果替换 P1 和 P2。用当前的 P 和 S
加密上一步的输出结果 P1 和 P2 ,用这次的输出结果替换 P3 和 P4。依此类推,直到 P 和 S 全
部被更新为止,每一步所使用的 Blowfish 算法都在不断变化。整个初始化 P 和 S 的过程可以
描述如下:
P1 , P2 = Ep,s[ 0 ], P3 , P4 = Ep,s[ P1 ] [ P2 ]; ……;
P15 , P16 = Ep,s[ P13 ] [ P14 ],
P17 , P18 = Ep,s[ P15 ] [ P16 ],
S[1,0], S[1,1] = Ep,s[ P17 ] [ P18 ], ⋯ ,
S[4,254], S[4,255] = Ep,s[ S4,252 ] [S4,253 ]
其中 Ep,s[ Y ]表示使用 P 和 S 时 Blowfish 算法加密 Y 的结果。产生最终的 P 和 S 需要
执行 521 次 Blowfish 算法的加密过程,所以算法不太适合于密钥经常改动的应用。此外,为了
快速执行,每次使用算法时都要把 P 和 S 重算一遍,不如把 P 和 S 存起来, 只需要大约 4kByte
的存储空间.
Blowfish 算法加密和解密过程
加密所使用的明文被分成两半, 即 LE0 和 RE0 , 各为 32 bit。用变量 LEi 和 REi 来表示
第 i 轮迭代后数据的左半部分和右半部分。加密过程如图 所示。设
X=X1X2……X64
是待加密的 64 位明文,其中 Xi {0,1},1≤i≤64。加密算法可用伪代码表示如下:
for i = 1 to 16 do
REi = LEi-1⊕ Pi;
LEi = F [REi ] ⊕ REi-1;
LE17 = RE16⊕ P18;
RE17 = LE16⊕ P17;
得到的密文即变量 LE17 和 RE17。函数 F 的 32 位输入分成 4 Byte,记为 a, b, c 和 d。F
- 4 -
中国科技论文在线
可表示为:
F[ a, b, c, d ] = ( ( S[1,a]+ S[2,b] ) ⊕ S[3,c] ) + S[4,d]
这里的“+”为模 232 加, ⊕表示按位异或。解密过程很容易从加密算法推导出来。与
加密过程对应,密文被分成 LD0 和 RD0 ,各为 32 bit。用变量 LDi 和 RDi 来表示第 i 轮迭代
后数据的左半部分和右半部分。Blowfish 算法和其他大多数分组密码一样也是把子密钥倒过
来使用,与其他算法不同的是加密和解密过程顺序是一样的,而不是倒过来。解密算法可用伪
代码表示如下:
for i = 1 to 16 do
RD i = LD i-1⊕ P19-i;
LD i = F [RD i ] ⊕ RD i-1;
LD17 = RD16⊕ P1;
RD17 = LD16⊕ P2;
解密得到的明文即变量 LD17 和 RD17。
Blowfish 算法是传统加密算法中非常难对付的一个。Blowfish 算法的 S 盒是跟密钥有关
的,不仅如此,其他一些算法,如 RC5,每轮迭代执行的函数是与数据相关的,而 Blowfish 算法的
子密钥和 S 盒都是由 Blowfish 算法本身生成的。对它的密钥分析也异常困难[7]。
3 文件自解密的实现
文件的自解密实现了解密的独立,使用户操作起来更加简捷方便。本文中将经过加密的
源文件附加到一个 PE 可执行文件((Encrypted).exe)上,然后通过运行这个可执行文件实现文
件的自解密。
PE 可执行文件格式
PE(Portable Executable) 文件格式是 32 位 Windows 操作系统引入的可执行文件格式。
所有 win32 执行体(除了 Vxd 和 16 位的 Dll) 都使用 PE 文件格式,包括 NT 的内核模式驱
动程序( kernel mode drivers) [8]。在 PE 文件中,可执行代码、已初始化的数据、文件资源和
重定位信息等数据被按照属性的不同而放到不同的节中,掌握了 PE 文件的结构就可以根据
需要来实现对 PE 文件数据的修改。PE 文件格式是以自顶而下的顺序解释的[9]。
PE 的基本结构如表 所示:
表1 PE的基本结构
Tab. 1 THE BASIC STRUCTURE OF PE
DOS MZ Header
( IMAGE_DOS_HEADER )
DOS Stub
PE Signature
PE File Header
( IMAGE_FILE_HEADER)
PE HEADER
( IMAGE_NT_HEADER )
PE Optional Header
( IMAGE_OPTIONAL_HEADER)
Sections table
IMAGF_SECTION_HEADER
Section 1
Section 2
Section ⋯
SectionN
上图便是 PE 文件的基本结构。(注意:DOS MZ Header 和部分 PE 头的大小是不变的;
- 5 -
中国科技论文在线
DOS Stub 部分的大小是可变的。)
创建自提取的可执行加密文件
当操作系统正在执行一个可执行文件时,它根据 PE 的头而知道如何执行它,所以 PE
的头是一个很大的表格,其中包含了许多 PE 文件装载器要用到的重要域。在 PE 头中包含
了 PE 文件标识(Signature)、PE 文件头(File header)和 PE 可选头(Optional header)三部分。
因为不允许修改可执行本身,所以我们以文件的末尾为出发点[10]。
为了使附加方法和分离方法使用相同的方式,我们需要设置格式:
表 2 设置文件属性
FILE ATTRIBUTE
常数大小
可执行
文件长度 X
文件名
文件内容
文件名长度指针 X
签名 X
使用此格式,我们不会限制在文件名或者文件内容的特定大小中。
很明显,当我们从合并后的文件(可执行程序+附后)分离文件时,文件的结尾是新的
文件结尾,所以结尾的大小是固定并将为我们提供有关所附文件的信息,这一点是非常重要
的。上表中固定的部分是“文件名长度指针”和“签名”部分。
为了执行这样的任务,我们需要两个基本方法:
·attachFile --附加文件,以自我提取可执行文件。
·detachFile --获取附加文件,并写入到磁盘。
另外可以使上述方法方便实现的方法:
·checkSignature -检查文件是否有文件附加于它。
利用上述方法,可以容易的创建一个自提取可执行文件。
主要方法的实现
attachFile()方法的实现
该方法用于实现加密文件的附加,将文件名、文件名长度和文件内容附加到可执行文件
中,其过程如图 1 所示:
图 1 attachFile()方法附加文件过程
The Procedure of attachfile()
- 6 -
中国科技论文在线
detachFile()方法的实现
该方法用来获取附加文件,并写入到磁盘。将分离文件的文件名赋予 detachedFile 参数
输出。其程序流程图如图 2 所示
图 2 detachFile()方法分离文件过程
The procedure of detachFile()
checkSignature()方法的实现
为了创建一个可执行的附加和分离我们需要 checkSignature()方法的帮助。用这种方法我
们可以确定运作的模式。如果我们已附加文件那么我们在分离模式,如果没有附加文件那么
我们在附加模式。
4 结论
针对信息在网络传输中面临的种种安全威胁,世界各国的专家学者在不断地研究新的加
密算法来保障信息安全。而建立安全性能好的密码系统的主要难度之一是密钥管理,本文提
出了一个基于口令的加密方案,提高了加密过程中密钥保护的安全性。工具还实现了自提取
可执行文件的创建,使得加密文件的解密可以独立的完成。
[参考文献] (References)
[1]冯登国.国内外密码学研究现状及发展趋势[J].通信学报.:18-26
[2] 武新华,安向东,苏雅.加解密全方位学习[M].北京:中国铁道出版社,
[3] 吕兴凤,姜誉.计算机密码学中的加密技术研究进展[J].专题研究. :29-32
[4] 胡志远.口令破解与加密技术[M].北京:机械工业出版社,
[5] Russell K. Meyers , Ahmed H. Desoky, “An Implementation of the Blowfish Cryptosystem”, In Proceedings
of Signal Processing and Information Technology, Proc. IEEE, pp. 346-351, 2008.
[6] Allam Mousa, “Data Encryption Performance Based on Blowfish”, In Proceedings of Digital Object
Identifier ,47th International Symposium ,Proc. IEEE,-134,2005
[7] 钟黔川, 朱清新. Blowfish 密码系统分析[J].计算机应用. 2007,24(12): 2940-2944
[8] 郭小晋,沈春林.32 位 Windows 系统下 PE 文件的软件加密解密方法[J].计算机与数字工
程.2006,34(3):51-53
[9] Mohab U. AbdelHameed1, Mohamed A. Sobh2 and Ayman M. Bahaa Eldin, “Portable Executable Automatic
Protection using Dynamic Infection and Code Redirection”, In “Proceedings of Computer Engineering &
Systems, ,-507, 2009.
[10] 张仁斌,李钢,侯整风.计算机病毒与反病毒技术[M].北京:清华大学出版社,