Week40 — 各種安全性演算法的應用 — 竄改、抵賴實作

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

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

--

本文章同時發佈於:

大家好,繼上次Week39 — 各種安全性演算法的應用 — 竊聽、電子欺騙實作之後,這次要介紹竄改抵賴的實作。

實作

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

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

竄改(falsification)

還記得Week38 — 「竄改(falsification)是什麼?」章節防範的方法嗎?就是

與電子欺騙的解決方法相同,傳輸人員在資料上產生一筆獨一無二的代碼供另一端驗證

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

數位簽章(Digital Signature):

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

訊息識別碼(Message authentication code):

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

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

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

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

裡頭有以下檔案:

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

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

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

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

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

看看程式碼,進入week40/falsification/HMAC的資料夾:

裡頭有以下檔案:

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

抵賴(repudiation)

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

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

接下來就要利用產生獨一無二的代碼來實作,由於在抵賴的情境中,小明就是壞人,所以早餐店阿姨小明本來就不夠信任彼此,所以只可用 1 種方法:

數位簽章(Digital Signature):

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

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

看看程式碼,進入week40/repudiation/signature的資料夾:

裡頭有以下檔案:

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

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

參考

Write Medium in Markdown? Try Markdium!

--

--