CTF密码学培训(1)

502 阅读6分钟

CTF密码学主要出题思路

密码学在CTF方面的考察,基本上是考察密码算法的安全性分析,也就是在给定一定条件下,去破解某个算法、某个协议最终拿到flag。flag一般也就是明文、密钥、IV等。

大致来讲,现在的CTF密码学的侧重点比较明显,就是区块链和公钥RSA的比较多,基本上的比赛肯定会有RSA的题,考法也千奇百怪。但是对于国内的这种政府组织的赛事,考察的就会比较广,那么就编码、分组密码、流密码、公钥都可能考到。

并且,需要说明的是,编码是基础,因为密码学归根结底是数学,出题方隐藏的flag是字符串,那么这些字符串肯定是通过编码成立二进制串再参与计算的,也就是说尽管我们用RSA等方法解出了一串数字,最终都是要解码才能拿到flag。

还需要说明的是,现代密码学的考点,基本上喜欢用python脚本出题,所以解题也有python居多,这就要求大家最起码要会使用基础的python脚本代码。

编码基础————认识编码

计算机的世界只有二进制,其他的一切都是人们为了方便表达和理解所赋予的。

为了方便表达和阅读,我们常用16进制表示地址、指令等。

为了能够使用计算机表达信息,发明了ASCLL码,用来表示基本的字符、数字、符号。

所以,当我们向一个txt文档写入字母a时,存入的实际上是01100001。

编码基础————Unicode编码

ASCLL编码使用了7位(0-127)共128个数来编码基本字符,显然这128个数字不能包含所有的字符和符号,比如中文就完全没办法表达。

后来人们发明了Unicode统一编码,早期2个字节共65536大小空间的数来表达字符和符号。后面扩展到31位来表达信息。即全世界的每一个字符,都给一个特定的数字来表示。

凡是所有东西都用2个字节来表示,未免过于浪费,比如英文字符前面一个字节都是0.所以需要更优化的编码方式来表示unicode。于是就有了UTF-8等编码方式。

编码基础————Hex、Base64编码

前面提到的将二进制信息使用十六进制表示,也就是hex编码模式。这种编码方式简单快捷。对abc编码->616263,所以当看到一串字符串,只有字母a-f和数字0-9的时候,就要考虑这是不是hex串了,看看能不能用ASCLL解码出flag或提示。这里要求对ASCLL非常熟悉。

Hex固然好用,但是传输效率不高,比如a,用61表达,就需要2个字符。后来人们发明了Base64,可以做到4个字符表达3个字节。Base63使用最普遍的字符。 111.png

编码基础————古典密码学

古典密码学主要分为单表替代密码和多表替代密码,以及一些衍生的密码。

单表代换加密:在单表替换加密中,所有的加密方式几乎都有一个共性,那就是明密文一一对应,所以说,一般有以下两种方式进行破解。

在密钥空间较小的情况下,采用暴力破解方式。

在密文长度足够长的时候,使用词频分析。

多表代换加密:对于多表替换加密来说,加密后的字母几乎不再保持原来的频率,所以我们一般只能通过寻找算法实现对应的弱点进行破解。 222.png

编码基础————其他编码(www.hiencode.com/)

摩斯编码:用点和线表示信息。

键盘编码:采用手机键盘或者电脑键盘进行加密。

猪圈密码:猪圈密码是一种以格子为基础的简单替代式密码。

培根密码:培根密采用两种不同的字体,代表A和B,结合加密表进行加解密。

栅栏密码:栅栏密码把要加密的明文分成N个一组,然后把每组的第一个字连起来。

曲路密码:将明文划分成矩阵,然后双方约定一条曲路编码。

维吉尼亚密码:和凯撒密码很像,但是使用了多表置换。

Polybius:又称为棋盘密码,其一般是将给定的明文加密为两两组合的数字。

现代密码题型分析————哈希函数

哈希函数又称散列算法、散列函数,是一种从任何一种数据种创建小的数字“指纹”的方法。散列函数把信息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。

哈希函数有以下特点:

单向性:只能由数据产生数字摘要,不能从数字摘要反推数据。

固定长度:哈希函数产生的数字指纹的长度是固定的,比如:md5的长度是128位,sha256的长度是256位。

雪崩效应:两个待产生数字摘要的数据,只要存在微小的差别,产生的数字摘要也将完全不同。

针对哈希函数常见的攻击方法有:

暴力攻击:不依赖于任何算法细节,仅与Hash值长度有关。

生日攻击法:没有利用Hash函数的结构和任何代数弱性质,只依赖于消息摘要的长度,即Hash值得长度。

中点交会攻击法:是生日攻击法的一种变形,不比较Hash值,而是比较中间变量。这种攻击主要适用于攻击具有分组链结构的Hash方案。

密码分析:依赖于具体算法的设计缺点。

现代密码学题型分析————分组密码

分组密码又称为块密码,是对称密码算法。分组密码在加密时,将明文查分成固定长度的分组(一般位64、128、256位长度)。然后再通过加密模式将这些分组连接起来,形成密文。 近年来,出的有关分组密码的题,大多集中在加密和解密逻辑以及加密模式中。因为是对称密码,所以加密和解密使用的密钥时一样的。

分组密码————AES算法

AES是一种分组长度为128位,密钥长度为128、192、256位的分组密码算法,与DES不同的是,这是一种SPN结构算法。所以加密和解密的流程不完全一致。 333.png