密碼學所討論的密碼和 EP3 - 設定密碼好複雜!中提到的用來驗證身份的密碼不同。
概念: 把一些資訊透過特定方式隱藏,讓這些資訊無法輕易的被外人解讀。
歷史:
Source: Wikipedia by Luringen licensed under CC BY-SA 3.0
Source: Wikipedia by Luc Viatour licensed under Public Domain
Source: PTT [Re: [求助]求高手藏頭詩 by wei998 (黑)](https://www.ptt.cc/bbs/Boy-Girl/M.1514541343.A.BE5.html)
這些依靠物理工具來達成的加密方法,雖然只能算是密碼學的皮毛,只是將資料很簡單的隱藏起來而已,並沒有將資料變得無法辨識,破解上並不需要花費太多力氣。
過一個金鑰和一些數學公式,讓原本的資料變得無法辨識,這樣即使資料被駭客取得了,也無法知道原本的內容是什麼,要復原的話就只能使用加密時使用的金鑰配合對應的數學公式解密。 元素:
加密演算法主要會希望達到這兩個目的,做到這兩底才能確保密文在公開的情況下,攻擊者也無法知道我們使用的金鑰和明文。
加密演算法的兩種基礎加密方式的其中之一。
將明文中的每個字母替換成其他東西,讓明文看起來像是無意義的亂碼
A換成B,B換成C ⋯ Z換成A(金鑰為 1)
A換成C,B換成D ⋯ Z換成B(金鑰為 2)
A換成Z,B換成A ⋯ Z換成Y(金鑰為 25)
分析每個字母出現的次數
在英文中,雖然有 26 個字母,但不是每個字母都會很平均的出現在句子和文章中,像母音的AEIOU出現的機率就很高,相對的X、Z等字母出現機率就很低。
出現的機率是最高的是E(13%),遠高於平均的 3%。出現機率最低的則是Z(0.074%)。 Wikipedia - Alphabet Frequency
透過這種特性,只要去統計加密後的密文中各個字母或符號出現的機率,再拿他去比對英文中各個字母出現的機率,就可以推敲出加密前的明文了。
加密演算法的兩種基礎加密方式的其中之二。
這個做法不會更改資料本身,但會依照規律改變資料的排列順序。
將奇數為字母拿到最前面,偶數為字母拿到後面
用金鑰的字母順序作為每列換位的順序
替換式密碼和換位密碼單獨來看都很基本,實際應用上在安全性也不是很足夠,但兩者都是密碼學上很重要的基礎,很多安全的加密演算法都是由不同種類的替換式密碼和換位密碼組合而成。
美國聯邦政府在 1976 年列為資料處理標準的加密演算法 DES(資料加密標準 Data Encryption Standard)就是結合了好幾種替換式密碼和換位密碼所組成的。
DES 中使用了一組 56 位元的金鑰將資料進行 16 輪的替換和換位來讓演算法夠安全。
DES 已經在 1997 年被破解了,現在取代 DES 的是進階加密標準 AES。
DES 的筆記會放在本篇文章的最後供大家參考。
如果攻擊者都已經知道明文了,加密方法安全性還需要考慮嗎?
加密演算法跟金鑰通常都不會只使用一次,當我們跟同一個對象在傳遞訊息時往往會重複使用同一組金鑰。 攻擊者知道明文的情況,可能就會發生在攻擊者獲取了對話中某些未加密的片段,如果攻擊者在這種情況下可以破解所使用的加密演算法和金鑰的話,就能破解過去和未來所傳遞的所有訊息。
所以最理想的情況是不管攻擊者知道多少訊息,只要不知道金鑰,都不能破解訊息,這樣才會認定這個加密方法是夠安全的。
複習:什麼是暴力破解法?
以破解 DES 為例
DES 使用的是 56 位元的金鑰,每一位元可能是 1 或是 0 ,因此金鑰的可能性有 2 的 56 次方,也就是 7 千兆。
理論上如果我們使用一台蘋果的 Macbook Pro 來進行破解的話只要花 185 天就可以破解了,同時使用多台電腦或是用一些專門設計來破解用的電腦的話時間就會大幅縮短。 假設的條件和計算式:
但如果是在相同的情況下要破解取代 DES,使用標準 256 位元金鑰的進階加密標準 AES 的話,需要的時間就會是 8x10^59 年(計算),簡單來說就是不可能被暴力破解。
在 DES 被發明的 1976 年,那時個人電腦還沒普及,每台電腦的效能也很差,因此在當時 DES 是一個安全的選擇,但拿到 44 年後的現在,因為科技的進步,電腦效能已經比以前好太多了,因此在現今科技底下 DES 是不夠安全的。
相同的道理也適用其他所有的加密演算法上,現在是安全的加密方法也會因為未來科技的進步,而變得能在短時間內被暴力破解法破解。
加密演算法安不安全還有一個很重要的點就是,我們是不是有正確的將他透過程式實現出來。
很多時候一個加密演算法本身以及他背後的數學原理是十分安全的,但程式設計師在將這個演算法轉換為軟體中可以運行的程式時會有邏輯上的瑕疵或是漏洞,導致這個加密方法無法被安全的實現。
我研究所時的密碼學教授就告訴我們永遠不要自己寫自己的加密演算法,因為自己寫的加密演算法一定都會多少有一點問題或是漏洞。
現在主流使用的加密演算法函式庫都是經過許多密碼學博士或是專家的測試和檢驗才確保安全的。
密碼學是一個很重要的工具,但密碼學也不是萬靈丹,在資安領域中除了有密碼學來幫我們加密資料以外也需要很多其他的工具的輔助。
題目一: 找出下圖透過豬圈密碼所加密的訊息
題目二: 找出以下透過換位式密碼加密的訊息
金鑰:INFOSEC
密文:NRPPOCO NEICHCK
答案會在本文的最後
題目一解答:Security is Important
題目二解答:Popcorn Chicken (PS. Popcorn Chicken 是鹽酥雞的英文)