• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于SM3的Android文件完整性檢測系統(tǒng)

      2019-06-27 04:21:36楊中皇何便便
      西安郵電大學(xué)學(xué)報 2019年6期
      關(guān)鍵詞:源碼哈希寄存器

      楊中皇, 何便便

      (1. 高雄師范大學(xué) 軟件工程與管理學(xué)系,臺灣 高雄 824442;2.西安郵電大學(xué) 無線網(wǎng)絡(luò)安全技術(shù)國家工程實驗室, 陜西 西安 710121)

      Android是一種基于Linux平臺開放源代碼的操作系統(tǒng),其開源性給Android平臺帶來了各種各樣的風(fēng)險,如黑客通過攻擊智能手機(jī)應(yīng)用軟件提取用戶信息等[1]。根據(jù)安全公司G Date2017年調(diào)查數(shù)據(jù)顯示[2],市場已經(jīng)出現(xiàn)了350萬全新的 Android 惡意軟件,比上一年增長了約7.6%。惡意軟件在攻擊Android系統(tǒng)時會修改系統(tǒng)配置文件,以便再次進(jìn)入運行時不被發(fā)現(xiàn),從而盜取敏感信息進(jìn)行非法交易。

      目前,采用MD5哈希算法可檢測文件數(shù)據(jù)的完整性,在保證文件完整性的條件下,再進(jìn)行內(nèi)存數(shù)據(jù)完整性檢測,最終獲得數(shù)據(jù)完整性結(jié)果[3];基于模糊哈希的Android變種惡意軟件檢測方法[4]根據(jù)Apk中字符串以及函數(shù)長度分布特征,生成模糊哈希值,使得同類變種的惡意軟件間的哈希值相似。但是,上述兩種檢測都從軟件層面實現(xiàn)檢測,未從Android系統(tǒng)底層源碼層面實現(xiàn)檢測功能,而對系統(tǒng)內(nèi)核層實現(xiàn)文件完整性檢測比較安全且容易檢測。

      本文擬設(shè)計一種基于SM3的Android文件完整性檢測系統(tǒng),通過修改Android開放源代碼項目,實現(xiàn)對設(shè)備的文件完整性檢測。利用SM3密碼雜湊算法[5]計算文件哈希值,將其存儲在內(nèi)存文件中。對文件進(jìn)行完整性檢測時,再次對文件進(jìn)行SM3密碼雜湊算法計算,生成新的哈希值,將其與存儲的哈希值進(jìn)行對比,檢測文件是否完整,以此發(fā)現(xiàn)入侵行為。

      1 文件完整性檢測

      文件完整性檢測[6]是指對于一個沒有被攻擊數(shù)據(jù)信息完好的系統(tǒng),選取系統(tǒng)中的關(guān)鍵文件,采用哈希算法對關(guān)鍵文件進(jìn)行計算,生成哈希值并保存。檢測時對比關(guān)鍵文件重新生成的哈希值與保存的哈希值,如果不相同,說明該關(guān)鍵文件被篡改,文件完整性被破環(huán)。

      2 SM3密碼雜湊算法

      SM3密碼雜湊算法采用分組和迭代的方式,將消息經(jīng)過填充、擴(kuò)展和迭代壓縮,最終生成256比特的固定長度哈希值[7]。

      2.1 消息填充

      對于長度為l的消息m,將比特“1”添加到消息的末尾,再添加k個“0”,k是滿足

      l+1+k=448 mod 512

      的最小非負(fù)整數(shù),最后再添加一個64位比特串,由長度l的二進(jìn)制表示。填充后的消息m′的比特長度為512的倍數(shù),將消息m′按512比特分組[7],即

      m′=M0M1…Mn-1,

      其中n=(l+k+65)/512。

      2.2 消息擴(kuò)展

      分組消息Mi擴(kuò)展生成W0,W1,…,W67,W′0,…,W′63等132個字的具體步驟如下,其中1個字表示32位的比特串。

      步驟1將Mi按32比特劃分為16個字W0,W1,…,W15。

      步驟2在W0,W1,…,W15的基礎(chǔ)上,擴(kuò)展Mi。根據(jù)前52個字的生成表達(dá)式[8]

      Wj=P1[Wj-16?Wj-9?(Wj-5<<<15)]?(Wj-13<<<7)?Wj-6(16≤j≤67),

      計算得出W16,W17,…,W67。

      步驟3根據(jù)后64個字的生成表達(dá)式[8]

      W′j=Wj?Wj+4, 0≤j≤63,

      計算得出W′0,W′1,…,W′63。

      將每個分組消息按照上述步驟擴(kuò)展為132個字,用于壓縮函數(shù)的計算。

      2.3 消息壓縮與迭代

      令A(yù)、B、C、D、E、F、G和H均為32位寄存器;S1,S2,T1和T2為中間變量,分別表示為

      S1=[(A<<<12)+E+(Tj<<

      利用壓縮函數(shù)

      V(i+1)=L(V(i),Mi), 0≤i≤n-1,

      分別計算寄存器A、B、C、D、E、F、G和H的值。

      1)分別將V(i)值賦給寄存器A、B、C、D、E、F、G和H。先將初始值V(0)賦給寄存器,則寄存器的初始化值可表示為

      A=7380166f,B=4914b2b9,
      C=172442d7,D=da8a0600,
      E=a96f30bc,F(xiàn)=163138aa,
      G=e38dee4d,H=b0fb0e4e。

      2)計算新一輪寄存器的值。寄存器D的值是上一輪寄存器C的值;寄存器C的值是將上一輪寄存器B的值循環(huán)左移9比特;寄存器B的值是上一輪寄存器A的值;寄存器A的值是中間變量T1賦的值;寄存器H的值是上一輪寄存器G的值;寄存器G值是將上一輪寄存器F的值循環(huán)左移19比特;寄存器F的值是上一輪寄存器E的值;寄存器E的值由置換函數(shù)[8]

      P0(X)=X?(X<<<9)?(X<<<17),0≤j≤63,X=T2。

      計算得出。將A、B、C、D、E、F、G和H寄存器新一輪的值,用于迭代運算。

      3)將新一輪A、B、C、D、E、F、G和H寄存器的值與V(i)進(jìn)行異或運算得出的值賦給V(i+1),進(jìn)行迭代運算。

      2.4 輸出

      當(dāng)消息的每個512分組處理完成后,最后一個分組的輸出就是消息的哈希值,即

      ABCDEFGH←V(n),

      哈希值

      y=ABCDEFGH。

      3 系統(tǒng)設(shè)計與實現(xiàn)

      3.1 系統(tǒng)設(shè)計

      基于SM3的Android文件完整性檢測系統(tǒng)主要由創(chuàng)建內(nèi)存文件、計算文件SM3值、檢測、上報文件及更新等5個部分組成。模型如圖1所示。

      圖1 Android文件完整性檢測模型

      在內(nèi)存中創(chuàng)建一個文件,選擇需要檢測的文件,使用SM3密碼雜湊算法,計算得出文件哈希值并自動保存在內(nèi)存文件中。對文件進(jìn)行檢測時,需要重新對選擇的文件進(jìn)行SM3計算,將重新生成的哈希值與保存的哈希值進(jìn)行對比,若不同,則系統(tǒng)會進(jìn)行提示。第一次檢測時會生成一個上報文件,里面記錄完整性被破壞的文件信息,即文件存儲位置及文件名。檢測完成后,更新內(nèi)存文件哈希值,以免影響下一次檢測。

      創(chuàng)建的內(nèi)存文件位于Android的內(nèi)部存儲中,其他應(yīng)用無法訪問這些數(shù)據(jù)。所以,將文件哈希值存儲內(nèi)存文件中,安全性增加。

      3.2 系統(tǒng)應(yīng)用實現(xiàn)

      文件完整性檢測系統(tǒng)在Ubuntu平臺上使用Android Studio開發(fā)環(huán)境開發(fā)應(yīng)用程序,利用Android開放源代碼項目(Android Open Source Project,AOSP)平臺[9-10],在Android 9.0源代碼基礎(chǔ)上添加文件完整性檢測應(yīng)用程序,將該應(yīng)用改為系統(tǒng)應(yīng)用,并編譯Android 9.0源代碼。

      3.2.1 AOSP下載及編譯

      1)下載源碼

      考慮到Android官方網(wǎng)站國內(nèi)網(wǎng)站無法直接訪問,系統(tǒng)使用清華鏡像網(wǎng)站下載repo工具獲取Android 9源碼的具體步驟如下。

      步驟1在清華鏡像網(wǎng)站下載repo工具并賦予其權(quán)限。將repo工具內(nèi)的REPO_URL地址改為清華鏡像源地址[11]http://mirrors.tuna.tsinghua.edu.cn/git/git-repo/。

      步驟2建立工作目錄“Android_9”,倉庫初始化命令后,出現(xiàn)Android源碼版本信息。

      步驟3選擇需要的Android版本,并進(jìn)行同步源碼樹。當(dāng)源碼同步結(jié)束后,工作目錄里就是源碼文件。

      2)編譯Android 9.0源碼

      編譯Android 9.0源碼時,需要在Ubuntu平臺配置編譯環(huán)境,如安裝OpenJDK8軟件和Android官方網(wǎng)站提供的依賴包[12-14]。具體編譯源碼步驟如下。

      步驟1配置好編譯環(huán)境后,執(zhí)行#source build/envsetup.sh命令編譯源碼文件。

      步驟2執(zhí)行l(wèi)unch選擇需要編譯設(shè)備的對應(yīng)編號,Pixel2手機(jī)是46。

      步驟3設(shè)備對應(yīng)編號選擇完后,使用make命令即源碼開始編譯。

      3.2.2 刷機(jī)

      源碼編譯成功后在源碼目錄下會有/out目錄,此目錄下有系統(tǒng)鏡像文件,可以將這些鏡像文件“刷入”設(shè)備中。

      刷機(jī)時需要打開“開發(fā)者選項”中的設(shè)備“USB調(diào)試”,將設(shè)備數(shù)據(jù)線連接計算機(jī)后,執(zhí)行以下操作。

      1)設(shè)備處于Bootloader模式,使用命令#fastboot oem unlock對Bootloader進(jìn)行解鎖。

      2)解鎖后使用命令#fastboot flashall -w將編譯好的鏡像文件一起刷入設(shè)備。

      3.2.3 系統(tǒng)應(yīng)用的實現(xiàn)

      文件檢測應(yīng)用開發(fā)完成后,需要將應(yīng)用置于Android源碼中再次編譯出新的鏡像文件,在刷機(jī)之后,文件檢測應(yīng)用將成為系統(tǒng)應(yīng)用,具體方法如下。

      1)將“FileDetection” 代碼加入到Android_9/packages/apps中。

      2)在FileDetection代碼的根目錄下,新建Android.mk文件,內(nèi)容為

      LOCAL_PATH:=

      $(call my-dir) include $(CLEAR_VARS)

      LOCAL_MODULE_TAGS:=user

      LOCAL_SRC_FILES:=

      $(call all-java-files-under,src)/

      LOCAL_PACKAGE_NAME:=

      FileDetectioninclude $(BUILD_PACKAGE)

      3)在Android_9/build/target/product目錄中,修改core.mk、min_dev.mk和sdk.mk文件,將工具代碼加入其中。

      4)進(jìn)入Android源碼根目錄,重新編譯源碼,最后使用“make snod”命令,重新編譯系統(tǒng)鏡像。編譯完成后重新刷機(jī),文件完整性檢測應(yīng)用成為系統(tǒng)應(yīng)用程序。

      4 系統(tǒng)功能測試

      系統(tǒng)功能測試環(huán)境由Android 9.0系統(tǒng)和Pixel2設(shè)備組成。Android 9.0系統(tǒng)內(nèi)置文件完整性檢測應(yīng)用程序,在Pixel2設(shè)備中運行并測試。

      系統(tǒng)應(yīng)用程序使用SM3密碼雜湊算法對初次登陸密鑰進(jìn)行哈希運算并保存,再一次登陸時,將輸入密鑰進(jìn)行SM3計算,生成的哈希值和初始登陸保存的哈希值進(jìn)行對比,如果哈希值一致,則登陸成功。進(jìn)入系統(tǒng)主界面,進(jìn)行創(chuàng)建文件、文件選擇、檢測和更新等4個功能。選取名為aaa、bbb、ccc、ddd和eee 等5個文件對系統(tǒng)功能進(jìn)行測試。

      1)創(chuàng)建文件

      在Android設(shè)備內(nèi)存中,創(chuàng)建名為Hash的內(nèi)存文件,具體操作如圖2所示。

      圖2 創(chuàng)建文件

      2)文件選擇

      通過“文件選擇”按鈕進(jìn)入文件管理器,選取5個測試文件進(jìn)行SM3計算,生成的哈希值自動保存在Hash文件中。具體實現(xiàn)的界面分別如圖3和圖4所示,生成的哈希值如表1所示。

      圖3 選取測試文件

      圖4 SM3計算

      表1 文件的哈希值

      3)檢測

      對5個文件進(jìn)行刪除、修改和增添,通過修改文件內(nèi)容進(jìn)行文件完整性檢測。重新對5個文件進(jìn)行SM3計算,生成新的哈希值如表2所示。檢測時,將新的哈希值和保存在Hash文件中哈希值進(jìn)行比較。系統(tǒng)第一次進(jìn)行檢測,生成上報文件,如圖5所示,再將比較結(jié)果記錄上報文件中,上報文件內(nèi)容如圖6所示。

      表2 文件的新哈希值

      圖5 生成的上報文件

      圖6 上報文件內(nèi)容

      4)更新

      檢測完成后,將內(nèi)存中的哈希值進(jìn)行更新,以便下次檢測時不再報告上次檢測結(jié)果。

      綜上系統(tǒng)功能測試結(jié)果,應(yīng)用程序中的創(chuàng)建文件、文件選擇、檢測和更新的功能都可實現(xiàn)并使用。從表1和表2可以看出,哈希值發(fā)生變化的文件有aaa、bbb、ccc、ddd和eee,上報文件記錄結(jié)果也是aaa、bbb、ccc、 ddd和eee,表明系統(tǒng)應(yīng)用在Android系統(tǒng)上運行良好且功能均可實現(xiàn)。

      5 系統(tǒng)性能測試及分析

      基于SM3的文件完成性檢測系統(tǒng)在Android Studio環(huán)境下使用C語言開發(fā)。服務(wù)器使用Ubuntu操作系統(tǒng),修改和編譯Android 9.0源碼,將應(yīng)用改為系統(tǒng)應(yīng)用。在Pixel2設(shè)備上對系統(tǒng)應(yīng)用進(jìn)行功能測試和效能測試。

      5.1 測試環(huán)境

      設(shè)備CPU的頻率隨著功耗時刻變化,將會對測試結(jié)果造成影響,因此在測試前,盡可能清除設(shè)備中的應(yīng)用進(jìn)程并關(guān)閉WiFi和藍(lán)牙服務(wù)等設(shè)置[15]。測試環(huán)境如表3所示。

      表3 測試環(huán)境

      Pixel2設(shè)備為高通驍龍835處理器、4 G 運行內(nèi)存和128 GB內(nèi)置存儲。

      5.2 測試結(jié)果

      基于SM3的文件完整性檢測系統(tǒng)在Android 9.0系統(tǒng)上運行,使用Pixel 2手機(jī)的測試結(jié)果為系統(tǒng)每秒可以計算43.73 MB的文件,即C語言實現(xiàn)的SM3算法對文件Hash計算的速率為43.73 M/s。在相同環(huán)境下,使用Java語言實現(xiàn)的SM3算法對文件Hash計算的速率為5.89 M/s,即每秒可計算大小為5.89 MB的文件。

      從測試結(jié)果中可以得出,使用C語言實現(xiàn)的SM3算法對文件Hash計算速率高于Java語言實現(xiàn)的速率。因此,文件完整性檢測系統(tǒng)使用C語言實現(xiàn)比較高效,可以提高文件檢測速率。

      6 結(jié)語

      基于SM3的Android文件完整性檢測系統(tǒng),利用SM3密碼雜湊算法計算文件的哈希值并保存,通過對比保存的哈希值和新生成的哈希值,判斷文件的完整性。通過修改Android開放源代碼項目,從Android系統(tǒng)內(nèi)核進(jìn)行文件完整性檢測。測試結(jié)果表明,該系統(tǒng)應(yīng)用內(nèi)置Android 9.0系統(tǒng)上運行良好,文件完整性檢測功能可實現(xiàn),使用C語言實現(xiàn)的SM3算法對文件Hash計算的速率優(yōu)于Java語言。

      猜你喜歡
      源碼哈希寄存器
      基于網(wǎng)頁源碼結(jié)構(gòu)理解的自適應(yīng)爬蟲代碼生成方法
      基于圖神經(jīng)網(wǎng)絡(luò)的軟件源碼漏洞檢測方法
      企業(yè)如何保護(hù)源碼
      Lite寄存器模型的設(shè)計與實現(xiàn)
      分簇結(jié)構(gòu)向量寄存器分配策略研究*
      基于數(shù)據(jù)結(jié)構(gòu)教輔系統(tǒng)的實驗課程改革
      基于OpenCV與均值哈希算法的人臉相似識別系統(tǒng)
      基于維度分解的哈希多維快速流分類算法
      基于同態(tài)哈希函數(shù)的云數(shù)據(jù)完整性驗證算法
      一種基于Bigram二級哈希的中文索引結(jié)構(gòu)
      横山县| 罗城| 黄龙县| 博乐市| 张家口市| 西畴县| 思南县| 伊吾县| 安丘市| 思南县| 梅河口市| 东乌珠穆沁旗| 阳谷县| 改则县| 西畴县| 新竹市| 连江县| 岢岚县| 仪陇县| 德化县| 周至县| 宽甸| 永年县| 德清县| 南阳市| 香港 | 绵阳市| 珲春市| 金阳县| 蒲城县| 平定县| 五常市| 金溪县| 洛阳市| 四平市| 饶河县| 景宁| 若尔盖县| 惠州市| 安丘市| 渝中区|