

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

# 選擇信標長度
<a name="choosing-beacon-length"></a>


****  

|  | 
| --- |
| 我們的用戶端加密程式庫已重新命名為 AWS 資料庫加密 SDK。此開發人員指南仍提供有關 [DynamoDB 加密用戶端](legacy-dynamodb-encryption-client.md)的資訊。 | 

當您將新值寫入設定為可搜尋加密的加密欄位時， AWS 資料庫加密 SDK 會透過純文字值計算 HMAC。此 HMAC 輸出是該欄位純文字值的一對一 (1：1) 比對。HMAC 輸出會截斷，讓多個不同的純文字值對應至相同的截斷 HMAC 標籤。這些碰撞或*誤報*會限制未經授權的使用者識別純文字值辨別資訊的能力。

為每個信標產生的偽陽性平均數量取決於截斷後剩餘的信標長度。您只需要在設定標準信標時定義信標長度。複合信標使用其建構之標準信標的信標長度。

信標不會變更 欄位的加密狀態。不過，當您使用信標時，查詢的效率與資料分佈的公開資訊量之間存在固有權衡。

可搜尋加密的目標是使用信標對加密資料執行查詢，以降低與用戶端加密資料庫相關的效能成本。信標會與其計算來源的加密欄位一起存放。這表示他們可以顯示有關資料集分佈的辨別資訊。在極端情況下，未經授權的使用者可能可以分析發佈的相關資訊，並使用它來識別欄位的純文字值。選擇正確的信標長度有助於降低這些風險，並維護分發的機密性。

檢閱您的威脅模型，以判斷您需要的安全層級。例如，擁有資料庫存取權但不應該存取純文字資料的人員越多，您可能想要保護資料集分佈的機密性就越多。為了提高機密性，信標需要產生更多誤報。提高機密性會導致查詢效能降低。

**安全性與效能**
+ **過長**的信標長度會產生太少的誤報，並可能顯示有關資料集分佈的辨別資訊。
+ **過短**的信標長度會產生太多誤報，並提高查詢的效能成本，因為它需要更廣泛的資料庫掃描。

