CTF密码学概述

news2024/12/24 8:26:37

一. 引言

密码在我们的生活中应用于方方面面,我们的微信、QQ、支付宝、以及我们去银行取钱,都需要输入正确的密码,所以密码学在计算机信息安全上面都是非常重要的。我们现在每天打开的网络页面,浏览的视频内容都是表层网络,仅仅相当于网络世界中的冰山一角,隐藏于水下部分还有非常大,我们俗称为“暗网”,这里隐藏了较多的非法手段获取信息的手段,例如:我们在表层网络试图输入账号和密码登录系统,在整条信息传输链条上,我们的信息有可能在网络传输的任何环节被截获,如果我们传输的信息都是明文,那么对于“hacker”来说太好了,基本无需解密就能获取到用户的敏感信息。所以对数据加密,在数据传输环节就非常重要了,通常网络上通过数字证书、加密算法、非对称加密密钥等技术完成互联网数据传输加密,实现互联网安全保护。
其实密码学,在很早以前就存在,据说两千年前,古罗马名将凯撒为了防止敌人获取情报,便使用密码传送情报,凯撒的做法很聪明,就是为二十几个罗马字母建立一张对应表,如果不知道对应表,即便拿到情报也是无法解码获取具体信息的。
接下来我们结合CTF中的密码学考点,我们总体来介绍一下密码学,密码学分为简单编码和解码古典密码现在密码
接下里我们分别介绍一下对应的内容。

二. 编码和解码

2.1.比特

⼀个⽐特(位)可以表示两种状态:0 或 1。所有的信息最终都将表示为⼀个⽐特序列的形式。

2.2.字节

⼀个字节对应8⽐特。每个字节可以表示28=256种状态。8个⼆进制位为⼀个字节单位。⼀个英⽂字⺟(不分⼤⼩写)占⼀个字节的空间,⼀个中⽂汉字占两个字节的空间。英⽂标点占⼀个字节,中⽂标点占两个字节。

2.3.ASCII

ASCII(American Standard Code for Information Interchange, 美国信息交换标准代码),这是为了在计算机中表示字符,美国⼈搞的⼀套编码(所谓编码,其实就是字典),⼀开始只考虑了⾃⼰⽤得到的,包括:拉丁字⺟及标点符号、阿拉伯数字、⼀些控制字符。

2.4.URL(百分号)编码

统⼀资源定位符(Uniform Resource Locator, URL)是 Internet 上标准的资源地址,可视为⽹络上的⻔牌。
如果 URL 中出现了 拉丁字⺟ 、 阿拉伯数字 、 . -_~ 外的符号,则必须⽤使⽤百分号编码(转码),所以URL 编码也称为 百分号编码 。
⽐如我们⽤百度查询 1+2=3实际查询的⽹址是这样:https://www.baidu.com/s?wd=1%2B2%3D3

2.5.Base系列

base64 base64将6bit作为⼀个字节,因此base64可以有64种码值,包含**1-9,a-z,A-Z,以及“+”、“/”,还有“=”作为填充位。
base32 Base32使⽤了ASCII编码中可打印的
32个字符(⼤写字⺟A-Z和数字2-7)**对任意字节数据进⾏编码.Base32将串起来的⼆进制数据按照5个⼆进制位分为⼀组,由于传输数据的单位是字节(即8个⼆进制位).所以分割之前的⼆进制位数是40的倍数(40是5和8的最⼩公倍数).如果不⾜40位,则在编码后数据补充"="。

三. 古典密码

3.1 换位密码(栅栏密码)

所谓栅栏密码,就是把要加密的明⽂分成N个⼀组,然后把每组的第1个字连起来,形成⼀段⽆规律的
话。这⾥以2栏栅栏加密为例。

明⽂:The quick brown fox jumps over the lazy dog
去空格:Thequickbrownfoxjumpsoverthelazydog
分组:Th eq ui ck br ow nf ox ju mp so ve rt he la zy do g
第⼀组:Teucbonojmsvrhlzdg
第⼆组:hqikrwfxupoeteayo
密⽂:Teucbonojmsvrhlzdghqikrwfxupoeteayo

3.2 单表替换密码

3.2.1 凯撒密码

在这里插入图片描述
加密时会将明⽂中的 每个字⺟ 都按照其在字⺟表中的顺序向后(或向前)移动固定数⽬(循环移动)作为密⽂。

