wargames-krypton

wargames的krypton是以通关游戏的方式来学习密码学相关知识。

文章记录在通关过程中新学习知识盲点。

前言

游戏的服务器地址krypton.labs.overthewire.org,端口2231,用户名从krypton1krypton7,上一关会解出下一关的密码。相关说明在/krypton/目录中。

可以用ssh krypton1@krypton.labs.overthewire.org -p 2231来连接。

LV0

题干已经明出base64编码 S1JZUFRPTklTR1JFQVQ=
echo S1JZUFRPTklTR1JFQVQ= | base64 -d

KRYPTONISGREAT

LV01

关键字 a simple rotation called ROT13
一般讲密码学的学的书,都会从简易的替换式密码开始讲。
ROT13就是其中一个比较典型的替换密码。也是凯撒密码的一个变种。

1
2
krypton1@bandit:~$ cat /krypton/krypton1/krypton2 | tr 'A-Za-z' 'N-ZA-Mn-za-m'
LEVEL TWO PASSWORD ROTTEN

LV02

有个可执行程序encrypt,具有特权,密钥是keyfile.dat,可以选择对文件进行加密。
因为环境权限的限制,要在tmp目录下创将工作区。建立keyfile到工作区的软连接。

1
2
krypton2@bandit:~$ ls -l /krypton/krypton2/encrypt
-rwsr-x--- 1 krypton3 krypton2 16328 Sep 1 06:30 /krypton/krypton2/encrypt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cd  /krypton/krypton2
cat /krypton/krypton2/README
mkdir /tmp/p1aMNXmvWCrIoj5yCVKo
cd /tmp/p1aMNXmvWCrIoj5yCVKo
chmod 777 .
ln -s /krypton/krypton2/keyfile.dat
echo 'ABCDEFG' > t.txt
chmod 777 t.txt
/krypton/krypton2/encrypt /tmp/p1aMNXmvWCrIoj5yCVKo/t.txt
cat ./ciphertext
# 可以观察到ABCDEFG 加密后,变成了 MNOPQRS,有点像相当于A转化成M,依次类推
/krypton/krypton2/encrypt /etc/krypton_pass/krypton3
cat ciphertext | tr 'M-ZA-Lm-za-l' 'A-Za-z'
# 明文 CAESARISEASY

LV03

给了三段秘文,及两个提示,并在README中告知这三段是通过同一方法加密的。

提示中给出需要进行频率分析(Frequency Analysis)

这题我属于知道原理,但没有称手的工具。 就直接看了参考答案了。

1
2
3
4
cd /krypton/krypton3
cat /krypton/krypton3/krypton4 | tr 'A-Z' 'BOIHGKNQVTWYURXZAJEMSLDFPC'
# WELLD ONETH ELEVE LFOUR PASSW ORDIS BRUTE
# well done the level four password is BRUTE

LV04

前面几关是替换的类型加密方式,这关是多密码表(A polyalphabetic cipher)的加密方式。

其中简单的一种形式是维吉尼亚密码(vigenere)

破译维吉尼亚密码的关键在于它的密钥是循环重复的。
如果我们知道了密钥的长度,那密文就可以被看作是交织在一起的凯撒密码,而其中每一个都可以单独破解

找了一个vigenere解密工具
https://f00l.de/hacking/vigenere.php

拷贝上面密文

因为有提示,密钥长度为6位。

密钥是:frekey
解出的下一关密码为: CLEARTEXT

LV05

和上一关一样,只是key长度未知。

还是用那个工具,先是猜key的长度。再是猜密码。再解密。

密钥:keylength
解出的下一关密码为: RANDOM

LV06

考察了选择明文攻击方法

mkdir /tmp/xqiRXPmUnFTvI6X07SSb

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
cd  /krypton/krypton6
mkdir /tmp/xqiRXPmUnFTvI6X07SSb
cd /tmp/xqiRXPmUnFTvI6X07SSb
chmod 777 .
ln -s /krypton/krypton6/keyfile.dat
python2 -c 'print "A"*256' > t.txt
/krypton/krypton6/encrypt6 t.txt tout.txt
# 观察tout.txt,30个字母一个循环。 EICTDGYIYZKTHNSIRFXYCPFUEOCKRN
python2 -c 'print "BBBB"+"A"*252' > t2.txt
/krypton/krypton6/encrypt6 t2.txt t2out.txt
cat t2out.txt
# 对比tout.txt 与t2out.txt,只有前4个发生化。说明一位一影响一位。
# 进一步对比,明文从A变化B,密文从E变到F,有一个增加
# 相同的明文在不同的位置上,单个增加4,
# EICTDGYIYZKTHNSIRFXYCPFUEOCKRN
# FJDUDGYIYZKTHNSIRFXYCPFUEOCKRN

/krypton/krypton6/encrypt6 /etc/krypton_pass/krypton7 out

PNUKLYLWRQKGKBE

参考


wargames-krypton
https://blog.fengcl.com/2022/10/03/wargames-krypton/
作者
frank
发布于
2022年10月3日
许可协议