Algorithm 密码、密码和安全概念
介绍
Algorithm 密码、密码和安全概念
介绍,algorithm,security,encryption,hash,Algorithm,Security,Encryption,Hash,今天我做了很多研究,学到了很多关于散列和加密的知识(以及两者之间的重要区别)。我学到的一件事是:人们不同意腌制的功效
在对此的回应中(尤其是在对公认答案的评论中),人们得出结论——似乎——在数据库中散列密码旁边存储随机生成的salt是保护密码的最佳方式。有几个资源说明了这一点,这将是我问题的基础
在这一点上,公认的答案是,通过访问所有可能的散列数据值,salt并不能使事情变得更加安全(当然,这将是一个不可行的大量存储数据)。SALT和哈希算法的目的是增加单个密码输入的可能性,使基于字典的攻击对数
今天我做了很多研究,学到了很多关于散列和加密的知识(以及两者之间的重要区别)。我学到的一件事是:人们不同意腌制的功效
在对此的回应中(尤其是在对公认答案的评论中),人们得出结论——似乎——在数据库中散列密码旁边存储随机生成的salt是保护密码的最佳方式。有几个资源说明了这一点,这将是我问题的基础
在这一点上,公认的答案是,通过访问所有可能的散列数据值,salt并不能使事情变得更加安全(当然,这将是一个不可行的大量存储数据)。SALT和哈希算法的目的是增加单个密码输入的可能性,使基于字典的攻击对数据库的效率大大降低(这里,我使用术语“基于字典”更宽泛地说,指的是一个表,不管是彩虹表、用于暴力攻击的表(每次重新计算),还是一个简单的查找表
零碎
据我所知,加密良好的密码需要三(3)件事:
要散列李>
与盐一起混合李>
与随机盐一起散列(每个密码输入一个盐)
为了让破解者理解存储的哈希结果,他或她需要四(4)件事:
了解散列算法
盐的知识
正确的明文密码值(可能作为基于字典的攻击的输入提供(通过与salt结合的算法运行字典))
安全位
分歧似乎围绕着如何处理盐,即在哪里储存盐。在堆栈溢出中我经常看到的短语是“模糊安全”——这似乎是salt的前提(“让我们让这一点信息变得不那么‘可见’”);然而,从我的阅读中,我逐渐明白,默默无闻的安全并没有真正起作用。这样做的前提似乎是:如果攻击者能够访问该算法,并且——如果提供了——salt,那么他或她可以找到它
因此,安全性的前提不仅仅是混合和更改值,还包括数据库、事务或服务器使用何种方法来阻止以下类型的攻击:
把盐让给攻击者
允许攻击者对数据库进行暴力攻击
另一位用户评论说,代码是否暴露给攻击者并不重要,因为良好的代码或良好的安全算法将阻止攻击成功
因此,安全是三(3)件事情的组合:
阻止访问存储所有内容的服务器
创建一个防止暴力进入数据库的算法
加密事务信息
散列(模糊)敏感数据
对安全性的担忧似乎源于这样一种假设,即攻击者可以访问数据库本身
场景:我有一本字典,你的盐,还有你的哈希算法。抓取你的密码应该没有什么麻烦(这就是为什么我们努力阻止暴力攻击)
因此,根据这些结论(现在在堆栈溢出砧板上),我的问题是:
问题
安全性是否也包括保护代码的位置,例如访问哈希算法
为什么为每个密码生成一个随机salt很重要,特别是在数据库已经公开的情况下,即salt的随机性真的会增加信息的安全性吗?这是否仅仅是随机盐导致攻击时间呈指数级增长的问题(例如,降低攻击吸引力)
盐的安全性似乎在于攻击者没有它,而不是严格意义上的随机性
为什么要将盐存储在数据库中呢
从本质上讲,所有这些安全“东西”(关于散列的功效等)都只是神话吗?也许我只是回应了这样一个想法:没有什么东西真的能够完全防止黑客攻击(我们只是尽我们所能)
为什么我有动力问
在我看来,如果数据库是公开的,salt(随机的或不随机的)并不重要,尤其是在数据库存储salt的情况下
因此,最佳实践将是双重的(只会增加一点安全性):(1)敏感信息的散列;(2) 在这个问题的背景下,保护数据库免受暴力攻击。似乎有很多错误信息在四处传播(其中一些可能存在于我的衍生理解中,如上所述)
在这里,我假设对跨站点脚本等的防范已经到位
安全性更多的是保护代码的位置,而不是散列存储的信息吗
安全性是指为攻击向量构建缓解措施。有多种类型的攻击和多种类型的缓解措施。你偶然发现了其中的一些
Salt(与散列一起存储的随机字符串)可以抵御特定的攻击向量——恶意用户通过访问整个表发起的攻击
Pepper(以加密方式随机存储在不同位置的秘密salt值)可以防止其他攻击——恶意用户可以访问散列值和特定用户的salt,但无法访问其他系统(尤其是存储胡椒的系统)发起的攻击
如果你仔细阅读这篇文章,你会发现很多专家都认为胡椒是一种比较好的食物
User | Password
Jim | x7291s
Jane | m09var
Jill | x7291s
Jack | 983d2w
Hash | Password
x7291s | password1
983d2w | puppies
34980f | 12345
302jf0 | opensesame
hash_me("password1") -> x7291s
hash_me("password1 208ejd209kj4ed02" ) -> mt2d89 // using Jack's salt
hash_me("password1 3094kf04390f0s9k" ) -> 3409fk // using Jill's salt
hash_me("password1 saf890af9k3049kf" ) -> f7g6s7 // using Jim's salt