我們現在來到了同等重要的驗證環節。JWS(JSON Web Signature)的核心價值在於其能夠確保數據的完整性和來源可靠性。
而 verify 函數正是實現這一目標的關鍵所在。
在我們深入了解 verify 函數的細節之前,讓我們先看一段示例代碼,這將幫助我們更好地理解驗證過程:
import JSONWebSignature
let signPrivateKey = Curve25519.Signing.PrivateKey()
let payload = "Hello world".data(using: .utf8)!
let jws = try! JWS(payload: payload,
key: signPrivateKey,
options: [.unencodedPayload])
let jwsString = jws.compactSerialization
let isVerify = try! JWS.verify(jwsString: jwsString,
payload: payload,
key: signPrivateKey.publicKey)
print(isVerify)
簽名的有效性:確認 JWS 字串中的簽名確實是使用正確的私鑰生成的,以確保數據沒有被篡改。
載荷的完整性::驗證 JWS 字串中的載荷與原始簽名的載荷相符,確保數據內容沒有被修改。
密鑰的真實性::確認用於驗證的公鑰確實對應於用於簽名的私鑰,以確保簽名與正確的實體關聯。
這些驗證步驟共同確保了 JWS 的安全性和可信度。
在這個情況下,原始的payload是"Hello world",但在驗證時使用了修改後的payload "Hello"。
let signPrivateKey = Curve25519.Signing.PrivateKey()
let payload = "Hello world".data(using: .utf8)!
let jws = try! JWS(payload: payload,
key: signPrivateKey,
options: [.unencodedPayload])
let jwsString = jws.compactSerialization
let payload2 = "Hello".data(using: .utf8)!
let isVerify = try! JWS.verify(jwsString: jwsString,
payload: payload2,
key: signPrivateKey.publicKey)
print(isVerify)
當執行 verify 時,它會檢查簽名的有效性、payload的完整性以及密鑰的真實性。由於payload已被更改,驗證過程將會失敗。因此,isVerify 的值將會是 false。
這表明JWS系統成功地檢測到了資料的變更,並且拒絕了驗證。這正是JWS設計的目的之一:確保資料在傳輸過程中沒有被篡改。如果資料發生任何變化,驗證就會失敗,從而保護了資料的完整性。