加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 仍然允许搜索的Rails加密列

发布时间:2020-12-16 21:00:28 所属栏目:百科 来源:网络整理
导读:我有一个rails应用程序,需要我加密数据库中的一些列. 基于许多示例,我已经拥有加密的用户密码和电子邮件.即使像我这样的菜鸟,这似乎也很容易. 具体的挑战是我正在为律师开发一个应用程序(实际上是一个atty),我想加密他们客户的名字和地址,这样如果数据库被盗
我有一个rails应用程序,需要我加密数据库中的一些列.

基于许多示例,我已经拥有加密的用户密码和电子邮件.即使像我这样的菜鸟,这似乎也很容易.

具体的挑战是我正在为律师开发一个应用程序(实际上是一个atty),我想加密他们客户的名字和地址,这样如果数据库被盗,那么这些数据是不可读的.问题是最终用户(律师)希望通过客户端进行搜索.

我假设基于我的要求,尽管存在争议(尽管可能缺乏知识),但数据库中的加密是正确的方法.我认为否则在应用程序中搜索将非常困难.似乎可以设置数据库,以便密钥可以在启动时从其他位置传递到数据库中,这样密钥就不在服务器上的某个文件中.

实际上,我甚至确信我正在寻找的那种加密是可行的还是实用的.我读了一下并搜索过,但到目前为止,我找不到明确的解决方案.以下是我看过的最有前途的事情.所有这些似乎都是强大而有创意请帮助我纠正任何错误的印象,并指出,如果存在,可能会有效的解决方案.一如既往,谢谢.

attr_encrypted

应用程序加密,但我不认为实际搜索是可能的.

pgcrypto

使用postgresql的数据库加密,但它不是Rails 4.0,我似乎无法做到这一点.不确定它会做我想做的事情.

jmazzi / crypt_keeper

使用postgresql的数据库加密,但不允许搜索可行的客户端数据.

解决方法

有一种叫做 blind indexing的技术你可以用它.这种方法的一个优点是数据库永远不会看到密钥.

这是我创建的Ruby implementation.您可以在表达式上创建索引以进行模糊搜索.

class User < ApplicationRecord
  blind_index :initials,attribute: :name,expression: ->(v) { v.split(" ").map(&:first) },...
  blind_index :phone_last4,attribute: :phone,expression: ->(v) { v.last(4) } ...
end

对你如何使用它有很大的选择性,因为它泄漏了某些行包含相同索引数据的事实.

这与执行LIKE查询不是100%相同.为LIKE查询编制索引的有效方法是trigrams.但是,如果您创建三元组并对其进行盲目索引,则攻击者可以使用频率分析来解密数据.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读