如下圖所述, 情境是sender想要將簽章後的文件寄給receiver.
- Sender會先使用某種hash演算法來計算該文件檔的hash值.
- Sender用自己的私鑰對計算出來的hash值進行加密, 這個動作稱為簽名(signing), 其結果叫做簽章(signature).
- Sender將簽章連同原始的檔案寄給receiver.
- Receiver收到這兩樣東西後, 首先透過sender對外公開的公鑰對簽章進行解密, 以便取得sender簽名之前就計算好的hash值.
- Receiver使用跟sender相同的hash演算法(sender使用的演算法是簽章中的明文資訊, receiver可以從中得知)去計算出原始檔案的hash值.
- 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