当偏移量是 3 的时候:
明⽂:ABCDEFGHIJKLMNOPQRSTUVWXYZ
密⽂:DEFGHIJKLMNOPQRSTUVWXYZABC

3.2.2 rot13

ROT13是凯撒密码的一个特例。k=13即偏移量是13正好是26个英文字母的一半。把每个字母的字母表中向前(或向后)移动13个字母。
特点:加密和解密算法完全相同
扩展————rot家族
rot5、rot13、rot18、rot47
ROT5:只对数字进⾏编码,⽤当前数字往前数的第5个数字替换当前数字
ROT18:这是⼀个异类,本来没有,它是将ROT5和ROT13组合在⼀起,为了好称呼,将其命名为
ROT47:对数字、字⺟、常⽤符号进⾏编码,按ASCII值进⾏位置替换(可显示的ascii共有94个),将字符ASCII值往前数的第47位对应字符替换当前字符。

3.2.3 乘法密码

在这里插入图片描述
模逆运算,满足:
在这里插入图片描述

3.2.4 仿射密码

是⼀种单表代换密码,字⺟表中的每个字⺟相应的值使⽤⼀个简单的数学函数映射到对应的数值,再把对应数值转换成字⺟。
这个公式意味着每个字⺟加密都会返回⼀个相同的字⺟,意味着这种加密⽅式本质上是⼀种标准替代密码。因此,它具有所有替代密码的弱点。
在这里插入图片描述

3.3 多表替换密码

3.3.1 普莱菲尔密码

是第⼀种⽤于实际的双字替换密码,⽤双字加密取代了简单代换密码的单字加密,很明显这样使得密⽂更难破译。
普莱菲尔密码⼜称为单⽅密码(Single Cipher)之后⼜出现它的升级版Double Playfair,也就是⼆⽅密码 (Two-square Cipher),在之后⼜有四⽅密码(Four-square Cipher)。
例如:2字母代换密码
密钥由5x5矩阵给定,将英文字母随机填入矩阵中,把i和j当作一个字母(因为矩阵只能装25个字母)
使用关键词生成密钥:可选定一个关键词作为密钥,除去重复字母后依次按行填入阵中,而后将字母表中还没用上的各字母继续按行填入阵中,得到密钥矩阵K。例:关键词monarchy
在这里插入图片描述

3.3.2 维吉尼亚密码

是在单⼀恺撒密码的基础上扩展出来的多表代换密码,根据密钥(当密钥⻓度⼩于明⽂⻓度时可以循环使⽤)来决定⽤哪⼀⾏的密表来进⾏替换,以此来对字频统计。
26 x 26 方阵
在这里插入图片描述
在线加密解密工具
脚本加解密

>>> from pycipher import Vigenere
>>> Vigenere('encryption').encipher('public key distribution')
'THDCGRDMMQMFVIGQNBWBR'
>>> Vigenere('encryption').decipher('THDCGRDMMQMFVIGQNBWBR')
'PUBLICKEYDISTRIBUTION'

3.4 替换密码

3.4.1 培根密码

是⼀种替换密码,每个明⽂字⺟被⼀个由5字符组成的序列替换,以下是两种对应关系:
在这里插入图片描述

3.4.2 莫斯密码

也叫莫尔斯电码,因⽆线电⽽⽣。由点、划、空格组成。
在这里插入图片描述

许多⼈都认为 SOS 是三个英⽂词的缩写。其实是和摩斯密码有关的。
sos的摩斯电码表示为: ··· — ··· 。三短代表S,三⻓代表O,所以紧急求救信号就被简称为
SOS。
S.O.S 是国际摩尔斯电码救难信号,并⾮任何单词的缩写。鉴于当时海难事件频繁发⽣,往往由于不
能及时发出求救信号和最快组织施救,结果造成很⼤的⼈员伤亡和财产损失,国际⽆线电报公约组织于1908
年正式将它确定为国际通⽤海难求救信号。光线发射⽅法为:短光——⻓光——短光。

3.4.3 猪圈密码

也称九宫格密码、朱⾼密码、共济会密码或共济会员密码,是⼀种以格⼦为基础的简单替代式密码。
参考:
传统猪圈密码表

例如:
在这里插入图片描述
在线加密解密

