silent_peeper Writeup by AI

silent_peeper Writeup by AI

题目描述

  • 题目来源: 攻防世界 (AdWorld)
  • 题目类型: Crypto (密码学)
  • 考点: Diffie-Hellman 密钥交换、小指数攻击、BSGS 算法、AES 解密

考点分析

1. Diffie-Hellman 密钥交换

题目使用了经典的 Diffie-Hellman 密钥交换协议:

  • 给定大素数 p 和生成元 g
  • 私钥 ab 是 40 位随机整数
  • 公钥 A = g^a mod p, B = g^b mod p
  • 共享密钥 key = A^b mod p = B^a mod p

2. 小指数攻击

由于私钥 ab 只有 40 位(约 2^40 ≈ 10^12 种可能),存在暴力破解的可能性。

3. AES-ECB 加密

使用推导出的共享密钥的前 16 字节作为 AES 密钥,采用 ECB 模式加密 flag。

解题思路

方法一:BSGS 算法(推荐)

Baby-Step Giant-Step 算法是求解离散对数问题的经典算法,时间复杂度为 O(√n)。

对于 40 位的指数:

  • 搜索空间:2^40 ≈ 1.1×10^12
  • BSGS 复杂度:2^20 ≈ 1.05×10^6 次运算
  • 完全可以在合理时间内求解

方法二:直接枚举私钥 b

由于只需要恢复任意一个私钥即可计算共享密钥,也可以选择枚举较小的那个私钥。

详细步骤

Step 1: 提取参数

enc_.pycipher 文件中提取:

python 复制代码
p = 174807157365465092731323561678522236549173502913317875393564963123330281052524687450754910240009920154525635325209526987433833785499384204819179549544106498491589834195860008906875039418684191252537604123129659746721614402346449135195832955793815709136053198207712511838753919608894095907732099313139446299843
g = 41899070570517490692126143234857256603477072005476801644745865627893958675820606802876173648371028044404957307185876963051595214534530501331532626624926034521316281025445575243636197258111995884364277423716373007329751928366973332463469104730271236078593527144954324116802080620822212777139186990364810367977
A = 142989488568573584455487421652639325256968267580899511353325709765313839485530879575182195391847106611058986646758739505820350416810754259522949402428485456431884223161690132385605038767582431070875138678612435983425500273038807582069763455994486365993366499478412783220052753597397455113133312907456163112016
B = 16631700400183329608792112442038543911563829699195024819408410612490671355739728510944167852170853457830111233224257622677296345757516691802411264928943809622556723315310581871447325139349242754287009766402650270061476954875266747743058962546605854650101122523183742112737784691464177427011570888040416109544
ciphertext = ed5c68ebb65aa3a13afb259cf3984ce60bdc54b7ef918b850745df850cf4c450b02216c0c6e67ed501a17e516496cd6c

Step 2: BSGS 算法实现

python 复制代码
def bsgs(g, h, p, n_bits):
    m = int(ceil(sqrt(2**n_bits)))  # m = 2^20
    
    # Baby Step: 建表 g^j mod p
    table = {}
    val = 1
    for j in range(m):
        table[val] = j
        val = (val * g) % p
    
    # Giant Step: 查找 A * (g^(-m))^i mod p
    inv_g_m = pow(g, -m, p)
    gamma = h
    for i in range(m):
        if gamma in table:
            j = table[gamma]
            return i * m + j
        gamma = (gamma * inv_g_m) % p

Step 3: 计算共享密钥

找到私钥 a = 822690494337 后:

python 复制代码
key_int = pow(B, a, p)
key = long_to_bytes(key_int)[:16]  # 取前 16 字节

Step 4: AES 解密

python 复制代码
cipher = AES.new(key, AES.MODE_ECB)
plaintext_padded = cipher.decrypt(ciphertext)
pad_len = plaintext_padded[-1]  # PKCS5/7 填充
plaintext = plaintext_padded[:-pad_len]

完整代码

solve.py

核心代码:

python 复制代码
from Crypto.Util.number import *
from Crypto.Cipher import AES
import binascii
from math import ceil, sqrt

def bsgs(g, h, p, n_bits):
    m = int(ceil(sqrt(2**n_bits)))
    
    # Baby Step
    table = {}
    val = 1
    for j in range(m):
        table[val] = j
        val = (val * g) % p
    
    # Giant Step
    inv_g_m = pow(g, -m, p)
    gamma = h
    for i in range(m):
        if gamma in table:
            return i * m + j
        gamma = (gamma * inv_g_m) % p
    
    return None

