陳 強(qiáng),譚 林,王云麗,肖 靖
(1.湖南大學(xué)電氣與信息工程學(xué)院,湖南 長沙 410082;2.湖南天河國云科技有限公司,湖南 長沙 410100)
隨著傳感器、嵌入式芯片和人工智能等技術(shù)的發(fā)展,工業(yè)生產(chǎn)過程時刻在產(chǎn)生海量的數(shù)據(jù),比如生產(chǎn)設(shè)備的運(yùn)行環(huán)境、機(jī)械設(shè)備的運(yùn)轉(zhuǎn)狀態(tài)、生產(chǎn)過程中的能源消耗、物料損耗等。使如此大規(guī)模的工業(yè)數(shù)據(jù)發(fā)揮其價值的關(guān)鍵環(huán)節(jié)在于數(shù)據(jù)的流通[1]。然而,如何使工業(yè)數(shù)據(jù)在不同企業(yè)間或同一企業(yè)的不同部門間安全、高效地流通是目前面臨的首要問題。數(shù)據(jù)交易是數(shù)據(jù)流通的具體表現(xiàn)形式之一。在傳統(tǒng)的數(shù)據(jù)交易系統(tǒng)中,一般存在數(shù)據(jù)擁有者、數(shù)據(jù)需求者及中間商3種角色。中間商的存在能給數(shù)據(jù)擁有者和數(shù)據(jù)需求者提供一個可信的交易環(huán)境,從而使雙方能有效地進(jìn)行數(shù)據(jù)交易[2,3]。然而,中間商的存在也給數(shù)據(jù)交易帶來了復(fù)雜的交易流程、較高的交易費(fèi)用以及信用依賴。因此,利用區(qū)塊鏈技術(shù)去中心化、不可篡改和可溯源的優(yōu)勢,可以通過工業(yè)區(qū)塊鏈交易系統(tǒng)提供可信的交易環(huán)境,使數(shù)據(jù)擁有者和數(shù)據(jù)需求者在沒有可信中間商的情況下依然能夠安全、有效地完成交易[4,5]。但是,由于區(qū)塊鏈本身的局限性,區(qū)塊容量較小不足以將大數(shù)據(jù)文件直接存儲到區(qū)塊。比如,在比特幣中一個區(qū)塊的最大容量只有6 MB左右,在Fabric中一個區(qū)塊的最大容量也只有100 MB左右。因此,一般的解決方法是將源數(shù)據(jù)的哈希值或者源數(shù)據(jù)的存儲地址等作為元數(shù)據(jù)存儲到區(qū)塊中,源數(shù)據(jù)本身則存儲在云端或本地,從而形成鏈上存元數(shù)據(jù)、鏈下存源數(shù)據(jù)的存儲方式[6-10]。但是,這樣的做法在工業(yè)區(qū)塊鏈中也存在以下2點(diǎn)不足:一是由于串行計算哈希值所需的時間隨著數(shù)據(jù)量的增大而線性增長,因此,串行計算這種方式在工業(yè)區(qū)塊鏈中難以滿足大規(guī)模數(shù)據(jù)高效上鏈的需求;二是由于源數(shù)據(jù)本身沒有存儲到區(qū)塊鏈,在交易時數(shù)據(jù)需求者無法確認(rèn)源數(shù)據(jù)是否被篡改。所以,本文將重點(diǎn)研究基于CUDA的數(shù)據(jù)并行處理方法來提高大規(guī)模工業(yè)數(shù)據(jù)上鏈的效率,并在數(shù)據(jù)交易雙方之間構(gòu)建有效的數(shù)據(jù)完整性驗(yàn)證模型,使數(shù)據(jù)需求者在交易時就能夠確認(rèn)源數(shù)據(jù)本身的完整性。
在區(qū)塊鏈系統(tǒng)中,將源數(shù)據(jù)存儲到區(qū)塊鏈時,其處理過程可以分為2個階段:第1階段包括業(yè)務(wù)數(shù)據(jù)處理和數(shù)據(jù)序列化等,第2階段包括廣播、打包和共識等。在業(yè)務(wù)數(shù)據(jù)處理步驟中,針對大數(shù)據(jù)文件一般是在CPU平臺上利用OpenSSL等標(biāo)準(zhǔn)庫計算其哈希值[11,12]。這些計算方法都是將大規(guī)模工業(yè)數(shù)據(jù)當(dāng)作一個整體串行計算其哈希值,計算速度相對較慢。在區(qū)塊鏈中,不論是將大數(shù)據(jù)文件當(dāng)作一個整體來獲得其哈希值,還是將大數(shù)據(jù)文件分塊來獲得其哈希值,只需計算所得的哈希值與大數(shù)據(jù)文件一一對應(yīng),上述2種方式獲得的哈希值都可作為元數(shù)據(jù)存儲到區(qū)塊鏈。因此,本文針對工業(yè)數(shù)據(jù)規(guī)模大的特點(diǎn),利用GPU在單指令多數(shù)據(jù)方面的計算優(yōu)勢[13-16],設(shè)計了基于CUDA的數(shù)據(jù)哈希值并行計算方法,對工業(yè)數(shù)據(jù)實(shí)施了分塊、哈希值并行計算等處理,以提高大規(guī)模工業(yè)數(shù)據(jù)哈希值的計算效率。
在傳統(tǒng)的數(shù)據(jù)完整性驗(yàn)證方案和基于區(qū)塊鏈的數(shù)據(jù)完整性驗(yàn)證方案中,都是持有簽名私鑰的數(shù)據(jù)擁有者或可信第三方向云服務(wù)商驗(yàn)證源數(shù)據(jù)的完整性[17-22]。然而,在工業(yè)區(qū)塊鏈數(shù)據(jù)交易系統(tǒng)中構(gòu)建的數(shù)據(jù)完整性驗(yàn)證模型中,持有簽名私鑰的數(shù)據(jù)擁有者是作為證明者出現(xiàn)的。因此,當(dāng)數(shù)據(jù)需求者向數(shù)據(jù)擁有者驗(yàn)證源數(shù)據(jù)的完整性時,數(shù)據(jù)擁有者可能利用簽名私鑰向數(shù)據(jù)需求者提供偽造的證明信息,因?yàn)殒溕洗嬖獢?shù)據(jù)、鏈下存源數(shù)據(jù)的方式只能確保元數(shù)據(jù)不被篡改,而無法使數(shù)據(jù)需求者在交易時確認(rèn)源數(shù)據(jù)本身的完整性。數(shù)據(jù)需求者只有在交易得到源數(shù)據(jù)本身后,才能驗(yàn)證源數(shù)據(jù)的完整性[23-25]。對于大數(shù)據(jù)文件的交易,如果數(shù)據(jù)擁有者不小心或故意篡改了源數(shù)據(jù),那么數(shù)據(jù)需求者付出較大的通信代價得到的卻是無用的數(shù)據(jù)。因此,如果在傳輸大規(guī)模工業(yè)數(shù)據(jù)前就能夠確認(rèn)其完整性,可以減小上述無意義交易帶來的通信代價。所以,本文在現(xiàn)有的數(shù)據(jù)完整性驗(yàn)證方案上,將簽名信息構(gòu)建成默克爾哈希樹并把默克爾根存儲到區(qū)塊鏈。在驗(yàn)證源數(shù)據(jù)完整性前,首先驗(yàn)證簽名信息,避免用偽造的簽名信息去驗(yàn)證源數(shù)據(jù)完整性,從而使數(shù)據(jù)需求者能夠有效地驗(yàn)證源數(shù)據(jù)的完整性。
綜上所述,通過基于CUDA的數(shù)據(jù)并行處理方法和兩方完整性驗(yàn)證模型可以實(shí)現(xiàn):
(1)通過合理的數(shù)據(jù)分塊、線程布局等手段,使大規(guī)模工業(yè)數(shù)據(jù)哈希值的計算效率可以得到較明顯的改善,提高了大規(guī)模工業(yè)數(shù)據(jù)上鏈的效率。
(2)在數(shù)據(jù)擁有者持有簽名私鑰的特殊情形下,通過區(qū)塊鏈不可篡改、可溯源等特性,數(shù)據(jù)需求者仍可對數(shù)據(jù)擁有者提供的源數(shù)據(jù)進(jìn)行有效的完整性驗(yàn)證。
基于SHA256哈希函數(shù)的原理,本文設(shè)計了基于CUDA的數(shù)據(jù)并行處理方法。SHA256函數(shù)的實(shí)現(xiàn)主要由以下4個算法構(gòu)成[26]:
(1)PaddingChars(·):首先對源數(shù)據(jù)進(jìn)行分塊,然后分別對數(shù)據(jù)塊進(jìn)行填充,使填充后的數(shù)據(jù)塊長度為512的倍數(shù),數(shù)據(jù)塊長度用二進(jìn)制位表示。
(2)Convert(·):將填充后的每個數(shù)據(jù)塊劃分成M組長度為512位的數(shù)據(jù),然后將每組數(shù)據(jù)轉(zhuǎn)換成16個32位的無符號整數(shù)。
(3)Expand(·):將16個32位無符號整數(shù)擴(kuò)展成64個32位的無符號整數(shù)。
(4)Compress(·):對每個數(shù)據(jù)塊循環(huán)M次,每次基于64個32位的無符號整數(shù)計算中間哈希值,循環(huán)結(jié)束后得到的中間哈希值即為最終的哈希值。
本文設(shè)計的基于CUDA的數(shù)據(jù)并行處理方法如算法1所示,主要設(shè)計思路如下所示:
(1)當(dāng)源數(shù)據(jù)的大小dataSize (2)當(dāng)dataSize≥dataSizeThreshold時,由于GPU內(nèi)存大小的限制,需要分批將源數(shù)據(jù)從主機(jī)端復(fù)制到GPU內(nèi)存。在每次將數(shù)據(jù)復(fù)制到GPU內(nèi)存后,對數(shù)據(jù)進(jìn)行分塊,基于數(shù)據(jù)塊大小dataBlockSize并發(fā)相應(yīng)的線程數(shù)并行計算數(shù)據(jù)塊哈希值、構(gòu)建默克爾哈希樹T1,并將T1從GPU內(nèi)存復(fù)制到主機(jī)端,對應(yīng)算法1第6~10步。 算法1基于CUDA的數(shù)據(jù)并行處理方法 Input:Source fileF。 Output:Merkle hash treeT1。 1:IfdataSize 2: Dividing source dataFintonblocks anddataBlockAmount=n; 3:fori=1 tondo Computing hash value of data blocks by CPU; endfor 4: Constructing Merkle hash treeT1by CPU; 5:else 6:fori=0 tocopyTimesdo 7: (1)Copy data from host memory to GPU device memory; (2)Dividing source dataFintonblocks anddataBlockAmount=n,threadAmount=n; (3)Parallelly employingnthreads to executePaddingChars(·),Convert(·),Expand(·)andCopmpress(·); 8:endfor 9: Constructing Merkle hash treeT1on GPU; 10: Copy hash values from GPU memory to host memory; 11:endif 12:returnMerkle hash treeT1. 影響本文設(shè)計的因素主要有以下3個:(1)源數(shù)據(jù)的大小dataSize;(2)GPU內(nèi)存的大小GPUMemorySize;(3)并行計算時的數(shù)據(jù)塊大小dataBlockSize,它與SHA256函數(shù)的原理、GPU的CUDA核心數(shù)量、共享內(nèi)存大小和寄存器文件大小等相關(guān)。 因素1源數(shù)據(jù)大小。 源數(shù)據(jù)大小dataSize直接決定是由CPU串行還是GPU并行來計算數(shù)據(jù)塊的哈希值。因?yàn)樵磾?shù)據(jù)在主機(jī)端和GPU之間復(fù)制需要通信時間,并且CPU單線程的運(yùn)算速度遠(yuǎn)遠(yuǎn)高于GPU單個線程的,所以,并不是所有大小的源數(shù)據(jù)都適合利用GPU來計算哈希值和構(gòu)建默克爾哈希樹。定義CPU計算數(shù)據(jù)塊哈希值并構(gòu)建默克爾哈希樹的時間為TCPU,對應(yīng)算法1中第1~4步的運(yùn)行時間;把源數(shù)據(jù)從主機(jī)端復(fù)制到GPU的時間為Th→GPU,對應(yīng)算法1中第7(1)步的運(yùn)行時間乘以copyTimes;利用GPU計算各個數(shù)據(jù)塊哈希值并構(gòu)建默克爾哈希樹的時間為TGPU,對應(yīng)算法1中第6~9步的運(yùn)行時間;將數(shù)據(jù)塊哈希值從GPU傳回主機(jī)端的時間是TGPU→h,對應(yīng)算法1中第10步的運(yùn)行時間。隨著源數(shù)據(jù)的增大,TCPU、Th→GPU、TGPU、TGPU→h都將增大,但是TCPU的增大速度大于TGPU的增大速度,并且TCPU遠(yuǎn)大于Th→GPU和TGPU→h。因此,當(dāng)源數(shù)據(jù)的大小dataSize超過閾值dataSizeThreshold時,式(1)所示的不等式將成立: TCPU>Th→GPU+TGPU+TGPU→h (1) 所以,當(dāng)源數(shù)據(jù)的大小dataSize 因素2GPU內(nèi)存大小。 由于GPU內(nèi)存大小GPUMemorySize的限制,當(dāng)源數(shù)據(jù)足夠大時,不能一次性把源數(shù)據(jù)從主機(jī)端復(fù)制到GPU內(nèi)存。定義每次可從主機(jī)端復(fù)制到GPU內(nèi)存的數(shù)據(jù)最大值為dataSizePerCopyMB。由SHA256函數(shù)原理可知,在執(zhí)行Expand(·)算法時需要的GPU內(nèi)存空間將達(dá)到最大值,此時,輸入數(shù)據(jù)占用的內(nèi)存空間為dataSizePerCopyMB,輸出數(shù)據(jù)占用的內(nèi)存空間為4×datasizePerCopyMB。由此可知,dataSizePerCopy應(yīng)滿足式(2): 5×dataSizePerCopy (2) 則將源數(shù)據(jù)復(fù)制到GPU內(nèi)存的次數(shù)CopyTimes如式(3)所示: copyTimes=ceil(dataSize/dataSizePerCopy) (3) 其中,ceil(·)函數(shù)表示向上取整。 因素3數(shù)據(jù)塊大小。 在利用GPU并行計算時,如何對源數(shù)據(jù)進(jìn)行分塊對哈希值的計算效率非常重要。如果分塊數(shù)量過少,將導(dǎo)致GPU中并行程度不夠,從而無法發(fā)揮GPU的并行計算優(yōu)勢;如果分塊數(shù)量過多,由于GPU硬件資源的限制,沒有足夠多的線程來支撐哈希值計算,反而會降低計算效率。在本文方法中,數(shù)據(jù)塊的大小dataBlockSize主要由SHA256函數(shù)的原理及GPU的硬件資源決定。 在SHA256函數(shù)原理方面,如何對數(shù)據(jù)塊進(jìn)行填充是關(guān)鍵。假設(shè)源數(shù)據(jù)F的長度L(L以二進(jìn)制位數(shù)量表示)為:L=512k+b,其中k,b都是非負(fù)整數(shù)。在執(zhí)行PaddingChars(·)算法時,對源數(shù)據(jù)F的填充分2種情形進(jìn)行: (1)情形1:如果 0 ≤b<448,則填充后的結(jié)果如圖1a所示。 首先,需要填充1個二進(jìn)制數(shù)1和448-b-1個二進(jìn)制數(shù)0。然后,再填充用64位二進(jìn)制數(shù)表示的源數(shù)據(jù)長度L。完成填充后,數(shù)據(jù)的長度L′=512(k+1)。 (2)情形2:如果 448≤b<512,則填充后的結(jié)果如圖1b所示。 首先,需要填1個二進(jìn)制數(shù)1和512-b-1+448 個二進(jìn)制數(shù)0。然后,再填充用64位二進(jìn)制數(shù)表示的源數(shù)據(jù)長度L。完成填充后,數(shù)據(jù)的長度L′=512(k+2)。 Figure 1 Schematic diagram after filling the source data 由此可知,填充后情形2比情形1多了512位數(shù)據(jù),在之后計算哈希值的過程中,每個數(shù)據(jù)塊執(zhí)行Convert(·)、Expand(·)和Compress(·)算法時都會多1次計算,并且每個數(shù)據(jù)塊多余的填充數(shù)據(jù)將占據(jù)更多的CPU或GPU內(nèi)存。所以,在進(jìn)行數(shù)據(jù)分塊時,數(shù)據(jù)塊的大小應(yīng)滿足情形1。 在GPU硬件資源方面,CUDA核心數(shù)量、寄存器文件的大小等都會限制并行計算中的線程數(shù)量,而線程的數(shù)量會直接影響源數(shù)據(jù)如何進(jìn)行分塊。在有限的硬件資源下,GPU并行計算性能的發(fā)揮主要依賴內(nèi)核網(wǎng)格和線程塊的配置。配置網(wǎng)格和塊的大小時的準(zhǔn)則主要有:(1)保持每個線程塊中線程數(shù)量是線程束大小的倍數(shù);(2)線程塊的數(shù)量要大于流式多處理器的數(shù)量,并且是流式處理器的倍數(shù),保障在GPU中有足夠多的并行。 本文設(shè)計的兩方數(shù)據(jù)完整性驗(yàn)證模型由數(shù)據(jù)建立和驗(yàn)證2個階段構(gòu)成。 源數(shù)據(jù)處理階段的流程如圖2所示。首先,利用本文提出的數(shù)據(jù)并行處理方法對源數(shù)據(jù)F進(jìn)行分塊,可以得到n個數(shù)據(jù)塊{m1,m2,…,mn},其中,mi∈ZP,1≤i≤n,Z為整數(shù)集,P為一個大素數(shù)。同時,利用該方法計算數(shù)據(jù)塊的哈希值并構(gòu)建默克爾哈希樹T1。默克爾哈希樹T1的構(gòu)建過程如下所示:(1)并行計算數(shù)據(jù)塊的哈希值;(2)將相鄰數(shù)據(jù)塊的哈希值兩兩拼接在一起再并行計算哈希值,如果拼接時哈希值的數(shù)量為奇數(shù),則對尾部的哈希值進(jìn)行復(fù)制;(3)循環(huán)第2步操作,直至得到最后1個哈希值默克爾根R1。 Figure 2 Flow chart of source data processing 然后,令e:G1×G1→G2為一個雙線性映射,其中,G1和G2為乘法循環(huán)群,g是G1的生成元。數(shù)據(jù)擁有者隨機(jī)選擇一個數(shù)α∈ZP,計算v=gα,并把α作為私鑰SK,v作為公鑰PK。接著,數(shù)據(jù)擁有者隨機(jī)選擇u∈G1,并計算數(shù)據(jù)塊{m1,m2,…,mn}的簽名信息Φ={σ1,σ2,…,σn},σi=(H(mi)·umi)α,i=1,2,…,n,H(mi)為第i個數(shù)據(jù)塊的哈希值,并對簽名信息構(gòu)建默克爾哈希樹T2,其構(gòu)建過程與T1相似,最終同樣可以得到其相應(yīng)的默克爾根R2。 最后,數(shù)據(jù)擁有者將源數(shù)據(jù)的元數(shù)據(jù)MetaData={g,v,R1,R2}存儲到區(qū)塊鏈上的智能合約SM中。 如圖3所示,在本文的完整性驗(yàn)證模型中,數(shù)據(jù)擁有者和數(shù)據(jù)需求者兩方實(shí)體分別扮演證明者和驗(yàn)證者角色。當(dāng)進(jìn)行數(shù)據(jù)完整性驗(yàn)證時,首先,數(shù)據(jù)需求者向數(shù)據(jù)擁有者發(fā)送挑戰(zhàn)信息Chal;然后,數(shù)據(jù)擁有者根據(jù)挑戰(zhàn)信息Chal計算相關(guān)證明信息Proof,并同時調(diào)用智能合約SM;最后,數(shù)據(jù)需求者根據(jù)數(shù)據(jù)擁有者返回的證明信息和元數(shù)據(jù)信息驗(yàn)證源數(shù)據(jù)的完整性。 Figure 3 Integrity verification of source data 數(shù)據(jù)需求者從集合{1,2,…,n}中隨機(jī)選擇c個元素,組成子集S={s1,s2,…,sc},其中1≤s1≤s2≤…≤sc≤n。對于每一個si∈S,在ZP中隨機(jī)選擇一個數(shù)vi與之對應(yīng),形成V={vs1,vs2,…,vsc}。首先,數(shù)據(jù)需求者將挑戰(zhàn)信息Chal={S,V}發(fā)送給數(shù)據(jù)擁有者,即圖3的步驟1。數(shù)據(jù)擁有者在接收到挑戰(zhàn)信息Chal后,根據(jù)式(4)計算μ和Δ: (4) 其中,mi為第i個數(shù)據(jù)塊,vi為隨機(jī)數(shù),H(mi)為第i個數(shù)據(jù)塊的哈希值,u為數(shù)據(jù)擁有者在建立階段選擇的隨機(jī)數(shù)。接著,數(shù)據(jù)擁有者調(diào)用存儲了元數(shù)據(jù)MetaData={g,v,R1,R2}的智能合約SM(即圖3的步驟2),并將證明信息Proof={H(mi),A1,Φ′,A2,Δ}發(fā)送給數(shù)據(jù)需求者(即圖3的步驟3),其中,s1≤i≤sc,H(mi)為第i個數(shù)據(jù)塊的哈希值;Φ′為數(shù)據(jù)塊的簽名信息子集,Φ′={σs1,σs2,…,σsc};A1為恢復(fù)默克爾根R1的輔助信息;A2為恢復(fù)默克爾根R2的輔助信息。A1和A2的具體含義如圖4所示。假設(shè)將源數(shù)據(jù)分為4個數(shù)據(jù)塊{m1,m2,m3,m4},基于這4個數(shù)據(jù)塊構(gòu)建默克爾哈希樹得到的默克爾根為R。在只擁有數(shù)據(jù)塊m2的情況下,由輔助信息A={H(m1),H34}恢復(fù)默克爾根R的計算過程如下所示: (1)由數(shù)據(jù)塊m2計算得到H(m2); (2)由H(m1)和H(m2)計算出H12; (3)由H12和H34可恢復(fù)得到默克爾根R。 Figure 4 Recovering Merkle root with auxiliary information 數(shù)據(jù)需求者在接收到證明信息Proof和元數(shù)據(jù)MetaData后進(jìn)行驗(yàn)證(即圖3的步驟4),其詳細(xì)的驗(yàn)證流程如圖 5所示。在第1步驗(yàn)證中,數(shù)據(jù)需求者根據(jù){H(mi),A1,A2}恢復(fù)默克爾根R′1和R′2,并判斷R′1和R′2是否與MetaData中的默克爾根R1和R2相等。如果不相等,則認(rèn)為證明信息是偽造的,證明信息無法證明源數(shù)據(jù)的完整性。如果相等,則繼續(xù)第2步驗(yàn)證,數(shù)據(jù)需求者根據(jù)數(shù)據(jù)塊的簽名信息子集Φ′={σs1,σs2,…,σsc}和V={vs1,vs2,…,vsc}通過式(5)計算σ: (5) 再根據(jù)證明信息Proof中的Δ和元數(shù)據(jù)中的{g,v},驗(yàn)證式(6): e(σ,g)=e(Δ,v) (6) 是否成立。如果成立則認(rèn)為數(shù)據(jù)是完整的,如果不成立則認(rèn)為源數(shù)據(jù)已經(jīng)被改動。式(6)中g(shù)是G1的生成元,v=gα是公鑰,這2個數(shù)據(jù)都存儲在區(qū)塊鏈上的智能合約SM中,是不可篡改的。σ是由數(shù)據(jù)需求者根據(jù)簽名信息Φ′和數(shù)據(jù)集V={vs1,vs2,…,vsc}計算所得。Δ是由數(shù)據(jù)擁有者根據(jù)挑戰(zhàn)信息Chal計算所得。 Figure 5 Flow chart of data integrity verification 此部分實(shí)驗(yàn)的主要目的是獲得本文并行處理方法中的參數(shù)dataSizeThreshold、threadAmount、copyTimes以及該方法的運(yùn)行效率。實(shí)驗(yàn)計算平臺的CPU和GPU信息如表 1所示。 由于GPU內(nèi)存大小為4 GB,由式(2)可知其應(yīng)滿足式(7): dataSizePerCopy≤819.2 (7) 因此,可以將dataSizePerCopy設(shè)置為700 MB。然后,由式(3)計算出將源數(shù)據(jù)由主機(jī)端復(fù)制 Table 1 Basic information of CPU and GPU 到GPU內(nèi)存的次數(shù)copyTimes,如式(8)所示: copyTimes=ceil(dataSize/700) (8) 當(dāng)源數(shù)據(jù)大于700 MB時,需要分copyTimes次處理源數(shù)據(jù)。當(dāng)每次處理相同大小的源數(shù)據(jù)時,并行處理方法所用時間幾乎相同。因此,本文在電網(wǎng)日常監(jiān)測數(shù)據(jù)中選取大小分別為 {26,54,86,118,152,209,253,306,352,402,453,506,549,608,658,692}(單位為MB)的源數(shù)據(jù)進(jìn)行分塊,其中152 MB以下以30 MB左右為步長,152 MB以上以50 MB左右為步長。26 MB~152 MB源數(shù)據(jù)的分塊大小dataBlockSize∈{10,50,100,150,200,…,950,1 000}(單位為KB),152 MB~692 MB源數(shù)據(jù)的分塊大小dataBlockSize∈{50,100,150,200,…,950,1 000,1 100,…,1 600}(單位為KB)。然后,對不同大小的分塊,利用基于OpenSSL的數(shù)據(jù)串行處理方法和基于CUDA的數(shù)據(jù)并行處理方法分別進(jìn)行100次運(yùn)算,得到每次運(yùn)算時間后去掉其中的最大值和最小值,再求取運(yùn)算時間的平均值。 2種方法的運(yùn)算時間如圖6所示。從圖6可知,當(dāng)源數(shù)據(jù)大小大于86 MB時,基于CUDA的數(shù)據(jù)并行處理方法的運(yùn)算時間小于基于OpenSSL的數(shù)據(jù)串行處理方法的運(yùn)算時間。所以,本文方法中的dataSizeThreshold設(shè)置為86 MB。當(dāng)dataSize≤86 MB時,選擇串行方法處理源數(shù)據(jù);當(dāng)dataSize≥86 MB時,選擇并行方法處理源數(shù)據(jù)。 基于圖6的運(yùn)行時間,本文所提出的并行處理方法相較于基于OpenSSL的數(shù)據(jù)串行處理方法的加速效率如圖7所示。顯然,源數(shù)據(jù)越大,基于CUDA的數(shù)據(jù)并行處理方法的加速效果越好。當(dāng)源數(shù)據(jù)大小大于253 MB時,加速效率在22%以上,并且在等于506 MB時,加速效率達(dá)到最大值27.7%。 Figure 6 Comparison of the running time of two methods Figure 7 Acceleration efficiency of CUDA-based data parallel processing method 當(dāng)源數(shù)據(jù)大小小于86 MB時,本文使用基于OpenSSL的串行處理方法。針對不同大小源數(shù)據(jù)的運(yùn)行結(jié)果如圖8所示,圖8中標(biāo)示了最短運(yùn)行時間。從圖8可知,對于不同大小的源數(shù)據(jù),該方法的運(yùn)行效率在數(shù)據(jù)塊大小為10 KB時較低,而在數(shù)據(jù)塊大于10 KB時運(yùn)行效率變化不大,因此dataBlockSize可根據(jù)實(shí)際需求設(shè)置為100 KB以上的任意值。 Figure 8 Running time of OpenSSL-based data serial processing method 當(dāng)源數(shù)據(jù)大小大于86 MB時,本文使用基于CUDA的并行處理方法。不同大小源數(shù)據(jù)的運(yùn)算結(jié)果如圖9所示,圖9中標(biāo)示了最短運(yùn)行時間。從圖9可知,當(dāng)dataBlockSize太小或者太大時,數(shù)據(jù)并行處理方法的運(yùn)行時間較長、效率較低。這是因?yàn)楫?dāng)源數(shù)據(jù)的分塊太小時會產(chǎn)生大量的數(shù)據(jù)塊,GPU硬件資源的限制導(dǎo)致無法支持過多的并行線程,使得運(yùn)行時間極速增加;當(dāng)數(shù)據(jù)塊太大時,并行線程太少導(dǎo)致無法發(fā)揮GPU并行計算的優(yōu)勢,也會使得效率較低。 Figure 9 Running time of CUDA-based data parallel processing method 根據(jù)圖9可以得到不同大小源數(shù)據(jù)的最佳dataBlockSize取值,因此針對不同源數(shù)據(jù)可以得到具體分塊策略,如圖10所示。例如,在區(qū)間(250,300]MB時,dataBlockSize設(shè)置為150 KB,對應(yīng)圖9b中253 M曲線的最少運(yùn)行時間的分塊大小為150 KB。依次類推能得到不同大小源數(shù)據(jù)的合適的分塊大小dataBlockSize。由不同大小的dataBlockSize可以計算出每次執(zhí)行基于CUDA的數(shù)據(jù)并行處理方法時使用的線程數(shù)量threadAmount,如式(9)所示: threadAmount=ceil(700(MB)/ dataBlockSize(KB)) (9) 其中,ceil(·)表示向上取整。 綜上所述,本文提出的并行處理方法,基于所用實(shí)驗(yàn)平臺,需將dataSizePerCopy設(shè)置為700 MB,即在源數(shù)據(jù)大于700 MB時分批傳輸?shù)紾PU端進(jìn)行處理。當(dāng)源數(shù)據(jù)大于86 MB時,在GPU端的運(yùn)行效率優(yōu)于在CPU端的運(yùn)行效率,因此將dataSizeThreshold設(shè)置為86 MB。針對不同大小的源數(shù)據(jù),數(shù)據(jù)分塊策略如圖10所示,根據(jù)不同大小的源數(shù)據(jù)選擇不同大小的分塊,從而配置不同的線程布局以獲得較好的運(yùn)行效率。 Figure 10 Blocking strategy of different source data for CUDA-based data parallel processing method 與傳統(tǒng)完整性驗(yàn)證不同的是,在本文的完整性驗(yàn)證中數(shù)據(jù)擁有者是持有簽名私鑰的。在不做保護(hù)措施的情形下,數(shù)據(jù)擁有者可以利用簽名私鑰偽造證明信息使完整性驗(yàn)證通過。因此,本文在圖5的第1步驗(yàn)證中,首先驗(yàn)證了簽名信息的默克爾根R2和R′2是否相等。如果不相等,那么我們就直接認(rèn)為源數(shù)據(jù)已經(jīng)被篡改。如果相等,那么可以確定簽名信息Φ′={σs1,σs2,…,σsc}是沒有被篡改的,為下一步驗(yàn)證提供了保證。 綜上所述,在數(shù)據(jù)擁有者持有簽名私鑰的特殊情形下,本文設(shè)計的數(shù)據(jù)完整性驗(yàn)證方案能夠在數(shù)據(jù)擁有者不小心或故意改動源數(shù)據(jù)的情況下發(fā)現(xiàn)數(shù)據(jù)變動,及時終止接下來無意義的交易步驟。在本文數(shù)據(jù)完整性驗(yàn)證方案中,若數(shù)據(jù)擁有者將數(shù)據(jù)存儲到云端而本地?zé)o備份時,只需將證明者替換成云服務(wù)提供者即可在數(shù)據(jù)需求者和云服務(wù)商之間對源數(shù)據(jù)進(jìn)行完整性驗(yàn)證。 針對工業(yè)數(shù)據(jù)規(guī)模大的特點(diǎn),本文提出了一種基于CUDA的數(shù)據(jù)并行處理方法。在源數(shù)據(jù)大小大于86 MB時,該方法針對不同大小的源數(shù)據(jù)利用給出的分塊策略,使運(yùn)行效率優(yōu)于基于OpenSSL的數(shù)據(jù)串行處理方法。并且,源數(shù)據(jù)越大,并行處理方法的運(yùn)行效率越好。同時,基于此方法提出的兩方完整性驗(yàn)證模型即使在數(shù)據(jù)擁有者持有私鑰的特殊情形下,數(shù)據(jù)需求者依然能夠在得到源數(shù)據(jù)之前、只得到元數(shù)據(jù)的情況下,有效地驗(yàn)證源數(shù)據(jù)的完整性,避免因傳輸無用數(shù)據(jù)而付出的通信代價。3 兩方數(shù)據(jù)完整性驗(yàn)證模型設(shè)計
3.1 建立階段
3.2 驗(yàn)證階段
4 結(jié)果分析與討論
4.1 數(shù)據(jù)文件哈希值計算對比實(shí)驗(yàn)及結(jié)果分析
4.2 兩方數(shù)據(jù)完整性驗(yàn)證模型安全性分析
5 結(jié)束語