Openssl消息摘要单向暴力攻击



我正在学习密码学,并使用OPENSSL来实现我正在学习的任何东西。最近,我发现了一个作业问题,我正在努力解决它。除了这道题外,大多数我都能理解。

任务2:单向属性与无碰撞属性在本任务中,我们将研究常见散列函数的两个属性之间的区别:单向属性与无碰撞属性。我们将使用暴力破解方法,看看它需要多长时间才能破裂每一个属性。而不是使用openssl的命令行工具,您需要编写您的自己的C程序来调用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>

e。g、./task2 sha256 2612c7. . .和你的程序必须将获胜的文本写入task2.out。请确保输出是可读可写的,即:

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

我们将使用命令行工具进行验证,例如openssl dgst -sha256 task2.out。问:你需要哈希多少个文本才能找到一个特定的哈希?(给出三次试验的平均值)

我不明白如何开始编写程序。任何意见都非常感谢。因为我不会把它作为家庭作业来解。我正在寻找一些指针,而不是代码。

嗯,阅读文本对我来说很清楚任务是什么,不清楚你不明白哪一部分。从哪里开始呢?

  • 创建一个框架程序,如hello word
  • 创建一个生成随机文本的函数
  • 创建一个函数,该函数接受文本和哈希id,并使用openssl对其进行哈希,返回哈希值
  • 创建一个函数,提取哈希值的后24位
  • 创建函数,该函数接受命令行参数并将其转换为24位数字,该数字是查找的哈希值和要在openssl中删除的哈希值id(或退出并显示错误)
  • 运行一个循环,不断提供新的随机字符串,直到结果哈希匹配请求并计数
  • 将获胜文本写入文件,并将数字写入输出
  • 完成分配的所有剩余任务…

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

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

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

最新更新