security
cryptography

網路安全(1) - 基礎密碼學

最近設置了很多環境的問題 又再次複習到了ssh(secure shell) 雖然每次複習都覺得是很基本的東西 但為了讓下次複習能更快瞭解 還是決定寫下來

本篇不會有太多的數學細節 只講大概念 就當作看故事一樣 看著看著就懂了

基礎密碼學

密碼學裡面有兩種加解密方式 一種是對稱性加密 一種是非對稱性加密 差別很簡單 對稱性加密呢 意思就是我加密跟解密用的是同一個鑰匙 所以只要A跟B都知道這把鑰匙 A要傳給B的時候 就用這個鑰匙加密 B拿到了之後再用同一個鑰匙解密 你們兩就可以互通有無 暗通款曲 即使有中間人攔截了你們的傳輸 只要他沒有你們的鑰匙 他就不知道你們在幹麻

那bug是什麼呢 阿哈 那你們要偷來暗去之前 總是需要傳第一次告訴對方你們的鑰匙吧 要是第一次就被中間人攔截 你們不就沒戲了嗎 他攔截到偷偷記下來後再原封不動傳給接受方 那之後的所有攔截到的加密後的訊息 他都有你們共有的鑰匙可以解密了 那該怎麼辦呢

非對稱式加密

英雄登場

非對稱式加密 就是每個鑰匙pair有兩個鑰匙 一個公鑰一個私鑰

可以公鑰加密私鑰解密 也可以私鑰加密公鑰解密

可以公鑰加密私鑰解密 也可以私鑰加密公鑰解密

可以公鑰加密私鑰解密 也可以私鑰加密公鑰解密

很重要所以說三次

傳訊之前呢 A跟B都先生成一組公私鑰的pair A把A的公鑰傳給B B把B的公鑰傳給A 好現在A有他自己的私鑰跟B的公鑰 B有他自己的私鑰跟A的公鑰 A要傳東西給B就用B的公鑰加密 然後B拿到之後用B自己的私鑰解密 一切搞定 即使在中途被攔截 只要B的私鑰沒有流出就完全不會有事 反之亦然

中心思想就是利用公鑰可以用來加密的特性 而如果你是用公鑰加密你必須要用私鑰解密 所以我根本不怕公鑰流出(公開給所有人也沒差) 只要我私鑰保存好就好 我私鑰根本就沒傳過 也不可能被攔截

那為什麼這解決了對稱性加密的問題呢 因為第一次的傳輸也只互傳公鑰 所以即使公鑰被攔截 之後中間人拿到加密過的訊息也不能怎麼樣 因為那個要對方的私鑰才能解 所以一切都非常的美好…

Alt text

這裡是個伏筆 等等會回來 第一次有伏筆會先自己說自己是伏筆 看到這裡你就知道這個部落格絕不簡單 非比尋常

數位簽章

故事繼續 那既然大家都有B的public key, 那任何人都可以用B的公鑰加密傳訊息給B 那B怎麼知道哪個是A寫的哪個是別人偽造的呢 這裡就要引進數位簽章的概念

但說破哪值幾文錢 數位簽章就是A在傳送訊息前 用A的私鑰加密 傳給B B再用A的公鑰來看是不是真的是A簽名的(事實上是對內容的Hash簽名 不過為了講解方便 就先當直接對內容簽)

這裡運用的是可以公鑰加密私鑰解密 也可以私鑰加密公鑰解密 的第二個特性

你說公鑰所有人都有怎麼辦? 反正全世界都知道這訊息是A的訊息也沒關係 只要沒有B的私鑰就沒有其他人可以看到內容

融會貫通

驗收成果的時間來了 所以今天A要傳訊息給B要怎麼樣讓這訊息只有B看得到 而且B也確定是A寫的不是別人寫的呢

==================================================================

一開始A先把A的公鑰傳給B B先把B的公鑰傳給A

A要傳給B之前 把要傳的內容 先用B的公鑰加密再用A的私鑰簽 然後B用A的公鑰確認簽章再用B的私鑰解密內容

==================================================================

簡單吧 恭喜你已經比大多數人基礎都好了 下一篇會講最常見的應用 也就是ssh

說好的伏筆呢

如果今天出現了一個神級的中間人 還是有辦法破解 怎麼破呢?

  1. 在一開始A要傳送A的公鑰給B的時候 要是被C攔截 C就可以爽拿A的公鑰 然後呢 自己再生個公私鑰pair 把C的公鑰1給B 跟他說這是A的公鑰 Alt text
  2. 在一開始B要傳送B的公鑰給A的時候 要是被C攔截 C就可以爽拿B的公鑰 然後呢 自己再生另一個公私鑰pair 把C的公鑰2給A 跟他說這是B的公鑰 Alt text
  3. A和B以為拿著對方的公鑰 Alt text
  4. 今天A要傳給B 他以為他用B的公鑰加密(事實上他用了公鑰C2) 再用A的私鑰簽 想傳送給B但被C攔截 Alt text
  5. C用A的公鑰驗證 用私鑰C2解密之後 爽看內容 然後她想怎麼改寫就怎麼改寫
  6. 改寫完後 用B的公鑰加密後再用私鑰C1簽章 Alt text
  7. B拿到後 他用A的公鑰確認(事實上這是公鑰C1)然後再用他自己的私鑰解密
  8. 一切神不知鬼不覺

Alt text

至於怎麼破解這神級的中間人攻擊 我發現這篇的資訊量有點爆表了 我們下回再見!