Week39 — 各種安全性演算法的應用 — 竊聽、電子欺騙實作

鼠年全馬鐵人挑戰 — 高智能方程式系列

髒桶子
喜歡解決問題的髒桶子
5 min readDec 13, 2020

--

本文章同時發佈於:

大家好,繼上次Week38 — 各種安全性演算法的應用 — 概念篇之後,這次要介紹實做,以下程式碼都會使用 Golang 撰寫。

實作

以下實作大量參考Golang RSA encrypt and decrypt exampleGolang: aes-256-cbc examples (with iv, blockSize)

並且全部的範例都在此,請先 clone 下來會較好理解。

竊聽(eavesdrop)

還記得上篇文章 — 「竊聽(eavesdrop)是什麼?」章節防範的方法嗎?就是

將傳送的資料加密,這樣就算壞蛋偷走了也不知道資料內容

接下來就要利用加密訊息的方式來實作,常見的加密有 2 種:

公開金鑰加密(Public-key cryptography),又稱非對稱加密:

  • 擁有私鑰與公鑰 2 把鑰匙
  • 公鑰可以給任何人,私鑰不可以給自己以外的人
  • 加密使用公鑰,解密使用私鑰

對稱密鑰演算法(Symmetric-key algorithm):

  • 擁有 1 把鑰匙
  • 這把鑰匙不可以給不夠信任的人
  • 加密跟解密都用此鑰匙

小明早餐店阿姨如果不夠信任彼此,會採用公開金鑰加密,因為採用對稱密鑰演算法的話,早餐店阿姨把鑰匙給小明小明把這把鑰匙公開給別人就不好了,這樣大家都可以解開早餐店阿姨的加密資料,

使用公開金鑰加密加在原本的循序圖串起來就會如下:

看看程式碼,進入week39/eavesdrop/public的資料夾:

裡頭有以下檔案:

keykey.pub是透過ssh-keygen這個軟體來產生的,使用以下指令可以產生一組RSA公私鑰:

輸入後會詢問是否要設定passphrase,這是一個安全密碼,如果設定了,以後使用此私鑰還要輸入此安全密碼才可使用,以增加安全性,此範例沒有設定。

code主要可以看main的部分,註解有解釋流程,搭配循序圖會較好理解:

小明早餐店阿姨如果夠信任彼此,甚至他們可能是同一個系統,那就不必擔心小明早餐店阿姨的鑰匙做壞事了,故可採用對稱密鑰演算法

使用對稱密鑰演算法加在原本的循序圖串起來就會如下:

看看程式碼,進入week39/eavesdrop/symmetric的資料夾:

裡頭有以下檔案:

code主要可以看main的部分,註解有解釋流程,搭配循序圖會較好理解:

電子欺騙(spoofing)

還記得上篇文章 — 「電子欺騙(spoofing)是什麼?」章節防範的方法嗎?就是

傳輸人員在資料上產生一筆獨一無二的代碼供另一端驗證

接下來就要利用產生獨一無二的代碼來實作,方法有 2 種:

數位簽章(Digital Signature):

  • 擁有私鑰與公鑰 2 把鑰匙
  • 公鑰可以給任何人,私鑰不可以給自己以外的人
  • 使用私鑰產生代碼,公鑰驗證代碼

訊息識別碼(Message authentication code):

  • 擁有 1 把鑰匙
  • 這把鑰匙不可以給不夠信任的人
  • 使用此鑰匙來產生代碼

小明早餐店阿姨如果不夠信任彼此,會採用數位簽章,因為採用訊息識別碼的話,小明把鑰匙給早餐店阿姨早餐店阿姨拿去冒名成小明就不好了,

使用數位簽章加在原本的循序圖串起來就會如下:

看看程式碼,進入week39/spoofing/signature的資料夾:

裡頭有以下檔案:

鑰匙都是透過ssh-keygen產生,可以參考上方竊聽(eavesdrop)章節的講解,就不贅述。

code主要可以看main的部分,註解有解釋流程,搭配循序圖會較好理解:

小明早餐店阿姨如果夠信任彼此,甚至他們可能是同一個系統,那就不必擔心早餐店阿姨小明的鑰匙做壞事了,故可採用訊息識別碼

使用訊息識別碼加在原本的循序圖串起來就會如下:

看看程式碼,進入week39/spoofing/HMAC的資料夾:

裡頭有以下檔案:

code主要可以看main的部分,註解有解釋流程,搭配循序圖會較好理解:

參考

Write Medium in Markdown? Try Markdium!

--

--