有没有办法过滤 aes 256 gcm 加密数据库中的数据?
Posted
技术标签:
【中文标题】有没有办法过滤 aes 256 gcm 加密数据库中的数据?【英文标题】:Is there a way to filter data in aes 256 gcm encrypted database? 【发布时间】:2021-12-03 13:20:06 【问题描述】:我有一个数据库,其中包含使用 aes 256 gcm 加密的敏感信息。但是我必须在将数据发送到前端之前对其进行过滤。目前,我获取所有数据并在应用程序中对其进行过滤。它现在工作正常。但我认为,当数据库变得更大时,将来可能会成为一个问题,而我目前解决这个问题的方法会很慢而且不是最优的。但我不知道如何在应用程序中加密的加密行中进行搜索。
例子:
id | email(not encrypted) | firstname(encrypted) |
---|---|---|
1 | qwerty@qwerty.com | DPTR0zNqreWoZUwajRcJJtMlgji7TrSuzcuPbDfIsqvc6g= |
2 | qwerty@qwerty1.com | DCAvCh1JewOIJl3EQprmgnfy9VT5r6BGFGuyqkBpicNM |
如果用户 1 的名字是 Patrick,而用户 2 的名字是 Joe,我如何让所有用户使用 SQL 查询,名字以 Pat 开头...
【问题讨论】:
你对每一行使用相同的键吗? IV是如何产生的?可以进行可搜索的加密,但是,您应该很好地定义您的模式和查询,以便真正可以帮助您。答案建议您将密钥发送到数据库服务器。这对您有安全风险吗?如果没有,为什么要加密? 我没有为每一行使用相同的键。 IV 是使用 node.js 加密函数 crypto.randomBytes(12) 生成的。 如果您不使用相同的密钥,那么您需要解密所有行才能看到匹配的行。有什么不使用 AES-GCM-SIV 的具体原因吗? SIV 防止使用继承自内部 CTR 模式的 GCM 模式的 IV 重用问题。 【参考方案1】:SELECT * FROM tablename WHERE AES_DECRYPT(firstname,[KEY])='Pat%'
这应该可以解决问题,它会解密每个名称并将其与给定的字符串进行比较。 请记住,您通过连接发送加密密钥,如果 sql 服务器与客户端位于同一台机器上,则它是安全的,否则您可以使用 f.e. SSL/TLS
【讨论】:
这是否能够使用 gcm 模式解密 256 位密码?另外,我忘了提到数据是用多个密钥加密的。我们每个月都会更改密钥。 好吧,我不知道您如何准确加密数据,但我想使用多个 AES_DECRYPTS 会有所帮助。此外,据我所知,gcm 模式仅用于性能,因此相同的输入相同的输出,但我对此并不了解。以上是关于有没有办法过滤 aes 256 gcm 加密数据库中的数据?的主要内容,如果未能解决你的问题,请参考以下文章
Nodejs AES-256-GCM 通过 webcrypto api 解密加密的客户端消息
golang 在golang中使用AES256 GCM加密文本