前面已經介紹了非常多密碼學相關的術語或實作,今天要介紹的數位簽章,是加密與雜湊的組合技!
之前在介紹 RSA 時,有提過一般都是使用公鑰加密、私鑰解密。數位簽章用法是相反的,它使用私鑰簽章(sign)、公鑰驗證(verify)。
圖片來源:維基百科
簽章實際的行為是:
驗證實際的行為是:
私鑰理想上是會被保護的,公鑰則是公開。這代表持有私鑰的單位可以公開帶有簽章的訊息,來讓取得訊息的人能自由驗證該訊息是否是該單位所發出的。只要驗證通過了,則該單位就不可否認該訊息不是他們發出的。
那為什麼 MAC 有身分驗證的特性,但卻沒有不可否認性?這是因為 MAC 的 key,它同時能產生訊息也能驗證訊息,因此只要持有 key 的人有 Alice、Bob 與 Cindy,即便訊息都是由 Alice 發出給 Bob 和 Cindy,但實際上 Bob 收到帶有 Mac 的資訊,並沒有辦法保證這訊息是由 Alice 傳來的還是 Cindy 傳來的。但簽章可以,只要 Alice 的私鑰沒有外流,那理論上只有 Alice 才能產生簽章。
一般使用簽章的時候是不會加密資料的,主要是要確保資料完整性以及確認來源。但如果像機敏資料有加密需求,則會另外再將資料和簽章做加密。
應用的範例如:JWT 即是利用簽章來確認傳輸的過程沒有被竄改;Debian 的下載目錄也有提供下載簽章驗證檔。
另外,因為非對稱加密的金鑰管理相較方便,因此也可以使用簽章來確保只有約定好的客戶端才能呼叫 API。