网络安全进阶学习第十九课——CTF之密码学

文章目录


一、密码学简介

------ 密码学的首要目的是隐藏信息的涵义,而并不是隐藏信息的存在,这是密码学与隐写术的一个重要区别。

------ 密码学的发展大概经历了三个阶段:

  1. 古典密码阶段(1949年以前),早期的数据加密技术比较简单,复杂程度不高,安全性较低,大部分都是一些具有艺术特征的字谜。随着工业革命的到来和二次世界大战的爆发数据加密技术有了突破性的发展。出现了一些比较复杂的加密算法以及机械的加密设备。
  2. 近代密码阶段 (1949-1975年),在这期间由于计算机的诞生,使得加密技术从机械时代提升到了电子时代。这使得复杂计算的加密技术成为可能,也使得加密算法在复杂程度和安全性上得到了很大的提高。
  3. 现代密码阶段(1976年至今),美国密码学专家Diffie和Hellman在1976年提出公开密钥密码体制的概念,这是现代密码学的重大发明,也为密码学提供了全新的方向。

二、密码设计的根本目标

  • 机密性(Confidentiality):确保数据在传输或者存储的过程中不被窃取
  • 完整性(Integrity):确保数据在传输或者存储的过程中不被篡改或者损坏
  • 可用性(Availability):确保数据在需要时可以被合法的用户访问或者使用
  • 认证性(Authentication):确保数据的来源和真实性
  • 不可否认性(Non-repudiation):确保发送者无法否认其发送的数据,可以证明数据的来源和真实性

前三者称为信息安全的CIA三要素


三、古典密码

1、摩斯密码

------ 摩斯密码(Morse code)是一种用于传输信息的编码系统,通过使用短脉冲(点)和长脉冲(划)的组合来表示字母、数字和标点符号。摩斯密码最初被用于电报通信,但至今仍在某些情况下使用,如无线电通信、求救信号等。

------ 摩斯密码使用了两个基本的信号单位:点(·)和划(---)。通过这两个单位的组合,可以表达不同的字母、数字和标点符号。

模式密码表

字母:

数字:

标点符号:

非英文字符:

特殊符号:

CTF-题目展示

这题目就只有1和0,这时候就可以把0比作点(·),把1比作划(---)

2、换位密码

1)栅栏密码

------ 栅栏密码(Rail-fence Cipher)就是把要加密的明文分成N个一组,然后把每组的第1个字符组合,每组第2个字符组合...每组的第N(最后一个分组可能不足N个)个字符组合,最后把他们全部连接起来就是密文

  • 方式一:
    ------ 两两分组(栅栏数分组),每一组的第1位提出来拼接成第1部分,第2位提出来拼接成第2部分,然后第1部分和第2部分合起来。

  • 方法二:(把方法一的解密方式作为加密方法)
    ------ 10个字符分成两组,然后互相穿插。

    密文:hrelldlioswmoe

    解出的明文:helloworldisme

    解密方法如下:

2)凯撒密码

------ 是一种移位密码,将明文中的 每个字母 都按照其在字母表中的顺序向后(或向前)移动固定数目(循环移动)作为密文。凯撒密码只能加密英文。

密文: iodj{ehoor zrua} 位移三位

明文:flag{hello word}

3)曲路密码

------ 需要事先约定密钥(曲路路径)

  • 举例:
    明文: flag{y0u_are_p1g@}(行或列为3)
    密文(有两种):
    • 列为3位:}ey{r@gaga_1pulf0_

    • 行为3位:}1e_yal{urp@g_a0gf

4)列移位密码

------ 列移位密码(Columnar Transposition Cipher)是一种比较简单,易于实现的换位密码,通过一个简单的规则将明文打乱混合成密文

  • 举例:
    明文:The quick brown fox jumps over the lazy dog
    密钥:how are u

    密文:qoury inpho Tkool hbxva uwmtd cfseg erjez

3、替换密码

1)移位密码

------ 与凯撒密码类似,区别在于移位密码不仅会处理字母,还会处理数字和特殊字符,常用 ASCII 码表进行移位。其破解方法也是遍历所有的可能性来得到可能的结果。

