Как расшифровать столбцы в BigQuery?

У меня есть несколько зашифрованных столбцов в BigQuery, которые я хочу расшифровать с помощью функций BigQuery.

Для их шифрования используется механика AES 256. Используемый вектор кодируется в UTF8. Полученные данные шифруются в Base64.

Что я хочу сделать, так это расшифровать поля, переданные мне в BigQuery, с помощью функций, не прибегая к дополнительным шагам по их расшифровке в другом месте, а затем интегрируя их обратно в BigQuery. Обратите внимание, что зашифрованные столбцы, к которым у меня есть доступ в BigQuery, имеют строковый тип.

Я читал о некоторых функциях, которые могут расшифровывать в BigQuery, таких как AEAD.DECRYPT_BYTES и AEAD.DECRYPT_STRING, и мне интересно, могут ли они помочь в моем случае.

Есть ли способ сделать это? Если да, можете ли вы провести меня через процесс?

P.S. Это не фактические значения ключа и вектора, а просто похожий пример.




Ответы (2)


Вот пример того, как расшифровать с помощью AES-CBC с дополнением PKCS. Мне не ясно, есть ли у вас действительный ключ/зашифрованный текст в вашем примере, так как я не могу расшифровать vector с помощью этого ключа:

SELECT
  AEAD.DECRYPT_STRING(
    KEYS.ADD_KEY_FROM_RAW_BYTES(
      b'', 'AES_CBC_PKCS', FROM_BASE64('dfrBArd8b6YZFDGTYrZtQa==')),
    FROM_BASE64('/FCM1XMvr+rHwZx'), '');

Вот автономный пример, который действительно работает:

WITH EncryptedInput AS (
  SELECT FROM_HEX('deed2a88e73dccaa30a9e6e296f62be27db30db16f76d3f42c85d31db3f46376') AS ciphertext,
    b'1234567890123456' AS key UNION ALL
  SELECT FROM_HEX('deed2a88e73dccaa30a9e6e296f62be2ea3f4c2ac2c8863306fd9ff87e10497b61d86111fafd0d0fe0046d7e199044ec'),
    b'1234567890123456' UNION ALL
  SELECT FROM_HEX('0102030405060708090a0b0c0d0e0f1073d8712936ea9899952e97284288c1cd7b7cbfff0a53ae87a19454f7d84082a07a25fc01031b5e08c6b7ce6520989b82'),
    b'98765432101234567890123456789012' UNION ALL
  SELECT NULL, b'1234567890123456' UNION ALL
  SELECT FROM_HEX('deed2a88e73dccaa30a9e6e296f62be27db30db16f76d3f42c85d31db3f46376'),
    NULL
)
SELECT AEAD.DECRYPT_STRING(KEYS.ADD_KEY_FROM_RAW_BYTES(b'', 'AES_CBC_PKCS', key), ciphertext, '') AS plaintext
FROM EncryptedInput;
person Elliott Brossard    schedule 30.08.2019
comment
Имейте в виду, что пользовательский интерфейс BigQuery будет отображать значения столбца BYTES в формате base64, но на самом деле они не будут содержать base64, если вы явно не закодировали их таким образом. Вам может не понадобиться использовать FROM_BASE64. - person Elliott Brossard; 02.09.2019
comment
У вас есть пример того, как вы можете создать зашифрованный текст в python? Я записываю данные в bigquery из python для последующей расшифровки, но я не могу добиться того же, что и вы, предоставляя ключ и зашифрованный текст, сгенерированный в python. - person chaooder; 20.04.2021

Я не уверен, что вы можете сделать это таким образом.

Я думаю, что функции, о которых вы говорите, предназначены для другого варианта использования. Bigquery шифрование AEAD предназначен для шифрования данных. разных сущностей, использующих разные ключи для каждой сущности, но вы могли бы использовать его, думая, что единственная сущность — это вы.

В вашем случае вы можете переработать решение, заставив человека, шифрующего данные, использовать эти функции и набор ключей, созданный с использованием KEYS.NEW_KEYSET(key_type). Вам понадобится дополнительная таблица для хранения наборов ключей для шифрования/дешифрования данных.

person Alessandro    schedule 30.08.2019