ZX1*_*12R 2 mysql security encryption ruby-on-rails ruby-on-rails-3
我有一个使用mysql的rails 3应用程序.该应用程序将客户的电话号码和电子邮件存储在表格中.我想加密字段而不是将它们存储为普通和直接值.这样,即使他/她可以访问数据库,该表对任何人都无用.
但还有另一个问题.使用电子邮件和电话号码查询记录很多,并编制索引.如何在不影响性能的情况下实现对字段的加密,并且仍然能够轻松搜索和匹配?
首先,请记住,如果有人获得了足够的访问权来读取您的代码文件,他可能会获得您的解密例程和密钥 - 您的加密只会保护您免受攻击者访问数据库而无需其他任何操作.
如果你想使用MySQL搜索部分邮件地址和电话号码,你就不能使用加密 - 如果数据以MySQL无法读取的方式加密,那么,MySQL无法读取,因此无法搜索它.
但是,您可以执行以下操作:
如果要查找带有电子邮件X的行,请选择email_hash = hash(X)的位置.如果您想知道行的电子邮件地址,请选择email_crypt并解密.
但是,这将允许攻击者测试某个电子邮件是否在您的数据库中(即他们可以强制散列).为了防止这种情况,您应该使用HMAC方法进行散列并保持密钥的密钥.
您现在可以想到"嘿,我可以通过加密普通电子邮件地址并查找包含相同加密字符串的行来跳过哈希并进行查找".不,你做不到.如果您对数据进行加密,则使用与数据一起存储的随机"IV",以确保如果两次加密相同的数据,则会得到不同的结果.您可以将IV设置为常量值,但这是使用加密技术的非标准方式,可能会导致安全问题,因此请勿这样做.此外,使用适当的链接模式,例如AES-CBC.
归档时间: |
|
查看次数: |
1719 次 |
最近记录: |