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