跳至主要内容

Image Encryption and Data Embedding Using Transformation Techniques


課程目標

FCUE: FORWARD CONCEALMENT PERMUTATION AND ENCRYPTION

  1. 準備秘密訊息與隱藏金鑰

    • 準備要嵌入的秘密訊息 {S} 以及用於加密的隱藏金鑰 [HK]
  2. 使用 GWMRDH 嵌入秘密訊息

    • 利用 GWMRDH 方法,將秘密訊息 {S} 嵌入到灰階影像中。根據隱藏金鑰 [HK],選擇合適的像素,修改其亮度值以隱藏資訊,確保影像的視覺效果不會受到明顯影響。
  3. 生成標記的灰階影像

    • 嵌入完成後,生成三個標記的灰階影像。這些影像將作為 RGB 顏色通道的灰階版本,含有隱藏的資訊。
  4. 添加秘密置換金鑰 [PK]

    • 在這三個標記的灰階影像上,應用秘密置換金鑰 [PK],進行通道前向置換(Channel Forward Permutation)。此步驟將打亂每個像素中 RGB 順序,以增強隱私性,產生偽置換的標記彩色影像(Pseudo Permuted Marked Color Image)。
  5. 使用秘密加密金鑰 [EK] 進行 RT 加密

    • 最後,利用秘密加密金鑰 [EK],對偽置換的標記彩色影像進行 RT 加密。這一過程將影像轉換為加密的標記彩色影像(Encrypted Marked Color Image),進一步保護嵌入的秘密訊息 {S}

技術重點

  • GWMRDH: 用於影像中隱藏秘密訊息的技術,能在不顯著改變影像外觀的情況下有效地嵌入數據。

  • 通道前向置換: 通過隨機置換影像的顏色通道來增加資料的安全性和隱私性。

  • RT 加密: 一種有效的影像加密技術,能夠保護影像資料不被未經授權的訪問。

FCUE_gray_01.jpgFCUE_gray_02.jpg
FCUE 加密說明FCUE 加密流程圖

BDIX: BACKWARD DECRYPTION INVERSE-PERMUTATION AND EXTRACTING

  1. 準備已加密的標記彩色影像

    • 開始處理已加密的標記彩色影像(Encrypted Marked Color Image)。該影像包含隱藏的秘密訊息 {S},並已經過加密和通道置換處理。
  2. 使用秘密加密金鑰 [EK] 進行逆 RT 解密

    • 利用與加密過程相同的秘密加密金鑰 [EK],對影像進行逆 RT 解密。這一過程將恢復偽置換的標記彩色影像(Pseudo Permuted Marked Color Image),從而回復原始加密前的狀態。
  3. 利用秘密置換金鑰 [PK] 進行通道逆置換

    • 在逆解密的基礎上,使用秘密置換金鑰 [PK] 進行通道逆置換(Channel Inverse Permutation),恢復三個標記的灰階影像。這一步能正確排列 RGB 通道,回到嵌入數據的狀態。
  4. 提取秘密訊息

    • 將這些標記的灰階影像進一步處理,應用 GWMRDH 方法,根據隱藏金鑰 [HK],提取原始的秘密訊息 {S}。這一步驟會反向應用當初嵌入訊息的操作,確保恢復正確的數據。
  5. 生成提取結果

    • 最終,生成的秘密訊息 {S} 完整地從影像中提取出來,確保隱藏訊息的準確性和完整性。

技術重點

  • 逆 RT 解密:使用與加密過程相同的密鑰,回復影像加密前的數據,確保不丟失任何細節。
  • 通道逆置換:逆轉先前的通道置換過程,重新排列 RGB 順序,使影像返回原始灰階版本。
  • 訊息提取(GWMRDH 方法):依據當初嵌入秘密訊息的方式,進行逆向提取,確保還原的數據完整準確。
BDIX_gray_01.jpgBDIX_gray_02.jpg
BDIX 解密說明BDIX 解密流程圖

實作成果

加密流程

  1. 預備準備嵌密的原始影像
Baboon.png
原始影像
  1. 生成嵌密訊息後,使用 GWMRDH 嵌入秘密訊息,生成三個標記的灰階影像。
Baboon_mark_N3_M12_1_3_7_Z1_I1.pngBaboon_mark_N3_M12_1_3_7_Z1_I2.pngBaboon_mark_N3_M12_1_3_7_Z1_I3.png
灰階影像 1灰階影像 2灰階影像 3
  1. 將三張嵌密灰階影像進行排列,變成 RGB 影像,再進行通道前向置換,打亂每個像素中 RGB 順序,因為是灰階看不出太大差異
