一、簡介
本專題主要是以研究論文中所提到的方法來實行如何在JPEG圖片中隱藏訊息,因此在一開始的時候研讀了Hide and Seek[1]來學習前人所提出的方法,而該論文[1]所提到的方法,我們將會在第二章的時候提出介紹。此外,後續有人發表了破解Hide and Seek中所提出的方法,甚至是有更好的隱藏方法,因此我們繼續研讀了第二篇論文[2]來學習更有效率的隱藏方法,同樣也是在第二章的時候提出介紹。
在研究隱藏與破解的方法的同時,發現如果我們對於JPEG沒有一定程度的理解,本專題將難以繼續下去;因此我們開始閱讀JPEG規格書[3]來詳細研究JPEG的格式與內容以及編碼和解碼的方法。我們將在第三章的時候詳細介紹我們所學到的JPEG格式以及該如何去編碼與解碼。
2008年4月30日 星期三
2008年4月29日 星期二
初審文件撰寫-01
ㄧ.JPEG介紹
JPEG縮寫:Joint Photographic Experts Group(結合式照像專業群組),是JPEG組織所制定的一種圖檔格式,為一會破壞圖檔品質的儲存格式。能儲存24位元全彩影像,並且圖檔比原始未經壓縮的BMP檔小數倍。與GIF檔同屬網路最常見之圖檔。要儲存此種格式的影像,最好用專業的影像處理軟體 如PhotoShop儲存,因為可以調整影像儲存的壓縮/品質比,壓縮愈大,品質愈差。
JPEG是由CCITT&ISO的一群專業人員,於1987年正式推出的一種工業壓縮標準,適用於儲存24位元全彩影像及縮小檔案大小,但不支援透明或動畫。JPEG格式運用壓縮運算法則可以將影像資料壓縮成數十分之一的大小,但壓縮比愈高時影像的資料耗損程度會愈大,影像也會愈失真(為達到高度壓縮,部份資料會被忽略)。多數的影像編輯軟體可以調整JPEG的壓縮比值,一般壓縮比10左右比較無法分辨出與原先的差別。雖然JPEG檔好用,但因是破壞性壓縮,所以不宜使用已耗損的JPEG影像一再修改壓縮,以免影像的品質會愈來愈差。
JPEG格式又可分為標準JPEG、漸進式JPEG及JPEG2000三種格式。
1. 標準JPEG格式:此類型圖檔在網頁下載時只能由上而下依序顯示圖片,直到圖片資料全部下載完畢,才能看到全貌。
2. 漸進式JPEG格式:漸進式JPG為標準JPG的改良格式,可以在網頁下載時,先呈現出圖片的粗略外觀後,再慢慢地呈現出完整的內容(就像GIF格式的交錯顯示),而且存成漸進式JPG格式的檔案比存成標準JPG格式的檔案要來得小,所以如果要在網頁上使用圖片,可以多用這種格式。
二.JPEG壓縮的方式
圖片來源: http://zh.wikipedia.org/w/index.php?title=JPEG&variant=zh-tw
Introduction to JPEG and JPEG2000(PDF)





JPEG縮寫:Joint Photographic Experts Group(結合式照像專業群組),是JPEG組織所制定的一種圖檔格式,為一會破壞圖檔品質的儲存格式。能儲存24位元全彩影像,並且圖檔比原始未經壓縮的BMP檔小數倍。與GIF檔同屬網路最常見之圖檔。要儲存此種格式的影像,最好用專業的影像處理軟體 如PhotoShop儲存,因為可以調整影像儲存的壓縮/品質比,壓縮愈大,品質愈差。
JPEG是由CCITT&ISO的一群專業人員,於1987年正式推出的一種工業壓縮標準,適用於儲存24位元全彩影像及縮小檔案大小,但不支援透明或動畫。JPEG格式運用壓縮運算法則可以將影像資料壓縮成數十分之一的大小,但壓縮比愈高時影像的資料耗損程度會愈大,影像也會愈失真(為達到高度壓縮,部份資料會被忽略)。多數的影像編輯軟體可以調整JPEG的壓縮比值,一般壓縮比10左右比較無法分辨出與原先的差別。雖然JPEG檔好用,但因是破壞性壓縮,所以不宜使用已耗損的JPEG影像一再修改壓縮,以免影像的品質會愈來愈差。
JPEG格式又可分為標準JPEG、漸進式JPEG及JPEG2000三種格式。
1. 標準JPEG格式:此類型圖檔在網頁下載時只能由上而下依序顯示圖片,直到圖片資料全部下載完畢,才能看到全貌。
2. 漸進式JPEG格式:漸進式JPG為標準JPG的改良格式,可以在網頁下載時,先呈現出圖片的粗略外觀後,再慢慢地呈現出完整的內容(就像GIF格式的交錯顯示),而且存成漸進式JPG格式的檔案比存成標準JPG格式的檔案要來得小,所以如果要在網頁上使用圖片,可以多用這種格式。
二.JPEG壓縮的方式
圖片來源: http://zh.wikipedia.org/w/index.php?title=JPEG&variant=zh-tw
Introduction to JPEG and JPEG2000(PDF)





