Railscasts的"Scratch身份验证"有多安全?

use*_*154 2 ruby authentication ruby-on-rails devise

我正在权衡使用"Scratch身份验证"(在此Railscast中实现)与使用Devise的优缺点.

我正在使用自定义数据存储区,因此使用Devise并不像遵循自述文件那么简单.这需要编写一个自定义的ORM adapto r,这远非微不足道.

鉴于这一切,Railscast Auth从头开始似乎更容易实现.

那有多安全呢?

更新:我应该指出我正在使用Parse.com作为我的数据存储区.这意味着它们会处理散列密码并限制用户名的唯一性.

Fre*_*ung 5

他们都使用bcrypt来生成密码的盐渍哈希,唯一的区别是设计(默认情况下)使用更高的哈希成本(即需要更多的CPU周期来暴力破解它),但当然你可以轻松地将其添加到railscast代码中,因此在这方面大致相同.

railscast版本似乎很容易受到时间攻击的影响,因为只做==不会给你一个恒定的时间比较操作.简而言之,定时攻击是有效的,因为哈希完全错误的密码将比拒绝前一半字节正确的密码花费更少的时间来拒绝=(所以==在bailing之前必须考虑更多的字节).似乎任何这样的差异都会被网络延迟等变化引起的噪声所抹去,但是人们已经使用这些方法安装了真正的攻击来恢复密钥.

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

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

  • 关于你在这里描述的定时攻击的快速问题......据我所知,定时攻击要求你能够对比较的输入进行迭代,所以如果你得到正确的前n个字符,你应该能够修改只是第n + 1个字符进行后续猜测.也许我错过了一些东西,但这有什么用呢?如果正在对密码进行哈希处理(使用*any*哈希算法),则不能简单地修改第n + 1个字符来迭代攻击.这样做会给你一个全新的哈希.由于您没有比较攻击者控制的输入,我不确定定时攻击是如何工作的. (2认同)