CTF之密码学笔记

作者: 小小怪吃吃吃 | 来源:发表于2018-01-28 20:00 被阅读361次

    总是习惯性将所有事情拖到ddl前一天晚上......(这是病,得治!!!!)
    实在是困得不行了&_&,好多内容还没写,回头再补充。

    密码学

    密码学(Cryptography)一般可分为古典密码学和现代密码学。
    对密码系统的攻击:


    mimagongji.png

    一、古典密码
    在CTF中,我们经常能看到一些简单的古典密码。在古典密码学中,我们主要介绍单表替代密码,多表替代密码,以及一些其它比较有意思的密码。

    1、单表代换密码:代换是对每个字母逐个进行。

    在单表代换中,明密文一一对应。所以说,一般有两种方式来进行破解:密钥空间小时可采用暴力破解;密文长度足够长时,使用词频分析(字母:E>T>A>O>I,词组:the>ing>and>her>e,在线分析:http://quipqiup.com/

    (1)凯撒密码:凯撒密码(Caesar)加密时会将明文中的 每个字母 都按照其在字母表中的顺序向后(或向前)移动固定数目(循环移动)作为密文。

    特定的凯撒密码:
    1)偏移量为 13时 ROT13
    2)一种基于密钥的凯撒密码 Keyed Caesar:利用一个密钥,将密钥的每一位转换为数字(一般转化为字母表对应顺序的数字),分别以这一数字为密钥加密明文的每一位字母。
    破解:遍历26个偏移量,词频分析(密文多时适用)
    在线加解密:http://planetcalc.com/1434/

    (2)移位密码:与凯撒密码类似,区别在于移位密码不仅会处理字母,还会处理数字和特殊字符,常用 ASCII 码表进行移位。

    破解:遍历所有的可能性
    在线加解密:http://www.practicalcryptography.com/ciphers/classical-era/atbash-cipher/

    (3)简单替换密码:简单替换密码(Simple Substitution Cipher)加密时,将每个明文字母替换为与之唯一对应且不同的字母。它与恺撒密码之间的区别是其密码字母表的字母不是简单的移位,而是完全是混乱的。

    破解:由于这种加密方式导致其所有的秘钥个数是26!,所以几乎上不可能使用暴力的解决方式。所以我们 一般采用词频分析。

    (4)仿射密码:


    fangshemima.png

    (原理看书👀)
    破解:可用词频分析,也可根据具体情况进行密码攻击。

    2、多表代换密码:代换对多个字母同时进行。对于多表替换加密来说,加密后的字母几乎不再保持原来的频率,所以我们一般只能通过寻找算法实现对应的弱点进行破解。
    (1)Playfair
    (2)Polybius
    (3)Vigenere
    (4)Nihilist
    (5)Hill
    (6)AutokeyCipher

    3、其他古典密码
    (1)培根密码:培根密码使用两种不同的字体,代表 A 和 B,结合加密表进行加解密。

    特点:只有两种字符、每一段的长度为 5、加密内容会有特殊的字体之分,亦或者大小写之分。
    在线加解密:http://rumkin.com/tools/cipher/baconian.php
    通常查表直接解:
    http://blog.csdn.net/qq_39455664/article/details/78344952

    (2)栅栏密码:栅栏密码把要加密的明文分成 N 个一组,然后把每组的第 1 个字连起来,形成一段无规律的话。

    (3)列移位加密:列移位密码(Columnar Transposition Cipher)是一种比较简单,易于实现的换位密码,通过一个简单的规则将明文打乱混合成密文。

    在线加解密:http://www.practicalcryptography.com/ciphers/classical-era/columnar-transposition/

    (4)01248 密码:该密码又称为云影密码,使用 01248 四个数字,其中 0 用来表示间隔,其他数字以加法可以表示出 如:28=10,124=7,18=9,再用 1->26 表示 A->Z。

    特点:只有 01248

    (5)摩斯密码:摩尔斯电码(又译为摩斯密码,Morse code)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。

    特点:只有.(点)和-(划)
    在线加解密:https://www.bejson.com/enc/morse/

    (6)JSFuck:JSFuck 可以只用 6 个字符 !+ 来编写 JavaScript 程序。
    在线加解密:http://www.jsfuck.com/
    (7)BrainFuck:

    brainfuck.png

    (8)猪圈密码:猪圈密码是一种以格子为基础的简单替代式密码。
    在线加解密:http://www.simonsingh.net/The_Black_Chamber/pigpen.html

    二、现代密码
    现代密码学又可以简单的分为以下几个方面:
    对称密码,以 DES,AES,RC4 为代表
    非对称密码,以 RSA,椭圆曲线加密为代表
    HASH,以 MD5,SHA1,SHA512 等为代表
    数字签名,以 RSA 签名,ElGamal 签名,DSA 签名为代表
    其加密方式主要有两种方式:块加密、流加密
    一般来说,密码设计者的基本想法是确保密码框架的保密性、完整性、可用性、不可否认性,其中,前三者又称为 CIA 三元组。
    而对于密码破解者来说,一般都是要想办法识别密码算法,然后利用暴力破解方法或者密码框架的漏洞进行破解。当然,也有可能是处于希望构造虚假的哈希值或者签名来绕过相应的检测。

    1、对称密码:加密、解密密钥相同或者很容易从其中一个推出另一个。
    (1)DES
    (2)AES
    (3)RC4
    (4)A5

    2、非对称密码
    (1)RSA算法
    (2)RSA衍生算法

    编码

    1、ASCII编码


    ascii.gif
    0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字符);
    32~126(共95个)是字符(32是空格),其中48~57为0到9十个阿拉伯数字;
    65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等
    

    在线转换:http://tool.oschina.net/encode?type=3
    工具:win下小葵转换器

    2、Base64/32/16编码

    1)Base64:所谓Base64,就是说选出64个字符----小写字母a-z、大写字母A-Z、数字0-9、符号"+"、"/"(再加上作为垫字的"=",实际上是65个字符)----作为一个基本字符集。然后,其他所有符号都转换成这个字符集中的字符。
    2)Base32:Base32编码将二进制文件转换成由32个ASCII字符(大写字母A-Z、数字2-7)组成的文本。
    3)Base16:Base16编码则将二进制文件转换成由16个字符(大写字母A-F、数字0-9)组成的文本。

    3、URL编码:url编码又叫百分号编码,是统一资源定位(URL)编码方式。
    编码方法很简单,在该字节ascii码的的16进制字符前面加%。

    4、Unicode编码

    Unicode编码有以下四种编码方式:
    源文本: The
    &#x [Hex]: The
    &# [Decimal]: The
    \U [Hex]: \U0054\U0068\U0065
    \U+ [Hex]: \U+0054\U+0068\U+0065

    参考于:https://github.com/ctf-wiki/ctf-wiki

    相关文章

      网友评论

        本文标题:CTF之密码学笔记

        本文链接:https://www.haomeiwen.com/subject/umvzaxtx.html