使用 Murmur2 64 位哈希函数生成会导致冲突的输入

Generate input that would cause collisions using Murmur2 64bit hash function

本文关键字:冲突 输入 Murmur2 哈希 函数 使用      更新时间:2023-10-16

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

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

有关详细信息,请参阅完整的源代码。

在 UBUNTU 上编译的文件如下:

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

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

有什么想法去哪里看吗?提示是默认哈希函数有一些东西,并且该程序是在 ubuntu 上编译的。

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

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

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

在libstc++ HEAD上,std::hash<string>在这里定义。它调用Hash_bytes,最终调用哈希函数基于种子 0xc70f6907UL 的 MurmurHashUnaligned2。