View a markdown version of this page

信標 - AWS 資料庫加密 SDK

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

信標

我們的用戶端加密程式庫已重新命名為 AWS 資料庫加密 SDK。此開發人員指南仍提供有關 DynamoDB 加密用戶端的資訊。

信標是截斷的雜湊型訊息驗證碼 (HMAC) 標籤,可將純文字欄位值映射至與資料庫中加密資料一起存放的加密、可搜尋的識別符。信標不會變更 欄位的加密狀態。當您將值寫入設定為可搜尋加密的欄位時,AWS Database Encryption SDK 會透過純文字值計算 HMAC,並在分割區的內容中衍生信標。完整的 HMAC 唯一對應至純文字值,但 SDK 刻意截斷輸出,讓多個不同的純文字值可以對應至相同的信標。這些碰撞 (誤報) 會限制未經授權的使用者推斷有關基礎純文字的辨別資訊的能力。

注意

雜湊型訊息驗證碼 (HMAC) 是一種金鑰加密密碼編譯雜湊函數,通常用於提供完整性和真實性。在可搜尋的加密系統中,HMAC 通常用於確定性地從純文字值衍生信標,以便對其進行索引和查詢。

全長 HMAC 是確定性的:對於指定的金鑰,相同的純文字值一律會產生相同的信標。此決定性會在純文字值和信標之間產生one-to-one映射,保留資料的原始頻率分佈。共用相同純文字值的所有記錄都會對應至相同的信標,因此會形成同等類別。每個等效類別的大小會直接反映對應的純文字值出現在資料集中的頻率。

此頻率保留可啟用頻率分析攻擊,其中觀察者透過將觀察到的信標頻率與已知或預期的資料分佈相互關聯來推斷可能的純文字值。

為了緩解頻率分析攻擊,開發套件使用截斷分割衍生信標。截斷 HMAC 會引入受控制的碰撞,因此並非所有相等類別內的記錄都必須共用相同的信標值。此外,將分割區識別符整合到信標衍生中,可讓相同的純文字值映射到跨分割區的不同信標。這些技術可共同提升不均勻分佈資料集的隨機性,同時保留正確且有效率的查詢行為。

信標只能從密碼編譯動作SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT中標記為 ENCRYPT_AND_SIGNSIGN_ONLY或 的欄位建構。信標本身不會簽署或加密。您無法以標記為 的欄位建構信標DO_NOTHING

設定信標之後,您必須先為每個信標設定次要索引,才能搜尋加密的欄位。如需詳細資訊,請參閱使用信標設定次要索引

了解跨分割區的信標衍生

分割是信標組態的核心部分,適用於所有信標,包括使用單一分割區的信標。此模型可確保所有資料的信標衍生一致且向前相容,並可讓您在資料磁碟區或分佈變更時隨時間增加分割區數量。如此一來,您可以減少頻率洩漏,並強化不均勻分佈資料集的保護,而無需重寫現有項目。

分割區透過將項目分散到多個邏輯群組,引入受控隨機性。這可減少頻率洩漏、限制信標等效類別的大小,以及改善具有偏斜分佈之屬性的安全性和隱私權。

當項目指派給分割區時,分割區編號會併入信標衍生。在相同的分割區中,相同的純文字值會產生相同的信標,保留平等搜尋語意。在不同的分割區中,相同的純文字值會產生不同的信標值。這會將大型等效類別分成較小的每個分割區群組,並有助於扁平化信標的整體頻率分佈。

您可以完全控制每個資料庫項目指派給分割區的方式。項目可以確定性地放置在特定分割區中,也可以隨機分佈,以協助平滑不均勻的資料分佈。隨機指派對於高頻率值特別有用,因為它會將這些值分散到多個分割區,並減少任何單一分割區中的可見濃度。當網域知識指出特定值應限制為較少的分割區時,可以使用確定性指派。

分割區識別符不會在加密的記錄中公開。反之,分割區編號會與純文字值一起整合到信標衍生程序中,因此無法透過檢查加密的資料或信標本身來推斷。此設計可確保分割區指派保持機密,同時仍提供分割區信標的分佈和隱私權優勢。

分割區對查詢的影響

分割會影響Query操作的執行方式。由於 DynamoDB 查詢在索引信標值上需要完全相符,且信標值因分割區而異,因此發起人必須獨立查詢每個分割區。如果資料表具有N分割區:

  • 擷取所有相符項目需要N個別的查詢。

  • 只有 Query 會受到影響。

  • ScanGet操作的行為和以前一樣。

原因為結構性: Scan會讀取所有項目,並在特定索引鍵上Get操作;僅Query取決於索引中的確切相等性,這會成為分割區特定。

注意

Fan-out 是指在使用分割信標時,必須發出以滿足單一邏輯請求的 DynamoDB 查詢數量。系統提供邊界廣發,這表示分割區層級查詢的最大數量是根據設定的分割區數量來固定且可預測。

效能考量

使用分割區會影響每個邏輯請求所需的 DynamoDB 查詢數量。效能影響取決於預期的結果大小:

  • 大型結果集:當查詢傳回許多頁面時,額外的分割區層級查詢會增加少許額外負荷。

  • 單一項目查詢:如果請求通常傳回一個項目並設定五個分割區,則會發出五個查詢 - 四個查詢未傳回任何結果 - 導致接近線性的減慢。

  • 減少地區性:項目可能會分散在分割區中,增加擷取時間。

