Chuyển đến nội dung chính

レッスン 17: 変換とトークン化 - データ保護

Transform Secrets Engine (エンタープライズ) — フォーマット保持暗号化 (FPE)、マスキング、トークン化。 PCI DSS 準拠、PII 保護。トランジットとトランスフォームを比較します。

🔒 D​​evSecOps — レッスン 17 レッスン 17: 変換とトークン化 - データ Protection

HashiCorp Vault の基本から上級まで

パート 4: 高度なシークレット エンジン

xdev.asia

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。トランジットとトランスフォーム — いつどちらを使用するか?

基準トランジット変換
LicenseCommunityEnterprise
出力形式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 用のカスタム プラグインの開発方法について説明します。