首页 > 其他分享 >MD5哈希长度延展攻击

MD5哈希长度延展攻击

时间:2024-04-14 13:34:30浏览次数:20  
标签:hash 延展 哈希 长度 message original hashpump MD5

1. 哈希长度延展攻击的机制

哈希长度延展攻击利用的是哈希函数如MD5和SHA-1的特性。当计算哈希时,如果攻击者知道原始数据的哈希值但不知道原始数据内容,他们仍然可以在原始数据后添加一些数据,并且能计算出新数据串的哈希值,而不需要知道原始数据是什么。

对于MD5哈希函数,攻击者利用的关键是这种函数使用内部状态,这个状态在处理完所有数据后就是最终的哈希输出。如果攻击者知道一个哈希值(即内部状态),他们可以“接上”新的数据,仿佛这些新数据是紧跟在原始数据之后的。

2. 使用工具或脚本进行攻击

要进行长度延展攻击,我们可以使用像hashpump这样的工具。hashpump接受一个已知的哈希值、已知数据、附加数据和已知数据的长度,然后输出新的哈希值和附加后的完整数据。

例如,假设我们有以下信息:

  • 命令cmd=viewfile的哈希值h
  • 原始数据长度(注意这通常指密钥加原始数据的总长度)
  • 想要添加的命令rm

使用hashpump的命令行可能是这样的:

hashpump -s [原始哈希h] --data "viewfile" --signature [h] --append "rm" --keylen [密钥长度]

这将输出一个新的哈希值和构造的完整命令,即cmd=viewfile||padding||rm

3. 攻击方法、工具和结果说明

  • 攻击方法:使用了MD5哈希长度延展攻击,通过hashpump工具来生成附加了删除文件命令的新哈希值。
  • 工具说明hashpump是一个广泛使用的工具,专门用于生成哈希长度延展攻击所需的数据。它输出修改后的数据和对应的新哈希值。
  • 构造的命令和新的签名:这将依赖于hashpump提供的具体输出,包括新的命令串和相应的哈希值。

通过这种方式,即使不知道密钥k,也可以创建一个有效的命令来删除文件。
先查看原始信息的MD5哈希值

并且要创建一个python文件

#!/usr/bin/pyhton3
import hashlib

def md5_extend(original_message, original_hash, extension):
    # 步骤1:计算原始消息的字节长度
    original_length = len(original_message.encode())

    # 步骤2:初始化填充
    padding = b'\x80' + b'\x00' * ((56 - (original_length + 1) % 64) % 64)

    # 步骤3:添加原始消息的比特长度
    padding += (original_length * 8).to_bytes(8, byteorder='little')

    # 步骤4:计算新哈希值
    new_hash = hashlib.md5()
    new_hash.update(extension.encode())
    new_hash.update(padding)
    forged_message = original_message.encode() + padding + extension.encode()

    # 步骤5:返回伪造消息和哈希值
    return forged_message, new_hash.hexdigest()

original_message = "20211201viewfile"
original_hash = hashlib.md5(original_message.encode()).hexdigest()
extension = "rm *"
forged_message, new_hash = md5_extend(original_message, original_hash, extension)

print("原始消息:", original_message)
print("原哈希值:", original_hash)
print("伪造消息:", forged_message.hex())  # 将字节串转换为十六进制表示
print("新哈希值:", new_hash)

 

之后运行

 

标签:hash,延展,哈希,长度,message,original,hashpump,MD5
From: https://www.cnblogs.com/Euyq123/p/18134045

相关文章

  • MD5
    对于满足以下条件的散列函数,都可以作为攻击对象:①加密前将待加密的明文按一定规则填充到固定长度(例如512或1024比特)的倍数;②按照该固定长度,将明文分块加密,并用前一个块的加密结果,作为下一块加密的初始向量(InitialVector)。满足上述要求的散列函数称为Merkle–Damgård散列函数(Me......
  • MD5哈希长度延展攻击
    任务详情任务描述:在一个使用MD5哈希算法的系统中,管理员使用了一个密钥k和命令cmd的组合来生成每个命令的签名:hash(k||cmd)。你已经获得了一个允许查看文件的命令cmd=viewfile和对应的签名h,但你希望通过哈希长度延展攻击,生成一个新的签名,该签名能够让你执行删除文件的命令(删除文......
  • 代码随想录算法训练营第7天 | 哈希表 454.四数相加II 383. 赎金信 15. 三数之和 18.
    leetcode454.四数相加II题目454.四数相加II解题思路实现代码leetcode383.赎金信题目383.赎金信解题思路实现代码leetcode15.三数之和题目15.三数之和解题思路实现代码leetcode454.四数相加II题目18.四数之和解题思路实现代码......
  • 20211128李杰—— MD5哈希长度延展攻击
    任务描述:在一个使用MD5哈希算法的系统中,管理员使用了一个密钥k和命令cmd的组合来生成每个命令的签名:hash(k||cmd)。你已经获得了一个允许查看文件的命令cmd=viewfile和对应的签名h,但你希望通过哈希长度延展攻击,生成一个新的签名,该签名能够让你执行删除文件的命令(删除文件的命令为......
  • 数据结构-哈希表
    数据结构-哈希表1.定义:哈希表(也称为散列表)是一种使用哈希函数组织数据,以支持快速插入和搜索的数据结构。它通过将键映射到表中一个位置来访问记录,从而加快访问速度。#创建一个空字典hash_table={}#向哈希表中添加键-值对hash_table['apple']=10hash_table['banana'......
  • MD5哈希长度延展攻击
    1.哈希长度延展攻击的机制哈希长度延展攻击利用的是哈希函数如MD5和SHA-1的特性。当计算哈希时,如果攻击者知道原始数据的哈希值但不知道原始数据内容,他们仍然可以在原始数据后添加一些数据,并且能计算出新数据串的哈希值,而不需要知道原始数据是什么。对于MD5哈希函数,攻击者利用......
  • 深入理解MD5算法:原理、应用与安全
    第一章:引言导言在当今数字化时代,数据安全和完整性变得至关重要。消息摘要算法是一种用于验证数据完整性和安全性的重要工具。在众多消息摘要算法中,MD5(MessageDigestAlgorithm5)因其快速、广泛应用和相对较高的安全性而备受关注。本书将深入探讨MD5算法的原理、应用和安全性,帮......
  • 漫谈:编码、哈希、摘要、加密都是什么(别再问“用base64加密行不行”了,会被鄙视)
    初级代码游戏的专栏介绍与文章目录-CSDN博客我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。    刚接触加密领域的新手经常搞不清楚这几个概念,这里给大......
  • 哈希(散列)查找
    1.哈希表(HashTable)(1)哈希表定义又称散列表,是一种数据结构,数据元素的关键字与其存储地址直接相关(2)同义词若不同的关键字通过散列函数映射到同一个值,则称为“同义词”(3)冲突通过散列函数确定的位置已经存放了其他元素,则称这种情况为“冲突”(4)填装因子装填因子=表中记录......
  • 代码随想录 day6 哈希表
    题目:P242有效的字母异位数,P349两个数组的交集,P202快乐数,P1两数之和收获:1.使用数组,集合(set,主要是unorder_set,无序,无重复)做哈希表。哈希表一般用来快速判断一个元素是否出现在集合里。2.unorder_set的用法。classSolution{public:vector<int>intersection(vector<......