2012年2月29日 星期三

(轉) 揭開密碼破譯的神秘面紗

密碼學之前應該先看看這篇文章。
原文網址如下:
http://www.360doc.com/content/11/0920/07/1769601_149652902.shtml

翻譯為繁體版:

查看個人電子郵箱,需要密碼;進入單位局域網,需要密碼;使用電話卡要密碼;借記卡、信用卡更要設置密碼。可以說,密碼已經滲透到我們日常生活的方方面面。

去年年底,因為近年接連破譯MD5、SHA-1,把中國的密碼學研究推向了世界巔峰的山東大學數學與系統科學學院信息安全研究所所長王小雲及其女子解碼團隊走進公眾視線。王小雲的研究成果表明:從理論上講,電子簽名是可以偽造的——必須及時添加限制條件,或重新選用更為安全的密碼標準,否則難保電子商務的安全。於是,對密碼學的關注和興趣立即超越了數學家的界限……

MD5、SHA-1是當前國際通行的密碼標準,前者由國際著名密碼學家、圖靈獎獲得者兼公鑰加密算法RSA的創始人設計,SHA-1是由美國專門制定密碼算法的標準機構——美國國家標準技術研究院與美國國家安全局設計。這兩大算法是目前國際電子簽名及許多其他密碼應用領域的關鍵技術,廣泛應用於金融、證券等電子商務領域。其中,SHA-1早在1994年便為美國政府採納,是目前美國政府廣泛應用的計算機密碼系統。

據英國《獨立報》近日報導,在一個瞬息萬變的全球化通訊時代,編譯或破譯秘密信息的能力從來沒有像現在這般顯得如此之重要。二戰時期,英國布萊切利公園的密碼專家們成功破譯了納粹德國的Enigma密碼,從而加速了希特勒的覆滅。時至今日,密碼仍未失去其重要性,編碼員和破譯員之間的鬥爭也將繼續下去。

●密碼重要性至今猶存 

密碼同語言的歷史一樣悠久。有了語言,你可以同每一個人交流,而安全可靠的密碼則能讓你選擇你所希望傳遞的任何信息。從有史料記載的歷史開始,我們便發現人們通過密碼交流的眾多案例,令人好奇又驚訝。密碼在21世紀並未喪失其重要性。

我們將在近期看到一部根據密碼在現實生活中捉弄人和操縱人的實例改編的電影。這部電影就是《十二宮殺手》,講述了一個連環殺手的故事,此人在作案後,總借密碼信息捉弄警方,宣稱只要破譯了密碼就能揭示他的真實身份,由於技術方面的原因,警方面對兇手的挑釁束手無策。然而,當警方終於破譯了部分密碼信息後,他們發現其中並未揭示殺手的身份,只是表明此人思想病態。 

實際上,《十二宮殺手》並不是近年來第一部以密碼挑戰為主題的影片——《達芬奇密碼》是另一個典型案例——但它可能卻是表明密碼為何如此重要的最佳例證。「十二宮殺手」的一舉一動均涉及「密碼術」,密碼術即隱瞞信息真正含義的藝術。設置密碼的人讓你知道他正在傳遞信息,但除非你擁有解開密碼的鑰匙,否則任憑你絞盡腦汁,也別想搞清楚其中含義。 

●隱寫術英國盛行一時 

密碼術還存在另外一個完整分支——隱寫術,即以掩蓋信息本身意思的方式傳遞真實信息。隱寫的信息看起來並不難,但從中發現真正的意思卻比登天還難。這一類別包括我們並不稱之為密碼的「聰明詭計」,儘管我們可能都對它們的獨創性大為吃驚。在古希臘,希斯泰烏斯為了安全地把指令傳送給米利都的阿里斯塔格魯斯,慫恿他起兵反叛波斯人,想出一個絕妙的主意:他剃光送信人的頭,在頭頂上寫下密信,一待他的頭髮重新長出來,就立即將他派往米利都。 

