首页 文章

Openssl消息摘要单向蛮力攻击

提问于
浏览
0

我正在学习密码学并使用OPENSSL来实现我正在学习的任何东西 . 最近,我找到one of the assignment questions并试图解决它 . 我对大多数问题没有问题,但是这个问题 .

4任务2:单向属性与无碰撞属性在此任务中,我们将研究公共散列函数的两个属性之间的区别:单向属性与无碰撞属性 . 我们将使用强力方法来查看打破每个属性所需的时间 . 您需要编写自己的C程序来调用openssl的加密库中的消息摘要函数,而不是使用openssl的命令行工具 . 可以在http://www.openssl.org/docs/crypto/EVP_DigestInit.html找到文档 . 计算机安全教育实验室,CMSC 414,2013年 Spring 季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 . 问题:您需要散列多少文本来查找特定哈希值? (平均三次试验)

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

2 回答

  • 1

    那么,阅读文本给我清楚它是什么任务,并不清楚你没有得到哪一部分 . 从哪儿开始?

    • 创建一个像hello word这样的骨架程序

    • 创建一个生成随机文本的函数

    • 创建一个带有text和hash-id的函数,并使用openssl对其进行哈希处理,返回哈希值

    • 创建一个提取哈希值低24位的函数

    • 创建函数,它接受命令行参数并将它们转换为24位数字,这是查找的散列和散列ID在openssl中丢弃(或退出时带有错误指示)

    • 运行一个循环,继续提供新的随机字符串,直到生成的哈希值与req和count相匹配

    • 将获胜文本写入文件并输出数字

    • 完成任务中的所有剩余任务......

  • 0

    该算法由Balog Pal完善 . 只是添加一些内容:在单向属性中,您将获得一个哈希,并搜索具有类似哈希的另一个文本 . 在无碰撞属性中,您只需要找到两个具有相似哈希值的文本 . 因此,您首先生成两个文本并比较它们相应的哈希值 . 如果它们相同,则发现了碰撞 . 如果没有,则存储已生成的哈希值,然后生成新文本,找到其哈希值并将其与存储的哈希值进行比较 . 如果任何存储的哈希值与之匹配,则发现冲突,否则将其存储在存储的哈希列表中 . 重复此循环,直到发现碰撞 .

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

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

相关问题