Baboon_channe_N3_M12_1_3_7_Z1.pngBaboon_permut_N3_M12_1_3_7_Z1.png
三張嵌密灰階影像進行排列形成 RGB 影像打亂每個像素中 RGB 順序
  1. 進行 RT 加密,將像素位置進行打亂
Baboon_encry_N3_M12_1_3_7_Z1.png
RT 加密後的影像

解密流程

  1. 進行 IRT 解密,將獲得原本像素的位置,進行還原
Baboon_decry_N3_M12_1_3_7_Z1.png
IRT 解密後的影像
  1. 進行通道逆置換,獲取每個像素中正確的 RGB 順序
Baboon_invmut_N3_M12_1_3_7_Z1.png
通道逆置換的影像
  1. 拆分 RGB 影像成為三張嵌密的灰階影像
Baboon_decom_N3_M12_1_3_7_Z1_I1.pngBaboon_decom_N3_M12_1_3_7_Z1_I2.pngBaboon_decom_N3_M12_1_3_7_Z1_I3.png
灰階影像 1灰階影像 2灰階影像 3
  1. 使用 GWMRDH 提取嵌密的訊息後,還原出原始圖案
Baboon_restor_N3_M12_1_3_7_Z1.png
原始影像
  1. 確認訊息解密正確,並計算加密過後圖片的品質
ParameterN (Number of Pixels)M (Range of Values)Weight 1 (W1)Weight 2 (W2)Weight 3 (W3)
IndexdSE137
MSE0.000110626220703125
PSNR87.692
EC939776.0
ER313258.80326

課程作業簡述

  • Assign01: Image Encryption by 2D EAT and RP

    • 利用 2D-EAT + Durstenfeld 的 Random Permutation 對影像加密,並使用 2D-EAT 的 Reverse Matrix 以及 Durstenfeld 的 Reverse Random Permutation 對影像作解密。
  • Assign02: Image Encryption Using Enhanced Two-dimensional Sine Logistic Modulation (2D-SLM)

    • 加入 pixel scrambling,利用初始值,對第一個 pixel 的 R、G、B,分別一個串一個加密,再利用下一個 pixel 的 R、G、B 將圖像每個 pixel 做加密。
  • Assign03: Determine the Rectangular Transformation Matrix

    • 計算 legal transformation Matrix 在給定 M、N 數值,a、b、c、d 範圍內符合結果,並判斷是否符合條件,以及計算幾個 period 會回到原本的圖片。
  • Assign04: Determine the Period from the Matrix Coefficients

    • 計算 Rectangular Transformation 在給定 M、N、a、b、c、d 下,判斷條件確認是否是 RT Matrix。
  • Assign05: Inverse Rectangular Transformation

    • 利用 Rectangular Transformation 對影像加密,並使用 Inverse Rectangular Transformation 對影像進行解密, RT 的計算參數由作業 4 算出。
  • Assign06: General Weighted Modulus Data Hiding

    • 使用 General Weighted Modulus 演算法,在給定 Pixel Alternation Table 下,將秘密訊息嵌入到掩護影像,同時也將訊息從掩護影像中還原。
  • Assign07: General Weighted Modulus Reversible Data Hiding (GMWRDH) Algorithm

    • 使用 General Weighted Modulus Reversible Data Hiding 演算法,將秘密訊息嵌入到灰階影像並產生三張灰階影像,並反向取回秘密訊息。
  • Assign08: Integrated Message Embedding and Encryption Algorithm

    • 結合 GWMRDH 將秘密訊息嵌入灰階影像,再利用 RT 將 pixel 進行加密,同時也反向解密並取得嵌入的訊息。

Assign04: Determine the Period from the Matrix Coefficients

獲得心得

這份作業讓我覺得有趣的點在他是一個純運算的作業,因此完全不需要考慮圖像的輸入和輸出,在撰寫程式碼中,我是以一個 arange 去代表每一個 pixel 的數值,經過每次 RT 運算後,再來判斷是否恢復到原本的 arange 的順序,來判斷圖形是否恢復了。

rt_matrix.png
在給定 M、N 大小下,計算符合 RT 的 a、b、c、d 參數,以及他的 period

困難的點 (1/2)

但這份作業因為是一個純運算的作業,在自己的電腦上跑已經很吃力,當圖像大小來到 2560 * 3840 的時候,基本上已經運算不太動,因此開始優化程式的算法。

首先我觀察到 python 在計算每個 pixel 的時候,我使用 for 迴圈,這樣的效率非常差,因此發現 Numpy 的 indices 算法,可以在一行裡面計算完所有位置的矩陣乘法,這樣的算法效率有大幅度的上升,也加速每一次算 RT 的時間,但仍然遇到計算 RT 需要 1/2 * 2560 *3840 次,依然太慢。

