背景技術(shù):
在線軟件存儲庫托管軟件開發(fā)者的代碼。在線軟件存儲庫協(xié)助項(xiàng)目共享、協(xié)作、版本控制等。軟件開發(fā)者可以將其代碼上傳到軟件存儲庫進(jìn)行共享。代碼可以存儲在公共存儲庫、半公共存儲庫、私有存儲庫等中。一些軟件包括用戶證書(例如,用于針對服務(wù)對用戶進(jìn)行認(rèn)證的證書)。用戶證書通常采用十六進(jìn)制數(shù)串的形式。不同服務(wù)的證書具有不同的區(qū)別特性(例如,長度、數(shù)字模式、已知數(shù)字等)。包括用戶證書的代碼應(yīng)當(dāng)僅被存儲而不被公開共享。
附圖說明
在下面的詳細(xì)描述和附圖中公開了本發(fā)明的各種實(shí)施例。
圖1是示出網(wǎng)絡(luò)系統(tǒng)的實(shí)施例的框圖。
圖2是示出服務(wù)器系統(tǒng)的實(shí)施例的框圖。
圖3是示出證書確定器的實(shí)施例的框圖。
圖4a是示出數(shù)據(jù)流的實(shí)施例的圖示。
圖4b是示出美國信息交換標(biāo)準(zhǔn)碼(例如,ascii)表的實(shí)施例的圖示。
圖5是示出用于檢測證書的過程的實(shí)施例的流程圖。
圖6是示出用于數(shù)據(jù)分塊器的過程的實(shí)施例的流程圖。
圖7是示出逐字節(jié)閾值化器的實(shí)施例的流程圖。
圖8是示出用于確定潛在證書符號的序列是否包括證書的過程的實(shí)施例的流程圖。
圖9a是示出數(shù)據(jù)流的實(shí)施例的圖示。
圖9b包括示出用于確定在最近n個數(shù)據(jù)塊中是否存在大于或等于最小證書長度的潛在證書符號的序列的過程的實(shí)施例的流程圖。
具體實(shí)施方式
本發(fā)明可以以多種方式實(shí)現(xiàn),包括被實(shí)現(xiàn)為過程;裝置;系統(tǒng);組合物;體現(xiàn)在計算機(jī)可讀存儲介質(zhì)上的計算機(jī)程序產(chǎn)品;和/或處理器(諸如被配置成執(zhí)行在耦合到處理器的存儲器上存儲的和/或由耦合到處理器的存儲器提供的指令的處理器)。在本說明書中,這些實(shí)現(xiàn)方式或本發(fā)明可采取的任何其它形式可以被稱為技術(shù)。一般而言,所公開的過程的步驟的順序可以在本發(fā)明的范圍內(nèi)更改。除非另有說明,否則諸如處理器或存儲器之類被描述為被配置成執(zhí)行任務(wù)的組件可以被實(shí)現(xiàn)為在給定時間處被臨時地配置成執(zhí)行所述任務(wù)的通用組件或者被制造為執(zhí)行所述任務(wù)的特定組件。如本文所使用的,術(shù)語“處理器”指代被配置成處理諸如計算機(jī)程序指令之類的數(shù)據(jù)的一個或多個設(shè)備、電路和/或處理核心。
下面提供了本發(fā)明的一個或多個實(shí)施例的詳細(xì)描述以及示出本發(fā)明的原理的附圖。本發(fā)明是結(jié)合這些實(shí)施例來描述的,但是本發(fā)明不限于任何實(shí)施例。本發(fā)明的范圍僅由權(quán)利要求限制,并且本發(fā)明涵蓋許多替代、修改和等同物。為了提供對本發(fā)明的透徹理解,在下面的描述中闡述了許多具體細(xì)節(jié)。這些細(xì)節(jié)被提供用于示例的目的,并且可以根據(jù)權(quán)利要求在沒有這些具體細(xì)節(jié)中的一些或全部的情況下實(shí)現(xiàn)本發(fā)明。出于清楚的目的,沒有詳細(xì)描述與本發(fā)明相關(guān)的技術(shù)領(lǐng)域中已知的技術(shù)材料,以使得本發(fā)明不會被不必要地模糊。
用于檢測用戶證書的系統(tǒng)包括用于接收數(shù)據(jù)的輸入接口;用于確定數(shù)據(jù)塊的數(shù)據(jù)分塊器;用于存儲數(shù)據(jù)塊并響應(yīng)于數(shù)據(jù)地址范圍提供數(shù)據(jù)的數(shù)據(jù)塊存儲;用于檢查數(shù)據(jù)塊的每個字節(jié)包括適當(dāng)值的逐字節(jié)檢查器;位計數(shù)器,用于確定高于閾值的連續(xù)位數(shù),并且在連續(xù)位數(shù)高于閾值位數(shù)的情況下確定與連續(xù)位數(shù)相對應(yīng)的證書地址范圍并將證書地址范圍提供給數(shù)據(jù)塊存儲;以及證書檢查器,用于從數(shù)據(jù)塊存儲接收與證書地址范圍相對應(yīng)的數(shù)據(jù),并確定所述數(shù)據(jù)是否包括證書。
公開了一種用于高效地檢測用戶證書的系統(tǒng)。用于高效地檢測用戶證書的系統(tǒng)以嵌入方式在到在線軟件存儲庫的數(shù)據(jù)輸入處操作。隨著代碼被上傳到在線軟件存儲庫,在所述代碼是去往存儲庫的公共部分的情況下,通過用于高效地檢測用戶證書的系統(tǒng)來掃描所述代碼。在用于高效地檢測用戶證書的系統(tǒng)確定用戶證書存在的情況下,系統(tǒng)防止證書被公開顯示(例如,系統(tǒng)刪除證書,指示用戶用其它內(nèi)容替換證書,將所述代碼指定用于存儲庫的私有部分等)。用戶證書通常符合易于識別的模式,并且因此可以使用簡單的模式匹配算法(例如,正則表達(dá)式)來識別。然而,使用模式匹配算法處理輸入到在線軟件存儲庫的所有代碼在計算上消耗過高。用于高效地檢測用戶證書的系統(tǒng)將針對用戶證書分析所有傳入代碼的處理負(fù)荷至少降低到十分之一。上傳到公共存儲庫的用戶證書表示重大的安全威脅。在一些實(shí)施例中,證書的公開使得可能發(fā)生具有經(jīng)濟(jì)后果的證書濫用(例如,帳戶的誤計費(fèi))。
在一些實(shí)施例中,用于高效地檢測用戶證書的系統(tǒng)通過簡化需要對輸入流執(zhí)行的處理來加快對用戶證書的檢測。不是在每個字節(jié)通過時對輸入數(shù)據(jù)流執(zhí)行模式匹配算法,而是系統(tǒng)利用用戶證書通常采用長字母數(shù)字字符串(例如,20個或更多)(一不常出現(xiàn)的模式)的形式的事實(shí)。通過檢查輸入字節(jié)的值來區(qū)分字母數(shù)字和非字母數(shù)字字符,系統(tǒng)將每個字節(jié)減少到一個位。比用于識別證書的閾值更長的正位(positivebit)串(例如,指示字母數(shù)字字符)被隔離,并且然后使用檢測證書的技術(shù)來分析對應(yīng)的字符。在一些實(shí)施例中,通過使用并行處理器來執(zhí)行閾值化任務(wù)來進(jìn)一步改進(jìn)性能。
在一些實(shí)施例中,用于高效地檢測用戶證書的系統(tǒng)使用輸入接口接收傳入代碼以供處理。然后,系統(tǒng)使用數(shù)據(jù)分塊器將傳入代碼分解成塊。在一些實(shí)施例中,數(shù)據(jù)分塊器將傳入代碼分解成固定大?。ɡ纾?6字節(jié))的塊。在一些實(shí)施例中,數(shù)據(jù)塊的處理并行發(fā)生在塊中的每個字節(jié)上(例如,使用單指令多數(shù)據(jù)——例如,simd——并行處理器),并且數(shù)據(jù)分塊器將傳入數(shù)據(jù)分解成適當(dāng)大小的塊以用于并行處理器。由數(shù)據(jù)塊存儲來存儲數(shù)據(jù)塊并由逐字節(jié)檢查器處理數(shù)據(jù)塊。在一些實(shí)施例中,逐字節(jié)檢查器確定數(shù)據(jù)塊的每個字節(jié)的值是否是適當(dāng)值(例如,在ascii值的范圍內(nèi)、合法證書值等),并且在它是適當(dāng)值的情況下用位1來替換該字節(jié),并在它不是適當(dāng)值的情況下用位0來替換該字節(jié)。在一些實(shí)施例中,逐字節(jié)檢查器包括并行處理器(例如,simd處理器)。由位計數(shù)器來處理由逐字節(jié)檢查器輸出的位。在一些實(shí)施例中,位計數(shù)器確定所檢查的數(shù)據(jù)塊中的連續(xù)的位1串的長度。在位計數(shù)器確定在檢查的數(shù)據(jù)塊中存在比閾值(例如,證書的最小長度)更長的連續(xù)的位1串的情況下,要分析對應(yīng)的數(shù)據(jù)。位計數(shù)器確定相關(guān)聯(lián)的數(shù)據(jù)(例如,在數(shù)據(jù)塊存儲中)的存儲地址,并請求將原始數(shù)據(jù)提供給證書檢查器。在一些實(shí)施例中,證書檢查器從數(shù)據(jù)塊存儲接收數(shù)據(jù)并對它進(jìn)行處理以確定它是否包括證書(例如,使用模式匹配算法、正則表達(dá)式、啟發(fā)方法等)。
圖1是示出網(wǎng)絡(luò)系統(tǒng)的實(shí)施例的框圖。在一些實(shí)施例中,圖1的網(wǎng)絡(luò)系統(tǒng)包括用于高效地檢測用戶證書的系統(tǒng)。在一些實(shí)施例中,圖1的網(wǎng)絡(luò)系統(tǒng)提供任何適當(dāng)數(shù)量的軟件開發(fā)者和版本控制服務(wù)器系統(tǒng)之間的通信。在所示的示例中,圖1包括網(wǎng)絡(luò)100。在各種實(shí)施例中,網(wǎng)絡(luò)100包括以下中的一個或多個:局域網(wǎng)、廣域網(wǎng)、有線網(wǎng)絡(luò)、無線網(wǎng)絡(luò)、互聯(lián)網(wǎng)、內(nèi)聯(lián)網(wǎng)、存儲區(qū)域網(wǎng)絡(luò)或任何其它適當(dāng)?shù)耐ㄐ啪W(wǎng)絡(luò)。在所示示例中,開發(fā)者系統(tǒng)102和開發(fā)者系統(tǒng)104包括由軟件開發(fā)者在開發(fā)軟件時使用的系統(tǒng)。在各種實(shí)施例中,存在1個、6個、22個、122個、1059個或任何其它適當(dāng)數(shù)量的開發(fā)者系統(tǒng)與網(wǎng)絡(luò)100通信。服務(wù)器系統(tǒng)106包括用于存儲數(shù)據(jù)的服務(wù)器系統(tǒng)。在一些實(shí)施例中,服務(wù)器系統(tǒng)106包括在線軟件存儲庫。在各種實(shí)施例中,服務(wù)器系統(tǒng)106包括用于存儲軟件、用于使得能夠?qū)崿F(xiàn)協(xié)作、用于提供版本控制、用于公開軟件、或用于任何其它適當(dāng)?shù)哪康牡南到y(tǒng)。在各種實(shí)施例中,存儲在服務(wù)器系統(tǒng)106上的代碼被私有地、半私有地、公開地、或以任何其它適當(dāng)?shù)姆绞酱鎯?。在一些?shí)施例中,包括用戶證書的代碼不應(yīng)當(dāng)被公開地存儲在服務(wù)器系統(tǒng)106上。
圖2是示出服務(wù)器系統(tǒng)的實(shí)施例的框圖。在一些實(shí)施例中,服務(wù)器系統(tǒng)200包括圖1的服務(wù)器系統(tǒng)106。在所示的示例中,服務(wù)器系統(tǒng)200包括輸入接口202。在各種實(shí)施例中,輸入接口202接收用戶接口命令、數(shù)據(jù)上傳、要存儲的代碼、或任何其它適當(dāng)?shù)男畔ⅰ]斎虢涌?02與用于控制用戶接口的用戶接口確定器208通信。用戶接口確定器208確定用戶接口(例如,響應(yīng)于從輸入接口202接收的用戶接口命令)。在一些實(shí)施例中,用戶接口包括從數(shù)據(jù)庫210檢索的數(shù)據(jù)。用戶接口確定器將用戶接口提供至輸出接口204以用于與用戶通信。在一些實(shí)施例中,用戶提供要存儲在數(shù)據(jù)庫210中的代碼。在一些實(shí)施例中,當(dāng)輸入接口202從用戶接收代碼時,代碼被提供給證書確定器206。證書確定器206處理傳入代碼以確定它是否包含證書。在一些實(shí)施例中,在確定代碼不包含證書的情況下,將代碼提供給數(shù)據(jù)庫210。在各種實(shí)施例中,在確定代碼包含證書的情況下,刪除證書、提示用戶進(jìn)行動作、將代碼存儲指示為私有的、或執(zhí)行任何其它適當(dāng)?shù)膭幼鳌?/p>
圖3是示出證書確定器的實(shí)施例的框圖。在一些實(shí)施例中,證書確定器300包括圖2的證書確定器206。在所示的示例中,證書確定器300包括用于接收輸入數(shù)據(jù)并將輸入數(shù)據(jù)提供給數(shù)據(jù)分塊器304的輸入接口302。在一些實(shí)施例中,使用處理器來實(shí)現(xiàn)輸入接口302。數(shù)據(jù)分塊器304包括用于將輸入數(shù)據(jù)分解成數(shù)據(jù)塊的數(shù)據(jù)分塊器。在一些實(shí)施例中,數(shù)據(jù)塊具有固定的大小。在一些實(shí)施例中,數(shù)據(jù)塊具有適用于并行處理器(例如,實(shí)現(xiàn)逐字節(jié)檢查器306的并行處理器)的固定大小。數(shù)據(jù)分塊器304向證書檢查器308和逐字節(jié)檢查器306提供數(shù)據(jù)塊。在一些實(shí)施例中,數(shù)據(jù)分塊器304是使用處理器實(shí)現(xiàn)的。逐字節(jié)檢查器306包括用于檢查接收到的數(shù)據(jù)塊中的每個字節(jié)是否具有適當(dāng)值(例如,在ascii值的范圍內(nèi)、高于閾值ascii值、低于閾值ascii值、是適當(dāng)?shù)淖C書值等)的逐字節(jié)檢查器。在一些實(shí)施例中,逐字節(jié)檢查器306產(chǎn)生具有等于接收到的數(shù)據(jù)塊中的字節(jié)數(shù)的位數(shù)的數(shù)據(jù)字。在一些實(shí)施例中,由逐字節(jié)檢查器306產(chǎn)生的數(shù)據(jù)字中的每個位在接收到的數(shù)據(jù)塊中的對應(yīng)字節(jié)是適當(dāng)?shù)那闆r下包括1,并且在接收到的數(shù)據(jù)塊中的對應(yīng)字節(jié)不適當(dāng)?shù)那闆r下包括0。在一些實(shí)施例中,使用閾值來確定適當(dāng)值,該閾值被選取為使得與字母數(shù)字字符相對應(yīng)的字節(jié)高于閾值,而不與字母數(shù)字字符相對應(yīng)的字節(jié)不高于閾值。在一些實(shí)施例中,逐字節(jié)檢查器306確定字節(jié)是否在值的范圍內(nèi)(例如,可打印字符、字母數(shù)字字符、字母字符、證書合法字符等)。在一些實(shí)施例中,閾值包括上閾值(例如,字節(jié)小于負(fù)數(shù))。在一些實(shí)施例中,逐字節(jié)檢查器306包括用于同時檢查所接收到的數(shù)據(jù)塊中的所有字節(jié)的并行處理器(例如,simd處理器)。在一些實(shí)施例中,逐字節(jié)檢查器將所確定的數(shù)據(jù)字提供給位計數(shù)器310。在一些實(shí)施例中,逐字節(jié)檢查器306是使用處理器實(shí)現(xiàn)的。位計數(shù)器310包括用于對位進(jìn)行計數(shù)的位計數(shù)器。在一些實(shí)施例中,位計數(shù)器310對在從逐字節(jié)檢查器306接收的數(shù)據(jù)字中找到的為1的連續(xù)串進(jìn)行計數(shù)。在一些實(shí)施例中,位計數(shù)器310計及從一個數(shù)據(jù)塊延伸到下一個數(shù)據(jù)塊的為1的連續(xù)串(例如,在為1的串繼續(xù)直到數(shù)據(jù)塊的結(jié)尾的情況下,將其長度增加在下一數(shù)據(jù)塊的開頭找到的為1的串的長度)。在一些實(shí)施例中,在由位計數(shù)器310確定的為1的串比閾值長度更長(例如,該1串指示可能包含證書的數(shù)據(jù)區(qū)段)的情況下,位計數(shù)器310確定與該1串相對應(yīng)的地址范圍,并將該地址范圍提供給證書檢查器308。在一些實(shí)施例中,位計數(shù)器310是使用處理器實(shí)現(xiàn)的。證書檢查器308存儲從數(shù)據(jù)分塊器304接收的數(shù)據(jù)塊。在一些實(shí)施例中,在證書檢查器308從位計數(shù)器310接收到數(shù)據(jù)塊不包括證書的指示的情況下,證書檢查器308釋放一個或多個數(shù)據(jù)塊(例如,用于存儲在數(shù)據(jù)庫中)。在一些實(shí)施例中,在證書檢查器308從位計數(shù)器310接收到指示可能證書的地址范圍的情況下,數(shù)據(jù)塊存儲308(例如,從一個或多個數(shù)據(jù)塊)檢索與該地址范圍相對應(yīng)的數(shù)據(jù)區(qū)段,并針對證書對該區(qū)段進(jìn)行檢查。在各種實(shí)施例中,使用包括正則表達(dá)式模式匹配器、啟發(fā)式模式匹配器、數(shù)據(jù)過濾器或任何其它適當(dāng)?shù)淖C書檢查器來執(zhí)行證書檢查。在一些實(shí)施例中,在證書檢查器308確定數(shù)據(jù)塊不包括證書的情況下,證書檢查器308釋放數(shù)據(jù)塊(例如,用于存儲在數(shù)據(jù)庫中)。在一些實(shí)施例中,使用處理器來實(shí)現(xiàn)證書檢查器308。在各種實(shí)施例中,在證書檢查器308確定數(shù)據(jù)區(qū)段包括證書的情況下,刪除證書、提示用戶進(jìn)行動作、將代碼存儲指示為私有的、或執(zhí)行任何其它適當(dāng)?shù)膭幼?。在各種實(shí)施例中,證書確定器300的模塊全部實(shí)現(xiàn)在單個處理器上、各自實(shí)現(xiàn)在分離的處理器上、以任何適當(dāng)?shù)姆绞奖唤M合到多個處理器上實(shí)現(xiàn)、或以任何其它適當(dāng)?shù)姆绞綄?shí)現(xiàn)。
圖4a是示出數(shù)據(jù)流的實(shí)施例的圖示。在一些實(shí)施例中,圖4的數(shù)據(jù)流包括通過證書確定器(例如,圖3的證書確定器300)的數(shù)據(jù)流。在所示的示例中,(例如,通過輸入接口)接收數(shù)據(jù)400。數(shù)據(jù)400包括在代碼段內(nèi)發(fā)現(xiàn)的數(shù)據(jù)區(qū)段。數(shù)據(jù)400包括證書(例如,94b21a65fc318a93e73)。(例如,通過數(shù)據(jù)分塊器)將數(shù)據(jù)400分塊以產(chǎn)生數(shù)據(jù)塊402、數(shù)據(jù)塊404和數(shù)據(jù)塊406。(例如,由逐字節(jié)檢查器)檢查每個數(shù)據(jù)塊以產(chǎn)生位區(qū)段408、410和412。(例如,由位計數(shù)器)對位區(qū)段計數(shù)來識別比閾值(例如,19個1)更長的為1的串。與證書相對應(yīng)的為1的串被識別為可能的證書,并且(例如,從數(shù)據(jù)塊存儲)檢索與該1串相關(guān)聯(lián)的原始數(shù)據(jù)(例如,數(shù)據(jù)414)。(例如,由證書檢查器)針對證書對數(shù)據(jù)進(jìn)行檢查。證書檢查器識別證書并產(chǎn)生肯定輸出(例如,數(shù)據(jù)是證書輸出416)。
圖4b是示出美國信息交換標(biāo)準(zhǔn)碼(例如,ascii)表的實(shí)施例的圖示。在一些實(shí)施例中,ascii包括用于文本字符和控制字符的編碼方案。在所示的示例中,控制字符(例如,非文本字符)由ascii值001到032以及127表示。文本字符由ascii值33到126表示??梢酝ㄟ^以下方式將文本字符與非文本字符高效地區(qū)分開來:閾值化32處的ascii字符表示,用位1替換值33及以上的值(例如,指示文本字符),并且用位0替換值32及以下的值(例如,指示非文本字符)。在一些實(shí)施例中,使用第二操作(例如,將該值重置為位0,以指示非文本字符)來檢測ascii值127(例如,刪除操作的指示)的存在。在一些實(shí)施例中,ascii值127用于(例如,從鍵盤向計算機(jī))傳輸刪除操作的指示,但不作為文本數(shù)據(jù)的一部分存儲,并且因此將永遠(yuǎn)不會在ascii閾值化操作中被檢測到。在一些實(shí)施例中,逐字節(jié)閾值化器確定字節(jié)是否在ascii值的范圍內(nèi)(例如,可打印字符、字母數(shù)字字符、字母字符、證書合法字符等)。在一些實(shí)施例中,逐字節(jié)閾值化器確定上閾值(例如,字節(jié)小于負(fù)數(shù))。
圖5是示出用于檢測證書的過程的實(shí)施例的流程圖。在一些實(shí)施例中,圖5的過程由證書確定器(例如,圖3的證書確定器300)來實(shí)現(xiàn)。在所示的示例中,在500中,接收數(shù)據(jù)。在502中,確定數(shù)據(jù)塊。在504中,檢查數(shù)據(jù)塊的每個字節(jié)以確定潛在證書符號。在一些實(shí)施例中,在數(shù)據(jù)塊中的字節(jié)不包括潛在證書符號的情況下,用位0來替換所述字節(jié),并且在所述字節(jié)包括潛在證書符號的情況下,用位1來替換所述字節(jié)。在一些實(shí)施例中,確定每個字節(jié)是否在值的范圍內(nèi)(例如,可打印字符、字母數(shù)字字符、字母字符、證書合法字符等)。在一些實(shí)施例中,確定每個字節(jié)是否高于下閾值(例如,字節(jié)大于正數(shù))。在一些實(shí)施例中,確定每個字節(jié)是否低于上閾值(例如,字節(jié)小于負(fù)數(shù))。在506中,確定在最近n個數(shù)據(jù)塊中是否存在大于或等于最小證書長度的潛在證書符號的序列。在各種實(shí)施例中,n包括以下數(shù)量的塊中的一個:1個塊、2個塊、3個塊、4個塊、5個塊、6個塊、7個塊、8個塊、9個塊、10個塊、11個塊、12個塊、13個塊、14個塊、15個塊、16個塊、或任何其它適當(dāng)數(shù)量的塊。在一些實(shí)施例中,最近n個數(shù)據(jù)塊(例如,在502中確定的數(shù)據(jù)塊)被連結(jié)并針對大于或等于最小證書長度的潛在證書符號的序列進(jìn)行掃描。在一些實(shí)施例中,被連結(jié)和掃描的數(shù)據(jù)塊的數(shù)量n包括證書可以跨越的數(shù)據(jù)塊的最大數(shù)量(例如,20位證書可以跨越3個16位塊)。在一些實(shí)施例中,最近n個數(shù)據(jù)塊的閾值化表示被存儲在先進(jìn)先出緩沖器中以用于掃描。在確定在最近n個數(shù)據(jù)塊中不存在大于或等于最小證書長度的潛在證書符號的序列的情況下,控制傳到514。在確定在最近n個數(shù)據(jù)塊中存在大于或等于最小證書長度的潛在證書符號的序列的情況下,控制傳到508。在508中,確定與該潛在證書符號的序列相對應(yīng)的地址范圍。在510中,確定該潛在證書符號的序列是否包括證書。在確定該潛在證書符號的序列不包括證書的情況下,控制傳到514。在確定該潛在證書符號的序列包括證書的情況下,控制傳到512。在512中,處理證書。在各種實(shí)施例中,處理證書包括刪除證書、指示將要在其中存儲證書的存儲庫標(biāo)記為私有的、向用戶提示要如何處理證書的指示、或以任何其它適當(dāng)?shù)姆绞教幚碜C書??刂迫缓髠鞯?16。在514中,輸出數(shù)據(jù)塊。在一些實(shí)施例中,數(shù)據(jù)塊輸出包括在506中檢查的n個數(shù)據(jù)塊中的第n個。在一些實(shí)施例中,數(shù)據(jù)塊被輸出以存儲在數(shù)據(jù)庫中??刂迫缓髠鞯?16。在516中,確定是否存在更多的數(shù)據(jù)(例如,要針對證書進(jìn)行檢查的更多輸入數(shù)據(jù))。如果確定有更多的輸入數(shù)據(jù),則控制傳到500。如果確定沒有更多的輸入數(shù)據(jù),則過程結(jié)束。
圖6是示出用于數(shù)據(jù)分塊器的過程的實(shí)施例的流程圖。在一些實(shí)施例中,圖6的過程由圖3的數(shù)據(jù)分塊器304執(zhí)行。在所示的示例中,在600中,(例如,由數(shù)據(jù)分塊器)接收數(shù)據(jù)。在602中,將數(shù)據(jù)分組成m字節(jié)的數(shù)據(jù)塊。在一些實(shí)施例中,將數(shù)據(jù)分組成m字節(jié)的數(shù)據(jù)塊包括確定最近的一組字節(jié),其中該組字節(jié)具有預(yù)定數(shù)量的字節(jié)(例如,m包括4字節(jié)、8字節(jié)、16字節(jié)、32字節(jié)、64字節(jié)、128字節(jié)等)。在604中,提供數(shù)據(jù)塊。在一些實(shí)施例中,將數(shù)據(jù)塊提供給證書檢查器和逐字節(jié)閾值化器。
圖7是示出了逐字節(jié)閾值化器的實(shí)施例的流程圖。在一些實(shí)施例中,圖7的過程由圖3的逐字節(jié)閾值化器306執(zhí)行。在所示的示例中,在700中,(例如,從數(shù)據(jù)分塊器)接收到數(shù)據(jù)塊。在702中,選擇數(shù)據(jù)塊中的下一字節(jié)。在一些實(shí)施例中,數(shù)據(jù)塊中的下一字節(jié)包括數(shù)據(jù)塊中的第一字節(jié)。在704中,確定字節(jié)值是否是潛在的證書符號。在一些實(shí)施例中,字節(jié)值包括ascii值。在一些實(shí)施例中,確定字節(jié)值是否在值的范圍內(nèi)(例如,可打印字符、字母數(shù)字字符、字母字符、證書合法字符等)。在一些實(shí)施例中,確定字節(jié)值是否小于閾值(例如,字節(jié)小于負(fù)數(shù))。在一些實(shí)施例中,閾值被選取為使得對應(yīng)于字母數(shù)字字符的字節(jié)值高于閾值,而不對應(yīng)于字母數(shù)字字符的字節(jié)值小于或等于閾值。在確定字節(jié)值不是潛在證書符號的情況下,控制傳到706。在706中,用位0來替換該字節(jié)??刂迫缓髠鞯?10。在704中,如果確定字節(jié)值是潛在證書符號,則控制傳到708。在708中,用位1來替換該字節(jié)??刂迫缓髠鞯?10。在710中,確定是否存在更多字節(jié)(例如,該數(shù)據(jù)塊中的更多字節(jié))。在確定存在更多字節(jié)的情況下,控制傳到702。在確定沒有更多字節(jié)的情況下,控制傳到712。在712中,提供位序列(例如,通過用0或1替換接收到的數(shù)據(jù)塊中的每個字節(jié)而產(chǎn)生的位序列)。在所示的示例中,由逐字節(jié)檢查器來串行地(例如,一次一個)檢查字節(jié)。在一些實(shí)施例中,由逐字節(jié)檢查器并行地(例如,一次全部)檢查字節(jié)。每個字節(jié)被檢查并同時被0或1替換。在一些實(shí)施例中,可以使用simd并行處理器來實(shí)現(xiàn)以這種方式的并行處理。在一些實(shí)施例中,simd并行處理器同時對固定長度的數(shù)據(jù)塊中的每個字節(jié)執(zhí)行相同的指令。在一些實(shí)施例中,使用simd并行處理器的處理使得數(shù)據(jù)分塊成為必要。
圖8是示出用于確定潛在證書符號的序列是否包括證書的過程的實(shí)施例的流程圖。在一些實(shí)施例中,圖8的過程實(shí)現(xiàn)圖5的510。在所示的示例中,在800中,確定潛在證書符號的序列是否與證書模式匹配。在各種實(shí)施例中,使用正則表達(dá)式、模式匹配啟發(fā)方法、數(shù)據(jù)過濾器、或任何其它適當(dāng)?shù)哪J狡ヅ渌惴▉泶_定潛在證書符號的序列是否與證書模式匹配。在確定潛在證書符號的序列與證書模式匹配的情況下,控制傳到808。在確定潛在證書符號的序列與證書模式不匹配的情況下,控制傳到802。在802中,確定潛在證書符號的序列是否包括證書前綴。在一些實(shí)施例中,證書前綴包括用以引入證書的已知字符序列。在確定潛在證書符號的序列包括證書前綴的情況下,控制傳到808。在確定潛在證書符號的序列不包括證書前綴的情況下,控制傳到804。在804中,確定潛在證書符號的序列是否滿足證書熵測試。在一些實(shí)施例中,證書包括比常規(guī)文本(例如,書寫單詞、軟件代碼等)更高的熵,并且可以將針對一組字符的所確定的熵值閾值化,以確定該組字符是否包括閾值。在804中確定了潛在證書符號的序列滿足證書熵測試(例如,指示該序列包括證書)的情況下,控制傳到808。在804中確定了潛在證書符號的序列不滿足證書熵測試的情況下,控制傳到806。在806中,指示潛在證書符號的序列不包括證書。過程然后結(jié)束。在808中,指示可能的證書符號的序列包括證書。
在各種實(shí)施例中,在數(shù)據(jù)包括證書的情況下,執(zhí)行以下中的一個或多個:刪除證書、替換證書、將作為與證書相關(guān)聯(lián)代碼的代碼存儲在存儲庫的私有部分中、向用戶或管理員提供證書已被上傳的指示、或任何其它適當(dāng)?shù)膭幼鳌?/p>
圖9a是示出數(shù)據(jù)流的實(shí)施例的圖。在一些實(shí)施例中,圖9的數(shù)據(jù)流包括通過位計數(shù)器(例如,圖3的位計數(shù)器310)的數(shù)據(jù)流。在所示的示例中,接收數(shù)據(jù)塊900。數(shù)據(jù)塊900被添加到數(shù)據(jù)塊緩沖器902的尾部位置。在所示的示例中,數(shù)據(jù)塊緩沖器902包括用于保存5個數(shù)據(jù)塊的緩沖器。在一些實(shí)施例中,由數(shù)據(jù)塊緩沖器存儲的數(shù)據(jù)塊的數(shù)量包括證書可以跨越的數(shù)據(jù)塊的最大數(shù)量。數(shù)據(jù)塊緩沖器904包括在其尾部位置包括數(shù)據(jù)塊900的數(shù)據(jù)塊緩沖器902。針對潛在證書序列對數(shù)據(jù)塊緩沖器904進(jìn)行掃描。在一些實(shí)施例中,針對潛在證書序列掃描數(shù)據(jù)塊緩沖器904包括識別潛在證書符號的序列(例如,位1)。在一些實(shí)施例中,潛在證書序列包括比最小證書長度更長的潛在證書符號的序列。然后將數(shù)據(jù)塊緩沖器中的第一個接收到的數(shù)據(jù)塊(例如,數(shù)據(jù)塊緩沖器頭部處的數(shù)據(jù)塊)從數(shù)據(jù)塊緩沖器中移出。數(shù)據(jù)塊緩沖器906包括其中數(shù)據(jù)塊緩沖器頭部處的數(shù)據(jù)塊被移出的數(shù)據(jù)塊緩沖器904。然后使數(shù)據(jù)塊緩沖器中剩余的數(shù)據(jù)塊在數(shù)據(jù)塊緩沖器內(nèi)前進(jìn),以在數(shù)據(jù)塊緩沖器尾部開放空間以用于新的數(shù)據(jù)塊。數(shù)據(jù)塊緩沖器908包括其中使數(shù)據(jù)塊在緩沖器內(nèi)前進(jìn)的數(shù)據(jù)塊緩沖器906。
圖9b包括示出用于確定在最近n個數(shù)據(jù)塊中是否存在大于或等于最小證書長度的潛在證書符號的序列的過程的實(shí)施例的流程圖。在一些實(shí)施例中,圖9b的過程實(shí)現(xiàn)圖5的506。在一些實(shí)施例中,圖9b的過程包括用于圖3的位計數(shù)器310的過程。在所示的示例中,在950中,將數(shù)據(jù)塊添加到數(shù)據(jù)塊緩沖器尾部。在一些實(shí)施例中,數(shù)據(jù)塊緩沖器包括先進(jìn)先出緩沖器。在952中,確定數(shù)據(jù)塊緩沖器內(nèi)的潛在證書序列長度。在954中,確定數(shù)據(jù)塊緩沖器內(nèi)是否存在比最小證書長度更長的潛在證書序列。如果確定沒有比最小證書長度更長的潛在證書序列,則控制傳到956。在956中,指示沒有比最小證書長度更長的潛在證書序列??刂迫缓髠鞯?60。如果在854中確定了數(shù)據(jù)塊緩沖器內(nèi)存在比最小證書長度更長的潛在證書序列,則控制傳到958。在958中,指示存在比最小證書長度更長的潛在證書序列。控制然后傳到960。在960中,確定數(shù)據(jù)塊緩沖器是否已滿。在一些實(shí)施例中,數(shù)據(jù)塊緩沖器在它已接收到等于其長度的多個數(shù)據(jù)塊之前不是滿的。在確定數(shù)據(jù)塊緩沖器未滿的情況下,控制傳到964。在確定數(shù)據(jù)塊緩沖器已滿的情況下,控制傳到962。在962中,從數(shù)據(jù)塊緩沖器頭部移出數(shù)據(jù)塊。在964中,使數(shù)據(jù)塊在數(shù)據(jù)塊緩沖器中前進(jìn)。
盡管為了理解清楚的目的以一定程度的細(xì)節(jié)描述了前述實(shí)施例,但是本發(fā)明不限于所提供的細(xì)節(jié)。存在許多實(shí)現(xiàn)本發(fā)明的替代方法。所公開的實(shí)施例是例證性的而不是限制性的。