

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

# C3R 加密用戶端的準則
<a name="crypto-computing-guidelines"></a>

C3R 加密用戶端是一種工具，可讓組織將敏感資料結合在一起，從資料分析中衍生新的洞見。工具以密碼編譯方式限制任何一方和 AWS 程序中可學習的內容。雖然這至關重要，但以密碼編譯方式保護資料的程序可能會在運算和儲存資源方面增加大量額外負荷。因此，請務必了解使用每個設定的權衡，以及如何最佳化設定，同時仍維持所需的密碼編譯保證。本主題著重於 C3R 加密用戶端和結構描述中不同設定的效能影響。

所有 C3R 加密用戶端加密設定都提供不同的密碼編譯保證。協作層級設定預設為最安全。在建立協同合作時啟用其他功能會降低隱私權保證，允許在加密文字上執行頻率分析等活動。如需如何使用這些設定及其影響的詳細資訊，請參閱 [的加密運算 Clean Rooms](crypto-computing.md)。

**Topics**
+ [資料欄類型的效能影響](#performance-implications)
+ [對加密文字大小的非預期增加進行故障診斷](#troubleshooting-ciphertext-size)

## 資料欄類型的效能影響
<a name="performance-implications"></a>

C3R 使用三種資料欄類型：cleartext、 fingerprint和 sealed。每個資料欄類型都提供不同的密碼編譯保證，並有不同的預期用途。在下列各節中，會討論資料欄類型的效能影響，以及每個設定的效能影響。

**Topics**
+ [Cleartext 資料欄](#cleartext-columns)
+ [Fingerprint 資料欄](#guidelines-fingerprint-columns)
+ [Sealed 資料欄](#guidelines-sealed-columns)

### Cleartext 資料欄
<a name="cleartext-columns"></a>

Cleartext 資料欄不會從原始格式變更，也不會以任何方式以密碼編譯方式處理。無法設定此資料欄類型，也不會影響儲存或運算效能。

### Fingerprint 資料欄
<a name="guidelines-fingerprint-columns"></a>

Fingerprint 資料欄旨在用於跨多個資料表聯結資料。為此，產生的加密文字大小必須一律相同。不過，這些資料欄會受到協同合作層級設定的影響。 資料Fingerprint欄可能會對輸出檔案大小產生不同程度的影響，取決於輸入中cleartext包含的 。

**Topics**
+ [fingerprint 資料欄的基本額外負荷](#fingerprint-columns-base-overhead)
+ [fingerprint 資料欄的協同作業設定](#fingerprint-columns-collab-settings)
+ [資料fingerprint欄的範例資料](#collab-set-sample-data)
+ [對fingerprint資料欄進行故障診斷](#fingerprint-columns-troubleshooting)

#### fingerprint 資料欄的基本額外負荷
<a name="fingerprint-columns-base-overhead"></a>

資料fingerprint欄有基本額外負荷。此額外負荷是固定的，並取代cleartext位元組的大小。

資料fingerprint欄中的資料會透過雜湊型訊息驗證碼 (HMAC) 函數以密碼編譯方式處理，將資料轉換為 32 位元組訊息驗證碼 (MAC)。然後，這些資料會透過 base64 編碼器處理，將大約 33% 新增至位元組大小。它預先附加 8 位元組 C3R 指定，以指定資料所屬的資料欄類型，以及產生它的用戶端版本。最終結果為 52 個位元組。然後，此結果會乘以資料列計數，以取得總基本額外負荷 （如果 `preserveNulls` 設為 true，請使用非`null` 值的總數）。

下圖顯示 如何 * `BASE_OVERHEAD = ` ** `C3R_DESIGNATION + ` ** `(MAC * 1.33)` *

![\[資料fingerprint欄的 52 位元組基本額外負荷。\]](http://docs.aws.amazon.com/zh_tw/clean-rooms/latest/userguide/images/base-overhead-fingerprint.PNG)


fingerprint 欄中的輸出加密文字一律為 52 個位元組。如果輸入cleartext資料平均超過 52 個位元組 （例如完整的街道地址），這可能會大幅減少儲存空間。如果輸入cleartext資料平均小於 52 個位元組 （例如，客戶年齡），這可能會大幅增加儲存空間。

#### fingerprint 資料欄的協同作業設定
<a name="fingerprint-columns-collab-settings"></a>

##### `preserveNulls` 設定
<a name="collab-set-preserve-nulls"></a>

當協同合作層級設定為 `preserveNulls` `false`（預設） 時，每個`null`值都會以唯一的隨機 32 個位元組取代，並如同不是 一樣進行處理`null`。結果是每個`null`值現在都是 52 個位元組。相較於此設定為 `true`且`null`值以 傳遞時，這可能會為包含非常稀疏資料的資料表新增重要的儲存需求`null`。

如果您不需要此設定的隱私權保證，並偏好在資料集內保留`null`值，請在建立協同合作時啟用`preserveNulls`設定。建立協同合作之後，就無法變更`preserveNulls`設定。

#### 資料fingerprint欄的範例資料
<a name="collab-set-sample-data"></a>

以下是資料fingerprint欄的輸入和輸出資料集範例，其中包含要重現的設定。其他協作層級設定，例如 `allowCleartext`和 `allowDuplicates`不會影響結果，`false`而且如果嘗試在本機重現，則可以設定為 `true`或 。

**共用秘密範例**： `wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY`

**協作 ID 範例**： `a1b2c3d4-5678-90ab-cdef-EXAMPLE11111`

**allowJoinsOnColumnsWithDifferentNames**：`True`此設定不會影響效能或儲存需求。不過，此設定會在重新產生下表中顯示的值時，使資料欄名稱選擇無關。


**範例 1**  

|  |  | 
| --- |--- |
| 輸入 | null | 
| preserveNulls | TRUE | 
| Output | null | 
| 確定性 | Yes | 
| 輸入位元組 | 0 | 
| 輸出位元組 | 0 | 


**範例 2**  

|  |  | 
| --- |--- |
| 輸入 | null | 
| preserveNulls | FALSE | 
| Output | 01:hmac:3lkFjthvV3IUu6mMvFc1a\$1XAHwgw/ElmOq4p3Yg25kk= | 
| 確定性 | No | 
| 輸入位元組 | 0 | 
| 輸出位元組 | 52 | 


**範例 3**  

|  |  | 
| --- |--- |
| 輸入 | empty string | 
| preserveNulls | - | 
| Output | 01:hmac:oKTgi3Gba\$1eUb3JteSz2EMgXUkF1WgM77UP0Ydw5kPQ= | 
| 確定性 | Yes | 
| 輸入位元組 | 0 | 
| 輸出位元組 | 52 | 


**範例 4**  

|  |  | 
| --- |--- |
| 輸入 | abcdefghijklmnopqrstuvwxyz | 
| preserveNulls | - | 
| Output | 01:hmac:kU/IqwG7FMmzzshr0B9scomE0UJUEE7j9keTctplGww= | 
| 確定性 | Yes | 
| 輸入位元組 | 26 | 
| 輸出位元組 | 52 | 


**範例 5**  

|  |  | 
| --- |--- |
| 輸入 | abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 | 
| preserveNulls | - | 
| Output | 01:hmac:ks3htnQbw2vdhCRFF6JNzW5LMndJaHG57uvE26mBtSs= | 
| 確定性 | Yes | 
| 輸入位元組 | 62 | 
| 輸出位元組 | 52 | 

#### 對fingerprint資料欄進行故障診斷
<a name="fingerprint-columns-troubleshooting"></a>

**為什麼我fingerprint欄中的加密文字比cleartext進去的 大小大上數倍？**

資料fingerprint欄中的加密文字長度一律為 52 個位元組。如果您的輸入資料很小 （例如，客戶的年齡），其大小將會大幅增加。如果`preserveNulls`設定設為 ，也可能發生這種情況`false`。

**為什麼我fingerprint欄中的加密文字比cleartext進去的 大小小數倍？**

資料fingerprint欄中的加密文字長度一律為 52 個位元組。如果您的輸入資料很大 （例如，客戶的完整街道地址），其大小將明顯減少。

**如何知道是否需要 提供的密碼編譯保證`preserveNulls`？**

不幸的是，答案是它取決於 。至少[密碼編譯運算參數](crypto-computing-parameters.md)應檢閱 ，了解`preserveNulls`設定如何保護您的資料。不過，我們建議您參考組織的資料處理需求，以及適用於個別協同合作的任何合約。

**為什麼我必須產生 base64 的額外負荷？**

若要允許 與 CSV 等表格式檔案格式相容，需要 base64 編碼。雖然某些 檔案格式Parquet可能支援資料的二進位表示法，但協同合作中的所有參與者都以相同的方式代表資料，以確保適當的查詢結果。

### Sealed 資料欄
<a name="guidelines-sealed-columns"></a>

Sealed 欄旨在用於在協同合作的成員之間傳輸資料。這些資料欄中的加密文字是非確定性的，並根據資料欄的設定方式對效能和儲存體產生重大影響。這些欄可以個別設定，通常對 C3R 加密用戶端的效能和產生的輸出檔案大小有最大的影響。

**Topics**
+ [sealed 資料欄的基本額外負荷](#sealed-columns-base-overhead)
+ [sealed 資料欄的協同作業設定](#sealed-columns-collab-settings)
+ [結構描述設定sealed欄：填補類型](#sealed-collab-pad-type)
+ [資料sealed欄的範例資料](#sealed-collab-sample-data)
+ [對sealed資料欄進行故障診斷](#troubleshooting-sealed-columns)

#### sealed 資料欄的基本額外負荷
<a name="sealed-columns-base-overhead"></a>

資料sealed欄有基本額外負荷。此額外負荷是固定的，除了 cleartext和填補 （如果有的話） 位元組的大小之外。

在任何加密之前，資料sealed欄中的資料都會預先附加 1 位元組字元，以指定包含的資料類型。如果選取填補，則資料會填入並附加 2 個位元組，說明填補大小。新增這些位元組之後，會使用 AES-GCM 以密碼編譯方式處理資料，並以 IV(12 個位元組）、 nonce (32 個位元組） 和 Auth Tag(16 個位元組） 存放。然後，這些資料會透過 base64 編碼器處理，將大約 33% 新增至位元組大小。資料會加上 7 位元組 C3R 指定，以指定資料所屬的欄類型，以及用於產生它的用戶端版本。最終基本額外負荷為 91 個位元組。然後，此結果可以乘以資料列計數，以取得總基本額外負荷 （如果 `preserveNulls` 設為 true，請使用非空值總數）。

下圖顯示 如何 * `BASE_OVERHEAD = C3R_DESIGNATION + ((NONCE + IV + DATA_TYPE + PAD_SIZE + AUTH_TAG) * 1.33)` *

![\[資料sealed欄的 91 位元組基本額外負荷。\]](http://docs.aws.amazon.com/zh_tw/clean-rooms/latest/userguide/images/base-overhead-sealed.PNG)


#### sealed 資料欄的協同作業設定
<a name="sealed-columns-collab-settings"></a>

##### `preserveNulls` 設定
<a name="sealed-collab-set-preserve-nulls"></a>

當協同合作層級設定為 `preserveNulls` `false`（預設） 時，每個`null`值都是唯一的隨機 32 個位元組，並如同不是 一樣進行處理`null`。結果是每個`null`值現在都是 91 個位元組 （如果有填充則更多）。相較於此設定為 `true`且`null`值以 傳遞時，這可能會為包含非常稀疏資料的資料表新增重要的儲存需求`null`。

如果您不需要此設定的隱私權保證，並偏好在資料集內保留`null`值，請在建立協同合作時啟用`preserveNulls`設定。建立協同合作之後，就無法變更`preserveNulls`設定。

#### 結構描述設定sealed欄：填補類型
<a name="sealed-collab-pad-type"></a>

**Topics**
+ [的填補類型 `none`](#pad-type-none)
+ [的填補類型 `fixed`](#pad-type-fixed)
+ [的填補類型 `max`](#pad-type-max)

##### 的填補類型 `none`
<a name="pad-type-none"></a>

選取 的護墊類型`none`不會將任何填補新增至 ，cleartext也不會為先前所述的基本額外額外負荷新增額外負荷。沒有填補會產生最節省空間的輸出大小。不過，它不提供與 `fixed`和 `max` 填補類型相同的隱私權保證。這是因為基礎 的大小與加密文字的大小cleartext不同。

##### 的填補類型 `fixed`
<a name="pad-type-fixed"></a>

選取 的鍵盤類型`fixed`是一種隱私權保留措施，可隱藏資料欄中包含的資料長度。這是在加密`pad_length`之前，將所有 填補cleartext到提供的 。超過該大小的任何資料都會導致 C3R 加密用戶端失敗。

由於填補會在加密cleartext之前新增至 ，AES-GCM 具有 1 對 1 映射cleartext至加密文字位元組。base64 編碼將增加 33%。填補的額外儲存體額外負荷的計算方式是將 的平均長度cleartext從 的值減去`pad_length`，再乘以 1.33。結果是每筆記錄填補的平均額外負荷。然後，此結果可以乘以資料列數，以取得總填補開銷 （如果 `preserveNulls` 設定為 ，請使用非`null` 值的總數`true`)。

 `PADDING_OVERHEAD = (PAD_LENGTH - AVG_CLEARTEXT_LENGTH) * 1.33 * ROW_COUNT`

建議您選取包含資料欄中最大值`pad_length`的最小值。例如，如果最大值是 50 個位元組，則 50 `pad_length`的 就已足夠。大於 的值只會增加額外的儲存體額外負荷。

固定填補不會增加任何顯著的運算額外負荷。

##### 的填補類型 `max`
<a name="pad-type-max"></a>

選取 的鍵盤類型`max`是一種隱私權保留措施，可隱藏資料欄中包含的資料長度。方法是將所有 填入資料欄中cleartext的最大值，加上其他 ，`pad_length`再加密。一般而言，`max`填補提供與單一資料集`fixed`填補相同的保證，同時允許 不知道欄中的最大cleartext值。不過，`max`填補可能無法提供與`fixed`填補跨更新相同的隱私權保證，因為個別資料集中的最大值可能不同。

建議您在使用`max`填補時選取額外的 `pad_length` 0。此長度會將所有值調整為與資料欄中最大值相同的大小。大於 的值只會增加額外的儲存體額外負荷。

如果指定資料欄已知cleartext最大值，建議您改用 `fixed` 鍵盤類型。使用`fixed`填補可在更新後的資料集之間建立一致性。使用`max`填補會導致每個資料子集填充到子集中最大的值。

#### 資料sealed欄的範例資料
<a name="sealed-collab-sample-data"></a>

以下是資料sealed欄的輸入和輸出資料集範例，其中包含要重現的設定。`allowCleartext`、 `allowJoinsOnColumnsWithDifferentNames`和 等其他協同合作層級設定`allowDuplicates`不會影響結果，`false`而且如果嘗試在本機重現，可以設定為 `true`或 。雖然這些是要重現的基本設定，但資料sealed欄是非確定性的，且值每次都會變更。目標是顯示 中的位元組與傳出的位元組比較。範例`pad_length`值是刻意選擇的。它們顯示`fixed`填補會產生與建議的最小`pad_length`設定`max`或需要額外填補時相同的值。

**共用秘密範例**： `wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY`

**協作 ID 範例**： `a1b2c3d4-5678-90ab-cdef-EXAMPLE11111`

**Topics**
+ [的填補類型 `none`](#sealed-pad-type-none)
+ [的填補類型 `fixed`（範例 1)](#sealed-pad-type-fixed)
+ [的填補類型 `fixed`（範例 2)](#sealed-pad-type-fixed-2)
+ [的填補類型 `max`（範例 1)](#sealed-pad-type-max)
+ [的填補類型 `max`（範例 2)](#sealed-pad-type-max-2)

##### 的填補類型 `none`
<a name="sealed-pad-type-none"></a>


**範例 1**  

|  |  | 
| --- |--- |
| 輸入 | null | 
| preserveNulls | TRUE | 
| Output | null | 
| 確定性 | Yes | 
| 輸入位元組 | 0 | 
| 輸出位元組 | 0 | 


**範例 2**  

|  |  | 
| --- |--- |
| 輸入 | null | 
| preserveNulls | FALSE | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfssGSPbNIJfG3iXmu6cbCUrizuV | 
| 確定性 | No | 
| 輸入位元組 | 0 | 
| 輸出位元組 | 91 | 


**範例 3**  

|  |  | 
| --- |--- |
| 輸入 | empty string | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfstGSPEM6qR8DWC2PB2GMlX41YK | 
| 確定性 | No | 
| 輸入位元組 | 0 | 
| 輸出位元組 | 91 | 


**範例 4**  

|  |  | 
| --- |--- |
| 輸入 | abcdefghijklmnopqrstuvwxyz | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfsteEE1GKEPiRzyh0h7t6OmWMLTWCvO2ckr6pkx9sGL5VLDQeHzh6DmPpyWNuI= | 
| 確定性 | No | 
| 輸入位元組 | 26 | 
| 輸出位元組 | 127 | 


**範例 5**  

|  |  | 
| --- |--- |
| 輸入 | abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfsteEE1GKEPiRzyh0h7t6OmWMLTWCvO2ckr6plwtH/8tRFnn2rF91bcB9G4\$1n8GiRfJNmqdP4/QOQ3cXb/pbvPcnnohrHIGSX54ua\$11/JfcVjc= | 
| 確定性 | No | 
| 輸入位元組 | 62 | 
| 輸出位元組 | 175 | 

##### 的填補類型 `fixed`（範例 1)
<a name="sealed-pad-type-fixed"></a>

在此範例中， `pad_length`是 62，最大輸入是 62 個位元組。


**範例 1**  

|  |  | 
| --- |--- |
| 輸入 | null | 
| preserveNulls | TRUE | 
| Output | null | 
| 確定性 | Yes | 
| 輸入位元組 | 0 | 
| 輸出位元組 | 0 | 


**範例 2**  

|  |  | 
| --- |--- |
| 輸入 | null | 
| preserveNulls | FALSE | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfssGSNWfMRp7nSb7SMX2s3JKLOhK1\$17r75Tk\$1Mx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcoNpATs0GzbnLkor4L\$1/aSuA= | 
| 確定性 | No | 
| 輸入位元組 | 0 | 
| 輸出位元組 | 175 | 


**範例 3**  

|  |  | 
| --- |--- |
| 輸入 | empty string | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfstGSNWfMRp7nSb7SMX2s3JKLOhK1\$17r75Tk\$1Mx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcoLB53l07VZpA6OwkuXu29CA= | 
| 確定性 | No | 
| 輸入位元組 | 0 | 
| 輸出位元組 | 175 | 


**範例 4**  

|  |  | 
| --- |--- |
| 輸入 | abcdefghijklmnopqrstuvwxyz | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfsteEE1GKEPiRzyh0h7t6OmWMLTWCvO2ckr6pkx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcutBAcO\$1Mb9tuU2KIHH31AWg= | 
| 確定性 | No | 
| 輸入位元組 | 26 | 
| 輸出位元組 | 175 | 


**範例 5**  

|  |  | 
| --- |--- |
| 輸入 | abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfsteEE1GKEPiRzyh0h7t6OmWMLTWCvO2ckr6plwtH/8tRFnn2rF91bcB9G4\$1n8GiRfJNmqdP4/QOQ3cXb/pbvPcnnohrHIGSX54ua\$11/JfcVjc= | 
| 確定性 | No | 
| 輸入位元組 | 62 | 
| 輸出位元組 | 175 | 

##### 的填補類型 `fixed`（範例 2)
<a name="sealed-pad-type-fixed-2"></a>

在此範例中， `pad_length`是 162，最大輸入是 62 個位元組。


**範例 1**  

|  |  | 
| --- |--- |
| 輸入 | null | 
| preserveNulls | TRUE | 
| Output | null | 
| 確定性 | Yes | 
| 輸入位元組 | 0 | 
| 輸出位元組 | 0 | 


**範例 2**  

|  |  | 
| --- |--- |
| 輸入 | null | 
| preserveNulls | FALSE | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfssGSNWfMRp7nSb7SMX2s3JKLOhK1\$17r75Tk\$1Mx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcnkB0xbLWD7zNdAqQGR0rXoSESdW0I0vpNoGcBfv4cJbG0A3h1DvtkSSVc2B80OOGppzdDqhrUVN5wFNyn8vgfPMqDaeJk5bn\$18o4WtG/ClipNcjDXvXVtK4vfCohcCA6uwrmwv/xAySX\$1xcntotL703aBTBb | 
| 確定性 | No | 
| 輸入位元組 | 0 | 
| 輸出位元組 | 307 | 


**範例 3**  

|  |  | 
| --- |--- |
| 輸入 | empty string | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfstGSNWfMRp7nSb7SMX2s3JKLOhK1\$17r75Tk\$1Mx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcnkB0xbLWD7zNdAqQGR0rXoSESdW0I0vpNoGcBfv4cJbG0A3h1DvtkSSVc2B80OOGppzdDqhrUVN5wFNyn8vgfPMqDaeJk5bn\$18o4WtG/ClipNcjDXvXVtK4vfCohcCA6uwrmwv84lVaT9Yd\$16oQx65/\$1gdVT | 
| 確定性 | No | 
| 輸入位元組 | 0 | 
| 輸出位元組 | 307 | 


**範例 4**  

|  |  | 
| --- |--- |
| 輸入 | abcdefghijklmnopqrstuvwxyz | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfsteEE1GKEPiRzyh0h7t6OmWMLTWCvO2ckr6pkx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcnkB0xbLWD7zNdAqQGR0rXoSESdW0I0vpNoGcBfv4cJbG0A3h1DvtkSSVc2B80OOGppzdDqhrUVN5wFNyn8vgfPMqDaeJk5bn\$18o4WtG/ClipNcjDXvXVtK4vfCohcCA6uwrmwtX5Hnl\$1WyfO6ks3QMaRDGSf | 
| 確定性 | No | 
| 輸入位元組 | 26 | 
| 輸出位元組 | 307 | 


**範例 5**  

|  |  | 
| --- |--- |
| 輸入 | abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfsteEE1GKEPiRzyh0h7t6OmWMLTWCvO2ckr6plwtH/8tRFnn2rF91bcB9G4\$1n8GiRfJNmqdP4/QOQ3cXb/pbvPcnkB0xbLWD7zNdAqQGR0rXoSESdW0I0vpNoGcBfv4cJbG0A3h1DvtkSSVc2B80OOGppzdDqhrUVN5wFNyn8vgfPMqDaeJk5bn\$18o4WtG/ClipNcjDXvXVtK4vfCohcCA6uwrmwjkJXQZOgPdeFX9Yr/8alV5i | 
| 確定性 | No | 
| 輸入位元組 | 62 | 
| 輸出位元組 | 307 | 

##### 的填補類型 `max`（範例 1)
<a name="sealed-pad-type-max"></a>

在此範例中， `pad_length`為 0，最大輸入為 62 個位元組。


**範例 1**  

|  |  | 
| --- |--- |
| 輸入 | null | 
| preserveNulls | TRUE | 
| Output | null | 
| 確定性 | Yes | 
| 輸入位元組 | 0 | 
| 輸出位元組 | 0 | 


**範例 2**  

|  |  | 
| --- |--- |
| 輸入 | null | 
| preserveNulls | FALSE | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfssGSNWfMRp7nSb7SMX2s3JKLOhK1\$17r75Tk\$1Mx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcoNpATs0GzbnLkor4L\$1/aSuA= | 
| 確定性 | No | 
| 輸入位元組 | 0 | 
| 輸出位元組 | 175 | 


**範例 3**  

|  |  | 
| --- |--- |
| 輸入 | empty string | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfstGSNWfMRp7nSb7SMX2s3JKLOhK1\$17r75Tk\$1Mx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcoLB53l07VZpA6OwkuXu29CA= | 
| 確定性 | No | 
| 輸入位元組 | 0 | 
| 輸出位元組 | 175 | 


**範例 4**  

|  |  | 
| --- |--- |
| 輸入 | abcdefghijklmnopqrstuvwxyz | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfsteEE1GKEPiRzyh0h7t6OmWMLTWCvO2ckr6pkx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcutBAcO\$1Mb9tuU2KIHH31AWg= | 
| 確定性 | No | 
| 輸入位元組 | 26 | 
| 輸出位元組 | 175 | 


**範例 5**  

|  |  | 
| --- |--- |
| 輸入 | abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfsteEE1GKEPiRzyh0h7t6OmWMLTWCvO2ckr6plwtH/8tRFnn2rF91bcB9G4\$1n8GiRfJNmqdP4/QOQ3cXb/pbvPcnnohrHIGSX54ua\$11/JfcVjc= | 
| 確定性 | No | 
| 輸入位元組 | 62 | 
| 輸出位元組 | 175 | 

##### 的填補類型 `max`（範例 2)
<a name="sealed-pad-type-max-2"></a>

在此範例中， `pad_length`是 100，最大輸入是 62 個位元組。


**範例 1**  

|  |  | 
| --- |--- |
| 輸入 | null | 
| preserveNulls | TRUE | 
| Output | null | 
| 確定性 | Yes | 
| 輸入位元組 | 0 | 
| 輸出位元組 | 0 | 


**範例 2**  

|  |  | 
| --- |--- |
| 輸入 | null | 
| preserveNulls | FALSE | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfssGSNWfMRp7nSb7SMX2s3JKLOhK1\$17r75Tk\$1Mx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcnkB0xbLWD7zNdAqQGR0rXoSESdW0I0vpNoGcBfv4cJbG0A3h1DvtkSSVc2B80OOGppzdDqhrUVN5wFNyn8vgfPMqDaeJk5bn\$18o4WtG/ClipNcjDXvXVtK4vfCohcCA6uwrmwv/xAySX\$1xcntotL703aBTBb | 
| 確定性 | No | 
| 輸入位元組 | 0 | 
| 輸出位元組 | 307 | 


**範例 3**  

|  |  | 
| --- |--- |
| 輸入 | empty string | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfstGSNWfMRp7nSb7SMX2s3JKLOhK1\$17r75Tk\$1Mx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcnkB0xbLWD7zNdAqQGR0rXoSESdW0I0vpNoGcBfv4cJbG0A3h1DvtkSSVc2B80OOGppzdDqhrUVN5wFNyn8vgfPMqDaeJk5bn\$18o4WtG/ClipNcjDXvXVtK4vfCohcCA6uwrmwv84lVaT9Yd\$16oQx65/\$1gdVT | 
| 確定性 | No | 
| 輸入位元組 | 0 | 
| 輸出位元組 | 307 | 


**範例 4**  

|  |  | 
| --- |--- |
| 輸入 | abcdefghijklmnopqrstuvwxyz | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfsteEE1GKEPiRzyh0h7t6OmWMLTWCvO2ckr6pkx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcnkB0xbLWD7zNdAqQGR0rXoSESdW0I0vpNoGcBfv4cJbG0A3h1DvtkSSVc2B80OOGppzdDqhrUVN5wFNyn8vgfPMqDaeJk5bn\$18o4WtG/ClipNcjDXvXVtK4vfCohcCA6uwrmwtX5Hnl\$1WyfO6ks3QMaRDGSf | 
| 確定性 | No | 
| 輸入位元組 | 26 | 
| 輸出位元組 | 307 | 


**範例 5**  

|  |  | 
| --- |--- |
| 輸入 | abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfsteEE1GKEPiRzyh0h7t6OmWMLTWCvO2ckr6plwtH/8tRFnn2rF91bcB9G4\$1n8GiRfJNmqdP4/QOQ3cXb/pbvPcnkB0xbLWD7zNdAqQGR0rXoSESdW0I0vpNoGcBfv4cJbG0A3h1DvtkSSVc2B80OOGppzdDqhrUVN5wFNyn8vgfPMqDaeJk5bn\$18o4WtG/ClipNcjDXvXVtK4vfCohcCA6uwrmwjkJXQZOgPdeFX9Yr/8alV5i | 
| 確定性 | No | 
| 輸入位元組 | 62 | 
| 輸出位元組 | 307 | 

#### 對sealed資料欄進行故障診斷
<a name="troubleshooting-sealed-columns"></a>

** 為什麼我sealed欄中的加密文字比cleartext進去的 大小大上數倍？**

這取決於幾個因素。其中一個資料Cleartext欄中的加密文字長度一律至少為 91 個位元組。如果您的輸入資料很小 （例如，客戶的年齡），其大小將會大幅增加。其次，如果 `preserveNulls` 設定為 `false`且您的輸入資料包含許多`null`值，則每個`null`值都會轉換為 91 個位元組的加密文字。最後，如果您使用填補，則在加密資料之前，依定義，系統會將位元組新增至cleartext資料。

**資料sealed欄中的大部分資料都很小，我需要使用填補。我是否可以移除大值並分別處理它們以節省空間？**

不建議您移除大型值並分別處理。這樣做會變更 C3R 加密用戶端提供的隱私權保證。作為威脅模型，假設觀察者可以看到兩個加密的資料集。如果觀察者發現一個資料子集的資料欄填充量明顯大於或小於另一個子集，他們可以對每個子集中的資料大小進行推論。例如，假設資料`fullName`欄在一個檔案中填入總計 40 個位元組，並在另一個檔案中填入 800 個位元組。觀察者可以假設一個資料集包含世界最長的名稱 747 位元組）。

**使用填補類型時，是否需要提供額外的`max`填補？**

否。使用`max`填補時，我們建議您將 設定為 0`pad_length`，也稱為*超過*資料欄中最大值的額外填補。

**使用`fixed`填補`pad_length`時，我可以直接挑選大型物件，以避免擔心最大值是否合適？**

是，但大型鍵盤長度效率不佳，使用的儲存空間比所需更多。建議您檢查最大值的大小，並將 `pad_length` 設定為該值。

**如何知道是否需要 提供的密碼編譯保證`preserveNulls`？**

不幸的是，答案是它取決於 。至少[的加密運算 Clean Rooms](crypto-computing.md)應檢閱 `preserveNulls`的設定如何保護您的資料。不過，我們建議您參考組織的資料處理需求，以及適用於個別協同合作的任何合約。

**為什麼我必須產生 base64 的額外負荷？**

若要允許 與 CSV 等表格式檔案格式相容，需要 base64 編碼。雖然某些 檔案格式Parquet可能支援資料的二進位表示法，但協同合作中的所有參與者都以相同的方式代表資料，以確保適當的查詢結果。

## 對加密文字大小的非預期增加進行故障診斷
<a name="troubleshooting-ciphertext-size"></a>

假設您已加密資料，而產生的資料大小非常大。下列步驟可協助您識別大小增加的位置，以及您可以採取哪些動作。

### 識別大小增加的位置
<a name="where-size-increase-occurred"></a>

您必須先識別大小增加的位置，才能對加密的資料明顯大於cleartext資料的原因進行故障診斷。 資料Cleartext欄可以放心地被忽略，因為它們保持不變。查看其餘 fingerprint和 sealed欄，然後選擇顯示顯著的項目。

### 識別大小增加的原因
<a name="why-size-increase-occurred"></a>

資料fingerprint欄或資料sealed欄可能會導致大小增加。

**Topics**
+ [大小增加是否來自資料fingerprint欄？](#size-increase-from-fingerprint)
+ [大小增加是否來自資料sealed欄？](#size-increase-from-sealed)

#### 大小增加是否來自資料fingerprint欄？
<a name="size-increase-from-fingerprint"></a>

如果對增加儲存體貢獻最大的資料欄是資料fingerprint欄，這可能是因為cleartext資料很小 （例如，客戶年齡）。每個產生的fingerprint加密文字長度為 52 個位元組。遺憾的是，無法逐column-by-column處理此問題。如需詳細資訊，請參閱 [fingerprint 資料欄的基本額外負荷](#fingerprint-columns-base-overhead) 以取得此欄的詳細資訊，包括其如何影響儲存需求。

資料fingerprint欄大小增加的另一個可能原因是協同合作設定 `preserveNulls`。如果停用 `preserveNulls` 的協同合作設定 （預設設定），資料fingerprint欄中的所有`null`值都會變成 52 個位元組的加密文字。在目前的協同合作中，無法對此執行任何操作。此`preserveNulls`設定是在建立協同合作時設定，且所有協同合作者必須使用相同的設定，以確保正確的查詢結果。如需`preserveNulls`設定及其如何影響資料隱私權保證的詳細資訊，請參閱 [的加密運算 Clean Rooms](crypto-computing.md)。

#### 大小增加是否來自資料sealed欄？
<a name="size-increase-from-sealed"></a>

如果對儲存體增加貢獻最大的資料欄是資料sealed欄，則有一些詳細資訊可能會導致大小增加。

如果cleartext資料很小 （例如，客戶年齡），則每個產生的sealed加密文字長度至少為 91 個位元組。遺憾的是，此問題無法解決。如需詳細資訊，請參閱 [sealed 資料欄的基本額外負荷](#sealed-columns-base-overhead) 以取得此欄的詳細資訊，包括其如何影響儲存需求。

資料sealed欄儲存增加的第二個主要原因是填補。在加密cleartext之前，填補會將額外的位元組新增至 ，以隱藏資料集中個別值的大小。建議您將填補設定為資料集的最小可能值。至少，`pad_length`對於`fixed`填補，必須設定為包含資料欄中最大的可能值。任何高於 的設定都不會新增額外的隱私權保證。例如，如果您知道欄中最大的可能值可以是 50 個位元組，建議您`pad_length`將 設定為 50 個位元組。不過，如果資料sealed欄使用`max`填補，建議您`pad_length`將 設定為 0 位元組。這是因為`max`填補是指超出資料欄中最大值*的額外*填補。

資料sealed欄大小增加的最終可能原因是協同合作設定 `preserveNulls`。如果停用 `preserveNulls` 的協同合作設定 （預設設定），資料sealed欄中的所有`null`值都會變成 91 個位元組的加密文字。在目前的協同合作中，無法對此執行任何操作。`preserveNulls` 設定是在建立協同合作時設定，且所有協同合作者必須使用相同的設定，以確保正確的查詢結果。如需此設定的詳細資訊，以及啟用它如何影響資料的隱私權保證，請參閱 [的加密運算 Clean Rooms](crypto-computing.md)。