更快速、更常見的一種隱寫術是將信息隱藏在看似普通的文字當中,如在書中所選字母下面紮孔,它們可以拼出完整的信息內容。在英國,這種做法曾盛行一時,當時寄信在英國價格不菲,但郵局寄送報紙卻是免費的,於是,一些家庭通過在報紙紮上肉眼幾乎看不到的針孔來傳遞信息。另一種方法是,如果你在原始文本上寫字,你可以在文字本身隱藏信息內容。 

英國著名記者斯蒂芬•波拉德曾因其寫的一本傳記而使就業和養老金大臣戴維•布蘭基特的前程毀於一旦,而他本人的光明前途也險些葬送在自己的一條隱寫術信息上。六年前,在作為《每日快報》首席作者的最後歲月裡,波拉德寫了一篇構思精巧的社論,第一個句子的第一個字以字母「f」開頭,第二個句子的第一個字又以字母「u」開頭,明白人一看就知道其中奧妙。這其實是針對《每日快報》老闆理查德•德斯蒙德不懷好意的告別。然而,不幸的是,波拉德的新僱主《泰晤士報》未能發現其有趣之處,結果取消了同他的合約。


●莎翁生日也被拿來做文章 

此類密碼傳遞信息的方式有時也存在令人拍案叫絕的案例,例如隱含在詹姆斯王欽定版《聖經》中信息。詹姆斯王欽定版《聖經》詩篇46中第46個字是「shake」。從詩篇46末尾向後數的第46個字是「spear」。聖詹姆斯版本的《聖經》於1610年出版,那一年是英國大文豪威廉姆•莎士比亞的46歲生日。當時,負責翻譯這部《聖經》的英格蘭知名學者均被要求在書中增加插圖,以向一貫遭到輕視的英格蘭國王詹姆斯一世表示尊重。顯然,有些學者決定將他們對一個真正敬重之人的欽佩之情隱藏在書中。 

另外,愛丁堡南郊羅斯林教堂也同隱寫術有關,據稱雕塑品密碼破譯者宣稱在教堂中發現了一篇加密樂譜。同使用加密謎語相比,古人用隱藏信息的理由更多。一條語序混亂的信息、數字或符號,都會引起懷疑,使一個人陷入麻煩,即便其中秘密未被拆穿。十七世紀英國大作家塞繆爾•佩皮斯就借用加密代碼寫日記,他並不擔心有人發現是在寫日記,不過,確實不希望懷有好奇心的無聊之人知道其中的奧秘。 

●《波拉特》戲耍俄羅斯人 

密碼術隨著無線電的發明而誕生。從第一次世界大戰開始,指揮官主要通過經廣播傳遞的信息與部下聯絡,但敵人輕而易舉便會截獲廣播信號,知道聯絡內容。編碼員的使命便是確保信息能夠為合法接收者快速、輕易地理解。由此,編碼員和破譯員之間產生了新形式的戰鬥,而這種戰鬥總是以破譯員的勝利而告終。 

最常見的密碼術形式是替代法,即字母按照一種秘密形式亂七八糟地排列起來。這通常被證明是男人的一種活動,儘管《卡瑪箴言集》或《印度愛經》建議女性應該予以瞭解,如此一來,便能神不知鬼不覺地行魚水之歡的妙事。無數觀眾在欣賞荒誕電影《波拉特》的時候,清晰地見識了替換密碼術的奇特案例。參與者們用英語高歌之時,出現的卻似乎是俄文字幕,即便對俄羅斯人而言,這些文字也顯得莫名其妙,異常深奧。 

字幕中隱含的信息最終被一名學習西方文化的莫斯科大學生解開。在俄羅斯的電腦鍵盤上,你會發現看上去像拉丁文「u」的西里爾字母,從這個字母中我們似乎會找到字母「q」若隱若現的蹤影,而字母「q」又同字母「y」有相像之處,我們從「y」中似乎又看到「w」的身影。拉丁文字母和西里爾字母就以如此匪夷所思的形式聯繫在一起。導演把一個拉丁文鍵盤安裝到具有西里爾字母書寫方式程序的電腦上,接著敲擊鍵盤,好似他們正在以英語編寫歌曲。若想破譯最終的隱含語,俄羅斯人則必須將西里爾字母鍵盤裝在編有拉丁文書寫程序的電腦上。 

