Image Encryption and Data Embedding Using Transformation Techniques
課程目標
FCUE: FORWARD CONCEALMENT PERMUTATION AND ENCRYPTION
-
準備秘密訊息與隱藏金鑰:
- 準備要嵌入的秘密訊息
{S}
以及用於加密的隱藏金鑰[HK]
。
- 準備要嵌入的秘密訊息
-
使用 GWMRDH 嵌入秘密訊息:
- 利用 GWMRDH 方法,將秘密訊息
{S}
嵌入到灰階影像中。根據隱藏金鑰[HK]
,選擇合適的像素,修改其亮度值以隱藏資訊,確保影像的視覺效果不會受到明顯影響。
- 利用 GWMRDH 方法,將秘密訊息
-
生成標記的灰階影像:
- 嵌入完成後,生成三個標記的灰階影像。這些影像將作為 RGB 顏色通道的灰階版本,含有隱藏的資訊。
-
添加秘密置換金鑰
[PK]
:- 在這三個標記的灰階影像上,應用秘密置換金鑰
[PK]
,進行通道前向置換(Channel Forward Permutation)。此步驟將打亂每個像素中 RGB 順序,以增強隱私性,產生偽置換的標記彩色影像(Pseudo Permuted Marked Color Image)。
- 在這三個標記的灰階影像上,應用秘密置換金鑰
-
使用秘密加密金鑰
[EK]
進行 RT 加密:- 最後,利用秘密加密金鑰
[EK]
,對偽置換的標記彩色影像進行 RT 加密。這一過程將影像轉換為加密的標記彩色影像(Encrypted Marked Color Image),進一步保護嵌入的秘密訊息{S}
。
- 最後,利用秘密加密金鑰
技術重點
-
GWMRDH: 用於影像中隱藏秘密訊息的技術,能在不顯著改變影像外觀的情況下有效地嵌入數據。
-
通道前向置換: 通過隨機置換影像的顏色通道來增加資料的安全性和隱私性。
-
RT 加密: 一種有效的影像加密技術,能夠保護影像資料不被未經授權的訪問。
![]() | ![]() |
---|---|
FCUE 加密說明 | FCUE 加密流程圖 |
BDIX: BACKWARD DECRYPTION INVERSE-PERMUTATION AND EXTRACTING
-
準備已加密的標記彩色影像
- 開始處理已加密的標記彩色影像(
Encrypted Marked Color Image
)。該影像包含隱藏的秘密訊息{S}
,並已經過加密和通道置換處理。
- 開始處理已加密的標記彩色影像(
-
使用秘密加密金鑰
[EK]
進行逆 RT 解密- 利用與加密過程相同的秘密加密金鑰
[EK]
,對影像進行逆 RT 解密。這一過程將恢復偽置換的標記彩色影像(Pseudo Permuted Marked Color Image
),從而回復原始加密前的狀態。
- 利用與加密過程相同的秘密加密金鑰
-
利用秘密置換金鑰
[PK]
進行通道逆置換- 在逆解密的基礎上,使用秘密置換金鑰
[PK]
進行通道逆置換(Channel Inverse Permutation),恢復三個標記的灰階影像。這一步能正確排列 RGB 通道,回到嵌入數據的狀態。
- 在逆解密的基礎上,使用秘密置換金鑰
-
提取秘密訊息
- 將這些標記的灰階影像進一步處理,應用 GWMRDH 方法,根據隱藏金鑰
[HK]
,提取原始的秘密訊息{S}
。這一步驟會反向應用當初嵌入訊息的操作,確保恢復正確的數據。
- 將這些標記的灰階影像進一步處理,應用 GWMRDH 方法,根據隱藏金鑰
-
生成提取結果
- 最終,生成 的秘密訊息
{S}
完整地從影像中提取出來,確保隱藏訊息的準確性和完整性。
- 最終,生成 的秘密訊息
技術重點
- 逆 RT 解密:使用與加密過程相同的密鑰,回復影像加密前的數據,確保不丟失任何細節。
- 通道逆置換:逆轉先前的通道置換過程,重新排列 RGB 順序,使影像返回原始灰階版本。
- 訊息提取(GWMRDH 方法):依據當初嵌入秘密訊息的方式,進行逆向提取,確保還原的數據完整準確。
![]() | ![]() |
---|---|
BDIX 解密說明 | BDIX 解密流程圖 |
實作成果
加密流程
- 預備準備嵌密的原始影像
![]() |
---|
原始影像 |
- 生成嵌密訊息後,使用 GWMRDH 嵌入秘密訊息,生成三個標記的灰階影像。
![]() | ![]() | ![]() |
---|---|---|
灰階影像 1 | 灰階影像 2 | 灰階影像 3 |
- 將三張嵌密灰階影像進行排列,變成 RGB 影像,再進行通道前向置換,打亂每個像素中 RGB 順序,因為是灰階看不出太大差異
![]() | ![]() |
---|---|
三張嵌密灰階影像進行排列形成 RGB 影像 | 打亂每個像素中 RGB 順序 |
- 進行 RT 加密,將像素位置進行打亂
![]() |
---|
RT 加密後的影像 |
解密流程
- 進行 IRT 解密,將獲得原本像素的位置,進行還原
![]() |
---|
IRT 解密後的影像 |
- 進行通道逆置換,獲取每個像素中正確的 RGB 順序
![]() |
---|
通道逆置換的影像 |
- 拆分 RGB 影像成為三張嵌密的灰階影像
![]() | ![]() | ![]() |
---|---|---|
灰階影像 1 | 灰階影像 2 | 灰階影像 3 |
- 使用 GWMRDH 提取嵌密的訊息後,還原出原始圖案
![]() |
---|
原始影像 |
- 確認訊息解密正確,並計算加密過後圖片的品質
Parameter | N (Number of Pixels) | M (Range of Values) | Weight 1 (W1) | Weight 2 (W2) | Weight 3 (W3) |
---|---|---|---|---|---|
Index | d | SE | 1 | 3 | 7 |
MSE | 0.000110626220703125 | ||||
PSNR | 87.692 | ||||
EC | 939776.0 | ||||
ER | 313258.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 的順序,來判斷圖形是否恢復了。
![]() |
---|
在給定 M、N 大小下,計算符合 RT 的 a、b、c、d 參數,以 及他的 period |
困難的點 (1/2)
但這份作業因為是一個純運算的作業,在自己的電腦上跑已經很吃力,當圖像大小來到 2560 * 3840 的時候,基本上已經運算不太動,因此開始優化程式的算法。
首先我觀察到 python 在計算每個 pixel 的時候,我使用 for 迴圈,這樣的效率非常差,因此發現 Numpy 的 indices 算法,可以在一行裡面計算完所有位置的矩陣乘法,這樣的算法效率有大幅度的上升,也加速每一次算 RT 的時間,但仍然遇到計算 RT 需要 1/2 * 2560 *3840 次,依然太慢。
![]() | ![]() |
---|---|
使用 for 迴圈 | 使用 Numpy 的 indices |
困難的點 (2/2)
考慮計算 RT 需要 1/2 * 2560 * 3840 次依然太慢,因此從計算 RT 的地方下手,觀察每個參數計算 RT,發現 RT 做完一次後,有些 pixel 會重複選到一樣的位置,也說明有些位置不會被選到,基於這個原因,我首 先將計算後的 RT 結果圖片預設每個 pixel 為-1,然後將原圖計算後附值到結果圖片上,再判斷圖片中是否有 pixel 為-1,如果有就不需要在做下一次的 RT,因為圖像已經遭到破壞,經過這樣的修正,終於可以計算 2560 * 3840 的 RT 參數。
![]() | ![]() |
---|---|
預設每像素為-1,做完 RT 後附值 | 判斷圖像是否有-1,代表 RT 不完全 |
Assign05: Inverse Rectangular Transformation
作業心得
Rectangular Transformation 的算法比起 EAT,可以處理非正方形的圖像,增強了這個算法的通用性。相比其他計算參數的作業,作業五有圖像輸出,視覺成就感也比較大。此作業也建立在作業 4 之上,需要先計算要用到的參數,讓這份作業有在前一份作業的努力上,更顯出它的成果出來。
在 撰寫程式碼中,我了解到每一個 pixel 的移動軌跡,更學習到如何使用 Numpy 的 indices 加速計算每一個位置乘以 Matrix 的算法,讓位置計算速度大幅度增加。
另外原本需要計算 Period 後才能還原圖像的算法,在使用 Inverse Rectangular Transformation 的算法後,可以用相同計算次數就能還原,這種算法讓我覺得很神奇,其中的算法也有很多小數點以及高斯函數的使用,原本預想位置應該是個整數,卻在計算過程中有許多小數,但最後卻能夠還原,最後能實際將論文的方法時做出來,成就感也無比的巨大。
![]() | ![]() |
---|---|
使用 RT 對影像進行 pixel 加密 | 使用 IRT 將影像還原 |
Assign08: Integrated Message Embedding and Encryption Algorithm
獲得心得
這份作業統整了嵌密演算法和 RT 的加密,加密讓整個 嵌密訊息更加安全,另外在實做程式碼上,也結合前後作業做出一個完整的結果,非常有成就感,同時也感嘆原來加密和嵌密的算法其實不難,簡單的運算卻能有很好的保護讓我覺得很意外。
困難的點
需要將之前作業的程式碼做一個融合,需要考慮每一個運算都要做成函式的形式,同時也考慮到每個功能的泛用性,這點是在前幾個作業沒有想到的,因此在這次作業的實作上,就需要仔細考慮每個運算的過程,也因為運算步驟變多,在除錯上也需要花更多的時間和心力。
![]() | ![]() |
---|---|
使用 RT 對影像進行 pixel 加密 | 使用 IRT 將影像還原 |
課程整體評述
教師教學之優點與缺點
老師很細心解釋每個算法的過 程,以及來源的論文,並且在上課的時候會詳細的描述整個運算過程,帶著學生走過每個步驟,中途也會確認學生有沒有跟上進度,並且重複針對不懂的地方再解釋一次。此外,也會在上課開始時,討論作業是否有一些問題,會跟同學一起討論有沒有更優的解法,並且在與學生討論時,也能知道老師都有將作業自行跑過一次,真的覺得很用心。
不過也因為上課說明很詳細,有時候聽課的前一小時,無法獲取新的知識,重複複習許多相似的內容,在聽課上要維持專注力會變得很吃力。
課程內容之優點與缺失
課程安排上我覺得很適合,先從最基礎的方形圖片加密,了解純黑白 pixel 的問題,因此加入 pixel 的雜訊,再到每個 pixel 之間互相串聯加密,並做到位置的加密,並測量混亂程度,最後學習到如何嵌入訊息,這一連串由淺入深的安排我自己非常的喜歡。
在後續的作業中,如果能把測量的方法也一起實做出來,我覺得效果和加密過程會更加有說服力。
補充
彩色影像
灰階影像是透過 GWMRDH 嵌密後,將三份灰階影像堆疊成 RGB 影像,如果是彩色影像的話直接嵌密即可。
![]() | ![]() |
---|---|
FCUE 加密說明 | FCUE 加密流程圖 |
![]() | ![]() |
---|---|
BDIX 解密說明 | BDIX 解密流程圖 |
長寬不一的影像
利用不同影像排列的順序,就可以製作出各類大小的影像適用於嵌密和後續加密流程。
![]() |
---|
長寬不一以不同的排列製作 |