2013年10月15日 星期二

影像匿蹤祕技(Steganography)之一

影像匿蹤祕技(Steganography)之一


兩個禮拜前的週末,艾瑞克去友情贊助了一場資訊安全的課程,內容講的是密碼學。原本想就CISSP一般課程的內容隨口蓋蓋就算了,沒想到主辦單位特別叮嚀要多點實例和工具;八成是怕我把學員都哄得睡著了。這下子可得多下點功夫免得漏氣了。於是花了些時間,把各種密碼學比較有趣的東東重新翻出來,溫故之餘也知新不少,蠻有一些收穫。蒐集資料的當兒,我發現 Wikipedia (http://en.wikipedia.org) 真是太好用,這種自己會長大的網上百科全書,相信未來一定會成為人類學習知識的最佳途徑,實在比書本和老師有用的多。
有一種有趣的加密方法,是把密文或密圖隱藏在另一張可視的圖片裡頭,收到圖片的人必須用特殊方法才可以解開和還原隱藏的密圖,這種方法叫做 Steganogaphy。以前念書念到這裡,知其然但不知其所以然;這圖怎麼隱藏呢?又該怎麼解密?嘿嘿.. Wikipedia 裡頭就有範例,而且很有趣,可以從一張看似樹木的照片,解出一張貓的相片。(範例:http://en.wikipedia.org/wiki/Steganography)。
但是Wikipedia 網站只教怎麼解密,卻沒有教怎麼合併兩張獨立不同的圖檔,而且要保留完整的樣子。經過幾天的摸索,艾瑞克終於推敲出其中的訣竅,可以很快的合成這種加密圖檔。以下這張圖就是我做的密圖喔,他可是隱藏了一張完全不同的圖片呢。如果你有Photo Shop 或 Paint Shop Pro X ( http://www.corel.com 可以下載30天試用版) 等影像處理軟體(Photoimpact 沒有 Arithmetic 功能,所以不能用),你可以循下列的方法,解出背後隱藏的圖。動手試試看做不做得出來,答案下期分曉。

       AND               =    ???? ...答案下次分曉
                  密圖                                                       解密之 Key  (一張RGB=777的圖)
解密步驟:
(1) 另存上面瀑布那張密圖(最好存成png格式,不要用JPG), 在 Paint Shop Pro 把圖打開。
(2) 另外,新增一個新的圖形檔案,注意大小和解析度和瀑布圖一樣 (204 x 256 pixel,解析度72 pixel, RGB 24 bits)
(3) 在這個空白的新圖檔裡頭,塗滿顏色 R=7, G=7, B=7, 也就是 html 顏色 #070707。(或是直接使用上面右邊這張Key 圖)
(4) 用 Image > Arithmetic 功能,  選擇 「AND」 運算,合併兩張圖。合併後,你會獲得一張看似全黑的圖。
(5) 把這張合併後的圖,用Adjust > Color > Fade Correction,放大色階,就獲得最終答案。
嘿嘿... 成功解開密圖了嗎?
找到答案記得留言喔,看誰第一名!!

DES (Data Encryption Standard)

DES (Data Encryption Standard)

DES 屬於 block cipher,每個區塊的大小為 64 bits,所使用的金鑰長度為 56 bits(其實原本的金鑰長度為 64 bits,但是有 8 bits 會被捨棄不用),經過一連串複雜的 substitution 以及 transposition 的運算處理過程,產生出 64 bits 的 cipher text。
加密過程可以參考此網頁
其實 DES 已經是個強度很強的加密演算法,以目前電腦的運算能力進行破解,也要花上很多年。

Triple DES

DES 雖然加密強度已經很強,不過當未來出現了運算能力更強的電腦,或是平行運算技術更加成熟後,難保不會在短時間內被破解,因此就有人提出 Triple DES 的演算法。
顧名思義,Triple DES 即是將 plain text 進行三次 DES 的運算處理,有兩種方式:
  1. 使用三把金鑰(K1, K2, K3)
    這個部分比較容易瞭解,很單純的在三次 DES 加密的過程中,分別使用不同的三把金鑰。
  2. 使用兩把金鑰(K1, K2)
    這個部分則是有些變化,大概說明其運作步驟:
    (1) 第一次 DES 加密使用金鑰 K1,假設產生的加密結果為 C1
    (2) 第二次則是以金鑰 K2 對 C1 進行解密,假設產生 C2
    (3) 最後一次則是再以金鑰 K1 對 C2 進行加密
透過此種多重加密的方式,確保 Triple DES 的安全性再更上一層! (當然也要多花點運算處理的時間.....)

IDEA (International Data Encryption Algorithm)

IDEA 亦屬於 block cipher,其加密強度比起 DES 更強,因為所使用的金鑰為 128 bits,而每一次處理的區塊資料長度一樣為 64 bits。
不過由於這是有專利的,因此相較於 DES,並沒有這麼普及。
運作原理大致上跟 DES 不會差異太多,只是一些細節的部分有所差異,詳細過程可以參考以下兩篇文章:
  1. International Data Encryption Algorithm
  2. IDEA 密碼系統

RC5

RC5 也是屬於 block cipher,此演算法是相當有彈性的,不僅可以自訂每個加密區塊的長度,也可以自訂加密的回合數與金鑰的長度,加上只使用了電腦的基本運算(加法、XOR ... etc),因此不僅彈性很大,速度也很快。
而由於 RC5 演算法相較於其他演算法,所需要的記憶體比較少,因此也可以用在可攜式的裝置上。
其他詳細的說明及演算法的運作方式可以參考以下文章:
  1. RC5
  2. RC5 密碼系統
  3. RC5 操作模式

Blowfish

Blowfish 演算法優點在於速度快、記憶體花費少、加解密的過程簡單(僅使用到基本運算)、可自訂金鑰長度。
而此演算法適合用在通訊連結上,因此像是 VPN 連線的加密,就有使用 Blowfish 演算法。

AES (Advanced Encryption Standard)

由於對於暴力破解法,DES 有可能被破解的風險,因此美國政府提出了一個強度更強的演算法,進而想要將加解密演算法標準化,準備當電腦運算能力發展到很強,DES 必須被淘汰時的候補演算法標準,這就是 AES 的由來。
相較於 DES,AES 演算法中所使用的區塊長度為 128 bits,金鑰長度也提高到 128 bits 以上,因此 cipher text 被破解的機會便更低了。
若要瞭解 AES 詳細的運作方式,可以參考以下文章:
  1. AES 基本架構
  2. AES 加密演算法 - 加密編碼
  3. AES 加密演算法 - 金鑰擴充
  4. AES 解密演算法

Asymmetric Encryption (非對稱式加密)

Asymmetric Encryption (非對稱式加密) 即是為了改良 Symmetric Encryption(對稱式加密)的缺點而產生的。

在對稱式加密中,通訊雙方往來的訊息是由同一把金鑰進行加密;假設 A 與 B 通訊,兩個人必須有一把相同的金鑰;而若是 A 也要與 C 通訊,則 A 與 C 則必須擁有另外一把不同的金鑰;否則若是都使用相同金鑰,C 就可以解密出 A 要給 B 的訊息,相對的,B 也可以解密出 A 要給 C 的訊息,如此一來資訊在傳送就不再安全!

除此之外,還要防範金鑰被竊取的問題,只要通訊雙方任何一個人把金鑰洩露出去,也就破壞了原本建立的安全機制了。

因此,Asymmetric Encryption(非對稱式加密) 使用了一對金鑰(key pair)的方式解決了這個問題


Key Pair

在 Asymmetric Encryption 的架構中,要通訊的雙方都各持有一對金鑰,分別是私鑰(private key)以及公鑰(public key)。

顧名思義,private key 是要妥善且由自己秘密保管的,而 public key 則是可以公開出去。

假設使用者 A 有一對金鑰,若是 B 要與 A 進行通訊,則 B 必須使用 A 所提供的 public key 進行加密,再將加密的內容傳送給 A,接著 A 可以用自己的 private key 進行解密。

同樣的,A 要是要傳訊息給 B,則是要使用 B 所提供的 public key 進行加密,而 B 則可以用自己的 private key 進行解密。

有趣的是,雖然訊息是由 public key 所加密的,但是卻無法利用 public key 將原本的訊息還原回來,這就是非對稱式加密的精華所在,也是目前非常受到歡迎的原因。

而這一來一往之間,所使用的演算法,即為 RSA 演算法。


RSA Algorithm

RSA 演算法要如何確保不容易被破解呢? 答案在於「要算出一個很大的數,是由那兩個質數相乘的結果(進行因數分解),是很困難的」,因此可以很明顯看出,RSA 的運作方式,都是以兩個很大的質數為基礎來進行的。

RSA 演算法的基礎,取決於兩個很大的質數(可能達數百位數),運作流程大概如下:
  1. 選擇兩個大質數 P & Q
  2. 計算 N = P * Q
  3. 選擇公鑰(public key) E,使它不為 (P-1) 或 (Q - 1) 的因數
  4. 選擇私鑰(private key) D,讓右邊算式成立:(D * E) % [(P - 1) * (Q - 1)] = 1
  5. 加密過程為:密文(CT) = 明文(PT^E) % N
  6. 解密過程為:明文(PT) = 密文(CT^D) % N

如此看來,其實 RSA 的加解密過程是很簡單的,因此重點就是在於金鑰的產生,目前已經被證明長度 1024 bits 不夠安全,因此建議使用長度為 2048 bits 的金鑰作為加解密之用,來提升重要資訊傳輸的安全性。

最後,雖然非對稱式加密解決了金鑰交換的問題,但是卻衍生出加解密效率不彰的問題,因為相較於 DES,RSA 的速度只有其百分之一不到。


Asymmetric + Symmetric

真的沒有更好的 solution 嗎? 當然是有的......只要巧妙的結合兩者的優點即可啦!!

其中的原理很簡單,假設 A 要傳訊息給 B,就會發生大概類似以下流程:
  1. A 透過對稱式演算法,產生出一把對稱式加密用的金鑰(注意:這把金鑰只用在這一次的傳輸)
  2. 接著 A 使用 B 所提供的 public key,將這把金鑰加密,並將加密後的內容傳給 B
  3. B 接收到後,使用自己的 private key 解密,取得這把一次性金鑰
  4. 接著之後雙方訊息的往來,都使用對稱式加密

如此一來,就不僅解決了金鑰交換的問題,也解決了非對稱式加解密效率不彰的問題。

當然,這樣的 solution 其實還不算最安全,因此才會有 Digital Signature(數位簽章) 的誕生......

2013年2月3日 星期日

拜過早年

從廿四節氣來說, 今天已經係立春, 係新一年既開始!本研究所提早同大家拜過早年:
祝各位讀者新的一年身體健康!萬事勝意!工作順利!好運常伴!出入平安! 蛇年行大運!

2013年1月29日 星期二

2011年3月7日 星期一

香港已成高頻交易的樂園

高頻交易泛指電腦用統計加技術指標程式,作出極短線的買賣。人手操作也有,但當然不會快得過電腦發出指令。
去年道指十數分鐘便下跌了一千點,報導稱有「肥手指」指2m的沽盤輸入成2b,實在當人是傻仔,怎樣也說不通,但就突顯出程式盤問題,因打穿了「支持」位,大量程式沽盤湧現,直至指標顯示短線超賣又急升數百點,股票錯誤交易尚可追究及取消交易,可憐衍生證券炒家沒仇報。不久,美國便立法規管俗稱炒房的坐盤交易。
近半年觀察所得,似乎香港已成高頻交易的樂園,先有索羅斯落戶香港,再有高盛炒房猛將來港坐陣,就連普爾森也來港開檔。
最近期指上落相當誇張,表面上升或跌的幅度約是三百點,但實際一上一落行了近七百點。再看小時圖的升、跌及橫行的位置,與gann fan及fibonacci吻合。這些都是程式交易部份常見的指標。
而近期一些指數成份股都一窩蜂地炒上炒落,看來根本是配合期指的短線炒作。六六作為一個散戶,只能說自求多福,持貨則量力而為好了。
幸好六六不是一個勤力的短線炒家,這些花招不會影響我的中長線投資(投機),就像「奪寶奇兵」中,一個亞拉伯人拿著大刀,耍起刀花,看似恐武有力,教授不為所動,從懷裡拔槍,一槍便打瓜刀手。我們要做股市的Indiana Jones,不要隨便跟隨大刀舞動啊!