LINUX环境下的密文聊天系统的设计与实现
摘 要
随着计算机的不断普及和互联网技术在全球领域的高速发展。越来越多的人使用到了聊天程序。聊天程序给人们带来通信便利的同时也存在着一些安全隐患,传统的聊天程序以明文方式传送聊天内容,这样就给一些用心不良的人大开方便之门。本系统正是基于以上原因而设计的加密聊天程序。聊天程序采用服务器/客户端模式。在Linux环境下采用socket套接口编程,服务器程序以创建线程池的方式为每一个客户服务。聊天内容由服务器转发。在聊天程序中加入了对称加密算法DES和非对称加密算法RSA。其基本实现是由服务器端生成RSA的公钥和私钥,由客户端生成DES对称密钥,服务器端传送公钥至客户端加密DES密钥之后回传服务器,服务器再用本地的私钥解密获得DES密钥。此后双方的通信由DES密钥加密后传送,这样既能高效的加密明文又能在信道上安全的传送密钥使得密钥间的共享成为现实。http://www.16sheji8.cn/
关键词:对称加密算法;非对称加密算法;会话密钥;聊天系统
The Design and implementation of encrypted chat system based on Linux
Abstract
Along with Computer becoming more and more popular and Internet technology developing rapidly, a lot of People began to use the IM(chat program). Chat program brings people more convenience, but at the same time, security problem existed. The traditional chat program sends the message by plain text, which open the door for the bad man. This encrypted chat system is right based on the point. The system is in C/S architecture using socket based on Linux. The server program serves each client in the way of establishing thread and is responsible to transfer message. The DES algorithm and RSA algorithm are used to encrypt in this program. The basic principle is that the server generates RSA public key and private key and client generates DES symmetrical secret key. Firstly, the server sends the public key to client, and then client sends it back after encrypting DES secret key. Secondly, the Server uses local private key to decode to obtain the DES private key. After then, the message is sent after encrypted by DES secret key. So the plain text can be encrypted effectively and sent in channel in security.
Key words: symmetry encrypting program; unsymmetrical encrypting program; conversation key; chat system
目 录
论文总页数:30页
1 引言 1
1.1 课题背景 1
1.2 国内外研究现状 1
1.3 本课题研究的意义 1
2 所采用技术的先进性分析 1
2.1 DES算法 1
2.2 RSA算法 2http://www.16sheji8.cn/
2.3 线程池 2
3 系统需求分析 3
3.1 聊天程序功能分析 3
3.2 加密算法 3
4 系统总体设计和模块划分 3
4.1 系统总体设计 3
4.2 模块划分 4
4.2.1 DES算法模块 4
4.2.2 RSA算法模块 6
4.2.3 聊天程序模块 7
5 系统实现 9
5.1 DES核心代码 9
5.2 RSA核心代码 12
5.3 WEB注册页面核心代码 15
5.4 服务器端核心代码 18
5.5 客户端核心代码 21
结 论 25
参考文献 25
致 谢 26
声 明 27
附 录 28
1 引言
1.1 课题背景
自从TCP/IP协议族成为计算机通信的主要网络协议,基于该协议族开发的网络应用程序数不胜数。聊天程序便是其中之一。聊天程序使人们可以通过互联网及时传送消息,让远在千里之外的人们畅所欲言。传统的聊天程序在给人们带来方便的同时也逐渐暴露出一些安全隐患。前不久网上登出了这样一则新闻:上海某银行的白领丽人,因为聊天程序受监控被同事知道了个人隐私,被迫辞去了月薪三万余元的工作。于是聊天程序的安全性受到了人们的广泛关注。
1.2 国内外研究现状
从国内外对聊天程序的加密情况看,大多数处理方式是在现有的聊天程序基础之上添加相应的加密插件来实现加密。比较典型的例子是Linux平台下的多集成聊天程序Gaim,其中集成了ICQ、MSN、QQ等现今主流国内外聊天程序。普遍的聊天程序没有经过加密而直接传输聊天明文。Gaim通过添加插件程序对未加密的聊天程序进行加密传输,通信双方需要只要同时安装加密插件就可以顺利的对聊天内容进行加密解密。这其中存在一个现而易见的问题:要是一方加入了加密插件而另一方却没有相应的解密程序显然双方不能正确通信。http://www.16sheji8.cn/
1.3 本课题研究的意义
聊天程序是否加密关系着用户的切身利用。为了保卫公民隐私权不受到网络黑客的不法侵犯,开发加密传输信息的聊天程序有着重大意义。聊天程序的加密特性对用户应该是透明的。正如前面分析,如果以安装插件的方式加密聊天程序很可能造成通信双方加密不一致的情况。因此将加密算法内嵌入聊天程序可以保证通信双方均能正常通信。
传统的对称加密算法如DES虽然可以快速的加密和解密明文,然而其密钥难以分配和管理。如果让通信双方相互约定密钥显然是不合适的,因此最好的方式是由一方产生密钥然后传送给另一方。基于公钥的非对称加密体制的引入正是用于解决对称加密算法在密钥管理上的不足,但是非对称加密算法如RSA存在运算强度过大、费时较长等问题。如果直接用于加密聊天程序,其生成密钥和加密解密所需时间是人们在通信过程中所不能容忍的,采取将两种加密算法相结合的方式可以很好的解决以上问题,从而达到安全快速的加密数据。
2 所采用技术的先进性分析
2.1 DES算法
DES是Data Encryption Standard(数据加密标准)的缩写。它是由IBM公司研制的一种加密算法,美国国家标准局于1977年公布把它作为非机要部门使用的数据加密标准,二十年来,它一直活跃在国际保密通信的舞台上,扮演了十分重要的角色。
DES是一个分组加密算法,它以64位为分组对数据加密。同时DES也是一个对称算法:加密和解密用的是同一个算法。它的密钥长度是56位(因为每个第8位都用作奇偶校验),密钥也可以是任意的56位数,而且可以任意时候改变。其中有极少量的数被认为是弱密钥,但是很容易避开它们。所以保密性依赖于密钥。
2.2 RSA算法
1978年,美国麻省理工学院(MIT)的研究小组成员Ronald L Rivest、Adi Shamir、 Leonard Adleman提出了一种基于公开密钥密码体制的优秀加密算法--RSA算法。RSA的取名就是来自这三位发明者姓氏的第一个字母。该算法以其较高的保密强度逐渐成为一种广为接受的公钥密码体制算法。RSA算法是一种分组密码体制算法,它的保密强度是建立在具有大素数因子的合数,其因子分解NP(Nondeterministic Polynomial)完全问题这一数学难题的基础上的,因此RSA算法具有很强的保密性。http://www.16sheji8.cn/
RSA算法研制的最初目标是解决DES算法秘密密钥利用公开信道传输分发困难的难题,而实际结果不但很好地解决了这个难题;还可利用RSA来完成对消息的数字签名以防对消息的抵赖;同时还可以利用数字签名发现攻击者对消息的非法篡改,以保护数据信息的完整性。
RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。RSA是被研究得最广泛的公钥算法,普遍认为是目前最优秀的公钥方案之一。RSA得到了世界上的最广泛的应用,并于1992年ISO国际标准化组织在其颁发的国际标准X.509中,将RSA算法正式纳入国际标准。
2.3 线程池
在传统的UNIX模型中,当一个进程需要另一个实体来完成某事时,它就fork一个子进程并让子进程去执行处理。Unix上的大多数网络服务器程序就是这么编写的,父进程accept一个连接,fork一个子进程,该子进程处理与该连接对端的客户之间的通信。
尽管这种范式多少年来一直良好地服务着,fork调用却存在一些问题:1 fork是昂贵的。fork要把父进程的内存映象拷贝到子进程,并在子进程中复制所有描述字,如此等等。2 fork返回之后父进程之间信息的传递需要进程间通信(IPC)机制。调用fork之前父进程向尚存在的子进程传递信息相当容易。因为子进程将从父进程数据空间及所有描述字的一个拷贝开始运行。然而从子进程往父进程返回信息却比较费力。
线程有助于解决这两个问题。线程有时称为轻权进程(lightweight process),因为线程比进程“权重轻些”。也就是说,线程的创建可能比进程的创建快10~100倍。
线程池是指在服务器启动阶段预先创建一系列线程阻塞于accept调用,每个客户由当前可用线程池中的某个(闲置)线程处理。这种处理方式比通常的客户连接到来时临时创建线程为其服务要快得多。可以获得很好的性能加速。
3 系统需求分析
3.1 聊天程序功能分析
1 注册功能
通常聊天程序需要用户名和密码才能使用,所以需要实现web注册功能,这样用户可以很方便的通过web网站注册自己的用户名并取得密码,还可以在服务器上存储个人相关信息以便他人查看。
2 登陆功能
用户在聊天之前需要输入用户名和密码进行登陆以便获取自身相关信息和好友相关信息,故登陆过程中服务器需对用户名和密码进行必要的核对。http://www.16sheji8.cn/
3 聊天功能