iT邦幫忙

2023 iThome 鐵人賽

DAY 16
0

前言

今天還是那個密碼學,不過主要會學習現代密碼學的基本知識,在這之前先補充說明一下 encryption 和 hash 的差別,因為昨天忘了寫。應該不太會出現數學內容,因為我自己也不太會 XD

加密?雜湊?

可能有些人在入門資訊領域時搞不太清楚 hash 和 encryption 的差別,比如說以為 md5 是一種加密演算法之類的,學習的路上難免有誤會,花時間搞清楚就好 👍

那 hash 跟加密有什麼不同呢?

首先我們先了解一下 hash 是什麼,簡單的理解就是將長度不固定的資料 mapping 到固定長度的字串,並且這個過程理論上是單向的,也就是不可逆。

你可能注意到了,長度不固定的資料要以固定長度的字串來表示的話,是不是會有碰撞的問題?沒錯,不過我們這邊不花篇幅來探討,有興趣的話可以去研究一下 XD

常見的 hash 演算法有 md5、sha1、sha256 等等,不過因爲 md5 和 sha1 被利用前面提到的碰撞情形找到攻擊手段,因此被認為是不夠安全的方式,目前已不建議使用,可以使用 sha256 這類比較新的演算法。

另外,一般來說儲存密碼時除了會使用 hash 演算法之外,還會多一個加鹽 (salt) 的動作,以避免被彩虹表這類的窮舉方式破解。

現代密碼學

在電腦被發明之後,古典密碼學的演算法都能被電腦破譯,現代密碼學就這樣誕生了(?)

這邊需要介紹一下柯克霍夫原則 (Kerckhoffs's principle)
他為軍用保密器設計了六個原則,不過這邊只說最重要的部分:只要 key 沒有洩漏,就算演算法公開也不會洩漏明文,這應該是現今加密演算法都有符合的原則。

總之太複雜的我們不說,現代密碼學大致可以分為兩種:

  • 對稱式加密
  • 非對稱式加密

對稱式加密

加密與解密使用同一把 key,又可以分為區塊加密和串流加密:

  • 區塊加密 (Block Cipher)
    • 會先將明文資料切成固定大小的區塊,然後再把每個區塊個別加密
  • 串流加密 (Stream Cipher)
    • 將明文資料作為一個 bit stream,然後逐個 bit 加密,不需要分區塊

比較常聽到的 AES、DES 都是屬於區塊加密的方式,而串流加密我只有聽過 RC4。

非對稱式加密

這個形式的加密演算法會需要兩把 key,一把公鑰以及一把私鑰,而公鑰是由私鑰推導出來的,這邊舉個例子好了,假設 A 要傳送一份資料給 B:

  1. B 把公鑰給 A
  2. A 使用 B 的公鑰將明文加密
  3. 密文透過網路傳送到 B 這邊
  4. B 使用自己的私鑰將密文解密成明文,也就是原始資料

這樣就完成了一次加密傳送,與對稱式加密相比,全程只需要傳送公鑰,而不需要把解密的 key 也透過公開管道傳送,因此先天設計上更安全;而對稱式加密的優點則是快,因此可用於資料量較大且不需要傳送 key 的情境,比如 Windows 的 BitLocker 磁碟加密就使用 AES 演算法。

數位簽章

看了上面的例子,也許你會發現:如果公鑰洩漏到惡意攻擊者手上,他可以發惡意的 payload 給 B,而 B 解密完就會解出這個惡意程式,有辦法辨識資料是不是來自 A 嗎?這時候可以使用數位簽章的機制,運作如下:

  1. A 也有一組公鑰與私鑰
  2. A 與 B 交換公鑰
  3. A 使用 B 的公鑰將訊息加密
  4. A 使用自己的私鑰將加密後的訊息簽名
  5. 簽過名的密文透過網路傳送到 B 這邊
  6. B 使用 A 的公鑰驗證訊息上的簽名是否來自 A
  7. 訊息是來自 A 的話,B 就使用自己的私鑰將訊息解密

如此一來,既可以不洩漏私鑰,也可以驗證資料的來源是安全的。常見的非對稱式加密演算法則有 RSA。


上一篇
Day 15. Crypto - 初探古典密碼學
下一篇
Day 17. Crypto - 對稱式加密 實戰
系列文
進了資安公司當後端 RD 才入門資安會不會太晚了30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言