亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種面向流式數(shù)據(jù)的實(shí)時(shí)摘要生成方法與流程

文檔序號:11134130閱讀:1022來源:國知局
一種面向流式數(shù)據(jù)的實(shí)時(shí)摘要生成方法與制造工藝

本發(fā)明涉及數(shù)據(jù)流識別領(lǐng)域,是一種面向流式數(shù)據(jù)的實(shí)時(shí)摘要生成方法。



背景技術(shù):

隨著網(wǎng)絡(luò)流量不斷增加,識別流量中的數(shù)據(jù)對于數(shù)據(jù)防泄漏(Data Leakage Protection,DLP)、安全防御等需求越來越重要。例如從網(wǎng)絡(luò)流量中識別木馬、病毒、色情視頻和內(nèi)部文件等,如果能夠在傳輸過程中進(jìn)行識別,可以在早期進(jìn)行審計(jì)和處置。

要識別流量中的數(shù)據(jù),一般方法是對網(wǎng)絡(luò)中的數(shù)據(jù)生成摘要。但是網(wǎng)絡(luò)流量中存在大量復(fù)雜的應(yīng)用協(xié)議處理情況,如在線視頻播放、網(wǎng)盤文件下載等,這種數(shù)據(jù)存在大量亂序以及不完整捕獲的情況。

當(dāng)前對數(shù)據(jù)生成摘要的方法,例如MD5、SHA算法等,由于在數(shù)據(jù)發(fā)生改變的時(shí)候會(huì)產(chǎn)生雪崩效應(yīng),因此無法應(yīng)用于識別相似文件的場景。

傳統(tǒng)的模糊哈希算法采用分片哈希的思想,用一個(gè)弱哈希函數(shù)(rolling hash,rh)計(jì)算一定長度的連續(xù)字節(jié)的哈希值(計(jì)算長度稱為分片計(jì)算窗口,以下用window表示),當(dāng)弱哈希值滿足分片條件時(shí),就在這個(gè)位置對數(shù)據(jù)進(jìn)行分片。

分片條件決定了平均分片數(shù)量,計(jì)算方法如公式1,2所示,bmin取3,n為數(shù)據(jù)長度,S取64

rh%binit=binit-1 公式2

之后再使用一個(gè)強(qiáng)哈希函數(shù)(mapping hash或strong hash)對每個(gè)分片計(jì)算一個(gè)哈希值,這樣文件局部發(fā)生變化只會(huì)影響一兩個(gè)分片的哈希值,而不會(huì)導(dǎo)致整個(gè)文件的哈希值完全發(fā)生改變。實(shí)踐上,可以利用其模糊哈希值的編輯距離,度量文件的相似度。

傳統(tǒng)的模糊哈希算法(Identifying almost identical files using context triggered piecewise hashing,2006)適用于離線數(shù)據(jù)的處理,但是對于正在傳輸?shù)牧魇綌?shù)據(jù),由于其存在數(shù)據(jù)缺損、亂序和重疊的情況,不能進(jìn)行應(yīng)用。



技術(shù)實(shí)現(xiàn)要素:

鑒于此,本發(fā)明提出了一種面向流式數(shù)據(jù)的實(shí)時(shí)摘要生成方法,是一種可以處理缺損、亂序、重疊的流式數(shù)據(jù)的摘要生成方法,即在數(shù)據(jù)缺損、亂序、重疊的情況下仍然能夠?qū)崟r(shí)生成摘要,該方法適用于從網(wǎng)絡(luò)流量中檢測文件,可應(yīng)用于病毒檢測、入侵檢測、數(shù)據(jù)防泄露、網(wǎng)絡(luò)內(nèi)容審查、數(shù)字取證、數(shù)字版權(quán)保護(hù)等領(lǐng)域。

由于本發(fā)明的方法是面向流式數(shù)據(jù)的,因此發(fā)明人將本發(fā)明中涉及到的算法簡稱為流式模糊哈希(Stream Fuzzy Hash,簡稱SFH)算法,對應(yīng)地,該算法處理的文件對象中的一個(gè)數(shù)據(jù)分片則稱為流式模糊哈希計(jì)算上下文(以下簡稱計(jì)算上下文)。

為了實(shí)現(xiàn)上述目的,本發(fā)明采用以下技術(shù)方案:

一種面向流式數(shù)據(jù)的實(shí)時(shí)摘要生成方法,包括:

1)更新流式輸入的每個(gè)數(shù)據(jù)塊左鄰的計(jì)算上下文,如果數(shù)據(jù)塊沒有左鄰,則將其作為初始化的計(jì)算上下文,將更新后的計(jì)算上下文保存到區(qū)間索引;

