客户端密码哈希

2024-01-06

我和我的一个朋友正在讨论是否应该在将 Web 应用程序用户的密码发送到我们的服务器之前对其进行预哈希处理。

我知道有多个问题已经解决了这个主题,但它们都是关于将其安全地传输到服务器。我们的想法不是关于传输安全性(我们使用 SSL),我们希望对客户端进行哈希处理,以防止“真实”密码到达我们的服务器。

这个想法是在 Twitter 宣布他们的错误导致密码以明文形式打印到日志文件时产生的。

我们目前正在讨论这个概念是否有意义,以及如果我们使用 SHA512 对其进行哈希处理,它会如何影响密码的安全性(就暴力破解而言)。

TL;DR:

我们希望在客户端对密码进行哈希处理,以防止我们的服务器以明文形式获取密码(我们使用 SSL 进行传输)。

这有意义吗?
什么算法最适合用于哈希?

然后,服务器端将使用 bCrypt 再次对经过哈希处理的密码进行哈希处理。


它100%有道理:事实上,这个概念已经有很多人提出了,但困难在于正确实施。如果你做错了,就会出现很多陷阱,最直接的一个就是容易受到 @swa66 描述的“传递哈希”的影响。为了防止这种情况,您需要对双方进行哈希处理。客户端哈希应该较慢(bcrypt、scrypt、argon2 或 pbkdf2),而服务器端哈希应该较快(sha256)。

EDIT:许多人在不了解其工作原理的情况下对此投了反对票,因此我现在在此处包含基本细节(之前我仅链接到其工作原理)。这个想法是在客户端应用 bcrypt 等慢速哈希,然后在服务器端应用 SHA256 等快速哈希。需要快速哈希来防止传递哈希攻击。如果发生数据库泄漏,攻击者要么通过散列来反转快速散列(不可能——违反了加密散列函数的单向属性),要么将原像强力强制为快速散列(不可能——大小为慢速散列的输出长度,例如 bcrypt 的 184 位),或暴力破解慢速散列和快速散列的组合 - 这使攻击者回到相同的位置,就好像整个计算已经发生一样服务器端。因此,我们并没有通过将繁重的计算转移到客户端来降低数据库泄漏时密码攻击的安全性。

我调查了许多这样的提案保护Web应用程序数据库密码的方法 https://eprint.iacr.org/2015/387.pdf。此外,我还分析了优点和缺点,并找出了之前未发现的弱点(帐户枚举),并提出了一种安全地执行此操作的独特方法。该研究基于多种来源,包括:

  • 安全身份验证:部分客户端密钥拉伸......请审查/批评我的想法 https://security.stackexchange.com/questions/43023/secure-authentication-partial-client-side-key-stretching-please-review-criti
  • 如何安全地散列密码? https://security.stackexchange.com/a/31846-- 请参阅客户端哈希部分
  • 客户端密码哈希 https://security.stackexchange.com/questions/23006/client-side-password-hashing/23012
  • Hacker News 上不同作者的讨论 https://news.ycombinator.com/item?id=7626587-- 请参阅 oleganza、mschuster91、crusso 等的评论...

你引用了 Twitter 的例子,GitHub 也做了类似的事情。当我写上面的论文时,防止服务器看到明文密码的最突出的例子是 Heartbleed,我在论文中对此进行了评论(第 1.3 节的底部)。

其他人随后进行了后续研究,发现了类似的想法——示例:客户端加服务器密码散列作为提高安全性以防止暴力攻击而不会使服务器过载的潜在方法 http://ithare.com/client-plus-server-password-hashing-as-a-potential-way-to-improve-security-against-brute-force-attacks-without-overloading-server/。没有人值得所有的功劳,但主要的结论是,如果你安全地做到这一点,这是一个好主意,但你确实需要了解风险(如果你没有阅读研究,很容易不安全地做到这一点)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

