Amazon 中的資料驗證 QLDB - Amazon Quantum Ledger 資料庫 (Amazon QLDB)

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

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日誌結構圖顯示一組構成鏈的雜湊鏈結區塊,以及每個區塊的序號和雜湊。

圖表顯示交易會以包含文件修訂項目的區塊的形式遞交至日誌。它還顯示每個區塊都以雜湊鏈方式連結到後續區塊,並具有序列編號來指定其在股內的地址。

如需有關區塊中資料內容的資訊,請參閱 Amazon 的期刊內容 QLDB

什麼是資料完整性?

中的資料完整性QLDB表示您分類帳的日誌實際上是不可變的。換句話說,您的資料 (特別是每個文件修訂) 處於下列為 true 的狀態:

  1. 它存在於日誌中第一次寫入的相同位置。

  2. 自撰寫以來,它就沒有任何變化。

驗證如何運作?

若要了解驗證如何在 Amazon 中運作QLDB,您可以將概念分解為四個基本元件。

雜湊

QLDB 使用 SHA-256 密碼編譯雜湊函數來建立 256 位元雜湊值。雜湊可做為任意數量輸入資料的唯一固定長度簽章。如果您變更輸入的任何部分,甚至是單一字元或位元,則輸出雜湊會完全變更。

下圖顯示 SHA-256 雜湊函數會為僅因單一數字而不同的兩個QLDB文件建立完全唯一的雜湊值。

顯示 SHA-256 密碼編譯雜湊函數為僅因單一數字而不同的兩個QLDB文件建立完全唯一雜湊值的圖表。

SHA-256 雜湊函數是其中一種方式,這表示在數學上無法在指定輸出時計算輸入。下圖顯示,當指定輸出雜湊值時,無法計算輸入QLDB文件。

圖表顯示,當指定輸出雜湊值時,無法計算輸入QLDB文件。

下列資料輸入會雜湊入QLDB以供驗證:

  • 文件修訂

  • PartiQL 陳述式

  • 修訂項目

  • 日誌區塊

摘要

摘要是分類帳在某個時間點的整個日誌的密碼編譯表示法。日誌僅附加,日誌區塊會進行排序,雜湊鏈結類似於區塊鏈。

您可以隨時請求分類帳的摘要。QLDB 會產生摘要,並將其作為安全輸出檔案傳回給您。然後,您可以使用該摘要來驗證先前時間點遞交之文件修訂的完整性。如果您從修訂開始重新計算雜湊,並以摘要結尾,則證明您的資料之間沒有發生變更。

Merkle 樹狀結構

隨著分類帳的大小增加,重新計算日誌的完整雜湊鏈以進行驗證變得越來越低效率。QLDB 使用 Merkle 樹模型來解決這種效率低下的問題。

Merkle 樹是樹狀資料結構,其中每個葉節點代表資料區塊的雜湊。每個非分葉節點都是其子節點的雜湊。Merkle 樹通常用於區塊鏈,可協助您使用稽核驗證機制來有效驗證大型資料集。如需 Merkle 樹的詳細資訊,請參閱 Merkle 樹 Wikipedia 頁面。若要進一步了解 Merkle 稽核證明和範例使用案例,請參閱 憑證透明度網站上的日誌證明運作方式

Merkle 樹的QLDB實作是從日誌的完整雜湊鏈建構而成。在此模型中,分葉節點是所有個別文件修訂雜湊集。根節點代表截至某個時間點的整個日誌摘要。

使用 Merkle 稽核證明,您可以只檢查分類帳修訂歷史記錄的一小部分,以驗證修訂。您可以透過將樹狀目錄從指定的葉節點 (修訂) 周遊到其根節點 (摘要) 來執行此操作。沿著此周遊路徑,您可以遞迴地雜湊配對節點來計算其父雜湊,直到您結束摘要為止。此周遊具有樹狀目錄中log(n)節點的時間複雜性。

證明

