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

MD5哈希长度延展攻击(选做)

时间:2024-04-14 20:23:26浏览次数:20  
标签:选做 填充 哈希 攻击者 长度 original MD5

MD5哈希长度延展攻击(选做)

任务

任务描述:

在一个使用MD5哈希算法的系统中,管理员使用了一个密钥k和命令cmd的组合来生成每个命令的签名:hash(k||cmd)。你已经获得了一个允许查看文件的命令cmd=viewfile和对应的签名h,但你希望通过哈希长度延展攻击,生成一个新的签名,该签名能够让你执行删除文件的命令(删除文件的命令为rm)。

具体步骤:

  1. 研究MD5哈希长度延展攻击的机制,并找出适用于此场景的攻击方法。(3分)
  2. 使用合适的工具或脚本,基于cmd=viewfile和签名h,构造一个新的命令cmd=viewfile||padding||deletefile和新的签名。(6分)
  3. 提交你使用的攻击方法、工具或脚本的详细说明,以及成功构造的命令和新的签名。(6分)

过程

1.MD5哈希长度延展攻击

MD5哈希长度延展攻击是一种利用MD5哈希算法的安全漏洞,其机制如下:

  1. MD5算法特性:MD5算法在计算哈希值时,将消息分成512位(64字节)的块,并对每个块进行一系列的位运算和轮函数计算,最终得到128位(16字节)的哈希值。

  2. 攻击者利用填充数据:攻击者利用MD5算法对消息进行处理的特点,可以构造出具有相同哈希值的不同输入数据。攻击者首先需要了解原始消息M的长度和哈希值H(M),然后在消息M的末尾附加填充数据P,使得新消息M'的长度为M的长度加上填充数据的长度。

  3. 计算新消息的哈希值:攻击者根据MD5算法的工作原理,计算新消息M'的哈希值H(M')。在计算过程中,MD5算法会将填充数据P作为有效消息的一部分,因此攻击者可以通过控制填充数据的内容来影响新消息的哈希值。

  4. 构造有效的新消息:攻击者根据MD5算法的哈希计算过程,精心选择填充数据P,使得新消息M'的哈希值满足攻击者的需求。例如,攻击者可以构造出具有相同哈希值但含有恶意内容的新消息,用于欺骗系统或绕过身份验证。

  5. 实施攻击:攻击者将构造好的新消息M'发送给目标系统进行验证或处理。由于MD5算法的安全漏洞,目标系统无法区分原始消息和填充数据,因此会错误地接受新消息M',从而导致安全漏洞和攻击风险。

攻击方法中的关键是构造填充数据P,使得新消息M'的长度符合MD5算法的处理要求,并且能够影响新消息的哈希值以达到攻击者的目的。攻击者可以通过以下公式计算新消息M'的长度和填充数据P的内容:

新消息长度 = 原始消息长度 + 填充数据长度

填充数据 = 恶意内容 + 填充字节

其中,填充字节的数量和内容是攻击者需要精心选择和控制的关键。通过构造合适的填充数据,攻击者可以成功实施MD5哈希长度延展攻击,破坏系统的安全性和完整性。

2.创建一个python文件

md5.py

`#!/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)`

3.运行python代码

image

标签:选做,填充,哈希,攻击者,长度,original,MD5
From: https://www.cnblogs.com/20211115fyq/p/18134624

相关文章

  • MD5哈希长度延展攻击
    任务描述:在一个使用MD5哈希算法的系统中,管理员使用了一个密钥k和命令cmd的组合来生成每个命令的签名:hash(k||cmd)。你已经获得了一个允许查看文件的命令cmd=viewfile和对应的签名h,但你希望通过哈希长度延展攻击,生成一个新的签名,该签名能够让你执行删除文件的命令(删除文件的命令为......
  • MD5哈希长度延展攻击(选做)
    一、理解长度扩展攻击(lengthextensionattack),是指针对某些允许包含额外信息的加密散列函数的攻击手段。对于满足以下条件的散列函数,都可以作为攻击对象:①加密前将待加密的明文按一定规则填充到固定长度(例如512或1024比特)的倍数;②按照该固定长度,将明文分块加密,并用前一个......
  • MD5哈希长度延展攻击
    1.哈希长度延展攻击的机制哈希长度延展攻击利用的是哈希函数如MD5和SHA-1的特性。当计算哈希时,如果攻击者知道原始数据的哈希值但不知道原始数据内容,他们仍然可以在原始数据后添加一些数据,并且能计算出新数据串的哈希值,而不需要知道原始数据是什么。对于MD5哈希函数,攻击者利用......
  • 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哈希函数,攻击者利用......
  • ARC 选做
    byTheBigYellowDuck现阶段的水平,大概只能做D及以前的题了。ARC104[ARC104A]PlusMinus可以得到答案为\(\dfrac{A+B}{2}\)和\(\dfrac{A-B}{2}\)。时间复杂度\(\mathcal{O}(1)\)。提交记录[ARC104B]DNASequence对每种字符预处理前缀和。枚举子串\([l,r]\),只需......