当前位置: 首页 > 知识库问答 >
问题:

最佳实践:加盐和加胡椒密码?

白丁雨
2023-03-14
hash_function($salt.hash_function($pepper.$password)) [multiple iterations]

注意:为了讨论的目的,假设应用程序和数据库存储在单独的机器上,不共享密码等。因此数据库服务器的破坏并不自动意味着应用程序服务器的破坏。

共有1个答案

段干宜
2023-03-14

好的,鉴于我需要一遍又一遍地写这个,我将做最后一个关于pepper的规范答案。

似乎很明显,peppers应该使哈希函数更加安全。我的意思是,如果攻击者只得到你的数据库,那么你的用户密码应该是安全的,对吗?似乎合乎逻辑,对吧?

这就是为什么这么多人相信辣椒是个好主意。“有道理”。

这就是为什么像PBKDF2这样的算法使用特殊操作来组合它们(在这种情况下是hmac)。

关键是,虽然这不是一件大事,但它也不是一件小事,只是扔来扔去。密码系统旨在避免“应该工作”的情况,而是专注于“设计工作”的情况。

虽然这看起来纯粹是理论上的,但实际上并非如此。例如,Bcrypt不能接受任意密码。因此,如果hash()返回二进制字符串,传递bcrypt(hash(pw),salt)确实会产生比bcrypt(pw,salt)弱得多的哈希。

因此,在算法被设计出来并由密码学家审查用于秘密值(peppers)之前,当前的算法不应该与它们一起使用。

复杂性是安全的敌人

信不信由你,复杂性是安全的敌人。制作一个看起来复杂的算法可能是安全的,也可能不是。但它不安全的可能性很大。

它要求您滚动自己的密码

由于目前没有算法支持pepper的概念,因此需要您编写算法或发明新的算法来支持pepper。如果你不能马上明白为什么这是一件非常糟糕的事情:

任何人,从最无知的业余爱好者到最好的密码学家,都可以创造出他自己无法破解的算法。

    null

在存储前加密输出哈希

在安全领域存在一种算法来处理我们上面所说的一切。是块密码。这很好,因为它是可逆的,所以我们可以旋转键(耶!可维护性!)。这很好,因为它是按设计使用的。这很好,因为它不给用户任何信息。

我们再看看那条线。假设攻击者知道您的算法(这是安全性所必需的,否则就是通过模糊实现安全性)。使用传统的pepper方法,攻击者可以创建一个哨兵密码,由于他知道盐和输出,他可以强行使用pepper。好吧,那是一个很长的机会,但有可能。有了密码,攻击者什么也得不到。由于盐是随机的,哨兵密码甚至不会帮助他/她。所以他们剩下的最好办法就是攻击加密的表单。这意味着他们必须首先攻击加密的哈希来恢复加密密钥,然后攻击哈希。但是有很多关于密码攻击的研究,所以我们想依靠它。

 类似资料:
  • 我想在C#中使用PBKDF2加胡椒和盐来散列密码。我对密码学有点陌生,所以如果我错了,请随时纠正我。 我之所以使用Rfc2898DeriveBytes类,是因为(根据其他Stackoverflow用户的说法)bcrypt和其他哈希算法在C#中不受本机支持和验证,因此可能会造成安全威胁。这篇文章的目的不是开始讨论哪种哈希算法是最好的。 我的目标是:每个密码都会得到一个随机的盐和胡椒,密码会经过一定数

  • 我已经使用Spring框架大约4年了,现在使用Spring Boot已经有几个月了。我的Spring MVC应用程序通常部署在Java EE容器上,如JBoss/WildFly或WebLogic。这样做允许我将JNDI用于数据源或任何其他涉及机密/密码的敏感数据。这使得我的应用程序基于其名称“消费”JNDI资源。 现在有了Spring Boot,尤其是对于自包含的微服务(嵌入式tomcat),这些

  • 我正在寻找一个简单、安全的解决方案,使用Node存储用户密码。我是一个密码学新手,但是一直在试图通过网上搜索拼凑出一个解决方案。我正在寻找一种验证,即我所提出的是一个具有基本(而不是银行、医院等)安全需求的web应用程序的可靠解决方案。这是: …以下是我做出的选择让我走到了这一步: 使用什么哈希算法? 根据这篇被广泛引用的文章,看起来领先的竞争者是PBKDF2、bCrypt和scrypt。我选择P

  • 问题内容: 我的用户数据库中有一些我希望进行加密的数据。要求时,大多数数据将需要解密,但是也有一些密码可以保持加密(过去我们会使用 pwdcompare, 但我相信现在已经过时了)。 我已经按照这里的步骤进行操作,所以现在我已经成功地加密了我的数据。 我不了解的是在运行时打开主密钥以加密/解密数据的正确方法。如果我想使用存储过程来检索加密的数据,该如何打开主密钥?我是否使用存储的proc参数传递主

  • 问题内容: 我想知道在带有OpenCV的Python或任何其他向图像添加高斯噪声或椒盐噪声的python图像处理库中是否存在某些函数?例如,在MATLAB中,存在直接功能可以完成相同的工作。 或者,如何使用带有OpenCV的Python向图像添加噪点? 问题答案: 该功能会在图像中添加高斯,椒盐,泊松和斑点噪声

  • 我最近用react启动了另一个项目,因为我有一点时间来摆弄,我使用了带有挂钩的功能组件。我没有任何问题,只有一件事我不确定我是否正确使用,下面是一个例子: 如果我喜欢每件事的处理方式,我想使用loadData()是肮脏的;就像在前面的例子中,我尝试使用effect来处理如下内容: 但后来我得到了一个警告,比如“loadData应该是useEffect的依赖项”。如果我省略了useEffect的第二