由於每個分割區都會觸發額外的查詢,因此廣發是規劃效能和容量的重要因素。

效能優勢

雖然有額外的查詢額外負荷,但分割區可以在特定情況下改善效能:

  • 減少大型等效類別:當罕見值與經常出現的值共用截斷的信標時,罕見值的查詢必須處理許多不相關的相符項目。分割會限制每個等效類別的大小,並減少此額外負荷。

  • 支援較長的信標長度:設定更多分割區可以允許使用較長的信標長度,從而降低誤報率並減少所需的解密後篩選數量。

信標類型

您設定的信標類型決定您可以執行的查詢類型。支援可搜尋加密的信標有兩種類型。標準信標會執行相等性搜尋。複合信標結合常值純文字字串和標準信標,以執行複雜的資料庫操作。

標準信標

標準信標是在資料庫中實作可搜尋加密的最簡單方法。他們只能對單一加密或虛擬欄位執行等式搜尋。若要了解如何設定標準信標,請參閱設定標準信標。您也可以使用具有信標的分割區,在基礎資料分佈不均勻時提升隨機性。

以下是標準信標的重要概念。

信標來源

標準信標建構來源的欄位稱為信標來源。它可識別信標需要映射的資料位置。信標來源可以是加密欄位或虛擬欄位。每個標準信標中的信標來源必須是唯一的。您無法設定具有相同信標來源的兩個信標。

標準信標可用於對加密或虛擬欄位執行等式搜尋。或者,它們可用來建構複合信標,以執行更複雜的資料庫操作。為了協助您組織和管理標準信標, AWS 資料庫加密 SDK 提供下列選用信標樣式,可定義標準信標的預期用途。如需詳細資訊,請參閱定義信標樣式

您可以建立執行單一加密欄位相等性搜尋的標準信標,也可以建立建立虛擬欄位,在多個 ENCRYPT_AND_SIGNSIGN_ONLYSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT 欄位的串連上執行相等性搜尋的標準信標。

虛擬欄位

虛擬欄位是從一或多個來源欄位建構的概念欄位。建立虛擬欄位不會將新欄位寫入您的記錄。虛擬欄位不會明確存放在您的資料庫中。它用於標準信標組態,提供信標指示,說明如何識別欄位的特定區段,或串連記錄中的多個欄位以執行特定查詢。虛擬欄位至少需要一個加密欄位。

注意

下列範例示範您可以使用虛擬欄位執行的轉換和查詢類型。在應用程式中,此範例中使用的範例欄位可能不符合信標的分佈相互關聯唯一性建議。

例如,如果您想要對 FirstNameLastName 欄位的串連執行等式搜尋,您可以建立下列其中一個虛擬欄位。

  • 虛擬NameTag欄位,從FirstName欄位的第一個字母開始建構,後面接著 LastName 欄位,全部小寫。此虛擬欄位可讓您查詢 NameTag=mjones

  • 虛擬LastFirst欄位,由 LastName 欄位建構,後面接著 FirstName 欄位。此虛擬欄位可讓您查詢 LastFirst=JonesMary

或者,如果您想要對加密欄位的特定區段執行相等性搜尋,請建立虛擬欄位來識別您要查詢的區段。

例如,如果您想要使用 IP 地址的前三個區段來查詢加密IPAddress欄位,請建立下列虛擬欄位。

  • 虛擬IPSegment欄位,由 建構Segments(‘.’, 0, 3)。此虛擬欄位可讓您查詢 IPSegment=192.0.2。查詢會傳回IPAddress值開頭為 "192.0.2" 的所有記錄。

虛擬欄位必須是唯一的。兩個虛擬欄位無法從完全相同的來源欄位建構。

如需設定虛擬欄位和使用它們的信標的說明,請參閱建立虛擬欄位

複合信標

複合信標會建立索引,以改善查詢效能,並可讓您執行更複雜的資料庫操作。您可以使用複合信標來結合文字純文字字串和標準信標,對加密的記錄執行複雜的查詢,例如從單一索引查詢兩種不同的記錄類型,或使用排序索引鍵查詢欄位組合。如需更多複合信標解決方案範例,請參閱選擇信標類型

複合信標可以從標準信標或標準信標和已簽章欄位的組合建構。它們是從組件清單建構而成。所有複合信標都應包含加密部分清單,以識別信標中包含ENCRYPT_AND_SIGN的欄位。每個ENCRYPT_AND_SIGN欄位都必須由標準信標識別。更複雜的複合信標也可能包含識別信標中包含的純文字SIGN_ONLYSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT欄位的已簽章部分清單,以及識別複合信標組合欄位的所有可能方式的建構函數部分清單。

注意

AWS Database Encryption SDK 也支援簽署的信標,這些信標可以完全從純文字SIGN_ONLYSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT欄位設定。已簽章的信標是一種複合信標,可對已簽章但未加密的欄位編製索引並執行複雜的查詢。如需詳細資訊,請參閱建立簽章的信標

如需設定複合信標的說明,請參閱設定複合信標

您設定複合信標的方式決定其可執行的查詢類型。例如,您可以將一些加密和簽章的組件設為選用,以便在查詢中提供更多彈性。如需複合信標可執行之查詢類型的詳細資訊,請參閱 查詢信標