判斷解決方案的適當信標長度時，您必須找到可充分保留資料安全性的長度，而不會影響查詢效能的絕對必要性。信標保留的安全數量取決於資料集的[分佈](searchable-encryption.md#searchable-encryption-distribution)，以及信標建構來源欄位的[相互關聯](searchable-encryption.md#searchable-encryption-correlated-values)性。下列主題假設您的信標是統一分佈的，且不包含相互關聯的資料。

**Topics**
+ [計算信標長度](#calculate-beacon-length)
+ [範例](#beacon-length-example)

## 計算信標長度
<a name="calculate-beacon-length"></a>

信標長度以*位元*定義，是指截斷後保留的 HMAC 標籤位元數。建議的信標長度取決於資料集分佈、相關值的存在，以及您的特定安全性和效能需求。如果您的資料集是統一分佈的，您可以使用下列方程式和程序來協助識別實作的最佳信標長度。這些方程式只會估計信標會產生的平均誤報次數，並不保證資料集中的每個唯一值都會產生特定數量的誤報。

**注意**  
這些方程式的有效性取決於資料集的分佈。如果您的資料集未統一分佈，請參閱 [信標是否適合我的資料集？](searchable-encryption.md#are-beacons-right-for-me)。  
一般而言，資料集越來自統一分佈，縮短信標長度所需的時間就越多。

1. 

   **估算人口**

   人口是標準信標建構來源欄位中的預期唯一值數量，不是存放在欄位中的預期值總數。例如，請考慮可識別員工會議位置的加密`Room`欄位。`Room` 欄位預計會儲存 100，000 個總值，但只有 50 個不同的會議室可供員工預留用於會議。這表示人口為 50，因為只有 50 個可能的唯一值可以存放在 `Room` 欄位中。
**注意**  
如果您的標準信標是從[虛擬欄位](beacons.md#virtual-field)建構的，則用於計算信標長度的人口是虛擬欄位建立的唯一組合數量。

   估算人口時，請務必考慮資料集的預計增長。使用信標撰寫新記錄之後，您就無法更新信標長度。檢閱您的威脅模型和任何現有的資料庫解決方案，以建立您預期此欄位在未來五年內存放的唯一值數量的預估值。

   您的人口不需要精確。首先，識別目前資料庫中的唯一值數目，或預估您預期在第一年存放的唯一值數目。接著，使用下列問題來協助您判斷未來五年內唯一值的預計增長。
   + 您是否預期唯一值會乘以 10？ 
   + 您是否預期唯一值會乘以 100？ 
   + 您是否預期唯一值會乘以 1000？ 

   50，000 和 60，000 個唯一值之間的差異並不顯著，它們都會產生相同的建議信標長度。不過，50，000 和 500，000 唯一值之間的差異將大幅影響建議的信標長度。

   請考慮檢閱常見資料類型頻率的公有資料，例如郵遞區號或姓氏。例如，美國有 41，707 個郵遞區號。您使用的人口應與您自己的資料庫成比例。如果資料庫中`ZIPCode`的欄位包含來自整個美國的資料，則可以將人口定義為 41，707，即使該`ZIPCode`欄位*目前*沒有 41，707 個唯一值。如果資料庫中`ZIPCode`的欄位只包含來自單一狀態的資料，而且只包含來自單一狀態的資料，則您可以將人口定義為該狀態的郵遞區號總數，而不是 41，704。

1. **計算預期碰撞次數的建議範圍**

   若要判斷指定欄位的適當信標長度，您必須先識別預期碰撞數量的適當範圍。預期的碰撞數量代表映射到特定 HMAC 標籤的唯一純文字值的平均預期數量。一個唯一純文字值的預期誤報數量小於預期的碰撞數量。

   我們建議預期的碰撞數量大於或等於兩個，且小於人口的平方根。下列方程式只有在您的人口有 16 個或更多唯一值時才有效。

   ```
   2 ≤ number of collisions < √(Population)
   ```

   如果碰撞次數少於兩個，則信標會產生太少的誤報。我們建議使用兩個 作為預期碰撞的最小數量，因為它表示平均而言，欄位中的每個唯一值都會映射到另一個唯一值來產生至少一個偽陽性。

1. **計算信標長度的建議範圍**

   識別預期碰撞的最小和最大數量之後，請使用下列方程式來識別適當的信標長度範圍。

   ```
   number of collisions = Population * 2-(beacon length)
   ```

   首先，解決預期碰撞數量等於兩個 （預期碰撞的最低建議數量） 的**信標長度**。

   ```
   2 = Population * 2-(beacon length)
   ```

   然後，解決預期碰撞數量等於人口平方根的**信標長度** （建議的最大預期碰撞數量）。

   ```
   √(Population) = Population * 2-(beacon length)
   ```

   我們建議將此方程式產生的輸出四捨五入至較短的信標長度。例如，如果方程式產生 15.6 的信標長度，我們建議將該值四捨五入到 15 位元，而不是四捨五入到 16 位元。

1. **選擇信標長度**

   這些方程式只會識別您欄位的建議信標長度範圍。我們建議您盡可能使用較短的信標長度來維護資料集的安全性。不過，您實際使用的信標長度取決於您的威脅模型。在檢閱威脅模型以判斷欄位的最佳信標長度時，請考慮您的效能需求。

   使用較短的信標長度會降低查詢效能，而使用較長的信標長度則會降低安全性。一般而言，如果您的資料集[分佈](searchable-encryption.md#searchable-encryption-distribution)不均勻，或者如果您從[關聯](searchable-encryption.md#searchable-encryption-correlated-values)欄位建構不同的信標，則需要使用較短的信標長度，將資料集分佈的相關資訊量降至最低。

   如果您檢閱威脅模型，並決定任何顯示有關欄位分佈的辨別資訊不會對您的整體安全性造成威脅，您可以選擇使用比您計算的建議範圍更長的信標長度。例如，如果您將欄位的信標長度建議範圍計算為 9-16 位元，您可以選擇使用 24 位元的信標長度，以避免任何效能損失。

   請謹慎選擇您的信標長度。使用信標撰寫新記錄之後，您就無法更新信標長度。

## 範例
<a name="beacon-length-example"></a>

考慮在[密碼編譯動作](concepts.md#crypt-actions)`ENCRYPT_AND_SIGN`中將 `unit` 欄位標記為 的資料庫。若要設定 `unit` 欄位的標準信標，我們需要判斷該`unit`欄位的預期誤報數和信標長度。

1. 估計人口

   檢閱我們的威脅模型和目前的資料庫解決方案後，我們預期 `unit` 欄位最終會有 100，000 個唯一值。

   這表示**人口 = 100，000**。

1. 計算預期碰撞次數的建議範圍。

   在此範例中，預期的碰撞數量應介於 2 到 316 之間。

   ```
   2 ≤ number of collisions < √(Population)
   ```

   1. 

      ```
      2 ≤ number of collisions < √(100,000)
      ```

   1. 

      ```
      2 ≤ number of collisions < 316
      ```

1. 計算信標長度的建議範圍。

   在此範例中，信標長度應介於 9-16 位元之間。

   ```
   number of collisions = Population * 2-(beacon length)
   ```

   1. 計算信標長度，其中預期的碰撞數量等於**步驟 2 **中識別的最小值。

      ```
      2 = 100,000 * 2-(beacon length)
      ```

      信標長度 = 15.6 或 15 位元

   1. 計算信標長度，其中預期的碰撞數量等於**步驟 2 **中識別的最大值。

      ```
      316 = 100,000 * 2-(beacon length)
      ```

      信標長度 = 8.3 或 8 位元

1. 判斷適合您安全和效能需求的信標長度。

   對於低於 15 的每個位元，效能成本和安全性會加倍。
   + 16 位元
     + 平均而言，每個唯一值都會對應至其他 1.5 個單位。
     + 安全性：具有相同截斷 HMAC 標籤的兩個記錄有 66% 可能有相同的純文字值。
     + 效能：查詢會為您實際請求的每 10 筆記錄擷取 15 筆記錄。
   + 14 位元
     + 平均而言，每個唯一值都會對應至 6.1 個其他單位。
     + 安全性：具有相同截斷 HMAC 標籤的兩個記錄有 33% 可能有相同的純文字值。
     + 效能：查詢會為您實際請求的每 10 筆記錄擷取 30 筆記錄。