Ruby on rails 在Rails应用程序中存储密码的加密方案有多安全?

Ruby on rails 在Rails应用程序中存储密码的加密方案有多安全?,ruby-on-rails,security,encryption,cryptography,Ruby On Rails,Security,Encryption,Cryptography,我正在尝试编写一个Rails应用程序,它将允许您在Rails数据库中存储加密的密码。当您想要存储密码时,您将对一个短语调用encrypt,它将准确地显示生成的加密字符串,您可以将其与特定网站或帐户名一起存储,并且您可以在表中引用它。然后,当您需要密码时,可以选择该网站/密码对并对其解密以检索密码。我的问题是,以下这项计划是否安全 例如,我将有一个名为SecretKeeper的模型,它将绑定到一个用户。 当SecretKeeper被初始化时,它会被一个FastAES对象的实例和一个密码短语(例如@

我正在尝试编写一个Rails应用程序,它将允许您在Rails数据库中存储加密的密码。当您想要存储密码时,您将对一个短语调用encrypt,它将准确地显示生成的加密字符串,您可以将其与特定网站或帐户名一起存储,并且您可以在表中引用它。然后,当您需要密码时,可以选择该网站/密码对并对其解密以检索密码。我的问题是,以下这项计划是否安全

例如,我将有一个名为SecretKeeper的模型,它将绑定到一个用户。 当SecretKeeper被初始化时,它会被一个FastAES对象的实例和一个密码短语(例如@aes=FastAES.newsecret_)初始化 然后,当用户想要加密密码时,SecretKeeper将调用Base64.urlsafe_encode64@aes.encrypt[password].packm.slice0..-2返回编码字符串,然后将其存储在数据库中。 要解码,用户必须传入加密字符串和主密码,主密码与用于创建FastAES对象的密码短语分开。此主密码以加密字符串的形式存储在与用户关联的数据库中,方法与上面第3条所述相同。要验证此主密码,当用户尝试解密密码时,我会加密主密码,并将其与数据库中的哈希值进行比较,以查看是否匹配。如果确实如此,我将首先调用@aes.decryptBase64.urlsafe_decode64{encoded}=.ljust8,\x00.unpacm.first并返回结果字符串

这是个好主意吗?或者我应该做些什么来让它更安全? 我还计划添加一个密码salt,它将以明文形式存储在数据库中。我是否也应该对其进行加密?
不,这不是一个安全的方案

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

首先,该方案使用,它不提供完整性和非常有限的保密保护


我建议您看看这样的东西,它仍然有安全注意事项,因为它没有像NaCl那样受到足够的关注,但它与FastAE不同。

为什么您要加密,而不是散列、盐析等?我需要能够解码密码以显示给用户,例如,该工具能够提醒用户不同应用/网站的密码是什么,假设每个网站使用不同的密码。我不能对大多数算法发表评论,但AES加密中缺少IV是令人不安的。如果我理解正确,秘密阶段是在你的应用程序中生成并存储在某个地方?我对密码学的理解非常基础,但加密/解密不是通常在客户端完成吗?例如1Password或LastPass。如果所有的加密都是通过你的服务器完成的,那么在通过互联网传输未加密的信息时,会有一个巨大的缺口,对吗?还是我在这里遗漏了什么?正确使用密码存储应用程序是一项非常复杂的任务,有很多陷阱——看看像和这样的应用程序。