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

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

时间:2024-04-14 20:24:20浏览次数:17  
标签:选做 hash 哈希 长度 message original MD5

任务描述

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

具体步骤

  1. 研究MD5哈希长度延展攻击的机制,并找出适用于此场景的攻击方法。(3分)

    MD5哈希长度延展攻击是利用MD5算法在设计上的缺陷来构造一个原本不存在的消息的哈希值。MD5是基于Merkle-Damgård构造的,这种构造的哈希函数容易受到长度延展攻击。长度延展攻击的基本思想是,给定一个消息m1和它的哈希h(m1),攻击者可以构造出另一个消息m2,使得h(m1 || m2) = h'(m2),其中h'是未知的哈希函数。

    MD5算法的工作流程如下:

    1. 填充(Padding):原始消息被填充到448位(模512位)的长度,然后添加一个64位的长度字段,表示原始消息的长度。
    2. 分块处理:填充后的消息被分成512位的块,每个块通过一系列的轮函数进行处理。

    长度延展攻击利用了MD5的这个填充过程。攻击者可以找到一种方法,在不知道密钥k的情况下,将原始消息(viewfile)和任意长度的新消息(padding和rm)拼接起来,然后计算出新的哈希值。

    为了执行这种攻击,攻击者需要知道以下几点:

    • 原始消息(cmd=viewfile)
    • 原始消息的哈希值(h)
    • 密钥的长度(k的长度)

    攻击步骤通常如下:

    1. 计算原始消息的填充,以便将其长度增加到448位(模512位)。
    2. 添加64位的长度字段,表示原始消息的长度。
    3. 构造新的消息,将原始消息、填充和新消息(rm)拼接起来。
    4. 利用MD5算法的迭代性质,计算出新的哈希值。
  2. 使用合适的工具或脚本,基于cmd=viewfile和签名h,构造一个新的命令cmd=viewfile||padding||deletefile和新的签名。(6分)
    在Linux中,你可以使用hashpump工具来执行MD5哈希长度延展攻击。
    hashpump -s h -d cmd=viewfile -a ||padding||deletefile -k 16
    -s后面跟的是原始签名的十六进制表示,-d后面跟的是原始数据,-a后面跟的是要添加的数据,-k后面跟的是密钥的长度

  3. 提交你使用的攻击方法、工具或脚本的详细说明,以及成功构造的命令和新的签名。(6分)

    1. 查看原始信息的MD5哈希值
    2. 创建一个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)
      
    3. 运行结果
      image

标签:选做,hash,哈希,长度,message,original,MD5
From: https://www.cnblogs.com/Vicky-Peng/p/18134614

相关文章

  • MD5哈希长度延展攻击(选做)
    MD5哈希长度延展攻击(选做)任务任务描述:在一个使用MD5哈希算法的系统中,管理员使用了一个密钥k和命令cmd的组合来生成每个命令的签名:hash(k||cmd)。你已经获得了一个允许查看文件的命令cmd=viewfile和对应的签名h,但你希望通过哈希长度延展攻击,生成一个新的签名,该签名能够让你执行......
  • 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哈希函数,攻击者利用......