[LitCTF 2023] 你是我的关键词(Keyworld)(初级)
题目描述中写道:“YOU are my keworld”,其中“YOU”被明显大写,暗示其可能作为密钥使用。结合附件内容:IFRURC{X0S_YP3_JX_HBXV0PA},可以看出该密文符合常见的 flag 格式结构(即 XXXX{} 形式),初步判断为单表替换类加密。
进一步分析可知,“keworld”很可能是“keyword”的拼写错误或变形提示,进一步支持关键词替换密码的猜测。由于“YOU”在描述中突出显示,极有可能是本次加密所使用的关键词。
[此处为图片1]
通过工具进行关键词密码解密操作:
- 使用关键词“YOU”生成新的字母表顺序
- 对密文 IFRURC{X0S_YP3_JX_HBXV0PA} 进行逆向替换
解密后得到明文结果为:LITCTF{Y0U_AR3_MY_KEYW0RD},提交此 flag 即可正确通过。
知识扩展:关键词替换密码(Keyword Cipher)
关键词替换属于古典密码中的单表代换类型。其核心原理是利用一个预设的关键词重新排列英文字母表。具体步骤如下:
- 将关键词中的字母按出现顺序写入新字母表,去除重复字母
- 随后按照字母表顺序补全剩余未出现的字母
- 建立原字母与新序列之间的映射关系,完成加密或解密
此类题型常见特征包括:
- 密文呈现明显的字母替换模式
- 格式与标准 flag 结构一致(如 LITCTF{...})
- 无典型凯撒移位或维吉尼亚多表特征
- 题干中存在明显提示性词汇,常以大小写异常等方式突出关键词
[HNCTF 2022 WEEK2] S1mple_ECB
题目名称直接提示了加密模式——ECB(Electronic Codebook),这是一种基础的 AES 分组加密模式。附件提供了一个在线交互环境,包含三个功能接口:
- Encrypt data —— 对输入数据进行 AES-ECB 加密
- Decrypt data —— 解密指定的密文数据
- Get encrypted flag —— 获取已加密的 flag 密文
连接服务后可获取完整密文:
758eca93acee51c67bf3490c5cb7f3d1e08378ccc4c0a57e8d0a92600947bd06
AES 加密通常以 16 字节为一个分组单位,而 ECB 模式的最大特点是每个块独立加解密,互不影响。因此即使无法直接解密整段 flag,也可以将其拆分为多个 16 字节的 block 分别处理。
[此处为图片2]
操作流程如下:
- 调用“Get encrypted flag”获取完整密文
- 将密文按每 32 个十六进制字符(对应 16 字节)分割成两个部分:
- Block1:
758eca93acee51c67bf3490c5cb7f3d1
- Block2:
e08378ccc4c0a57e8d0a92600947bd06
- 分别使用“Decrypt data”接口对两个密文块进行解密
解密结果分别为:
- 第一块解密输出:
4e53534354467b4543425f6d3064655f
- 第二块解密输出:
31735f71756934655f73316d706c657d
将两段 hex 值合并并转换为 ASCII 字符串:
4e53534354467b4543425f6d3064655f31735f71756934655f73316d706c657d → NSSCTF{ECB_m0de_1s_qui4e_s1mple}
最终得到 flag:NSSCTF{ECB_m0de_1s_qui4e_s1mple}
知识点总结
ECB 模式特性
- 每 16 字节作为一个独立加密单元
- 各分组之间无链式依赖,互不干扰
- 相同明文块加密后产生相同密文块,结构可预测
- 安全性较低,适用于简单场景或教学演示
攻击思路:逐块解密绕过限制
尽管服务器禁止直接解密整个 flag 密文,但由于 ECB 的分块独立性,可通过手动切分密文块并调用解密接口逐个还原明文,从而实现绕过。
Hex 与 Bytes 基础转换
- 每两个十六进制字符代表一个字节
- Hex 编码可通过编程语言或工具直接转为 ASCII 文本
- 若存在填充(如 PKCS#7),需检查末尾字节并去除多余 padding