2)在區(qū)間索引中查找已輸入數(shù)據(jù)的計(jì)算上下文,對相鄰的計(jì)算上下文進(jìn)行合并;

3)遍歷區(qū)間索引,將其中的摘要值進(jìn)行拼接并輸出。

進(jìn)一步地,步驟1)中所述區(qū)間索引是指可以對數(shù)據(jù)偏移量進(jìn)行查找的數(shù)據(jù)結(jié)構(gòu),可以用任意常見查找結(jié)構(gòu)實(shí)現(xiàn),比如區(qū)間樹、鏈表、數(shù)組、堆、紅黑樹等。

進(jìn)一步地,步驟1)中更新流式輸入的每個(gè)數(shù)據(jù)塊左鄰的計(jì)算上下文的步驟包括:

1-1)保留數(shù)據(jù)塊的前w-1個(gè)字節(jié)到緩沖區(qū)中,其中w為弱哈希函數(shù)的滑動(dòng)窗口值(可設(shè)置為1字節(jié)以上),所述數(shù)據(jù)塊的起始位置記為s;

1-2)計(jì)算數(shù)據(jù)塊每一個(gè)字節(jié)的弱哈希值和強(qiáng)哈希值;

1-3)當(dāng)步驟1-2)計(jì)算得到的弱哈希值滿足分片條件,則找到重置點(diǎn)(reset point),

i.如果是上下文中的第一個(gè)重置點(diǎn),則s至重置點(diǎn)之間的部分稱為左截?cái)鄶?shù)據(jù),計(jì)算它的強(qiáng)哈希值,記為部分強(qiáng)哈希值pshv;

ii.如果不是第一個(gè),則新劃分出一個(gè)分片,記為該分片的強(qiáng)哈希值;

iii.更新s為分片結(jié)束后的下一字節(jié),回到步驟1-2);

1-4)當(dāng)當(dāng)次輸入數(shù)據(jù)中所有數(shù)據(jù)塊計(jì)算結(jié)束,將最后一個(gè)重置點(diǎn)到數(shù)據(jù)塊結(jié)束位置之間的數(shù)據(jù)稱為右截?cái)鄶?shù)據(jù),該部分的強(qiáng)哈希值稱為強(qiáng)哈希狀態(tài),記為shs。

進(jìn)一步地,步驟1-2)中,使用矩陣乘法運(yùn)算作為強(qiáng)哈希函數(shù)計(jì)算強(qiáng)哈希值,優(yōu)選伽羅華域(Galois Field)的矩陣乘法運(yùn)算。

進(jìn)一步地,步驟1-2)中可以使用Rolling Hash算法計(jì)算弱哈希值,步驟1-3)中分片條件可以讓弱哈希值滿足公式(2),也可以是特定末位數(shù)、特定數(shù)值等其它預(yù)設(shè)條件。

進(jìn)一步地,根據(jù)上述計(jì)算方法,二進(jìn)制流數(shù)據(jù)的強(qiáng)哈希值可以表示為以每位或特定位數(shù)為單位,映射成n階矩陣,并將映射后的矩陣按照在數(shù)據(jù)流中出現(xiàn)的順序相乘。

進(jìn)一步地,步驟2)中如果計(jì)算上下文的數(shù)據(jù)區(qū)間的左右值連續(xù)則判斷兩個(gè)計(jì)算上下文相鄰(比如[0:100]和[101:102])。

進(jìn)一步地,步驟2)中,對兩個(gè)相鄰的計(jì)算上下文進(jìn)行合并的方法包括以下步驟:

a)對計(jì)算上下文p和其右鄰n保存在緩沖區(qū)中的w-1個(gè)字節(jié),執(zhí)行更新操作(即上述步驟1-2)至1-4));

b)計(jì)算p的強(qiáng)哈希狀態(tài)值shs和n的部分強(qiáng)哈希值pshv的矩陣乘積;

c)如果p中不包含重置點(diǎn),則用該矩陣乘積更新p的強(qiáng)哈希狀態(tài)值shs,否則,用該矩陣乘積更新n的部分強(qiáng)哈希狀態(tài)值pshv;

e)使用矩陣乘法拼接經(jīng)步驟c)更新后的p和n的強(qiáng)哈希值。

進(jìn)一步地,步驟3)中,將摘要值進(jìn)行拼接的步驟包括:每個(gè)分片的強(qiáng)哈希值是一個(gè)n階矩陣,矩陣中的每個(gè)元素是一個(gè)m bit數(shù)值,將這個(gè)矩陣的n*n個(gè)元素進(jìn)行拼接,形成一個(gè)n*n*m bit的值,再通過截取或映射成為一個(gè)或多個(gè)字節(jié)的字符。