證明是QLDB傳回給定摘要和文件修訂的節點雜湊順序清單。它由 Merkle 樹狀結構模型所需的雜湊組成,將指定的葉節點雜湊 (修訂版) 鏈結至根雜湊 (摘要)。

在修訂和摘要之間變更任何遞交的資料會中斷日誌的雜湊鏈,並導致無法產生證據。

驗證範例

下圖說明 Amazon QLDB雜湊樹模型。它顯示一組區塊雜湊,這些雜湊會彙總到頂部根節點,代表日誌鏈的摘要。在具有單股日誌的分類帳中,此根節點也是整個分類帳的摘要。

日誌鏈中一組區塊雜湊的 Amazon 雜QLDB湊樹狀圖。

假設該節點 A 是包含您要驗證其雜湊的文件修訂的區塊。下列節點代表證據中QLDB提供的雜湊順序清單:B E G 。 這些雜湊是重新計算雜湊 A 摘要的必要條件。

若要重新計算摘要,請執行下列動作:

  1. 從雜湊 A 開始,並將其與雜湊 B 串連。 然後,雜湊計算 D 的結果。

  2. 使用 DE 計算 F

  3. 使用 FG 計算摘要。

如果您的重新計算摘要符合預期值,則驗證會成功。鑒於修訂雜湊和摘要,無法對證據中的雜湊進行反向工程。因此,此練習證明您的修訂確實是相對於摘要撰寫在此日誌位置。

資料編輯如何影響驗證?

在 Amazon 中QLDB,DELETE陳述式只會透過建立新的修訂,將其標記為已刪除,以邏輯方式刪除文件。QLDB 也支援資料編輯操作,可讓您永久刪除資料表歷史記錄中的非作用中文件修訂。

編輯操作只會刪除指定修訂中的使用者資料,並使日誌序列和文件中繼資料保持不變。修訂修訂後,修訂中的使用者資料 (由data結構表示) 會被新dataHash欄位取代。此欄位的值是已移除data結構的 Amazon Ion 雜湊。如需詳細資訊和編輯操作的範例,請參閱 編輯文件修訂版本

因此,分類帳會維護其整體資料完整性,並透過現有的驗證API操作以密碼編譯方式進行驗證。您仍然可以如預期般使用這些API操作來請求摘要 (GetDigest)、請求證明 (GetBlockGetRevision),然後使用傳回的物件執行驗證演算法。

重新計算修訂雜湊

如果您打算透過重新計算其雜湊來驗證個別文件修訂,您必須有條件地檢查修訂是否已修訂。如果修訂已修訂,您可以使用 dataHash 欄位提供的雜湊值。如果未對其進行編輯,您可以使用 data 欄位重新計算雜湊。

透過執行此條件式檢查,您可以識別修改後的修訂,並採取適當的動作。例如,您可以記錄資料操作事件以進行監控。

驗證入門

在驗證資料之前,您必須向分類帳請求摘要,並儲存以供稍後使用。在摘要涵蓋的最新區塊之前遞交的任何文件修訂,都有資格針對該摘要進行驗證。

然後,您向 Amazon 請求要驗證的QLDB合格修訂的證明。使用此證明,您可以呼叫用戶端API以重新計算摘要,從修訂雜湊開始。只要先前儲存的摘要在 之外是已知且受信任的QLDB,如果重新計算的摘要雜湊符合儲存的摘要雜湊,即可證明文件的完整性。

重要
  • 您特別證明的是,在您儲存此摘要的時間和執行驗證的時間之間,文件修訂版本沒有變更。只要您想要稍後確認的修訂已提交日誌,您就可以請求並儲存摘要。

  • 作為最佳實務,我們建議您定期請求摘要,並將其存放在遠離分類帳的地方。根據您在分類帳中提交修訂的頻率,決定您請求摘要的頻率。

    如需詳細 AWS 部落格文章,討論實際使用案例內容中密碼編譯驗證的價值,請參閱使用 Amazon 進行真實世界密碼編譯驗證QLDB

如需 step-by-step如何向分類帳請求摘要並驗證資料的指南,請參閱下列內容: