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