●字母出現頻率是解碼關鍵 

基於字母表的任何密碼的缺點是,每個人破譯者均清楚不同字母以特定語言出現的相對頻率,在一條用英語書寫的信息中,「e」出現的頻率約為八分之一,「t」是十一分之一,「q」是千分之一。如果你掌握每個字母出現的正常頻率,那麼就能解開單碼代替密碼。 

有人曾根據羅伯特•哈里斯有關恩尼格瑪機(Enigma)的小說拍攝了一部電影。恩尼格瑪機是德國科學家研製的電腦,它並不是用一個字母表替代另一個字母表,相反是同時採用17,576替代詞。你要是擁有一台恩尼格瑪機以及提醒你當天正確設置的最新密碼本,恩尼格瑪機發送的信息就會變得淺顯易懂,兩樣東西缺一不可,否則就不可能解讀信息的正確含義。然而,英國白金漢郡的布萊切利公園的專家卻在沒有這兩樣東西的情況成功破譯了恩尼格瑪密碼。他們的成功對盟軍二戰取得勝利立下汗馬功勞。 

當今編碼員採用更為複雜的方法編寫密碼。在他們眼中,恩尼格瑪密碼同128位密碼術相比簡直就是小菜一碟。與此同時,如今的密碼破譯者們手中電腦的運行速度和運算能力也非布萊切利公園技術專家所能比擬。編碼員和破譯員之間的鬥爭仍將繼續下去。但不要擔心,你無需超級計算機也能成功破解某種密碼,你所需要的僅僅是靈活的大腦和一點兒時間。(來源:新浪科技)

Android入門教程(五)之------第一個Android工程HelloAndroid

從這一節我們將正式進入Android編程世界,希望大家多多給我留言以及提些建議.
首先我們打開Eclipse選擇左上方的菜單[File->New->Project->Android Project]雙擊後會出現新建Android工程對話框,如下圖所示:

如果你不知道為什麼這麼填的話,就先模仿我這樣寫,具體會在以後章節中提及,建完工程後,我們會發現HelloAndroid有第四節講的目錄結構如下圖:

我們不在程序裡改動一個代碼,運行這個程序看最後會是什麼樣的結果呢?,首先右擊選擇[Run as->Run Configuration...]出現如下界面:

雙擊Android Application將彈出一個對話框,在Name裡輸入AndroidApplication(隨便輸入),這裡會提示Project不能為空,我們選擇我們要運行的工程名稱,點擊Browse...按鈕,選擇HelloAndroid.然後Apply一下.

當然我們此時點擊Run按鈕時,並不能成功運行程序,這裡我們還要創建一下AVD (Android Virtual Device)任何一個android應用都必須運行在一個AVD裡.我們點擊Target標籤.如下圖所示:

點擊AVD Manager...按鈕會出現如下對話框:

按上圖所示填寫,點擊Create AVD按鈕,我們就成功的創建了一個AVD,以後我們的application程序都會在這個AVD裡跑.創建後如下圖:

AVD 創建完以後我們點擊Run按鈕,此時就會運行虛擬機了,當我等待一段時間(第一次運行虛擬機會有點慢,大家要耐心等待)後,將會出來程序運行的結果,如下圖:

好了這節就到此為止,同志們,我要去睡了,明天還得要上班,今天魏老師火氣大,都流鼻血了,應該早睡的,呵呵,希望能給大家帶來幫助,就是對我最好的回報了!lol~

Android入門教程(四)之------Android工程目錄結構介紹

當我們創建完Android工程如(HelloAndroid)後,展開"Package Explorer"窗口裡的"HelloAndroid"項名稱,可以看見如下目錄結構:

res:放置應用 程序 用到的資源 文件。其包含(Drawable,layout,values等目錄)。當這個目錄下的文件發生變化時,src目錄下面的R.java就會自動發生變化。
assets:主要放置多媒體等數據 文件 。
res/drawable:放置應用到的圖片資源。
res/layout:放置一些與UI相應的佈局文件,都是xml文件。
res/values:放置字符串,顏色,數組等常量數據。
AndroidManifest.xml:相當於應用的配置文件。在此文件裡必須聲明應用的名稱,應用所用到的Activity,Service,Reveiver等。
下一節將講述如何跑起我們的第一個HelloAndroid程序.

