Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Encryption 大查询中的字段级加密_Encryption_Google Cloud Platform_Google Bigquery_Aes - Fatal编程技术网

Encryption 大查询中的字段级加密

Encryption 大查询中的字段级加密,encryption,google-cloud-platform,google-bigquery,aes,Encryption,Google Cloud Platform,Google Bigquery,Aes,我们的团队目前正在探索在BigQuery中在字段级别加密PII数据的方法,我们发现使用以下方法进行加密/解密: 在将AES CBC加密和解密部署到我们的产品中之前,我尝试在大查询中使用Crypto JS库对其性能进行基准测试。我们发现,与通常的查询相比,随着数据数量的增加,每个记录的加密和解密数据的速率呈指数增长。但是,随着要处理的数据数量的增加,每个记录的处理进度和记录处理时间都在提高 由于没有关于这方面的可用文档,社区中是否有人可以帮助提供更好的方法、优化查询以及在大查询中使用字段级加密和解

我们的团队目前正在探索在BigQuery中在字段级别加密PII数据的方法,我们发现使用以下方法进行加密/解密:

在将AES CBC加密和解密部署到我们的产品中之前,我尝试在大查询中使用Crypto JS库对其性能进行基准测试。我们发现,与通常的查询相比,随着数据数量的增加,每个记录的加密和解密数据的速率呈指数增长。但是,随着要处理的数据数量的增加,每个记录的处理进度和记录处理时间都在提高

由于没有关于这方面的可用文档,社区中是否有人可以帮助提供更好的方法、优化查询以及在大查询中使用字段级加密和解密的最佳实践

BigQuery现在支持。从文档中,这里是一个自包含的示例,它创建一些密钥集并使用它们来加密数据。实际上,您可能希望将密钥集存储在一个真实的表中,以便以后可以使用它们来解密密文

WITH CustomerKeysets AS (
  SELECT 1 AS customer_id, KEYS.NEW_KEYSET('AEAD_AES_GCM_256') AS keyset UNION ALL
  SELECT 2, KEYS.NEW_KEYSET('AEAD_AES_GCM_256') UNION ALL
  SELECT 3, KEYS.NEW_KEYSET('AEAD_AES_GCM_256')
), PlaintextCustomerData AS (
  SELECT 1 AS customer_id, 'elephant' AS favorite_animal UNION ALL
  SELECT 2, 'walrus' UNION ALL
  SELECT 3, 'leopard'
)
SELECT
  pcd.customer_id,
  AEAD.ENCRYPT(
    (SELECT keyset
     FROM CustomerKeysets AS ck
     WHERE ck.customer_id = pcd.customer_id),
    pcd.favorite_animal,
    CAST(pcd.customer_id AS STRING)
  ) AS encrypted_animal
FROM PlaintextCustomerData AS pcd;
编辑:如果要使用带有PKCS填充的AES-CBC进行解密,则不清楚您在示例中使用的填充类型。您可以使用创建密钥集,然后调用AEAD.DECRIPT_字符串或AEAD.DECRIPT_字节。例如:

SELECT
  AEAD.DECRYPT_STRING(
    KEYS.ADD_KEY_FROM_RAW_BYTES(b'', 'AES_CBC_PKCS', b'1234567890123456'),
    FROM_HEX('deed2a88e73dccaa30a9e6e296f62be27db30db16f76d3f42c85d31db3f46376'),
    '')

这将返回abcdef。IV预计将是密文的前16个字节。

请提交链接自的表单,以访问用于加密和解密的内置函数。这对加密数据很有用,但我也尝试从big query中解密数据AES128 CBC。如何使用初始化向量从json创建密钥集?我添加了一个示例。是的!我也使用PKCS填充,并且能够用IV解密密文。但是,我尝试不创建新的密钥集来加密数据AES_CBC_PKCS。当我传递函数KEYS.ADD_KEY_FROM_RAW_BYTESb'AES_CBC_PKCS',b到AEAD.ENCRYPT。我收到一个错误AEAD.ENCRYPT失败:不支持使用AES-CBC密钥进行加密。我遗漏了什么吗?是的,你不能用那种类型的密钥加密。正如前面解释的,你不能用那种类型的密钥加密。最好使用新的密钥集重新加密数据,因为AES-CBC不再是一个好选项。
WITH CustomerKeysets AS (
  SELECT 1 AS customer_id, KEYS.NEW_KEYSET('AEAD_AES_GCM_256') AS keyset UNION ALL
  SELECT 2, KEYS.NEW_KEYSET('AEAD_AES_GCM_256') UNION ALL
  SELECT 3, KEYS.NEW_KEYSET('AEAD_AES_GCM_256')
), PlaintextCustomerData AS (
  SELECT 1 AS customer_id, 'elephant' AS favorite_animal UNION ALL
  SELECT 2, 'walrus' UNION ALL
  SELECT 3, 'leopard'
)
SELECT
  pcd.customer_id,
  AEAD.ENCRYPT(
    (SELECT keyset
     FROM CustomerKeysets AS ck
     WHERE ck.customer_id = pcd.customer_id),
    pcd.favorite_animal,
    CAST(pcd.customer_id AS STRING)
  ) AS encrypted_animal
FROM PlaintextCustomerData AS pcd;