欢迎来到学术参考网

基于IDEA算法的电子邮件加密与解密的实现

发布时间:2015-07-11 10:01
摘 要 本文结合邮件系统的工作原理,分析了IDEA数据加密算法基本原理,描述了VC编程环境下利用IDEA算法实现电子邮件加密与解密的方法,从而保障了邮件传输的安全性。经过测试证明,该方法达到了邮件安全传输的预期效果。
关键字 IDEA;电子邮件;加密;解密

1 引言

目前电子邮件是Internet上主要的信息传输手段,也是电子商务应用的主要途径之一。电子邮件在网络上以“存储转发”方式传播,一封电子邮件在传送过程中可能要经过若干个中间主机的转发,途中所留下的拷贝,能被非法用户阅读、截获或者篡改。目前Internet中邮件系统大多实现了邮件收发、管理功能,却无法保障电子邮件安全性、完整性、抗抵赖性、不可否认性等问题。提高邮件系统安全性的主要措施之一是对邮件内容加密,这样邮件即使被他人截收,显示的也是一些杂乱的不能读懂的乱码,但合法用户通过拥有的密钥对邮件解密而正确地阅读邮件,这样就达到了数据保密的功能,大大提高了邮件系统的安全性。

2 邮件系统工作原理

2.1 邮件系统的构成

一个电子邮件系统包含用户代理,传输代理和协议三大部分。用户代理是一个用户端发信和收信程序;传输代理负责信件交换和传输,又可将其细分为邮件发送传输代理和邮件接收传输代理;协议,包括用于发送邮件的SMTP和用于接收邮件的POP3。[1]

2.2 电子邮件的传输过程

(1)发送方邮件管理程序将邮件进行拆分并封装成一个或多个TCP邮包。TCP邮包按照IP协议封装成IP包,并附上目的计算机的IP地址。
(2)根据目的IP地址确定与哪一台计算机相连,若连接成功,便将IP邮包送上网络。
(3)IP邮包在传递过程中,经过路由选择,通过某些主机的存储转发,最后到达接收邮件的目的计算机。
(4)在接收端,将IP邮包收集起来,按照正确的次序将其复原成初始的邮件。

3 网络信息加密技术

计算机网络安全问题所涉及的内容非常广泛,ISO7498-2提出了五种计算机安全防护措施:认证、访问控制、数据保密、数据完整性、防止否认,而数据加密是实现所有安全服务的基础。 目前密码体制主要有两大类:一类是对称密码体制,包括序列密码和分组密码,如DES、IDEA算法;另一类是非对称密码体制,包括双钥加密模型和双钥认证模型,如RSA算法。两种密码体制各有优缺点,对称密码体制,密钥管理过于复杂,难以解决对数签名验证的问题,而非对称密码体制,加、解密速度慢,算法实现效率低。
本文结合IDEA算法,描述了VC编程环境下邮件加密和解密的实现过程,保障了邮件传输的安全性。

4 IDEA算法简介

IDEA算法是对称密码体制中的一种基于数据块的分组加密算法,整个算法包含子密钥产生、数据加密过程、数据解密过程三部分。该算法规定明文与密文块均为64b,密钥长度为128b,加密与解密相同,只是密钥各异,其基本工作原理如图1所示。

图1 IDEA工作原理

4.1 数据加密过程
将明文中每64b数据块分成X1,X2,X3和X4四个子块,每一子块16b,令这4个子块作为第一轮迭代的输入,全部共8轮迭代。每轮迭代都是4个子块彼此间及16b的子密钥间进行异或运算、mod 216加法运算、mod(216+1)乘法运算,任何一轮迭代第3和第4个子块互换。最后与4个16b的子密钥进行输出变换,输出Y1~ Y4四个16b密文数据。IDEA算法结构如图2所示。
图2 IDEA算法结构
4.2 IDEA子密钥产生
IDEA算法经过8轮迭代,每轮需要6个子密钥,最后一轮还需4个子密钥,因此共需52个16b子密钥块。输入128b密钥k=k1k2…k128,将其分成8个子密钥,每个子密钥16b,依次为:Z1(1)=k1k2…k16、Z2(1)=k17k18…k32、…、Z6(1)=k81k82…k96、Z1(2)=k97k98…k112、Z2(2)=k113k114…k128; Zi(n)表示第n轮迭代中的第i个子密钥。Z1(1) ~Z6(1)作为第一轮的6个子密钥,剩下的Z1(2) 、Z2(2) 作为第二轮的子密钥。再将k向左旋转移位25b得k′=k26k27…k128k1k2…k25,同样将其分成8个子密钥,前4个Z3(2)、Z4(2)、Z5(2)、Z6(2)正好是第二轮的子密钥,后4个作为第三轮的子密钥。继续向左旋转移位25b,直到52个子密钥生成完毕。
4.3 数据解密过程
算法解密过程与加密过程完全一样,只是解密子密钥是由加密子密钥加法逆或乘法逆构成的,且两者一一对应。如解密运算的第一轮用到的6个子密钥依次是:(Z1(9))-1、-Z2(9)、-Z3(9)、(Z4(9))-1、Z5(8)、Z6(8) 。其中-Zi表示Zi mod 216的加法逆元,即-Zi+Zi≡0 mod 216;Zi-1表示Zi mod (216+1)的乘法逆元,即ZiZi-1≡1 mod (216+1),其它依此类推。

5 IDEA算法抽象类的设计

