news 2026/4/16 14:49:36

攻防世界——hidden key

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
攻防世界——hidden key

附件提供一个Python加密脚本

  1. 生成8字节(64位)随机密钥
  2. 用密钥的MD5哈希值作为随机数种子
  3. 逐字节加密flag(与随机数异或)
  4. 输出密文和bytes_to_long(key)>>12的值

输出

[140, 96, 112, 178, 38, 180, 158, 240, 179, 202, 251, 138, 188, 185, 23, 67, 163, 22, 150, 18, 143, 212, 93, 87, 209, 139, 92, 252, 55, 137, 6, 231, 105, 12, 65, 59, 223, 25, 179, 101, 19, 215] 2669175714787937

二、漏洞分析

1. 核心漏洞:密钥部分泄露

print(bytes_to_long(key) >> 12) # 输出: 2669175714787937
  • 8字节密钥 = 64位
  • 右移12位:保留高52位,丢弃低12位
  • 攻击面:只需暴力破解4096 (2¹²) 种可能

2. 次要漏洞:确定性随机序列

random.seed(int(hashlib.md5(key).hexdigest(), 16))
  • 伪随机数生成器(PRG)在相同种子下产生完全相同的序列
  • MD5哈希是确定性函数:相同输入→相同输出
  • 完整链条:相同密钥→相同MD5→相同随机序列→相同加密结果

3. 设计缺陷:弱随机源

  • 使用Python标准库random而非密码学安全的secrets模块
  • os.urandom(8)虽然安全,但后续处理破坏了安全性

三、密码学知识点

1. 位操作基础

  • 1字节 = 8位,8字节 = 64位
  • 右移n位x >> n=floor(x / 2^n),丢弃低n位
  • 左移n位x << n=x * 2^n,低位补0
  • 位恢复original = (shifted << n) | low_n_bits

2. 随机数生成器特性

  • 确定性:固定种子→固定序列
  • 标准库 vs 密码学安全
    • random:用于模拟/游戏,适合加密
    • secrets.SystemRandom:基于操作系统熵源,适合加密

3. 异或(XOR)加密原理

  • 加密ciphertext = plaintext ^ random_byte
  • 解密plaintext = ciphertext ^ random_byte(自逆操作)
  • 安全性:完全依赖随机数质量和密钥保密性

4. 暴力破解可行性分析

  • 密钥空间:2¹² = 4,096种可能
  • 现代CPU性能:每秒可执行数十亿次操作
  • 破解时间:< 100毫秒(实际测试约50-200ms)
  • 安全阈值:通常需要2⁸⁰以上才被认为安全

四、解题思路

1. 信息收集

  • 已知密文:42字节的整数列表
  • 已知:key_high = 2669175714787937(密钥高52位)

2. 密钥重构

  • 完整密钥 =(key_high << 12) | low_12_bits
  • 枚举low_12_bits从0到4095

3. 随机序列重现

  • 对每个候选密钥:
    • 计算MD5哈希
    • 设置相同随机种子
    • 生成相同随机序列

4. 验证机制

  • 检查解密结果是否以"flag{"开头
  • 验证是否为有效UTF-8字符串
  • 检查是否只包含可打印字符

五、完整解题代码

import random import hashlib from Crypto.Util.number import long_to_bytes # 1. 已知常量 ciphertext = [140, 96, 112, 178, 38, 180, 158, 240, 179, 202, 251, 138, 188, 185, 23, 67, 163, 22, 150, 18, 143, 212, 93, 87, 209, 139, 92, 252, 55, 137, 6, 231, 105, 12, 65, 59, 223, 25, 179, 101, 19, 215] known_high_bits = 2669175714787937 # key >> 12 的值 # 2. 还原原题rand函数 def rand(rng): """完全复制原题中的随机函数""" return rng - random.randrange(rng) # 3. 解密核心函数 def decrypt_with_key(key_bytes): """使用给定密钥尝试解密""" # 3.1 重现随机种子 seed = int(hashlib.md5(key_bytes).hexdigest(), 16) random.seed(seed) # 3.2 严格模拟加密过程 flag_chars = [] for c in ciphertext: rand(256) # 丢弃一个随机数(与加密过程完全一致) r = rand(256) % 256 # 获取用于加密的随机数,256%256=0 plain_byte = c ^ r flag_chars.append(plain_byte) # 3.3 尝试转换为可读字符串 try: return bytes(flag_chars).decode('utf-8') except UnicodeDecodeError: return None # 4. 暴力破解主循环 print("[*] 开始暴力破解,尝试 4096 种密钥组合...") solution_found = False for low_12 in range(4096): # 4.1 重构完整64位密钥 full_key_value = (known_high_bits << 12) | low_12 key_bytes = long_to_bytes(full_key_value, 8) # 明确8字节长度 # 4.2 尝试解密 try: flag = decrypt_with_key(key_bytes) except Exception as e: continue # 4.3 验证解密结果 if flag and flag.startswith('flag{') and '}' in flag: print(f"\n[+] 破解成功! 密钥低12位: {low_12}") print(f"[+] 完整密钥 (hex): {key_bytes.hex()}") print(f"[+] Flag: {flag}") print(f"[+] 尝试次数: {low_12 + 1}/4096") solution_found = True break # 4.4 进度提示 if low_12 % 500 == 0 and low_12 > 0: print(f"[*] 已尝试 {low_12}/4096 种组合...") if not solution_found: print("[-] 破解失败!未找到有效flag。")

