Algorithm
這篇筆記是我參考【演算法圖鑑】和網路資源所製作。如果內容有誤,還請不吝賜教!
(1) 接收端是駭客 - 最常見的事件就是騙取個資
(2) 發送端是駭客 - 常見的情形包括釣魚網站或是可能藏有病毒的不明檔案。
而對於這些問題,我們有以解決辦法:
問題 | 解決方法 |
---|---|
竊聽 | 加密 |
竄改 | 訊息鑑別碼 v 數位簽章 |
電子欺騙 | 訊息鑑別碼 v 數位簽章 |
抵賴 | 數位簽章 |
以下將介紹各種安全性演算法 |
雜湊函數在我先前的筆記(02-Data Structure)裡有提到,摘要如下:
Hash function is a function that turns given data into a fixed-length value, called "hash code".
Hash function has the following features:
- Fixed Length of Hash Code - No matter how massive the given data is, the length of hash code is always fixed.
- Same Data, Same Hash Code
- Similar Data, Different Hash Code
- Unidirectional - It's impossible to infer the original data from its hash code.
- Hash Collision - Different data might have the same hash > > code, when this occurs, we call it "hash collision". However, > > chances of collision are extremely slim.
雜湊函數因為它的單向性、單一性及不可辨讀性,被廣泛地運用在加密及製作數位簽章上。而雜湊驗算法則又有許多種,常見的有MD5, SHA-1, SHA-2等。現在大多使用SHA-2,因為MD5和SHA-1都曾有被破解的事件,存在一定的風險。
註:
MD5 - Message Digest Algorithm 5
SHA - Securing Hash Algorithm
以下解釋了明文是如何被傳輸的。
加密(encryption)就是將明文和金鑰進行計算而產生密文
而解密(decryption)就是對密文和金鑰再進行運算還原成原本的訊息
加密的方式又可根據金鑰的性質分為兩種:對稱加密和非對稱加密。
對稱加密指的是雙方都使用相同的金鑰進行加密、解密,好處是運算速度非常快,但是它有一個致命的缺點 – 安全性的缺陷。非對稱加密則相反,雙方使用不同的金鑰進行加密、解密,它和對稱加密是互補的 – 一方的優點即是另一方的缺點。
對稱性加密 | 非對稱加密 | |
---|---|---|
安全性 | ![]() |
![]() |
運算速度 | ![]() |
![]() |
現在來談談對稱性加密的大問題。
假設Alice要用這種演算法傳遞訊息給Bob,顯然如果雙方都知道金鑰的話,那是一件很美好的事。問題就在於多數時候雙方先前是沒有相互往來的,意即兩方都沒有共同金鑰。這種時候,我們有以下的解決辦法:
Alice在傳送訊息給Bob前,要先傳送金鑰給Bob,接著再傳送密文給Bob。
共用金鑰系統其實在兩千年前就已經存在,最著名的莫過於凱薩加密系統。現今常用的為AES加密演算法。
問題來了,在傳送金鑰的過程中,金鑰還是有可能被偷窺(金鑰傳送困難),這不就又回到最一開始的問題了嗎?而且隨著傳輸的對象越多,管理金鑰的數量也會越來越多。這些都是共用金鑰系統最大的問題。
公開金鑰系統彌補了共用金鑰系統的缺點,因為訊息只能用公鑰加密也只能用私鑰解密,即使公鑰和密文被偷窺,第三方也因為沒有解密的關鍵 – 私鑰而無法獲取原始明文,安全性相對提升。
以下將解釋這個加密演算法是如何運作的:
然而公鑰加密也有存在公鑰可信度的問題。換句話說,我們無法確定Alice是否不懷好意,又或者公鑰傳輸的過程,很有可能被第三者替換,這樣第三者便能取得訊息而雙方仍渾然不覺,稱為中間人攻擊。
以下將說明中間人攻擊的過程:
這個時候,解決方案便是數位憑證,之後的筆記將會介紹。
混成密碼系統是共用金鑰和公共金鑰的加強版。將金鑰再進行一次公鑰加密,使得雙方能夠安全的傳遞共同金鑰。這個方法不只兼備了共用金鑰系統的快速,更解決了金鑰傳送困難的問題,一舉數得。
以下將說明混成密碼系統的運作過程:
迪菲-赫爾曼金鑰交換所交換的金鑰有一些特殊的運算性質:
現在來看看這種交換方式是如何運作的:
由於Eve只可能偷取P、PA或PB,又因為這種金鑰的特性,Eve不可能合成出PAB。因此這種演算法具有高度的安全性。
傳輸訊息時可能發生好幾種狀況:
以下將逐一介紹解決這些問題的演算法。
根據運算過程可將MAC的產生方式分成許多種,如HMAC,OMAC和CMAC。
現在普遍使用HMAC,它是利用hash function產生MAC。
如果這個時候第三方Eve想竄改任何訊息,訊息鑑別碼都能發揮作用,讓Bob能夠收到安全且正確的訊息。
由於Alice和Bob手中都握有產生MAC的金鑰,雙方都能對訊息進行加密。然而這會產生一個問題。如果今天Alice或Bob不懷好意 (比方說Alice可以主張訊息是Bob捏造的,又或者Bob可以自行製作訊息然後說這是Alice傳來的),這個時候因為MAC的來源沒辦法確定,造成抵賴的發生,這也是MAC無法解決的問題。
接下來將介紹解決抵賴的演算法 – 數位簽章。
現實生活中的簽章目的是為了確認一個人的身分,數位簽章也一樣,目的是為了確認訊息是否真的由某人發送,解決了訊息來源的不確定性。
數位簽章的運作模式大致如下:
因為數位簽章是透過私鑰S加密形成,加上只有Alice擁有私鑰,因次這種演算法確保了製作出來的簽章具有唯一性,即簽章不能夠被偽造。
Q1: 數位簽章跟公鑰加密系統都有用到公私鑰的概念吔,那到底差在哪呢?
先從運作方式切入,我們會發現這兩種演算法完全不同。
(假設發送訊息的是Alice,接收訊息的是Bob。)
(再假設公鑰是P,私鑰是S)
加密 | 解密 | |
---|---|---|
數位簽章 | SA | PA |
公鑰加密 | PB | SB |
完全相反的原因是因為這兩種演算法背後的意義截然不同。公鑰加密系統是為了安全、不被偷窺地傳輸訊息,而數位簽章則是向大眾證明訊息是由自己傳送的。兩種演算法的目的不同,自然就有許多差別。 |
(別把這兩種演算法搞混了!!!)
Q2: 為甚麼還要先將訊息經過雜湊,而不是直接將訊息用私鑰加密?
最主要是為了壓縮訊息,降低耗費時間。
公鑰加密運算量龐大,直接用訊息進行運算非常沒效率。雜湊函數這時也派上用場了。因為雜湊函數可以幫我們為一筆資料產生一獨有的「身分證」 – 雜湊值(忽略機率極低的雜湊碰撞!),所以利用這個雜湊值產生簽章,就跟用原來的訊息一樣沒有差別。又因為相較於原本的訊息,雜湊值的資料量極小,因此對它進行公鑰加密速度便提升許多。
數位簽章其實還存在著一個問題,那就是Alice有可能是不懷好意的Eve偽裝的。根本的問題在於公鑰本身並沒有任何證據證明公鑰製作者是安全的一方。因此接下來我們將介紹解決這個問題的演算法 – 數位憑證。
使用公鑰加密系統或數位簽章時,公鑰本身因缺乏認證機制而有可能被替換。而數位憑證的出現,則確保了公開金鑰的真實性。
利用這個機制,Bob不需要去相信第三方惡意傳送的假公鑰,因為那些公鑰並未擁有數位憑證。
Q1: 假設有第三人Eve取得了Alice的憑證,並用CA的公鑰解開憑證竊取Alice的email,那這個時候Eve不就可以拿著Alice的電郵申請假憑證,然後傳送給Bob了嗎?
遇到這種情況,在憑證階段就能被發現。
首先,Eve根本就不能單靠Alice的email申請憑證,Eve如果沒有Alice的裝置,要申請憑證是不可能的。
就算Eve真的成功申請到假憑證,在Bob檢查信箱的階段就會被察覺。
Bob可以寄確認信給Alice,Alice本人可以親自回覆。多虧了現今電子郵件系統的防禦措施,如果Eve為了回覆確認信而嘗試登入Alice的信箱,系統會發一封簡訊到Alice的裝置確認是否讓外來裝置登入。
因此Eve不可能申請到假憑證,就算Eve擁有假憑證,但Bob終究能夠分辨而不會相信。
Q2: 因為公鑰本身不具備來源確定性,必須透過憑證機構CA做擔保。那如果Eve偽裝成CA,製作假憑證,該怎麼辦?該怎麼確定CA的公鑰是可信的?這樣不就又回到最初的問題了嗎?
事實上,這個憑證機構所製作的公鑰還有上層的機構給予憑證、做擔保。而上層的機構還有更上層的憑證機構做擔保…如此向上追溯,我們發現了最上層的機構 – 稱為「根憑證機構」(Root CA, RCA),而這些機構不是政府機關就是大企業等深受社會信任的組織。而子機構的產生,也是先向這些大機構申請憑證,這些較大的組織便會替較小的組織的信用度做擔保,形成了層層下推的樹狀結構。
網站進行通訊時也會用到數位憑證。不同於個人的憑證是和電子信箱綁在一起,網站背後的伺服器則是用網域(Domain Name, 透過DNS的解析可和該網頁的IP位址相互對應)申請憑證,確保管理此網站資訊的組織及伺服器相符。