gpt4 book ai didi

security - 盐的目的是什么?

转载 作者:行者123 更新时间:2023-12-04 05:09:28 26 4
gpt4 key购买 nike

在Linux系统中,密码是使用MD5哈希值存储的。为什么使用“盐”可以进一步保护系统?特别是,我想明确以下两个

  • 据说盐被存储在
    用哈希清除文本,然后如何
    它可以防止攻击者在
    攻击者知道盐值。
    (攻击者可以是系统
    管理员本人可以检查/etc/shadow
  • 如果盐是随机产生的
    每次,系统如何
    比较散列以验证
    用户?

  • 例如,用户A拥有用户salt s1并生成h1; h1 = md5(password.s1);
    下次,它将使用salt s2,并且系统必须生成另一个哈希值 h2 = md5(password.s2)。由于h1不等于h2,系统如何验证用户身份?

    最佳答案

    如您所知,MD5是一个哈希,因此,如果给它一个输入,例如“PASSWORD”,您将得到一个唯一的(希望-但是如今MD5发生冲突)输出,例如“3DE2AF ...”。

    如您所知,现在很难直接将其反转,直到有人想到...等等,为什么我不预生成可哈希值的所有可能组合,直到可以反转哈希。这称为rainbow table

    盐的目的是将任意随机数据添加到要进行哈希处理的字符串中,从而增加哈希输入的长度。这意味着希望仅将密码输入反向转换为哈希的常规彩虹表将无法正常工作。当然,彩虹表只是反向查找,您可以简单地生成一个彩虹表来补偿所有可能的密码+盐输出。这就是长度增加的原因。由于具有反向散列的性质,因此在很长的哈希输入中生成反向的磁盘空间很快变得不可行。 6到8个字符的字母数字彩虹表已经是几GB。增加长度和字符类,然后您就开始以10GB的倍数讲话。

    当然,如果您要对“PASSWORD”加盐并且对“PASSWORD”进行散列,那么就对“PASSWORDPASSWORD”进行散列,这并不是那么安全,因此对盐的选择也很重要。理想情况下,您应该对每个散列字符串使用随机盐,但是,当然,您需要知道它是什么。一种常见的技术是从用户名或这种情况下独有的其他属性派生出salt。添加任意数据本身就没有用;现在,拥有用户确定的盐数据会增加额外的复杂性,这意味着需要彩虹表才能对每个用户进行专门搜索。您越难以解决,就需要更多的计算能力。那就是战斗所在。

    但是,有一些现代技术。我不是专家,所以我不能告诉您这些工具的安全性,但是值得一提。这个概念是慢散列。基本上,通过复合哈希函数,您需要花费一些时间来计算每个哈希。这样,每个用户检查密码的能力现在为您要检查的每个密码增加了固定的时间量。如果您是蛮横的,那就是坏消息(tm)。同样,如果系统设计良好,如果没有快捷方式(可能等同于弱点),则为慢速哈希函数生成彩虹表也将花费一些时间。

    在此处编辑的更多详细信息。有关此示例的第一个示例,请参见 crypt() @CodeInChaos引用了PBKDF2,它是PKCS#5的一部分。较新的开发项目是scrypt

    正如我所说,我不是专家密码分析师。在后一个示例中,我对它的适用性没有特别的专业知识,我只是向您展示事情的发展方向。

    编辑2 阐明了我对salt的撰写-我想我以前在磁盘空间的关键问题上跳舞。

    关于security - 盐的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5051007/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com