2008年9月2日 星期二

Working - Jiayu 11

時間:2008/09/02
進度:windows環境下argv內容測試

內容:

一、第一種argv輸出方式
 ①撰寫輸出argv內容的程式
  
 ②編譯執行以產生.exe的執行檔(本例為TEST1.exe)。
 ③打開命令提示字元(開始>>附屬應用程式>>命令提示字元)。
 ④更改路徑為TEST1.exe所在目錄, 或將TEST1.exe移至預設目錄。
 ⑤輸入指令:TEST1 -k "123" -d message.txt original.jpg stego.jpg
 ⑥顯示argv的輸出:
  TEST1 -k "123" -d message.txt original.jpg stego.jpg
 []顯示各參數時, 程式裡是以" "空格區隔兩參數



二、第二種argv輸出方式
 ①撰寫輸出argv內容的程式
  
 ②編譯執行以產生.exe的執行檔(本例為TEST2.exe)。
 ③打開命令提示字元(開始>>附屬應用程式>>命令提示字元)。
 ④更改路徑為TEST2.exe所在目錄, 或將TEST2.exe移至預設目錄。
 ⑤輸入指令:TEST2 -k "123" -d message.txt original.jpg stego.jpg
 ⑥顯示argv的輸出:
  T - 1 - m o s
 []顯示各參數時, 程式裡是以" "空格區隔兩參數



三、測試結果
 

2008年8月21日 星期四

Defending Against Statistical Steganalysis - 心得與筆記(1)

關於OutGuess的Embedding Process

整段文章中,最常使用的關鍵字為「redundant bits」,關於「redundant bits」,在老師的blog有一段文章如下:『冗餘位元(redundant bits) 就是經過修改也不會在掩護媒體中產生會被偵測出來的品質下降現象(degrading)。』
而OutGuess的理念就是將機密訊息嵌入到Redundant Bits。

寫在隱藏之前,作者提到了他將Embedding Process切割成兩個步驟:
1. Identification of redundant bits. (將redundant bits辨別出來)
2. The selection of bit in which the hidden information should be placed.(挑選適合放置隱藏訊息的地點)

關於切割成這兩個步驟的理由,老師的blog提到:『切割成兩個步驟的好處是容易取代(easy replacement), 如果要將本篇論文提出的方法在別的資料格式中實作出來, 只要將 identification algorithm 換掉, 然後用新的選擇策略(selection strategy)即可。』

也就是說,由於cover medium的並非只有JPEG這種格式,雖然本篇論文是以針對JPEG格式來撰寫的,切割成這兩個步驟的狀況下,只要修改一下演算法,也可在其他不同格式的cover medium實做OutGuess的理念。

3.1 Identification of Redundant Bits

一份資料的redundant bits建立在cover medium的輸出格式上,不同格式的cover medium所能計算出的redundant bits不同。此外,也必須思考「cover medium在轉換成最終格式時的資料壓縮如何做到最低程度的修改。」

引用自老師的blog:
作者闡述了一個觀念, 用來嵌入機密訊息的冗餘位元通常和影像的儲存格式相關。整個嵌入程序自然也和輸出格式有關。通常壓縮程序也包含其中。要最小化對掩護媒體(cover- medium)的修改(modification), 必須具備有關冗餘位元的相關知識才做得到, 作者提到 OutGuess 實作了整個輸出影像的運算。

在3.1的最後一段提到了:
A bit is locked when the bit has already been used to carry hidden information. This can occur when more than one message is hidden in the cover medium.
這段文字剛好是我長久以來的問題,「如果已經有人針對一個cover medium做了information hiding,但是有人並不知道這件事情,而繼續對同一個cover medium做information hiding的事情,那麼原本的訊息是會被修改掉,還是並存?」
這篇論文提到,他會將已經嵌入資料的部分上鎖,因此如果同一個cover medium都使用OutGuess隱藏訊息的狀況下,資料是有可能並存的(?)

3.2 Selection of Bits
這小節主要是介紹如何挑選redundant bits。

該文章提到,在選擇redundant bits之前,OutGuess先將我們要隱藏的機密訊息用RC4來進行加密,此外也使用RC4的演算法來建立一個PRNG。

在隱藏機密訊息之前,OutGuess會先藏入一個32 state bits來做紀錄之用,其中16-bit用於紀錄亂數seed,另外16-bit用於紀錄隱藏訊息的長度。

關於Seed。
在計算出該cover medium的redundant bits後,將Seed丟入上述利用RC4所產生的PRNG之中,來挑選嵌入訊息的redundant bits的random offsets(隨機距離)。

