首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加密/混淆的想法会导致Presto查询?

加密/混淆的想法会导致Presto查询?
EN

Stack Overflow用户
提问于 2018-01-23 04:58:55
回答 3查看 1.7K关注 0票数 3

设想情况:

  1. 我有一个Presto表,我将查询和发送结果给各种半信任的政党。
  2. 这些半信半疑的人会分析数据并把结果还给我。
  3. 本表中的一些数据是“半私有”的--如果被发现,不会造成真正的伤害,但仍然是私有的(比如设备的名称)。
  4. 这个“半私有”数据的签名对于“按条款分组”是很重要的,但是实际数据本身对半信任方并不重要。
  5. 当这些被分析的数据返回给我时,我需要能够解密/去混淆这个“半私有”数据,以便对其采取行动。

问题:

是任何熟悉加密/混淆一列数据的方法的人吗?,它完全是在Presto查询中进行解密/去混淆的。

我知道我可以轻松地对查询的结果进行后置处理,并自己加密/混淆它,但如果可能的话,我想利用Presto的分布式执行模型。

加密/混淆的级别不需要是不可穿透的--只是比base64编码复杂一些(最好有一个简单的秘密)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-01-23 21:18:17

经过进一步的研究,我偶然发现了异或密码,它似乎完全可以在Presto查询中实现。

我已经用以下概念的证据对它进行了简短的测试:

代码语言:javascript
复制
WITH

private_data AS (
  SELECT 'some private string' as private
),

encrypted_data AS (
  SELECT
  zip_with(
    regexp_extract_all(private, '.'),
    regexp_extract_all(substr('a27e6f329c03461688d6866203aasdljfasaslksa7982k3lkjsd987fok2jlkj0sdf9c59c', 1, length(private)), '.'),
    (x, y) -> 
      bitwise_xor(codepoint(cast(x as varchar(1))), codepoint(cast(y as varchar(1))))
  ) as encrypted_data
  FROM private_data
),

decrypted_data AS (
  SELECT
  array_join(
    zip_with(
      encrypted_data,
      regexp_extract_all(substr('a27e6f329c03461688d6866203aasdljfasaslksa7982k3lkjsd987fok2jlkj0sdf9c59c', 1, cardinality(encrypted_data)), '.'),
      (x, y) -> 
        chr(bitwise_xor(x, codepoint(cast(y as varchar(1)))))
    ),
    ''
  ) as decrypted_string
  FROM encrypted_data
)

SELECT
*
FROM private_data, encrypted_data, decrypted_data

虽然我想把它简化得更简单一些,但它似乎很有效。有人能找到优化它的方法吗?(例如:从长度为1的varcharvarchar(1)的转换似乎很荒谬,但如果我不这样做,它会抱怨。此外,regexp_extract_all也是将varchar转换为数组的唯一方法。)

票数 2
EN

Stack Overflow用户

发布于 2018-01-23 09:12:01

我认为您可以提供您自己的UDF (用户定义函数),它可以执行一些对称加密。这里有如何实现这样的函数的文档:https://prestosql.io/docs/current/develop/functions.html,这里有一些Presto的示例项目。

那么在普雷斯托你可以:

代码语言:javascript
复制
SELECT decrypt_your_udf_function(private_column_encrypted, 'your password')FROM table;
INSERT INTO table (private_column_encrypted) SELECT encrypt_your_udf_function(private_column, 'your password') FROM ...
票数 0
EN

Stack Overflow用户

发布于 2019-04-27 07:59:56

我已经创建了一个示例项目,其中包含用于基本加密和解密的UDF,您可以找到它这里。以下是一些想法:

  1. 使用AWS KMS加密和欺骗数据。对于加密,如果我们能够动态地获得KMS密钥id,而不是将它作为输入或存储在jar本身中,则会更好。
  2. 如果这太昂贵,那么替代方法是开发自定义加密逻辑,并在presto代码中使用该逻辑。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48394525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档