客户端密码哈希 的相关文章

  • CORS 到底如何提高安全性[重复]

    这个问题在这里已经有答案了 我确切地知道 CORS 是如何工作的 我知道它是在浏览器上实现的 并且我知道它禁止向其他来源发送 XMLHTTPRequest 除非远程来源允许它使用响应标头 Access Control Allow Origi
  • 使用 PHP 安全连接 MySQL 的最佳方法[重复]

    这个问题在这里已经有答案了 我想了解一下你们认为使用 PHP 连接到 MySQL 数据库的最安全方法 目前我正在做的方式是一个实用程序 PHP 文件 我将其包含在所有其他 PHP 文件的顶部 实用程序 PHP 文件是这样的 有什么建议么 建
  • 数据库文件和 ASP.NET 登录控件

    我正在尝试 ASP NET 登录控制教程 一切正常 但是 我不知道如何让登录控件使用我自己的数据库 SQL Server 2005 而不是使用它的 mdf 文件 我也不知道这个文件是从哪里创建的 因为它根本没有出现在我的解决方案中 如果我能
  • asp.net 中的 HTML 标签注入

    我的安全团队报告了以下代码的一个 html 标签注入安全问题 function ClosePopUp objBhID var pageName window location pathname var modalPopupBehavior
  • 身份验证中的随机数使用

    在基于摘要的身份验证中 随机数由服务器生成 然而 在基于 OAuth 的身份验证中 随机数是由客户端生成的 我想知道是否有人知道差异的原因 随机数用于使请求唯一 在没有随机数的身份验证方案中 恶意客户端可以生成一次请求并重放多次 即使计算成
  • Firebase API 密钥限制不适用于 Android 应用程序包名称和 SHA1 指纹

    我们正在使用 Google Firebase 获取我们应用程序的 CrashLytics 数据 以及通过google services json文件被提出作为一个安全问题 因为应用程序 apk 文件可以被逆向工程来获取该文件 然后攻击者可以
  • 当 .NET 项目开源时,谁应该拥有用于签署 .NET 程序集的私钥? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 更具体地说 是一个类库程序集 我最初的想法 让一些指定的管理员进行所有程序集签名 但是 当错误修复和新版本被编写时 二进制文件最终将依赖于它们的
  • 如何安全地存储和处理 JWT 密钥

    读完这篇文章后 JWT 什么是好的密钥 以及如何将其存储在 Node js Express 应用程序中 https stackoverflow com questions 30089604 jwt whats a good secret k
  • Ruby 的 OpenSSL::Random 种子是否足够?

    我对 Ruby 知之甚少 所以如果答案很明显 请原谅我 我注意到在http www ruby doc org stdlib 1 9 3 libdoc securerandom rdoc SecureRandom html http www
  • 正确使用 EncryptedSharedPreferences

    Android 最近发布了 EncryptedSharedPreferences 它自动加密 SharedPreferences 键 值数据 虽然这很好 但我发现我可以简单地连接 API 调用并检索解密的值 除了在调用 EncryptedS
  • 如何为 bcrypt.hashpw 设置盐?

    salt yhnqazolr123098765 password bcrypt hashpw password salt repeatpassword bcrypt hashpw repeatpassword salt 我在第二行遇到错误
  • python:PyPi公共模块:如何确定是否安全?

    我已经完成了我的 python 3 应用程序 它正在使用 PyPi 的多个公共模块 然而 在我将其部署到我公司的企业 将处理客户的凭据并访问第 3 方 API 之前 我需要尽职调查确保它们既安全又安全 我必须执行哪些步骤 验证 PyPi 模
  • 遭受xss攻击后如何恢复站点?

    最近我正在研究XSS攻击以及它们对网站的破坏性有多大 让我惊讶的是 网络 even SO 充满了关于如何防止xss攻击但没有相关资源说明如何在网站受到 xss 攻击后恢复网站 我遇到过一些事情 比如 将备份网站代码上传回服务器 下载整个网站
  • 生产环境的 Flask-Login 与 Flask-Security

    我正在构建一个功能 供用户注册 登录 验证和授权自己 特别是使用 Python Flask 作为后端 我找到了一些解决方案 例如flask login and flask security 据我了解 flask login实际上并没有进行任
  • 根据插入顺序迭代哈希?

    不想对条目进行排序 使用它也不会保留顺序 foreach my val keys hash 默认情况下 Perl 5 中的哈希值是无序的 您可以使用tie http perldoc perl org functions tie html a
  • 使用 tar 压缩带有密码的文件 tar.gz [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 I use tar czf test tar gz test 压缩test文件夹到test tar gz 现在 我想压缩为test tar
  • JavaScript 访问密码字段值是否被视为存在安全风险?

    如果安全 正确地存储密码是良好的风格和安全性 那么对于要求用户输入密码的网页来说不应该也是如此吗 考虑这个例子
  • 在 C# 中使用 SHA1 算法进行哈希处理

    我想哈希给定byte 数组与使用SHA1算法与使用SHA1Managed The byte 哈希值将来自单元测试 预期的哈希值是0d71ee4472658cd5874c5578410a9d8611fc9aef 区分大小写 我怎样才能实现这个
  • 强化文件中的跨站脚本

    我在控制器中有以下代码 参数 base64String fileName 是从浏览器发送的 var fileContent Convert FromBase64String base64String return File fileCont
  • C#:询问用户密码,然后将其存储在 SecureString 中

    在我目前为客户开发的小型应用程序中 我需要询问用户他的 Windows 登录用户名 密码和域 然后使用这些信息系统 诊断 进程 启动启动一个应用程序 我有一个带有 UseSystemPasswordChar 的文本框来屏蔽输入的密码 我需要

随机推荐

  • 如何去掉不必要的括号?

    Same as this https stackoverflow com questions 10999835 regular expression to remove multiple parenthesis但是JavaScript 几个
  • 将外部 JavaScript(来自 CDN)捆绑到 React 组件中

    有哪些选项可以将外部 javascript sdk 捆绑到 React 组件中 我尝试在index html中包含javascript并通过window xyz引用它 它运行良好 但我无法进行生产构建 因为 javascript 不是以这种
  • C# 中的 JSON-RPC 客户端示例代码

    我需要一个简单的 C JSON RPC 1 0 客户端 最好使用 NET 2 0 或更高版本 我查看了 JRock 0 9 他们有几个示例 包括 Yahoo reader 但示例演示的是 JSON 而不是 JSON RPC 我知道我可以使用
  • 如何从 SQL 转换为 NoSQL/MapReduce?

    我有使用关系数据库的背景 但最近开始涉足 CouchDB 并对一些非关系操作 在 SQL 中很简单 在 CouchDB 中并不是一流函数感到惊讶 如果您花点时间将下面的每个 SQL 语句映射到其 MapReduce 等效项 我将不胜感激 S
  • x86 汇编等式 vs =

    我正在上一门 x86 汇编语言课程 它的进展速度相当快 本书一直在做一件事 但没有提及它是如何工作的 那就是在定义数据时使用 equ 和 运算符 所以看起来 equ 是用来定义常量的 但是 是一样的吗 如果我有一些代码 data count
  • 文件下载器中的基本访问身份验证问题

    我在从互联网下载应用程序中的二进制文件 zip 文件 时遇到问题 我必须使用基本访问身份验证来授权对文件的访问 但服务器响应始终是 HTTP 1 0 400 Bad request String authentication this lo
  • 如何调试 Node.js 服务器?调试器跳过我的断点! (使用VSCode)

    我正在尝试使用自定义服务器调试 Next js 应用程序 该服务器通常使用dev执行的 Yarn 脚本node server js VSCode 包含 Node js 调试扩展和本指南 https code visualstudio com
  • Chart.js 在画布上单击时获取最近的点

    单击画布上的任意位置时有没有办法获得最近的点 也许以某种方式收获核心 最近 方法 谢谢 我想你会发现getElementsAtXAxis很有帮助 基本上 getElementsAtXAxis有一个非常相似的行为getElementsAtEv
  • html 表单 - 摆脱问号和方程式

    这是我的代码 if request path employees
  • C# xml 文档

    目的是什么 xml随组件一起提供的文档文件 dll files 我知道如何构建一个 例如这里 http msdn microsoft com en us library aa288481 28VS 9 0 29 aspx 但是它们有什么用呢
  • 如何确定 Node.js 中导致 UnhandledPromiseRejectionWarning 的原因?

    我已经围绕 async await 库构建了我的 Node js 应用程序 并且它在大多数情况下都运行良好 我遇到的唯一麻烦是 每当未履行承诺时 我都会收到以下错误的一些变体 node 83333 UnhandledPromiseRejec
  • C#.Net 面板控制和 MDI 子表单 - 问题

    您好 我被困在带有面板控制的 MDIform 中 我有一个面板控件停靠 填充 到父 MDI 窗体 当我尝试使用菜单单击事件打开新的子窗体时 子窗体不会显示在 MDI 容器中 经过几次调试 我将面板控件的visible属性设置为false 现
  • 将 RCurl 与 SFTP 结合使用

    我正在尝试使用ftpUpload第一次在 RCurl 包中 我尝试访问的站点使用 sftp 协议 我已确保安装包含建立安全连接功能的 libcurl 版本 SFTP 被列为 RCurl 可用的协议之一 curlVersion protoco
  • Sed - 用充满奇怪字符的变量替换字符串

    我正在使用 sed 将文件中的字符替换为变量 该变量基本上是读取文件或网页的内容 其中包含多个类似散列的字符串 如下所示 这些字符串是随机生成的 define AUTH KEY CVo BO Qt1B GE h2 yU7h 5 wRV gt
  • 为什么与简单的 Rcpp 实现相比,zoo::rollmean 慢?

    zoo rollmean是一个有用的函数 它返回时间序列的滚动平均值 对于矢量x长度n和窗口大小k它返回向量c mean x 1 k mean x 2 k 1 mean x n k 1 n 我注意到我正在开发的一些代码似乎运行缓慢 因此我使
  • 如何修复 Android BLE SCAN_FAILED_APPLICATION_REGISTRATION_FAILED 错误?

    大多数时候它工作得很好 但有时我在尝试发现 BLE 设备时会遇到此错误 02 12 18 00 41 952 16178 16339 com icrealtime allie W BleRpcConnectionFactory Starti
  • 应用agones舰队时Kubectl错误:确保首先安装CRD

    我正在使用 minikube docker 驱动程序 和 kubectl 来测试 agones 舰队部署 运行时kubectl apply f lobby fleet yml 当我尝试应用任何其他 agones yaml 文件时 我收到以下
  • 从 Powershell 调用带有很长的可变参数列表的程序?

    我目前正在尝试将一系列批处理文件转换为 powershell 脚本 我想递归地为目录中存在的源文件运行编译器 编译器需要一长串参数 问题是 我希望参数是可变的 这样我就可以根据需要更改它们 这是批处理文件中的典型调用 为了可读性和长度而进行
  • IFormFile 的 Asp.Net Core swagger 帮助页面

    我正在尝试设置 swagger 来测试具有 IFormFile 属性的模型 例如我有下一个 api 方法 HttpPost public ApiResult
  • 客户端密码哈希

    我和我的一个朋友正在讨论是否应该在将 Web 应用程序用户的密码发送到我们的服务器之前对其进行预哈希处理 我知道有多个问题已经解决了这个主题 但它们都是关于将其安全地传输到服务器 我们的想法不是关于传输安全性 我们使用 SSL 我们希望对客