将IDEA算法抽象成一个C++类CIdea,该类可以直接被应用在需要应用加密技术的软件中。用户可以调用该类提供的接口函数来实现加密/解密功能。下面是CIdea类的文本描述,相应接口函数的实现可参考文献4。
class CIdea
{private:
bit8 UserKey[16]; //加密、解密密钥
bit16 EnSubKeys[52]; //加密子密钥
bit16 DeSubKeys[52];
void en_key_idea(bit8 *userkey,bit16 *Z);
void cipher_idea(bit8 *bu1,bit8 *bu2,bit16 *Z);
//加密解密64b数据
public:
void EnString(unsigned char*,unsigned char*);
//加密字符串方法
void DeString(unsigned char*,unsigned char*);
int IdeaEncrypt(char *f1,char *f2); //加密方法
int IdeaDecrypt(char *f1,char *f2);
bit16 inv(bit16 x); //乘法求逆
void SetKey(unsigned char *);//设置密钥
};

6 基于IDEA算法的邮件加密和解密实现过程

6.1 邮件加密实现

邮件正文加密,首先定义CIdea类对象,调用SetKey()函数提供对称密钥,然后EnString()调用IDEA算法实现邮件加密。该函数首先根据加密密钥UserKey调用en_key_idea()生成加密子密钥块,然后打开邮件正文,获得邮件正文的长度,并用空字符将其补成8倍数的长度,然后将其按每64b依次分块读出并调用cipher_idea()函数加密每个64b组,并将加密后的字符串存储,直到邮件正文字符串全部加密完毕,跳出循环。
在电子邮件负责传输的类SMTP中加密响应函数的部分关键代码
void OnCheckEncrypt()
{ CIdea idea; CString temp;
int len=gth();//获得邮件正文长度
if(ck())
{ char*pszKey=fer(MAX_MAIL_LENGTH);
char*pszBody=fer(MAX_MAIL_LENGTH);
char*pszTemp=fer(MAX_MAIL_LENGTH);
pszTemp[len+1]=‘“0‘;
((unsigned char*) pszKey);//提供对称密钥
ng((unsigned char*) pszBody,(unsigned char*) pszTemp);
m_strAfterEncrypt=temp+"“0";//保存加密后字符串
MessageBox("邮件已被成功加密!");
GetDlgItem(IDC_EDIT_KEY) -EnableWindow (FALSE);
}
else {GetDlgItem(IDC_EDIT_KEY) -EnableWindow (TRUE);}
}

6.2 邮件解密实现过程

解密过程与加密过程基本类似,其具体实现是:先定义CIdea类对象,调用SetKey()设置对称解密密钥,然后DeString()调用IDEA算法进行邮件解密。该函数首先根据解密密钥并调用函数de_key_idea()生成解密子密钥组。双击已接收的对应邮件主题,打开要解密的邮件密文,接着进入一个循环过程:读取要解密的字符串,用空字符将密文补成8倍数的长度,然后将其按每64b分组,并调用cipher_idea()函数解密每个64b分组,并将解密后的字符串存储。直到全部分组解密完毕,跳出循环。
在电子邮件负责接收的类POP3中解密响应函数的部分代码
void OnButtonDecrypt()
{CIdea idea;CString m_strBody,temp;
//获取密钥和邮件正文,定义并初始化指向密钥、邮件正文和存放密文空间的指针
((unsigned char *)pszKey);
ng((unsigned char *)pszBody,(unsigned char *)pszTemp);
eBuffer();
eBuffer();eBuffer();
m_strBody=temp+"“0";MessageBox("信件已被成功解密!");
();
dowText(m_strBody);}
本系统除了基于IDEA算法的邮件加密、解密模块外,还集成了邮件发送模块和邮件接收模块,分别通过为smtp协议提供支持的CSMTP类,为pop3协议提供支持的CPOP类,格式化邮件头和邮件体的CMailMessage类来实现。

7 结论与性能评价

我们通过选用IMail Server 构建一台邮件服务器,在内部网和Internet上运行上述邮件加密程序对邮件进行加密,其测试结果如图3所示。
图3 邮件加密
点击发送邮件按钮将加密后的邮件发送至邮件服务器。运行邮件解密程序,点击接收邮件按钮接收邮件,然后双击邮件主题,用户看到的是一堆乱码,如图4所示。

输入16位对称解密密钥,运行邮件解密程序对接收的邮件解密,可看到上述邮件正文部分显示的乱码又恢复为可识别的字符,如图5所示。非法用户因无法获得正确的密钥而无法正常的阅读邮件。
图5 邮件解密
上述结果表明邮件加密达到了很好的效果。IDEA算法加密速度快,适应于加密带有大量数据的报文,但开放性差,它要求发送者和接收者在安全通信前商定一个密钥,且该密钥必须妥善保管。若所有用户使用相同的密钥,则将失去保密意义;若使用不同的密钥,则n个人之间需要n(n-1)/2个密钥,密钥将呈线性增长,管理困难。作为一种对称加密算法,由于其本身固有缺陷,很难不被穷尽搜索方法攻击。我们将进一步探索把更好的加密技术应用到网络安全中去。

参考文献

[1]叶树华,高志红.网络编程实用教程[M].北京:人民邮电出版社,2006.10
http://
卢开澄.计算机密码学----计算机网络中的数据保密与安全(第三版)[M].北京:清华大学出版社,2003.12
博嘉科技.Visual C++网络编程实作教程[M].北京:北京希望电子出版社,2001.6
张天津,于志平.电子邮件传输中加密与解密的实现[J].计算机工程,2003,29(4)

上一篇:事务存储结构的实现

下一篇:基于多Agent的第三方物流系统协作研究