0

我正在学习密码学并使用 OPENSSL 来实现我正在学习的任何内容。最近,我发现了一个作业问题,并正在尝试解决它。除了这个问题,我对大多数问题的理解都没有问题。

4 任务2:单向属性与无冲突属性在本任务中,我们将研究常见散列函数的两个属性之间的区别:单向属性与无冲突属性。我们将使用蛮力方法来查看破坏这些属性中的每一个需要多长时间。您需要编写自己的 C 程序来调用 openssl 加密库中的消息摘要函数,而不是使用 openssl 的命令行工具。可以在 http://www.openssl.org/docs/crypto/EVP_DigestInit.html找到文档. 计算机安全教育实验室,CMSC 414,2013 年春季 2 由于大多数哈希函数对这两个属性的蛮力攻击具有很强的抵抗力,因此我们需要数年时间才能使用蛮力方法来破解它们。为了使任务可行,在所有这个项目中,我们将哈希值的长度减少到 24 位。我们可以使用任何单向哈希函数,但我们只使用哈希值的前 24 位。编写一个程序,给定一个 24 位的散列值,找到一个匹配的文本(只有小写的 ASCII 字符)。您的程序将不得不重复 1) 生成随机文本,2) 对其进行哈希处理,3) 将低 24 位与输入进行比较。您的程序(源代码必须称为 task2.c)将按如下方式调用:

          ./task2 <digest name> <hash value>

例如,./task2 sha256 2612c7. . .您的程序必须将获胜文本写入 task2.out。请确保输出可读可写,即:

       open("task2.out", O`enter code here` WRONLY | O CREAT, 0644);

我们将使用命令行工具进行验证,例如openssl dgst -sha256 task2.out. 问题:您必须散列多少文本才能找到特定的散列?(给出三个试验的平均值)

我无法理解如何开始编写我的程序。非常感谢任何输入。因为我不是为家庭作业解决它。我正在寻找一些指针而不是代码。

4

2 回答 2

1

好吧,向我阅读文本很清楚任务是什么,并且不清楚您没有得到哪个部分。从哪儿开始?

  • 创建一个类似于 hello word 的骨架程序
  • 创建一个生成随机文本的函数
  • 创建一个接受文本和散列 ID 的函数,并使用 openssl 对其进行散列,返回散列
  • 创建一个提取哈希低 24 位的函数
  • 创建接受命令行参数并将它们转换为 24 位数字的函数,该数字是寻找的哈希值和要在 openssl 处删除的哈希 ID(或退出并显示错误指示)
  • 运行一个循环,不断提供新的随机字符串,直到生成的哈希与 req 和计数匹配
  • 将中奖文本写入文件并输出数字
  • 完成分配中的所有剩余任务...
于 2013-06-02T03:00:15.047 回答
0

该算法由 Balog Pal 精心设计。只是添加一些东西:在单向属性中,给您一个散列,然后搜索具有相似散列的另一个文本。在无碰撞属性中,您只需要找到两个具有相似哈希值的文本。因此,您首先生成两个文本并比较它们对应的哈希值。如果它们相同,则您已发现冲突。如果不是,则存储已经生成的哈希值,然后生成一个新文本,找到它的哈希值并将其与存储的哈希值进行比较。如果任何存储的哈希与它匹配,则您发现了冲突,否则将其存储在存储的哈希列表中。重复循环,直到找到碰撞。

可以在下面的链接中找到相同的 python 实现。它包含最少的注释,因此您必须从代码中找出所有内容。一旦完成,然后尝试在 C 或 java 中实现它。

https://github.com/arafat1/One-Way-Property-versus-Collision-Free-Property/blob/master/HashProperty.py

于 2017-08-27T17:41:07.153 回答