difficult_01_for_loop.pngdifficult_01_numpy_indices.png
使用 for 迴圈使用 Numpy 的 indices

困難的點 (2/2)

考慮計算 RT 需要 1/2 * 2560 * 3840 次依然太慢,因此從計算 RT 的地方下手,觀察每個參數計算 RT,發現 RT 做完一次後,有些 pixel 會重複選到一樣的位置,也說明有些位置不會被選到,基於這個原因,我首先將計算後的 RT 結果圖片預設每個 pixel 為-1,然後將原圖計算後附值到結果圖片上,再判斷圖片中是否有 pixel 為-1,如果有就不需要在做下一次的 RT,因為圖像已經遭到破壞,經過這樣的修正,終於可以計算 2560 * 3840 的 RT 參數。

difficult_02_defalut_pixel_value.pngdifficult_02_validate_pixel_value.png
預設每像素為-1,做完 RT 後附值判斷圖像是否有-1,代表 RT 不完全

Assign05: Inverse Rectangular Transformation

作業心得

Rectangular Transformation 的算法比起 EAT,可以處理非正方形的圖像,增強了這個算法的通用性。相比其他計算參數的作業,作業五有圖像輸出,視覺成就感也比較大。此作業也建立在作業 4 之上,需要先計算要用到的參數,讓這份作業有在前一份作業的努力上,更顯出它的成果出來。

在撰寫程式碼中,我了解到每一個 pixel 的移動軌跡,更學習到如何使用 Numpy 的 indices 加速計算每一個位置乘以 Matrix 的算法,讓位置計算速度大幅度增加。

另外原本需要計算 Period 後才能還原圖像的算法,在使用 Inverse Rectangular Transformation 的算法後,可以用相同計算次數就能還原,這種算法讓我覺得很神奇,其中的算法也有很多小數點以及高斯函數的使用,原本預想位置應該是個整數,卻在計算過程中有許多小數,但最後卻能夠還原,最後能實際將論文的方法時做出來,成就感也無比的巨大。

encryp.jpgdecryp.jpg
使用 RT 對影像進行 pixel 加密使用 IRT 將影像還原

Assign08: Integrated Message Embedding and Encryption Algorithm

獲得心得

這份作業統整了嵌密演算法和 RT 的加密,加密讓整個嵌密訊息更加安全,另外在實做程式碼上,也結合前後作業做出一個完整的結果,非常有成就感,同時也感嘆原來加密和嵌密的算法其實不難,簡單的運算卻能有很好的保護讓我覺得很意外。

困難的點

需要將之前作業的程式碼做一個融合,需要考慮每一個運算都要做成函式的形式,同時也考慮到每個功能的泛用性,這點是在前幾個作業沒有想到的,因此在這次作業的實作上,就需要仔細考慮每個運算的過程,也因為運算步驟變多,在除錯上也需要花更多的時間和心力。

encryp.jpgdecryp.jpg
使用 RT 對影像進行 pixel 加密使用 IRT 將影像還原

課程整體評述

教師教學之優點與缺點

老師很細心解釋每個算法的過程,以及來源的論文,並且在上課的時候會詳細的描述整個運算過程,帶著學生走過每個步驟,中途也會確認學生有沒有跟上進度,並且重複針對不懂的地方再解釋一次。此外,也會在上課開始時,討論作業是否有一些問題,會跟同學一起討論有沒有更優的解法,並且在與學生討論時,也能知道老師都有將作業自行跑過一次,真的覺得很用心。

不過也因為上課說明很詳細,有時候聽課的前一小時,無法獲取新的知識,重複複習許多相似的內容,在聽課上要維持專注力會變得很吃力。

課程內容之優點與缺失

課程安排上我覺得很適合,先從最基礎的方形圖片加密,了解純黑白 pixel 的問題,因此加入 pixel 的雜訊,再到每個 pixel 之間互相串聯加密,並做到位置的加密,並測量混亂程度,最後學習到如何嵌入訊息,這一連串由淺入深的安排我自己非常的喜歡。

在後續的作業中,如果能把測量的方法也一起實做出來,我覺得效果和加密過程會更加有說服力。


補充

彩色影像

灰階影像是透過 GWMRDH 嵌密後,將三份灰階影像堆疊成 RGB 影像,如果是彩色影像的話直接嵌密即可。

FCUE_rgb_01.jpgFCUE_rgb_02.jpg
FCUE 加密說明FCUE 加密流程圖
BDIX_rgb_01.jpgBDIX_rgb_02.jpg
BDIX 解密說明BDIX 解密流程圖

長寬不一的影像

利用不同影像排列的順序,就可以製作出各類大小的影像適用於嵌密和後續加密流程。

various_resolutions.jpg
長寬不一以不同的排列製作