廖露陽,郭兵
(四川大學計算機學院,成都 610065)
基于Android App安全登錄認證解決方案
廖露陽,郭兵
(四川大學計算機學院,成都 610065)
近幾年移動互聯網的高速發展,智能手機的使用用戶呈現爆炸性增長,手機終端上的App種類繁多,大多數App都需要與后臺系統進行交互,交互的第一步需要進行登錄認證,過于簡單的認證方式可能被破解從而造成用戶信息的泄露甚至威脅著用戶的財產安全。為此基于Android系統,對比現有幾種常見的App登錄認證方式,并提出一種采用RSA非對稱加密和加入Token時效機制的登錄認證解決方案。在登錄驗證階段采用RSA非對稱加密方式,App端對服務器端返回的Token信息加上時間戳,將處理后的Token信息保存到本地,后面的每次請求都攜帶該Token從而實現免登錄的登錄狀態的保持。
App;登錄認證;加密;登錄保持
移動互聯網的飛速發展和手持智能終端的普及,特別是從Android系統問世以來,移動智能設備使用用戶呈現爆炸性增長。據《2015年中國移動互聯網研究報告》顯示,截止到2015年12月,國內在網活躍移動智能設備數量達到8.99億,其中,Android設備占據七成[1]。與此同時,各大應用商店中的App數量急劇增長,種類從辦公、娛樂、游戲到購物等應有盡有。
這些App中絕大多數都需要與后臺系統進行交互,交互之前需要進行身份的認證,即登錄認證過程。登錄認證的方式如果過于簡單,一旦被黑客破解將會對用戶信息安全、財產安全造成嚴重威脅,同時對服務器也有可能造成破壞。同時,對于客戶端應用來說,一般只會在第一次登錄時需要進行用戶名和密碼的輸入,只要不是用戶主動點擊退出登錄,以后每次進入該應用都應該進行自動登錄,從而給用戶良好的體驗[2]。為此,本文在對比現有幾種App登錄方式后提出一套改進的App登錄認證解決方案,并將從登錄認證方式、詳細設計、實驗驗證三個方面展開論證。
1.1 Web登錄認證方式
目前常見的Web認證的方式主要有三種:
(1)HTTP Basic Auth[3]。這種方式就是每次請求服務器時都攜帶用戶名和密碼,優點是使用非常簡單,缺點也非常明顯,因為每次都需要攜帶用戶名和密碼,很有可能造成密碼被截獲。
(2)OAuth[4-5]。一種開放的授權標準,允許第三方應用訪問用戶在某一個服務商服務器上存儲的私密數據,其處理流程先是第三方應用通過App Key和App Secret換取OAuth_Token,然后第三方應用將會引導用戶進入到服務商頁面對該OAuth_Token進行授權(此時有可能需要輸入用戶名和密碼),授權完成后服務商頁面會跳轉到第三方應用同時返回Access Token,此后第三方應用就可以通過這個Access Token去服務商服務器中訪問相應數據。
(3)Cookie Auth[6]。Cookie認證機制就是瀏覽器在發起一次登錄認證請求時,服務端驗證通過后將會在產生一段Cookie信息并返回給瀏覽器,瀏覽器會將其保存到本地,以后的每次請求都會使用該Cookie信息而不用再次進行登錄驗證。
1.2 App登錄認證方式
由于App客戶端無法處理Cookie信息,因此App登錄認證無法使用Web認證方式中的Cookie認證方式,為了登錄狀態的保持,一般會模擬Cookie認證方式,即在App端發起登錄認證請求后,得到服務器端驗證成功的確認之后,App端一般會保存一些狀態信息在本地,后面每次請求都是攜帶該狀態信息,根據狀態信息的不同,可以分為如下兩種:
(1)保存用戶信息表中的某個唯一標識。App端發起登錄請求,服務器端在驗證成功后一般會將該登錄用戶的信息返回給客戶端,客戶端此時可以將用戶信息中的某個唯一標識字段給保存下來,如使用Shared-Preferences進行保存[7],后面每次發起網絡請求時,先判斷本地是否存在該字段,如果不存在說明用戶沒有進行登錄認證,跳轉到登錄頁;如果存在,則直接將這個字段攜帶進請求信息中,從而實現登錄保持狀態。這種方式優點是比較簡單,缺點就是如果保存的字段容易被別人截獲,缺乏安全性。
(2)保存Token信息。App中非常常用的一種登錄認證方式,它的實現過程是,由App端發起登錄請求,服務器端在驗證成功后生成一份Token信息保存到用戶表中并設置一定的時效,同時將此Token返回給App端,App端將此Token保存到本地,以后的每次發起請求都是用該Token。與前面一種方式相比,避免了用戶表中信息的泄露,相對更加安全。其流程圖如下:

圖1 Token認證機制
這種方式相對于第一種來說雖然更加安全,但還是存在著明顯的安全漏洞,需要進行優化。本文將以這種方案為基礎,提出一種更加安全的基于Android平臺的App登錄解決方案。這里我們把現有的這種方案稱為Token認證機制,本文提出的方案稱為改進的Token認證機制。
上述Token認證機制也是存在著一些明顯的安全漏洞,本文提出的改進的Token認證機制就是基于對原來Token認證機制中安全漏洞的優化。對于登錄認證機制,我們可以把它分為登錄驗證、狀態保持和登出三個階段,改進的Token認證機制主要是在登錄驗證和狀態保持階段進行優化。
2.1 登錄驗證優化
登錄驗證階段是指App客戶端向服務器端發起登錄認證請求,并攜帶用戶名和密碼,服務器端收到請求后獲取用戶名和密碼并向數據庫進行查詢驗證的階段。由于這一階段需要密碼的傳輸,很多情況下可能都是明文或者簡單的MD5加密后直接傳輸,一旦被黑客截獲可能造成密碼的泄露風險[8]。因此這一階段的優化就是加強密碼加密功能,這里我們采用RSA非對稱加密方式。
RSA是一種非對稱加密,它是對稱加密的一種加強版,使用對稱加密的服務器端和客戶端都使用同一種加密規則,因此在服務器端生成加密密鑰之后需要傳遞給客戶端,客戶端也需要保存這個密鑰,而傳遞密鑰的過程和保存密鑰在客戶端后都有可能發生密鑰的截獲造成安全漏洞。而非對稱加密方式會在服務器端生成兩套密鑰,生成的公鑰是公開的并傳給客戶端,私鑰保存在服務器端,客戶端用公鑰加密信息后傳遞到服務器端,服務器端再用私鑰進行解密,因此只要私鑰不泄露通信就是安全的[9-10]。
由上面分析可以知道,要使用RSA加密方式先要讓服務器生成公鑰和私鑰,并將公鑰返回給客戶端,因此,在圖1的登錄驗證階段需要額外進行一次請求獲取公鑰(這個過程只需要一次,只要獲得了公鑰以后登錄認證就不再需要該過程),其流程如圖2所示。
根據上面的分析,可以看到這一階段最核心的是服務器端公鑰和密鑰的生成過程以及利用公鑰加密和利用私鑰解密的過程。其核心代碼如下:


圖2 使用RSA加密的登錄驗證階段
2.2 狀態保持優化
App客戶端在上一步登錄驗證階段會得到服務器返回的Token信息,并將該Token保存到本地,以后的每次請求都直接攜帶該Token而不是再次使用用戶名和密碼進行驗證,這一階段稱為狀態保持或登錄保持階段。前面介紹的Token認證機制中的Token會一直保存在App客戶端本地直至用戶主動點擊退出按鈕,如果該Token被截獲,截獲者同樣可以使用該Token直接訪問服務器中的敏感數據。針對Token這一長時間保存的特點,我們的優化就是為這個Token設置一個生效時效,具體來說就是在從服務器獲得該Token后,在保存的時候在Token后加上一個當前的時間戳,后面每次發起網絡請求時,先取出該Token后面的時間戳判斷有沒有超過生效時間,如果沒有則將處理后的Token放入到請求信息中,如果超時了,則重新進行登錄認證過程。這種優化過程是以犧牲了一點用戶體驗為代價。其流程圖如下:

圖3 Token信息的處理過程
3.1 服務器端環境
服務器端項目框架采用的是Spring MVC+Mybatis技術架構,數據庫采用的是MySQL 5.6,服務器使用Tomcat 7.0,開發工具使用MyEclipse+JDK1.7。
3.2 App客戶端環境
開發的App客戶端應用基于Android系統,開發工具是Eclipse+ADT+JDK1.7,Android最低SDK版本2.3,目標版本3.0。Android App端項目框架同樣采用的是MVC三層架構模式[11],具體為XML格式布局文件負責View層,Activity負責Control層,業務邏輯和Bean負責Model層。
本文提出的解決方案已經在實際的項目中實戰運用,在測試階段和項目上線近一年來運行良好,沒有報告有關方面的嚴重安全bug,證實該方案的切實可行性。
本文詳細探討了常見的Web登錄認證方式和App登錄認證方式,對現在比較常用的App登錄認證方式Token認證機制的安全漏洞進行了討論,在這個基礎上提出了改進的Token認證登錄機制,通過采用RSA非對稱加密優化登錄驗證階段,使用Token時效機制優化狀態保持階段,該優化方案在實際生產中得到了檢驗。同時,該方案還有進一步優化的空間,例如在優化狀態保持階段時采用的是Token時效機制,但這樣犧牲了App的使用體驗,因此在以后的研究中可以針對這一階段做進一步的優化過程。
[1]QuestMobile-還原市場真相助力企業增長.http://www.questmobile.com.cn
[2]范美英.Android用戶體驗與UI設計[M].北京:知識產權出版社,2015.
[3]Dodero J M,Ghiglione E.REST-Based Web Access Tolearning Design Services[J],2008.
[4]D.Hardt.The OAuth 2.0 Authorization Framework[J].RFC6749.2012.
[5]時子慶,劉金蘭,譚曉華.基于OAuth2.0的認證授權技術[J].計算機系統應用,2012(03).
[6]D.Kristol,L.Montulli.HTTP State Management Mechanism[J],2000.
[7]徐宜生.Android群英傳[M].北京:電子工業出版社,2015.
[8]WangX,Yu H.How to Break MD5 and Other Hash Functions[J].Advancesin Cryptology,2005.
[9]吳明航,劉春剛.DES和RSA混合加密算法的研究[D].哈爾濱工業大學.2013.
[10]Chenghuai Lu,,Andre LM dos Santos,Francisco R Pimentel.Implementation of Fast RSA Key Generation on Smart Cards.SAC 2002, 2002.
[11]曾健平,邵艷潔.Android系統架構及應用程序開發研究[J].微計算機信息,2011(27).
郭兵(1970~),男,山東人,教授,博士生導師,研究方向為嵌入式實時系統、綠色計算、個人大數據、軟件工程收稿日期:2016-10-20修稿日期:2016-11-30
The Securely Login Authentication Solution Based on Android Application
LIAO Lu-yang,GUO Bing
(College of Computer Science,Sichuan University,Chengdu 610065)
With the high development of mobile Internet in recent years,the users of smart phone shows explosive growth,and there are large variety of applications on the mobile device,most of these applications need to interact with the back-end systems,and the first step of interacting is to login authentication,it may be cracked if the authentication is too much simple which can lead to the leakage of users'data and even threaten the users'property security.Therefore,based on Android system,compares several common login authentications,and then proposes a secure login authentication solution which uses RSA asymmetric encryption and Token aging mechanism.In login verification period,this solution uses RSA asymmetric encryption and the client application adds time stamp end of the Token message which receives from server,and then saves the token message to local disk,later,all the request carries the Token message,so that realizes the function of login status maintain.
Applications;Login Authentication;Encrypt;Login Maintain
國家自然科學基金重點項目(No.61332001)、國家自然科學基金資助項目(No.61272104)、國家自然科學基金資助項目(No.61073045)
1007-1423(2016)35-0009-04
10.3969/j.issn.1007-1423.2016.35.002
廖露陽(1990-),男,江西新余人,碩士,研究方向為嵌入式實時系統、個人大數據、軟件工程