Android入門教程(三)之------導入現有Android工程

開啟Android工程
我們開啟Eclipse環境來,在左上方的菜單上,選擇[File->New->Project],會彈出[New Project]對話框.Eclipse是通用的剪輯環境,可根據你所安裝的不同的插件而支持許多種類的工程的創建.點擊[Android]資料夾下的[Android Project]對話框,點選"Browse.."按鈕以選擇[開啟已經存在的工程](Create project from existing source).我們現選擇F盤目錄為[F:/Android/projects]中的HelloAndroid工程[F:/Android/projects/HelloAndroid].
當我們選擇現存的工程時,[New Android Project]對話框中的諸如名稱(Project Name)以及其他內容都會被自動填寫好.這時我們可以按下[Finish]按鈕,完成從現有工程新增到Eclipse環境的動作.
導入Android工程
如果你Android工程已經位於工作環境(WorkSpace)文件夾下,想使用上述方法開啟現有Andriod工程時,會得到欲開啟的工程已在工作目錄下的警告.因此我們得用另一個方法:導入工程.
在Eclipse左上方的菜單上,選擇[File->Import]選項,會彈出[import]對話框.選擇[General->Existing Projects into WorkSpace]項目,然後按下[Next]按鈕到新一個畫面.在[Select Root Directory]欄位旁,按下右方的[Browse...]按鈕,選擇對應的工程.選擇好後,按下[Finish]按鈕完成從現在存的工作環境(WorkSpace)資料夾下的工程導入到Eclipse環境的動作.
不同SDK版本的範例工程會放在[andriod_sdk/plateforms/android-版本/samples]目錄中,請自行根據要開發的版本選擇範例.
切換SDK版本
Android在SDK1.5版之後引入了支援多個版本SDK模擬器的新特性,讓我們得以透過修改屬性設定畫面的設定,來切換用來編譯與運行這些工程的目標SDK版本.
在[Navigator]的[HelloAndroid]文件夾下點擊右鍵,選擇[properties]選項,會開啟工程屬性設定界面.
在設定畫面中先選擇左方的Android標籤,選擇後會出現可勾選的[Project Build Target]選單.
在選單中選擇適當的目標版本,選擇之後按下OK結束設定畫面,這時工程就切換成可使用目標版本編譯的狀態了.

Android入門教程(二)之------環境搭建

Android 操作系統頂著 Google 與 Open Handset Alliance 的光環,讓很多程序員在 Android 手機還沒上市之前,就開始緊追著官方文檔, Early SDK 版本更新,這是 IT 業界罕見的現象,因為大家都抱著 」 不想輸在起跑線上「 的心態,這也是手機發展的歷史,第一次有機會讓所有的程序員站在同一個起跑 開始,無論是 Java World 論壇,或是 Google 官方的 Developer Dicussion Group 都能見到相當熱烈的討論。
同志們 3G 時代到來了,對於我們來說,是一個新的機遇,所以我們也不要輸在起跑線上哦,廢話不多說了,讓我們開始搭建 Android 環境吧!


