iT邦幫忙

2024 iThome 鐵人賽

DAY 18
1

前言

我們現在來到了同等重要的驗證環節。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)

verify 函數主要在驗證以下幾個方面:

  • 簽名的有效性:確認 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設計的目的之一:確保資料在傳輸過程中沒有被篡改。如果資料發生任何變化,驗證就會失敗,從而保護了資料的完整性。


上一篇
Day17 - 什麼是 JWS
下一篇
Day19 - 實作 JWS 驗證(2)
系列文
Xiang教你進階Swift從有到精19
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言