2)简单替换密码

------ 将每个明文字母替换为与之唯一对应且不同的字母。它与恺撒密码之间的区别是其密码字母表的字母不是简单的移位,而是完全是混乱的,这也使得其破解难度要高于凯撒密码。此种加密方式密钥个数为26!,几乎不可能爆破。

  • 举例:

    a对应p,b对应h,依次类推

3)埃特巴什码

------ 字母倒序

密文:gsv jfrxp yildm ulc qfnkh levi gsv ozab wlt

明文:the quick brown fox jumps over the lazy dog

4)棋盘密码Polybius

  • 例子:
    明文 HELLO,加密后就是
    23 15 31 31 34

5)Vigenere 维吉尼亚密码

------ 使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式

  • 举例:
    明文:come greatwall
    密钥:crypto
    • 加密过程:
      对密钥填充至与明文长度一致

      然后查表得密文

      密文:efkt zfgrrltzn

6)培根密码

------ 培根密码是一种简单的替换密码,密文字符只有两个(a和b),每个明文字符都会被替换为一个由a和b组成的长度为5的字符串。

  • 密文字符也可以选择任意两个其它字符
  • 如果看到这种全部由两个字母组成的密文,那么就可以猜测可能是培根密码。
  • 在线解密网站: https://tool.bugku.com/peigen/

常规培根密码表:明文i和j、u和v所对应的密文是一样的。

扩展培根密码表,包括所有26个字符。

7)猪圈密码

下面是密码表:

8)键盘密码

电脑键盘

明文:35 16 13

密文:bye


四、编解码-ASCII编码

  • 第一部分是:ASCII非打印控制字符(参详ASCII码表中0-31);
  • 第二部分是:ASCII打印字符,也就是CTF中常用到的转换;
  • 第三部分是:扩展ASCII打印字符


也可以直接利用python来查ASCII码


五、编解码-BASE家族

------ base64、base32、base16可以分别编码转化8位字节为6位、5位、4位。16,32,64分别表示用多少个字符来编码。

------ Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据。包括MIME的email,email via MIME,在XML中存储复杂数据。

Base64编码表:

Base32编码表:

Base16编码表:

1、编码原理

------ Base64编码要求把3个8位字节转化为4个6位的字节,之后在6位的前面补两个0,形成8位一个字节的形式,6位2进制能表示的最大数是2的6次方是64,这也是为什么是64个字符(=号不属于编码字符,而是填充字符)。

2、Base64编码过程

明文 ------> ASCII编码 ------> 每个编码转化为8位二进制 ------> 再把二进制每6位来进行分组 ------> 前面补0把6位二进制补充成8位,方便计算机存储 ------> 把二进制转换位数字 ------> 按照Base64编码表转换成对应的字符

------ 先将明文参照ASCII码对照表,找到每个字符对应的ASCII码,之后转换为8位的二进制,最后将转换好的二进制按照6位分组,不够的补0,最后转换好的6位的二进制的位数一定要确保是6和8的倍数(位数一定要加上补上的0),如果不够6和8的位数,用"="占位,一个"="占6位,之后转换为十进制,最后的十进制的结果对照base64编码表进行转换。

举例:

js 复制代码
对youi进行Base64编码

1)ASCII编码
y:121
o:111
u:117
i:105


2)每个编码转化为8位二进制
bin(121)=01111001
bin(111)= 01101111
bin(117)= 01111010
bin(105)= 01101001
01111001 01101111 01111010 01101001


3)二进制每6位来进行分组
011110
010110
111101
111010
011010
010000
=
=
最后一组只有01两位,不够6位,就需要在后面补0,补足6位,变成010000。
并且这里就一共只有36位,只能整除6,不能整除8,
这时候就需要后面补等于号"="(一个等于号"="占6位),
这里需要补2个等于号"="


4)前面补0把6位二进制补充成8位
00 011110
00 010110
00 111101
00 111010
00 011010
00 010000
=
=


