DLP 暗号化関数

BigQuery 向けの GoogleSQL では、AES-SIV を使用して BigQuery と Cloud Data Loss Prevention(Cloud DLP) の間で相互運用性のある暗号化と復号を可能にする次の DLP 関数がサポートされています。

関数リスト

名前 概要
DLP_DETERMINISTIC_ENCRYPT DLP 互換のアルゴリズムでデータを暗号化します。
DLP_DETERMINISTIC_DECRYPT DLP で暗号化されたデータを復号します。
DLP_KEY_CHAIN Cloud Key Management Service でラップされるデータ暗号鍵を取得します。

DLP_DETERMINISTIC_ENCRYPT

DLP_DETERMINISTIC_ENCRYPT(key, plaintext, context)
DLP_DETERMINISTIC_ENCRYPT(key, plaintext, context, surrogate)

説明

この関数は、keycontext からデータ暗号鍵を取得し、plaintext を暗号化します。必要に応じて、surrogate を使用して暗号化結果を先頭に追加できます。

定義

  • key: DLP_KEY_CHAIN によって返される、シリアル化された BYTES 値。Cloud KMS では、keyENABLED に設定する必要があります。ラップされた鍵を生成する方法については、gcloud kms encrypt をご覧ください。
  • plaintext: 暗号化する STRING 値。
  • context: ユーザー指定の STRING 値。データ暗号鍵を取得するために Cloud KMS 鍵とともに使用されます。詳細については、CryptoDeterministicConfig:context をご覧ください。
  • surrogate: 出力の先頭に追加できる STRING 値。

戻りデータの型

STRING

SELECT
  DLP_DETERMINISTIC_ENCRYPT(
    DLP_KEY_CHAIN(
      'gcp-kms://projects/my_project/locations/us-central1/keyRings/keyringtest/cryptoKeys/testkey',
      b'\123\044\290\876....'),
    plaintext,
    '',
    'test') AS results

/*--------------------------------------*
 | results                              |
 +--------------------------------------+
 | AXDEwUnZsTf/NzxoHaC8AZXcawWuma7L39A= |
 *--------------------------------------*/

DLP_DETERMINISTIC_DECRYPT

DLP_DETERMINISTIC_DECRYPT(key, ciphertext, context)
DLP_DETERMINISTIC_DECRYPT(key, ciphertext, context, surrogate)

説明

この関数は、keycontext から導出された暗号鍵を使用して ciphertext を復号します。必要に応じて、surrogate を使用して復号結果を先頭に追加できます。

定義

  • key: DLP_KEY_CHAIN が返すシリアル化された BYTES 値。Cloud KMS では、keyENABLED に設定する必要があります。ラップされた鍵を生成する方法については、gcloud kms encrypt をご覧ください。
  • ciphertext: 復号する STRING の値。
  • context: データ暗号鍵を導出するために Cloud KMS 鍵とともに使用される STRING 値。詳細については、CryptoDeterministicConfig:context をご覧ください。
  • surrogate: 出力の先頭に追加できる STRING 値。

戻りデータの型

STRING

SELECT
  DLP_DETERMINISTIC_DECRYPT(
    DLP_KEY_CHAIN(
      'gcp-kms://projects/myproject/locations/us-central1/keyRings/keyringtest/cryptoKeys/testkey',
      b'\123\044\290\876....'),
    'your_surrogate(36)AdFnA6r5doSDWxPwW/W4vBaa4iOvDagC8z8=',
    '',
    'your_surrogate') AS results

/*-----------*
 | results   |
 +-----------+
 | plaintext |
 *-----------*/

DLP_KEY_CHAIN

DLP_KEY_CHAIN(kms_resource_name, wrapped_key)

説明

DLP の決定的暗号化関数の key 引数の代わりに、この関数を使用できます。この関数では、クエリに plaintext 鍵を含めずに AES-SIV 暗号化関数を使用できます。

定義

  • kms_resource_name: Cloud KMS 鍵へのリソースパスを含む STRING リテラル。kms_resource_nameNULL にはできません。この関数が実行されるのと同じ Cloud リージョンに存在する必要があります。この引数は、DLP_DETERMINISTIC_DECRYPT 関数と DLP_DETERMINISTIC_ENCRYPT 関数でデータ暗号鍵を導出するために使用されます。Cloud KMS 鍵は次のようになります。

    gcp-kms://projects/my-project/locations/us/keyRings/my-key-ring/cryptoKeys/my-crypto-key
    
  • wrapped_key: ユーザーが選択したシークレット テキストを表す BYTES リテラル。このシークレット テキストは 16、24、32 バイトにできます。ラップされた鍵を生成する方法については、gcloud kms encrypt をご覧ください。

戻りデータの型

STRUCT

SELECT
  DLP_DETERMINISTIC_ENCRYPT(
    DLP_KEY_CHAIN(
      'gcp-kms://projects/my_project/locations/us-central1/keyRings/keyringtest/cryptoKeys/testkey',
      b'\123\044\290\876....'),
    plaintext,
    '',
    'test') AS results

/*--------------------------------------*
 | results                              |
 +--------------------------------------+
 | AXDEwUnZsTf/NzxoHaC8AZXcawWuma7L39A= |
 *--------------------------------------*/