Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 密码、密码和安全概念 介绍_Algorithm_Security_Encryption_Hash - Fatal编程技术网

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