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