CTF学习-密码学解题思路
CTF学习-密码学解题思路
密码学概述
密码学的发展
- 第一个阶段是从古代到19世纪末-古典密码 (classical cryptography)
- 第二个阶段从20世纪初到1949年-近代密码
- 第三个阶段从C.E.Shannon (香农)于1949年发表的划时代论文 "The Communication Theory ofSecret Systems "开始-现代密码
- 第四个阶段从1976年W. Diffie和M. Hellman创造性地发表了论文"New Directions in
Cryptography"开始-公钥密码
密码编码学
(1)密码编码学是密码学的一个分支,研究与信息安全(例如:机密性、完整性、可鉴别性)有关的数学技术。
(2)密码编码学是包含数据变换的原理、工具和方法的一门学科,这种数据变换的目的是为了隐藏数据的信息内容,阻止对数据的篡改以及防止未经认可使用数据。
(3)密码编码学是论述使明文变得不可懂的密文,以及把已加密的消息变换成可懂形式的艺术和技巧。
对称加密不对称加密
-
对称密码算法(Symmetric cipher) :加密密钥和解密密钥相同,或实质上等同,即从一个易于推出另一个。又称传统密码算法(Conventional cipher)、秘密密钥算法或单密钥算法。
DES、 3DES、 IDEA、 AES -
非对称密码算法(Asymmetric cipher). : 加密密钥和解密密钥不同,从一个很难推出另一个。又叫公钥密码算法(Public一key cipher)。其中的加密密钥可以公开,称为公开密钥(public key),简称公钥;解密密钥必须保密,称为私人密钥(private key),简称私钥。
RSA、 ECC、 EIGamal
摘要算法
数据摘要算法是密码学算法中非常重要的一个分支, 它通过对所有数据提取指纹信息以实现数据签名、数据完整性校验等功能,由于其不可逆性,有时候会被用做敏感信息的加密。数据摘要算法也被称为哈希(Hash) 算法、散列算法,常见的摘要算法有MD5和SHA
在互联网上进行大文件传输时,都要得用MD5算法产生一个与文件匹配的、存储MD5值的文本文件(后缀名为md5或md5sum),这样接收者在接收到文件后,就可以利用与SFV类似的方法来检查文件完整性,绝大多数大型软件公司或开源组织都是以这种方式来校验数据完整性,而且部分操作系统也使用此算法来对用户密码进行加密,另外,它也是目前计算机犯罪中数据取证的最常用算法。
SHA中SHA1的应用较为广泛,主要应用于CA和数字证书中,另外在互联网中流行的BT软件中,也是使用.SHA1来进行文件校验的,由于SHA系列算法的数据摘要长度较长,因此其运算速度与MD5相比,也相对较慢。
ASCII编码
ASCII码使用指定的7位或8位二进制数组合来表示128或256种可能的字符。标准ASCII码也叫基础ASCII码,使用7位一进制数(剩下的1位一进制为0)来表示所有的大写和小写字母,数字0到9、标点符号,以及在美式英语中使用的特殊控制字符。
Base64编码
Base64顾名思义就是用64个可显示字符表示所有的ASC字符,64也就是6Bits, 而ASC字符一共有256个,也就是8Bits。 Base64编码要求把3个8位字节(38=24)转化为4个6位的字节(46=24) ,之后在6位的前面补两个0,形成8位一个字节的形式。如果剩下的字符不足3个字节,则用0填充,输出字符使用’=' ,因此编码后输出的文本末尾可能会出现1或2个’='
URL编码
ur|编码就是一个字符ascii码的十 六进制。不过稍微有些变动,需要在前面加上“%”。比如"\”,它的ascii码是92, 92的十六进制是5c,所以"" 的ur|编码就是%5c。
特点:密文中有多个%号符
Unicode编码
Unicode码扩展自ASCII字元集。在严格的ASCII中,每个字元用7位元表示,或者电脑上普遍使用的每字元有8位元宽;而Unicode使用全1 6位元字元集。这使得Unicode能够表示世界上所有的书写语言中可能用於电脑通讯的字元、象形文字和其他符号。
特点:密文中有多个\uxxx
JS混淆
有些时候开发者为了保护劳动成果可以通过对javascript的变量名称和过程名称进行编码,从而起到混淆js代码的作用,通常使用eval函数进行混淆处理,该函数可以计算字符串,并执行其中的JS代码。
如,对<script>alert( 'XSS' ); </script>
进行16进制转换,然后使用eval函数进行读取
特点:通常在JS脚本里使用eval与function函数进行混淆。