变种
圣堂武⼠密码(Templar Cipher) 是共济会的 猪圈密码 的⼀个变种,⼀直被共济会圣殿骑⼠⽤。
在这里插入图片描述

3.4.4 JSfuck

JSFuck 只⽤ 6 个字符 ! + 来编写 JavaScript 程序。

false => ![]
true => !![]
undefined => [][[]]
NaN => +[![]]
0 => +[]
1 => +!+[]
2 => !+[]+!+[]
10 => [+!+[]]+[+[]]
Array => []
Number => +[]
String => []+[]
Boolean => ![]
Function => [][“filter”]
eval => [][“filter”]“constructor”()
window => [][“filter”][“constructor”](“return this”)()
在线加解密

3.4.5 BrainFuck

BrainF**k 语⾔只有⼋种符号,所有的操作都由这⼋种符号 > < + - . , [ ] 的组合来完成。
在线加解密

3.4.6 Ook

由 Ook. Ook! Ook? 或者 . ! ? 三种组成
在线加解密

四. 现在密码

4.1 对称密码体制

对称密码体制是⼀种传统密码体制,也称为私钥密码体制。在对称加密系统中,加密和解密采⽤相同的密钥。因为加解密密钥相同,需要通信双⽅必须选择和保存他们共同的密钥。

4.1.1 流密码(Stream Cipher)

流密码也称为序列密码,每次加密数据流的⼀位或⼀个字节。
流密码的基本思想:利⽤密钥 ,并通过密钥流产⽣器产⽣⼀个密钥流
例如 RC4 密码就属于流密码

4.2 非对称密码

⾮对称密码体制也叫公钥密码体制,该技术就是针对私钥密码体制的缺陷被提出来的。在公钥加密系统中,加密和解密是相对独⽴的加密和解密会使⽤两把不同的密钥加密密钥(公开密钥)向公众公开,谁都可以使⽤,解密密钥(秘密密钥)只有解密⼈⾃⼰知道,⾮法使⽤者根据公开的加密密钥⽆法推算出解密密钥,顾其可称为公钥密码体制。
⼀般的钥匙都是既能上锁、也能开锁的。但是,⾮对称加密中,密钥有两种:公有密钥、私有秘钥公有密钥⽤于上锁(加密)。私有密钥⽤于解锁(解密)

4.2.1 RSA

最常⻅的⾮对称加密就是RSA。
(1)选择两个大素数p、q,且p不等于q;
(2)计算n=pq;
(3)计算φ(n)=(p-1)(q-1);
(4)选择一个整数e,1<e<φ(n),且e与φ(n)互质;
(5)计算d,满足ed ≡ 1 (mod φ(n)),换言之,d是关于φ(n)的乘法逆元。即ed % φ(n) = 1,其中%表示求余运算。
公钥为(n,e),私钥为(n,d)。
RSA在CTF比赛中还是一个常见的提醒,主要就是要提前准备好对应的脚本。后面我们会详细解读RSA的整体过程

五. CTF密码学技巧分享

其实CTF中脑洞密码题(非现代加密方式)一般都是各种古典密码的变形,一般出题者会对密文进行一些处理,但是会给留一些线索,所以写此文的目的是想给小伙伴做题时给一些参考,当然常在CTF里出现的编码也可以了解一下,文章肯定有许多没有提及到,欢迎小伙伴补充,总之,希望对小伙伴们有帮助吧!
CTF中的密码学也有很多技巧可以使用,比如1.熟练掌握密码工具的使用。2.理解应用各种编码知识。3.多了解各种各样的密码类型。最后,还需要一个扎实的数学功底,**为什么说数学很重要呢?**即便在CTF中我们接触到没有见到过的提醒,至少我们可以从数学出发,毕竟密码分析的各个环节都离不开数学分析,比如整除理论需要了解素数、合数、因数、倍数、整除等基本概念,掌握唯一分解定理、裴蜀定理、扩展欧几里得定理、算数基本定理等基本定理。同余理论需要了解同余、原根、底数、指数、平方剩余、同余式、同余方程等基本概念,掌握欧拉定理、费马小定理、中国剩余定理、二次互反律、威尔逊定理等基本定理。。

六. 结论与展望

