検索およびデータベース暗号化用の BYOK 秘密を生成するサンプルスクリプト
検索およびデータベース暗号化用の BYOK 素材をアップロードするのに役立つスクリプトが用意されています。検索の場合はアップロード可能な DEK、データベース暗号化の場合はアップロード可能なテナントの秘密が作成されます。スクリプトは秘密として乱数を生成し、証明書の公開鍵を使用して秘密を暗号化します。
必要なエディション
| Salesforce Classic (使用できない組織もあります) および Lightning Experience の両方で使用できます。 |
| 使用可能なエディション: Salesforce Shield または Shield Platform Encryption ライセンスが付属する Enterprise Edition、Performance Edition、および Unlimited Edition。 |
| Developer Edition で無料で使用できます。 |
このスクリプトを使用する前に、BYOK 互換の証明書を作成し、セッショントークンを生成する必要があります。データベースの暗号化と検索インデックスの暗号化では、自己署名証明書のみが必要です。
このスクリプトにより、検索インデックスまたはデータベース暗号化用の BYOK としてアップロードできる payload.bin という名前のファイルが 1 つ作成されます。この種別の BYOK 鍵素材の要件に従ってラップおよびエンコードされます。検索インデックス暗号化用のDEKとデータベース暗号化用のテナントの秘密が作成されます。
- スクリプトを含むファイルを作成し、先ほどダウンロードした証明書およびセッショントークンファイルと同じディレクトリに保存します。
-
スクリプトが
chmod 775で実行可能であることを確認します。デフォルトでは、一時ファイルは削除されません。スクリプトの最後の行をコメント解除すると、自動的に削除されます。 -
証明書名とセッショントークンファイルを指定してスクリプトを実行します。たとえば、スクリプトに「
2025_search_secretgen.sh」という名前を付けていて、証明書ファイルに「2025_search.crt」という名前を付けた場合、./2025_search_secretgen.sh 2025_search.crt を実行します。 -
このスクリプトでは、payload.bin という名前のファイルが 1 つ生成されます。
payload.bin と、以前に作成した自己署名証明書のセッショントークンファイルをアップロードします。
2025_search_secretgen.shファイルの内容。このスクリプトは Linux または MacO システムで実行できます。
このスクリプトは、Bring Your Own Key(BYOK)というプロセスを使用して、Salesforce Shield Platform Encryption用の安全な鍵を生成します。まず、Salesforce 証明書から公開鍵を抽出します。次に、2 つのランダムな AES 鍵 (一時鍵と「顧客」鍵) を作成します。一時鍵は、公開鍵と強力な暗号化スキーム (SHA-512 を使用する RSA-OAEP) を使用して暗号化されます。この暗号化された一時鍵は、別の暗号化スキーム (パディングを使用した AES 鍵ラップ) を使用して顧客鍵をラップするために使用されます。最後に、暗号化された一時鍵とラップされた顧客鍵を 1 つのペイロードに結合し、base64 形式でエンコードします。その後、このペイロードを Salesforce にアップロードして、機密データを安全に暗号化できます。
#!/bin/bash
set -euo pipefail
CERT_IN="$1"
OPENSSL="openssl"
# Extract public key from X.509 certificate
$OPENSSL x509 -in "$CERT_IN" -pubkey -noout > byok_public_key.pem
# Generate a random temporary AES key (256 bits)
$OPENSSL rand -out temp_aes_key.bin 32
# Encrypt the temp AES key using RSA-OAEP with SHA-512
$OPENSSL pkeyutl -encrypt \
-pubin \
-inkey byok_public_key.pem \
-in temp_aes_key.bin \
-out temp_key_wrapped.bin \
-pkeyopt rsa_padding_mode:oaep \
-pkeyopt rsa_oaep_md:sha512 \
-pkeyopt rsa_mgf1_md:sha512
# Generate the actual target AES key to be wrapped
$OPENSSL rand -out target_aes_key.bin 32
# Convert temp AES key to hex format for the -K parameter
KEY_HEX=$(hexdump -v -e '/1 "%02x"' < temp_aes_key.bin)
# AES Key Wrap with Padding using OpenSSL 3.x
$OPENSSL enc -id-aes256-wrap-pad \
-iv A65959A6 \
-K "$KEY_HEX" \
-in target_aes_key.bin \
-out target_key_wrapped.bin
# Combine both parts into final payload
cat temp_key_wrapped.bin target_key_wrapped.bin > payload.bin
# Cleanup
rm "$CERT_IN" byok_public_key.pem temp_aes_key.bin target_aes_key.bin temp_key_wrapped.bin target_key_wrapped.bin
