(十四)、攻防世界cry新手村 & RSA & 椭圆曲线加密 & base64 &传统密码学

前言:在做逆向题的时候遇到了好多加密解密类型的题,有些大佬的wp一眼都能看出来题目的做法 ,我看到了差距,想学习一下密码学,同时提升一下 python 编程的能力

 

 

01 base64

 

一、得到文件

 

 

 

二、解密,拿到flag

 

使用工具解密

 

cyberpeace{Welcome_to_new_World!}

 

三、下面让我们了解一下base64加密吧

 

1、Base64标准索引表

 

 

可以看到base64索引表 包含了26个英文字母大小写,10个数字,还有两个特殊符号 “+”,”/”

 

2、加密方法

第一步,将字符串每三个字节分成一组,一组就是24位。

第二步,将字符串转化成asc码再把asc码转化成二进制的形式

第三步,把二进制数每6位分成一组,每组前面补两个0,即构成8位

第四步,查密码表,替换每组对应的值

 

注意,由于是6位一组,末尾可能会出现为数不够的情况,不够补零,如果补了两个零,最后得到的base64编码后面需要加一个 = ,如果补了四个零,则需要加 ==

 

3、实际使用

在ctf中有的题目会变换索引表来进行考察base64 加解密

比如攻防世界RE 第52题 2ex1 ,就是通过变换索引表实现base64加密的。

 

4、base64加密的特点

(1)、标准的base64加密只有那64个字符

(2)、等号一定用作后缀!!!!!

(3)、base64编码后的字符串一定能被4整除(算上等号),因为base64编码三个字节一组,且位数除以4

5、拓展

Base64用6位表示字符,base32 就是用5位表示字符,同理base16就是用4位表示字符

附Base32索引表

 

 附Base16索引表

 

 

 

 

 

 

02 Casesar

 

凯撒加密

一、 取得文件

 

二、 凯撒解密

偏移挨着试试就能得到答案

 

 

cyberpeace{you_have_learned_caesar_encryption}

三、下面我们了解一下凯撒加密原理

1、替换加密

凯撒加密采用的是替换加密技术,

 

比如 明文是 ABCDEF  密文是DEFGHI  那就说明偏移为3(解密时,密钥为3)

 

2、变种凯撒加密

有的凯撒加密算法会在字母偏移的基础上加上自己的下表偏移,比如明文为DEF,设置偏移为3,DEF在偏移的同时加上自己的下表。

比如E的下表是1,那就再加上大小为1的偏移,所以E变换为 A;F下表为2 ,变换后再加上大小为2的偏移,变为A。

通过这种加密,DEF最后变成 AAA

 

 

3、凯撒加密的局限性

凯撒加密只能对字母进行偏移

 

4、凯撒加密特点

一般来说凯撒加密的字母只有大写或小写

 

 

 

03 Morse

 

摩斯密码

一、取得文件

 

二、摩斯密码解密

注意先把0和1转化成 .与- ,把空格转化为/

 

注意转化格式

 

 

最后flag为  cyberpeace{morsecodeissointeresting}

 

三、 下面了解一下摩斯密码的原理

摩斯密码的原理是用特殊的符号代表具体的字母

摩斯密码对照表如下:

 

 

在一些网站上用的是-代替_加密  有的网站用 / 来分别不同字符之间的加密

 

四、 摩斯密码的特征

由. – 与 /组成,/ 为不同字符之间的分隔符

 

 

 

 

04  幂数加密

云影密码

 

 

一、拿到密文

 

 

二、解密

以0为字符的分解:

88421 122 48 2244 4 142242 248 122

23    5  12  12 4  15     14  5

 

对照ABCDEFG…字母下表

可得:WELLDONE

 

Flag即为:  cyberpeace{WLLDONE}

 

三、下面我们研究一下二进制幂数加密原理

1、二进制幂数加密

幂数加密,即用数字表示英文字母

由于英文字母只有26个字母。只要2的0、1、2、3、4、5次幂就可以表示31个单元。通过用二进制幂数表示字母序号数来加密。

 

明文: d o n o t p u l l a l l y o u r e g g s i n o n e b a s k e t

字母序号:4 15 14 15 20 16 21 12 12 1 12 12 25 15 21 18 5 7 7 19 9 14 15 14 5 2 1 19 11 5 20

 

