1. Transform Secrets Engine Overview
Transform Secrets Engine (Enterprise) は高度なデータ保護メカニズムを提供し、完全に異なる形式で暗号文を返す Transit Engine とは異なり、元の形式を保持しながら機密データを保護できます。
3種類のTransform
| タイプ | 説明 | リバーシブル | ユースケース |
|---|---|---|---|
| FPE | 形式保持暗号化 | はい | クレジット カード、SSN — 元の形式を維持 |
| マスキング | データを文字でマスク | No | 「****1234」を表示 |
| トークン化 | ランダムなトークンで置換 | はい (検索) | PCI DSS、スコープ外環境 |
2. Format Preserving Encryption (FPE)
FPE はデータを暗号化しますが、 は元の形式 を保持します。たとえば、16 桁のクレジット カード番号は、他の 16 桁にエンコードされます。これにより、レガシー システムはスキーマを変更せずに動作を継続できます。
Setup FPE
# Enable Transform secrets engine
vault secrets enable transform
# Tạo alphabet (tập ký tự cho phép)
# Built-in: builtin/numeric, builtin/alphanumericlower, builtin/alphanumericupper
# Tạo template cho credit card
vault write transform/template/credit-card-tmpl \
type=regex \
pattern='(\d{4})-(\d{4})-(\d{4})-(\d{4})' \
alphabet=builtin/numeric \
encode_format='$1-$2-$3-$4' \
decode_format='$1-$2-$3-$4'
# Tạo transformation
vault write transform/transformations/fpe/credit-card \
template=credit-card-tmpl \
tweak_source=internal \
allowed_roles=payments
# Tạo role
vault write transform/role/payments \
transformations=credit-card
FPE を使用
# Encode (encrypt)
vault write transform/encode/payments \
value="4111-1111-1111-1111" \
transformation=credit-card
# encoded_value: 7492-8372-1938-4726
# Decode (decrypt)
vault write transform/decode/payments \
value="7492-8372-1938-4726" \
transformation=credit-card
# decoded_value: 4111-1111-1111-1111
# Batch operations
vault write transform/encode/payments \
batch_input='[
{"value": "4111-1111-1111-1111", "transformation": "credit-card"},
{"value": "5500-0000-0000-0004", "transformation": "credit-card"}
]'
FPE cho SSN/CCCD
# Template cho SSN (xxx-xx-xxxx)
vault write transform/template/ssn-tmpl \
type=regex \
pattern='(\d{3})-(\d{2})-(\d{4})' \
alphabet=builtin/numeric
# Template cho CCCD Việt Nam (12 chữ số)
vault write transform/template/cccd-tmpl \
type=regex \
pattern='(\d{12})' \
alphabet=builtin/numeric
vault write transform/transformations/fpe/cccd \
template=cccd-tmpl \
tweak_source=internal \
allowed_roles=patient-data
3. Masking
マスキングは置換文字でデータをマスクします。はを反転できません。 UI、ログ、レポートへの表示に適しています。
# Tạo masking transformation
vault write transform/transformations/masking/card-mask \
template=credit-card-tmpl \
masking_character="#" \
allowed_roles=display
vault write transform/role/display \
transformations=card-mask
# Mask
vault write transform/encode/display \
value="4111-1111-1111-1111" \
transformation=card-mask
# encoded_value: ####-####-####-1111
4. Tokenization
Tokenization は機密データをランダムな token に置き換え、マッピングを別のストアに保存します。トークンは元のデータと数学的関係を持たない → FPE よりも安全です。
Tokenization vs FPE
| 基準 | FPE | トークン化 |
|---|---|---|
| 元の形式を維持 | はい | オプション |
| リバーシブル | はい (キーによる) | はい (ルックアップ ストアによる) |
| 外部ストアが必要 | いいえ | はい (内部または外部) |
| PCI DSS スコープ解除 | いいえ (依然としてキー管理が必要) | はい (キーのない環境) |
| パフォーマンス | 高速 (暗号化操作) | 低速 (ストレージ ルックアップ) |
# Tạo tokenization store (internal)
vault write transform/stores/internal-store \
type=internal
# Tạo tokenization transformation
vault write transform/transformations/tokenization/card-token \
allowed_roles=tokenize-role \
stores=internal-store \
max_ttl=8760h
vault write transform/role/tokenize-role \
transformations=card-token
# Tokenize
vault write transform/encode/tokenize-role \
value="4111111111111111" \
transformation=card-token
# encoded_value: Q4hx8AZDhk3jfn9876XYZ123...
# Detokenize
vault write transform/decode/tokenize-role \
value="Q4hx8AZDhk3jfn9876XYZ123..." \
transformation=card-token
# decoded_value: 4111111111111111
# Kiểm tra token metadata
vault write transform/tokeninfo/tokenize-role \
value="Q4hx8AZDhk3jfn9876XYZ123..." \
transformation=card-token
5。トランジットとトランスフォーム — いつどちらを使用するか?
| 基準 | トランジット | 変換 |
|---|---|---|
| License | Community | Enterprise |
| 出力形式 | Base64 ciphertext | 元の形式を維持する (FPE) またはトークン |
| スキーマ変更 | 列の型を変更する必要があります | 変更する必要はありません |
| メインのユースケース | 保存時の暗号化 | PCI DSS、PII 保護 |
| バッチ パフォーマンス | 非常に良い | 良好 (FPE)、まあまあ (トークン化) |
| キーローテーション | はい (再ラップ) | はい |
実践例
Transit: データベース内の電子メール、住所、医療データを暗号化 → 長い暗号文、使用するには復号化が必要
Transform FPE: クレジット カード番号をエンコード → 従来の請求システムは引き続き 16 桁の形式を処理できます
トークン化の変換: クレジット カードをトークンに置き換える → 開発/テスト環境が PCI
から完全にスコープ外される
Transform Masking: UI に ****1234 を表示 → 元のデータを復元できません
6。データベース ビューとの統合
-- PostgreSQL view sử dụng Vault Transform
-- Application gọi Vault API để decode khi cần
-- Table gốc lưu tokenized data
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
customer_name TEXT,
card_token TEXT, -- Tokenized value
card_last4 TEXT, -- Masked value cho display
amount DECIMAL(10,2),
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- Application flow:
-- 1. User nhập card number
-- 2. App gửi đến Vault Transform → nhận token + masked
-- 3. Lưu token vào card_token, masked vào card_last4
-- 4. Khi cần charge → app gửi token đến Vault → nhận card number gốc
-- 5. Charge card rồi xóa plaintext khỏi memory
7。概要
FPE — レガシー システムと互換性のあるフォーマット保持エンコーディング
Masking — UI/ログ
用の、元に戻せないマスキング データ
Tokenization — ランダムなトークンに置き換え、環境のスコープを解除します
Transit — 基本暗号化、コミュニティ エディション
Transform — 高度なデータ保護、Enterprise
次の記事では、KMIP、Consul、Nomad Secrets エンジンと、Vault 用のカスタム プラグインの開発方法について説明します。