5)把二进制转换位数字
00 011110   32
00 010110   22
00 111101   61
00 111010   53
00 011010   26
00 010000   16
  =
  =


6)按照Base64编码表转换成对应的字符
00 011110   32   e
00 010110   22   W
00 111101   61   9
00 111010   53   1
00 011010   26   a
00 010000   16   Q
  =
  =

这样得到最后的加密密文是eW91aQ==

------ 同样道理Base32、Base16加密方法也类似,不同在与Base32是拆成5位,同时总位数得同时是8和5的倍数;Base16是拆成4位,同时总位数得同时是8和4的倍数。


六、其他编译码

1、ShellCode编码

ASCII编码,特征是以\x开头

  • 举例:
    源文本: The quick brown fox jumps over the lazy dog

编码后:

#!shell

\x54\x68\x65\x7f\x71\x75\x69\x63\x6b\x7f\x62\x72\x6f\x77\x6e\x7f\x66\x6f\x78\x7f\x6a\x75\x6d\x70\x73\x7f\x6f\x76\x65\x72\x7f\x74\x68\x65\x7f\x6c\x61\x7a\x79\x7f\x64\x6f\x67

2、Quoted-printable 编码

------ 多用途互联网邮件扩展(MIME) 一种实现方式,特征是以=开头

3、URL编码

------ url编码又叫百分号编码,是统一资源定位(URL)编码方式。URL地址(常说网址)规定了常用地数字,字母可以直接使用,另外一批作为特殊用户字符也可以直接用(/,:@等),剩下的其它所有字符必须通过%xx编码处理。 现在已经成为一种规范了,基本所有程序语言都有这种编码。特征是%开头

  • 举例:
    源文本: The quick brown fox jumps over the lazy dog
    编码后:%54%68%65%20%71%75%69%63%6b%20%62%72%6f%77%6e%20%66%6f%78%20%6a%75%6d%70%73%20%6f%76%65%72%20%74%68%65%20%6c%61%7a%79%20%64%6f%67

4、Unicode编码

------ Unicode是国际组织制定的,可以容纳世界上所有文字、符号的字符集

  • Unicode编码有以下四种编码方式:
    源文本: The
    • &#x [Hex]: The
    • &# [Decimal]: The
    • \U [Hex]: \U0054\U0068\U0065
    • \U+ [Hex]: \U+0054\U+0068\U+0065

5、HTML实体编码

6、Rabbit编码

特点:Rabbit加密开头部分通常为U2FsdGVkX1。
------ 密文特征与Base64类似,明显区别是秘文里+比较多,并且经常有/

  • 举例:
    • 明文I Love You

      无密匙加密后密文为:U2FsdGVkX1/ouFei55jKdzY1fWNS4jxHVNf/AfKWjnBrOGY=

    • 明文I Love You 521

      无密匙加密后密文为:U2FsdGVkX19DvuEo5PvBA8TuLrM2t+EZBvUkzlAa

    • 明文I Love You 521

      密匙为666加密后密文为:U2FsdGVkX18w6vxXxux/ivRVwo3xMzTxmUyk7cHz


七、现代密码------对称密码

------ 1976年以前,所有的加密方法都使用对称加密算法:加密和解密使用同一套规则。例如:甲使用密钥 A 加密,将密文传递给乙,乙仍使用密钥 A 解密。如果密钥 A 在甲传递给乙的过程中泄露,或者根据已知的几次密文和明文推导出密钥 A,则甲乙之间的通讯将毫无秘密。

------ 对称密码是一种常见的加密算法,具有以下特点:

  • 单一密钥:对称密码使用相同的密钥进行加密和解密操作。发送者和接收者必须事先商定并共享相同的密钥。
  • 加密速度快:对称密码算法通常具有较快的加密和解密速度,这使得其适用于大量数据的加密和解密操作。
  • 实现简单:对称密码的实现相对较简单,所需的计算资源也较少。
  • 加解密效率高:对称密码使用相同的密钥进行加密和解密,因此不需要进行密钥分发和管理,减少了额外的开销。
  • 密钥长度较短:对称密码的密钥长度通常较短,一般情况下为几十到几百位。

