李新煒
【摘要】 本文討論了Android系統(tǒng)里使用SOCKET通信時的安全性問題。通過對比不同的加密方式和網(wǎng)絡(luò)協(xié)議,論證了采用加密的SOCKET通訊的優(yōu)點和可行性。
【關(guān)鍵詞】 Android Socket通信 加密
為了追求通信的高效和速度,很多系統(tǒng)采用不安全的UDP通信方式和未經(jīng)加密處理的SOCKET進行通信,導(dǎo)致該系統(tǒng)在進行通信時存在一定的安全隱患。本文對于基于Android系統(tǒng)中的SOCKET通信和信息傳輸加密方式進行探討分析。
根據(jù)底層協(xié)議的不同,Socket通信也是不同的,在TCP/ IP協(xié)議中主要類型有兩種,分別是流套接字和數(shù)據(jù)報套接字。[1]
數(shù)據(jù)報套接字使用UDP協(xié)議,提供數(shù)據(jù)打包和發(fā)送服務(wù)。效率高,但安全性較低。流套接字將TCP協(xié)議作為其端對端的一個可信賴的字節(jié)流服務(wù)。
如果是基于TCP協(xié)議的Socket,則由服務(wù)器端聲明一個指定端口號的ServerSocket對象,然后調(diào)用Serversocket的accept()方法來接收客戶端的數(shù)據(jù)。如果accept()方法沒有接收數(shù)據(jù)則處于堵塞狀態(tài)。如果接收到數(shù)據(jù),則通過input-stream讀取數(shù)據(jù)。
先在客戶端創(chuàng)建一個Socket對象,使用SOCKET方法指定服務(wù)器端的ip地址及端口號,最后用inputstream讀取數(shù)據(jù),獲取服務(wù)器準備發(fā)出的數(shù)據(jù),完成三次握手的最后一次數(shù)據(jù)獲取。最后將要發(fā)送的數(shù)據(jù)寫入outputstream即可進行TCP協(xié)議的socket數(shù)據(jù)傳輸。[2]
如果是基于UDP協(xié)議的SOCKET通信,則先由服務(wù)器創(chuàng)建一個指定監(jiān)聽端口號的DatagramSocket對象,并且創(chuàng)建一個空的DatagramSocket對象用于接收數(shù)據(jù),然后使用DatagramSocket的receive方法接收客戶端發(fā)送的數(shù)據(jù)。[3]
Socket的傳輸效率遠遠高于其他通信協(xié)議的傳輸效率,但是由于大部分設(shè)計采用了UDP模式的Socket通信,且使用了明文傳輸,所以信息容易被攔截并解析。后期需要通過某種加密方式進行數(shù)據(jù)加密。在Android 3.0系統(tǒng)之后的版本中,已經(jīng)引入了完整的文件系統(tǒng)加密功能。
該功能允許利用系統(tǒng)內(nèi)核中的dmcrypt模塊對用戶的數(shù)據(jù)進行存儲加密。該種加密方式是采用CBC模式的128位AES算法。[4]或者直接使用DES算法采用CBC模式對SOCKET通信加密。該種方法在如果在JAVA中需要Base64的話,需要單獨下載導(dǎo)入它的支持jar包到項目中,另外使用Base64對CBC加密或解密時,在Android中加密解密都需要這個參數(shù),而JAVA加密時有這個參數(shù)而解密時沒有。也可考慮采用SSL協(xié)議配合AES或RSA算法實現(xiàn),即所謂的混合加密模式。[5]
由于對稱加密方式加密速度快,但密鑰交換不便,而非對稱加密方便密鑰交換,但是加密耗時,所以可以各取其所長。在客戶端用AES密鑰將本地明文加密,然后從服務(wù)器端獲取服務(wù)器端RSA公鑰,用公鑰對本地的AES密鑰進行二次加密,加密后把兩個密文一起發(fā)送給服務(wù)器端。服務(wù)器端收到密文后將其分成密鑰和密文兩部分,由本地的RSA私鑰先對密鑰進行解密,得到加密密文的AES密鑰,然后用此密鑰再對密文進行解密,從而得到明文。[6]
既考慮到了加密和解密的速度,也考慮到了安全性。無論加密還是解密都在服務(wù)器或客戶機的一側(cè)進行,沒有通過網(wǎng)絡(luò)傳輸,安全性較高。唯一需要通過網(wǎng)絡(luò)傳輸?shù)氖欠?wù)器的RSA公鑰和加密過的AES鑰匙,所以即使被截獲也無法讀取明文。
但由于SSL協(xié)議只能基于安全協(xié)議,所以不能繼續(xù)采用UDP協(xié)議模式而應(yīng)改為TCP協(xié)議模式進行通信。
結(jié)語
經(jīng)過論證,在Android系統(tǒng)中利用SOCEKT通信方式,可以實現(xiàn)在使用TCP協(xié)議的基礎(chǔ)上利用AES加密算法等對SOCKE通信進行加密處理。也可以采用混合加密方式利用SSL協(xié)議進行通信加密,或者直接在Android系統(tǒng)內(nèi)部對用戶數(shù)據(jù)進行AES加密等方式。這樣既保留了SOCKET通信高效的優(yōu)點,又實現(xiàn)了安全可靠的傳輸,保證了通信的私密性。
參 考 文 獻
[1] 崔荔.基于Android平臺的智能家居客戶端系統(tǒng)設(shè)計與實現(xiàn)[D] .長安大學(xué),2013.05
[2] 王海帥.地理位置驅(qū)動的工作管理工具的設(shè)計與實現(xiàn)[D] .北京交通大學(xué), 2013.06
[3] 霍璐,胡鋼,謝劍鋒.Android平臺煤礦安全巡檢系統(tǒng)客戶端設(shè)計[J] .微處理機, 2013.06
[4] 陳家偉.基于Android平臺的隱私信息保護系統(tǒng)研究與實現(xiàn) [J] .南昌大學(xué),2014.05
[5] 欒詠紅.基于 Android 的 XML 解析器的分析與比較[J].南京曉莊學(xué)院學(xué)報, 2011.11.
[6] 陳軍章,周漪.基于SOCKET的JAVA安全通信程序設(shè)計[J].安陽師范學(xué)院學(xué)報, 2013.10