第一步 :
準備就緒之後,就可以前往 Android 官方網站 (http://developer.Android.com/ ) 下載 Android SDK, 也可以到(http://Androidappdocs.appspot.com ) 去下載,如下圖所示。


下載後的 Android SDK 為壓縮文件, 請將它解壓到磁盤中,例如我解壓到下面的文件夾:
F:/android-sdk-1.5_r2
第二步 :
然後在環境變量中 Path 後面添加 ;F:/android-sdk-1.5_r2/tools, 如下圖所示 :

第三步 :

Eclipse 編譯 IDE 環境中,需要安裝 ADT(Android Development Tools)Plug-in, 這是 Android 的開發工具,啟動 Eclipse 後,請運行 」Help->Software Updates->Available Software->Add Site
輸入 ADT plug-in 網址後 (http://dl-ssl.google.com/android/eclipse/) ,如下圖所示 :

勾選我們所輸入的地址,然後點擊 Install 按鈕如下圖所示 :

ADT 安裝就大功告成。
第四步:
ADT 插件安裝後,選擇 Eclipse 菜單欄中 」Window->Preferences」 彈出的頁面中多了 Android 一項,我們點擊 Android 把 Android SDK 應用進來,點擊 Browse 按鈕,如下圖所示, Apply 一下, OK 完成!

下面我們就可以建立 Android 工程了, File->New->Android Project 如下圖所示:

好了今天就至此為止 ,Android 的第一個程序 HelloAndroid 將在下講進行。謝謝大家!

Android入門教程(一)之前言------Android應用開發入門五問


前言(一)之------Android應用開發入門五問

1. Android是什麼?
Android 是Google開發的基於Linux平台的開源手機操作系統。它包括操作系統、用戶界面和應用程序 —— 移動電話工作所需的全部軟件,而且不存在任何以往阻礙移動產業創新的專有權障礙。谷歌與開放手機聯盟合作開發了 Android,這個聯盟由包括中國移動、摩托羅拉、高通、宏達和 T-Mobile 在內的 30 多家技術和無線應用的領軍企業組成。
Android 作為谷歌企業戰略的重要組成部分,將進一步推進"隨時隨地為每個人提供信息"這一企業目標的實現。

2. Android用什麼語言開發的?
Android的SDK(software development kit)是Java的,將來可能有其他語言版本。

3. Android模擬器是用什麼開發的?
Android的核心是Java虛擬機,為了高效,目前來看,google是不會支持其它語言的開發的。不過,android的模擬器是用qeum開發的,它的鏡像文件分成4部分放在tools目錄下,如果我們將qeum修改一下,說不定能玩一下它的linux系統。

4. 怎麼進行Android開發
Android支持在模擬器上運行和調試應用軟件,有興趣的朋友可以下載他的SDK(software development kit)來瞭解android的界面;然後應該學習android的基本框架和應用程序的構成;最後就可以試著在sdk的API Demo的基礎上開發自己的application了。
希望剛剛瞭解軟件開發的朋友不要著急,一步一個腳印,一定會茁壯成長,開發優秀的application的。

5. 有哪些好的網絡資源可供Android學習者用的呢?
首先,最好的最基本的學習資料無疑是SDK的文檔了,也就是這個地方
http://code.google.com/intl/zh-CN/android/documentation.html )的介紹,它循序漸進的介紹了Android的各個方面。

其次,大家可能有對android文檔不太理解的地方,或者自己的想法等等,完全可以通過下面的groups進行諮詢和交流:
◆Android Beginner    http://groups.google.com/group/android-beginners
◆Developper Groups   http://groups.google.com/group/android-developers
◆Android Internals   http://groups.google.com/group/android-internals
◆Android Porting     http://groups.google.com/group/android-porting

2012年2月15日 星期三

密碼學的第五課:對稱式加密法


大家好,在情人節剛過的隔天就要來上密碼學,實在為難大家了~

今天要進入近代密碼學的一個分類:對稱式加密法。

之前雖然有稍微介紹過,不過我想混篇幅怕大家忘記,還是幫大家複習一下:
對稱式加密法簡單來說,就是加密金鑰和解密金鑰是一樣,
也就是加密方式和解密方式是對稱的。
它的好處是進行資料加解密的速度很快;
不過,很顯而易見地,這樣的方式就會有個缺點:
當很多人彼此間要通訊的時候,為了要有彼此間的鑰匙,金鑰的管理就會變得很複雜。
用簡單的數學來算,
當2個人要通訊的時候,每個人就要保管1把鑰匙;
當3個人要通訊的時候,每個人就要保管2把鑰匙;
...
當n個人要通訊的時候,每個人就要保管(n-1)把鑰匙,
而且還必須知道哪把鑰匙是屬於哪個人的;整個網路就會有n*(n-1)/2把鑰匙。
如果網路上有500個人要通訊的時候,整個網路就需要124,750把鑰匙。
不僅金鑰的管理上很複雜,怎麼把這些鑰匙分配給大家也會是個難題。

除了金鑰管理和分配的問題外,另一個問題就是發送方與接收方的鑰匙都一樣,
因此發生爭議的時候(譬如密文外洩),法院(或第三方仲裁)沒辦法判斷是誰做的,
也就是無法達到不可否認性( Non-repudiation)。
這就好像同卵雙胞胎犯案,由於DNA都一樣,到底是誰犯案是分不出來的。(這是雙胞胎的好處嗎?)
自由電子報- 同卵雙胞胎哥哥犯案弟弟被捕 2010年5月21日
同卵雙胞胎兄犯案錯逮弟 蘋果日報 2010年7月28日
名偵探柯南在416集和417集也有出現過類似的劇情,http://zhidao.baidu.com/question/326663220.html?fr=qrl&cid=100&index=3
不過,好的推理小說都應該會遵守推理小說十誡
當中就有提到:「除非先寫出有雙胞胎,否則凶手不準是雙胞胎」
所以大家還是可以放心推理~

雖然對稱式加密法有上述的缺點,
不過由於它加解密的速度比非對稱式加密法快上許多,
因此在網路世界中仍被大量地使用。

一般而言,對稱式加密分為2種運算方式:
串流加密 (Stream Cipher) 與 區塊加密 (Block Cipher)

串流加密就是對明文一個位元一個位元地加密,就好像是明文不斷的流動進入加密器中加密,加密快速,因此能夠做到及時(real time response)的效果,適合用在語音傳輸加密中,譬如VoIP;

而區塊加密則是把明文切成固定大小的區塊,並用相同的密碼演算法和密鑰對每組分別進行加密和解密。由於要收集一定的資料量才可以做加密的動作,因此比較適合用來做檔案的加密,譬如電子郵件加密或銀行交易轉帳。

DES(資料加密標準,Data Encryption Standard)和AES(高級加密標準,Advanced Encryption Standard)是美國聯邦政府核定的二種區塊加密法標準。
2001年,DES已經被AES所取代,同時也已經不再作為國家標準科技協會(NIST)的標準。
因此我們就簡單來介紹一下AES的內容,讓大家對AES有簡單的概念。

AES(發音如ASS)是比利時密碼學家Joan Daemen和Vincent Rijmen所設計,
因此早期也稱為Rijndael加密法(結合二人的名字,音同Rain doll)
(叫晴天娃娃 Sunny doll不是很好嗎,幹麻叫雨娃? 可能是密碼學讓人想哭吧~)


AES的區塊長度固定為128 位元,密鑰長度則可以是128,192或256位元。
它的加密過程是在一個4×4的位元組矩陣上運作,依據密鑰長度的不同而須經過不同的加密回合數(迴圈數):128位元密鑰版本有10個加密回合,192位元密鑰版本有12個加密回合,256位元密鑰版本則有14個加密回合。
而除了最後一回合外,每回合均包含4個步驟:

  1. AddRoundKey — 矩陣中的每一個位元組都與該次回合金鑰(round key)做XOR運算;每個子密鑰由密鑰生成方案產生。
  2. SubBytes — 透過一個非線性的替換函數,用查找表的方式把每個位元組替換成對應的位元組。
  3. ShiftRows — 將矩陣中的每個橫列進行循環式移位。
  4. MixColumns — 為了充分混合矩陣中各個直行的操作。這個步驟使用線性轉換來混合每行內的四個位元組。

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

整個加密的流程如下圖:



而解密的流程則是加密流程的逆向,因此很容易實作,如下圖:


維基百科中有更詳細的說明,zh.wikipedia.org/zh-tw/高級加密標準
(照例,看看右邊的圖就好,想更了解的話,再參考左邊的文字說明)

如果看圖還覺得不夠生動,這裡也做好動畫,用互動式的方式可以更容易了解!
http://www.cs.bc.edu/~straubin/cs381-05/blockciphers/rijndael_ingles2004.swf

總之,AES是目前對稱式加密法最著名的加密方式,許多密碼學研究也都在討論其安全性與破解。
學習密碼學也應該對它有初步的了解,也許哪天你發現了一個AES演算法的弱點,
你也可以大叫「我發現了一個ASS AES hole」了!

2012年2月13日 星期一

密碼學的第四課:資安名詞解釋

大家好,又到了密碼學課程!
本來第四課要來說對稱式加密系統的,
不過有好心人士提醒還沒提到一些資訊安全中重要的基本概念,
再加上我就是隨波逐流的那種人,
因此就來談一談一些重要的概念吧!

講到資訊安全,所有課本和所有演講者一定會提到的就是C.I.A!
這裡指的當然不是千年老梗的美國中央情報局
(Central Intelligence Agency,簡稱CIA,zh.wikipedia.org/zh-tw/中央情報局)
(相信我,所以的教科書和演講者一定都會提到這個梗!)

(岔題一下,我查到明明CIA的位階比FBI還要高,
怎麼電影每次演的好像CIA是個廢物一樣,FBI卻神的要死~
連CSI影集中的探員也都是FBI的,明明案件都是國內案件啊!)

當然也不是Yahoo!奇摩字典中更莫名其妙的Cash in Advance 【商】預付現金
http://tw.dictionary.yahoo.com/dictionary?p=c.i.a

這裡要講的C.I.A是資訊的三個特性,要滿足這三個特性才可以稱得上安全:
  1. 機密性(Confidentiality)
  2. 完整性(Integrity)
  3. 可用性(Availability)
由於是三個不同的特性,所以你高興的話,也可以叫CAI、IAC、AIC...等隨你高興,
比美國中情局是縮寫來的,只能稱為CIA,來得有彈性的多了!

機密性就不用多說了,沒有機密性,我也不知道談這麼多資訊安全或密碼學要幹什麼~

完整性主要說的就是傳送方與接收方雙方收到的資料是一致的,沒有在途中被修改過。
不然要是傳送金額,中間多個0或少個0,可就差了十萬八千里了!

可用性就是讓資訊保持可用的狀態,也就是當你想要的時候,隨時都可以要~~~
 (不要往色色的地方想,你這變態!)
這有點像是雲端服務,當你有需求的時候,隨時都可以索取你要的服務~
(好像越寫越A,不講了,反正就是那個意思啦~)

所以下次有人再提到資訊安全的C.I.A的時候,
不要再以為是美國中情局了唷~ (老梗*2)


再來要提到的就是密碼系統的安全性,
密碼系統的安全性大致上可以分為兩個層次:理論安全 和 實際安全。
理論安全並不是指不會被破解的密碼系統叫做理論安全 (應該沒有那種系統吧~),
而是指不管你對這個系統先前做了多少的分析,
最後要破解密文的時候,跟亂猜猜中的機率是一樣的,
也就是不管用任何方法,你所需要花費的時間將大於或等於你直接去猜測明文所花的時間。

而實際安全聽名字就知道比較合理多了!
它是密碼系統所提供的安全性在某一段時間內並不會輕易被破解。
就好像「攔截密碼戰(Enigma)」中所演的,
敵方在4天內就要攻擊了,破密專家卻說要破密至少要10個月~
當下指揮官只有這個表情啊~








實際安全假設破密者所擁有的資源如計算機的數目及速度是有限的,且破密者的壽命或時間也是有限的,
所以如果要破解一個密文需要幾百年或幾億年的時間,
那麼就算破解了,這秘密可能早已不能用,或是已經沒有價值了。這樣的系統我們便稱為實際安全。

更多詳細的說明可以參考下列網址,這篇文章大概是經典之作了,
是敝人恩師的作品,寫得相當清楚,大家有空可以參考一下。
http://web1.nsc.gov.tw/ct.aspx?xItem=7769&ctNode=40&mp=1

2012年2月10日 星期五

密碼學的第三課:對稱式加密與非對稱式加密

各位大家新年好~ 龍年大順利!
放了一個好長的年假,就開始懶散沒有繼續來上課了。 

難得今天又有成員加入與回應,又燃起了我繼續寫下去的熱情!
(沒辦法,我就是這麼膚淺的人啊~~~ 要靠大家的鼓勵和讚才願意寫啊~~~) 

話說前幾天剛好在AXN電影台看到一部電影 攔截密碼戰(Enigma),
光看英文片名 就是二次大戰密碼界的神器 謎(Enigma),
表示這部片一定跟密碼有很大的關係 (中文電影名不就寫明了是密碼戰了嗎 = =)

這部電影雖然是文藝片,不過還蠻考證的,
把Enigma的機器、構造拍的很仔細,也有說出他的原理,
還蠻值得一看的!
(看完後才覺得,那我花這麼久時間寫這些文章幹麻,看電影就很清楚啦~~~ >"<)
(題外話,剛剛查資料才知道是凱特溫絲蕾主演的,難怪我一直覺得女主角好正,我好喜歡她啊!!!) 

如果沒看電影的,網路上也有不少關於Enigma的資料可以參考,譬如下面的資料。 看不懂英文沒關係,光看圖片也可以對Enigma有基本的了解了。
http://en.wikipedia.org/wiki/Enigma_machine
http://192.197.62.35/staff/mcsele/Enigma.html


不過今天課程要是只有講這樣,那就太混了,根本只是電影介紹而已嘛~
所以今天要講點新的東西。

古典密碼學的兩個加密技巧 換位法 和 替代法,大概也說得差不多了。
今天要來說說近代密碼學的兩大門派:
1.對稱式加密(Symmetric Encryption) 或 秘密金鑰加密(Secret Key Encryption)
2.非對稱式加密(Asymmetric Encryption) 或 公開金鑰加密(Public Key Encryption)

顧名思義,加密跟解密用同一把鑰匙的,就叫做對稱式密碼系統;用不同鑰匙的,就叫做非對稱式密碼系統,就這麼簡單! (就跟你說密碼學很簡單吧~)
生活中使用對稱式密碼系統,最常見的例子就是腳踏車的馬蹄鎖。
也就是把腳踏車上鎖後,另一個人也要用一樣的鑰匙(可能是備用鑰匙,但基本上還是同一把鑰匙)才能開鎖。
這樣的應用在二人的情侶世界時,都很方便,鑰匙也很容易保管;
但是如果有人劈腿 (當然不是鼓勵大家劈腿,劈腿是不道德的),有了小三、小四、小五、小六......
那麼在鑰匙的保管上就會變得很複雜 (就說劈腿很麻煩吧~)

為了改善金鑰管理的問題,也因此有了非對稱式密碼系統。
而生活中非對稱式密碼系統最常見的就是喇叭鎖了。
想想看,喇叭鎖上鎖的時候跟開鎖的時候,是不是有不同的動作。
任何人都可以把喇叭鎖上鎖,而只有有鑰匙的人才可以把門鎖打開。
喇叭鎖的那個按鈕就稱為公開金鑰(public key),而那把開鎖鑰匙就稱為私密金鑰(private key)。這兩把鑰匙是惟一相互依存的關係。
這樣雖然解決了金鑰管理的問題,不過缺點是加密與解密都需要更多的運算資源,因此在效能上並不如對稱式加密那樣迅速。

大家可以再想想生活中還有哪些對稱式密碼系統和非對稱式密碼系統的例子?!

由於對稱式密碼系統可以快速的加密大量資料,而非對稱式密碼系統可以降低金鑰管理的問題。
聰明的你/妳應該就會想到,是不是可以結合在一起,
用對稱式金鑰加密資料,再用非對稱式密碼系統將金鑰傳送給對方。
這樣,就可以同時達到便利性與效能了。
步驟大致上如下:

  1. 當使用者A要與使用者B溝通時,可以先取得B的公開金鑰(Public Key)。
  2. 使用者A隨機產生一組對稱式金鑰,作為此次的對談使用(稱為對話金鑰,Session Key)。
    (也就是說,只有在這一次序列的對談中有用。如果雙方都結束這次的對談後,下次要交談,就會用不同的對話金鑰了)
  3. 用使用者B的公開金鑰,把剛剛產生的對談金鑰加密送給B。
  4. B收到後,就可以用自己的私密金鑰解開,取得裡面包起來的對談金鑰。這樣一來,雙方就都有同樣的對談金鑰了,之後就可以用這把對談金鑰傳送加密資訊。

有興趣的同學可以參考下面連結,有更生動的描述唷!

http://www.study-area.org/network/network_enscp.htm