本發(fā)明主要從以下兩個(gè)方面對模糊哈希算法進(jìn)行改進(jìn):

1)流式摘要方法。將亂序的流式數(shù)據(jù)塊,轉(zhuǎn)化為可獨(dú)立處理的計(jì)算上下文,并用區(qū)間索引組織起來,實(shí)現(xiàn)對亂序數(shù)據(jù)的實(shí)時(shí)計(jì)算。

2)對內(nèi)存占用的改進(jìn)。使用矩陣乘法運(yùn)算作為強(qiáng)哈希函數(shù),來減少原始文件緩存。因其具有滿足結(jié)合律但不滿足交換律的性質(zhì),可以將分片前的數(shù)據(jù)的計(jì)算為矩陣乘積的方式,既減少內(nèi)存,又降低了哈希沖突率。由于矩陣乘法滿足結(jié)合律,在window取值為7的實(shí)施例中,因此可以只保存前6個(gè)字節(jié)作為左邊界值mbuffer[window size-1],將第7個(gè)字節(jié)到第一個(gè)重置點(diǎn)的強(qiáng)哈希值作為左中間狀態(tài)值LFS(Left State)保存下來,這和直接緩存原始數(shù)據(jù)相比,大大減少了內(nèi)存。

因此,本發(fā)明主要具備以下四個(gè)優(yōu)點(diǎn):

1)能夠?qū)α魇綌?shù)據(jù)進(jìn)行實(shí)時(shí)摘要,將原本只能適用于完整數(shù)據(jù)的模糊哈希算法,引入多個(gè)中間狀態(tài)和區(qū)間數(shù)據(jù)索引,滿足實(shí)時(shí)計(jì)算亂序、重疊的數(shù)據(jù)塊的能力;

2)能夠?qū)θ睋p(即不完整)的數(shù)據(jù)進(jìn)行摘要,保留與完整數(shù)據(jù)的相關(guān)性;

3)計(jì)算中幾乎不需要緩存數(shù)據(jù),降低內(nèi)存占用;

4)只需要對數(shù)據(jù)進(jìn)行一次計(jì)算就能夠生成長度合適的摘要值。

綜上,本發(fā)明采用存儲中間計(jì)算結(jié)果的方法進(jìn)行流式數(shù)據(jù)摘要計(jì)算,能夠處理數(shù)據(jù)缺損、亂序和重疊的情況,并且矩陣乘法運(yùn)算作為強(qiáng)哈希算法減少內(nèi)存占用,使得本發(fā)明能夠在內(nèi)存集約的情況下實(shí)時(shí)計(jì)算流式數(shù)據(jù)摘要。

附圖說明

圖1表示本發(fā)明流式數(shù)據(jù)處理結(jié)構(gòu)示意圖。

圖2表示本發(fā)明流式模糊哈希摘要生成示意圖。

具體實(shí)施方式

在SFH算法中,一個(gè)輸入的數(shù)據(jù)塊,如圖1所示可能被分割成3個(gè)部分:

1)分片,是兩個(gè)重置點(diǎn)間的數(shù)據(jù),可以直接計(jì)算出該分片的模糊哈希值;

2)左截?cái)鄶?shù)據(jù),是從數(shù)據(jù)塊起始到第一個(gè)重置點(diǎn)之間的數(shù)據(jù),不能直接計(jì)算出模糊哈希值,需要保留前w-1個(gè)字節(jié)的數(shù)據(jù)在緩沖區(qū)中,可以計(jì)算剩余字節(jié)的矩陣乘積(left state);

3)右截?cái)鄶?shù)據(jù),是從數(shù)據(jù)塊中最后一個(gè)重置點(diǎn)到數(shù)據(jù)結(jié)束位置之間的數(shù)據(jù),它是尚未到完全到達(dá)的分片的一部分,不能直接計(jì)算出模糊哈希值,可以計(jì)算出部分矩陣乘積(mapping hash state);

完整的處理流程主要包含以下幾個(gè)基本操作(下文中的乘法、乘積均指矩陣乘法):

1)更新操作,輸入是一個(gè)數(shù)據(jù)塊和其左鄰的計(jì)算上下文,如果數(shù)據(jù)塊沒有左鄰(當(dāng)偏移量為0或亂序時(shí)),則是一個(gè)剛初始化的計(jì)算上下文。

