張晶
[摘? ? 要] 隨著移動客戶端的普及,我國移動用戶不斷增加。基于此,文章對安卓終端的SQLite數(shù)據(jù)庫進(jìn)行簡單介紹,以網(wǎng)盤存儲的安全研究為主,分別從身份認(rèn)證、訪問控制模塊、網(wǎng)盤的設(shè)計與實(shí)現(xiàn)和SQLite數(shù)據(jù)庫加密等方面,進(jìn)一步提升SQLite數(shù)據(jù)庫的網(wǎng)盤存儲安全性。
[關(guān)鍵詞] 安卓終端;SQLite數(shù)據(jù)庫;網(wǎng)盤儲存;安全
doi : 10 . 3969 / j . issn . 1673 - 0194 . 2020. 15. 082
[中圖分類號] TP311? ? [文獻(xiàn)標(biāo)識碼]? A? ? ? [文章編號]? 1673 - 0194(2020)15- 0197- 02
1? ? ? 基于安卓終端的SQLite數(shù)據(jù)庫介紹
SQLite是一款通過C語言編寫的開放嵌入式數(shù)據(jù)庫,符合ACID中的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)。SQLite數(shù)據(jù)庫具有所占內(nèi)容小、運(yùn)行效率高的特點(diǎn),是現(xiàn)在安卓終端設(shè)備常用的數(shù)據(jù)庫,其由公共接口、虛擬機(jī)、后端與編譯器系統(tǒng)等部分組成。其中公共接口主要是通過SQLite C API組成,其中很多腳本語言或者程序,都是利用SQLite與接口交互;而編譯器系統(tǒng)則由分析器、代碼生成器與分組器組成,其中分組器與分析器先檢測執(zhí)行的語句,然后將其轉(zhuǎn)變?yōu)榉奖慊鶎犹幚淼臄?shù)據(jù)結(jié)構(gòu),接著將這種數(shù)據(jù)結(jié)構(gòu)傳遞給代碼生成器進(jìn)行后續(xù)處理,并產(chǎn)生虛擬機(jī),繼續(xù)執(zhí)行匯編代碼;虛擬機(jī)也叫虛擬數(shù)據(jù)庫引擎,此是SQLite數(shù)據(jù)庫的關(guān)鍵內(nèi)容,負(fù)責(zé)解釋執(zhí)行字節(jié);后端的主要作用是管理數(shù)據(jù),并借助OS Interface分享頁面信息[1]。
2? ? ? 基于安卓終端的SQLite數(shù)據(jù)庫網(wǎng)盤存儲安全的實(shí)現(xiàn)
2.1? ?身份認(rèn)證
增強(qiáng)SQLite數(shù)據(jù)庫網(wǎng)盤儲存的安全性,最先從身份認(rèn)證方案的實(shí)現(xiàn)入手,具體包括身份認(rèn)證與密鑰形成兩部分內(nèi)容。
2.1.1? ?身份認(rèn)證
第一,系統(tǒng)中調(diào)出sqlite3_open_v2()的函數(shù),并根據(jù)提示分別輸入用戶名與口令。第二,系統(tǒng)繼續(xù)調(diào)取函數(shù),并分析其中帶有的參數(shù),如用戶名、口令等。第三,用戶在函數(shù)下,通過查找用戶名的形式,觀看其是否在用戶信息體系中的屬性列表中。如果存在,繼續(xù)下一步。如果不存在,系統(tǒng)直接退出頁面,結(jié)束訪問。第四,結(jié)合密鑰生成的過程,用戶在輸入口令的時候,還需關(guān)注運(yùn)算后產(chǎn)生的數(shù)值。第五,對于查詢系統(tǒng),用戶有密鑰文件中的密鑰K。第六,系統(tǒng)調(diào)用checkPassword()函數(shù)中判斷K0和K的關(guān)系,若兩者相等,則證明身份認(rèn)證成功,成功進(jìn)入數(shù)據(jù)庫,若兩者不相等,直接退出訪問。
2.1.2? ?密鑰生成規(guī)則函數(shù)
數(shù)據(jù)庫進(jìn)入過程中的身份驗(yàn)證,需要比較兩個數(shù)值,如K0和K,K0表示用戶登錄數(shù)據(jù)庫中輸入的口令,經(jīng)過密鑰生成規(guī)則的數(shù)值;K則是用戶最早注冊,設(shè)置口令時產(chǎn)生的密鑰值,圖1為密鑰生成規(guī)律函數(shù)下的算法代碼[2]。其中,用戶輸入口令之后,通過密鑰生成規(guī)律,進(jìn)行密鑰計算,系統(tǒng)通過函數(shù)提示錄入手機(jī)IMEI碼,接著將其與站用戶輸入口令拼接,再加入Sale值,進(jìn)行MD5散列,最終得到上百位不可逆推的密鑰。
2.2? ?訪問控制模塊
用戶在終端登錄SQLite數(shù)據(jù)庫的時候,系統(tǒng)經(jīng)過對其進(jìn)行身份驗(yàn)證后,就會對用戶角色進(jìn)行劃分,可以是一種,也可是多種,并在多種角色下,盡量增強(qiáng)角色權(quán)限。例如方位控制階段,系統(tǒng)會讀取用戶的權(quán)限與角色類別,判斷其是否具有操作權(quán)限。用戶身份驗(yàn)證成功后,系統(tǒng)調(diào)用鉤子函數(shù)授權(quán)回調(diào)函數(shù)。其中的回調(diào)函數(shù)有三類返回值,分別為允許操作、拒絕操作與允許操作中摒棄不授權(quán)的操作。然后通過調(diào)用函數(shù),按照用戶的角色,檢測是否有進(jìn)行SQL語句操作權(quán)限。驗(yàn)證結(jié)果如果是有權(quán)限,則允許操作,若沒有就終止請求。查找權(quán)限表的代碼圖只需系統(tǒng)對用戶進(jìn)行角色判斷,就可知道是否具有執(zhí)行權(quán)限。若權(quán)限碼type的值為1-5,表示系統(tǒng)執(zhí)行的是符合用戶需求的操作;若權(quán)限碼type的值為6-10,表示系統(tǒng)執(zhí)行的是刪除的操作;若權(quán)限碼type的值為11-15,表示系統(tǒng)執(zhí)行對應(yīng)SQL語句操作:若用戶的角色中沒有type,則表示無對應(yīng)操作權(quán)限。
2.3? ?網(wǎng)盤的設(shè)計與實(shí)現(xiàn)
SQLite數(shù)據(jù)庫網(wǎng)盤的使用客戶,可通過客戶端注冊登錄與檢索下載。SQLite數(shù)據(jù)庫服務(wù)器對信息的儲存是以密文形式,要想解密,需要的密鑰在本地安卓終端上,以此防止云服務(wù)過程中產(chǎn)生的安全威脅。打開SQLite數(shù)據(jù)庫客戶端,輸入賬號密碼后,用戶持合法身份進(jìn)入主界面,并點(diǎn)擊其中的多種功能,上傳文件空間,系統(tǒng)程序自動打開SQLite接口,進(jìn)入安全模塊,系統(tǒng)驗(yàn)證訪問者身份。待權(quán)限控制模塊認(rèn)證成功后,SQLite數(shù)據(jù)庫內(nèi)部的文件就可上傳[3]。安卓終端中的本地SQLite安全加強(qiáng)模塊中的密文,通過云端或者網(wǎng)盤,上傳到服務(wù)器終端。文件上傳前,就已經(jīng)有很多數(shù)據(jù)被加密,以密文的形式存在于服務(wù)端,防止資料信息在傳遞或者保存的時候,被黑客攻擊并竊取。本文關(guān)于網(wǎng)盤的存儲安全,主要就是通過密文形式,通過數(shù)據(jù)庫安全模塊,將儲存在數(shù)據(jù)庫中的數(shù)據(jù)成功保護(hù)。網(wǎng)盤儲存模塊,有客戶端與服務(wù)器端兩種。
2.3.1? ?客戶端模塊
本次研究面向的是安卓終端專用的網(wǎng)盤,其安全性需要在安卓終端處,增加安全機(jī)制,保障數(shù)據(jù)安全后再上傳。SQLite數(shù)據(jù)庫的設(shè)計也重視終端數(shù)據(jù)的信息安全。用戶先進(jìn)行簡單的注冊、登錄,然后在數(shù)據(jù)庫中收集信息并下載文件。首先,注冊登錄系統(tǒng)的設(shè)計。SQLite數(shù)據(jù)庫下的網(wǎng)盤存儲安全的保證,最先從認(rèn)證用戶身份的合法性開始,通過注冊用戶名與密碼,保證數(shù)據(jù)庫登錄的安全性,通過MD5散列后,將與用戶名一致的信息上傳到服務(wù)器,保存用戶信息。用戶第一次登錄賬號的時候,在成功后會將個人信息直接上傳并保存到服務(wù)器的數(shù)據(jù)庫中。若不是首次登錄的用戶,直接填寫用戶名與賬號即可,待信息與數(shù)據(jù)庫中已有賬號相符,驗(yàn)證提交密碼的散列值與對應(yīng)散列值一致,則表示登錄成功,否則會出現(xiàn)“對不起,您提交的信息無效”的提示。
接著實(shí)現(xiàn)注冊登錄功能,安卓終端中的SQLite數(shù)據(jù)庫與其他應(yīng)用程序相同,帶配置完開發(fā)環(huán)境后,就構(gòu)建安全網(wǎng)盤工程,并在安卓終端資源目錄中,完成多個頁面的UI設(shè)計,并存入項(xiàng)目所處的圖片與多種格式等資源,并在JAVA文件中完成頁面的布局。開發(fā)過程中需連接網(wǎng)絡(luò),并在AndroidManifest.xml中注冊授權(quán),對于SQLite數(shù)據(jù)庫客戶端中頁面的設(shè)計,需有登錄頁面、注冊頁面與上傳下載頁面。用戶首次登錄時在登錄頁面注冊賬號,自己輸入賬號與密碼,注冊成功后對密碼進(jìn)行MD5散列,多種數(shù)值一同保存。注冊頁面上需要有:“注冊”提示;輸入用戶名、密碼、確定密碼;體現(xiàn)注冊信息、退出。
文件加密上傳功能的設(shè)計,用戶文件上傳時需點(diǎn)擊“上傳文件”按鈕,并回調(diào)打開函數(shù)接口,完成數(shù)據(jù)庫的權(quán)限認(rèn)證,并在制定的用戶文件中提去本地密鑰,加密所選上傳文件。加密結(jié)束后就可在SQLite數(shù)據(jù)庫日志中增加密文信息,并上傳密文。此處可以借助Socket的方法完成客戶端與服務(wù)器端的通信。
2.3.2? ?服務(wù)端模塊
SQLite數(shù)據(jù)庫中服務(wù)端模塊的設(shè)計,先從數(shù)據(jù)表開始,服務(wù)端作為數(shù)據(jù)庫中關(guān)鍵部分,記錄用戶的信息、上傳下載文件信息等內(nèi)容。用戶初次注冊成功后,網(wǎng)絡(luò)服務(wù)端就會增加一條用戶信息,往往通過CountID當(dāng)作用戶的ID標(biāo)識,用于登錄時設(shè)置名稱,由服務(wù)端確定該用戶是否存在于數(shù)據(jù)庫中,若存在,接著對比密碼散列值與用戶輸入密碼散列后得到的值,以此提升口令安全性。以FileID文件標(biāo)識為例,任意一個上傳到服務(wù)端的文件,都有獨(dú)立的ID號,通過FileID設(shè)置主鍵增強(qiáng)。并根據(jù)Sourceid判斷文件是否初次上傳,若該數(shù)值為空,則表示初次上傳。安卓終端中,服務(wù)端與客戶端相同,都通過創(chuàng)建對象,完成客戶端與服務(wù)器的連接??赏ㄟ^SocketServer.java文件,結(jié)合客戶端發(fā)來的信息,確定文件是否初次上傳、是否是斷點(diǎn)續(xù)傳、是否上傳成功等,并將正確信息傳輸給客戶端。
2.4? ?SQLite數(shù)據(jù)庫加密
2.4.1? ?加密思路
安卓終端上的源碼十分復(fù)雜,整體范圍龐大,加密SQLite數(shù)據(jù)庫的時候,若直接在安卓源碼中修改SQLite源碼,后期調(diào)試就會變得困難,且使用效率低。所以需要將SQLite源碼先從安卓原生系統(tǒng)中分離,然后獨(dú)立進(jìn)行修改,以此優(yōu)化AES算法加密效果。SQLite源碼中增添加密與權(quán)限認(rèn)證功能之后,就可再放入到原生系統(tǒng)中,完成加密接口與應(yīng)用層的銜接,使系統(tǒng)開發(fā)技術(shù)人員在應(yīng)用層中能快速調(diào)用SQLite加密API,并編寫安卓源碼,最終構(gòu)建SQLite數(shù)據(jù)庫安全系統(tǒng)。
2.4.2? ?加密方案的實(shí)現(xiàn)
安卓系統(tǒng)中所有SQLite源碼的路徑為:external/sqlite/dist,加密方案實(shí)現(xiàn)中,將SQLite源碼提取。SQLite數(shù)據(jù)庫官方源碼中,包括幾個加密系統(tǒng),要想實(shí)現(xiàn)SQLite的加密功能,實(shí)際上就是實(shí)現(xiàn)幾個函數(shù)。增加SQLite加解密功能的流程為:第一,在slite3.c文件中的開始部分,增加SQLITE_HAS_CODEC宏定義,啟動SQLite數(shù)據(jù)庫中的加解密功能。第二,在SQLite數(shù)據(jù)庫定義文件中添加函數(shù)。創(chuàng)建加密結(jié)構(gòu)體,將臨時需要用的節(jié)目過程儲存,并對于其中用到的頁數(shù)據(jù)信息、密鑰和B-tree指針等信息數(shù)值,并釋放臨時變量函數(shù)。第三,編寫加密函數(shù),優(yōu)化原先的AES-128加解密算法,并植入SQLite數(shù)據(jù)庫中。第四,編寫新函數(shù),連接進(jìn)入數(shù)據(jù)庫的讀寫操作與加解密功能。保證數(shù)據(jù)庫每次被打開的時候,都會進(jìn)行一次加解密操作。系統(tǒng)函數(shù)中往往蘊(yùn)含多個數(shù)據(jù)庫的信息,且需要通過變量數(shù)據(jù)明確需要具體的加密或者解密,將Codec變量作為加解密的密鑰,可借助其他變量,釋放函數(shù)。
3? ? ? 結(jié)? ? 論
經(jīng)過對安卓終端SQLite數(shù)據(jù)庫模塊的加強(qiáng)與對網(wǎng)盤儲存安全的實(shí)現(xiàn)進(jìn)行闡述,從用戶身份認(rèn)證角度出發(fā),配合數(shù)據(jù)加密與訪問控制等形式,完成對SQLite數(shù)據(jù)庫網(wǎng)盤存儲安全的加強(qiáng),使SQLite數(shù)據(jù)庫網(wǎng)盤儲存信息的安全性得到保障,進(jìn)而避免信息在傳輸過程中受到惡意攻擊,加強(qiáng)對安卓終端用戶隱私的保護(hù)。
主要參考文獻(xiàn)
[1]汪坤.SQLite數(shù)據(jù)庫在Android平臺下的加密設(shè)計[J].電子技術(shù)與軟件工程,2020(3):210-212.
[2]何文才,馬鵬斐,劉培鶴,等.基于Android平臺的SQLite數(shù)據(jù)庫加密研究[J].計算機(jī)應(yīng)用與軟件,2019,36(10):310-315,333.
[3]徐志揚(yáng),楊玉志,查曉俊,等.基于Android的醫(yī)療設(shè)備管理軟件離線后數(shù)據(jù)的處理方法[J].中國醫(yī)療設(shè)備,2019,34(4):123-126.