朱新龍,王佳斌
(工業(yè)智能化與系統(tǒng)福建省高校工程研究中心,泉州362021)
計(jì)算機(jī)的普及和網(wǎng)絡(luò)的便捷,使得數(shù)字化信息已經(jīng)成為人們?nèi)粘9ぷ骱蜕钪胁豢苫蛉钡闹匾巧5彩卤赜袃擅嫘?,人們?cè)谙硎軘?shù)字化信息帶來的種種便利的同時(shí),也在面臨和承擔(dān)著其帶來的安全問題。信息安全問題小至個(gè)人信息安全,大至社會(huì)、經(jīng)濟(jì)、政治、軍事和文化安全。數(shù)字信息具有易獲取、易編輯、易修改等特性,這是一把雙刃劍:一方面給人們獲得和處理信息提供了極大的便利;另一方面也為無意或者惡意的篡改偽造信息提供了可能。由此引發(fā)的對(duì)于數(shù)字信息完整性和真實(shí)性的關(guān)注,而在數(shù)字化信息安全中的數(shù)字圖像的來源真實(shí)性問題備受人們關(guān)注。
圖像真實(shí)性能夠通過各種方法進(jìn)行驗(yàn)證,從比較EXIF 元數(shù)據(jù)方法等簡(jiǎn)單的方法到跟蹤圖像數(shù)字指紋等復(fù)雜方法,而EXIF 中的信息可以通過ExifTool 16 等軟件輕松編輯,所以使用圖像數(shù)字指紋的方法顯得似乎更加可靠,并引起了圖像取證研究人員越來越大的興趣[3]。圖像的數(shù)字指紋提供了圖像的顯著特征。隨著各種技術(shù)的研究,使用圖像的數(shù)字指紋進(jìn)行源攝像機(jī)識(shí)別一直是最近研究的焦點(diǎn)。
該領(lǐng)域最值得注意的貢獻(xiàn)之一是Lukas 等人[1]提出的算法。該算法的工作原理是,從待識(shí)別的圖像中提取數(shù)字指紋,并將其與一組之前已知的相機(jī)指紋相關(guān)聯(lián),以識(shí)別該圖像的源相機(jī)。因?yàn)樗鼈兩婕暗綄?duì)包含數(shù)百萬個(gè)像素的圖像進(jìn)行處理,所以該類別算法對(duì)計(jì)算機(jī)的性能要求是非常高的,且在大數(shù)據(jù)集上提取大量數(shù)字指紋時(shí)受制于單臺(tái)計(jì)算機(jī)的計(jì)算能力,算法的處理時(shí)間非常長(zhǎng)。分布式計(jì)算環(huán)境使通過網(wǎng)絡(luò)連接的多臺(tái)遠(yuǎn)程計(jì)算機(jī)能夠并發(fā)地執(zhí)行特定任務(wù),與在單臺(tái)計(jì)算機(jī)上運(yùn)行任務(wù)相比,多臺(tái)計(jì)算機(jī)的處理能力合并,能夠大大縮短處理時(shí)間。本文研究了在Hadoop 分布式下使用Lukas 等人[1]的算法進(jìn)行源相機(jī)識(shí)別的可能性,實(shí)驗(yàn)結(jié)果顯示,與單臺(tái)計(jì)算機(jī)相比,分布式處理能夠有效縮短任務(wù)的處理時(shí)間。
Hadoop 是一個(gè)由Apache 基金會(huì)所開發(fā)的開源分布式系統(tǒng)基礎(chǔ)架構(gòu)。用戶可以在不了解分布式底層細(xì)節(jié)的情況下,開發(fā)分布式程序,充分利用集群的威力進(jìn)行高速運(yùn)算和存儲(chǔ)。解決了大數(shù)據(jù)(大到一臺(tái)計(jì)算機(jī)無法進(jìn)行存儲(chǔ),一臺(tái)計(jì)算機(jī)無法在要求的時(shí)間內(nèi)進(jìn)行處理)的可靠存儲(chǔ)和處理。適合處理非結(jié)構(gòu)化數(shù)據(jù),Hadoop 包括HDFS、MapReduce 等基本組件。
HDFS 主要支持流數(shù)據(jù)讀取和處理超大規(guī)模文件,結(jié)構(gòu)模型為主從結(jié)構(gòu)(Master/Slave),一個(gè)HDFS 集群由一個(gè)命名結(jié)點(diǎn)和若干個(gè)數(shù)據(jù)結(jié)點(diǎn)組成。命名結(jié)點(diǎn)作為中心服務(wù)器,主要工作是管理整個(gè)文件系統(tǒng)。數(shù)據(jù)節(jié)點(diǎn)作為工作結(jié)點(diǎn),主要任務(wù)為處理文件系統(tǒng)客戶端的讀/寫請(qǐng)求,并向命名結(jié)點(diǎn)傳輸存儲(chǔ)信息。實(shí)現(xiàn)原理是當(dāng)如果有文件提交給Master 節(jié)點(diǎn),Master 會(huì)將其切分成N 個(gè)塊,并為每個(gè)塊拷貝多個(gè)副本,然后將這些塊分散地存儲(chǔ)在不同的Slave 節(jié)點(diǎn)上。Master 負(fù)責(zé)維護(hù)整個(gè)NameSpace,NameSpace 中記錄著輸入文件的切割情況,以及每個(gè)塊的存儲(chǔ)信息。Slave 是實(shí)際的工作站,負(fù)責(zé)存儲(chǔ)塊。
MapReduce 主要處理存儲(chǔ)在分布式文件系統(tǒng)中的數(shù)據(jù),它的核心是Map 函數(shù)與Reduce 函數(shù),輸入輸出方式都以中間
通過分析數(shù)字圖像中由成像設(shè)備引入的特性,確定圖像來源即成像設(shè)備的取證技術(shù)稱為數(shù)字圖像來源取證,也叫源相機(jī)檢測(cè),是圖像取證技術(shù)的一個(gè)重要分支。其采用的方法主要是提取相機(jī)的參考模式噪聲,并檢測(cè)待測(cè)圖像中是否含有此模式噪聲。在數(shù)字圖像中,噪聲可定義為像素相對(duì)于所描繪的原始視圖的顏色失真。這些失真可能是由于散粒噪聲,一個(gè)隨機(jī)的組成部分,或模式噪聲,確定性的組成部分。模式噪聲又可以分成兩個(gè)主要部分:固定模式噪聲(FP)和光響應(yīng)非均勻性噪聲(PRNU)。FP 噪聲是由暗電流引起的,暗電流是當(dāng)數(shù)字傳感器不暴露在光下時(shí)像素檢測(cè)器返回的信息。PRNU 噪聲主要由像素非均勻性噪聲(PNU)引起,這是由于數(shù)字傳感器的像素檢測(cè)器對(duì)光的靈敏度不同所致。這種差異是由硅片的不均勻性和傳感器制造過程中產(chǎn)生的缺陷造成的。PNU 與拍攝場(chǎng)景無關(guān),只與成像傳感器有關(guān),因此不同的數(shù)碼相機(jī),即使品牌型號(hào)相同,其PNU 也不相同。源相機(jī)檢測(cè)中用到的模式噪聲主要指PNU[2]。
本文中的源相機(jī)識(shí)別算法參考了Lukas 等人[1]提出的方法,首先對(duì)Lukas 等人[1]提出的算法進(jìn)行簡(jiǎn)單的介紹,算法關(guān)鍵步驟如下:
(1)提取模式噪聲。使用濾波器F 對(duì)圖像I 進(jìn)行濾波,可得圖像I 的模式噪聲為:

(2)計(jì)算相機(jī)參考模式噪聲。相機(jī)的模式噪聲無法直接獲得,Lukas 等人[1]提出可以用多幅參考相機(jī)拍攝的圖像作為參考圖像。采用步驟(1)的方法,對(duì)每幅圖像提取模式噪聲,記為RPC,疊加求平均后,作為相機(jī)C 的參考模式噪聲的近似值:

式中N 為用于提取相機(jī)參考模式噪聲的圖像個(gè)數(shù)。
(3)計(jì)算相關(guān)系數(shù)。按步驟(1)對(duì)待測(cè)圖像T 提取模式噪聲,記為RPC,按步驟(2)對(duì)參考相機(jī)C 提取相機(jī)參考模式噪聲,記為RPC,則RPT和RPC的相關(guān)系數(shù)為:

若相關(guān)系數(shù)超過給定的閾值,則認(rèn)為圖像T 是由相機(jī)C 拍攝的[4]。
在此步驟中,算法執(zhí)行期間使用的圖像需要加載到HDFS 存儲(chǔ)中。管理大量的小文件并不是Hadoop的強(qiáng)項(xiàng),本次實(shí)驗(yàn)的解決方案是只維護(hù)兩個(gè)非常大的文件,這兩個(gè)文件已被編寫為Hadoop SequenceFile 對(duì)象,分別是:EnrSeq(用于存儲(chǔ)圖像列表)和TTSeq(用于存儲(chǔ)訓(xùn)練和測(cè)試的圖像列表)。在這兩個(gè)文件中,圖像是根據(jù)它們的原始相機(jī)id 排序的。然后,使用SequenceFile 對(duì)象的輸入拆分功能在不同的計(jì)算節(jié)點(diǎn)之間劃分這兩個(gè)文件,以使數(shù)據(jù)可以在本地執(zhí)行。
該步驟通過分析使用相機(jī)C 拍攝的具有相同分辨率的一組輸入圖像來計(jì)算相機(jī)C 的參考模式噪聲。
在map 階段,每個(gè)處理節(jié)點(diǎn)接收一組圖像,提取其相應(yīng)的模式噪聲并輸出。在reduce 階段,每個(gè)函數(shù)(每個(gè)相機(jī)C 對(duì)應(yīng)的函數(shù))將map 任務(wù)中產(chǎn)生的相機(jī)C 的模式噪聲集作為輸入,并將它們組合在一起,并返回RPc。對(duì)每臺(tái)準(zhǔn)備被提取模式噪聲的相機(jī)重復(fù)此操作。
在Hadoop 中每個(gè)map 輸入記錄均被構(gòu)造為
在reduce 階段,reduce 函數(shù)接收格式為
在這一步驟中,算法提取每個(gè)訓(xùn)練圖像的RN,然后計(jì)算與所有輸入設(shè)備RPs 的相關(guān)系數(shù)。對(duì)所有待測(cè)試圖像重復(fù)相同的操作。
在map 階段,每個(gè)處理節(jié)點(diǎn)接收一個(gè)以
在此步驟中,使用上一步中計(jì)算的相關(guān)系數(shù)和CORRs 文件對(duì)基于SVM 的分類器進(jìn)行訓(xùn)練和測(cè)試。計(jì)算過程發(fā)生在主節(jié)點(diǎn)上。該步驟結(jié)束時(shí),分類器已經(jīng)訓(xùn)練完成,可用于識(shí)別步驟。此外,本步驟向用戶返回測(cè)試準(zhǔn)確度的估計(jì)值,表示為測(cè)試源圖像與其相應(yīng)參考攝像機(jī)之間的成功匹配度(RR)。
本步驟的目的是確定圖像I 是被哪個(gè)相機(jī)捕獲的。Hadoop 作業(yè)的輸入文件是存儲(chǔ)RPs 的目錄。此階段的輸出是用于采集輸入圖像的預(yù)測(cè)相機(jī)。對(duì)于每個(gè)輸入RP,調(diào)用一個(gè)新的map 函數(shù)。該函數(shù)首先使用圖像I 的副本提取模式噪聲RN,然后計(jì)算該RN 與輸入RP 之間的相關(guān)性。最后,作業(yè)返回到主節(jié)點(diǎn)一個(gè)包含相關(guān)值列表的文件,以使用上一步中訓(xùn)練完成的SVM 來執(zhí)行識(shí)別階段。
所有實(shí)驗(yàn)是在一個(gè)由4 個(gè)配備8 GB RAM、Intel Xeon CPU E5-2407@2.20GHz×2、CentOS7 操作系統(tǒng)、100Mbps 以太網(wǎng)卡和931GB 硬盤的PC 集群上進(jìn)行的。
Hadoop 集群配置包括3 個(gè)從節(jié)點(diǎn)和一個(gè)主節(jié)點(diǎn)。Hadoop 版本為2.9.1。為了節(jié)省內(nèi)存,群集中所有節(jié)點(diǎn)的操作系統(tǒng)均已配置為不運(yùn)行圖形用戶界面。
本次實(shí)驗(yàn)使用的數(shù)據(jù)集為4 臺(tái)手機(jī)拍攝的共1032幅圖像,每種相機(jī)拍攝的圖像分為130 張輸入圖像,64張訓(xùn)練圖像,64 張測(cè)試圖像,關(guān)于相機(jī)的具體信息如表1。

