董本松,趙榮彩,張 恒
(1.中原工學(xué)院 計算機學(xué)院,河南 鄭州 450007;2.中原工學(xué)院 前沿信息技術(shù)研究院,河南 鄭州 450007)
當(dāng)前,很多數(shù)據(jù)的存儲和傳輸都經(jīng)過各種方式加密[1],使數(shù)據(jù)更加安全。但是,加密口令一旦丟失,將給用戶帶來巨大的損失;與此同時,敵對分子也會利用各種加密手段,隱藏不法行為信息,給安全部門及時獲取有效情報帶來了挑戰(zhàn)。隨著加密算法的進步以及密鑰位數(shù)的不斷增加,口令恢復(fù)的計算規(guī)模呈指數(shù)級增長[2]。針對大規(guī)模計算問題,需要一種新型的高性能口令恢復(fù)方案,以實現(xiàn)大規(guī)模計算資源的動態(tài)聚合,進而實現(xiàn)對密數(shù)據(jù)的高效分析與恢復(fù)。
國內(nèi)外許多學(xué)者對Office口令恢復(fù)進行了大量的研究,開發(fā)了許多實用的恢復(fù)工具。AOPR(advanced office password recovery)單機版是一款專業(yè)的Office口令恢復(fù)工具,在口令恢復(fù)過程中使用CPU,但不支持GPU加速。EDPR(Elcomsoft distributed password recovery)是一款商用的口令恢復(fù)工具,支持GPU加速,但是具有平臺局限性,僅能恢復(fù)Windows上的軟件程序和文件。另外,從經(jīng)濟成本的角度來看,該軟件完成一次恢復(fù)代價較高。Hashcat自稱是世界速度最快、完全免費且開源的分布式口令恢復(fù)工具,但并不支持在SW26010眾核處理器上部署。如文獻[3-9]所示,盡管學(xué)者們對Office口令恢復(fù)做了大量的研究工作,但是口令恢復(fù)在吞吐量、效率、開銷和速度方面仍有改進的空間。
為了解決口令恢復(fù)的大規(guī)模計算問題,該文提出了基于申威眾核處理器的Office口令恢復(fù)優(yōu)化方法。通過實驗對該方法的正確性、有效性進行了分析和驗證。實驗結(jié)果表明,該方法具有并行性強、恢復(fù)速度快、吞吐量大等特點。從個人安全層面來看,有效解決了因遺忘口令造成重要數(shù)據(jù)丟失的問題。從國家安全層面上來看,可以幫助安全部門從大規(guī)模數(shù)據(jù)中迅速獲取有效信息,對危害民族團結(jié)和國家安全的行為進行嚴厲打擊。
該文完成了以下工作:
(1)基于申威眾核處理器的一個主核,對Office口令恢復(fù)程序進行了一系列的分析和測試,找出了Office口令恢復(fù)程序的性能瓶頸;
(2)結(jié)合申威眾核處理器的特點,提出了三種Office口令恢復(fù)并行機制。如加速循環(huán)并行化、優(yōu)化全局訪存操作、提高數(shù)據(jù)傳輸效率;
(3)實現(xiàn)了申威眾核處理器的并行SW-Office口令恢復(fù)并進行了全面評估。實驗結(jié)果表明,基于申威眾核處理器的Office口令恢復(fù)程序具有良好的加速比。
與傳統(tǒng)多核處理器相比,國產(chǎn)自主可控申威眾核處理器具有不可替代的優(yōu)勢。SW26010眾核處理器采用具有自主知識產(chǎn)權(quán)的申威64位RISC核心指令集和片上異構(gòu)融合架構(gòu),構(gòu)建片上眾核多維并行數(shù)據(jù)通信和層次化存儲體系,有效地緩解了眾核處理器“通信墻”和“存儲器墻”兩大難題[10]。主核和從核的頻率均為1.45 GHz,主核和從核均支持256位向量化指令,峰值性能每秒超過3萬億次雙精度浮點運算,優(yōu)異的性能優(yōu)勢為研發(fā)提供了硬件基礎(chǔ)。
圖1顯示了SW26010異構(gòu)眾核處理器的體系結(jié)構(gòu)。它由4個核組,共260個核心組成,其中每個核組包含一個運算控制核心(management processing element,MPE)和一個運算核心陣列(computer processing elements,CPEs)。運算核心陣列由64個運算核心組成,并且運算核心之間是獨立的,每個運算核心都有一個獨立且容量為64 KB的局部存儲(local direct memory,LDM),LDM與主存之間支持以直接內(nèi)存訪問(direct memory access,DMA)方式傳輸數(shù)據(jù)。運算控制核心作為通用處理器核心,負責(zé)分配任務(wù),協(xié)調(diào)運算單元;64個運算核心作為加速計算核心,用來加速代碼中計算密集部分。此外,運算核心與運算核心之間支持以寄存器通信方式進行通信。通過合理的硬件結(jié)構(gòu)布局,SW26010眾核處理器不僅能有效地執(zhí)行各種哈希算法,還能有效解決并行處理系統(tǒng)設(shè)計中所遇到的存儲、互連和任務(wù)調(diào)度等問題[11]。
圖1 SW26010異構(gòu)眾核處理器架構(gòu)
該文以O(shè)ffice DOC 2007加密文檔為例說明情況。口令恢復(fù)步驟主要包括6個模塊,如Office文檔解析、預(yù)處理、口令擴展、Hash迭代、AES128、對比驗證等。圖2顯示了口令恢復(fù)流程,對于口令恢復(fù)時間影響最大的是來自候選口令的散列計算,其計算量占申威小型超級計算機的96.7%。
圖2 Office DOC 2007加密文檔口令恢復(fù)流程
Office口令恢復(fù)程序的主要計算包含Hash迭代、AES128。Hash的高次迭代是口令恢復(fù)的關(guān)鍵,主要通過SHA1高速迭代運算5萬次,每一次迭代包含了80個子循環(huán)運算,最后生成160位的消息摘要。AES128是以Hash高次迭代的結(jié)果和部分驗證串作為輸入,執(zhí)行口令恢復(fù)操作,主要完成對字符串的拼接、比較、AES加解密等運算。
該文首先在SW26010眾核處理器的一個主核上移植實現(xiàn)了Office口令恢復(fù)程序。通過插樁方式對程序中各函數(shù)的運行時間進行測試和統(tǒng)計,找出運行時間位于前列的熱點函數(shù)??s短運行時間、提高運行速度是程序并行化的目的。程序中最耗時的是循環(huán)迭代計算部分,解決方法是將循環(huán)迭代步分布到多個不同的從核中同時進行計算[10],由主核負責(zé)分配任務(wù),從核負責(zé)計算任務(wù),合理地分配資源,使其效率最大化。
圖3 SW-Office代碼熱點分析
如圖3所示,Office口令恢復(fù)程序的熱點函數(shù)主要集中在Hash迭代、AES128等模塊。因此,該文分析了Office口令恢復(fù)程序的性能瓶頸,并基于國產(chǎn)自主可控平臺,提出了加速循環(huán)并行化、優(yōu)化全局訪存操作、提高數(shù)據(jù)傳輸效率等優(yōu)化方法。同時,結(jié)合申威眾核處理器的高效并行執(zhí)行能力,實現(xiàn)了并行SW-Office口令高效恢復(fù)。
為了解決1.3節(jié)中提出的性能瓶頸問題,該文采用申威OpenACC進行二次代碼移植開發(fā),充分利用申威平臺的并行機制進行深度并行優(yōu)化。以單核組版本為基礎(chǔ),分析驗證優(yōu)化方法的正確性和有效性。
根據(jù)SW26010眾核處理器的體系結(jié)構(gòu)設(shè)計,首先充分發(fā)揮SW26010從核的計算性能,將程序計算比較密集的部分映射到從核計算。申威OpenACC的研發(fā)是為了解決共享內(nèi)存架構(gòu)下的片內(nèi)眾核計算并行化問題[12]。申威OpenACC支持gang、worker、vector三級并行機制。gang是粗粒度并行,worker是細粒度并行,vector是在SIMD或向量操作的指令級并行。通過對Office口令恢復(fù)程序的相關(guān)性分析和測試發(fā)現(xiàn),該程序中存在循環(huán)嵌套函數(shù),可利用申威OpenACC三級并行優(yōu)化,但循環(huán)嵌套函數(shù)中存在直接和間接不可眾核并行的部分。直接不可眾核并行的部分是無法處理的,而間接不可眾核并行的部分是可以通過技術(shù)處理的,使其能夠成為眾核并行的部分,因此在循環(huán)嵌套函數(shù)中,可直接循環(huán)并行化的部分相對較少。在程序設(shè)計過程中,如果程序完全依賴主核完成計算,在性能上將無法達到理想的效果,同時也嚴重浪費了SW26010從核的設(shè)計功能。因此,該文充分利用SW26010的從核計算機制,采用申威OpenACC三級并行優(yōu)化,以主從加速并行模式執(zhí)行程序,主核主要完成不可眾核并行部分的計算以及通信,將開銷較大的熱點循環(huán)函數(shù)映射到從核加速并行計算,如算法1所示。
算法1:加速循環(huán)并行化。
Input:PW位數(shù)上限,字符種類上限。
Output:統(tǒng)計每一個字符出現(xiàn)的次數(shù)。
1. Begin
//初始化markov_stats_buf,獲取第一個位置的字符值
2. #pragma acc parallel local(i,j,k)
3. #pragma acc loop gang
4. for i=0 to SP_PW_MAX by 1 do
5. #pragma acc loop worker
6. for j=0 to CHARSIZ by 1 do
7. #pragma acc loop vector
8.for k=0 to CHARSIZ by 1 do
9.*out++ += *in++;
//輸出每一位字符出現(xiàn)的次數(shù)
10.end for
11. end for
12. end for
13. End
如算法1所示,通過使用申威OpenACC三級并行機制,加速循環(huán)并行化將開銷較大的熱點循環(huán)函數(shù)映射到64個計算從核上,每個從核由一個線程worker執(zhí)行。實驗結(jié)果表明,該方法以單核組為基礎(chǔ),驗證了該方法的正確性和有效性,通過運行64個從核的循環(huán)并行函數(shù),較1個主核性能提高了約36倍。然而,由于整個程序可直接循環(huán)并行化的部分相對較少,所以提升的效果并未呈現(xiàn)出64核的理想趨勢,該實驗的結(jié)果與主核相比,SW-Office口令恢復(fù)整體性能提高了約2.68倍。
利用64個計算從核后,充分利用從核64 KB局部存儲,減少或避免從核直接訪問主存。從核對主存的訪問通常分為兩種方式,一種是通過全局離散式(global load/store,gld/gst)訪問主存,從核直接訪問主存獲取計算所需的數(shù)據(jù),這種訪問方式延遲很大,對程序的性能有一定的影響。另一種是通過DMA批量式訪問主存,從核訪問LDM的延遲很小,采用DMA傳輸方式,首先將從核計算所需的數(shù)據(jù)批量式地取到LDM中,當(dāng)從核進行計算時,直接訪問LDM獲取所需的數(shù)據(jù),從而大大減少數(shù)據(jù)的訪存延遲,保證程序的性能。使用申威OpenACC制導(dǎo)語句訪問主存時,都是通過DMA批量式訪問方式,如果未指定制導(dǎo)語句,則默認采用全局離散訪問方式。1條gld指令的延遲約為177個周期,是1次訪問便箋存儲器(scratch pad memory,SPM)操作的44倍,屬于低效的訪存操作。另外,當(dāng)64個從核同時發(fā)起gld/gst指令時,這些全局訪存指令將排隊依次執(zhí)行[13],這會極大地降低并行效率,導(dǎo)致更多的資源浪費,因此需要盡量減少冗余的gld/gst指令。
在性能分析工具中,penv_slave2_gld_count接口函數(shù)可以收集中間代碼中的gld/gst指令數(shù),幫助用戶發(fā)現(xiàn)冗余指令。接口函數(shù)代碼如下所示:
//主核代碼部分,初始化接口
penv_slave2_gld_init();
?
//從核函數(shù)調(diào)用
?
//從核代碼部分,統(tǒng)計接口
penv_slave2_gld_count(&ic1);
?
penv_slave2_gld_count(&ic2).
在使用了penv_slave2_gld_count接口函數(shù)后,在程序中發(fā)現(xiàn)冗余的gld/gst指令,主要是對保存在主存上的指針進行了直接的訪問,從而導(dǎo)致程序的性能受到一定的影響。面對這種情況,首先在SPM上重新聲明一個局存指針;然后在代碼的初始化部分直接將地址賦值給SPM上的局存指針;最后,所有的指針操作直接訪問SPM,而不是通過gld/gst訪問主存,從而避免了從核以gld/gst方式直接訪問主存。在單核組條件下,該方法得到了有效的驗證,在加速循環(huán)并行化的基礎(chǔ)上,SW-Office口令恢復(fù)整體性能進一步提高了約1.73倍。
最后,通過提升DMA傳輸帶寬來提高數(shù)據(jù)傳輸效率。對全局訪存操作進行優(yōu)化后,由于從核上的LDM容量有限,無法直接一次性將計算數(shù)據(jù)全部拷貝到加速線程LDM中存儲,導(dǎo)致循環(huán)中涉及的數(shù)據(jù)往往無法批量式傳輸,因此只能按照單次循環(huán)涉及的計算數(shù)據(jù)進行傳輸,如果不能有效地優(yōu)化數(shù)據(jù)傳輸[14],則無法提高數(shù)據(jù)傳輸效率。
根據(jù)SW26010眾核處理器的體系結(jié)構(gòu)設(shè)計,優(yōu)化數(shù)據(jù)傳輸需要合理地利用64 KB的LDM。LDM的設(shè)計是為了減少訪存的延遲,將計算過程中所涉及的數(shù)據(jù)傳輸至LDM的SPM上,通過SPM存儲方式來減少Cache實現(xiàn)的控制開銷,同時還避免眾多運算核心間一致性處理帶來的設(shè)計復(fù)雜性和性能下降[15]。為了解決因數(shù)據(jù)較大而無法一次性傳輸至LDM中存儲的問題,該文利用申威OpenACC中的循環(huán)分塊子句tile。tile制導(dǎo)語句將計算所需的數(shù)據(jù)按指定的塊大小分割成兩重循環(huán),依次將從核計算中所需的數(shù)據(jù)傳輸至LDM中存儲,方便從核計算時直接訪問LDM獲取數(shù)據(jù),減少了從核直接訪問主存的延遲,解決了因計算數(shù)據(jù)較大而無法直接拷入LDM中存儲的問題,利用DMA實現(xiàn)批量式數(shù)據(jù)傳輸,從而提高數(shù)據(jù)的傳輸效率,如算法2所示:
算法2:提高數(shù)據(jù)傳輸效率。
Input:任意長度的明文。
Output:拷貝到SPM中,計算輸出160位的消息摘要。
1. Begin
2. #pragma acc parallel copy(inits, buffers) local(round, i)
//對輸入的任意明文進行分組,使得每一組的長度為512
3. #pragma acc loop tile(512)
4.for block=0 to blockcount by 1 do
5.getwtschedule(&inputstring[block*16],schedule);
//將16份子明文分組擴展到80份
6.#pragma acc loop tile(32)
7.for round=0 to 80 by 1 do
8. doRound(buffers,round,schedule[round]);
9.#pragma acc loop tile(32)
10.for i=0 to 5 by 1 do
11.buffers[i]+=inits[i]
12.inits[i]=buffers[i];
//輸出160位的消息摘要
13.end for
14. end for
15. end for
16. End
根據(jù)上述循環(huán)分塊的原理[16],采用申威OpenACC的制導(dǎo)語句tile對程序中的計算數(shù)據(jù)進行循環(huán)分塊。每一次tile分塊的大小即從核計算所需的數(shù)據(jù)大小,通過tile子句循環(huán)分塊后,將計算所需的數(shù)據(jù)提前存儲在LDM中,方便從核計算時直接訪問LDM獲取數(shù)據(jù)。當(dāng)tile尺寸增加時,執(zhí)行時間縮短,性能得到優(yōu)化。但是,由于SPM的空間容量有限,當(dāng)計算160位消息摘要時,循環(huán)分塊tile最大值為512。在單核組下對該方法進行了正確性和有效性的驗證,實驗結(jié)果表明,SW-Office口令恢復(fù)整體性能進一步提高了約1.61倍。
該文提供的實驗平臺是申威小型超級計算機系統(tǒng),系統(tǒng)由1臺管理節(jié)點計算機和1臺雙星服務(wù)器組成。其中雙星服務(wù)器包含1顆AST2400作為BMC(baseboard management controller)處理器,以及1顆SW26010申威眾核處理器作為1個計算節(jié)點。實驗環(huán)境具體如表1所示。
表1 實驗環(huán)境
以運行在1個主核上的SW-Office口令恢復(fù)程序作為基準測試,分別采用加速循環(huán)并行化、優(yōu)化全局訪存操作、提高數(shù)據(jù)傳輸效率三種優(yōu)化方法,在單核組下對主從核進行性能測試對比。測試的加密文檔選擇Office DOC 2007。每項測試實驗做二十次,取平均值,保留整數(shù)。圖4顯示了性能測試的結(jié)果。
圖4 SW-Office性能對比
如圖4所示,基于SW26010眾核處理器,通過加速循環(huán)并行化、優(yōu)化全局訪存操作、提高數(shù)據(jù)傳輸效率等三種方法對Office口令恢復(fù)進行了優(yōu)化。實驗結(jié)果表明,在加速循環(huán)并行化后,該程序的性能是原程序的約2.68倍;在優(yōu)化全局訪存操作后,性能是原程序的約4.62倍;在提高數(shù)據(jù)傳輸效率后,性能是原程序的約7.41倍。通過三種有效的方法優(yōu)化,使得SW-Office口令恢復(fù)性能得到了一定的提高,同時驗證了所提出的三種優(yōu)化方法的正確性,從而進一步證明了三種優(yōu)化方法對Office口令恢復(fù)程序的性能提高是有效的。
為了進一步評估優(yōu)化方法的正確性和有效性,將與市場上的Office口令恢復(fù)軟件進行性能對比分析。圖5顯示了AOPR單機版、EDPR、AccentSoft、Hashcat和SW-Office口令恢復(fù)程序的性能,選擇的測試文檔為Office DOC 2007。
圖5 各軟件的性能對比分析
如圖5所示,使用不同的口令恢復(fù)軟件對同一加密文檔進行口令恢復(fù)時,SW-Office的性能是AOPR單機版的約52.41倍,是EDPR的約10.76倍,是AccentSoft的約8.26倍,是Hashcat的約2.73倍。綜上可得,基于SW26010異構(gòu)眾核處理器的Office口令恢復(fù)程序的性能表現(xiàn)較好,進一步證明了該優(yōu)化方法的正確性和有效性。
該文基于SW26010異構(gòu)眾核處理器實現(xiàn)了Office口令高效恢復(fù)。基于SW26010異構(gòu)眾核處理器,分析了SW-Office口令恢復(fù)程序,找出了SW-Office的熱點函數(shù),利用了申威眾核處理器,提出了加速循環(huán)并行化、優(yōu)化全局訪存操作、提高數(shù)據(jù)傳輸效率等優(yōu)化方法。解決了計算效率低、延遲長等問題,改進了細粒度的線程級并行。為了驗證三種優(yōu)化方法的正確性和有效性,首先對優(yōu)化方法進行了實驗測試,并對其性能進行了統(tǒng)計,得到的性能結(jié)果優(yōu)于原程序。然后對優(yōu)化后的性能與市場上同類軟件的性能進行實驗對比和分析,進一步驗證了三種優(yōu)化方法的正確性和有效性,從而使SW-Office口令恢復(fù)程序的性能與市場上同類軟件相比有較好的性能改善,進而能夠較好地滿足實際的計算需求。
根據(jù)Amdahl定律可知,程序的加速比潛力取決于可以并行化部分的比例。目前只用了1個核組,驗證了所提出方法的正確性和有效性。接下來將擴充到4個核組,同時,再進行向量化,充分挖掘代碼的并行性,更有效地處理數(shù)據(jù)依賴性,充分發(fā)揮程序的加速比潛力,以盡可能發(fā)揮申威26010眾核處理器的各種并行機制,最大限度地提升程序的執(zhí)行效率。