1、DES

------ DES:Data Encryption Standard,DES是一种对称加密算法,使用56位密钥对数据进行加密。由于密钥长度较短,已经被认为不够安全,逐渐被更强大的算法所替代。

------ 64比特明文通过56比特密钥加密成64比特,每7位一个检验比特,所以7位加上1个校验位就构成8位。

------ 每一个64比特称为一个分组。

------ 长度增长以后,如何迭代(反复)的方式称为模式。

  • 加密过程

  • 解密过程

2、3DES

------ 3DES(Triple Data Encryption Standard):3DES是对DES的加强版本,使用两次或三次的DES算法来加密数据。它可以提供更高的安全级别,但速度较慢。

3、AES

------ AES(Advanced Encryption Standard)是当前最常用的对称加密算法之一,用于替代DES。它支持128位、192位和256位密钥,并提供较高的安全性和较快的加密速度。

4、RC4

------ RC4(Rivest Cipher 4)是一种流密码算法,它将密钥和明文数据一次性地进行异或操作来生成密文。虽然在过去广泛使用,但由于存在安全性漏洞,已不再推荐使用


八、现代密码------非对称密码

------ 甲使用公钥 A 加密,将密文传递给乙,乙使用私钥 B 解密得到明文。其中公钥在网络上传递,私钥只有乙自己拥有,不在网络上传递,这样即使知道了公钥 A 也无法解密。反过来通讯也一样。只要私钥不泄漏,通信就是安全的,这就是非对称加密算法。

------ 非对称密码具有以下特点:

  • 密钥的对称性:对非对称密码算法而言,加密和解密所使用的密钥是不同的。公钥用于加密数据,私钥用于解密数据。这样的密钥对有一个重要的特点,即无法通过公钥推导出私钥。
  • 密钥的分发:在非对称密码中,公钥可以自由分发给其他人,而私钥必须保密,只有密钥的所有者可以访问。这样可使公钥广泛公开,而私钥只需安全地存储在密钥的持有者手中。
  • 数字签名:非对称密码算法还可以用于生成和验证数字签名。数据的发送者可以使用其私钥对数据进行签名,接收者可以使用发送者的公钥验证签名的有效性。
  • 密钥长度较长:相比对称密码算法,非对称密码算法使用的密钥长度通常较长,一般为几百到几千位。

1、RSA

------ RSA算法由两个密钥,即公钥和私钥组成

------ 如果没有 RSA 算法,现在的网络世界毫无安全可言,也不可能有现在的网上交易。众所周知的 ssh 协议也是基于 RSA 加密算法才能确保通讯是加密的。

  • 加密:

    密文 = 明文 ^ E mod N

    公钥(N,E)

  • 解密:

    明文 = 密文^ D mod N

    私钥(N,D)

  • 假设:公钥(N, E)=(231,17)、私钥(N, D)=(231,113),明文123。

    密文= 123^17 mod 231 =51

    明文= 51^113 mod 231 =123

加密过程

随机找两个质数 P 和 Q ------> 算出N的值(N = P * Q),并转化为二进制 ------> 计算 N 的欧拉函数 φ(N) ------> 选取公钥E ------> 算私钥D

js 复制代码
1)随机找两个质数 P 和 Q
取P = 67 ,Q = 71

2)算出N的值并转化为二进制
乘积 N = P * Q = 4757 ,转化为二进为 1001010010101
这里为 13 位,实际使用中的算法是往往是 1024 位 或 2048 位,
位数越长,算法越难被破解。取的P 与 Q 越大,越安全。

3)计算 N 的欧拉函数 φ(N)   
φ(N) = φ(P * Q)= φ(P - 1)φ(Q - 1) = (P - 1)(Q - 1) =66 * 70 = 4620

4)选取公钥E
1 < E <φ(N),E能不是φ(N)的因子数(随机取),
这里1 < E <4620,我们选E =101

