来自Railscasts的"Authentication from Scratch"有多安全?



我正在权衡使用"Authentication from Scratch"(在这个Railscast中实现)和使用design的利弊。

我使用的是自定义数据存储,所以使用设计并不像遵循README那么简单。这将需要编写一个定制的ORM适配器,这绝非易事。

考虑到所有这些,从头开始实现Railscast Auth似乎要容易得多。

那么安全吗?

Update:我应该指出,我使用Parse.com作为我的数据存储。这意味着它们负责散列密码和限制用户名的唯一性。

它们都是通过使用bcrypt来生成密码的咸散列来工作的,唯一的区别是(默认情况下)对散列使用更高的成本(即,它将花费更多的cpu周期来进行暴力破解),但是当然你可以很容易地将其添加到railscast代码中,因此在这方面大致相同。

railscast版本似乎很容易受到定时攻击,因为只做==不会给你一个常数时间比较操作。简而言之,定时攻击之所以有效,是因为哈希值完全错误的密码比前一半字节正确的密码需要更少的时间来拒绝==(因此==在退出之前必须考虑更多字节)。似乎任何这样的差异都会被网络延迟变化等噪声所消除,但是人们已经使用这些方法进行了真正的攻击来恢复密钥。

你显然可以从设计中借用安全比较位,但它确实表明存在不明显的问题。

显然,设计为您提供的不仅仅是身份验证!

该截屏使用了bcrypt- Ruby库,这是基于Blowfish密码的bcrypt的Ruby实现。bcrypt的好处是,破解由该系统生成的密码在计算上是昂贵的,并且可以根据需要增加生成这些密码的成本,以牺牲生成时间所需的计算时间为代价。

更多信息,请查看BCrypt::Password RDoc

最新更新