比如 4 = 2^2,所以4经过加密后就是2;15=2^0+2^1+2^2+2^3所以15加密后是0123

 

字母加密结果对照:

 

 

 

2、云影密码(01248密码)

一般的二进制幂数加密使用 01234来表示字母次序,而云影密码是用01248表示字母次序(0代表字母之间的分隔)

云影密码的优势就是好算,比如同样对下表为15的字母加密,普通的二进制幂数加密后是:0123  而云影加密后是:148  或者 142242 。即每位相加即是字母下表的序号

 

四、特征或局限性

特征就是只由01234 / 组成或01248组成

局限就是只加密字母

 

 

 

05 Railfence

 

www变种栅栏密码

一、 拿到密文

 

 

 

二、 解密

这是栅栏密码的变种形式,www栅栏密码

 

Flag : cyberpeace{railfence_cipher_gogogo}

 

三、下面我们研究一下栅栏密码的原理

1、理论

栅栏密码就是把要加密的明文分成N个一组,然后把每组的第1个字连起来,形成一段无规律的话。 不过栅栏密码本身有一个潜规则,就是组成栅栏的字母一般不会太多。(一般不超过30个,也就是一、两句话)

2、 加密原理

 

 

四、栅栏密码的变种---www型栅栏密码

就是让数字以W型的形式排列

 

 

06 不仅仅是Morse

一、 获取密文

 

 

二、 解密

 

第一步是摩斯密码,第二步是培根密码

 

 

那么flag就是:  cyberpeace{attackanddefenceworldisinteresting}

三、 下面我们来了解一下培根密码

1、由来

培根密码,又名倍康尼密码,是由法兰西斯·培根发明的一种隐写术。

 

2、原理

使用a和b来代替密文中的英文字母,培根密码其实是一种替换密码

 

3、 转化表

 

 

 

解密时倒序即可

 

四、拓展

 

我们甚至可以用两个不同的属性来实现培根密码的隐藏

比如:

以下一段包含了'steganography',正常字体是A,粗体是B:

To encodeamessage each letteroftheplaintextis replaced by a group of fiveofthe letters'A'or 'B'.

 

我们把正常字体的字母转化成A,把粗体字体的字母转化成B,得到结果后再次对照培根密码转化表就可以解密得到明文 steganography 了

 

这种方法能很好的影藏培根密码

 

 

五、特点

1、普通的培根根密码由大量的A,B或a,b组成,很好辨认

2、普通的培根密码只是加密字母

3、培根密码有比较强的可拓展性,使得它可以加密任何具有两种不同属性的明文

 

 

07 混合编码

 

 

一、 拿到密文

 

 

二、 解密

首先是Base64解密

 

 

然后是unicode解密

 

 

再然后是base64解密

 

 

最后asc码解密

 

拿到flag:cyberpeace{welcometoattackanddefenceworld}

 

三、 记录一下编码的特点

1、unicode编码特点是 \u ; &# ;

2、base64 后面有等号,只由那64个字符组成

 

四、asc码表

 

 

08 easy_RSA

 

RSA加密

一、 拿到文件

 

 

二、解密

公钥是(E,N),私钥是(D,N),所以密钥对即为(E,D,N)

 

 

这里介绍一下工具的使用

右上方的NumberBase代表了进制

左下角的calc.D表示获取D的值,Factor N表示把N质数分解,分解的值显示在P,Q编辑框中

 

Flag:  cyberpeace{125631357777427553}

 

 

 

三、我们研究下RSA加密算法

1、非对称加密

RSA加密算法是一种非对称加密算法,所谓非对称,就是指该算法加密和解密使用不同的密钥,即使用加密密钥进行加密、解密密钥进行解密。

2、RSA算法的一般使用

RSA算法通常是先生成一对RSA密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开。为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。

 

3、RSA加密过程

 

抄自 https://blog.csdn.net/a745233700/article/details/102341542

 

4、 RSA解密过程

 

 

抄自 https://blog.csdn.net/a745233700/article/details/102341542

 

5、 生成密钥对

公钥是(E,N),私钥是(D,N),所以密钥对即为(E,D,N)

 

抄自 https://blog.csdn.net/a745233700/article/details/102341542

 

