私立東海大學資訊工程與科學系個增強的可逆式資訊隱藏方法。我們採用動態掃描策略,以產生最佳的像素差異...

29
私立東海大學資訊工程與科學系 病歷資料隱藏系統 Health Records Data Hiding System 指導教授:劉榮春 老師 專題生:963823 蘇冠豪 963858 徐紹恒 963859 林世淵 中華民國 九十九年 十二月

Transcript of 私立東海大學資訊工程與科學系個增強的可逆式資訊隱藏方法。我們採用動態掃描策略,以產生最佳的像素差異...

  • 私立東海大學資訊工程與科學系

    病歷資料隱藏系統

    Health Records Data Hiding System

    指導教授:劉榮春 老師

    專題生:963823蘇冠豪 963858徐紹恒 963859林世淵

    中華民國 九十九年 十二月

  • 1

    摘要

    現今,隨著數位時代的來臨,科技一直在進步,數位媒體技術使得人們往來

    更加快速及頻繁,由於數位媒體易於複製與傳播的特性,改變了許多人們過去習

    以為常的生活模式。在大家都已經沉醉在科技所帶來的便利,伴隨而來的是如何

    保障數位媒體內容,防範其不被有心人士刻意非法盜取與竄改是刻不容緩的事。

    我們利用提出了在灰階影像上基於修改兩個相鄰像素之間的差異來達成一

    個增強的可逆式資訊隱藏方法。我們採用動態掃描策略,以產生最佳的像素差異

    值之直方圖。為了減少圖像在資訊嵌入後的失真,我們還考慮了祕密訊息中的二

    進制數字’0’和’1’的多寡。我們亦提出在二元曲線影像上的可逆式資訊隱藏

    方法。為了減少視覺上的差異,我們使用修改曲線中每一行位元數的策略。我們

    也保證完成藏入資訊後的曲線連續性,然後我們再利用AES加密,這樣就有兩道

    鎖,來達成我們的資料藏入圖檔的目的並且資料有雙重安全性。

    關鍵詞:可逆式資訊隱藏、灰階影像、AES加密、動態掃描策略

  • 2

    目錄

    摘要 . . . . . . . . 1

    目錄 . . . . . . . . 2

    緒論 . . . . . . . . 3

    定義及簡介

    研究動機及目標

    研究 . . . . . . . . 5

    流程圖及介紹

    (1) AES ………7

    (2) Embedding procedure ………16

    成果 . . . . . . . .23

    未來展望 . . . . . . . .26

    參考資料及文獻 . . . . . . . .27

  • 3

    緒論

    定義及簡介

    定義:

    資料隱藏(Data hiding)是一種在公開場合傳送數位化資料而不被發現其傳送其

    資料裡頭有隱藏資訊的方法。簡單來說,就是把資料隱藏,使得不容易被察覺該

    資料的存在。

    簡介:

    近年來,隨著網際網路的快速發展、科技的進步,數位化資料廣泛在網路上

    流通。在公開的場合上,利用網路傳送未經過保護的資料,是很容易會遭受竄改

    或者是被盜用,所以保護由網路上傳送資料之安全性以及完整性是當前技術中棘

    手的問題。目前的方法都是利用密碼學或者是資料隱藏術來保護資料的原本性。

    對於資料隱藏的特性來說,像是防止資料被蓄意破壞、或者是資料不容易被

    察覺、盡量降低運算的成本等等。都是目前大家都在廣泛討論的重要話題之一。

    實際來說,真的要設計一個完美的資料隱藏系統是不太可能的,何況如果應用在

    數位化多媒體上,要經過旋轉、反射、複製和量化的過程後,仍然還要保持資料

    的原本性,是非常困難的,所以這些問題以及技術都讓我們值得去深思並且研究

    的。

    研究動機及目標

    動機:

    由於到醫院看病的民眾都要填寫病歷表、醫生檢查過後也要填寫資料在病人

    的病歷表上,使得下次病人就醫時能夠有資料有所憑據,才能儘快地了解病人的

    病情狀況。但是,病歷表都是屬於病人的個人隱私,就算是親朋好友或者是其餘

  • 4

    的人要看都要經過當事人的同意,雖然資料都會輸入在電腦裡以便查詢方便,但

    可能會遭受竄改或者是盜用等,侵犯了隱私權。現在的科技進步,資料隱藏的技

    術也精進許多,在影像加密的部分也有很多方法,所以我們利用影像中藏入資料

    的方式想要把病歷表的重要資料隱藏在病人的照片裡頭,再藉由加密使得病歷表

    的隱藏性增高,以致於病人的資料不會外洩或者是破壞。

  • 5

    研究

    輸入病歷資料

    利用AES產生密文

    藏在照片裡

    隱藏資料完成

    輸入病歷資料

    利用AES產生密文

    藏在照片裡

    隱藏資料完成

    Figure(a):主要流程圖

  • 6

    上圖(a)為主要步驟的流程圖,主要是經過五個步驟來完成整個過程,詳細的具

    體描述如下:

    輸入病歷資料

    輸入病人的基本資料以及病歷。

    利用 AES 產生密鑰

    利用 AES,把病人的病歷資料作為加密,然而產生密文。

    藏在照片裡

    產生的密文藏入在病人的大頭貼中。

    隱藏資料完成

    這些步驟完成後,把病人的病歷資料隱藏在大頭貼中就算是完成。

  • 7

    AES加密

    原本的 DES加密系統使用的金鑰長度太短,為提高安全性。美國國家標準技

    術局(NIST)於 1997 年元月二日開始著手計劃公開徵求新一代加密標準(簡稱

    AES)。

    不同於它的前任標準 DES,Rijndael使用的是置換-組合架構,而非 Feistel

    架構。AES在軟體及硬體上都能快速地加解密,相對來說較易於實作,且只需要

    很少的記憶體。作為一個新的加密標準,目前正被應用到更廣大的範圍。

    嚴格說起來 AES 和 Rijndael加密法並不完全一樣,因為 Rijndael 加密法可

    以支援更大範圍的區塊和密鑰長度:AES的區塊長度固定為 128 位元,密鑰長度

    則可以是 128,192 或 256位元;而 Rijndael 使用的密鑰和區塊長度可以是 32

    位元元的整數倍,在 128~256位元範圍內。加密過程中使用的密鑰是由 Rijndael

    密鑰生成方案產生。

    大多數 AES計算是在一個特別的有限域完成的。簡單來說 AES加密過程是在

    一個 4×4的位元組矩陣上運作,其初值就是一個明文區塊。(Rijndael 加密法因

    支援更大的區塊,其矩陣行數可視情況增加)加密時,各輪 AES加密迴圈(除最

    後一輪外)均包含 4 個步驟:

    1. AddRoundKey — 矩陣中的每一個位元組都與金鑰( key)做 XOR運算;

    金鑰由密鑰生成方案產生。

    2. SubBytes — 透過一個非線性的替換函數,用查找表(s-box)的方

    式把每個字節替換成對應的字節。

    3. ShiftRows — 將矩陣中的每個列進行循環式移位。

    http://en.wikipedia.org/wiki/substitution-permutation_networkhttp://en.wikipedia.org/wiki/Feistel_networkhttp://en.wikipedia.org/wiki/Feistel_networkhttp://zh.wikipedia.org/wiki/%E8%BB%9F%E9%AB%94http://zh.wikipedia.org/wiki/%E7%A1%AC%E4%BB%B6http://zh.wikipedia.org/wiki/%E8%A8%98%E6%86%B6%E9%AB%94http://en.wikipedia.org/wiki/block_size_%28cryptography%29http://en.wikipedia.org/wiki/key_sizehttp://zh.wikipedia.org/wiki/%E4%BD%8D%E5%85%83http://en.wikipedia.org/wiki/Rijndael_key_schedulehttp://en.wikipedia.org/wiki/Rijndael_key_schedulehttp://zh.wikipedia.org/wiki/%E6%9C%89%E9%99%90%E5%9F%9Fhttp://zh.wikipedia.org/wiki/%E5%AD%97%E8%8A%82http://zh.wikipedia.org/wiki/%E6%9F%A5%E6%89%BE%E8%A1%A8

  • 8

    4. MixColumns —。這個步驟使用線性轉換來混合每行內的四個位元組。

    最後一個加密迴圈中省略 MixColumns步驟,而以另一個 AddRoundKey 取代。

    AddRoundKey 步驟:

    AddRoundKey 步驟,金鑰將會與原矩陣合併。在每次的加密過程中,都會由

    主密鑰產生一把回合金鑰(透過 Rijndael密鑰生成方案產生),這把金鑰大小會

    跟原矩陣一樣,以與原矩陣中每個對應的位元組作異或(⊕)加法。

    在 AddRoundKey 步驟中,將每個狀態中的位元組與金鑰做XOR (⊕)。

    SubBytes 步驟:

    http://en.wikipedia.org/wiki/Rijndael_key_schedulehttp://zh.wikipedia.org/wiki/%E5%BC%82%E6%88%96

  • 9

    在 SubBytes步驟中,矩陣中各位元組被固定的 8位元查找表中對應的特定

    位元組所替換,S: bij = S(aij).

    在 SubBytes步驟中,矩陣中的各字節透過一個 8位元的 S-box 進行轉換。

    這個步驟提供了加密法非線性的變換能力。S-box與 GF(28)上的乘法反元素有

    關,已知具有良好的非線性特性。為了避免簡單代數性質的攻擊,S-box結合了

    乘法反元素及一個可逆的仿射變換矩陣建構而成。 此外在建構 S-box 時,刻意

    避開了固定點與反固定點,即以 S-box替換字節的結果會相當於錯排的結果。 此

    條目有針對 S-box的詳細描述:Rijndael S-box

    ShiftRows 步驟:

    在 ShiftRows 步驟中,矩陣中每一行的各個位元組向左方位移。位移量則隨

    著行數遞增而遞增。

    ShiftRows 是針對矩陣的每一個列操作的步驟。 在此步驟中,每一行都向

    左循環位移某個偏移量。在 AES中,第一行維持不變,第二行裡的每個位元組都

    向左循環移動一格。同理,第三行及第四行向左循環位移的偏移量就分別是 2

    和 3。經過 ShiftRows之後,矩陣中每一豎列,都是由輸入矩陣中的每個不同列

    中的元素組成。

    http://en.wikipedia.org/wiki/Rijndael_S-boxhttp://en.wikipedia.org/wiki/cipherhttp://en.wikipedia.org/wiki/Rijndael_S-boxhttp://zh.wikipedia.org/wiki/%E6%9C%89%E9%99%90%E5%9F%9Fhttp://zh.wikipedia.org/wiki/%E5%8F%8D%E5%85%83%E7%B4%A0http://zh.wikipedia.org/wiki/%E9%9D%9E%E7%B7%9A%E6%80%A7http://zh.wikipedia.org/wiki/%E4%BB%BF%E5%B0%84%E5%8F%98%E6%8D%A2http://en.wikipedia.org/wiki/fixed_pointhttp://en.wikipedia.org/wiki/opposite_fixed_pointhttp://en.wikipedia.org/wiki/Rijndael_S-boxhttp://en.wikipedia.org/wiki/Offset_%28computer%29

  • 10

    MixColumns 步驟:

    在 MixColumns 步驟中,每個直行都在 modulo x4 + 1之下,和一個固定多

    項式 c(x) 作乘法。

    在 MixColumns 步驟,每一直行的四個位元組透過線性變換互相結合。每一

    直行的四個元素分別當作 1,x,x2,x3的係數,合併即為 GF(28)中的一個多項式,

    接著將此多項式和一個固定的多項式 c(x) = 3x3 + x2 + x + 2 在 modulo x4 +

    1下相乘。此步驟亦可視為 Rijndael有限域之下的矩陣乘法。MixColumns 函數

    接受 4個位元元組的輸入,輸出 4個位元組,每一個輸入的位元組都會對輸出的

    四個位元組造成影響。因此 ShiftRows和 MixColumns 兩步驟為這個密碼系統提

    供了擴散性。

    http://zh.wikipedia.org/wiki/%E7%BA%BF%E6%80%A7%E5%8F%98%E6%8D%A2http://en.wikipedia.org/wiki/Finite_field_arithmetichttp://en.wikipedia.org/wiki/diffusion%28cryptograohy%29

  • 11

    Rijndael 演算法

    加密過程的虛擬碼(pseudo code):

    Cipher (byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)])

    /* in 為輸入陣列、out = 輸出陣列、w = 金鑰字元陣列 */

    Begin

    Byte state[4, Nb]

    /* 明文陣列複製到狀態陣列上 */

    state = in

    /* 第 0 回合編碼 */

    AddRoundKey(state, w[0, Nb-1])

    /* 第 1 到 Nr – 1 回合編碼 */

    for round = 1 step 1 to Nr-1

    SubBytes(state)

    ShiftRows(state)

    MixColumns(state)

    AddRoundKey(state, w[round*Nb, (round+1)*Nb-1])

    end for

    /* 第 Nr 回合編碼 */

    SubBytes(state)

    ShiftRows(state)

    AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])

    /* 密文陣列輸出 */

    out = state

    end

  • 12

    解密演算法(pseudo code)

    整個Rijndael 演算法包含了四個主要的運作函數:

    AES 加密過程有AddRoundKey() 、SubBytes() 、ShiftRows() 、

    MixColumns() , AES 解密過程有AddRoundKey() 、InvSubBytes() 、

    InvShiftRows()、InvMixColumns()。其中AddRoundKey()需要用到子金

    鑰。由輸入的金鑰產生子金鑰的過程為KeyExpansion。

    流程如下所表示:

    InvCipher(byte in[4*Nb], byte out[4*Nb], word w[Nb *(Nr+1)])

    Begin

    byte state[4, Nb]

    /* 明文陣列填入狀態陣列中 */

    state = in

    /* 第 0 回合編碼 */

    AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])

    /* 第 1 到 Nr -1 回合編碼 */

    for round = Nr-1 step –1 downto 1

    InvShiftRows(state)

    InvSubBytes(state)

    AddRoundKey(state, w[round*Nb, (round+1)*Nb – 1])

    InvMixColumns(state)

    end for

    /* 第 Nr 回合編碼 */

    InvShiftRows(state)

    InvSubBytes(state)

    AddRoundKey(state, w[0, Nb-1])

    /* 密文區塊輸出 */

    out = state

    End begin

  • 13

    金鑰擴充演算法 pseudo code:

    KeyExpansion(byte key[4*Nk], word w[Nb * (Nr+1)], Nk)

    /* 金鑰輸入 key[],子金鑰字元輸出 w[],金鑰字元數量輸入 Nr */

    /*Nk = 4(AES-128),Nk = 6(AES-192),Nk = 8(AES-256)*/

    begin

    word temp

    while (i < Nk) /*將金鑰填入金鑰區塊,第 0 回合使用 */

    i = 0

    w[i] = word(key[4*i],key[4*i + 1],key[4*i +2],key[4*i + 3])

    i = i +1

    end while

    i = Nk

    while (i < Nb * (Nr + 1)) /* 演算第 1 到 Nr 回合所需金鑰 */

    temp = w[i –1]

    if (i mod Nk = 0) /* 子金鑰區塊週期的開始,如圖 3-18

    所示 */

    temp = SubWord(RotWord(temp)) XOR Rcon[i/Nk]

    else if (Nk > 6 and I mod Nk = 4) /* 僅 AES-256 適用

    */

    temp = SubWord(temp)

    end if

    w[I] = w[I – Nk] XOR temp

    I = I +1

    End while

    end

    加密演算法優化

    使用 32或更多位元定址的系統,可以事先對所有可能的輸入建立對應表,

    利用查表來實作 SubBytes,ShiftRows 和 MixColumns 步驟以達到加速的效果。

    這麼作需要產生 4個表,每個表都有 256個格子,一個空間記載 32位元的輸出;

    約佔去 4KB( 4096 位元組 )記憶體空間,即每個表佔去 1KB 的記憶體空間。若

  • 14

    使用的平台記憶體空間不足 4KB,也可以利用循環交換的方式一次查一個 256格

    32位元的表。

    AES安全性問題

    截至 2006年,針對 AES唯一的成功攻擊是旁道攻擊。美國國家安全局審核

    了所有的參與競選 AES 的最終入圍者(包括 Rijndael),認為他們均能夠滿足美

    國政府傳遞非機密檔的安全需要。2003年 6 月,美國政府宣佈 AES可以用於加

    密機密檔:

    AES 加密演算法(使用 128,192,和 256 位元密鑰的版本)的安全性,在設

    計結構及密鑰的長度上俱已到達保護機密資訊的標準。最高機密資訊的傳遞,則

    至少需要 192或 256 位元元的密鑰長度。用以傳遞國家安全資訊的 AES 實作產

    品,必須先由國家安全局審核認證,方能被發放使用。)

    這代表著,由美國國家安全局 NSA批准在最高機密資訊上使用的加密系統首

    次可以被公開使用。許多大眾化產品只使用 128位元元密鑰當作預設值;由於最

    高機密檔的加密系統必須保證數十年以上的安全性,故推測 NSA可能認為 128

    位元太短,才以更長的密鑰長度為最高機密的加密保留了安全空間。

    通常破解一個區塊加密系統最常見的方式,是先對其較弱版本(加密迴圈次

    數較少)嘗詴各種攻擊。AES中 128位元密鑰版本有 10個加密迴圈,192 位元

    密鑰版本有 12個加密迴圈,256位元密鑰版本則有 14個加密迴圈。至 2006年

    為止,最著名的攻擊是針對 AES 7次加密迴圈的 128位元密鑰版本,8次加密迴

    圈的 192 位元密鑰版本,和 9次加密迴圈的 256位元密鑰版本所作的攻擊。

    由於已遭破解的弱版的 AES,其加密迴圈數和原本的加密迴圈數相差太少,

    有些密碼學家開始擔心 AES的安全性:要是有人能將此攻擊加以改進,這個區塊

    http://zh.wikipedia.org/w/index.php?title=%E6%97%81%E9%81%93%E6%94%BB%E5%87%BB&action=edit&redlink=1http://zh.wikipedia.org/wiki/%E7%BE%8E%E5%9B%BD%E5%9B%BD%E5%AE%B6%E5%AE%89%E5%85%A8%E5%B1%80

  • 15

    加密系統就會被破解。在密碼學的意義上,只要存在一個方法,比暴力搜尋密鑰

    還要更有效率,就能被視為一種「破解」。故一個針對 AES 128位元密鑰的攻擊

    若「只」需要 2120 計算複雜度(少於暴力搜尋法 2128),128位元密鑰的 AES

    就算被破解了;即便該方法在目前還不實用。從應用的角度來看,這種程度的破

    解依然太不切實際。最著名的暴力攻擊法是 distributed.net針對 64 位元密鑰

    RC5所作的攻擊。(該攻擊在 2002年完成。根據摩爾定律,到 2005 年 12月,同

    樣的攻擊應該可以破解 66位元密鑰的 RC5。)

    其他的爭議則著重於 AES的數學結構。不像其他區塊加密系統,AES 具有相

    當井然有序的代數結構。[3]雖然相關的代數攻擊尚未出現,但有許多學者認為,

    把安全性建立於未經透徹研究過的結構上是有風險的。

    2002 年,Nicolas Courtois 和 Josef Pieprzyk 發表名為 XSL 攻擊的理論

    性攻擊,詴圖展示 AES 一個潛在的弱點。但幾位密碼學專家發現該攻擊的數學分

    析有點問題,推測應是作者的計算有誤。因此,這種攻擊法是否對 AES 奏效,仍

    是個問題。就現階段而言,XSL攻擊 AES的效果不是很明顯,故將之應用於實際

    情況的可能性並不高。

    http://zh.wikipedia.org/wiki/%E5%AF%86%E7%A2%BC%E5%AD%B8http://en.wikipedia.org/wiki/brute_force_attackhttp://en.wikipedia.org/wiki/brute_force_attackhttp://en.wikipedia.org/wiki/brute_force_attackhttp://en.wikipedia.org/wiki/distributed.nethttp://zh.wikipedia.org/w/index.php?title=RC5&action=edit&redlink=1http://zh.wikipedia.org/wiki/%E6%91%A9%E5%B0%94%E5%AE%9A%E5%BE%8Bhttp://zh.wikipedia.org/w/index.php?title=RC5&action=edit&redlink=1http://zh.wikipedia.org/wiki/%E6%95%B8%E5%AD%B8http://www.isg.rhul.ac.uk/~sean/http://en.wikipedia.org/wiki/Nicolas_Courtoishttp://en.wikipedia.org/wiki/Josef_Pieprzykhttp://en.wikipedia.org/wiki/XSL_attack

  • 16

    Cover

    image

    Boundary

    handling

    Predict the overhead

    information

    Pure payload

    enough?

    Pixel value

    replacement

    Have all secret

    data been

    embedded ?

    Stego

    image

    Temporary

    stego image

    Secret

    data

    FailureYes

    No

    Yes

    No

    Figure(b):Embedding procedure

  • 17

    上圖(b)為隱藏資料的整個步驟的流程圖,主要是經過五個步驟來完成整個過

    程,詳記的具體描述如下:

    Boundary handling

    一些特定的圖像中,會有許多飽和像素 0或 255。當像素值被修改,這些邊

    界像素值可能會導致溢出或下溢時。對於如此,我們則採用了邊界處理程序來解

    決這個問題。我們分成兩個部份來看:

    (1) 對於一個給定的灰階圖像 G(512*512*8),直方圖是由所有的像素值 Pi∈

    [0,255]所產生。在直方圖中,H(Pi)是來表示 Pi的所有值並且假設 G有邊界 0

    或 255像素的值。兩個谷點藉由兩個邊界像素的值 0和 255來被定義,分別與圖

    說明了直方圖的谷點。其次,像素值已由 Pi到最接近的谷點 Pmin,符合遵守三

    種情況。之後,一個新的灰階圖像 G′被取得。

    Figure(c):The grayscale histogram of the medical image

    1. 如果 H(0)>0且 H(255)=0,∀Pi∈[0, Pmin]表示 Pi+1。

    2. 如果 H(0)=0且 H(255)>0,∀Pi∈[Pmin,255]表示 Pi-1。

    3. 如果 H(0)>0且 H(255)>0,∀Pi∈[0, Pmin]表示 Pi+1且∀Pi∈[Pmin,255]

    表示 Pi-1。

  • 18

    1 bit 8 bits 18 bits1 bit

    BA1 BA2 BA3 BA4BA0

    1 bit 8 bits 18 bits1 bit

    BA6 BA7 BA8 BA9BA5

    H(pmin1)Í18 bits H(pmin2)Í18 bits

    Figure(d):The Boundary array(BA)

    (2) 一個邊界陣列(Boundary array (BA))如圖(d),是用來保持邊界像素值的資

    料。在 BA裡,BA0~ BA4說明有關邊界像素值 0的資訊。BA5~ BA9則是說明有關

    邊界像素值 255的資訊。

    領域的描述如下:

    1. 如果 H(0) ≠0,則設定 BA0=0;否則設定 BA0=1。

    2. 如果 BA0=0且 H(Pmin)=0,則設定 BA1=1 否則 BA1=0。

    3. 當 BA0=0,儲存谷點 Pmin的灰階值再 BA2裡且儲存 Pi∈Pmin在 BA3裡。

    4. BA4 是紀錄 Pi∈Pmin中 X與 Y座標的像素值。

    記錄邊界像素值 255的資訊在 BA5~ BA9 中,過程相似於前面四個步驟。如

    果所有的領域是空值,除了 BA0=1 和 BA5=1 之外,指說隱藏圖中沒有邊界像素

    值要處理的需求。

    Predicting overhead information

    程序藉由預測額外資訊的訊息如下:

    1. 首先,三種不同的掃描方式(inverse S掃描、W掃描、helical掃描)提出,

    如下圖(e)所示,這些方法是被用來掃描整個 G′,除了在第一行裡的第一個 39

    個像素。di∈[-255,255]被用來計算像素值和他的鄰近的點並且在直方圖中產生

    差異。

  • 19

    .1 if,

    ,0 if,0

    1 ipp

    ipd

    ii

    i

    i

    2. 定義在直方圖中兩個峰點(dmax1, dmax2)和兩個谷點(dmin1, dmin2),並且

    dmin1< dmax1< dmax2< dmin2。

    3. 利用步驟 1中的掃描方式,去計算峰值 H((dmax1)+H((dmax2))的差異對於預

    測的隱藏含量,得到的最大值 H((dmax1)+H((dmax2))是用來選擇最佳的掃

    描方法的根據。

    4. 利用二進制的字串來表示秘密訊息,並套用在將被嵌入的隱藏圖中。計算 0

    或 1的數量,來確認 0或 1的最大數量。

    5. 利用額外資訊陣列(overhead information array(OIA)),來記錄 overhead

    information;OIA的格式如圖(f)。

    1 2 3 4 5

    10 9 8 7 6

    11 12 13 14 15

    20 19 18 17 16

    21 22 23 24 25

    1 10 11 20 21

    2 9 12 19 22

    3 8 13 18 23

    4 7 14 17 24

    5 6 15 16 25

    1 2 3 4

    16 17 18 19

    15 24 25 20

    14 23 22 21

    13 12 11 10

    5

    6

    7

    8

    9

    (a) (b) (c)

    Figure(e):三種掃描方式:(a) inverse S 掃描(b) W掃描(c) helical 掃描

    9 bits

    OIA1OIA0 OIA2 OIA3 OIA4 OIA5

    9 bits 9 bits 9 bits2 bits 1 bit

    Figure(f):The overhead information array(OIA)

  • 20

    領域的描述如下:

    OIA0:最好的掃描方式:inverse S掃描(00)、W掃描(01)、helical 掃描(10)

    來表示。

    OIA1:表示第一個峰點的值:dmax1

    OIA2:表示第一個谷點的值:dmin1

    OIA3:表示第二個峰點的值:dmax2

    OIA4:表示第二個谷點的值:dmin2

    OIA5:紀錄 0或 1 ,在二進制的秘密訊息中有個基本的最大數量。

    Check whether the pure payload is enough to embed all secret data

    對於檢查是否有足夠的藏量過程描述如下:

    1. 檢查最大藏量是否為 0 bit。如果藏量是 0 bit,則訊息不能被隱藏在圖裡,

    並且藏入程序將被終止。

    2. 估計最大的資料隱藏量 Cap,Cap=( H((dmax1)+H((dmax2)) - OI),其中 OI

    表示額外的資訊。如果 Cap足夠或者大於二進制字串的秘密訊息,所有的秘密訊

    息最在第一次就被藏入,所以設置旗標為 1(F=1),否則相反(F=0)。

    Pixel value replacement

    為了隱藏二進制的秘密訊息,Pi∈G′的灰階值被兩個更改過的鄰近點像素值所

    代替。詳細過程如下:

  • 21

    1. 儲存隱藏圖 G′中第一行第一個 39個像素值,並且替換一個的最低有效位元

    39 個像素值去隱藏在 OIA裡。

    2. 關於插入資訊陣列(IDA)的具體描述如下:

    IDA0:紀錄旗標(F)的值。

    IDA1:紀錄 39個最低有效位元的初值。

    IDA2:紀錄 BA的內容。

    IDA3:紀錄秘密訊息的二進制字串。

    IDA1

    39 bits

    IDA2 IDA3

    ≥2 bits ≥1 bit

    IDA0

    1 bit

    Figure(g):The insertion data array(IDA)

    3. 修改所有像素 Pi 的灰階值,除了 G′中的被儲存的 39個像素值。

    0≦i≦512*512 – 39,過程如下:

    利用最好的掃描方法,掃過整個圖 G′。

    計算鄰近像素值的差異值 di

    ,1 if,

    ,0 if,0

    1 ipp

    ipd

    ii

    i

    i ,並且產生有差異值

    的直方圖。

    從 OIA中檢索峰點(dmax1, dmax2)和谷點(dmin1, dmin2)的值。

    除了保留被儲存的 39個像素值外,有關 IDA的二進制序列和 Pi∈G′中被

    更改的灰階值的敘述如下:

  • 22

    (i) OIA5=0時,

    otherwise,,

    ),,( if,1

    ,1 and if,1

    ,1 and if,1

    ),,( if,1

    1max1min

    ,1max

    2max

    2min2max

    i

    ii

    ii

    ii

    ii

    i

    p

    dddp

    bddp

    bddp

    dddp

    p

    (ii)OIA5=1時,

    otherwise,,

    ),,( if,1

    ,0 and if,1

    ,0 and if,1

    ),,( if,1

    1max1min

    ,1max

    2max

    2min2max

    i

    ii

    ii

    ii

    ii

    i

    p

    dddp

    bddp

    bddp

    dddp

    p

    0≦i≦512*512 – 39,dmin1< dmax1< dmax2< dmin2,並且 b∈{0,1}

    是 IDA一個 bit可以被藏入。

    Determine wherether all secret data have been embedded

    檢查旗標值是 1 或 0來確定所有的秘密訊息是否被藏入。如果 F=1,所有的

    秘密訊息都被藏入在圖中,並且得到一個隱藏後的圖像;否則重複藏入程序直到

    F=1為止。

  • 23

    成果

    我們鍵入的病歷資料經由 AES加密並且存進圖片中這兩道保護程序後,病人

    的病歷資料就可以安全地藏入大頭貼中,也完成我們的目的。

    我們利用兩張圖來做對比,原因是因為圖檔的大小關係,如果有數值一直跑

    出存入,則代表圖檔可存入資料;存入資料後,如果沒有數值跑進去就表示圖檔

    太大,沒有辦法存入。以下就是兩張的對比:

    這是初始的介面,然後 LOAD圖檔進去後,就會顯示如圖上所示。

  • 24

    鍵入資料並按存入。

    數值存入,表示資料可以藏入圖檔。

  • 25

    鍵入資料並按存入。

    圖檔過大,所以資料沒辦法存入。

  • 26

    未來展望

    我們這次專題所做的題目都還有進步的空間,而且還有很多地方可以在修

    改,像是介面操作可以在更人性化,對於使用者操作上來說能夠容易。對於病人

    來說,病歷的內容就含有他們的隱私,在現在科技發達、數位化時代中,我們更

    應該保護好每個人的隱私,就因為技術持續成長,個人的隱私很有可能容易被侵

    犯或是盜用,所以我們更應該利用技術來讓隱私權能夠完全的保護,所以我們希

    望大家都可以往這方面去研究發展,讓這隱藏系統能夠發揮得淋漓盡致。

  • 27

    參考資料及文獻

    1.http://www.nsa.gov/applications/search/index.cfm?q=Advanced%20Encr

    yption%20Standard (National Security Agency)

    2.http://en.wikipedia.org/wiki/Advanced_Encryption_Standard

    (Wikipedia)

    3.Wei-Cheng Hsu

    http://ndltd.ncl.edu.tw/cgi-bin/gs32/gsweb.cgi/ccd=K2pZ5c/search#resu

    lt (運用動態掃描策略的可逆式資訊隱藏及其應用)

    4. W. Bender, D. Gruhl, N. Morimoto, and A. Lu, “Techniques for Data

    Hiding,” IBM Systems Journal, vol. 35, no. 3-4, Feb. 1996, pp. 313-336.

    5. C. W. Honsinger, P. W. Jones, M. Rabbani, and J. C. Stoffel, “Lossless

    Recovery of an Original Image Containing Embedded Data,” U.S. Patent 6

    278 791 B1, Aug. 2001.

    6. M. U. Celik, G. Sharma, A. M. Tekalp, and E. Saber, “Lossless

    Generalized-LSB Data Embedding,” IEEE Transactions on Image

    Processing, vol. 14, no. 2, Feb. 2005, pp. 253-266.

    7. C. L. Tsai, H. F. Chiang, K. C. Fan, and C. D. Chung, “Reversible Data

    Hiding and Lossless Reconstruction of Binary Images Using Pair-wise

    http://en.wikipedia.org/wiki/Advanced_Encryption_Standardhttp://ndltd.ncl.edu.tw/cgi-bin/gs32/gsweb.cgi/ccd=bvDUJa/search?q=aue=%22Wei-Cheng%20Hsu%22.&searchmode=basic

  • 28

    Logical Computation Mechanism,” Pattern Recognition, vol. 38, no. 11, Nov.

    2005, pp. 1993-2006.

    8. Z. Ni, Y. Q. Shi, N. Ansari, and W. Su, “Reversible Data Hiding,” IEEE

    Transactions on Circuits and Systems for Video Technology, vol. 16, no. 3,

    Mar. 2006, pp.354-362.

    9. W. L. Tai, C. M. Yeh, and C. C. Chang, “Reversible Data Hiding Based on

    Histogram Modification of Pixel Differences,” IEEE Transactions on

    Circuits and Systems for Video Technology, vol. 19, no. 6, Jun. 2009, pp.

    906-910.

    10. D. Coltuc and J. M. Chassery, “Very Fast Watermarking by Reversible

    Contrast Mapping,” IEEE Signal Processing Letters, vol. 14, no. 4, Apr.

    2007, pp. 255-258.

    11. M. Fallahpour and M. H. Sedaaghi, “High Capacity Lossless Data Hiding

    Based on Histogram Modification,” IEICE Electronics Express, vol. 4, no. 7,

    Apr. 2007, pp. 205-210.

    12. Y. A. Ho, Y. K. Chan, H. C. Wu, and Y. P. Chu, “High-capacity Reversible

    Data Hiding in Binary Images Using Pattern Substitution,” Computer

    Standards & Interfaces, vol. 31, no. 4, Jun. 2009, pp. 787-794.