對于一個(gè)輸入數(shù)據(jù)塊,s為數(shù)據(jù)塊起始位置,具體過程如下:

a)保留前w-1個(gè)字節(jié)到緩沖區(qū)中;

b)對數(shù)據(jù)塊的每一個(gè)字節(jié),計(jì)算其弱哈希值和強(qiáng)哈希值;

c)當(dāng)弱哈希值滿足分片條件(公式2),則找到重置點(diǎn)。

i.如果是上下文中的第一個(gè)重置點(diǎn),記為部分強(qiáng)哈希值(partial strong hash value,縮寫為pshv);

ii.如果不是第一個(gè),則新劃分出一個(gè)分片,記為該分片的強(qiáng)哈希值(strong hash value of slices);

iii.更新s為分片結(jié)束后的下一字節(jié),回到步驟b);

d)當(dāng)當(dāng)次輸入數(shù)據(jù)中所有數(shù)據(jù)塊計(jì)算結(jié)束,將最后一個(gè)重置點(diǎn)到數(shù)據(jù)塊結(jié)束位置之間的數(shù)據(jù)稱為右截?cái)鄶?shù)據(jù),該部分的強(qiáng)哈希值記為強(qiáng)哈希狀態(tài)(strong hash state,縮寫為shs)。

采用矩陣乘法運(yùn)算作為強(qiáng)哈希函數(shù)計(jì)算強(qiáng)哈希值時(shí),二進(jìn)制流數(shù)據(jù)流的哈希值可以強(qiáng)哈希值可以表示為以每位或特定位數(shù)為單位,映射成n階矩陣,并將映射后的矩陣按照在數(shù)據(jù)流中出現(xiàn)的順序相乘。

所述數(shù)據(jù)流中重置點(diǎn)的判斷條件為,每w個(gè)字節(jié)計(jì)算一個(gè)弱哈希值,當(dāng)?shù)贸龅娜豕V禎M足分片條件后,即為重置點(diǎn)(reset point)。

2)合并操作,對區(qū)間索引判斷為相鄰的兩個(gè)相鄰的計(jì)算上下文,p和p的右

鄰n進(jìn)行合并。具體過程如下:

a)對p和n保存在緩沖區(qū)中的w-1個(gè)字節(jié),執(zhí)行更新操作;

b)計(jì)算p的強(qiáng)哈希狀態(tài)值shs和n的部分強(qiáng)哈希值pshv的矩陣乘積;

c)如果p中不包含重置點(diǎn),則用該矩陣乘積更新p的強(qiáng)哈希狀態(tài)值shs;否則,用該矩陣乘積更新p的部分強(qiáng)哈希狀態(tài)值pshv;

d)使用矩陣乘法拼接經(jīng)步驟c)更新后的p和n的強(qiáng)哈希值。

3)生成最終摘要值

當(dāng)滿足計(jì)算結(jié)束條件時(shí),遍歷區(qū)間索引,將其中的摘要值進(jìn)行拼接并輸出,如圖2所示,其中,Seg1,Seg2…Segn中每一個(gè)Seg代表一個(gè)計(jì)算上下文,[l1,r1],[l2,r2]…[ln,rn]中的每一個(gè)代表區(qū)間索引里面的一個(gè)區(qū)間。每個(gè)分片的強(qiáng)哈希值是一個(gè)n階矩陣,矩陣中的每個(gè)元素是一個(gè)m bit數(shù)值,將這個(gè)矩陣的n*n個(gè)元素進(jìn)行拼接,形成一個(gè)n*n*m bit的值,再通過截取或映射成為一個(gè)或多個(gè)字節(jié)的字符,輸出形式類似abcd1234[0:30000],方括號內(nèi)為計(jì)算摘要的數(shù)據(jù)的偏移量信息。

上述步驟中的1)和2)是本發(fā)明的核心點(diǎn),對于每一個(gè)Segi,逐字節(jié)計(jì)算其弱哈希值和強(qiáng)哈希值,將原始數(shù)據(jù)轉(zhuǎn)化成存儲在區(qū)間索引中的上下文。

以總大小149GB,包含7998個(gè)文件的數(shù)據(jù)集為例。經(jīng)測試本發(fā)明在亂序輸入和順序輸入兩種情況下,計(jì)算出的摘要結(jié)果一致。順序計(jì)算時(shí),花費(fèi)52min,速度約為47.75MB/s,內(nèi)存占用峰值1.25kB;亂序計(jì)算時(shí),花費(fèi)57min,速度約為43.8MB/s,內(nèi)存占用峰值310kB??傮w滿足實(shí)際的應(yīng)用需求。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
1