廖露陽,郭兵
(四川大學計算機學院,成都 610065)
基于Android App安全登錄認證解決方案
廖露陽,郭兵
(四川大學計算機學院,成都 610065)
近幾年移動互聯(lián)網(wǎng)的高速發(fā)展,智能手機的使用用戶呈現(xiàn)爆炸性增長,手機終端上的App種類繁多,大多數(shù)App都需要與后臺系統(tǒng)進行交互,交互的第一步需要進行登錄認證,過于簡單的認證方式可能被破解從而造成用戶信息的泄露甚至威脅著用戶的財產(chǎn)安全。為此基于Android系統(tǒng),對比現(xiàn)有幾種常見的App登錄認證方式,并提出一種采用RSA非對稱加密和加入Token時效機制的登錄認證解決方案。在登錄驗證階段采用RSA非對稱加密方式,App端對服務器端返回的Token信息加上時間戳,將處理后的Token信息保存到本地,后面的每次請求都攜帶該Token從而實現(xiàn)免登錄的登錄狀態(tài)的保持。
App;登錄認證;加密;登錄保持
移動互聯(lián)網(wǎng)的飛速發(fā)展和手持智能終端的普及,特別是從Android系統(tǒng)問世以來,移動智能設備使用用戶呈現(xiàn)爆炸性增長。據(jù)《2015年中國移動互聯(lián)網(wǎng)研究報告》顯示,截止到2015年12月,國內(nèi)在網(wǎng)活躍移動智能設備數(shù)量達到8.99億,其中,Android設備占據(jù)七成[1]。與此同時,各大應用商店中的App數(shù)量急劇增長,種類從辦公、娛樂、游戲到購物等應有盡有。
這些App中絕大多數(shù)都需要與后臺系統(tǒng)進行交互,交互之前需要進行身份的認證,即登錄認證過程。登錄認證的方式如果過于簡單,一旦被黑客破解將會對用戶信息安全、財產(chǎn)安全造成嚴重威脅,同時對服務器也有可能造成破壞。同時,對于客戶端應用來說,一般只會在第一次登錄時需要進行用戶名和密碼的輸入,只要不是用戶主動點擊退出登錄,以后每次進入該應用都應該進行自動登錄,從而給用戶良好的體驗[2]。為此,本文在對比現(xiàn)有幾種App登錄方式后提出一套改進的App登錄認證解決方案,并將從登錄認證方式、詳細設計、實驗驗證三個方面展開論證。
1.1 Web登錄認證方式
目前常見的Web認證的方式主要有三種:
(1)HTTP Basic Auth[3]。這種方式就是每次請求服務器時都攜帶用戶名和密碼,優(yōu)點是使用非常簡單,缺點也非常明顯,因為每次都需要攜帶用戶名和密碼,很有可能造成密碼被截獲。
(2)OAuth[4-5]。一種開放的授權標準,允許第三方應用訪問用戶在某一個服務商服務器上存儲的私密數(shù)據(jù),其處理流程先是第三方應用通過App Key和App Secret換取OAuth_Token,然后第三方應用將會引導用戶進入到服務商頁面對該OAuth_Token進行授權(此時有可能需要輸入用戶名和密碼),授權完成后服務商頁面會跳轉(zhuǎn)到第三方應用同時返回Access Token,此后第三方應用就可以通過這個Access Token去服務商服務器中訪問相應數(shù)據(jù)。
(3)Cookie Auth[6]。Cookie認證機制就是瀏覽器在發(fā)起一次登錄認證請求時,服務端驗證通過后將會在產(chǎn)生一段Cookie信息并返回給瀏覽器,瀏覽器會將其保存到本地,以后的每次請求都會使用該Cookie信息而不用再次進行登錄驗證。
1.2 App登錄認證方式
由于App客戶端無法處理Cookie信息,因此App登錄認證無法使用Web認證方式中的Cookie認證方式,為了登錄狀態(tài)的保持,一般會模擬Cookie認證方式,即在App端發(fā)起登錄認證請求后,得到服務器端驗證成功的確認之后,App端一般會保存一些狀態(tài)信息在本地,后面每次請求都是攜帶該狀態(tài)信息,根據(jù)狀態(tài)信息的不同,可以分為如下兩種:
(1)保存用戶信息表中的某個唯一標識。App端發(fā)起登錄請求,服務器端在驗證成功后一般會將該登錄用戶的信息返回給客戶端,客戶端此時可以將用戶信息中的某個唯一標識字段給保存下來,如使用Shared-Preferences進行保存[7],后面每次發(fā)起網(wǎng)絡請求時,先判斷本地是否存在該字段,如果不存在說明用戶沒有進行登錄認證,跳轉(zhuǎn)到登錄頁;如果存在,則直接將這個字段攜帶進請求信息中,從而實現(xiàn)登錄保持狀態(tài)。這種方式優(yōu)點是比較簡單,缺點就是如果保存的字段容易被別人截獲,缺乏安全性。
(2)保存Token信息。App中非常常用的一種登錄認證方式,它的實現(xiàn)過程是,由App端發(fā)起登錄請求,服務器端在驗證成功后生成一份Token信息保存到用戶表中并設置一定的時效,同時將此Token返回給App端,App端將此Token保存到本地,以后的每次發(fā)起請求都是用該Token。與前面一種方式相比,避免了用戶表中信息的泄露,相對更加安全。其流程圖如下:
圖1 Token認證機制
這種方式相對于第一種來說雖然更加安全,但還是存在著明顯的安全漏洞,需要進行優(yōu)化。本文將以這種方案為基礎,提出一種更加安全的基于Android平臺的App登錄解決方案。這里我們把現(xiàn)有的這種方案稱為Token認證機制,本文提出的方案稱為改進的Token認證機制。
上述Token認證機制也是存在著一些明顯的安全漏洞,本文提出的改進的Token認證機制就是基于對原來Token認證機制中安全漏洞的優(yōu)化。對于登錄認證機制,我們可以把它分為登錄驗證、狀態(tài)保持和登出三個階段,改進的Token認證機制主要是在登錄驗證和狀態(tài)保持階段進行優(yōu)化。
2.1 登錄驗證優(yōu)化
登錄驗證階段是指App客戶端向服務器端發(fā)起登錄認證請求,并攜帶用戶名和密碼,服務器端收到請求后獲取用戶名和密碼并向數(shù)據(jù)庫進行查詢驗證的階段。由于這一階段需要密碼的傳輸,很多情況下可能都是明文或者簡單的MD5加密后直接傳輸,一旦被黑客截獲可能造成密碼的泄露風險[8]。因此這一階段的優(yōu)化就是加強密碼加密功能,這里我們采用RSA非對稱加密方式。
RSA是一種非對稱加密,它是對稱加密的一種加強版,使用對稱加密的服務器端和客戶端都使用同一種加密規(guī)則,因此在服務器端生成加密密鑰之后需要傳遞給客戶端,客戶端也需要保存這個密鑰,而傳遞密鑰的過程和保存密鑰在客戶端后都有可能發(fā)生密鑰的截獲造成安全漏洞。而非對稱加密方式會在服務器端生成兩套密鑰,生成的公鑰是公開的并傳給客戶端,私鑰保存在服務器端,客戶端用公鑰加密信息后傳遞到服務器端,服務器端再用私鑰進行解密,因此只要私鑰不泄露通信就是安全的[9-10]。
由上面分析可以知道,要使用RSA加密方式先要讓服務器生成公鑰和私鑰,并將公鑰返回給客戶端,因此,在圖1的登錄驗證階段需要額外進行一次請求獲取公鑰(這個過程只需要一次,只要獲得了公鑰以后登錄認證就不再需要該過程),其流程如圖2所示。
根據(jù)上面的分析,可以看到這一階段最核心的是服務器端公鑰和密鑰的生成過程以及利用公鑰加密和利用私鑰解密的過程。其核心代碼如下:
圖2 使用RSA加密的登錄驗證階段
2.2 狀態(tài)保持優(yōu)化
App客戶端在上一步登錄驗證階段會得到服務器返回的Token信息,并將該Token保存到本地,以后的每次請求都直接攜帶該Token而不是再次使用用戶名和密碼進行驗證,這一階段稱為狀態(tài)保持或登錄保持階段。前面介紹的Token認證機制中的Token會一直保存在App客戶端本地直至用戶主動點擊退出按鈕,如果該Token被截獲,截獲者同樣可以使用該Token直接訪問服務器中的敏感數(shù)據(jù)。針對Token這一長時間保存的特點,我們的優(yōu)化就是為這個Token設置一個生效時效,具體來說就是在從服務器獲得該Token后,在保存的時候在Token后加上一個當前的時間戳,后面每次發(fā)起網(wǎng)絡請求時,先取出該Token后面的時間戳判斷有沒有超過生效時間,如果沒有則將處理后的Token放入到請求信息中,如果超時了,則重新進行登錄認證過程。這種優(yōu)化過程是以犧牲了一點用戶體驗為代價。其流程圖如下:
圖3 Token信息的處理過程
3.1 服務器端環(huán)境
服務器端項目框架采用的是Spring MVC+Mybatis技術架構,數(shù)據(jù)庫采用的是MySQL 5.6,服務器使用Tomcat 7.0,開發(fā)工具使用MyEclipse+JDK1.7。
3.2 App客戶端環(huán)境
開發(fā)的App客戶端應用基于Android系統(tǒng),開發(fā)工具是Eclipse+ADT+JDK1.7,Android最低SDK版本2.3,目標版本3.0。Android App端項目框架同樣采用的是MVC三層架構模式[11],具體為XML格式布局文件負責View層,Activity負責Control層,業(yè)務邏輯和Bean負責Model層。
本文提出的解決方案已經(jīng)在實際的項目中實戰(zhàn)運用,在測試階段和項目上線近一年來運行良好,沒有報告有關方面的嚴重安全bug,證實該方案的切實可行性。
本文詳細探討了常見的Web登錄認證方式和App登錄認證方式,對現(xiàn)在比較常用的App登錄認證方式Token認證機制的安全漏洞進行了討論,在這個基礎上提出了改進的Token認證登錄機制,通過采用RSA非對稱加密優(yōu)化登錄驗證階段,使用Token時效機制優(yōu)化狀態(tài)保持階段,該優(yōu)化方案在實際生產(chǎn)中得到了檢驗。同時,該方案還有進一步優(yōu)化的空間,例如在優(yōu)化狀態(tài)保持階段時采用的是Token時效機制,但這樣犧牲了App的使用體驗,因此在以后的研究中可以針對這一階段做進一步的優(yōu)化過程。
[1]QuestMobile-還原市場真相助力企業(yè)增長.http://www.questmobile.com.cn
[2]范美英.Android用戶體驗與UI設計[M].北京:知識產(chǎn)權出版社,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].計算機系統(tǒng)應用,2012(03).
[6]D.Kristol,L.Montulli.HTTP State Management Mechanism[J],2000.
[7]徐宜生.Android群英傳[M].北京:電子工業(yè)出版社,2015.
[8]WangX,Yu H.How to Break MD5 and Other Hash Functions[J].Advancesin Cryptology,2005.
[9]吳明航,劉春剛.DES和RSA混合加密算法的研究[D].哈爾濱工業(yè)大學.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系統(tǒng)架構及應用程序開發(fā)研究[J].微計算機信息,2011(27).
郭兵(1970~),男,山東人,教授,博士生導師,研究方向為嵌入式實時系統(tǒng)、綠色計算、個人大數(shù)據(jù)、軟件工程收稿日期: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-),男,江西新余人,碩士,研究方向為嵌入式實時系統(tǒng)、個人大數(shù)據(jù)、軟件工程