09 easychallenge

 

一、拿到文件

 

 

 

 

二、反编译

 

三、分析

 

将输入的字符经过三次加密后与final指向的字符串相等则拿到flag,逆向题

 

四、 解密

解密脚本如下:

 

import base64

final = 'UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E==='

def decode2(s):
    ans = ''
    for i in s:
        x = ord(i)#ord()函数就是用来返回单个字符的ascii值(0-255)或者unicode数值()
        x = x ^ 36
        ans += chr(x - 36)

    return ans

def decode1(s):
    ans = ''
    for i in s:
        x = ord(i)
        x = x - 25
        ans += chr(x ^ 36)
    return ans

if __name__ == "__main__":
    re3 = decode1(decode2((base64.b32decode(final)).decode('ISO-8859-1')))
    print(re3)

 

拿到flag: cyberpeace{interestinghhhhh}

 

 

写脚本的时候出现了这个问题,不支持utf-8编码,记录一下,下次遇到不慌

 

五、 总结

一道简单的逆向题,没什么好说的

 

10 转轮机加密

 

转轮机加密(wheel cipher)

一、获取文件

 

 

二、 解密

猜想了很多格式都没有猜到,不装了,不会

 

参考 https://www.freesion.com/article/2890547950/

 

我们从加密的角度来理解这道题

假设我们是加密的人,假设我们已知明文,我们的机器则是 13 转轮密码机

 

一开始我们的转轮机上不同转轮的值显示的是我们要加密的明文,然后我们转动这13个转轮来加密我们13位的明文,转动后转轮机显示的结果即是密文,密文即是

一般的转轮机工作到这里可能就结束了,但这个转轮机转动之后又改变了13个转轮位置,

改变的方法就相当于密钥,改变后的结果就是下图

 

 

 

这样一想,我们解密的思路就清晰了

1、 先用密钥恢复13个转轮的位置

2、 再通过13位密文分别转动13个转轮

3、 我们不知道一开始明文是第几列,所以我们要判断,即看遍所有列,找出符合情景的那一个答案

 

 

调整转轮后:

 

转动转轮后

 

 

 

对比列找到 flag(注意到这个二战)

 

 

第18列拿到flag:   fireinthehole      

 

 

三、转轮机工作原理

 资料好少,不过易懂,直接贴链接:

https://blog.csdn.net/zdh89786/article/details/84497357

 

 

11 Normal_RSA

 

 

一、 获取文件

 

一个enc文件和一个pem文件

.enc文件用wire’shark打不开

 

 

记事本打开:

 

 

猜测分别是加密后的文件与公钥

二、 思路展开

我们知道了公钥可以根据公钥求E和N。再根据N求p与q,进而得到L,最后得到D。这样我们就获得密钥对

 

 

 

三、 解密

这里介绍一个工具 openssl

Kail上自带

1、openssl

 

 

-pubin :指定输入文件是公钥

-text : 以明文的形式输出各个参数值

-modulus : 输出模数值

-in val :指定输入文件

 

这样我们就得到了模N(Modulus) =

C2636AE5C3D8E43FFB97AB09028F1AAC6C0BF6CD3D70EBCA281BFFE97FBE30DD

以及e = 65537

 

 

2、下面我们根据N(Modulus)获取 p 与 q

首先把modulus转化成10进制

网站: https://tool.lu/hexconvert/

 

得到10进制:

87924348264132406875276140514499937145050893665602592992418171647042491658461

 

 

Modulus大数分解:

http://www.factordb.com/

 

 

 

得到p:275127860351348928173285174381581152299

q: 319576316814478949870590164193048041239

 

3、使用rsatools计算

python rsatool.py -f PEM -o private.pem -p 275127860351348928173285174381581152299 -q 319576316814478949870590164193048041239 -e 65537

 

 

4、 用私钥解密flag

openssl rsautl -decrypt -in flag.enc -inkey prikey.pem

 

 

参考 https://segmentfault.com/a/1190000018084284

5、 拿到flag

RCTF{256b_i5_m3dium}

 

总结

这道题主要是对openssl工具与rsatools等常用工具的使用

 

12 Easy_ECC

 

一、 获取文件

 

椭圆曲线加密(ECC)

 

 

二、 求公钥

