客户端密码哈希

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(使用前将#替换为@)

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

  • Rails 4 - 将地址保存为数据库中的一列

    我是 Rails 新手 正在开发一个简单的应用程序 我的 ERD 中有一个名为 Client 的模型 并且希望保存每个客户的地址 我最初的想法是将地址保存为单独的字段 即 rails g model Client address first
  • 保护 JSF 应用程序的安全

    我的一位自由职业者朋友邀请我加入他的 JSF 2 0 项目 我正在慢慢加快速度并将各个部分整合在一起 来自 Windows Forms NET 世界 至少可以说 我还有很多东西需要学习 我主要担心的是对于如何保护 JSF 应用程序缺乏明显的
  • 在同步函数中使用 javascript `crypto.subtle`

    在javascript中 是否可以使用浏览器内置的sha256哈希 https developer mozilla org en US docs Web API SubtleCrypto digest Converting a digest
  • 在 MySQL 表中存储用户密码的最佳 PHP 哈希方法?

    我已经阅读 Stack Overflow 问题大约 15 分钟了 每一个问题似乎都与我之前读到的问题相矛盾 Bcrypt SHA1 MD5 等 我目前对我的密码进行 MD5 但我想让我的数据库在发生泄露时更加安全 我知道这个问题已经被问了一
  • 出于安全目的,您是否有理由不执行自己的算法来打乱 ID?

    我计划实现我自己的非常简单的 哈希 公式 为具有多个用户的应用程序添加一层安全性 我目前的计划如下 用户创建一个帐户 此时后端会生成一个 ID ID 通过公式运行 假设 ID 57 8926 36 7 或同样随机的东西 然后 我将新的用户
  • TeamCity 用户名/密码

    你好 我很久以前就在我的家用电脑上安装了 teamcity 我现在尝试再次重新使用它 但我忘记了管理员用户名和密码 是否有默认的管理员用户名 我怎样才能得到密码 Thank 在 TeamCity 8 中 您可以以超级用户身份登录并以这种方式
  • 用于防止滥用的 Servlet 过滤器? (DoS、垃圾邮件等)

    我正在寻找一个 Servlet 过滤器库 它可以帮助我保护我们的 Web 服务免受未经授权的使用和 DDoS 攻击 我们的网络服务有 授权客户 因此理想情况下 过滤器将帮助检测未经授权或行为不当的客户 或检测使用同一帐户的多个人 此外 我们
  • Symfony 5.4 Security Bundle,注册后无法登录

    我在 5 4 版本上构建空的新项目 我使用这些命令来构建项目 composer create project symfony skeleton 5 4 testapp54 cd testapp54 composer require weba
  • 非加密用途的最快哈希值?

    我本质上是在准备要放入数据库的短语 它们可能格式错误 所以我想存储它们的简短散列 我将简单地比较它们是否存在 所以散列是理想的 我假设 MD5 在处理 100 000 个请求时相当慢 所以我想知道散列短语的最佳方法是什么 也许推出我自己的散
  • 如何将两个不同的哈希数组中的值添加在一起?

    我有两个哈希数组 哈希值的键不同 player scores1 first name gt Bruce score gt 43 time gt 50 first name gt Clark score gt 45 minutes gt 20
  • 将 Python 中的 SHA 哈希计算转换为 C#

    有人可以帮我将以下两行 python 代码转换为 C 代码吗 hash hmac new secret data digestmod hashlib sha1 key hash hexdigest 8 如果您有兴趣 其余的看起来像这样 us
  • NodeJS 在目录中递归地哈希文件

    我能够实现目录中的递归文件遍历 即探索目录中的所有子目录和文件 为此我使用了answer https stackoverflow com questions 5827612 node js fs readdir recursive dire
  • 清理 html 字符串中的所有脚本

    HTML5 剪贴板很棒 但我正在寻找一种使其安全的方法 用户正在将文本 html 粘贴到我的网页中 这允许他们粘贴图像 表格等 我正在寻找一种方法 在将粘贴的内容添加到页面之前删除所有脚本 我需要删除
  • 重置 MySQL root 密码不起作用

    我花了很多时间阅读并尝试了数十种重置 root 密码的方法 但我一无所获 我发现 并尝试过 的最完整的说明如下 顺便说一句 我在 Win7 32 位上运行 MySQL 5 5 我创建了一个文件 c mysqlinit txt 其中包含两行
  • 受信任的 1.5 小程序可以执行系统命令吗?

    如果是的话 这个能力有什么限制吗 具体来说 我需要以 Mac OSX 为目标 我以前用过这个在 Windows 系统上启动东西 但从未在 Mac 上尝试过 public void launchScript String args Strin
  • python:API 令牌生成及其危险

    我正在按照 Flask Web Development 一书来实现基于令牌的身份验证 基本上 用户使用 HTTP 基本身份验证对其进行身份验证 并为其生成令牌 s Serializer app config SECRET KEY expir
  • PHP - hash_pbkdf2 函数

    我正在尝试使用此 php 函数执行一个函数来哈希密码 http be php net manual en function hash pbkdf2 php http be php net manual en function hash pb
  • 获取express.js中间件请求中“#”后的url

    我需要获取服务器中间件上的 url 使用express js 我用req url但是当 url 开头时 some urlreq url 返回 与req path 有没有办法获取url之后 在express js中 No URL 中以 符号永
  • Rails 安全:完全避免大规模分配

    我倾向于不需要批量分配 http guides rubyonrails org security html mass assignment我的生产代码中的功能 在我的测试代码中 我经常使用它 但在这些情况下我do想要设置任意列 因此 如果在
  • 保护 ASP.NET 网站中 Elmah RSS 源的安全

    我遵循了这个问题的答案在 ASP NET 网站中保护 Elmah 的安全 https stackoverflow com questions 1245364 securing elmah in asp net website限制对 elma

随机推荐

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

    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 我们希望对客