

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# C3R 暗号化クライアントのガイドライン
<a name="crypto-computing-guidelines"></a>

C3R 暗号化クライアントは、組織が機密データをまとめてデータ分析から新しいインサイトを引き出すために使用するツールです。このツールは、任意の当事者およびプロセス AWS で学習できる内容を暗号的に制限します。これはきわめて重要ですが、データを暗号化によって保護するプロセスでは、コンピューティングリソースとストレージリソースの両面で大きなオーバーヘッドが生じる可能性があります。そのため、各設定を使用する際のトレードオフや、必要な暗号化保証を維持しながら最適な設定を行う方法を理解することが重要です。このトピックでは、C3R 暗号化クライアントとスキーマのさまざまな設定がパフォーマンスに与える影響に焦点を当てています。

C3R 暗号化クライアントの暗号化設定はすべて、異なる暗号化保証を提供します。コラボレーションレベルの設定が、デフォルトでは最も安全です。コラボレーションの作成中に追加機能を有効にすると、暗号文で頻度分析などのアクティビティを実行できるようになり、プライバシーの保証が弱まります。これらの設定がどのように使用され、どのような影響を及ぼすかの詳細については、「[Cryptographic Computing for Clean Rooms](crypto-computing.md)」を参照してください。

**Topics**
+ [列タイプがパフォーマンスに与える影響](#performance-implications)
+ [暗号文のサイズが予期せず大きくなった場合のトラブルシューティング](#troubleshooting-ciphertext-size)

## 列タイプがパフォーマンスに与える影響
<a name="performance-implications"></a>

C3R ではcleartext、fingerprint、sealedの 3 つの列タイプを使用します。これらの列タイプはそれぞれ異なる暗号化保証を提供し、使用目的も異なります。以下のセクションでは、列タイプがパフォーマンスに与える影響と、各設定がパフォーマンスに与える影響について説明します。

**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列内のデータは、Hash-based Message Authentication Code (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/ja_jp/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` などの他のコラボレーションレベルの設定は結果に影響せず、ローカルで再現を試みる場合は `true` または `false` に設定できます。

**共有シークレットの例**: `wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY`

**コラボレーション ID の例**: `a1b2c3d4-5678-90ab-cdef-EXAMPLE11111`

**allowJoinsOnColumnsWithDifferentNames**: `True`。この設定はパフォーマンスやストレージ要件には影響しません。ただし、この設定を行うと、次の表に示す値を再現するときに、列名の選択は重要ではなくなります。


**例 1**  

|  |  | 
| --- |--- |
| Input | null | 
| preserveNulls | TRUE | 
| Output | null | 
| 確定的 | Yes | 
| 入力バイト数 | 0 | 
| 出力バイト数 | 0 | 


**例 2**  

|  |  | 
| --- |--- |
| Input | null | 
| preserveNulls | FALSE | 
| Output | 01:hmac:3lkFjthvV3IUu6mMvFc1a\$1XAHwgw/ElmOq4p3Yg25kk= | 
| 確定的 | No | 
| 入力バイト数 | 0 | 
| 出力バイト数 | 52 | 


**例 3**  

|  |  | 
| --- |--- |
| Input | empty string | 
| preserveNulls | - | 
| Output | 01:hmac:oKTgi3Gba\$1eUb3JteSz2EMgXUkF1WgM77UP0Ydw5kPQ= | 
| 確定的 | Yes | 
| 入力バイト数 | 0 | 
| 出力バイト数 | 52 | 


**例 4**  

|  |  | 
| --- |--- |
| Input | abcdefghijklmnopqrstuvwxyz | 
| preserveNulls | - | 
| Output | 01:hmac:kU/IqwG7FMmzzshr0B9scomE0UJUEE7j9keTctplGww= | 
| 確定的 | Yes | 
| 入力バイト数 | 26 | 
| 出力バイト数 | 52 | 


**例 5**  

|  |  | 
| --- |--- |
| Input | 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` による暗号保証が必要かどうかはどうすればわかりますか?**

答えは状況により異なります。少なくとも、`preserveNulls` 設定によってデータがどのように保護されるかを「[暗号コンピューティングパラメータ](crypto-computing-parameters.md)」で確認する必要があります。ただし、組織のデータ処理要件と、それぞれのコラボレーションに適用される契約を参照することをお勧めします。

**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 に設定されている場合は、null 値以外の合計数を使用します)。

以下の図は、* `BASE_OVERHEAD = C3R_DESIGNATION + ((NONCE + IV + DATA_TYPE + PAD_SIZE + AUTH_TAG) * 1.33)` * を表しています。

![\[sealed列の 91 バイトの基本オーバーヘッド。\]](http://docs.aws.amazon.com/ja_jp/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` のパディングタイプを選択すると、列に含まれるデータの長さが隠蔽され、プライバシーを保護する手段となります。これは、暗号化の前に、すべてのcleartextを指定された `pad_length` にパディングすることで行われます。このサイズを超えるデータがあると、C3R 暗号化クライアントは機能しなくなります。

暗号化の前にcleartextにパディングが追加される場合、AES-GCM で、cleartextと暗号文のバイトとの 1 対 1 のマッピングが行われます。base64 エンコーディングによってサイズが 33% 増加します。パディングによって増加するストレージのオーバーヘッドは、`pad_length` の値からcleartextの長さの平均値を引き、1.33 を掛けることで算出できます。その結果が、レコードごとのパディングの平均オーバーヘッドになります。次に、この結果に行の数を掛けて、パディングのオーバーヘッドの合計を求めます (`preserveNulls` が `true` に設定されている場合は、`null` 値以外の合計数を使用します)。

 `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` のパディングは 1 つのデータセットに対して `fixed` のパディングと同様の保証を提供しますが、列内のcleartextの最大値を把握していなくてもかまいません。ただし、更新時には、個々のデータセットの最大値が変わる場合があるため、`max` のパディングで `fixed` のパディングと同様のプライバシー保証が提供されるとは限りません。

`max` のパディングを使用するときは、0 の `pad_length` を追加で選択することをお勧めします。この長さにより、すべての値が列の最大値と同じサイズにパディングされます。これより大きい値では、ストレージのオーバーヘッドが増えるだけです。

特定の列の cleartext の最大値がわかっている場合は、代わりに `fixed` のパディングタイプを使用することをお勧めします。`fixed` のパディングを使用すると、データセットの更新前後で一貫性が保たれます。`max` のパディングを使用すると、データの各サブセットが、そのサブセットにあった最大値までパディングされます。

#### sealed列のデータ例
<a name="sealed-collab-sample-data"></a>

以下は、再現可能な設定を含む sealed 列の入出力データのサンプルセットです。`allowCleartext`、`allowJoinsOnColumnsWithDifferentNames`、`allowDuplicates` などの他のコラボレーションレベルの設定は結果に影響せず、ローカルで再現を試みる場合は `true` または `false` に設定できます。これらは再現するための基本設定ですが、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**  

|  |  | 
| --- |--- |
| Input | null | 
| preserveNulls | TRUE | 
| Output | null | 
| 確定的 | Yes | 
| 入力バイト数 | 0 | 
| 出力バイト数 | 0 | 


**例 2**  

|  |  | 
| --- |--- |
| Input | null | 
| preserveNulls | FALSE | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfssGSPbNIJfG3iXmu6cbCUrizuV | 
| 確定的 | No | 
| 入力バイト数 | 0 | 
| 出力バイト数 | 91 | 


**例 3**  

|  |  | 
| --- |--- |
| Input | empty string | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfstGSPEM6qR8DWC2PB2GMlX41YK | 
| 確定的 | No | 
| 入力バイト数 | 0 | 
| 出力バイト数 | 91 | 


**例 4**  

|  |  | 
| --- |--- |
| Input | abcdefghijklmnopqrstuvwxyz | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfsteEE1GKEPiRzyh0h7t6OmWMLTWCvO2ckr6pkx9sGL5VLDQeHzh6DmPpyWNuI= | 
| 確定的 | No | 
| 入力バイト数 | 26 | 
| 出力バイト数 | 127 | 


**例 5**  

|  |  | 
| --- |--- |
| Input | 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**  

|  |  | 
| --- |--- |
| Input | null | 
| preserveNulls | TRUE | 
| Output | null | 
| 確定的 | Yes | 
| 入力バイト数 | 0 | 
| 出力バイト数 | 0 | 


**例 2**  

|  |  | 
| --- |--- |
| Input | null | 
| preserveNulls | FALSE | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfssGSNWfMRp7nSb7SMX2s3JKLOhK1\$17r75Tk\$1Mx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcoNpATs0GzbnLkor4L\$1/aSuA= | 
| 確定的 | No | 
| 入力バイト数 | 0 | 
| 出力バイト数 | 175 | 


**例 3**  

|  |  | 
| --- |--- |
| Input | empty string | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfstGSNWfMRp7nSb7SMX2s3JKLOhK1\$17r75Tk\$1Mx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcoLB53l07VZpA6OwkuXu29CA= | 
| 確定的 | No | 
| 入力バイト数 | 0 | 
| 出力バイト数 | 175 | 


**例 4**  

|  |  | 
| --- |--- |
| Input | abcdefghijklmnopqrstuvwxyz | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfsteEE1GKEPiRzyh0h7t6OmWMLTWCvO2ckr6pkx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcutBAcO\$1Mb9tuU2KIHH31AWg= | 
| 確定的 | No | 
| 入力バイト数 | 26 | 
| 出力バイト数 | 175 | 


**例 5**  

|  |  | 
| --- |--- |
| Input | 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**  

|  |  | 
| --- |--- |
| Input | null | 
| preserveNulls | TRUE | 
| Output | null | 
| 確定的 | Yes | 
| 入力バイト数 | 0 | 
| 出力バイト数 | 0 | 


**例 2**  

|  |  | 
| --- |--- |
| Input | null | 
| preserveNulls | FALSE | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfssGSNWfMRp7nSb7SMX2s3JKLOhK1\$17r75Tk\$1Mx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcnkB0xbLWD7zNdAqQGR0rXoSESdW0I0vpNoGcBfv4cJbG0A3h1DvtkSSVc2B80OOGppzdDqhrUVN5wFNyn8vgfPMqDaeJk5bn\$18o4WtG/ClipNcjDXvXVtK4vfCohcCA6uwrmwv/xAySX\$1xcntotL703aBTBb | 
| 確定的 | No | 
| 入力バイト数 | 0 | 
| 出力バイト数 | 307 | 


**例 3**  

|  |  | 
| --- |--- |
| Input | empty string | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfstGSNWfMRp7nSb7SMX2s3JKLOhK1\$17r75Tk\$1Mx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcnkB0xbLWD7zNdAqQGR0rXoSESdW0I0vpNoGcBfv4cJbG0A3h1DvtkSSVc2B80OOGppzdDqhrUVN5wFNyn8vgfPMqDaeJk5bn\$18o4WtG/ClipNcjDXvXVtK4vfCohcCA6uwrmwv84lVaT9Yd\$16oQx65/\$1gdVT | 
| 確定的 | No | 
| 入力バイト数 | 0 | 
| 出力バイト数 | 307 | 


**例 4**  

|  |  | 
| --- |--- |
| Input | abcdefghijklmnopqrstuvwxyz | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfsteEE1GKEPiRzyh0h7t6OmWMLTWCvO2ckr6pkx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcnkB0xbLWD7zNdAqQGR0rXoSESdW0I0vpNoGcBfv4cJbG0A3h1DvtkSSVc2B80OOGppzdDqhrUVN5wFNyn8vgfPMqDaeJk5bn\$18o4WtG/ClipNcjDXvXVtK4vfCohcCA6uwrmwtX5Hnl\$1WyfO6ks3QMaRDGSf | 
| 確定的 | No | 
| 入力バイト数 | 26 | 
| 出力バイト数 | 307 | 


**例 5**  

|  |  | 
| --- |--- |
| Input | 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**  

|  |  | 
| --- |--- |
| Input | null | 
| preserveNulls | TRUE | 
| Output | null | 
| 確定的 | Yes | 
| 入力バイト数 | 0 | 
| 出力バイト数 | 0 | 


**例 2**  

|  |  | 
| --- |--- |
| Input | null | 
| preserveNulls | FALSE | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfssGSNWfMRp7nSb7SMX2s3JKLOhK1\$17r75Tk\$1Mx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcoNpATs0GzbnLkor4L\$1/aSuA= | 
| 確定的 | No | 
| 入力バイト数 | 0 | 
| 出力バイト数 | 175 | 


**例 3**  

|  |  | 
| --- |--- |
| Input | empty string | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfstGSNWfMRp7nSb7SMX2s3JKLOhK1\$17r75Tk\$1Mx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcoLB53l07VZpA6OwkuXu29CA= | 
| 確定的 | No | 
| 入力バイト数 | 0 | 
| 出力バイト数 | 175 | 


**例 4**  

|  |  | 
| --- |--- |
| Input | abcdefghijklmnopqrstuvwxyz | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfsteEE1GKEPiRzyh0h7t6OmWMLTWCvO2ckr6pkx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcutBAcO\$1Mb9tuU2KIHH31AWg= | 
| 確定的 | No | 
| 入力バイト数 | 26 | 
| 出力バイト数 | 175 | 


**例 5**  

|  |  | 
| --- |--- |
| Input | 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**  

|  |  | 
| --- |--- |
| Input | null | 
| preserveNulls | TRUE | 
| Output | null | 
| 確定的 | Yes | 
| 入力バイト数 | 0 | 
| 出力バイト数 | 0 | 


**例 2**  

|  |  | 
| --- |--- |
| Input | null | 
| preserveNulls | FALSE | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfssGSNWfMRp7nSb7SMX2s3JKLOhK1\$17r75Tk\$1Mx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcnkB0xbLWD7zNdAqQGR0rXoSESdW0I0vpNoGcBfv4cJbG0A3h1DvtkSSVc2B80OOGppzdDqhrUVN5wFNyn8vgfPMqDaeJk5bn\$18o4WtG/ClipNcjDXvXVtK4vfCohcCA6uwrmwv/xAySX\$1xcntotL703aBTBb | 
| 確定的 | No | 
| 入力バイト数 | 0 | 
| 出力バイト数 | 307 | 


**例 3**  

|  |  | 
| --- |--- |
| Input | empty string | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfstGSNWfMRp7nSb7SMX2s3JKLOhK1\$17r75Tk\$1Mx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcnkB0xbLWD7zNdAqQGR0rXoSESdW0I0vpNoGcBfv4cJbG0A3h1DvtkSSVc2B80OOGppzdDqhrUVN5wFNyn8vgfPMqDaeJk5bn\$18o4WtG/ClipNcjDXvXVtK4vfCohcCA6uwrmwv84lVaT9Yd\$16oQx65/\$1gdVT | 
| 確定的 | No | 
| 入力バイト数 | 0 | 
| 出力バイト数 | 307 | 


**例 4**  

|  |  | 
| --- |--- |
| Input | abcdefghijklmnopqrstuvwxyz | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfsteEE1GKEPiRzyh0h7t6OmWMLTWCvO2ckr6pkx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcnkB0xbLWD7zNdAqQGR0rXoSESdW0I0vpNoGcBfv4cJbG0A3h1DvtkSSVc2B80OOGppzdDqhrUVN5wFNyn8vgfPMqDaeJk5bn\$18o4WtG/ClipNcjDXvXVtK4vfCohcCA6uwrmwtX5Hnl\$1WyfO6ks3QMaRDGSf | 
| 確定的 | No | 
| 入力バイト数 | 26 | 
| 出力バイト数 | 307 | 


**例 5**  

|  |  | 
| --- |--- |
| Input | 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` のパディングを使用するときは、`pad_length` (列の最大値を超える追加パディングとも呼ばれます**) を 0 に設定することをお勧めします。

**`fixed` のパディングを使用するときに、最大値が確実に収まるよう `pad_length` に大きい値を選択してもよいですか？**

はい。ただし、パディングの長さが長いと効率が低下し、必要以上に多くのストレージを消費します。最大値の大きさを確認し、`pad_length` にその値を設定することをおすすめします。

**`preserveNulls` による暗号保証が必要かどうかはどうすればわかりますか?**

答えは状況により異なります。少なくとも、`preserveNulls` 設定によってデータがどのように保護されるかを「[Cryptographic Computing for Clean Rooms](crypto-computing.md)」で確認する必要があります。ただし、組織のデータ処理要件と、それぞれのコラボレーションに適用される契約を参照することをお勧めします。

**base64 のオーバーヘッドが発生するのはなぜですか?**

CSV などの表形式のファイル形式との互換性を保つには、base64 エンコーディングが必要です。Parquet などの一部のファイル形式はデータのバイナリ表現をサポートしていますが、適切なクエリ結果を得るためには、コラボレーションのすべての参加者が同じ方法でデータを表現することが重要です。

## 暗号文のサイズが予期せず大きくなった場合のトラブルシューティング
<a name="troubleshooting-ciphertext-size"></a>

データを暗号化し、生成されたデータのサイズが驚くほど大きかったとしましょう。次の手順は、サイズが増加している場所と、実行できるアクション (ある場合) を特定するのに役立ちます。

### サイズの増加が発生した場所の特定
<a name="where-size-increase-occurred"></a>

暗号化されたデータが cleartext データよりも大幅に大きくなった理由をトラブルシューティングする前に、まずサイズが増加している場所を特定する必要があります。Cleartext 列は変更されていないため、無視しても問題ありません。残りの fingerprint 列と sealed 列を見て、大幅に増えている列を 1 つ選びます。

### サイズが増加した理由の特定
<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 バイトになります。残念ながら、この問題について列単位で対処できることは何もありません。ストレージ要件への影響など、この列の詳細については「[fingerprint列の基本オーバーヘッド](#fingerprint-columns-base-overhead)」を参照してください。

fingerprint列のサイズが大きくなるもう 1 つの原因として、`preserveNulls` のコラボレーション設定が考えられます。`preserveNulls` のコラボレーション設定が無効 (デフォルト設定) になっていると、fingerprint 列の `null` 値はすべて 52 バイトの暗号文になります。現在のコラボレーションでは、これに対してできることは何もありません。`preserveNulls` 設定はコラボレーションの作成時に設定され、正しいクエリ結果を得るためにすべてのコラボレーターが同じ設定を使用する必要があります。`preserveNulls` 設定の詳細と、この設定を有効にした場合にデータのプライバシー保護にどのような影響が及ぶかについては、「[Cryptographic Computing for Clean Rooms](crypto-computing.md)」を参照してください。

#### sealed 列が原因でサイズの増加が生じている場合
<a name="size-increase-from-sealed"></a>

ストレージ増加の最も大きな原因となっているのが sealed 列である場合、サイズの増加を引き起こしている可能性のある要因がいくつかあります。

cleartext データが小さい場合 (顧客の年齢など)、生成される各 sealed 暗号文の長さは 91 バイト以上になります。残念ながら、この問題についてできることは何もありません。ストレージ要件への影響など、この列の詳細については「[sealed列の基本オーバーヘッド](#sealed-columns-base-overhead)」を参照してください。

sealed列でストレージが増加する 2 つ目の主な要因はパディングです。パディングとは、データセット内の個々の値のサイズを隠蔽するために、暗号化の前にcleartextに余分なバイトを追加することです。データセットにとって最小限の値でパディングを設定することをお勧めします。少なくとも、`fixed` パディングの `pad_length` は、列内で考えられる最大の値が収まるように設定する必要があります。これより大きい値を設定しても、プライバシー保証は追加されません。例えば、列内で考えられる最大の値が 50 バイトであることがわかっている場合は、`pad_length` を 50 バイトに設定することをお勧めします。ただし、sealed 列で `max` のパディングを使用している場合は、`pad_length` を 0 バイトに設定することをお勧めします。これは、`max` のパディングが、列内の最大値を超える追加のパディングを指すためです**。

sealed列のサイズが大きくなる原因として考えられる最後の要因は、`preserveNulls` のコラボレーション設定です。`preserveNulls` のコラボレーション設定が無効 (デフォルト設定) になっていると、sealed 列の `null` 値はすべて 91 バイトの暗号文になります。現在のコラボレーションでは、これに対してできることは何もありません。`preserveNulls` 設定はコラボレーションの作成時に設定され、正しいクエリ結果を得るためにすべてのコラボレーターが同じ設定を使用する必要があります。この設定の詳細と、設定を有効にした場合にデータのプライバシー保護にどのような影響が及ぶかについては、「[Cryptographic Computing for Clean Rooms](crypto-computing.md)」を参照してください。