摩尔斯电码和栅栏密码 ——合天网安实验室学习笔记

实验链接

通过学习本实验理解摩尔斯电码和栅栏密码的编码解码过程;掌握编写摩尔斯电码的编码解码程序和编写多功能栅栏密码的编码解码程序。

链接:http://www.hetianlab.com/expc.do?ce=64d3e661-ebbb-41fd-a220-a17d608f994e

实验简介

实验所属系列: 密码学

实验对象: 本科/专科信息安全专业

相关课程及专业: Windows编程,C语言,汇编语言

实验类别: 实践实验类

预备知识

  • 摩尔斯电码

    • 摩尔斯电码的概念:

      摩尔斯电码(又译为摩斯密码,Morse code)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。它发明于1837年,发明者有争议,是美国人塞缪尔·莫尔斯或者艾尔菲德·维尔。 摩尔斯电码是一种早期的数字化通信形式,但是它不同于现代只使用零和一两种状态的二进制代码,它的代码包括五种: 点、划、点和划之间的停顿、每个词之间中等的停顿以及句子之间长的停顿。

    • 摩尔斯电码的应用:

      摩斯密码编码简单清晰,二义性小,编码主要是由两个字符表示:”.”、”-“,一长一短,这在很多情况下应用很多,比如发送求救信号。电影《风声》中就是采用在衣服上缝出摩尔密码,将消息传播出去。动漫《名侦探柯南》中《推理对决,新一vs冲矢昴》(tv511)就是用了这种方法。

      在利用摩尔密码灯光求救的时候,定义:灯光长亮为”-“,灯光短亮为”.”,那么就可以通过手电筒的开关来发送各种信息,例如求救信息。

      如果灯光是按照“短亮 暗 短亮 暗 短亮 暗 长亮 暗 长亮 暗 长亮 暗 短亮 暗 短亮 暗 短亮”这个规律来显示的话那么它就意味是求救信号SOS。

      因为SOS的摩尔编码为:··· --- ··· ,按照上面的规定即可进行灯光编码。这个编码其实非常简单,三短、三长、三短。

      除了灯光之外,利用声音(两种区别的声音)也可以发出求救信号。这种求救方式是我们都应该进行了解的,也许在必要的时候就可以派上用场。

      2015年1月,遭到恐怖组织“伊斯兰国”(IS)绑架的日本人质后藤健二被斩首,消息震惊国际,当年2月1日在网络上流传着一段由日本网友的解读影片,内容指出后藤在IS所发布的影片中,相较于右边的人质汤川遥菜相比,后藤眨眼的次数显得较为频繁,有日本网友将后藤健二画面放大,日本网友解密认为,后藤是透过眨眼来打出摩斯密码,而其所要透露的信息是“不要救我”,引起不少网友议论。

      摩尔斯电码被广泛的应用于很多动漫以及影视剧中,包括在早期的战争中也有很多的运用.

  • 栅栏密码

    • 栅栏密码的概念:

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

    • 栅栏密码的应用:

      其实栅栏密码在现实生活中的应用很少,基于它爆破破解的难度低就不太可能用来保存什么重要的数据,出现的场合主要是一些ctf竞赛题,作为古典密码中算是运用最广的一种,在密码学的题目中一般都会对最终的结果进行栅栏加密。

实验目的

  • 理解摩尔斯电码和栅栏密码的编码解码过程

  • 掌握编写摩尔斯电码的编码解码程序

  • 掌握编写多功能栅栏密码的编码解码程序

实验环境

服务器:Kali Linux 64位 ,IP地址:随机分配

辅助工具:任意一门语言的编译环境

请在实验机内下载文件及源码:http://tools.hetianlab.com/tools/Morse.zip

实验步骤

步骤一

作为一战期间德意志帝国的一名密码学专家,某日通过无线电截获了协约国的两份秘密信件,貌似包含了协约国集团的作战计划和后续的战略部署,但是两份信件好像都经过某种不知名的编码方式进行加密了,作为专家的你能否通过自己的力量解密这两封信件,扭转战争的局势呢?

