哪些欄位已加密並簽署? - AWS 資料庫加密 SDK

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

哪些欄位已加密並簽署?

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

適用於 DynamoDB 的 AWS Database Encryption SDK 是用戶端加密程式庫,專為 Amazon DynamoDB 應用程式而設計。Amazon DynamoDB 將資料存放在資料表中,這是項目的集合。每個項目都是屬性的集合。每個屬性都有名稱和數值。適用於 DynamoDB 的 AWS Database Encryption SDK 會加密屬性的值。接著,它會透過屬性計算簽章。您可以指定哪些屬性值要加密,以及哪些屬性值要包含在簽章中。

加密可保護屬性值的機密性。簽署可提供所有已簽署屬性的完整性及其彼此的關係,並可提供驗證。它可讓您偵測對整體項目的未授權變更 (包括新增或刪除屬性),或是替換已加密的值。

在加密項目中,部分資料會保留純文字,包括資料表名稱、所有屬性名稱、未加密的屬性值、主索引鍵 (分割區索引鍵和排序索引鍵) 屬性的名稱和值,以及屬性類型。請勿在這些欄位中存放敏感性資訊。

如需 DynamoDB AWS 資料庫加密開發套件運作方式的詳細資訊,請參閱AWS 資料庫加密 SDK 的運作方式

注意

DynamoDB 專用 AWS 資料庫加密 SDK 主題中所有提及的屬性動作都是指密碼編譯動作

加密屬性值

適用於 DynamoDB 的 AWS Database Encryption SDK 會加密您指定屬性的值 (但不會加密屬性名稱或類型)。若要決定加密的是哪些屬性值,請使用屬性動作

例如,這個項目包括 exampletest 屬性。

'example': 'data', 'test': 'test-value', ...

如果您將 example 屬性加密,但不加密 test 屬性,結果如下所示。已加密的 example 屬性值是二進位資料,而不是字串。

'example': Binary(b"'b\x933\x9a+s\xf1\xd6a\xc5\xd5\x1aZ\xed\xd6\xce\xe9X\xf0T\xcb\x9fY\x9f\xf3\xc9C\x83\r\xbb\\"), 'test': 'test-value' ...

每個項目的主要索引鍵屬性 - 分割區索引鍵和排序索引鍵 - 必須保持純文字,因為 DynamoDB 會使用它們在資料表中尋找項目。這些屬性應加以簽署,但不要加密。

適用於 DynamoDB 的 AWS Database Encryption SDK 會為您識別主要金鑰屬性,並確保其值已簽章,但不會加密。而且,如果您找出您的主要索引鍵,然後試著將它加密,則用戶端會擲出例外狀況。

用戶端會將材料描述存放在新增至項目的新屬性 (aws_dbe_head) 中。材料描述說明項目的加密和簽署方式。用戶端會使用此資訊來驗證並解密項目。存放材料描述的欄位不會加密。

簽署項目

加密指定的屬性值後,DynamoDB 的 AWS Database Encryption SDK 會計算雜湊型訊息驗證碼 (HMACs) 和數位簽章,而不是材料描述、加密內容屬性動作SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT中標記為 ENCRYPT_AND_SIGNSIGN_ONLY或 的每個欄位的正式化。ECDSA 簽章預設為啟用,但並非必要。用戶端會將 HMACs 和簽章存放在新增至項目的新屬性 (aws_dbe_foot) 中。