簡介數位簽章

前面已經介紹了非常多密碼學相關的術語或實作,今天要介紹的數位簽章,是加密雜湊的組合技!

原理

之前在介紹 RSA 時,有提過一般都是使用公鑰加密、私鑰解密。數位簽章用法是相反的,它使用私鑰簽章(sign)、公鑰驗證(verify)。

圖片來源:維基百科

簽章實際的行為是:

  1. 對資料使用雜湊函式產生出雜湊
  2. 使用私鑰對雜湊加密,即可得到簽章
  3. 將資料與簽章一起送出

驗證實際的行為是:

  1. 取出資料與簽章
  2. 對資料使用雜湊函式產生出雜湊
  3. 使用公鑰解密得到藏在簽章裡的雜湊
  4. 比對自己產生的和公鑰產生的是否相等

私鑰理想上是會被保護的,公鑰則是公開。這代表持有私鑰的單位可以公開帶有簽章的訊息,來讓取得訊息的人能自由驗證該訊息是否是該單位所發出的。只要驗證通過了,則該單位就不可否認該訊息不是他們發出的。

那為什麼 MAC 有身分驗證的特性,但卻沒有不可否認性?這是因為 MAC 的 key,它同時能產生訊息也能驗證訊息,因此只要持有 key 的人有 Alice、Bob 與 Cindy,即便訊息都是由 Alice 發出給 Bob 和 Cindy,但實際上 Bob 收到帶有 Mac 的資訊,並沒有辦法保證這訊息是由 Alice 傳來的還是 Cindy 傳來的。但簽章可以,只要 Alice 的私鑰沒有外流,那理論上只有 Alice 才能產生簽章。

一般使用簽章的時候是不會加密資料的,主要是要確保資料完整性以及確認來源。但如果像機敏資料有加密需求,則會另外再將資料和簽章做加密。

小結

應用的範例如:JWT 即是利用簽章來確認傳輸的過程沒有被竄改;Debian 的下載目錄也有提供下載簽章驗證檔。

另外,因為非對稱加密的金鑰管理相較方便,因此也可以使用簽章來確保只有約定好的客戶端才能呼叫 API。

參考資料