問題:
在老師的blog中提到,經由文章中所提到的公式計算之後,嵌入的機密訊息的長度會被有效的控制在可嵌入空間的50%之內?

未完 - 待續 (?)

2008年8月12日 星期二

Working - Jiayu 10

時間:2008/08/12
進度:outguess.c
   ① line 1-11
   ② line 13-41
   ③ line 766-786

備註:有一些C的語法想了一陣子, 進度有點緩慢, 請見諒。

2008年8月7日 星期四

Meeting - Jiayu 11

時間:2008.08.05 - 06
地點:S棟六樓
備註:本次為小組研究

內容:
1.產生以OutGuess方法嵌入訊息的圖片
 ①開始安裝Cygwin
 ②Cygwin安裝套件加選OutGuess套件。
  Step1.點選View。
  
  Step2.找到OutGuess,修改Skip選項。
  

 ③將掩護媒體與訊息放在Cygwin目錄底下的home資料夾裡。     
 ④開啟Cygwin,輸入執行OutGuess的指令。
  outguess -k "(自訂的secret key)" -d message.txt Original.jpg Stego.jpg
  

2.畫出藏訊息前後的DCT係數histogram
 ①下載Matlab JPEG Toolbox,放至MATLAB Current Directory目
  錄裡。
 ②讀圖。
  Original = jpeg_read
   ('C:\cygwin\home\Administrator\Original.jpg');
  Stego = jpeg_read
   ('C:\cygwin\home\Administrator\Stego.jpg');

 ③畫histogram。
 

2008年7月21日 星期一

目前工作分配狀況

待辦事項
1.找OutGuess產生圖片 -> 使用Cygwin
2.將1的圖片作Histogram分析
3.網站製作(系辦指定作業)
4.海報製作(同3)
5.文件整理(同3)
6.JPEG規格書 -> 為了審查時的(?)

Matlab

關於使用Matlab的指令來作影像處理
學姊給的網頁如下
http://www.philsallee.com/jpegtbx/index.html

2008年5月27日 星期二

Meeting - Jiayu 10

次序:21或22
時間:2008.05.27
地點:S402

內容:
   ①學術論文的研究動機:寫出該研究的重要性。
   ②測試程式產生obj檔。
   ③正確宣告extern以使用其他副程式的函數
   ④使用obj檔(承②)
   ⑤variable scope。
    Global variable與Local variable的差異在於生命週期。
    時間分三種:1.Compile Time 2.Link Time 3.Run Time
    (名稱可能有誤)

    Global variable是在Compile Time就產生(這裡的產生就是系
    統給一塊記憶體),然後包進obj檔裡。
    Local variable:執行到該函數時才產生,即Run Time時產
    生,該函數執行完即消失。

工作:①世昭至圖書館找五篇論文的研究動機,再找五篇學長姐專研文
    件的研究動機。
   ②查閱相關書籍extern的用法。

Working - Jiayu 0902

時間:2008/05/27
進度:3.使用obj檔(承2)

內容:

①將File1.c移除,改新增剛才執行完Project1所產生的File1.obj。


②Run Project1可正常執行。

Working - Jiayu 09

時間:2008/05/27
進度:2.正確宣告extern以使用其他副程式的函數
內容:

①開啟BCB。
(預設的Project1已有一個Unit1.cpp。)

②建立一個.c檔作為我們的副程式。
開啟BCB,最上排選單點選File >> New >> C File。
(目前這個我們新增的File1.c已經加入Project1。)

③在File1.c裡宣告一個變數ˋ一個函數,並定義之。例:
_________________________
int aaa=5;
void Selection_Sort(int *Num)
{
  int min,temp,i,j;
  for(i=0; i<=8; i++)
  {
    min=i;
    for(j=i; j<=9; j++)
    {
      if(Num[j]<Num[min])
        min=j;
    }

    temp=Num[i];
    Num[i]=Num[min];
    Num[min]=temp;
  }
}


④以預設的Unit1.cpp作為我們的主程式,並呼叫副程式File1.c的變數ˋ函數來使用。
在Unit1.cpp裡宣告我們所用到的陣列ˋ副程式的變數ˋ副程式的函數。如下所示:
_________________________
int Num[10];
extern "C" void Selection_Sort(int*);
extern int aaa;  


⑤在Unit1上新增兩個Label原件。Label1顯示副程式裡的函數正確執行後被修改的陣列值(如果該值還是原來的值,我們可知該副程式裡函數未成功執行。)。Label2顯示副程式裡的aaa變數值。

