李新煒
【摘要】 本文討論了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