我们的实验任务分为3个部分:

  • 理解摩尔斯编码和栅栏密码的加密解码原理

  • 使用任意一门语言,实现对指定文件中的摩尔斯编码进行解码,以及对指定文件进行摩尔斯编码。

  • 使用任意一门语言,编写一个多功能栅栏加解密程序,实现以下但不限于以下的功能:

    • 对指定文件中的字符串进行栅栏穷举,显示出分为几栏时结果是什么?

    • 能够指定分几栏去进行解密(注意差错处理)

    • 能够指定分几栏去进行加密(注意差错处理)

任务描述:阅读以下的资料,了解摩尔斯密码和栅栏密码的编码原理以及解码原理,并回答相应的问题。

  • 摩尔斯密码编码原理

    摩尔斯密码是替换密码的一种,通过特定的密码置换表对相应的字符进行转换就是摩尔斯密码的编码原理,由于转换方式太过于简单以及编码之后特征太明显,到了今天我们已经很难从影视作品或是简单的ctf竞赛题目之外来找到摩尔斯密码的应用了,但不可否认他在密码学的发展过程中所起到的作用,通过学习摩尔斯密码我们也可以初步体会到替换密码的魅力。

    以下就是摩尔斯密码的替换表。

    26个字母的摩斯密码表:
    《摩尔斯电码和栅栏密码 ——合天网安实验室学习笔记》

    数字的摩斯密码表:
    《摩尔斯电码和栅栏密码 ——合天网安实验室学习笔记》

    标点符号的摩斯密码表:
    《摩尔斯电码和栅栏密码 ——合天网安实验室学习笔记》

  • 栅栏密码编码原理

    与摩尔斯密码相对,栅栏密码应该算是古典密码学中最经典的移位密码了,两者可以说代表了密码学中最重要的两个概念(扩散和混淆)。

    我们以2栏栅栏密码为例来讲解它的加密和解密过程。

    比如明文:THERE IS A CIPHER

    两个一组,得到:(TH) (ER) (E ) (IS) ( A) © (IP) (HE) (R )

    先取出第一个字母:TEEI IHR

    再取出第二个字母:HR SACPE

    连在一起就是:TEEI IHRHR SACPE

    还原为所需密码。

    而解密的时候,我们先把密文从中间分开,变为两行:

    TEEI IHR

    HR SACPE

    再按上下上下的顺序组合起来:

    THERE IS A CIPHER

    那么将2栏密码扩展到多栏呢?

    相信你也已经注意到,在之前的明文中,我在CIPHER这个单词之后加了一个空格,那么目的相信你也已经猜测出来,就是为了让明文字符串的长度是2的倍数,那么栅栏密码的分栏的第一个前提就是分的栏数是明文长度的倍数,这样才会分出来的每个栏长度都一样。

    对于多栏,我们还是用上面的例子来讲解。

    上面的明文字符串(THERE IS A CIPHER )的长度是18,所以我们可以把他分为2,3,4,6,9栏,这里我们以6栏为例。

    以每个元素相隔6个字符分割出栅栏。

    第一栏:TII

    第二栏:HSP

    第三栏:E H

    第四栏:RAE

    第五栏:E R

    第六栏: C

    连接在一起就是:TIIHSPE HRAEE R C

小实验:在压缩包里,Morse cipher文本保存着使用摩尔斯密码加密后的密文,而Fence cipher文本中保存着栅栏密码加密后的密文。其中Morse cipher文本文件是没有密码的,而当你对Morse cipher文本进行破译之后就可以得到Fence cipher压缩包的密码了。

步骤二

任务描述:破解Morse cipher文本中的Morse 密文。

实验:使用任意一门语言,实现对指定文件中的摩尔斯编码进行解码,以及对指定文件进行摩尔斯编码。

实验指导:基于上面我们对于摩尔斯编码的原理的理解,我们可以知道摩尔斯编码当明文加密的长度比较大的时候,密文看起来会很复杂,但是说到底就是一种简单的替换,因此我们可以建立一种对应的关系,类似于Python中的字典这样的形式,对密文进行逐字符的替换。

查看示例文本

cat text.txt
《摩尔斯电码和栅栏密码 ——合天网安实验室学习笔记》

对示例文本进行摩尔斯编码

python ./morse.py -e text.txt -o ./test.txt
《摩尔斯电码和栅栏密码 ——合天网安实验室学习笔记》

查看编码后的文本

cat test.txt
《摩尔斯电码和栅栏密码 ——合天网安实验室学习笔记》

对编码后的文本进行解码

python ./morse.py -d test.txt -o ./decode_test.txt
《摩尔斯电码和栅栏密码 ——合天网安实验室学习笔记》

查看解码结果

cat decode_test.txt

《摩尔斯电码和栅栏密码 ——合天网安实验室学习笔记》

对Morse_text.txt文件解码:
《摩尔斯电码和栅栏密码 ——合天网安实验室学习笔记》
最终观察111.txt文件可找到密文:
《摩尔斯电码和栅栏密码 ——合天网安实验室学习笔记》
文件夹破解成功:
《摩尔斯电码和栅栏密码 ——合天网安实验室学习笔记》

步骤三

任务描述:通过对摩尔斯密文的破译,我们能得到最终机密文件的压缩密码,基于最终文本的名称以及他它的密文(长度大于主流的加密长度以及组成的字符为26个英文字母),我们可以断定这段密文是基于栅栏密码进行加密的,但是我们没有办法去判断它是分成几栏进行加密的密文,所以需要我们对可能的结果进行穷举尝试,但基于一点,最终获取的明文一定是按照栅栏加密的要求进行加密的。

实验:使用任意一门语言,编写满足以下功能的程序:

  • 对指定文件中的字符串进行栅栏穷举,显示出分为几栏时结果是什么?

  • 能够指定分几栏去进行解密(注意差错处理)

  • 能够指定分几栏去进行加密(注意差错处理)

查看示例文本

cat example.txt

《摩尔斯电码和栅栏密码 ——合天网安实验室学习笔记》

对示例文本进行栏数为4的栅栏编码

python ./zhalan.py -e example.txt 4 -o encode_test.txt
《摩尔斯电码和栅栏密码 ——合天网安实验室学习笔记》

查看编码结果

cat encode_test.txt

《摩尔斯电码和栅栏密码 ——合天网安实验室学习笔记》

直接在屏幕上打印编码结果

python ./zhalan.py -e ./example.txt 4 -p
《摩尔斯电码和栅栏密码 ——合天网安实验室学习笔记》

对编码结果进行可能的爆破解码

python ./zhalan.py -d encode_test.txt -a -o decode_test.txt

《摩尔斯电码和栅栏密码 ——合天网安实验室学习笔记》

查看解码结果

cat decode_test.txt
《摩尔斯电码和栅栏密码 ——合天网安实验室学习笔记》

直接对结果进行打印

python ./zhalan.py -d encode_test.txt -a -p

《摩尔斯电码和栅栏密码 ——合天网安实验室学习笔记》

指定解码栏数为4

python ./zhalan.py -d encode_test.txt 4 -o ./4.txt

《摩尔斯电码和栅栏密码 ——合天网安实验室学习笔记》

查看解码结果

cat 4.txt

《摩尔斯电码和栅栏密码 ——合天网安实验室学习笔记》

直接对解码结果进行打印

python ./zhalan.py -d encode_test.txt 4 -p
《摩尔斯电码和栅栏密码 ——合天网安实验室学习笔记》

实验完成!

尝试对Fence_text.txt解密:
《摩尔斯电码和栅栏密码 ——合天网安实验室学习笔记》
观察到分为6栏的答案较为合理,指定解码栅栏为6:
《摩尔斯电码和栅栏密码 ——合天网安实验室学习笔记》
实验完成。

答题

《摩尔斯电码和栅栏密码 ——合天网安实验室学习笔记》

    原文作者:Ⅻ
    原文地址: https://blog.csdn.net/weixin_42582241/article/details/104766688
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