CTF密码学的知识点可以说特别多,并且脑洞也特别大,所以在解题的时候,需要我们联系多种情况,开阔我们的解题思路。今天分享了部分CTF密码类型,以及提供了一些在线解题方法,密码学是一个不断发展的过程,加密手段和破解手段都是在不断发展中,所以密码学以后还会出现更多的类型。我认为CTF比赛中密码学会紧跟时代发展,不但要求比赛者对古典密码进行了解,更需要对现代密码,比如RSA这类,在我们生活中广泛应用的加密算法进行深入的掌握,RSA是一个很大的话题后续我们会进一步聊RSA相关的因式分解题目。
参考:
CTF中那些脑洞大开的编码和加密

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1136295.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用友GRP-U8注入

分享一个拿到CNDV证书的SQL注入&#xff0c;证书截图如下 0x01 漏洞介绍 fofa&#xff1a;app”用友-GRP-U8” 用友GRP-U8存在SQL注入&#xff0c;漏洞文件名为bx_historyDataCheck.jsp 0x02 漏洞分析 文件截图如下 该文件接收3个传参&#xff0c;分别是userName&#xff…

班主任,怎么发布期中考试成绩?

各位班主任是不是有时候觉得每次手动发布期中考试成绩是一件既繁琐又痛苦的事情&#xff1f;让我给你们介绍一个神器——成绩查询系统&#xff01;让你们的工作变得轻松&#xff0c;让学生们能够自主查询成绩。 我们先了解一下什么是成绩查询系统。成绩查询系统是一种专门用于发…

性能测试 —— Jmeter 常用三种定时器!

1、同步定时器 位置&#xff1a;HTTP请求->定时器->Synchronizing Timer 当需要进行大量用户的并发测试时&#xff0c;为了让用户能真正的同时执行&#xff0c;添加同步定时器&#xff0c;用户阻塞线程&#xff0c;知道线程数达到预先配置的数值&#xff0c;才开始执行…

【Golang】简记操作:Centos安装、卸载、升级Golang运行环境

目录 安装 1、根据实际需求选择合适的golang版本 如下图&#xff0c;选择合适的版本&#xff0c;右键复制链接 2、在Centos选择合适的目录下载golang的源文件 3、解压golang的源文件&#xff0c;解压完成即可执行go命令 4、设置golang的全局环境变量&#xff08;/etc/pr…

人机环境系统智能是东方与西方智能思想的融合

人机环境系统的思想是一种综合性的思想&#xff0c;它融合了东方思想和西方思想的元素。在东方文化中&#xff0c;人类与自然环境有着密切的联系&#xff0c;强调人类与自然环境的和谐共生关系。而在西方文化中&#xff0c;科技和机器的应用越来越广泛&#xff0c;对人类社会和…

蓝桥杯每日一题2023.10.26

测试次数 - 蓝桥云课 (lanqiao.cn) 题目描述 题目分析 对于本题我们可以使用动态规划来分析 dp[i][j]代表剩余i层&#xff0c;j台手机的情况下对应的测试数量 分类进行讨论一下&#xff1a; 1.当只剩下一台手机的时候&#xff0c;只能从第一层一层一层往上尝试&#xff0c…

日常开发问题汇总

2023.10.26 1.生产环境代码校验更严格产生的问题 发版时出现的问题: 点击报错或提交没有反应 排查: 点击保存后控制台network没有发起请求,定位问题在前端代码,查看代码发现,代码执行到这一行就没往下执行了 这个结果匪夷所思,细看代码后发现是下面代码的问题: 然后…

数据类型与变量—Javase

1.字面常量 在上节课HelloWorld程序中&#xff0c; System.Out.println("Hello World")&#xff1b; 语句&#xff0c;不论程序何时运行&#xff0c;输出的都是Hello World&#xff0c;其实"Hello World"就是字面常量。 常量即程序运行期间&#xff0c;固…

Generative AI 新世界 | Falcon 40B 开源大模型的部署方式分析

在上期文章&#xff0c;我们探讨了如何在自定义数据集上来微调&#xff08;fine-tuned&#xff09;模型。本期文章&#xff0c;我们将重新回到文本生成的大模型部署场景&#xff0c;探讨如何在 Amazon SageMaker 上部署具有 400 亿参数的 Falcon 40B 开源大模型。 亚马逊云科技…

Java中的基础知识

