Week39 — 各種安全性演算法的應用 — 竊聽、電子欺騙實作
鼠年全馬鐵人挑戰 — 高智能方程式系列
本文章同時發佈於:
大家好,繼上次Week38 — 各種安全性演算法的應用 — 概念篇之後,這次要介紹實做,以下程式碼都會使用 Golang 撰寫。
實作
以下實作大量參考Golang RSA encrypt and decrypt example與Golang: aes-256-cbc examples (with iv, blockSize)。
並且全部的範例都在此,請先 clone 下來會較好理解。
竊聽(eavesdrop)
還記得上篇文章 — 「竊聽(eavesdrop)是什麼?」章節防範的方法嗎?就是
將傳送的資料加密,這樣就算壞蛋偷走了也不知道資料內容
接下來就要利用加密
訊息的方式來實作,常見的加密有 2 種:
公開金鑰加密(Public-key cryptography),又稱非對稱加密:
- 擁有私鑰與公鑰 2 把鑰匙
- 公鑰可以給任何人,私鑰不可以給自己以外的人
- 加密使用公鑰,解密使用私鑰
對稱密鑰演算法(Symmetric-key algorithm):
- 擁有 1 把鑰匙
- 這把鑰匙不可以給不夠信任的人
- 加密跟解密都用此鑰匙
小明
與早餐店阿姨
如果不夠信任彼此
,會採用公開金鑰加密
,因為採用對稱密鑰演算法
的話,早餐店阿姨
把鑰匙給小明
,小明
把這把鑰匙公開給別人就不好了,這樣大家都可以解開早餐店阿姨
的加密資料,
使用公開金鑰加密
加在原本的循序圖串起來就會如下:
看看程式碼,進入week39/eavesdrop/public
的資料夾:
裡頭有以下檔案:
.
├── key : 私鑰
├── key.pub: 公鑰
└── main.go: 程式碼
key
與key.pub
是透過ssh-keygen
這個軟體來產生的,使用以下指令可以產生一組RSA
公私鑰:
$ ssh-keygen -t rsa -f key -m pem
輸入後會詢問是否要設定passphrase
,這是一個安全密碼,如果設定了,以後使用此私鑰還要輸入此安全密碼才可使用,以增加安全性,此範例沒有設定。
code主要可以看main
的部分,註解有解釋流程,搭配循序圖會較好理解:
小明
與早餐店阿姨
如果夠信任彼此
,甚至他們可能是同一個系統,那就不必擔心小明
拿早餐店阿姨
的鑰匙做壞事了,故可採用對稱密鑰演算法
,
使用對稱密鑰演算法
加在原本的循序圖串起來就會如下:
看看程式碼,進入week39/eavesdrop/symmetric
的資料夾:
裡頭有以下檔案:
.
└── main.go: 程式碼
code主要可以看main
的部分,註解有解釋流程,搭配循序圖會較好理解:
電子欺騙(spoofing)
還記得上篇文章 — 「電子欺騙(spoofing)是什麼?」章節防範的方法嗎?就是
傳輸人員在資料上產生一筆獨一無二的代碼供另一端驗證
接下來就要利用產生獨一無二的代碼
來實作,方法有 2 種:
數位簽章(Digital Signature):
- 擁有私鑰與公鑰 2 把鑰匙
- 公鑰可以給任何人,私鑰不可以給自己以外的人
- 使用私鑰產生代碼,公鑰驗證代碼
訊息識別碼(Message authentication code):
- 擁有 1 把鑰匙
- 這把鑰匙不可以給不夠信任的人
- 使用此鑰匙來產生代碼
小明
與早餐店阿姨
如果不夠信任彼此
,會採用數位簽章
,因為採用訊息識別碼
的話,小明
把鑰匙給早餐店阿姨
,早餐店阿姨
拿去冒名成小明
就不好了,
使用數位簽章
加在原本的循序圖串起來就會如下:
看看程式碼,進入week39/spoofing/signature
的資料夾:
裡頭有以下檔案:
.
├── badGuyKey : 壞人的私鑰
├── badGuyKey.pub : 壞人的公鑰
├── goodGuykey : 小明的私鑰
├── goodGuykey.pub: 小明的公鑰
└── main.go : 程式碼
鑰匙都是透過ssh-keygen
產生,可以參考上方竊聽(eavesdrop)
章節的講解,就不贅述。
code主要可以看main
的部分,註解有解釋流程,搭配循序圖會較好理解:
小明
與早餐店阿姨
如果夠信任彼此
,甚至他們可能是同一個系統,那就不必擔心早餐店阿姨
拿小明
的鑰匙做壞事了,故可採用訊息識別碼
,
使用訊息識別碼
加在原本的循序圖串起來就會如下:
看看程式碼,進入week39/spoofing/HMAC
的資料夾:
裡頭有以下檔案:
.
└── main.go : 程式碼
code主要可以看main
的部分,註解有解釋流程,搭配循序圖會較好理解:
參考
Write Medium in Markdown? Try Markdium!