5)算私钥D
(D x E)mod φ(N) = 1,也就是(D x E)/ φ(N) = y ...... 1
这里就是:(D x 101)mod 4620= 1,选取D=1601

2、DH

------ DH (Diffie-Hellman)是一种密钥交换协议,用于双方在不共享密钥的情况下协商出一个共享密钥。它是一种基于离散对数问题的加密算法。

3、ECC

------ ECC(Elliptic Curve Cryptography)利用椭圆曲线上的离散对数问题,提供与其他非对称密码算法相当的安全性,但使用更短的密钥长度。由于其高效性和强大的安全性,ECC被广泛应用于移动设备和物联网领域。

4、DSA

------ DSA(Digital Signature Algorithm)是一种用于生成和验证数字签名的非对称密码算法。它基于离散对数问题,并通常与SHA系列哈希函数结合使用。

5、ElGamal

------ ElGamal是一种基于离散对数问题的非对称密码算法,包括加密和签名方案。它具有相对较慢的加密速度,但在某些特定的应用中被广泛使用。


九、摘要算法

1、MD5

------ MD5(Message Digest Algorithm 5)中文名为消息摘要算法第五版,是计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。

------ MD5作为一种常用的摘要算法(或指纹算法),其具有以下几个重要的特点:

  • 输入任意长度信息,输出长度固定:MD5 可输入任意长度的信息,其输出均为128位(bit)固定长度的二进制数据。
  • 运算速度快:MD5的运算均为32位 与、或、非、位移等位运算,因此其运算速率快,几乎不消耗CPU时间。
  • 不可逆:根据MD5的的散列结果,无法计算出原始数据(查字典除外)。
  • 碰撞性:原始数据与其MD5散列结果并非一一对应,存在多个原始数据的MD5结果相同的可能性。

因此,MD5 不再被认为是安全的哈希算法,不适合用于加密或保护通信。

2、SHA-1

------ SHA-1(Secure Hash Algorithm 1)生成160位(20字节)摘要,也常用于文件完整性校验。然而,由于易受到碰撞攻击,SHA-1已逐渐被淘汰。

3、SHA-256

------ SHA-256(Secure Hash Algorithm 256-bit)属于SHA-2系列的一种,生成256位(32字节)摘要。SHA-256及其衍生算法(如SHA-384、SHA-512等)应用广泛,是目前信息安全领域中常用的摘要算法之一。

4、SHA-3

------ SHA-3称为Keccak算法,也是一种哈希函数系列。与SHA-2相比,SHA-3具有不同的结构和算法,提供更好的安全性和性能。

5、RIPEMD

------ RIPEMD(RACE Integrity Primitives Evaluation Message Digest)是欧洲CRYPTREC项目的候选摘要标准之一。RIPEMD-160广泛应用于比特币和其他加密货币领域。


十、好用的解密网站

www.hiencode.com


相关推荐
newxtc18 分钟前
【国内中间件厂商排名及四大中间件对比分析】
安全·web安全·网络安全·中间件·行为验证·国产中间件
lulu_gh_yu23 分钟前
数据结构之排序补充
c语言·开发语言·数据结构·c++·学习·算法·排序算法
Re.不晚1 小时前
Java入门15——抽象类
java·开发语言·学习·算法·intellij-idea
幼儿园老大*2 小时前
走进 Go 语言基础语法
开发语言·后端·学习·golang·go
2 小时前
开源竞争-数据驱动成长-11/05-大专生的思考
人工智能·笔记·学习·算法·机器学习
ctrey_2 小时前
2024-11-4 学习人工智能的Day21 openCV(3)
人工智能·opencv·学习
啦啦右一2 小时前
前端 | MYTED单篇TED词汇学习功能优化
前端·学习
霍格沃兹测试开发学社测试人社区3 小时前
软件测试学习笔记丨Flask操作数据库-数据库和表的管理
软件测试·笔记·测试开发·学习·flask
今天我又学废了3 小时前
Scala学习记录,List
学习
王俊山IT3 小时前
C++学习笔记----10、模块、头文件及各种主题(一)---- 模块(5)
开发语言·c++·笔记·学习