DLP 加密函数

GoogleSQL for BigQuery 支持以下 DLP 函数,这些函数使用AES-SIV 实现 BigQuery 与 Cloud Data Loss Prevention (Cloud 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 中,key 必须设置为 ENABLED。如需了解如何生成封装的密钥,请参阅 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 中,key 必须设置为 ENABLED。如需了解如何生成封装的密钥,请参阅 gcloud kms encrypt
  • ciphertext:要解密的 STRING 值。
  • contextSTRING 值,与 Cloud KMS 密钥结合使用来派生数据加密密钥。如需了解详情,请参阅 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)

说明

您可以将此函数(而不是 key 参数)用于 DLP 确定性加密函数。通过此函数,您可以使用 AES-SIV 加密函数,而无需在查询中包含 plaintext 密钥。

定义

  • kms_resource_name:包含 Cloud KMS 密钥的资源路径的 STRING 字面量。kms_resource_name 不能为 NULL,并且必须位于执行此函数所在的 Cloud 区域中。此参数用于在 DLP_DETERMINISTIC_DECRYPTDLP_DETERMINISTIC_ENCRYPT 函数中派生数据加密密钥。Cloud KMS 密钥如下所示:

    gcp-kms://projects/my-project/locations/us/keyRings/my-key-ring/cryptoKeys/my-crypto-key
    
  • wrapped_keyBYTES 字面量,表示用户选择的密文。此密文可以是 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= |
 *--------------------------------------*/