那些關於SSL/TLS的二三事(五) — 數位簽章

Carl
3 min readMay 1, 2018

--

這篇要講的是數位簽章的運作原理, 在前面的系列文中, 我們可以知道簽章是憑證裡很重要的一部分. 一般來說, 所謂的數位簽章(digital signature)就是某種東西的雜湊值(hash)經由簽章者的私鑰簽名後結果. 簽章的輸入資料可以是一份文件, video stream, software, picture, etc. 簽章通常也會跟著原始的檔案內容一起被寄出(不然你叫人家怎麼驗證).

如下圖所述, 情境是sender想要將簽章後的文件寄給receiver.

Process of digital signature
  1. Sender會先使用某種hash演算法來計算該文件檔的hash值.
  2. Sender用自己的私鑰對計算出來的hash值進行加密, 這個動作稱為簽名(signing), 其結果叫做簽章(signature).
  3. Sender將簽章連同原始的檔案寄給receiver.
  4. Receiver收到這兩樣東西後, 首先透過sender對外公開的公鑰對簽章進行解密, 以便取得sender簽名之前就計算好的hash值.
  5. Receiver使用跟sender相同的hash演算法(sender使用的演算法是簽章中的明文資訊, receiver可以從中得知)去計算出原始檔案的hash值.
  6. Receiver比較前兩步驟中得出的hash值, 若兩者匹配, 則簽章驗證成功, 反之則失敗.

在知道了上述的步驟後, 我們來看一下數位簽章提供了哪些安全性上的好處. 在整個簽名以及驗證的流程中, 數位簽章借用了一些密碼學的特性, 也許你已經看出來了:

  • Integrity(完整性): 確認檔案沒有在傳輸的過程中遭到竄改
  • Authentication(認證): Receiver會驗證收到的訊息是否真的是sender本人, 這部分是透過公鑰能否解密簽章來確認(非對稱式加密的特性之一).
  • Non-repudiation(不可否定性): Sender無法否定對於其所寄出的訊息的所有權(ownership), 因為其私鑰已經參與在產生簽章的過程中了, 且此私鑰是只有該持有人才知道的一個secret.

關於hash演算法, 可以想成是一個function會接受一個檔案或是input, 並且回傳固定大小的字串用以表示唯一的檔案內容(uniquely represent the file content). 由此可知, hash function的output會是input的digest(特徵值), 且不管計算幾次都是一樣的(對同一input來說). 常見的hash演算法有: MD5, SHA1, SHA2, SHA3.

最後, 一些常見的數位簽章應用有:

  • SSL憑證
  • Secure eMail
  • eDocuments
  • 數位浮水印

References

  • SSL/TLS Operations

--

--

Carl

Stand for something or you will fall for anything.