【从0到1】CTF crypto方向萌新入门

0. Crypto简介

如图所示

1.常用工具:

下面列举的工具不一定是必须的,但有时间可以都安装一遍,因为学计算机需要”折腾“

没给超链接的请自行搜索下载

如果下载中遇到问题,可自行搜索解决方法或者在相关群上问

1.1. Python

做crypto题最常用的编程语言(可能没有之一

建议 Python3 和 Python2 都安装

个人目前使用频率比较高的是Python3

1.1.1.常用的python库

Crypto

libnum

gmpy2

random

hashlib

pwn

1.2. sagemath

官方简介:

SageMath 是一个基于GPL协议的开源数学软件。它使用Python作为通用接口,将现有的许多开源软件包整合在一起,构建一个统一的计算平台。

我们的目标:创建一个有活力的自由开源软件以替代Magma,Maple,Mathematica和Matlab。

密码学离不开数学,一个功能超完善的计算平台对一个密码手来说无疑是很有吸引力的(意味着很多算法和相关代数结构不需要自己费心去写了

官网/下载渠道:

SageMath - Open-Source Mathematical Software System

Linux也可以使用命令行安装:

1
sudo apt install sagemath-jupter

1.2.1 常用的sage命令

1
2
3
4
5
6
7
8
9
10
11
12
13
#求最大公因子/乘法逆元
gcd(a,b)
xgcd(e,phi)

#解方程
var('p q')
f1 = #p和q的相关等式 == #得数
f2 = #p和q的相关等式 == #得数
solve([f1,f2],p2,q2)

#构造矩阵/LLL算法
A = matrix([[1,h],[0,p]])
lll = A.LLL()

除此以外,还可以通过编写后缀名为.sage的文件(同时支持python和sagemath语法)来运行相关解题脚本

编写完以后在命令行输入(我只在linux试过,windows不知道行不行)

1
sage xxx.sage

运行

1.3. Linux

Windows用户推荐wsl2或虚拟机,MacOS不太清楚

1.4. yafu

用于分解大整数,例如:

1
.\yafu-x64.exe "factor(6)"

类似功能的网站有

factordb.com

1.5.openSSL

遇到题目附件的后缀名奇奇怪怪的,可能就需要用到这个了

1.6. 一些解题相关网页

上面提到的分解大整数的factordb.com

还有词频分析、编码解码、RSA解题套路整合等等……

(链接就不贴了,做题过程中收集就足够了,也可以私聊我要)

2.储备知识

先推荐一些书:

①《具体数论与代数》

强推!

大名鼎鼎的CINTA

bintou老师的大作!

华师网工大二上学期的专业选修”面向信息时代的计算机数学“的教材!

里面涉及的数学知识和代码都非常友好,必看必看,常看常新。

可以自学,不懂可以线上问我(不能线下问的原因是有些点我也忘了,需要时间自己过一遍)

冲冲冲

②《图解密码技术》

密码学科普类书籍,挺好看的,可以用于培养兴趣

③《密码编码学与网络安全》

华师网工大三上学期的专业选修”计算机安全学“的教材

大部头书,想系统了解密码学的可以看

下面列举下做crypto可能用到的知识或者算法,具体内容可以通过看上面的书/上网搜索 等方式学习

2.1.数学

密码学离不开数学。

因为加密与解密离不开计算机,而计算机本质上是一个离散结构,只能处理离散的数量关系,所以离散数学不可或缺。

离散数学是非常大的一块,CTF crytpo题中常涉及的是数论抽象代数

比如:

威尔逊定理

欧拉定理

费马小定理

中国剩余定理(CRT)

拓展中国剩余定理(extend CRT)

还有环域格等代数结构及其相关内容

2.2.密码算法及其相关

首先是一些入门的编码:ASCII,base64等……

值得一提的是,Crypto库里的 bytes_to_long 和 long_to_bytes 很常用,萌新们务必搞清楚它在做什么

然后是古典密码,比如摩尔斯电码,栅栏密码、凯撒密码、猪圈秘密、棋盘密码、培根密码、维吉尼亚密码等很多,还有一些XXencode、UUencode、brainfuck等知道了就肯定会的靠经验的密码或编码,这些网上都能找到

再之后是RC4,DES,AES, 哈希,DH密钥交换,RSA,ECC,格密码等等

……

crypto常用算法有:

线性同余方法(lcg)

欧几里得算法(gcd)

拓展欧几里得算法(extend gcd)

小步大步算法(bsgs)

拓展小步大步算法(extend bsge)

费马因式分解

CopperSmith方法

等等……

3.做题Tips

做题的时候

首先从标题、描述、附件等判断是哪一类的密码,然后再对症下药

萌新上路可以从常见的编码和古典密码开始,之后就可以涉猎对称和非对称了。

对称密码的话,AES及其五种工作模式(ECB,CBC,CFB,OFB,CTR)是绕不开的;非对称的话肯定是从RSA开始了。

题目附件里的代码常有如下字样

1
from secret import flag

可以理解成出题人把flag藏在secret这个私有库里了,这样的代码不能直接运行(所以不要下载所谓的secret库运行它)

需要做题人通过分析代码里面的加密方式还原出flag

在某些题目中,虽然代码本身运行不了,但是某些函数却可以利用(术语:oracle),解密时可以直接挪用到自己的解题脚本上运行。

4.小结

•学会搜索

•克服畏难心理,很多题不需要完全懂里面的数学原理也能做

•平时多收集各类脚本/网页,解题事半功倍

•兴趣是最好的老师,心情次之。没有兴趣或许可以换个方向:-),没心情做题可以歇会

•某些杂项题和密码题只涉及词频分析、编码、古典密码、流密码,少有对数理知识和读写代码能力的要求,但却很考验大家的脑洞,而个人的脑洞是有限的,所以建议团队协作

文章作者: 莫折眉
文章链接: https://m0d1.top/2021/11/16/crypto021/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 M0D1.TOP