Android系统基于SOCKET通信的安全性改进方法
2016-06-15李新炜
李新炜
【摘要】 本文讨论了Android系统里使用SOCKET通信时的安全性问题。通过对比不同的加密方式和网络协议,论证了采用加密的SOCKET通讯的优点和可行性。
【关键词】 Android Socket通信 加密
为了追求通信的高效和速度,很多系统采用不安全的UDP通信方式和未经加密处理的SOCKET进行通信,导致该系统在进行通信时存在一定的安全隐患。本文对于基于Android系统中的SOCKET通信和信息传输加密方式进行探讨分析。
根据底层协议的不同,Socket通信也是不同的,在TCP/ IP协议中主要类型有两种,分别是流套接字和数据报套接字。[1]
数据报套接字使用UDP协议,提供数据打包和发送服务。效率高,但安全性较低。流套接字将TCP协议作为其端对端的一个可信赖的字节流服务。
如果是基于TCP协议的Socket,则由服务器端声明一个指定端口号的ServerSocket对象,然后调用Serversocket的accept()方法来接收客户端的数据。如果accept()方法没有接收数据则处于堵塞状态。如果接收到数据,则通过input-stream读取数据。
先在客户端创建一个Socket对象,使用SOCKET方法指定服务器端的ip地址及端口号,最后用inputstream读取数据,获取服务器准备发出的数据,完成三次握手的最后一次数据获取。最后将要发送的数据写入outputstream即可进行TCP协议的socket数据传输。[2]
如果是基于UDP协议的SOCKET通信,则先由服务器创建一个指定监听端口号的DatagramSocket对象,并且创建一个空的DatagramSocket对象用于接收数据,然后使用DatagramSocket的receive方法接收客户端发送的数据。[3]
Socket的传输效率远远高于其他通信协议的传输效率,但是由于大部分设计采用了UDP模式的Socket通信,且使用了明文传输,所以信息容易被拦截并解析。后期需要通过某种加密方式进行数据加密。在Android 3.0系统之后的版本中,已经引入了完整的文件系统加密功能。
该功能允许利用系统内核中的dmcrypt模块对用户的数据进行存储加密。该种加密方式是采用CBC模式的128位AES算法。[4]或者直接使用DES算法采用CBC模式对SOCKET通信加密。该种方法在如果在JAVA中需要Base64的话,需要单独下载导入它的支持jar包到项目中,另外使用Base64对CBC加密或解密时,在Android中加密解密都需要这个参数,而JAVA加密时有这个参数而解密时没有。也可考虑采用SSL协议配合AES或RSA算法实现,即所谓的混合加密模式。[5]
由于对称加密方式加密速度快,但密钥交换不便,而非对称加密方便密钥交换,但是加密耗时,所以可以各取其所长。在客户端用AES密钥将本地明文加密,然后从服务器端获取服务器端RSA公钥,用公钥对本地的AES密钥进行二次加密,加密后把两个密文一起发送给服务器端。服务器端收到密文后将其分成密钥和密文两部分,由本地的RSA私钥先对密钥进行解密,得到加密密文的AES密钥,然后用此密钥再对密文进行解密,从而得到明文。[6]
既考虑到了加密和解密的速度,也考虑到了安全性。无论加密还是解密都在服务器或客户机的一侧进行,没有通过网络传输,安全性较高。唯一需要通过网络传输的是服务器的RSA公钥和加密过的AES钥匙,所以即使被截获也无法读取明文。
但由于SSL协议只能基于安全协议,所以不能继续采用UDP协议模式而应改为TCP协议模式进行通信。
结语
经过论证,在Android系统中利用SOCEKT通信方式,可以实现在使用TCP协议的基础上利用AES加密算法等对SOCKE通信进行加密处理。也可以采用混合加密方式利用SSL协议进行通信加密,或者直接在Android系统内部对用户数据进行AES加密等方式。这样既保留了SOCKET通信高效的优点,又实现了安全可靠的传输,保证了通信的私密性。
参 考 文 献
[1] 崔荔.基于Android平台的智能家居客户端系统设计与实现[D] .长安大学,2013.05
[2] 王海帅.地理位置驱动的工作管理工具的设计与实现[D] .北京交通大学, 2013.06
[3] 霍璐,胡钢,谢剑锋.Android平台煤矿安全巡检系统客户端设计[J] .微处理机, 2013.06
[4] 陈家伟.基于Android平台的隐私信息保护系统研究与实现 [J] .南昌大学,2014.05
[5] 栾咏红.基于 Android 的 XML 解析器的分析与比较[J].南京晓庄学院学报, 2011.11.
[6] 陈军章,周漪.基于SOCKET的JAVA安全通信程序设计[J].安阳师范学院学报, 2013.10