⑥在主程式裡定義陣列初值 >> 呼叫副程式的函數做排序 >> 顯示結果。
_________________________
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
  for(int i=0; i<10; i++)
    Num[i]=10-i;

  Selection_Sort(Num);

  Label1->Caption=IntToStr(Num[0]);
  Label2->Caption=AnsiString(aaa);
}
 

2008年5月26日 星期一

Meeting - 05/20 紀錄

※關於上週的Meeting,在討論程式以及文件前,老師提及了一些Outguess的方法以及新想法。由於我在奔跑借傳輸線時錯過了一些內容,因此以下僅就「我聽到的部分」以及「我理解的部分」作紀錄。


※時間:2008.05.20 14:30~16:40(大約)
※地點:s402

理論:Outguess上,假設藏資料時,(例如:將2改3,3改2),那麼分析histogram會發現2跟3趨近於一樣高,因此在chi-square的分析下,很容易會被發現破綻。

新想法→如果在2改3的時候,另外挑選一無辜數字3,將之改成2,那麼整張圖在被chi-square分析下,histogram並沒有改變,因此也就無法破解。

破解→
假設在藏的時候,將圖分成A,B,C,D四部份,如果在A區要把2改成3,但因為Outguess是隨機取一無辜3改2,倘若修改的部分不在A區,只要chi-square分析時也將圖片分成A,B,C,D來掃,最終還是可以發現histogram的詭異之處。

因此,新方法就是將圖片切成 N 個區域,為使histogram維持不變,盡量修改同一個區域的數值,如此一來,在chi-square的attack之下,histogram可以盡量維持不變。

因應的辦法就是,chi-square也將圖片切成 M 個部分來掃描。

--
本週練習主題:
Program
Prac將簡單function製作成obj,呼叫使用之。

摘要 v.2

  在本文件中,我們將會介紹「本專題所使用的論文」、「什麼是資訊隱藏」、「論文中提到的幾種隱藏方法以及該如何破解」、「為什麼要使用JPEG」、「JPEG格式」。
  我們將會在:
  第一章介紹「什麼是資訊隱藏」以及「為什麼要使用JPEG」。
  第二章介紹「本專題所使用的論文」以及「論文中提到的幾種隱藏方法以及該如何破解」。
  第三張介紹「JPEG格式」。

--
只是單純想嘗試不同風格的寫法,這次完全嘗試言簡意賅的提到內文會提起的部分。

Working - Jiayu 08

時間:2008/05/26
進度:初審文件摘要撰寫(Version.2)

內容:
  在這份初審文件,我們先針對將機密訊息嵌入至JPEG圖片的隱藏技術做探討。探討方式是以我們所研讀過的兩篇論文為依據,對其中所提到的四種隱藏技術做介紹,分別是JSteg、OutGuess、JPHide、F5這四種隱藏技術。介紹完隱藏技術之後,我們再進一步介紹兩種破解隱藏技術的方法,分別是針對JSteg的卡方攻擊法(chi-square test),以及針對OutGuess的進階卡方攻擊法(extended chi-square test)。最後再說明JPEG的邊碼流程,藉著對JPEG邊碼流程的了解,以期能實作上述的隱藏與破解技術,並進一步做發想。


備註:
  本次修改地方有兩處。一是將第一句的「這份文件」改成「這份初審文件」,以求清晰。二是對最後引入JPEG邊碼流程的敘述做修改,以期能連貫上文不唐突。
 

2008年5月19日 星期一

摘要試寫

資訊隱藏的方法有很多,而為什麼需要隱藏資訊,是因為當我們不想讓第三者知道我們所要傳遞的訊息,而這些訊息可能是些機密的訊息,所以我們透過一些方法來隱藏這些訊息,例如隱寫術(Steganography)及密碼學,而本章我們所要探討在JPEG圖片上做隱藏以及破解方法。

JPEGJoint Photographic Experts Group〉之所以被我們拿來當作實作題材,是因為他在網路上被廣泛應用,基於這個理由,所以我們就JPEG圖片用某些技術來做嵌入資訊或是找出隱藏的訊息。

摘要試寫(小強)

  隱寫術(Steganography)試屬於資訊隱藏中的一門,與密碼學都應用於秘密通訊,不同的是隱寫術不僅保護訊息內容也保護通訊雙方,而密碼學著重於後者。隱寫術是利用掩護媒體(cover-media)來嵌入所要傳遞的訊息內容,而嵌入完的掩護媒體又稱為偽裝媒體(stego-media)。
  
  由於JPEG是一種被廣泛使用的方法,所以在此論文中我門著重在JPEG的隱藏與破解作探討。根據所閱讀的兩篇論文,我們探討了JSteg、OutGuess、JPHide、F5這四種隱藏方法和兩種破解JSteg和OutGuess的方法。

