將本論文提出之法則與本法則之硬體電路架構以及數據分析之結果進行 總結。
第二章 演算法說明
首先使用加密金鑰及串流加密產生亂數,並與影像資料進行加密運算;接 著再使用不同的加密金鑰產生亂數,以不同的亂數決定浮水印嵌入的位置,而 各層浮水印皆可分別獨立的被擷取出來,並且沒有擷取順序上的限制;另外也 可以隨時進行影像還原,且獨立於擷取浮水印並也沒有順序上的限制,因此本 法則在運用上非常靈活與實用。以下依序進行本法則的詳細說明。
第一節 影像加密
本研究以加密後的影像為資料,並嵌入浮水印於資料中。本論文所選擇的 加密方式為論文 [3]中所提及的 Cellular Automata 方式進行加密。影像 S 的大小 為2𝑁× 2𝑁,且影像 S 為灰階影像,每一個 Pixel 包含有 8-bit,其中 N ∈ ℤ,並且 為正整數。若以二進制的方式來表示一個 Pixel 的數值,則一個 Pixel S 的數值為 (𝑠7𝑠6… 𝑠0)2,如公式(2.1)所示。
𝑆 = 𝑠727+ 𝑠626+ ⋯ 𝑠020 (2.1)
首先使用 Encryption Key 𝒦於串流加密 Ƒ1產生亂數 R,其二進制表示的數 值為(𝑟7𝑟6… 𝑟0)2,接著將 Pixel S 與亂數 R 進行 XOR 運算,如公式(2.2)所示。
𝑥𝑖 = 𝑠𝑖⊕ 𝑟𝑖, 𝑖 = 0, … ,7 (2.2)
其中 ri為亂數 R 的第 i 個 bit,Pixel X 的二進制表示的數值為(𝑥7𝑥6… 𝑥0)2,
Pixel X 屬於加密後的影像 X,接下來依序將影像 S 內所有的 Pixel 依照上式進行
XOR 運算後,可以獲得加密後的影像 X,其大小依然是2𝑁× 2𝑁,其中每一個
Pixel 都以不同的亂數進行加密,影像加密的流程如下圖所示。
圖 2.2 影像加密流程圖
第二節 嵌入浮水印
當獲得加密後的影像 X 後,在進行嵌入浮水印之前,首先將加密後影像 X 以固定大小的 Block 進行切割,接下來使用 Hadamard Transform 依序將 Block 從 空間域轉換至轉換域中,並使用 Data Embedding Key 𝒦1於串流加密Ƒ2產生亂 數,根據亂數決定浮水印資料嵌入於 Block 的位置;而嵌入第二層浮水印則運用 不同於上一層浮水印的 Data Embedding Key 𝒦2於串流加密Ƒ3以產生不同的亂 數,並根據此亂數嵌入浮水印資料,由於每層浮水印資料的嵌入皆根據不同的 亂數決定嵌入的位置,因此本法則的浮水印非常不容易破解。以下將嵌入浮水 印之流程依序細分為 Hadamard Transform、浮水印資料的嵌入、浮水印可逆之條 件,並分別進行詳細的討論。
第2-2.1節 Hadamard Transform
本法則透過 Hadamard Transform 於轉換域中嵌入浮水印,Hadamard
Transform 命名源自法國數學家 Jacques Solomon Hadamard,Hadamard 矩陣的大 小為2𝑘× 2𝑘,在提出純量(1
√2)𝑘後,元素只會是 1 或-1,且為正交及對稱的矩 陣,並且可以透過下列公式(2.3)擴增矩陣的大小。
𝐇2𝑘 = (𝐇2𝑘−1 𝐇2𝑘−1
𝐇2𝑘−1 −𝐇2𝑘−1) , 𝐇0 = 1, 𝐇1 = [1 1
1 −1] (2.3) 根據加密後影像 X 的大小及浮水印的大小,決定好 Block 的大小及
Hadamard 矩陣的大小後,接下來就可以將 Block 進行 Hadamard Transform,藉 由 Hadamard 前轉換將 Block 從空間域變換到轉換域,接下來將會說明如何進行 浮水印資料的嵌入。
第2-2.2節 浮水印資料的嵌入
當 Block 從空間域變換到轉換域後,首先使用加密金鑰及串流加密產生亂 數,並根據亂數決定浮水印資料的嵌入位置;當決定好嵌入位置後,根據位置 於 Block 中取出對應的係數,最後將此係數透過量化函數嵌入浮水印資料。
在說明量化函數之前,首先進行相關數學符號的定義,其中加密後影像 X 的大小為2𝑁× 2𝑁,浮水印 W 的大小為2𝑛 × 2𝑛,浮水印 W 中的每一個 Pixel 皆 包含有 q-bit;在進行嵌入浮水印之前,需要先把加密影像 X 分割成大小相同且
彼此不重疊的 Block 𝐀𝑖,𝑗,0 ≤ 𝑖, j≤ 2𝑛− 1,其中 i 為影像的高度索引值,j 為影 像的寬度索引值,而每個 Block 的大小皆為2𝑘× 2𝑘,且𝑘 = 𝑁 − 𝑛,首先將
Block 𝐀𝑖,𝑗進行 Hadamard 前轉換,變換到轉換域後的 Block 為𝐔𝑖,𝑗,如下列公式 (2.4)所示。
𝐔𝑖,𝑗= 𝐇𝑘𝐀𝑖,𝑗𝐇𝑘𝑇 (2.4)
接下來根據亂數從 Block 𝐔𝑖,𝑗中選出一個係數 u 進行量化,當嵌入的浮水印
W 中的一筆 Pixel
𝑤𝑖,𝑗含有 q 個位元時,在係數 u 中嵌入𝑤𝑖,𝑗後會產生2𝑞種的量 化函數𝑄𝑓, 𝑓 = 0, … , 2𝑞− 1,量化函數𝑄𝑓如公式(2.5)所示。𝑄𝑓(𝑢) = (2𝑞𝑔 + 𝑓)𝐿 (2.5)
其中量化大小的單位L 為一個正的常數,並且𝐿 ∈ ℝ;𝑔為一個整數𝑔 ∈ ℤ,
並且滿足𝑢 ∈ 𝔗𝑓,𝑔,而𝔗𝑓,𝑔為一個區間,定義如公式(2.6)所示。
𝔗𝑓,𝑔 = {𝑡: (2𝑞(𝑔 −1
2) + 𝑓) 𝐿 ≤ 𝑡 < (2𝑞(𝑔 +1
2) + 𝑓) 𝐿} (2.6) 因此量化函數𝑄𝑓是根據多個非重疊性的區間𝔗𝑓,𝑔所組成,並且每一個𝔗𝑓,𝑔區 間的長度為2𝑞𝐿,而每個區間的中心值為(2𝑞𝑔 + 𝑓)𝐿。而每個量化函數𝑄𝑓的映射 結果之間隔大小也是2𝑞𝐿。接下來將舉例在𝑞 = 1的情況下,係數 u 輸入至量化 函數𝑄𝑓的映射結果之係數 v,如下圖 2.3 所示。
𝑤𝑖,𝑗 =𝑣
𝐿 mod 2𝑞 (2.9) 在完成浮水印資料的嵌入後,接著會把完成嵌入浮水印的 Block 𝐕𝑖,𝑗進行 Hadamard 後轉換,把 Block 從轉換域變換回到空間域上,如公式(2.10)所示。
𝐙𝑖,𝑗 = 𝐇𝑘𝑇 𝐕𝑖,𝑗𝐇𝑘 (2.10)
第2-2.3節 浮水印可逆之條件
浮水印資料必須要使用符合相關條件的方式進行嵌入,這樣才可以將浮水 印資料完整無缺失的擷取出來。假設 X 為加密後影像 X 中的 Pixel,而 Y 為加密 後與嵌入完浮水印的影像 Y 中的 Pixel,且 X 在影像 X 中的位置和 Y 在影像 Y 中的位置一樣。而為了滿足本法則的可逆性,Pixel X 與 Pixel Y 之關係必須滿足 公式(2.11)之條件。
|𝑋 − 𝑌| < 0.5 (2.11)
加密後影像 X 中的每一個 Pixel X 皆為 8-bit,而加密後與嵌入完浮水印的影 像 Y 中的每一個 Pixel Y 為𝑚-bit,且𝑚 ≥ 8。在滿足公式(2.10)的情況下,Y 包含 了 8-bit 的整數,以及(𝑚 − 8)-bit 的小數部分,在進行影像還原時,只需要將 Y 的(𝑚 − 8)的小數部分做四捨五入,即可還原成 8-bit 的 Pixel X。
第三節 擷取浮水印
從加密後與嵌入完浮水印的影像 Y 中進行擷取浮水印的流程,與嵌入浮水 印之流程相似,首先將 Y 分割成2𝑘× 2𝑘大小的 Block 𝐁𝑖,𝑗,0 ≤ 𝑖, j≤ 2𝑛− 1,接 下來對 Block 𝐁𝑖,𝑗做 Hadamard 前轉換獲得 Block 𝐂𝑖,𝑗,接下來使用相同的金鑰與 串流加密,產生與嵌入浮水印時相同的亂數,因為浮水印資料的擷取位置必須 要和嵌入時的位置一致,才能根據此位置從 Block 𝐂𝑖,𝑗中獲得正確的係數 c,最
後才能從係數 c 中成功擷取出𝑤̅𝑖,𝑗,𝑤̅𝑖,𝑗如公式(2.12)所示,擷取浮水印之流程如
行相同的流程處理後,即可獲得完全恢復的影像資料。
𝐿 > 2𝑘−𝑚+8 (2.14)
量化大小 L 允許的調整範圍如下公式(2.15)所示:
𝐿 = 𝐿𝑚𝑖𝑛+ ϵ (2.15)
其中量化大小 L 的最小值𝐿𝑚𝑖𝑛如下公式(2.16)所示:
𝐿𝑚𝑖𝑛 = 2𝑘−𝑚+8 (2.16)
公式(2.15)中量化誤差範圍𝜖的計算如下公式(2.17)所示:
0 < ϵ < 2𝑘−𝑞−1(1 − 2−𝑞) (2.17)
下表為單層浮水印的嵌入與擷取之流程需要使用到之相關參數,以下根據浮水 印的資料量列出各參數的計算結果:
表 2.1 嵌入單層浮水印所需參數之計算結果
第六節 多層浮水印
接下來以單層浮水印為基礎,進行多層浮水印的相關參數及計算公式的說 明,首先定義相關參數及數學符號,多層浮水印的表示為𝐖1, ⋯ , 𝐖𝐽,𝐽 ≥ 2,其
中𝐖1為上節的單層浮水印𝐖,嵌入後的第𝑗層浮水印表示方法為𝐖𝑗, 𝑗 = 1, ⋯ , 𝐽;
加密後的影像表示為 X,嵌入了多層浮水印的加密後影像表示為𝐘𝑗, 𝑗 = 1, ⋯ , 𝐽,
而每嵌入一層浮水印的輸入為𝐗𝑗,𝐗𝑗 = 𝐘𝑗−1, 𝑗 = 1, ⋯ , 𝐽,其中𝐗1與𝐘0為加密後 的影像𝐗。首先定義𝐿𝑗為第𝑗層的量化大小,𝐿𝑗的計算如下公式(2.18)所示,其中 𝐿1 = 𝐿:
𝐿𝑗 = 𝐿𝑗,𝑚𝑖𝑛+ 𝜖𝑗 (2.18)
其中公式(2.18)內的𝐿𝑗,𝑚𝑖𝑛計算如下公式(2.19)所示,其中𝑚0 = 8,𝑚1 = 𝑚:
𝐿𝑗,𝑚𝑖𝑛 = 2𝑘−𝑚𝑗+8 (2.19)
其中公式(2.19)內的𝑚𝑗計算如下公式(2.20)所示,其中𝑞1 = 𝑞:
𝑚𝑗 = 𝑞𝑖 + 𝑚𝑖−1+ 1 (2.20)
公式(2.18)中量化範圍𝜖𝑗的計算如下公式(2.21)所示,其中𝜖1 = 𝜖:
0 < 𝜖𝑗 < 2𝑘−𝑞𝑗−𝑚𝑗−1+7(1 − 2−𝑞𝑗) (2.21)
在嵌入完多層浮水印後,加密影像資料中 Pixel 的資料量𝑚𝐽計算方式如下式
(2.22)所示:
𝑚𝐽 = ∑ 𝑞𝑗+ 𝑚0 + 𝐽, 𝑚0 = 8
𝐽 𝑗=1
(2.22)
接續上表 2.1 繼續討論,接著進行第二層浮水印所需參數與計算結果之說明,並 根據第二層浮水印的資料量列出參數的計算結果,其中𝑞1 = 𝑞2:
表 2.2 嵌入第二層浮水印所需參數之計算結果
由於本法則為多層浮水印的架構,大量提高了浮水印的資料量;而且各層 浮水印之間使用不同的加密金鑰及不同的串流加密產生亂數,並根據不同的亂 數決定浮水印資料的嵌入位置,因此浮水印非常不容易破解;此外各層浮水印 皆可分別獨立的進行擷取,並且沒有擷取順序上的限制,另外也可以隨時進行 影像還原,且獨立於擷取浮水印並也沒有順序上的限制,因此本法則在運用上 非常靈活與實用。
第三章 硬體架構與設計
1D Transform Circuit
Data Hiding Data Hiding C PISO Blocks Stage 2
1D Transform Circuit 2
方式為將一個較大的組合邏輯電路插入多個 Pipeline Registers,使得最長路徑縮 短,藉此提升電路整體的時脈(Clock Rate),Pipeline 示意圖如圖 3.2 所示。。
圖 3.2 Pipeline 示意圖
原硬體架構為一次處理一個 Block,一個 Block 包含 16 個 Pixels,當 Block 在進行 Hadamard 轉換的過程中會再將 16 個 Pixels 細分為一次處理 4 個 Pixels,
Hadamard 前轉換(Stage 1)及 Hadamard 後轉換(Stage 3)中包含有矩陣運算單元,
矩陣運算單元在一個 Clock 中處理一筆資料(4 個 Pixels)需等待兩次的加法或減 法運算,才能輸出運算完成的資料。當一個 Block 傳送到 Stage 2 進行嵌入浮水 印時,因為數據隱藏單元為一個較大的組合邏輯電路,其中包含了 Quantization
Circuit、Random Number Generator 以及嵌入浮水印之電路,所以當一筆資料經 過 Stage 2 需要等待很長的時間才能將資料送至 Stage 3 中。因此本論文將原架構 的 Stage 1、Stage 2 及 Stage 3 使用插入 Pipeine Register 的方式改良為 Pipeline 的 架構,進行電路架構及效能上的優化。
接下來說明矩陣運算單元及數據隱藏單元中如何改良為 Pipeline 的架構,其
Combinational Logic
Logic 1 Logic 2 Logic 3 Logic 4
中矩陣運算單元使用於 Stage 1 及 Stage 3,數據隱藏單元使用於 Stage 2。
第一節 矩陣運算單元
在論文 [2]中的矩陣運算單元如圖 3.3 所示。當一筆資料 4 個 Pixels 要輸入 到在 Stage 1 中,要經過矩陣運算單元時,一個 Clock 必須等待 2 次的加減法運 算才可獲得運算結果,因此運算時間為 2 次的加減法運算。
圖 3.3 論文 [2]中之矩陣運算單元
針對此問題,本論文使用 Pipeline 的架構將此矩陣運算單元做優化,如圖
3.4 所示。使用 Pipeline 架構優化後的矩陣運算單元分為兩個運算單元,在此架 構下一個 Clock 將只需要等待一次加減法的運算,即可將運算結果輸出給下ㄧ級 運算單元進行第二次的加減法運算,因此可以達到縮短路徑與提升時脈的目 的。
a
b
c
d
a-b-c+d
a+b-c-d
a-b+c-d
a+b+c+d
圖 3.4 使用 Pipeline 後之矩陣運算單元
第二節 Hadamard Transform
第 2-2.1 節所提到之 Hadamard Transform 之電路架構中,除了上一節所提到 的矩陣運算單元外,另外還包含一個移位暫存器(Shift Register),且使用於 Stage
1 以及 Stage 3 中。本節將說明如何透過移位暫存器完成 Stage 1 以及 Stage 3 中 所需要的矩陣相乘運算,Stage 1 及 Stage 3 的詳細內容將於下一節說明。
Stage 1 及 Stage 3 電路功能是進行三個矩陣的相乘運算,即上一章所提及的 公式 2.4 以及公式 2.10。電路內部的運作是先進行前兩個矩陣的相乘運算,接著 將運算完成的結果乘上第三個矩陣。在進行前兩個矩陣的相乘運算時,移位暫 存器將資料以由左往右的方式推移並儲存,如下圖 3.5。
Stage 1 及 Stage 3 電路功能是進行三個矩陣的相乘運算,即上一章所提及的 公式 2.4 以及公式 2.10。電路內部的運作是先進行前兩個矩陣的相乘運算,接著 將運算完成的結果乘上第三個矩陣。在進行前兩個矩陣的相乘運算時,移位暫 存器將資料以由左往右的方式推移並儲存,如下圖 3.5。