导言&#xff1a; 在Java中有很多与C语言类似的语法&#xff0c;但其中又有不同之处。本篇文章主要对java中的数据类型&#xff0c;变量以及类型转换进行简单的介绍&#xff0c;并指出与C的相同与不同之处。 目录 导言&#xff1a; 正文&#xff1a; 一.数据类型 二.变量…

win10蓝牙无法连接,可以尝试在此Windows设备上打开蓝牙

问题:想连接蓝牙耳机,显示无法连接,在设备上打开蓝牙 解决方法 按照以下步骤执行冷重启&#xff1a;长按电源按钮10s&#xff0c;直到屏幕关闭&#xff0c;然后松开。拔下电脑的电源线&#xff0c;等30s&#xff0c;再次打开设备

【尘缘赠书活动第二期】:信息科技风险管理

引言 信息科技对金融业务发展所起的作用是举足轻重的。近年来&#xff0c;金融机构在战略规划中相继引入科技引领的概念。作为金融机构信息科技从业人员&#xff0c;我们笃信信息科技是一个非常有用的工具&#xff0c;一个兼具产品思维和管理思维、拥有高质增效能力的工具。 …

基于机器视觉的图像拼接算法 计算机竞赛

前言 图像拼接在实际的应用场景很广&#xff0c;比如无人机航拍&#xff0c;遥感图像等等&#xff0c;图像拼接是进一步做图像理解基础步骤&#xff0c;拼接效果的好坏直接影响接下来的工作&#xff0c;所以一个好的图像拼接算法非常重要。 再举一个身边的例子吧&#xff0c;…

从顺序表中删除其值在给定值s与t之间(要求s<t)的所有元素,若s或t不合理或顺序表为空,则显示出错误信息并退出运行

从顺序表中删除其值在给定值s与t之间&#xff08;要求s<t&#xff09;的所有元素&#xff0c;若s或t不合理或顺序表为空&#xff0c;则显示出错误信息并退出运行。 顺序表定义及初始化 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #define MaxSize 10//定义…

浅谈中国汽车充电桩行业市场状况及充电桩选型的介绍

安科瑞虞佳豪 车桩比降低是完善新能源汽车行业配套的一大重要趋势&#xff0c;目前各国政府都在努力推进政策&#xff0c;通过税收减免、建设补贴等措施提升充电桩建设速度&#xff0c;以满足新能源汽车需求。 近年来&#xff0c;在需求和技术的驱动下&#xff0c;充电桩的平…

QT QProcess的使用

定义 The QProcess class is used to start external programs and to communicate with them. QProcess类是用来启动一个外部程序并与之通信。 本文福利&#xff0c;莬费领取Qt开发学习资料包、技术视频&#xff0c;内容包括&#xff08;Qt实战项目视频教程代码&#xff0c;…

MySQL初始化之后启动报错(mysqld: Table ‘mysql.plugin‘ doesn‘t exist)

报错场景 初始化之后&#xff0c;服务无法启动。错误日志error-log 报错如下&#xff1a;&#xff08;mysql库下的系统表不存在&#xff09; 2023-10-26T06:03:08.150163-00:00 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started. 2023-10-26T06:03:08.496…

RabbitMQ生产者的可靠性

目录 MQ使用时会出现的问题 生产者的可靠性 1、生产者重连 2、生产者确认 3、数据持久化 交换机持久化 队列持久化 消息持久化 LazyQueue懒加载 MQ使用时会出现的问题 发送消息时丢失&#xff1a; 生产者发送消息时连接MQ失败生产者发送消息到达MQ后未找到Exchange生产…

linux音频-IIS音频接口

IIS 总线 IIS(Integrate Interface of Sound)即集成音频接口&#xff0c;在上个世纪 80 年代首先被 Philips 公司用于消费产品的音频设备&#xff0c; I2S规范 I2S总线只能用来处理audio data&#xff0c;而别的信号比如控制信号&#xff0c;编码信号则交给别的模块处理。为了…

The Gradle daemon may be trying to use ipv4 instead of ipv6.

重新配置了jdk和gradle&#xff0c;导致新创建的项目都会报该错误。以下是解决办法。 mac的环境 一 改项目JDK的位置 如果一没有解决接着配置 vim ~/.bash_profile 新增 export _JAVA_OPTIONS“-Djava.net.preferIPv4Stacktrue” 参考&#xff1a; https://sites.google.com…