摘要試寫

  資訊隱藏可分為隱寫術(Steganography)、密碼學以及一些其他的技術,(在此我們以較有名的兩個舉例)。而我們專題所要做的,就是隱寫術。所謂的資訊隱藏是指不讓傳送者與接收者以外的人知道有訊息傳遞,如此一來不僅可以保護訊息的內容亦可以保護通訊雙方的安全。通常密碼學比較強調前者,而隱寫術強調後者。
  在此簡單的介紹隱寫術。隱寫術通常用於秘密通訊,選擇一個媒體(可以是圖片、聲音、影像)作為掩護媒體(cover-media)來嵌入想要保護[or傳遞?]的訊息,至於如何嵌入將會在後面說明。而已經嵌入訊息的媒體我們稱之為偽裝媒體(stego-media)。任何人皆可藉由傳送偽裝媒體達到秘密通訊的目的。因此有人懷疑許多犯罪組織利用隱寫術來互相溝通,以及策動犯罪。為防止這樣的情形發生,便開始有人研究破解的方法。卡方攻擊法(Chi-square)即是一個很有名的,用以偵測媒體是否為偽裝媒體的攻擊方法。

--
有種...在寫簡介的感覺 O_Oa
應該 不是錯覺吧|||b

Working - Jiayu 07

時間:2008/05/19
進度:初審文件摘要撰寫(Version.1)

內容:
  在這份文件,我們先對將機密訊息嵌入至JPEG圖片的隱藏技術做探討。探討方式是以我們所研讀過的兩篇論文為依據,對其中所提到的四種隱藏技術做介紹,分別是JSteg、OutGuess、JPHide、F5這四種隱藏技術。介紹完隱藏技術後,我們再進一步介紹兩種破解隱藏技術的方法,分別是針對JSteg的卡方攻擊法(chi-square test),以及針對OutGuess的進階卡方攻擊法(extended chi-square test)。在隱藏與破解技術探討之餘,由於我們一開始選定研究的掩護媒體是JPEG圖片,所以我們也對JPEG圖片邊碼流程做了一定程度的了解,並在此文件的後半部做介紹。


心得:
  這樣讀下來覺得自己寫得有點像章節前的引文(汗,原因是有些東西很難拿捏該不該在摘要寫,以及即使選擇要寫,也有很大機會是寫不完整的。

2008年5月13日 星期二

Note - 摘要

摘要
1.介紹什麼是資訊隱藏
2.為什麼要挑選JPEG
3.如何實做專題、使用什麼工具

隱寫術(steganography)是資訊隱藏的一個分支,應用於秘密通訊(可分為密碼學與隱寫術)。
Hint: 應用與目的

不僅可以保護訊息的內容亦可以保護通訊雙方的安全
密碼學強調保護前者,隱寫術強調保護後者

藏前→藏後
掩護媒體→偽裝媒體
(cover-media→stego-media) 可替換

小強專研問題

接下來我再看程式碼時有找到djpeg.c 這個檔案,我發現它是Linux版本的解壓縮JPEG主程式.

因為我想試著把它改成C語言的版本,於是我就先試著對他做Compiler,出現了兩個錯誤.

如圖一


一個是說重複 #define FAR這個變數,於是我把它刪了一個之後這個錯誤就沒出現.

但是真正有問是第二個錯誤

它是說沒有定義command 這個Function.

也就是說他少定義了這個函數,我繼續的在找尋這個函式是在哪需要用到的在哪些H或C檔有用到.

2008年5月12日 星期一

小強專研發現

根據初審之前程式的進度,小強我繼續的Compiler有了一些小小的發現如下:

1.首先是Compiler jccolor.c這個程式:

(1)首先看到的錯誤是在jmorecfg.h typedef long INT32 出現了如圖一的錯誤


它出現了重複定義 typedef long INT32 的錯誤.



2.於是我就去看了第二個錯誤找到他所說重複定義的變數在 basetsd.h 檔中如圖二:



我發現了同樣是INT32但是宣告的型態卻是不同:



typedef signed int INT32、*PINT32;



typedef long INT32;



3.接下來是 jmorecfg.h 檔裡所宣告的變數typedef int boolean也出現同樣的錯誤如圖三:



也發現到在rpcndr.h中所宣告的相同變數但不同型態如圖四:



typedef int boolean;

typedef unsigned char boolean;

於是我將她們的型態改成一至發現Compiler就可以過了,但是我不知道未什麼他的型態會這樣宣告,是因為變數型態宣告錯誤還是另有問題.我也只是初步猜測他是型態宣告不一至所造成的錯誤.至於是不是我所想的這樣我依然在查證.