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は全て結果が一致していません。
用途により使い分けられるので便利です。