本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon 中的資料驗證 QLDB
重要
支援終止通知:現有客戶將可以使用 Amazon,QLDB直到 07/31/2025 的支援結束為止。如需詳細資訊,請參閱將 Amazon QLDB Ledger 遷移至 Amazon Aurora Postgre。SQL
使用 Amazon 時QLDB,您可以信任應用程式資料變更的歷史記錄是準確的。QLDB 使用不可變的交易日誌,稱為日誌 來儲存資料。日誌會追蹤您遞交資料的每項變更,並維護一份完整的可驗證變更歷史記錄。
QLDB 使用 SHA-256 雜湊函數搭配 Merkle 樹型模型,產生日誌的密碼編譯表示法,稱為摘要。摘要可做為資料截至某個時間點整個變更歷史記錄的唯一簽章。您可以使用摘要來驗證文件修訂相對於該簽章的完整性。
主題
您可以在 中驗證哪些類型的資料QLDB?
在 中QLDB,每個分類帳只有一個日誌。日誌可以具有多股 ,這些是日誌的分割區。
注意
QLDB 目前僅支援具有單股的日誌。
區塊是在交易期間遞交至日誌股的物件。此區塊包含項目物件,代表交易產生的文件修訂。您可以在 中驗證個別修訂或整個日誌區塊QLDB。
下圖說明此日誌結構。
圖表顯示交易會以包含文件修訂項目的區塊的形式遞交至日誌。它還顯示每個區塊都以雜湊鏈方式連結到後續區塊,並具有序列編號來指定其在股內的地址。
如需有關區塊中資料內容的資訊,請參閱 Amazon 的期刊內容 QLDB。
什麼是資料完整性?
中的資料完整性QLDB表示您分類帳的日誌實際上是不可變的。換句話說,您的資料 (特別是每個文件修訂) 處於下列為 true 的狀態:
-
它存在於日誌中第一次寫入的相同位置。
-
自撰寫以來,它就沒有任何變化。
驗證如何運作?
若要了解驗證如何在 Amazon 中運作QLDB,您可以將概念分解為四個基本元件。
雜湊
QLDB 使用 SHA-256 密碼編譯雜湊函數來建立 256 位元雜湊值。雜湊可做為任意數量輸入資料的唯一固定長度簽章。如果您變更輸入的任何部分,甚至是單一字元或位元,則輸出雜湊會完全變更。
下圖顯示 SHA-256 雜湊函數會為僅因單一數字而不同的兩個QLDB文件建立完全唯一的雜湊值。
SHA-256 雜湊函數是其中一種方式,這表示在數學上無法在指定輸出時計算輸入。下圖顯示,當指定輸出雜湊值時,無法計算輸入QLDB文件。
下列資料輸入會雜湊入QLDB以供驗證:
-
文件修訂
-
PartiQL 陳述式
-
修訂項目
-
日誌區塊
摘要
摘要是分類帳在某個時間點的整個日誌的密碼編譯表示法。日誌僅附加,日誌區塊會進行排序,雜湊鏈結類似於區塊鏈。
您可以隨時請求分類帳的摘要。QLDB 會產生摘要,並將其作為安全輸出檔案傳回給您。然後,您可以使用該摘要來驗證先前時間點遞交之文件修訂的完整性。如果您從修訂開始重新計算雜湊,並以摘要結尾,則證明您的資料之間沒有發生變更。
Merkle 樹狀結構
隨著分類帳的大小增加,重新計算日誌的完整雜湊鏈以進行驗證變得越來越低效率。QLDB 使用 Merkle 樹模型來解決這種效率低下的問題。
Merkle 樹是樹狀資料結構,其中每個葉節點代表資料區塊的雜湊。每個非分葉節點都是其子節點的雜湊。Merkle 樹通常用於區塊鏈,可協助您使用稽核驗證機制來有效驗證大型資料集。如需 Merkle 樹的詳細資訊,請參閱 Merkle 樹 Wikipedia 頁面
Merkle 樹的QLDB實作是從日誌的完整雜湊鏈建構而成。在此模型中,分葉節點是所有個別文件修訂雜湊集。根節點代表截至某個時間點的整個日誌摘要。
使用 Merkle 稽核證明,您可以只檢查分類帳修訂歷史記錄的一小部分,以驗證修訂。您可以透過將樹狀目錄從指定的葉節點 (修訂) 周遊到其根節點 (摘要) 來執行此操作。沿著此周遊路徑,您可以遞迴地雜湊配對節點來計算其父雜湊,直到您結束摘要為止。此周遊具有樹狀目錄中log(n)
節點的時間複雜性。
證明
證明是QLDB傳回給定摘要和文件修訂的節點雜湊順序清單。它由 Merkle 樹狀結構模型所需的雜湊組成,將指定的葉節點雜湊 (修訂版) 鏈結至根雜湊 (摘要)。
在修訂和摘要之間變更任何遞交的資料會中斷日誌的雜湊鏈,並導致無法產生證據。
驗證範例
下圖說明 Amazon QLDB雜湊樹模型。它顯示一組區塊雜湊,這些雜湊會彙總到頂部根節點,代表日誌鏈的摘要。在具有單股日誌的分類帳中,此根節點也是整個分類帳的摘要。
假設該節點 A 是包含您要驗證其雜湊的文件修訂的區塊。下列節點代表證據中QLDB提供的雜湊順序清單:B 、E 、G 。 這些雜湊是重新計算雜湊 A 摘要的必要條件。
若要重新計算摘要,請執行下列動作:
-
從雜湊 A 開始,並將其與雜湊 B 串連。 然後,雜湊計算 D 的結果。
-
使用 D 和 E 計算 F 。
-
使用 F 和 G 計算摘要。
如果您的重新計算摘要符合預期值,則驗證會成功。鑒於修訂雜湊和摘要,無法對證據中的雜湊進行反向工程。因此,此練習證明您的修訂確實是相對於摘要撰寫在此日誌位置。
資料編輯如何影響驗證?
在 Amazon 中QLDB,DELETE
陳述式只會透過建立新的修訂,將其標記為已刪除,以邏輯方式刪除文件。QLDB 也支援資料編輯操作,可讓您永久刪除資料表歷史記錄中的非作用中文件修訂。
編輯操作只會刪除指定修訂中的使用者資料,並使日誌序列和文件中繼資料保持不變。修訂修訂後,修訂中的使用者資料 (由data
結構表示) 會被新dataHash
欄位取代。此欄位的值是已移除data
結構的 Amazon Ion 雜湊。如需詳細資訊和編輯操作的範例,請參閱 編輯文件修訂版本。
因此,分類帳會維護其整體資料完整性,並透過現有的驗證API操作以密碼編譯方式進行驗證。您仍然可以如預期般使用這些API操作來請求摘要 (GetDigest)、請求證明 (GetBlock 或 GetRevision),然後使用傳回的物件執行驗證演算法。
重新計算修訂雜湊
如果您打算透過重新計算其雜湊來驗證個別文件修訂,您必須有條件地檢查修訂是否已修訂。如果修訂已修訂,您可以使用 dataHash
欄位提供的雜湊值。如果未對其進行編輯,您可以使用 data
欄位重新計算雜湊。
透過執行此條件式檢查,您可以識別修改後的修訂,並採取適當的動作。例如,您可以記錄資料操作事件以進行監控。
驗證入門
在驗證資料之前,您必須向分類帳請求摘要,並儲存以供稍後使用。在摘要涵蓋的最新區塊之前遞交的任何文件修訂,都有資格針對該摘要進行驗證。
然後,您向 Amazon 請求要驗證的QLDB合格修訂的證明。使用此證明,您可以呼叫用戶端API以重新計算摘要,從修訂雜湊開始。只要先前儲存的摘要在 之外是已知且受信任的QLDB,如果重新計算的摘要雜湊符合儲存的摘要雜湊,即可證明文件的完整性。
重要
-
您特別證明的是,在您儲存此摘要的時間和執行驗證的時間之間,文件修訂版本沒有變更。只要您想要稍後確認的修訂已提交日誌,您就可以請求並儲存摘要。
-
作為最佳實務,我們建議您定期請求摘要,並將其存放在遠離分類帳的地方。根據您在分類帳中提交修訂的頻率,決定您請求摘要的頻率。
如需詳細 AWS 部落格文章,討論實際使用案例內容中密碼編譯驗證的價值,請參閱使用 Amazon 進行真實世界密碼編譯驗證QLDB
。
如需 step-by-step如何向分類帳請求摘要並驗證資料的指南,請參閱下列內容: