Krypton介绍

OverTheWire 的 Krypton 是一个专注于密码学入门概念的在线游戏。

Krypton 游戏旨在通过一系列闯关挑战,让玩家学习和实践密码学知识。游戏中,玩家需要解决各种与加密和解密相关的问题,涉及多种加密技术和算法,如 Base64 编码、ROT13 密码、Caesar 密码、维吉尼亚密码等。

游戏地址:https://overthewire.org/wargames/krypton/

目录

Krypton介绍

通过过程

level0→level1

level1→level2

level2→level3

level3→level4

level4→level5

level5→level6

level6→level7

个人总结


通过过程

level0→level1

很简单的一个base64,在线解码或者使用命令解码

level1→level2

轮换密码第一个想到的就是ROT13

这个和前两个(bandit和leviathan)不一样,这个是在根目录(/)下有个krypton目录,题目内容都在krypton目录下对应的关卡

level2→level3

看了krypton2内容和关卡开始的提示和例子

首先知道的是凯撒加密程序,可以通过例子的方式加密

通过例子的方式加密“AAA”,得到密文为“MMM”,得到偏移量key为12

找个在线工具凯撒解密就可以得到密码了

由于凯撒加密比较简单,加上密码是有意义的单词,所以也可以通过枚举直接拿到密码

level3→level4

README说,明文是英文,密钥重复使用,截获了found1-3也是相同密钥加密的。

两条HINT都提示从频率下手

频率统计出来“S”是最多的

也可以通过python脚本来实现

def char_frequency(text):
    frequency = {}
    # 遍历每个字符
    for char in text:
        if char in frequency:
            frequency[char] += 1
        else:
            frequency[char] = 1
    return frequency

def get_most_frequent_char(frequency_dict):
    max_char = None
    max_count = 0

    # 遍历字典找出最大频率的字符
    for char, count in frequency_dict.items():
        if count > max_count:
            max_count = count
            max_char = char
    
    return max_char, max_count

if __name__ == "__main__":
    cipher_text = "替换要统计的文本"
    
    # 获取频率字典
    frequency = char_frequency(cipher_text)
    print("字符频率:", frequency)
    
    # 获取并输出最高频率的字符
    most_freq_char, max_count = get_most_frequent_char(frequency)
    print(f"出现频率最高的字符是 '{most_freq_char}',共出现 {max_count} 次")

通过检索发现,正常情况“E”使用频率更高,所有在quipqiup中设置“S=E”

通过quipqiup拿到下一关密码

level4→level5

README告诉我们使用的是维吉尼亚密码加密,密钥长度是6

HINT告诉我们频率分析依然有效,但是要间隔6位来破解

拿官方的例子简单谈一下破解方法(仅代表个人拙见):

K=GOLD         P = PROCEED MEETING AS AGREED

 

明文: P R O C E E D M E E T I N G A S A G R E E D\
密钥: G O L D G O L D G O L D G O L D G O L D G O\

密文: V F Z F K S O P K S E L T U L V G U C H K R\

使用G加密的:VKKTGK  ------  PEENAE(对应的明文)

这个密有很明显的特征,K占到一半了,由于密文较短,大概K对应的就是E了(按频率来讲)

K(10),E(4)很明显看出偏移量是6(G)(A是0)

 

由于这个比较恰好,加密到比较多的E上了,正常来说要使用长的密文进行破解,频率分布才更为准确一点。

使用dcode解密,也需要使用较长的密文进行解密

拿到key是FREKEY,再用这个密钥去解密krypton5

得到密码(注意密码没有空格)

level5→level6

REDAME告诉我们这次未知密钥长度

这个就比较复杂了,直接上网站

拿found1去网站上解密出有个KEYLENGTH,感觉很对

得到密码

level6→level7

README说了一大堆,我都没怎么看懂,但是看到ls出有个encrypt6的可执行文件

明文---encrypt6---->密文

所以我可以生成一个特殊的明文,通过encrypt6加密,从而倒推密钥

/tmp/xhh文件中是一串A

拿着这个密钥去解密就能解出krypton7的密码了

个人总结

  • 密码学基础概念
    • 常见加密算法:玩家会接触到多种经典加密算法,如 Base64 编码、ROT13、Caesar 密码、Vigenère 密码等。
    • 加密算法的特点和破解方法:通过不同关卡,了解到各种加密算法的优缺点以及相应的破解思路。
  • 频率分析方法
    • 原理:在 Krypton 中,频率分析是破解密码的重要手段之一。玩家学到了英语中字母出现的频率是有一定规律的,最常见的字母通常是 “e”,然后依次是 “t”“a” 等。通过统计密文中各个字母的频率,并与英语字母的标准频率进行对比,可以推测出密文中字母与明文中字母的对应关系,从而破解密码。
  • 编程实践技能
    • 脚本编写:为了完成各个关卡的破解任务,玩家需要编写 Python 脚本或使用命令行工具来实现加密、解密以及频率分析等操作。
    • 问题解决能力:在编写脚本的过程中,玩家需要根据不同关卡的具体要求和提示,分析问题并设计合理的解决方案。这有助于提高玩家的逻辑思维能力和解决实际问题的能力。

大佬可以通过只看README或不看README来解决问题,新手推荐看HINT,边学边解决。

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