2
1

More than 1 year has passed since last update.

BigQueryの確定的暗号化SQL関数が便利

Last updated at Posted at 2022-06-21

BigQueryの新機能

確定的暗号化SQL関数(Deterministic encryption SQL functions) という機能が登場しました。

できること

特定の平文とキーに対して常に同じ暗号文を生成できます。
そのため、平文でGROUP BYやJOINに使っていたカラムについて、暗号化しても同じように利用できます。

※AEAD 暗号化関数は同じ平文とキーでも暗号化すると別の暗号文が生成されます。

やってみた

今回追加されたDETERMINISTIC_ENCRYPTと以前からあったAEAD.ENCRYPTを比べてみます。

sample.sql
DECLARE KEYSET_DETERMINISTIC BYTES;
DECLARE KEYSET_NON_DETERMINISTIC BYTES;
SET KEYSET_DETERMINISTIC = (SELECT KEYS.NEW_KEYSET('DETERMINISTIC_AEAD_AES_SIV_CMAC_256'));
SET KEYSET_NON_DETERMINISTIC = (SELECT KEYS.NEW_KEYSET('AEAD_AES_GCM_256'));

WITH data AS (
  SELECT 'test' AS col
  UNION ALL
  SELECT 'test' AS col
  UNION ALL
  SELECT 'test2' AS col
  UNION ALL
  SELECT 'test2' AS col
)
SELECT
  DETERMINISTIC_ENCRYPT(
    KEYSET_DETERMINISTIC,
    col,
    'additional_data'
  ) AS Deterministic,
  AEAD.ENCRYPT(
    KEYSET_NON_DETERMINISTIC,
    col,
    'additional_data'
  ) AS NonDeterministic
FROM data
Cloud Shell
$ bq query --nouse_legacy_sql < sample.sql
Waiting on bqjob_r2ed8bea8d2387ac5_000001818439fff8_1 ... (1s) Current status: DONE   
WITH data AS (
  SELECT 'test' AS col
  UNION ALL
  SELECT 'test' AS col
  UNION ALL
  SELECT 'test2' AS col
  UNION ALL
  SELECT 'test2' AS col
)
SELECT
  DETERMINISTIC_ENCRYPT(
    KEYSET_DETERMINISTIC,
    col,
    'additional_data'
  ) AS Deterministic,
  AEAD.ENCRYPT(
    KEYSET_NON_DETERMINISTIC,
    col,
    'additional_data'
  ) AS NonDeterministic
FROM data; -- at [6:1]
+--------------------------------------+------------------------------------------------------+
|            Deterministic             |                   NonDeterministic                   |
+--------------------------------------+------------------------------------------------------+
| AReUWLWZbNBW+aRx5XaJhA8PDyH9Lx9PcA== | AdydJB4/zP0vV7tpPOxWmTYXLkVMD6tZaqbDoDHPWhyUfHLLMw== |
| AReUWLWZbNBW+aRx5XaJhA8PDyH9Lx9PcA== | AdydJB4yPyg+c+cqj0Cnj2glVFS00Pa0Qrgm0iyZLZPE8PUZcA== |
| AReUWLXQHtnTrZd+njoUNKcSY20q5TGVPDI= | AdydJB42M2DrYU8vVVUHDJueg6UHH683dvvdrhdxK+O0GZhsPHU= |
| AReUWLXQHtnTrZd+njoUNKcSY20q5TGVPDI= | AdydJB7ouQfwv2eCvD4eRSTFFQ+esCo5AZKucyYe6Som5e5BdEs= |
+--------------------------------------+------------------------------------------------------+

平文は2種類を2行ずつ投入しています。
Deterministicは2行ずつ結果が一致していますが、
NonDeterministicは全て結果が一致していません。
用途により使い分けられるので便利です。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1