2013-08-30 30 views
2

我正在尝试编写一个Rails应用程序,它可以让您在Rails数据库中存储加密密码。当你想存储一个密码时,你会调用一个短语进行加密,并且它会向你显示加密字符串到底是什么,你可以将它与特定的网站或帐户名称一起存储,你可以参考它在桌子上。然后,当您需要密码时,您可以选择该网站/密码对并解密以检索密码。我的问题是这个下面的方案是否安全。这种加密方案在Rails应用中存储密码有多安全?

  1. 我将有这个模型(例如称为SecretKeeper),它将绑定到用户。
  2. 当SecretKeeper被初始化,它与FastAES对象的实例和一个密码初始化(例如@aes = FastAES.new(secret_phrase)
  3. 然后,当用户想要加密密码,SecretKeeper会再打电话Base64.urlsafe_encode64(@aes.encrypt([password].pack("m"))).slice(0..-2)返回编码字符串,然后将其存储在数据库中。
  4. 要进行解码,用户必须将加密的字符串与“主”密码一起传递,该密码与用于创建FastAES对象的secret_phrase分开。该主密码作为加密字符串存储在与用户关联的数据库中(使用与上面第3部分中所述相同的方法)。要验证此主密码,当用户尝试解密密码时,我会加密主密码并将其与数据库中的散列值进行比较,以查看它是否匹配。如果确实如此,则我继续致电@aes.decrypt(Base64.urlsafe_decode64("#{encoded}=")).ljust(8, "\x00").unpack("m").first并返回得到的字符串

    • 那么这是一个好主意吗?还是有什么我应该做的,以使其更安全?
    • 我也计划添加一个密码盐,它将以明文形式存储在数据库中。我应该计划加密吗?
+0

你为什么要加密*,而不是哈希,盐渍等? – delnan

+0

我需要能够解码密码才能显示给用户,例如这个工具是为了能够提醒用户他们对不同应用/网站的密码是什么(假设他们在每个站点使用不同的密码)。 – tanookiben

+1

我不能评论大部分的算法,但AES加密中缺乏IV是令人不安的。 http://stackoverflow.com/a/9050752/1517648 – Steve

回答

1

不,这不是一个安全的方案。

FastAES library不是一个严重的安全库 - 请参阅参考页上关于作者不了解安全性的说明。

对于初学者 - 该计划使用ECB,它不提供完整性和非常有限的机密性保护。

我建议看看像rbNaCl(它仍然有安全警告,因为它没有得到像NaCl一样的关注度,但是除了FastAES之外的世界)。

相关问题