# 参数
A = 142989488568573584455487421652639325256968267580899511353325709765313839485530879575182195391847106611058986646758739505820350416810754259522949402428485456431884223161690132385605038767582431070875138678612435983425500273038807582069763455994486365993366499478412783220052753597397455113133312907456163112016
B = 16631700400183329608792112442038543911563829699195024819408410612490671355739728510944167852170853457830111233224257622677296345757516691802411264928943809622556723315310581871447325139349242754287009766402650270061476954875266747743058962546605854650101122523183742112737784691464177427011570888040416109544
ciphertext_hex = "ed5c68ebb65aa3a13afb259cf3984ce60bdc54b7ef918b850745df850cf4c450b02216c0c6e67ed501a17e516496cd6c"
p = 174807157365465092731323561678522236549173502913317875393564963123330281052524687450754910240009920154525635325209526987433833785499384204819179549544106498491589834195860008906875039418684191252537604123129659746721614402346449135195832955793815709136053198207712511838753919608894095907732099313139446299843
g = 41899070570517490692126143234857256603477072005476801644745865627893958675820606802876173648371028044404957307185876963051595214534530501331532626624926034521316281025445575243636197258111995884364277423716373007329751928366973332463469104730271236078593527144954324116802080620822212777139186990364810367977

# 求解私钥 a
a = bsgs(g, A, p, 40)
print(f"[+] 私钥 a = {a}")

# 计算共享密钥
key_int = pow(B, a, p)
key = long_to_bytes(key_int)[:16]

# AES 解密
ciphertext = binascii.unhexlify(ciphertext_hex)
cipher = AES.new(key, AES.MODE_ECB)
plaintext_padded = cipher.decrypt(ciphertext)
pad_len = plaintext_padded[-1]
plaintext = plaintext_padded[:-pad_len]

print(f"[+] Flag: {plaintext.decode()}")

总结

关键知识点

  1. Diffie-Hellman 密钥交换原理:理解 A = g^a mod p 和共享密钥的计算方式
  2. 小指数攻击:当私钥位数较小时,存在暴力破解可能
  3. BSGS 算法:求解离散对数问题的高效算法,时间复杂度 O(√n)
  4. AES-ECB 解密:使用推导出的密钥进行解密并去除 PKCS5/7 填充

注意事项

  • BSGS 算法需要构建哈希表,空间复杂度为 O(√n)
  • 对于 40 位指数,约需 10^6 次运算和相应的内存空间
  • Python 的 pow(base, exp, mod) 支持模逆运算:pow(g, -m, p)
  • AES 密钥取自共享密钥的前 16 字节(128 位)

扩展思考

  • 如果私钥是 60 位,BSGS 需要 2^30 ≈ 10^9 次运算,仍然可行但需要更多时间
  • 如果私钥是 80 位或更高,需要考虑更高级的攻击方法(如 Pollard's rho)
  • 实际应用中应使用至少 256 位的私钥以保证安全性

用户原始提问

请阅读目录下的文件,解出这道CTF题目。

相关推荐
其实防守也摸鱼1 小时前
无线网络安全---WLAN相关安全工具--kali(理论附题目)
linux·安全·web安全·学习笔记·kali·命令模式·wlan
2401_873479401 小时前
应急响应:勒索软件攻击源IP分析,如何通过IP地址查询定位辅助溯源?
网络·tcp/ip·安全·网络安全·ip
white-persist4 小时前
【vulhub shiro 漏洞复现】vulhub shiro CVE-2016-4437 Shiro反序列化漏洞复现详细分析解释
运维·服务器·网络·python·算法·安全·web安全
2603_953527994 小时前
WordPress Finale Lite 插件高危漏洞检测与利用工具 (CVE-2024-30485)
前端·python·安全·web3·xss
腾讯安全应急响应中心6 小时前
AI安全,由攻入防|腾讯广告AI专项众测正式启动
人工智能·安全
不灭锦鲤6 小时前
网络安全学习第59天
学习·安全·web安全
上海云盾-小余6 小时前
DDoS 攻击应急响应全流程:从告警触发到业务恢复的黄金 15 分钟
服务器·安全·游戏·ddos
amao99887 小时前
系统安全-访问控制
安全·系统安全
黎阳之光7 小时前
黎阳之光核工厂202应急管控平台|全域实景孪生,筑牢核安全最后一道防线
大数据·人工智能·算法·安全·数字孪生
amao99888 小时前
系统安全--物理安全
安全·系统安全