本部落格已搬遷, 3秒後跳轉...

資訊隱藏:竄改偵測與復原 | Laplace's Lab

資訊隱藏:竄改偵測與復原

在這學期的資訊隱藏課程內容中,我認為這是最有趣的,利用事先藏入彩色影像中的隱密資訊,竟然可以偵測出遭到竄改的區域,甚至進行一定程度的復原,這好像有點神奇… 😲

資訊嵌入

藏入的隱密資訊其長度為36-bit,由16-bit authentication data加上20-bit recovery data所組成。生成這36-bit資訊的過程有些繁瑣:

  1. 生成global feature:將影像摘要資訊以MD5生成128-bit hash value,依序分割為8段、每段16-bit進行XOR運算。
  2. 將影像分割為2x2的不重疊區塊,然後做區塊映射:其結果將用來隱藏recovery data,也就是將目標區塊的復原資訊藏在映射區塊。
  3. 生成local feature:將2x2區塊每個像素之RGB各取5-bit最大有效位元(MSB),再加上1-bit偶校驗(Even Parity)組成該像素的feature data,然後將4組feature data和區塊的row index、column index進行XOR運算。
  4. 生成authentication data:將global feature與2x2區塊的local feature進行XOR運算。
  5. 生成recovery data:計算2x2區塊的像素RGB平均值並轉換色彩空間至YCbCr,將Y加上Cb、Cr各取6-bit MSBs組成20-bit復原資訊。

根據區塊映射之結果,將映射區塊的authentication data加上目標區塊的recovery data,組合成36-bit隱密資訊並嵌入至映射區塊。嵌入方式為自2x2映射區塊中,從每個像素點之R、G、B各取3-bit最低有效位元(LSB)來使用。

*舉例來說,假設目標區塊A的index為(3, 4),其映射區塊為B(2, 1),則要嵌入至區塊B的36-bit隱密資訊 = 區塊B的16-bit authentication data + 區塊A的20-bit recovery data。因此,在影像遭到竄改而導致區塊A毀損,而區塊B完好如初的情況下,就可以從區塊B取出復原資訊來修復區塊A。

竄改偵測

要知道經過上述處理的影像是否遭到竄改,可透過找出真正的global feature以比對出可能遭到竄改的區域:

  1. 將影像分割為2x2的不重疊區塊,提取出嵌入於區塊中的16-bit authentication data。
  2. 提取global feature:生成區塊的local feature並和authentication data進行XOR運算。
  3. 統計所有區塊提取出的global feature,出現頻率最多次的即為真正的global feature。
  4. 比對所有區塊的global feature,就能劃分出可能遭到竄改的區域。

影像復原

透過上述的竄改偵測,若確認影像遭到竄改,可利用嵌入其中的recovery data來嘗試復原影像:

  1. 確認竄改區域,定位被竄改區塊的區塊映射位置。
  2. 比對global feature檢查映射區塊是否也遭到竄改,以確認recovery data的可用性。
  3. 若映射區塊並無遭到竄改,則提取映射區塊中的20-bit recovery data,還原YCbCr(Cb、Cr捨棄的2-bit LSBs補0)並將色彩空間轉換回RGB,以此RGB值來復原被竄改的區塊。
  4. 若映射區塊亦遭到竄改,在recovery data不可用的情況下,就只能使用其所有相鄰區塊的像素平均值來修復了。

*原始碼連結:Github
*測試影像來源:unsplashunsplash

0%