记得在本站一篇讨论在前端给用户密码加密是不是脱裤子放屁的帖子中有人说把明文变长后 hash 会一定程度上影响随机性,从而导致安全性降低,当时我就很怀疑这种说法,觉得毫无根据,当时没空发帖,现在又想到了这个问题,并且想改成更极端的情况,先更长的 SHA512 再 SHA256 再 SHA512 ,重复 100 轮。
举报· 241 次点击
登录 注册 站外分享
18 条回复  
YGHMXFAL 初学 2024-9-4 22:11:25
目的呢?

如果想校验数据完整性,只需要选择强壮地摘要算法 HASH 一次即可

如果想增加攻击者穷举密码的计算成本,有专门为这一场景设计地、专用定制硬件也望洋兴叹地[慢 HASH]算法,例如 scrypt/argon2

应该是在 SOF 看过一帖,这一套[多轮 HASH]或者类似地[多种算法嵌套 HASH]都是不推荐地方案,原理我也没看懂,结论就是会增加碰撞地可能性,也就是说反而降低了安全性
cxtrinityy 小成 2024-9-4 22:32:33
emmm ,哈希是摘要,不是加密,不可逆的,密码 hash 可以避免你保存的用户密码被人脱库直接暴露吧,所以你也不需要保存用户密码,下次拿了密码再哈希一遍对上了就是密码正确
随机性这个没看明白,哈希和随机性有啥关系?算法是公开的呀,同样的算法,同样的输入,只会有同样的输出,sha256 碰撞的可能性已经很小了吧,只要不是常用的那些密码,一般很难撞上。暴力轮询也只是把常用的密码 hash 后记下来作为词典查询罢了。
至于明文长度,不知道你说的原帖具体咋说的,不过应该和 hash 结果分布没啥关系,毕竟不管啥明文也是要先切割补位的
julyclyde 小成 2024-9-4 22:34:56
多轮 hash 更容易碰撞吧
你都明知道后一轮的输入是更小的集合了
geelaw 小成 2024-9-4 22:35:18
用函数作用于一个输入,那么输出是固定的,没有任何随机性。如果输入本身是随机的,那么作用函数之后依然是随机的,但熵不会增加,而且非常明显的例子是把具有 1024 bits 熵的输入用楼主提出的两种方式作用,得到的结果熵必然不能超过 256 bits 。

当然,经过函数作用后,“计算熵”可以增加,然而标准模型下很难分析 SHA-512 和 SHA-256 对输入的计算熵产生何种影响。

只考虑抗碰撞的话,多个函数复合的抗碰撞能力当然不超过最里面的那个的。
0o0O0o0O0o 小成 2024-9-4 22:40:35
多轮 hash 不增加熵,所以只要输入固定就不影响"随机性",影响的只是攻击者的成本
https://www.google.com/search?q=site%3Acrypto.stackexchange.com+KDF+entropy
gbadge 初学 2024-9-4 22:42:57
两轮肯定会比一轮安全,拿被脱裤的站举例,相当于加盐处理了
FengMubai 小成 2024-9-4 22:54:50
@drymonfidelia #4 这个问题可以规约成:你是否认为服务提供方有 安全义务 保障当自身安全系统被攻破时,用户在其他站点的数据不受影响?
rekulas 小成 2024-9-4 23:48:49
作为一款加密算法,如果随机性都做不到稳定那也太拉了,怎么可能被选为标准

不会增加随机性,但会增加安全性
jim9606 小成 2024-9-5 02:02:43
主要问题就是多轮迭代会缩小值域,你要是用短的摘要(例如只有 64bit 的 MD5 )就会比较要命,使用截短 hash 也会有一样的问题,如果不幸没有使用等长时间复杂度的 hash 校验方法也会削弱 hash 的保护能力。
还有考虑密文泄露的场景(服务器数据库泄露),如果没加 salt ,攻击者可以预先构造彩虹表,你这种 100 轮 hash 是用同数量级的性能代价提高攻击代价,用 100 倍计算复杂度换 100 倍攻击难度,这是不划算的,还是加 salt 好。
直接原文拼接 salt 有导致长度拓展攻击的问题,所以不是搞密码学的还是老实用封装好的 HMAC 就好了。
12下一页
返回顶部