Hash 碰撞和解决策略

2017-12-18 18:36:27 +08:00
 scriptB0y

https://www.kawabangga.com/posts/2493

4533 次点击
所在节点    程序员
16 条回复
unique
2017-12-18 18:59:52 +08:00
好文,get 了
jadec0der
2017-12-18 19:02:46 +08:00
Hash 碰撞攻击以前真没听说过,有意思
rim99
2017-12-18 19:19:38 +08:00
讲的挺好,就适合我这种小白
holyghost
2017-12-18 19:27:49 +08:00
你们四个是一个组的吧?
scriptB0y
2017-12-18 19:29:14 +08:00
@holyghost 商业胡吹
wisej
2017-12-18 19:29:26 +08:00
@holyghost 哈哈
glasslion
2017-12-18 19:31:00 +08:00
@jadec0der 前几年各大语言被集中报过一次, 现在基本被修复了
iyangyuan
2017-12-18 19:40:08 +08:00
啊?这叫哈希冲突吧老哥?!
scriptB0y
2017-12-18 19:43:51 +08:00
@iyangyuan 其实都一样!散列冲突,散列碰撞啥的 都是 collision
linuxchild
2017-12-18 19:49:05 +08:00
说真的,你推广博客就推广吧,没必要还互相吹,说难听都算是浪费后来人的时间了。

我读完了内容和链接内容,都有标题党都感觉了。

另外,博文逻辑感觉不清晰,我找了半天怎么解决哈希冲突,现在都不确定你有没有写。

最后,还不如之前数据结构书上讲的明白
linuxchild
2017-12-18 19:50:19 +08:00
再补充一下,看帖子第一感觉还以为是某种攻击方式
scriptB0y
2017-12-18 19:51:51 +08:00
@linuxchild 我不认识前面三个
jimzhong
2017-12-18 22:21:31 +08:00
健壮的 hash 表都有一个随机生成的 seed。
zhicheng
2017-12-19 02:28:21 +08:00
Hash 冲突攻击是利用开源编程语言公开的 hash 算法,提前计算出能够产生相同 hash 的字符串,让语言自带的 dict 类型性能从哈希表 O(1) 降到链表 O(n) 的攻击手段。

比如 HTTP 框架会用字典存储参数,这样我在 URL 里构造数千个能够产生相同 hash 的参数名 ,当你读这个字典的时候就会非常消耗 CPU。

解决办法很简单,编程语言在启动的时候生成一个随机数,以后每次计算 hash 都用这个随机数做 seed,因为别人几乎无法猜到这个随机数,所以也就没办法利用提前计算冲突 hash 进行攻击。

我在 Lemon 里就是这样实现的,以下为参考代码

https://github.com/lemon-lang/lemon/blob/master/src/lemon.c#L283
https://github.com/lemon-lang/lemon/blob/master/src/hash.c#L25
trulyshelton
2017-12-19 10:27:13 +08:00
讲的没啥错,就是,这不是最基本的 data structure 常识吗?
scriptB0y
2017-12-19 10:50:54 +08:00
@trulyshelton 是的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/415761

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX