- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们的应用程序使用 bcrypt 以哈希格式存储普通密码,成本(轮数)为 15。在我们的生产服务器上检查密码的有效性只需要 1 秒多一点的时间,这对于每一次 session Action 。
我们现在正在开发和保护我们的应用程序。在首次使用常用凭据(登录名和密码)登录后,我们将为用户提供设置 5 位密码的机会。
使用较低的 bcrypt 成本(即 13)来散列这些密码是否合理?
我的考虑:
最佳答案
Would it be reasonable to use a lower bcrypt cost (i.e. 13) to hash these passcodes?
简而言之,是的。或者完全废弃 bcrypt(见下文)。
我认为这里对 key stretching 存在一些混淆和 KDFs (即 bcrypt),以及它们与离线和在线攻击的关系。
bcrypt 等算法可以防止有人从您的服务器中提取哈希值并继续对其进行离线暴力破解或密码猜测攻击时密码被泄露。
Bcrypt 不能防止在运行时对您的应用程序进行密码猜测攻击。在这里,您可以使用服务器端应用程序逻辑来检测针对同一帐户的暴力破解,然后限制该尝试的速率。例如,一旦在特定时间段内对同一用户名进行了一定数量的错误猜测,就故意延迟响应。
The device registers itself on the server with a string consisting of time, device id and a random string.
假设设备 ID 是一个 128 位的 UUID,您已经拥有一个 128 位的标识符,如果适当随机,它实际上是不可破解的。然而,GUIDs are designed to be unique, not random正如您在其他问题中提到的那样,任何知道此值的人都已经破解了您的身份验证。
我会废弃它并使用加密安全伪随机数生成器 (CSPRNG) 简单地生成一个随机的 128 位字符串用作“安装 ID”。由于这已经很强大,因此无需对其进行加盐或通过密码扩展算法或 key 派生函数(如 bcrypt)运行它。服务器端存储版本的 SHA-256 哈希就足够了。
5 位密码可以用 17 位表示。 13 的 bcrypt 成本将有效地赋予此密码 30 位的强度。这远低于 NIST recommendation of 80 bits .
但是,让我们考虑一下这意味着什么。 Bcrypt 用于保护服务器端哈希不被使用单词列表(或在本例中为范围从 00000 到 99999 的数字列表)猜测。如果您的 128 位安装 ID 存储在服务器上,并且攻击者设法访问您的用户表,即使他们破解了存储在 bcrypt 中的 5 位密码,他们也无法以用户身份登录,因为他们不知道SHA-256 哈希是如何生成的——它们没有安装 ID。遍历每个可能的 128 位值并查明它是否散列为存储值是完全不可行的。彩虹表太大而无法存储 2128 组合。
为了让事情更简单,我很想放弃 bcrypt 来获取密码,并简单地将 SHA-256(密码 + 128 位随机安装 ID)
存储在服务器上。密码可以作为“安装 ID”的盐,因此用户更改密码将生成一个完全不同的哈希值,该哈希值存储在服务器端。
请注意,以上假设设备和帐户之间存在一对一关系。如果每个设备使用多个帐户,那么您应该为每个帐户添加一个额外的盐(比如 64 位)——否则选择相同密码的两个用户将具有相同的服务器端哈希值。还有一个额外的安全风险,因为“安装 ID”现在被另一个用户知道,以及与其他用户共享客户端设备所带来的所有额外风险(例如物理安全方面或恶意软件风险)。
关于security - 使用 bcrypt 为移动应用散列 5 位密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33731895/
密码散列的理想 bcrypt 工作因素是什么。 如果我使用因子 10,则在我的笔记本电脑上对密码进行哈希处理大约需要 0.1 秒。如果我们最终得到一个非常繁忙的网站,那么仅仅检查人们的密码就会变成大量
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
好吧,经过大量研究,我决定使用 bcrypt(请随意评论)在我的 PhoneGap 应用程序中散列和存储密码。 几天前,我偶然发现了 Bcrypt.net,它对我来说似乎“足够好”(再次,请随意发表评
我是 Ruby on Rails 的初学者,正在尝试向 http://ruby.railstutorial.org/ 学习我正在创建 example_app,但卡在了第 6 章。 我的Ruby版本:r
我是 Ruby on Rails 的初学者,正在努力学习 http://ruby.railstutorial.org/我正在创建 sample_app,但卡在了第 6 章。 我的 Ruby 版本:ru
我正在 Spring Hibernate MVC 中从事 Web 应用程序项目。我在 Spring security 中使用 Bcrypt 算法将编码密码存储在数据库中。 现在我想要解码该编码密码以停
我正在使用 sails js 框架来开发 Web 应用程序,并且我尝试安装 bcrypt 节点模块来进行密码哈希处理。但它显示以下错误 除了安装 python 或 VS c++ redistribut
我收到错误 Cannot find module 'bcrypt' in nodejs application 我尝试使用 npm install bcrypt 安装它,但仍然遇到问题 npm i b
我有一个 python 脚本,它将用户数据导入到 mongodb 中,该 mongodb 使用 bcrypt 来哈希用户的密码。 来自 mongodb 的数据也将在 Node.js Web 应用程序中
我想使用 Go 创建一个用户身份验证系统,但我无法登录帐户。我使用 bcrypt 来散列密码,然后将其保存到数据库 (MySQL)。当我想将它与插入的密码进行比较时,就会出现问题。我有这个错误:has
我尝试创建Minecraft 插件(这是我的第一个),但无法修复此错误: 因此,该插件编译良好,但是当代码必须执行此代码时: BCrypt.checkpw(mdp, result.getString(
嗨,我最近在我的项目中使用了 bcrypt npm 包的 bcrypt.genSalt 。使用 bcrypt.genSalt 的基本思想是为需要加密的密码生成 Salt。使用 bcrypt.genSa
这听起来像是一个奇怪的问题,我实际上不得不问这个感觉有点奇怪,但是在花了几个小时查看 MSDN 文档以了解添加的 bcrypt 例程之后在 Vista 中,我几乎得出结论,没有实际的 bcrypt 支
我想在我的 grails 项目中使用 bcrypt 散列算法,而不是它的 defaultSHA-256 消息摘要算法。要启用 bcrypt,您只需使用 grails install-plugin sp
关于bcrypt npm package ,我看到推荐使用异步版本。但是,我想真正了解两个版本在性能方面的差异(即事件循环、阻塞 I/O 等) 版本 1:异步 const hash = await b
我有一个问题,我可以在 node-bcrypt 和passport.js 中创建散列密码,但无法使用散列密码。 我使用 nodejs、express、mongodb、mongoose、passport
我目前正在尝试在我的 Spring Security 中使用 LDAP 实现 BCrypt。我的问题是 LDAP 是否支持此功能,如果支持,我该如何实现?查看下图,我没有将 BCrypt 视为 LDA
我创建了一个新的 Lumen 5.4 项目并尝试播种一些数据。在播种机中,我使用 bcrypt 来散列密码。但是当我运行 php artisan db:seed 时,我得到了这个错误: Call to
当我将 has_secure_password 添加到模型(继承自 ActiveRecord::Base)时,出现错误,指出“bcrypt-ruby 不是 bundle 的一部分”。 这里的日志是:
请帮我弄清楚为什么我无法在运行 ubuntu 14.04 的系统中安装 bcrypt 错误: somehostname@somehost:~$ pip install bcyrpt Collectin
我是一名优秀的程序员,十分优秀!