文猛,張釋如
(西安科技大學(xué),西安 710054)
近年來數(shù)據(jù)隱藏在信號處理領(lǐng)域得到了廣泛的應(yīng)用,如所有權(quán)保護、指紋識別、身份認證和秘密通信等[1]。隨著三維技術(shù)的飛速發(fā)展,以三維模型為載體的數(shù)據(jù)隱藏吸引了研究者的注意。傳統(tǒng)的三維數(shù)據(jù)隱藏技術(shù)通過改變載體模型完成嵌入,導(dǎo)致載體永久失真。在醫(yī)學(xué)、軍事和法律取證等領(lǐng)域,或在某些特殊情況下,由于載體的機密性或重要性,為了避免其永久損壞[2],三維數(shù)據(jù)隱藏不僅要能嵌入與正確提取秘密數(shù)據(jù),還要保證載體不被修改[3]。
為了解決這個問題,Honsinger 等[4]提出可逆數(shù)據(jù)隱藏的概念,即嵌入與提取方法是可逆的,隱寫模型可以通過提取秘密數(shù)據(jù)之后恢復(fù)原始載體模型?;诖?,Tian 等[5]提出一種差分?jǐn)U展的可逆方法,Ni等[6]提出一種直方圖移位的可逆方法,這2 種方法都是針對二維圖像像素值的,不能在三維模型中使用。Jhou 等[7]和Wu 等[8]用頂點坐標(biāo)值替換像素值,分別將直方圖移位和差分?jǐn)U展應(yīng)用到三維模型中,實現(xiàn)了三維可逆數(shù)據(jù)隱藏。文獻[9-10]對上述工作進一步優(yōu)化,提高了可逆數(shù)據(jù)隱藏的容量和魯棒性。另一方面,Wen 等[11]提出零水印的概念,即不需要修改原始圖像嵌入秘密數(shù)據(jù)。他們使用高階累積量構(gòu)造零水印,但只適用于二維圖像。杜順等[12]提出一種基于形狀直徑函數(shù)的算法,將零水印擴展到三維網(wǎng)格模型。在此基礎(chǔ)上,文獻[13-14]對算法進行了改進,提高了零水印的魯棒性。
目前,保證三維數(shù)據(jù)隱藏中載體不被修改的手段有2 種:可逆數(shù)據(jù)隱藏和零水印??赡鏀?shù)據(jù)隱藏能夠在提取出秘密數(shù)據(jù)后恢復(fù)原始載體,零水印則強調(diào)不對載體進行任何修改,而是利用載體的某些重要特征來構(gòu)造水印,但是這2 種方法都有一定的弊端,可逆數(shù)據(jù)隱藏嵌入秘密數(shù)據(jù)后會使載體失真,傳輸過程容易引起懷疑,安全性較低,且要恢復(fù)載體就必須先提取秘密數(shù)據(jù),碰到頂點坐標(biāo)值精度損失的情況還會提取失敗,魯棒性差;零水印用模型的某些特征生成秘密數(shù)據(jù),用戶不能自定義秘密數(shù)據(jù)大小和類型,且過于依賴知識產(chǎn)權(quán)(Intellectual Property Rights, IPR)信息數(shù)據(jù)庫[11],不能進行自主盲提取。針對上述問題,文中提出一種基于面元素重排的三維網(wǎng)格模型數(shù)據(jù)隱藏算法。根據(jù)混沌邏輯映射生成的嵌入與提取模式的對稱性,聯(lián)合秘密數(shù)據(jù),可以不依賴IPR 信息數(shù)據(jù)庫獨立進行盲提?。粺o需修改頂點坐標(biāo),而是重排面元素嵌入秘密數(shù)據(jù),兼具高安全性和大嵌入容量,且不會對載體造成任何失真。
三維網(wǎng)格模型指物體在空間中由若干個多邊形連接而成,當(dāng)多邊形足夠多足夠小時,就可以完美表示物體?;A(chǔ)三維網(wǎng)格模型由點和面(大多是三角面)2 種元素構(gòu)成。按一定的順序(記作頂點的索引)排列頂點,使用頂點索引便可構(gòu)成面,最后形成網(wǎng)格。目前主流的三維文件格式(OFF、PLY、OBJ、VRML、X3D 等)都是基于這種數(shù)據(jù)結(jié)構(gòu)[15]。如圖1 展示的是Bunny 三維網(wǎng)格模型及其局部網(wǎng)格情況,表1 展示了局部網(wǎng)格對應(yīng)的數(shù)據(jù)。
圖1 Bunny 及其局部網(wǎng)格Fig.1 Bunny and its local mesh
表1 局部網(wǎng)格文件信息Tab.1 Local mesh file information
傳統(tǒng)三維數(shù)據(jù)隱藏算法通過修改三維模型頂點坐標(biāo)嵌入秘密數(shù)據(jù),易對模型造成永久失真,破壞模型,因此提出一種面元素重排的方法嵌入秘密數(shù)據(jù)。
網(wǎng)格中組成三角面的3 個頂點索引稱為面元素,參見表1。一個三角面在空間中分兩面:光照面和陰影面。依靠法線判斷,法線從陰影面指向光照面,法線與面元素的關(guān)系符合右手法則,如圖2 所示,當(dāng)握住拳頭大拇指指向法線方向時,面元素沿著指尖的方向順序排列。
圖2 右手法則Fig.2 Right hand rule
每個三角面中的3 個面元素有6 種排列方式,由于三角面在空間中的光照面朝向是確定的,為了避免三維模型失真,將三角面的排列順序減少為3 種。在三維網(wǎng)格文件中,數(shù)據(jù)是以一種方式排列的,如表1所示,第1 個面的面元素是1、2、3。若用其他2 種方式表示該面元素,三維模型雖在數(shù)據(jù)保存方面有所變化,但在視覺上完全無失真。由于只是面元素的順序交換,所以文件大小也不會改變。文中正是利用該特點,通過重排面元素的排列順序來嵌入數(shù)據(jù)。
為了提高數(shù)據(jù)隱藏的安全性,使用如式(1)所示的混沌邏輯映射,在嵌入和提取數(shù)據(jù)之前先生成混沌序列[16]。
式中:xi為序列x的元素;μ為控制參數(shù),當(dāng)3.569 945<μ≤4 時,x為混沌序列[9]。
然后通過式(2)將混沌序列x中的值乘以3,向下取整得到模式序列x'。模式序列中元素ix′的取值有3 種可能,0、1 和2,對應(yīng)3 種嵌入和提取模式。
使用混沌映射具有2 個優(yōu)勢。一方面,秘密數(shù)據(jù)嵌入和提取之前通過混沌序列生成模式序列,隨機選擇嵌入和提取模式,增加了秘密數(shù)據(jù)的安全性;另一方面,通過給定相同的控制參數(shù)μ和初始值x0,得到相同的混沌序列,以此保證嵌入和提取不會出錯。
設(shè)有三維載體模型C,秘密數(shù)據(jù)序列I= Ii,i=0,1,2,3,…,LI,三角面F= iF,i=0,1,2,3,…,LF。LI和LF分別為I和F的長度,LI要小于LF。由于三角面的組成元素為頂點的索引,所以3 個元素不相等且有大小順序。嵌入過程如下。
1)加載載體模型C。
2)讀取iF,找出iF3 個組成元素的最小值s、中間值m和最大值l。
3)根據(jù)模式序列x′的元素值ix′確定嵌入模式。如果ix′為0,選擇S 模式——iF的第1 個元素不能為s;如果ix′為1,選擇M 模式——iF的第1 個元素不能為m;如果ix′為2,選擇L 模式——iF的第1 個元素不能為l。
4)嵌入秘密數(shù)據(jù)序列I中的元素Ii。S 模式中,Ii為0 則Fi的第1 個元素為較小值m,為1 則Fi的第1 個元素為較大值l;M 模式中,Ii為0 則Fi的第1個元素為較小值s,為1 則Fi的第1 個元素為較大值l;L 模式中,Ii為0 則Fi的第1 個元素為較小值s,為1 則Fi的第1 個元素為較大值m。
5)i=i+1,如果i=LI則嵌入結(jié)束,得到三維隱寫模型C′,否則回到步驟2。
下面舉例詳細說明,假設(shè)μ為4,0x為0.4,那么模式序列x'={1, 2, 0, 1,…}。設(shè)秘密數(shù)據(jù)序列I={0,1, 1, 0,……},現(xiàn)有4 個三角面(表1)。如圖3 所示,第1 個三角面元素排列為1, 2, 3,模式序列第1 個值為1,選擇M 模式,面的第1 個元素m≠2,所以剩下2 種排列方式為123 和312。秘密數(shù)據(jù)序列第1 個值為0,所以面的第1 個元素選擇較小值m=1,嵌入數(shù)據(jù)后的面元素排列為123。同理可重新排列另外3 個三角面的面元素。
圖3 秘密數(shù)據(jù)嵌入過程Fig.3 Process of embedding secret data
提取之前,需要通過參數(shù)μ和初始值0x得到模式序列x',然后選擇提取模式。提取過程如以下。
1)加載隱寫模型C′。
2)讀取隱寫模型三角面iF′,找出iF′ 3 個組成元素的最小值s、中間值m和最大值l。
3)根據(jù)模式序列x′的元素值ix′確定提取模式。如果ix′取0,選擇S 模式;如果ix′取1,選擇M 模式,如果ix′取2,選擇L 模式。
4)提取秘密數(shù)據(jù)Ii′。S 模式中,iF′的第1 個元素為m則Ii′為0,為l則Ii′為1;M 模式中,iF′的第1 個元素為s則Ii′為0,為l則Ii′為1;L 模式中,iF′的第1 個元素為s則Ii′為0,為m則Ii′為1。
5)i=i+1,如果i=LI則提取結(jié)束,得到秘密數(shù)據(jù)序列,否則返回步驟2。
如圖4 所示,第1 個面元素排列為1, 2, 3,模式序列第1 個值為1,選擇M 模式,面的第1 個元素為1,是s,所以第1 個秘密數(shù)據(jù)為0。同理可提取剩下的秘密數(shù)據(jù)。
圖4 秘密數(shù)據(jù)提取過程Fig.4 Process of extracting secret data
NHD 從2 個點集最大不匹配度反向衡量算法的不可見性,由網(wǎng)格模型包圍盒的對角線長度除以豪斯多夫距離得到,豪斯多夫距離計算見式(4)。NHD接近10-4的值表示在視覺上可以接受的失真[9]。
實驗在Pycharm2020、Meshlab、MeshMixer 環(huán)境中進行,采用斯坦福大學(xué)3D 模型庫[17]中的Bunny、Dragon 和Armadillo 作為載體,見圖5。
圖5 3D 模型Fig.5 3D model
不可感知性的衡量標(biāo)準(zhǔn)有信噪比(signal-to-noise ratio,SNR)和歸一化豪斯多夫距離(Normalised Hausdorff Distance,NHD)。SNR 是衡量隱寫模型與載體模型失真程度的1 個參數(shù),計算公式為[18]:
表2 對比了文中算法與其他算法在不同載體模型上的不可見性??梢钥闯?,文中算法與零水印的效果一樣,在3 個載體模型上的SNR 都為∞,NHD 都為0。說明嵌入秘密數(shù)據(jù)后的隱寫模型與原始載體模型完全一致,沒有任何失真。
表2 不可見性對比Tab.2 Contrast of invisibility
文中算法通過重新排列面元素的順序來嵌入數(shù)據(jù),一個面可以嵌入1bit 秘密數(shù)據(jù)。由歐拉公式(6)可知簡單非空心多面體的面、邊以及頂點的數(shù)量關(guān)系[19]。其中,V、E、F分別是簡單非空心多面體的頂點數(shù)、邊數(shù)和面數(shù)。
假設(shè)一個三角形流形網(wǎng)格包含足夠多的邊和三角形。此外,假設(shè)邊界邊的數(shù)量與非邊界邊的數(shù)量之比可以忽略,邊數(shù)可以由式(7)近似得到[20]。
當(dāng)頂點數(shù)量足夠多時,文中算法的嵌入容量近似為2 比特每頂點(Bit Per Vertex,BPV)。
文中算法通過重排面元素隱藏秘密數(shù)據(jù),沒有修改頂點,因此可以抵抗針對頂點的攻擊,如噪聲攻擊、平滑攻擊和平移、旋轉(zhuǎn)、縮放等仿射變換攻擊。
為了驗證文中算法,采用錯誤比特率(Bit Error Ratio, BER)和相關(guān)系數(shù)ρ[14]進行客觀判斷。BER 和ρ的計算分別見式(9)和式(10)。
通過MeshLab 軟件和python 編程對Dragon 模型進行了多種攻擊,見表3??梢钥闯?,文中算法對于隨機噪聲、拉普拉斯平滑和旋轉(zhuǎn)、平移、縮放等仿射變換攻擊,BER 都為0,ρ都為1,說明文中算法可以完全抵抗這幾種攻擊。
表3 不同攻擊下的魯棒性測試Tab.3 Robustness tests under different attacks
剪切攻擊會減少模型的頂點和面的數(shù)目,是網(wǎng)格模型類算法中對嵌入的秘密數(shù)據(jù)破壞最嚴(yán)重的攻擊[22]。剪切攻擊對魯棒性的影響和剪切比例、剪切位置和嵌入容量均有關(guān),如果剪切部分不含秘密數(shù)據(jù),那么提取數(shù)據(jù)的正確性不受影響。嵌入容量越大,不含密的三角面占比越小,所能完全抵抗的剪切比例越小。
為了測試對剪切含密三角面的魯棒性,將871 414 bit秘密數(shù)據(jù)滿容量嵌入Dragon 模型(含有871 414 個三角面),表4 展示了不同剪切比例下的BER 和ρ。當(dāng)秘密數(shù)據(jù)嵌滿Dragon 模型,剪切比例小于5%時,文中算法的ρ仍大于0.6,BER 仍小于25%,表明文中算法對剪切攻擊有一定的抵抗能力。
表4 滿容量嵌入下不同比例剪切測試Tab.4 Cropping tests of different proportions under full capacity embedding
文中算法有2 個安全性保障:載體無失真和混沌邏輯映射選擇模式。相較于傳統(tǒng)算法,由于載體模型與隱寫模型的完全一致性而不易被人發(fā)現(xiàn),增加了安全性,即使被發(fā)現(xiàn),若不知道參數(shù)μ和初始值0x,也無法正確提取出秘密數(shù)據(jù)。
參數(shù)的范圍μ∈ ( 3.569 945,4],x0∈ ( 0,1),此次嵌入過程取μ=4、x0=0.065。圖6 展示了不同μ時,提取過程中BER 隨x0取值變化的波動范圍??梢钥闯?,當(dāng)μ和x0取值不正確時,提取后數(shù)據(jù)的BER 值都小于40%。實際中μ和x0的取值有無數(shù)個,說明文中算法具有較高的安全性。
圖6 嵌入模式參數(shù)對BER 的影響Fig.6 Effects of embedded pattern parameters on BER
零水印不對載體做任何修改,可逆數(shù)據(jù)隱藏提取秘密數(shù)據(jù)后可以恢復(fù)載體。文中算法屬于無失真數(shù)據(jù)隱藏,只改變面元素的排列,對載體不造成任何失真。表5 將文中算法與最新的零水印和可逆數(shù)據(jù)隱藏方法進行了比較??梢钥闯?,文中方法兼顧了零水印的無失真和可逆數(shù)據(jù)隱藏的盲提取,嵌入容量較大,魯棒抗性方面優(yōu)于可逆數(shù)據(jù)隱藏,與零水印方法相當(dāng)。
表5 三維數(shù)據(jù)隱藏算法比較Tab.5 Comparison of 3D data hiding
文中提出了一種基于面元素重排的三維網(wǎng)格模型無失真數(shù)據(jù)隱藏算法,具有以下優(yōu)勢:這種方法做到了更加便捷的盲提?。贿@種方法通過重排面元素順序隱藏秘密數(shù)據(jù),不會對載體模型造成任何失真,可以用于載體不容修改的軍事和醫(yī)學(xué)領(lǐng)域;未修改載體模型頂點數(shù)據(jù),所以生成的隱寫模型在網(wǎng)上進行傳輸時,即使遭到仿射變換攻擊和頂點平滑等攻擊等,也能保證提取的秘密數(shù)據(jù)完全正確;使用參數(shù)μ和0x選擇嵌入與提取模式,更具安全性,因而適用于秘密通信和版權(quán)保護等領(lǐng)域。
由于文中算法是空間域的,在抵抗剪切攻擊方面有一定的不足,但對于較短的秘密數(shù)據(jù)可以重復(fù)嵌入到模型中,以提高對剪切攻擊的抵抗性。