执行结果

[*] 开始暴力破解,尝试 4096 种密钥组合... [*] 已尝试 500/4096 种组合... [*] 已尝试 1000/4096 种组合... [*] 已尝试 1500/4096 种组合... [*] 已尝试 2000/4096 种组合... [*] 已尝试 2500/4096 种组合... [+] 破解成功! 密钥低12位: 2935 [+] 完整密钥 (hex): 97b99e652b261b77 [+] Flag: flag{e319a58c-4dd6-4e6a-a3fb-f4b0d339faba} [+] 尝试次数: 2936/4096
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 12:33:42

资源一号卫星参数详情

资源一号&#xff08;ZY-1&#xff09;卫星是中国和巴西合作研制的“资源”系列地球资源卫星中的第一代&#xff0c;也被称为中巴地球资源卫星&#xff08;CBERS&#xff09;。它开创了中国传输型对地观测卫星的新纪元。一、 卫星项目概况名称&#xff1a; 资源一号 / 中巴地球…

作者头像 李华
网站建设 2026/4/10 3:48:59

VideoSrt视频字幕生成工具:3大场景化解决方案彻底告别手动打字幕

VideoSrt视频字幕生成工具&#xff1a;3大场景化解决方案彻底告别手动打字幕 【免费下载链接】video-srt-windows 这是一个可以识别视频语音自动生成字幕SRT文件的开源 Windows-GUI 软件工具。 项目地址: https://gitcode.com/gh_mirrors/vi/video-srt-windows 你是否曾…

作者头像 李华
网站建设 2026/4/16 12:17:36

Velero API开发终极指南:从入门到精通

为什么选择Velero API&#xff1f; 【免费下载链接】velero Backup and migrate Kubernetes applications and their persistent volumes 项目地址: https://gitcode.com/GitHub_Trending/ve/velero 在当今云原生时代&#xff0c;Kubernetes已成为容器编排的事实标准。然…

作者头像 李华
网站建设 2026/4/16 11:00:55

Java线程安全:披萨争夺战的终极解法

哈哈&#xff0c;小白你好&#xff01;今天咱们来聊聊Java里的“线程安全”——这玩意儿就像一群程序员在办公室里抢同一份披萨&#xff0c;如果没点规矩&#xff0c;最后可能谁都吃不上完整的&#xff0c;还弄一地碎屑&#xff01;&#x1f604;简单说&#xff0c;线程安全就是…

作者头像 李华
网站建设 2026/4/16 10:44:25

Paperzz AI 期刊论文:从 “选题模糊” 到 “适配刊文框架”,学术新人如何高效搭建期刊级论文的写作路径

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿 paperzz - 期刊论文https://www.paperzz.cc/journalArticle 对学术新人而言&#xff0c;期刊论文写作的门槛远高于课程论文 —— 既要贴合期刊的 “选题方向”&#xff0c;又要符合 “摘要 - 引言 - 实证…

作者头像 李华
网站建设 2026/4/16 12:14:53

期刊论文写作的“AI工具链革命”:9大智能引擎全景拆解——一场从“孤岛式写作”到“协同式科研交付”的认知升维实验

开篇&#xff1a;一场真实的“学术压力测试” 2025年12月&#xff0c;某高校青年教师接到期刊返修意见&#xff1a;“理论贡献不清晰&#xff0c;方法描述模糊&#xff0c;图表可读性弱。”距离截止日仅剩72小时。 他没有熬夜改稿&#xff0c;而是打开9款AI工具&#xff0c;构…

作者头像 李华