没学过椭圆曲线加密,为此看了下面这个博客,感悟颇多

https://blog.csdn.net/qmickecs/article/details/76585303

椭圆曲线的一般式:

 

 

推测得到的文件上的a,b即为这个椭圆曲线的参数,G应该椭圆曲线上的基点

密钥k为所乘倍数

P为模

三、 ECCTOOL拿到flag

链接:https://bbs.pediy.com/thread-66683.htm

 

 

拿到flag

cyberpeace{19477226185390}

 

四、 我们了解一下椭圆曲线加密

下面所有内容皆来自下面这个博客

https://blog.csdn.net/qmickecs/article/details/76585303

为了方便我自己复习,我对此博客内容进行了摘抄,只是摘抄

1、 简介

椭圆曲线加密简称ecc ,全名:elliptic curve encryption

椭圆曲线安全性特别高,比特币,许多大型网站的身份认证机制便是以ECC为基础的

 

 

下面介绍椭圆曲线之前,先说说什么离散对数问题

2、离散对数问题

 

3、Diffie–Hellman密钥交换

 

 

4、椭圆曲线

椭圆曲线不同于我们学的圆锥曲线,因为椭圆曲线是三次方程描述的曲线

 

 

5、椭圆曲线上的运算

首先是加法

设椭圆曲线上有两点,A和B点,那么作过这两点的直线与该曲线相交于第三点(C点),然后关于X轴对称得到D点,则D为这两个点的和,记作D = A + B 。很明显,D点也在该曲线上。所以椭圆曲线上两点之和也是曲线上的点。

 

 

这样一来,可以证明交换律和结合律:

 

画图网站: https://www.geogebra.org/classic

 

 

当A,B两点形成的直线垂直于X轴时:

我们定义坐标系中距离X轴无穷远点为椭圆曲线上的一个特殊点,称为0点(零点)。 因为任意一条垂直于X轴的直线都会与椭圆曲线相交于0点。

 

对于这个0点,有以下结论:

 

这样以来我们变相定义了椭圆曲线中的负数。若A + B = 0 ,那么B = − A 。椭圆曲线上点的减法也就自然而然地出现了,A − B = A + ( − B )

 

下面再定义乘法

 

 

6、椭圆曲线上的离散对数问题

设P为椭圆曲线上的一点,如果我们像计算k倍P的值,可以通过累计k-1次P的方法计算,但是显然,这种方法很笨,时间复杂度是线性的

我们可以用结合律:

 

这个方法被称为快速幂算法,原本常用于快速计算某个数的k次幂,这里将其推广到椭圆曲线点乘的快速计算中。

 

利用快速幂算法计算k ∗ P 的时间复杂度是对数级的,但是要在知道k ∗ P 和P的前提下,倒推出k的值,没有比挨个尝试k的值快太多的算法。于是椭圆曲线加密依赖的数学难题就这么诞生了。

 

 

 

7、有限域上的椭圆曲线

 

实数域上的椭圆曲线是连续的,有无限个点,密码学要求有限点。

实数域上的椭圆曲线的运算有误差,不精确。密码学要求精确。

所以我们需要引入有限域上的椭圆曲线。

 

取模后的椭圆曲线仍然对称:

 

 

 

8、基于椭圆曲线的DH密钥交换(ECDH)

ECDH跟DH的流程基本是一致的。

 

由于计算椭圆曲线上的离散对数是很难的,所以第三方没办法在只知道x ∗ P和y ∗ P的情况下计算出x或y的值

 

椭圆曲线知识,均是摘抄下面这个博客的..

https://blog.csdn.net/qmickecs/article/details/76585303

 

 

五、 ECC vs RSA的优缺点

 

 

 

 

抄自  http://www.noobyard.com/article/p-ywxsfiik-dh.html

 

Cry新手题总结

至此,cry12道新手题已全部完成,后面几道题还是很难的

在这12道题中我学到了base64加密,凯撒加密,摩斯密码,幂数加密及其变种云影密码,栅栏加密极其变种www栅栏加密,RSA加密,转轮机加密,椭圆曲线加密

这几道题有的很有意思,有的需要脑洞,有的比较难。

未来的路才刚刚开始

 

posted @ 2022-01-28 23:30  TLSN  阅读(1057)  评论(0)    收藏  举报