我們使用密碼學技術的隱私性並非唯一的原因,尤其密碼研究已經很多年了,自然也提供許多種特性來幫助網路環境更加的安全,可以說密碼學應用在最後一道防線

  1. 資料完整性 (Integrity):接收者在收到訊息後,有辦法確認在傳輸期間資料有沒有被變更過,不管是有意還是無意的,使用該技術的特性要確保原始的資料不能被部分或全部替換掉
  2. 驗證性 (Authentication):接收者在收到訊息後,有辦法驗證傳輸的來源,利用資料來源認證 (Data Origin Authentication) 技術要保證沒有人可以偽裝成傳輸者 Alice 傳給接收者 Bob,在初始建立傳輸通道時,雙方都可以用實體驗證 (Entity Authentication) 技術驗證對方的資訊
  3. 不可否認性 (Non-Repudiation):該特性保證傳輸者在傳出資訊,不可等一段時間後否認自己傳過該內容,像是股票交易或電子投票系統,不能夠在選擇後裝作沒這回事

讀者可以想像一下,如果我們把資訊寫在紙這種媒材上,應該也有提供了一些不可被操控的安全性,我們會預期手寫的簽名保證了簽名者的驗證跟同意不可否認性,這也是為什麼我們在許多公家機關裡必須簽紙本合約

但為了方便儲存,現在也許多資訊都推向 E 化,採用電子設備媒材本身並無提供任何安全性,如果我們在內網裡應該看得到那些沒限制存取的硬碟空間,而這時就有辦法改幾個 bytes,或者在傳輸資料時變更內容,更不用說在網路上公開可以存取的資源了

所以密碼理論的發展歷史如此久,原因在於我們的通訊管道不斷地進步,只需透過光纖、低軌衛星網路,甚至未來的量子網路,就可以從地球一端傳到另一端,確保資料不會被修改以及可驗證對方的資訊等技術就有了它們的需求

我們常見的對稱式 (Symmetric) 以及非對稱式 (公開金鑰, Public-Key) 方法都可以保證資訊的完整性,傳統的對稱式方法需要造一組私鑰 \(k\) 共享給傳輸與接收雙方

搭配上訊息我們稱作 \(m\) 就有辦法做出訊息驗證碼 (Message Authentication Code, MAC),我們透過設計演算法跟私鑰提供的安全性造出這組碼,利用該碼跟原本的訊息就可以保護不被攻擊者變更內容,接收者可以透過比較收到的資訊 \((m, \overline{m})\) 來確認資料的完整性,而 \(\overline{m}\) 就像下列的演算法提供

$$MAC(k, m) = \overline{m}$$

MAC 甚至還可以加上 Hash Function 來實作,這我們之後的文章會在描述

而數位簽章則需要透過公開金鑰的方法才有辦法實現,上面我們提到手寫的簽名提供了驗證性以及不可否認性,其中不可否認性更是在簽署重要合約中不可缺失的特性,所以我們在數位簽章時會使用簽署者的私鑰,該份私鑰只有該簽署者才擁有,另一方面,如果其他人知道驗證的演算法,就可以利用簽署者的公鑰放進驗證演算法 Verify 內進行驗證,公鑰 \(pk\) 顧名思義就是公開的

今天如果簽署者 Alice 今天想要簽一份數位合約 \(m\),她用自己的私鑰 \(sk\)放進簽署演算法 Sign 裡得到簽章 \(s = Sign(sk, m)\),Bob 拿到這份簽章 \(s\)跟資訊內容 \(m\),就可以透過下列的驗證演算法跟 Alice 的公鑰進行驗證

$$Verify(pk, s, m) = ok$$

如果資訊內容正確就回傳 ok,反之如果簽章是錯的,或者驗證到不匹配的公鑰跟簽章通常會回傳 False、None 或 \(\perp\),根據設計者的想法而定

但近代更常見的不是對資訊本身做簽章,而是先將資訊內容做密碼學雜湊函數做計算,得到一組雜湊值再進行簽章,像是著名的 RSA (雖說該密碼系統的正式名稱在 NIST 裡有競賽編號,但後人為了方便稱呼則用三位提出的教授名字命名:Rivest、Shamir、Adleman)

利用 RSA 的解密演算法就可以用來產生簽章,而用加密演算法則能夠驗證產出的簽章,這類的數位簽章通常被稱作先雜湊再解密 (Hash-then-Decrypt) 的流程,而更近代一點之後,數位簽章機制的設計越來越複雜,像是機率簽章機制 (Probabilistic Signature Scheme, PSS) 就為了因應目前計算能力更強的設備而生,利用隨機性的虛擬亂數字串來替換雜湊值內容等流程來提升破解的難度,未來我們會在介紹

數位簽章的結果會根據資訊的內容不斷地變化,不同的資訊會產出不同的簽章,所以利用傳統的 MAC 以及數位簽章就可以確保資訊的完整性