初審文件撰寫 - Jiayu 01
日期:2008.04.30 Wed.
版本:1
備註:1.尚有一些文句不是很通順,尚有一些圖片未附加,尚有一些細
節未寫詳細,請先視為草稿做閱讀,之後盡快修改。
2.2-5的問題與討論暫時先將問題無修飾全盤貼出,討論尚未撰
寫。
標題:2-1 研究動機ˋ背景及目的
2-2 論文簡介
(Detecting Steganographic Content on the Internet)
2-3 隱藏方法
2-3-1 JSteg
2-3-2 JPHide
2-3-3 OutGuess
2-4 破解方法
2-4-1 JSteg Detection
2-4-2 JPHide Detection
2-4-3 OutGuess Detection
2-5 問題與討論
內容:
2-1 研究動機ˋ背景及目的
自古以來秘密通訊在許多事證當中顯示,人們在軍事等方面有它的使用需求在。過去古希臘時代在頭皮上刻機密訊息,藉以毛髮遮避而讓人無從察覺。現今網路資訊發達,網路上頻繁流通的圖片、聲音等媒體也成了新一代秘密通訊的媒介。其中從秘密通訊研究中細分出的一門學問即是隱藏學(steganography)。最初接觸到隱藏學是在二年級的資訊隱藏選修課程中,課程是以圖片做為研究的素材,先針對格式較易為人能理解的GIF圖片格式,以分析bit plane為起始,循序漸進慢慢將秘密訊息嵌入。就在聽過一些有趣的例子與相關課程的學習這樣的背景下,進而激發出我們研究的興趣。而此研究的共通目的不外乎是找出更為人所無法偵測的隱藏方法,亦或是找出隱藏方法的缺失,我們的研究也期望針對目前流通率廣泛的JPEG圖片格式,做過去發表過的方法的研究與自身的發想。
2-2 論文簡介
這篇論文[1]是針對JSteg、JPHide、OutGuess這三個隱藏系統提出一個自動偵測架構,這個自動偵測架構包含從網際網路獲得圖片與偵測有無隱藏訊息兩部分。分析來源是ebay拍賣網站上的兩百萬張圖片與USENET網站上的一百萬張。在提出偵測架構前先簡介這三個隱藏系統的隱藏方法與偵測方式。
2-3 隱藏方法
2-3-1 JSteg
此系統是將欲隱藏的資料嵌入[2]至DCT係數[3],至於挑選哪幾個DCT係數來藏資料,這裡是從圖片的開頭開始連續藏,即將隱藏資料依序嵌入至第一個DCT係數、第二個DCT係數、第三個DCT係數……。
2-3-2 JPHide
此系統會先將欲隱藏的資料加密(在此先以隱藏概念為重,暫不討論如何加密。),再將欲隱藏的資料嵌入至DCT係數。有別於前面所敘述的JSteg,這裡不是從圖片開頭循序挑選DCT係數。挑選方法如下所述:
1. 將幾個DCT係數組成一個class,如此整張圖會有很多class。
2.一個固定的table定義各個class之間的順序。
3.依table裡定義的順序,順序在前的class裡的DCT係數優先被嵌入資料。
4.class裡的DCT未必全部挑選,是依PRNG[4]決定挑選或跳過。
特別注意的是這裡是對所有的DCT係數做處理,不因欲隱藏的資料量少而只針對少部分的DCT係數。
2-3-3 OutGuess
此系統是將欲隱藏的資料嵌入至DCT係數,使用PRNG挑選DCT係數來嵌入欲隱藏的資料。
2-4 破解方法
2-4-1 JSteg Detection
使用x^2-test。
2-4-2 JPHide Detection
使用x^2-test,但在計算x^2-test的機率前需先將DCT係數重置成所定義的順序。x^2-test對於JPHide有兩種例外,一是因為JPHide對DCT係數值為-1、0、1的有特殊處理,所以這三種係數無法被x^2-test所偵測。二是JPHide未必是將欲隱藏的資料嵌入LSB,也有可能是second-LSB[5],此種情況x^2-test也無法偵測。
2-4-3 OutGuess Detection
由於OutGuess是使用PRNG挑選DCT係數,所以使用x^2-test偵測也無法像JSteg一樣機率過高的會集中在圖片開端。進而使用extended x^2-test。而extended x^2-test的方法敘述如下:
1.定義一個固定的樣本數。
2.該樣本數裡的數值偵測完後,移動1%的位置,再重新針對在該樣本數裡的數值做偵測。
3.不是找數值相鄰的一對DCT係數算平均,取而代之的是毫無關係的兩DCT係數算平均。
2-5 問題與討論
以下是本篇論文的相關問題與討論。
1.JSteg在藏東西時沒有使用亂數選擇embed的位置(has no random bit selection?)
2.其中提到了"The Hunting of the Snark"has been bzip2似乎不會被X-test偵測到而JSteg會?
3.JSteg-Shell is a Windows user interface to JSteg意思是有不同於Jsteg的介面來發展?之後又提到了RC4(stream cipher),我的見解是Jsteg-Shell是套裝軟體,而RC4則是讓使用者設定的Key,傳訊者與收訊者擁有Key之類的。
4.論文中它說JSteg所選擇用來隱藏的Bit不是隨機的,而是藏在圖片的一開始,是不是就藏資料的時候都是從圖片的一開始開始藏直到所要藏的資料藏完?
5.有點搞不清楚JSteg 和 Jsteg-Shell 因為它在論文中說它是有關JSteg 在Windows的使用者介面,但它具有加密 還有壓縮,那是不是 JSteg and Jsteg-Shell 是兩個不同的方法?
6.A pseudo random number generator determines if coefficients are skipped. 這句話說隨機的數字產生器決定被忽略的係數?這句話是什麼意思?為什麼係數要被忽略?
7."跳過的機率取決於隱藏資訊的大小與已隱藏的bit數。"不知道為什麼?
8."also switch to a mode where the second-least significant bits are modified."想知道這句話是在說什麼樣的情境。
[1] Detecting Steganographic Content on the Internet, published by Niels Provos and Peter Honeyman.
[2] 舉一個嵌入的例子是:若欲隱藏的資料是1,則將要被嵌入機密訊息的數值的LSB(least-significant-bit)則修改為1。
[3] JPEG邊碼流程中的離散餘弦轉換所產生的係數,這裡所提到的DCT係數是特指已量化過的。
[4] PRNG(pseudo-random-number-generator),隨機亂數產生器。
[5]
版本:1
備註:1.尚有一些文句不是很通順,尚有一些圖片未附加,尚有一些細
節未寫詳細,請先視為草稿做閱讀,之後盡快修改。
2.2-5的問題與討論暫時先將問題無修飾全盤貼出,討論尚未撰
寫。
標題:2-1 研究動機ˋ背景及目的
2-2 論文簡介
(Detecting Steganographic Content on the Internet)
2-3 隱藏方法
2-3-1 JSteg
2-3-2 JPHide
2-3-3 OutGuess
2-4 破解方法
2-4-1 JSteg Detection
2-4-2 JPHide Detection
2-4-3 OutGuess Detection
2-5 問題與討論
內容:
2-1 研究動機ˋ背景及目的
自古以來秘密通訊在許多事證當中顯示,人們在軍事等方面有它的使用需求在。過去古希臘時代在頭皮上刻機密訊息,藉以毛髮遮避而讓人無從察覺。現今網路資訊發達,網路上頻繁流通的圖片、聲音等媒體也成了新一代秘密通訊的媒介。其中從秘密通訊研究中細分出的一門學問即是隱藏學(steganography)。最初接觸到隱藏學是在二年級的資訊隱藏選修課程中,課程是以圖片做為研究的素材,先針對格式較易為人能理解的GIF圖片格式,以分析bit plane為起始,循序漸進慢慢將秘密訊息嵌入。就在聽過一些有趣的例子與相關課程的學習這樣的背景下,進而激發出我們研究的興趣。而此研究的共通目的不外乎是找出更為人所無法偵測的隱藏方法,亦或是找出隱藏方法的缺失,我們的研究也期望針對目前流通率廣泛的JPEG圖片格式,做過去發表過的方法的研究與自身的發想。
2-2 論文簡介
這篇論文[1]是針對JSteg、JPHide、OutGuess這三個隱藏系統提出一個自動偵測架構,這個自動偵測架構包含從網際網路獲得圖片與偵測有無隱藏訊息兩部分。分析來源是ebay拍賣網站上的兩百萬張圖片與USENET網站上的一百萬張。在提出偵測架構前先簡介這三個隱藏系統的隱藏方法與偵測方式。
2-3 隱藏方法
2-3-1 JSteg
此系統是將欲隱藏的資料嵌入[2]至DCT係數[3],至於挑選哪幾個DCT係數來藏資料,這裡是從圖片的開頭開始連續藏,即將隱藏資料依序嵌入至第一個DCT係數、第二個DCT係數、第三個DCT係數……。
2-3-2 JPHide
此系統會先將欲隱藏的資料加密(在此先以隱藏概念為重,暫不討論如何加密。),再將欲隱藏的資料嵌入至DCT係數。有別於前面所敘述的JSteg,這裡不是從圖片開頭循序挑選DCT係數。挑選方法如下所述:
1. 將幾個DCT係數組成一個class,如此整張圖會有很多class。
2.一個固定的table定義各個class之間的順序。
3.依table裡定義的順序,順序在前的class裡的DCT係數優先被嵌入資料。
4.class裡的DCT未必全部挑選,是依PRNG[4]決定挑選或跳過。
特別注意的是這裡是對所有的DCT係數做處理,不因欲隱藏的資料量少而只針對少部分的DCT係數。
2-3-3 OutGuess
此系統是將欲隱藏的資料嵌入至DCT係數,使用PRNG挑選DCT係數來嵌入欲隱藏的資料。
2-4 破解方法
2-4-1 JSteg Detection
使用x^2-test。
2-4-2 JPHide Detection
使用x^2-test,但在計算x^2-test的機率前需先將DCT係數重置成所定義的順序。x^2-test對於JPHide有兩種例外,一是因為JPHide對DCT係數值為-1、0、1的有特殊處理,所以這三種係數無法被x^2-test所偵測。二是JPHide未必是將欲隱藏的資料嵌入LSB,也有可能是second-LSB[5],此種情況x^2-test也無法偵測。
2-4-3 OutGuess Detection
由於OutGuess是使用PRNG挑選DCT係數,所以使用x^2-test偵測也無法像JSteg一樣機率過高的會集中在圖片開端。進而使用extended x^2-test。而extended x^2-test的方法敘述如下:
1.定義一個固定的樣本數。
2.該樣本數裡的數值偵測完後,移動1%的位置,再重新針對在該樣本數裡的數值做偵測。
3.不是找數值相鄰的一對DCT係數算平均,取而代之的是毫無關係的兩DCT係數算平均。
2-5 問題與討論
以下是本篇論文的相關問題與討論。
1.JSteg在藏東西時沒有使用亂數選擇embed的位置(has no random bit selection?)
2.其中提到了"The Hunting of the Snark"has been bzip2似乎不會被X-test偵測到而JSteg會?
3.JSteg-Shell is a Windows user interface to JSteg意思是有不同於Jsteg的介面來發展?之後又提到了RC4(stream cipher),我的見解是Jsteg-Shell是套裝軟體,而RC4則是讓使用者設定的Key,傳訊者與收訊者擁有Key之類的。
4.論文中它說JSteg所選擇用來隱藏的Bit不是隨機的,而是藏在圖片的一開始,是不是就藏資料的時候都是從圖片的一開始開始藏直到所要藏的資料藏完?
5.有點搞不清楚JSteg 和 Jsteg-Shell 因為它在論文中說它是有關JSteg 在Windows的使用者介面,但它具有加密 還有壓縮,那是不是 JSteg and Jsteg-Shell 是兩個不同的方法?
6.A pseudo random number generator determines if coefficients are skipped. 這句話說隨機的數字產生器決定被忽略的係數?這句話是什麼意思?為什麼係數要被忽略?
7."跳過的機率取決於隱藏資訊的大小與已隱藏的bit數。"不知道為什麼?
8."also switch to a mode where the second-least significant bits are modified."想知道這句話是在說什麼樣的情境。
[1] Detecting Steganographic Content on the Internet, published by Niels Provos and Peter Honeyman.
[2] 舉一個嵌入的例子是:若欲隱藏的資料是1,則將要被嵌入機密訊息的數值的LSB(least-significant-bit)則修改為1。
[3] JPEG邊碼流程中的離散餘弦轉換所產生的係數,這裡所提到的DCT係數是特指已量化過的。
[4] PRNG(pseudo-random-number-generator),隨機亂數產生器。
[5]
2008年4月28日 星期一
初審 - 參考文獻部份
稍微列了一些,有遺漏歡迎補齊
專題研究相關文件:
[1] Hide and Seek: An Introduction to Steganography(附件一)
[2] Detecting Steganographic Content on the Internet(附件二)
[3] JPEG規格書(CCITT T.81 - THE INTERATIONAL TELEGRAPH AND TELEPHONE CONSULATATIVE COMMITTEE / TERMINAL EQUIPMENT AND PROTOCOLS FOR TELEMATIC SERVICES / INFORMATION TECHNOLOGY – DEGITAL COMPRESSION AND CODING OF CONTINUOUS – TONE STILL IMAGES – REQUIREMENTS AND GUIDELINES)
[4] IJG(Independent JPEG Group)所提供的Encoder與Decoder
[1] 李遠坤老師的Stego Note:http://leestego.blogspot.com/
[2] 中文維基百科-JPEG條目:http://zh.wikipedia.org/wiki/JPEG
[3] 英文維基百科-JPEG條目:http://en.wikipedia.org/wiki/JPEG
[4] 英文維基百科-隱寫術(Steganography)條目:http://en.wikipedia.org/wiki/Steganography
[5] 查詢Header File:http://www.koders.com/
2008年4月27日 星期日
專研初審文件
參考 初審文件範例
「我們的文件」
不定時更新
1.簡介 - -
2.論文與系統的介紹 - -
2-1研究動機、背景及目的 - -
2-2 論文介紹 - -
2-3隱藏與破解的方法 - -
2-4遭遇的問題及實做心得 - -
2-4-1 遭遇問題 - -
* - -
* - -
* - -
* - -
* - -
2-4-2 實做心得(初審暫時保留) - -
2-4-3 還沒想到(保留) - -
3.JPEG格式介紹 - -
3-1 - -
3-2 - -
3-3 - -
3-4 - -
3-5 - -
3-6 - -
3-7 - -
4.結論 - -
5.參考文獻 - -
關於遭遇問題與心得那邊
打算採用各自寫各自的(這部分需要討論)
找個機會討論一下?
「我們的文件」
不定時更新
1.簡介 - -
2.論文與系統的介紹 - -
2-1研究動機、背景及目的 - -
2-2 論文介紹 - -
2-3隱藏與破解的方法 - -
2-4遭遇的問題及實做心得 - -
2-4-1 遭遇問題 - -
* - -
* - -
* - -
* - -
* - -
2-4-2 實做心得(初審暫時保留) - -
2-4-3 還沒想到(保留) - -
3.JPEG格式介紹 - -
3-1 - -
3-2 - -
3-3 - -
3-4 - -
3-5 - -
3-6 - -
3-7 - -
4.結論 - -
5.參考文獻 - -
關於遭遇問題與心得那邊
打算採用各自寫各自的(這部分需要討論)
找個機會討論一下?
2008年4月12日 星期六
初審文件 - 老師的建議( Meeting 17 )
Chapter 1 簡介
Chapter 2 論文 (閱讀心得與實作(?)問題與討論(?))
Chapter 3 JPEG格式介紹 (比wiki更為詳細的介紹,目標是改編wiki XD!)
----------以上是初審需要具備的內容(建議)----------
Chapter 4 實作
Chapter 5 結論
Chapter 2 論文 (閱讀心得與實作(?)問題與討論(?))
Chapter 3 JPEG格式介紹 (比wiki更為詳細的介紹,目標是改編wiki XD!)
----------以上是初審需要具備的內容(建議)----------
Chapter 4 實作
Chapter 5 結論
2008年4月11日 星期五
Working - Jiayu 06
時間:2008/02/26-04/08
進度:Independent JPEG Group's JPEG Library
作業:
① IJG's library - install.doc page1~3。
② 使用BCB執行library裡附的程式碼。
心得:
本學期截至目前的進度個人覺得有點微不足道,上學期早該實作
出的卡方攻擊法也因設計問題N度停擺,目前朝讓自己更努力一
點的方向努力。
進度:Independent JPEG Group's JPEG Library
作業:
① IJG's library - install.doc page1~3。
② 使用BCB執行library裡附的程式碼。
心得:
本學期截至目前的進度個人覺得有點微不足道,上學期早該實作
出的卡方攻擊法也因設計問題N度停擺,目前朝讓自己更努力一
點的方向努力。
2008年4月1日 星期二
Meeting - Jiayu 09
次序:16
時間:2008.04.01
地點:教師休息室
內容:
①小冬研究報告
②小強進度報告
-Linux相關指令研究中。
③C/C++語言裡extern的意義與使用方法。
extern參考資料
(由於我還是覺得這個人述說的很清楚,所以再次推薦閱讀。)
④BCB的基本檔案:
1. Project1.bpr
2. Project1.cpp
3. Project1.res
4. Unit1.dfm
-定義Form的外觀。
5. Unit1.h
6. Unit1.cpp
⑤程式從編寫至執行過程中的各步驟意義:
1.前處理器(preprocessor):
⒜刪除機器不須觀看的註解。因註解是程式撰寫者撰寫時給
自己看的註記。
⒝引進標頭檔。將標頭檔裡的內容複製到主程式。
2.編譯器(compiler):
將原始程式翻譯成機器能識別的機器碼。
3.連結器(linker):
程式中使用到的參數會放在記憶體的一塊位置,連結器就是
告訴程式該參數是在記憶體的哪個位置。
(這裡只以參數為例,還有其他需連結的東西。)
⑥測試讓BCB的Unit1使用其他.c程式裡的函數。
(待我返校後附上程式。)
工作:①參考今日的測試,再嘗試以BCB引進IJG library裡的jccolor.c
使用。
時間:2008.04.01
地點:教師休息室
內容:
①小冬研究報告
②小強進度報告
-Linux相關指令研究中。
③C/C++語言裡extern的意義與使用方法。
extern參考資料
(由於我還是覺得這個人述說的很清楚,所以再次推薦閱讀。)
④BCB的基本檔案:
1. Project1.bpr
2. Project1.cpp
3. Project1.res
4. Unit1.dfm
-定義Form的外觀。
5. Unit1.h
6. Unit1.cpp
⑤程式從編寫至執行過程中的各步驟意義:
1.前處理器(preprocessor):
⒜刪除機器不須觀看的註解。因註解是程式撰寫者撰寫時給
自己看的註記。
⒝引進標頭檔。將標頭檔裡的內容複製到主程式。
2.編譯器(compiler):
將原始程式翻譯成機器能識別的機器碼。
3.連結器(linker):
程式中使用到的參數會放在記憶體的一塊位置,連結器就是
告訴程式該參數是在記憶體的哪個位置。
(這裡只以參數為例,還有其他需連結的東西。)
⑥測試讓BCB的Unit1使用其他.c程式裡的函數。
(待我返校後附上程式。)
工作:①參考今日的測試,再嘗試以BCB引進IJG library裡的jccolor.c
使用。
訂閱:
意見 (Atom)