【问题标题】:Generate input that would cause collisions using Murmur2 64bit hash function [closed]使用 Murmur2 64 位哈希函数生成会导致冲突的输入 [关闭]
【发布时间】:2019-09-30 11:18:22
【问题描述】:

我被困在一个任务中,该任务包括在 std::unordered_set 中找到一个漏洞,该漏洞只是在一个循环中在 unordered_set<string> 中插入一些字符串:

for (const auto& user : users_list) {
    users.insert(user);
}

详情请见full source code

在 UBUNTU 上编译的文件如下:

g++ -std=c++14 -O2 -Wall run.cpp -o run

任务是提供一个输入,使该程序返回一个非零状态码。

任何想法去哪里看?提示是默认散列函数和程序是在 ubuntu 上编译的事实。

【问题讨论】:

标签: c++ hashcode murmurhash


【解决方案1】:

听起来您的教授希望您找到并利用哈希冲突攻击。您必须生成所有散列到相同值的输入,以便散列表查找必须strcmp 与集合的每个值的新值,以查看在插入之前是否存在重复项。

您的下一步应该是在您的系统上找到std::string 的哈希算法并将其反转,以便您可以生成具有相同哈希值的这些输入。

或者,只是暴力破解它:生成几百万或十亿个随机字符串,std::hash 它们并存储映射到相同哈希值的字符串。

在 libstc++ HEAD 上,std::hash<string> 定义为 here。它调用Hash_bytes,最后调用hash function是基于MurmurHashUnaligned2,种子为0xc70f6907UL。

【讨论】:

  • 听起来很合理。不知道为什么有人投了反对票。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-13
  • 2021-05-12
  • 1970-01-01
  • 2019-03-25
  • 2018-10-08
  • 2014-04-10
  • 1970-01-01
相关资源
最近更新 更多