表1 四部手機(jī)相機(jī)參數(shù)及圖像數(shù)量和格式
在本次實(shí)驗(yàn)所有的測(cè)試中,分類器能夠正確識(shí)別用于拍攝948 張圖像的源相機(jī),從而達(dá)到92.0%的識(shí)別率。
初步試驗(yàn)結(jié)果顯示,在使用上文中提到的數(shù)據(jù)集時(shí)原始版本算法的處理時(shí)間為1192 秒,而分布式版本的算法的處理時(shí)間為627 秒,分布式實(shí)現(xiàn)相對(duì)于原始版本算法表現(xiàn)出大約1.9 倍的加速比。
本次實(shí)驗(yàn)的目標(biāo)是嘗試使用基于Hadoop 平臺(tái)的MapReduce 編程模型的分布式方法解決數(shù)字圖像取證中的關(guān)鍵問題——源相機(jī)識(shí)別問題。本次實(shí)驗(yàn)選擇Lukas 等人的源相機(jī)識(shí)別算法,將其改寫為MapReduce算法,使用Hadoop 框架實(shí)現(xiàn)了它,并與原始版本的性能進(jìn)行了比較。
根據(jù)測(cè)試,當(dāng)算法運(yùn)行在4 個(gè)計(jì)算節(jié)點(diǎn)的集群上時(shí),分布式實(shí)現(xiàn)的版本比原始版本的總體處理時(shí)間有大幅度減少,但是在分布式環(huán)境中,加速比仍有接近兩倍的差距,這種性能損失主要是由于傳輸圖像和數(shù)據(jù)文件時(shí)的開銷產(chǎn)生的。