【THM】加密 - Crypto 101

发布时间 2023-12-06 17:45:19作者: trymonoly

这个房间将包括:

  • 为什么密码学对安全和 CTF 很重要
  • 密码学的两大类及其用途
  • RSA 以及 RSA 的一些用途
  • 密钥交换的 2 种方法
  • 随着量子计算的兴起,关于加密未来的说明

基础关键词

Ciphertext :密文

加密明文、加密数据的结果

Cipher:加密法

加密或解密数据的一种方法。现代密码是加密的,但也有许多非加密的密码,如凯撒密码。

Plaintext:明文

加密前的数据,通常是文本,但也可能是照片或其他文件。

Encryption:加密

用密码把数据转换成密文。

Encoding:编码

不是一种加密形式,只是一种类似 base64的数据表示形式。

Key:密钥

正确解密密文和获取明文所需的一些信息。

Passphrase:口令(密码短语)

与密钥分开,口令与密码类似,都能用于保护密钥。

Asymmetric encryption:非对称加密

使用不同的密钥进行加密和解密。

Symmetric encryption:对称加密

使用相同的密钥进行加密和解密

Brute force:暴力破解

通过尝试每个不同的密码或每个不同的密钥来攻击加密

Cryptanalysis:密码分析

通过发现基础数学的弱点来攻击密码学(通过发现基数的弱点来攻击密码加密技术)

 


 为什么加密很重要?

密码学用于保护机密性,确保完整性,确保真实性。您每次都使用加密 最有可能的一天,你几乎可以肯定现在正在通过加密连接阅读这篇文章。

登录 TryHackMe 时,您的凭据已发送到服务器。这些是加密的,否则有人 将能够通过窥探您的连接来捕获它们。

当您连接到 SSH 时,您的客户端和服务器会建立加密隧道,以便没有人可以窥探您的 会期。

当您连接到您的银行时,有一个证书使用加密技术来证明它实际上是您的银行 而不是黑客。

下载文件时,如何检查它是否正确下载?您可以在此处使用加密技术来验证 数据的校验和。

您很少需要直接与密码学进行交互,但它会默默地保护您所做的几乎所有事情 数字。

每当需要存储敏感的用户数据时,都应对其进行加密。PCI-DSS 等标准规定数据 应该在静态(存储中)和传输时进行加密。如果您正在处理支付卡详细信息, 您需要遵守这些 PCI 法规。医疗数据也有类似的标准。随着 GDPR 和加利福尼亚州数据保护等立法的出台,数据泄露 对作为消费者或企业的您来说,代价极其高昂且危险。

不要只是简单地加密密码,除非你使用密码管理器,密码也不应该存储在明文中,你应该使用哈希(散列)来安全地管理它们。

Crucial 加密数学

在密码学中,有一些数学知识相对经常出现。Modulo 运算符。几乎每种编程语言都实现了这个运算符,或者通过库提供了它。当您需要处理大量数字时,请使用编程语言。Python 对此很有好处,因为整数的大小是无限的,你可以很容易地得到一个解释器。

第一次学习除法时,你可能被教导在答案中使用余数。X % Y 是 当 X 除以 Y 时的余数。

例子
25 % 5 = 05*5 = 25,所以它正好除以,没有余数)

23 % 6 = 523 不等于 6,余数为 5)

关于模,要记住的重要一点是它是不可逆的。如果我给你一个等式:x % 5 = 4,那么 是有效的 x 的无限值。

加密类型

加密的两个主要类别是对称加密和非对称加密。

对称加密使用相同的密钥对数据进行加密和解密。对称加密的例子有 DES算法 (一种脆弱的加密算法)和 AES算法。这些加密算法往往比非对称加密算法运行速度更快,并且使用的密钥长度更短(128或256位密钥在 AES 中很常见,DES 密钥长度则为56位)。

非对称加密使用的是一对密钥,一个用于加密,另一个用于解密,例如 RSA算法和椭圆曲线密码学。通常,这些密钥会被称为公钥和私钥,用私钥加密的数据可以用公钥解密,反之亦然,你的私钥需要保持为私有状态,私钥因此得名。非对称加密往往速度较慢,使用的密钥位数也较长,例如 RSA 加密算法通常使用2048至4096位密钥。

 

RSA算法简介

数学中的RSA

RSA 是建立在求解大数因子这一数学难题的基础上的:把两个质数相乘很快,比如说17 * 23 = 391,但是很难算出是哪两个质数相乘能得到14351(113x127是参考答案)。

CTF中的RSA

RSA 背后的数学在 CTF(夺旗赛)中出现得比较频繁,此类题目通常要求你计算变量或者破解基于变量的加密。RSA 的维基百科页面看起来很复杂,但是它可以提供几乎所有你完成CTF挑战所需要的信息。

有一些很好的工具可以用于完成CTF比赛中关于RSA的挑战,主要是一些github项目:

https://github.com/ius/rsatool     //rsatool
https://github.com/RsaCtfTool/RsaCtfTool              //rsactftool

对于CTF中出现的RSA,你需要了解的关键变量是p, q, m, n, e, d, 和 c

“p”和“q”是大质数,“n”是 p 和 q 的乘积。
公钥是 n 和 e,私钥是 n 和 d。
“m”用于表示消息(明文)。
“c”表示密文(加密文本)。

CTF中的加密挑战(Crypto题),通常会提供一组像上面这样的值,你需要破解加密、解密消息以拿到flag(标志)。

关于RSA 还有很多数学上的理论,而且它在以很快的速度变得相当复杂。

如果你想了解RSA背后的数学原理,我建议你阅读以下博客:https://muirlandoracle.co.uk/2020/01/29/rsa-encryption/

使用非对称加密建立密钥

非对称加密的一个非常常见的用途是交换密钥进行对称加密。

非对称加密往往较慢,因此对于HTTPS等加密,对称加密更好。

但问题是,你如何与服务器达成一致,而不将密钥传输给窥探的人 看?

隐喻时间

想象一下,你有一个密码,以及如何使用密码的说明。如果你想把你的朋友 在其他人无法阅读的情况下,您可以做的就是向您的朋友索要一把锁。

只有他们拥有这把锁的钥匙,我们假设你有一个坚不可摧的盒子,你可以用它来锁。

如果您将上锁的盒子中的说明发送给您的朋友,他们可以在到达他们并阅读 指示。

之后,您可以使用密码进行通信,而不会被人窥探。

在这个比喻中,密码代表对称加密密钥,锁代表服务器的公共密钥 key,key 表示服务器的私钥。

您只使用过一次非对称加密,因此速度很快,并且您现在可以使用对称进行私下通信 加密。

用非对称商量,对称密钥

 

数字签名和证书

什么是数字签名?

数字签名是证明文件真实性的一种方式,可以证明是谁创建或修改了文件。用 非对称加密,您可以使用私钥生成签名,并且可以使用公钥进行验证。 由于只有您才能访问您的私钥,这证明您签署了该文件。数字签名和物理签名 从法律上讲,签名在英国具有相同的价值。

最简单的数字签名形式是使用您的私钥加密文档,然后如果有人 想要验证此签名,他们将使用您的公钥对其进行解密并检查文件是否匹配。

证书 - 证明你是谁!

证书也是公钥加密的关键用途,与数字签名相关联。 使用它们的常见位置是 HTTPS。如何 您的 Web 浏览器是否知道您正在与之通信的服务器是真正的 tryhackme.com?

答案是证书。Web 服务器有一个证书,表明它是真正的 tryhackme.com。这 证书具有信任链,从根 CA(证书颁发机构)开始。根 CA 自动 从安装开始,您的设备、操作系统或浏览器就会信任。以下证书是受信任的,因为根 CA 表示它们 信任那个组织。以下证书是受信任的,因为组织受根 CA 信任,并且 等等。有很长的信任链。同样,这篇博文比我更好地解释了这一点。https://robertheaton.com/2014/03/27/how-does-https-actually-work/

您可以使用 Let's Encrypt 免费为您拥有的域获取自己的 HTTPS 证书。如果您经营一个网站, 值得设置它。

按下f12,查看安全

 

SSH 身份验证

加密和SSH验证

在默认情况下,使用用户名和密码对 SSH 进行身份验证的方式与登录到物理计算机的方式相同。

但是你可能会遇到将SSH配置为密钥认证的机器,它要求使用公钥和私钥来证明客户端是服务器上的有效授权用户。在一般情况下,SSH 密钥会是 RSA 密钥(使用RSA算法加密),但是你也可以选择其他算法来生成SSH密钥,或者添加一个口令(密码短语)来加密 SSH 密钥。

在大多数情况下用来生成一对密钥的程序是ssh-keygen,在终端输入命令ssh-keygen即可生成密钥。

SSH私钥

如果有人拥有你的私钥,他们就可以使用该私钥登录到服务器,这些服务器将接受该私钥,除非该私钥被加密。

解密密钥的口令不是用来向服务器确认你的身份的,它所做的只是解密 SSH 密钥,它永远不会传输,也永远不会离开你的系统。

使用诸如“开膛手约翰”之类的工具,你可以攻击加密的 SSH 密钥以尝试找到口令,这在某种程度上强调了使用安全的口令和保护好私钥机密的重要性。

在生成登录到远程计算机的 SSH 密钥时,你应该在你的机器上生成密钥,然后复制公钥,这意味着私钥在目标机器上永远不存在。

~/. ssh 文件夹是存储 OpenSSH密钥的默认位置, 这个目录中的authorized_keys(注意美国英语的拼写)文件包含公钥,如果启用了密钥认证,这些公钥就可以访问服务器。

默认情况下,许多发行版操作系统都启用了密钥认证,因为它比使用密码进行身份验证更加安全,对于 root 用户来说,通常只启用密钥认证。

要使用私有 SSH 密钥,必须正确设置权限,否则你的 SSH 客户端将忽略该文件并会提示一个警告信号。只有所有者才能读写私钥(chmod600权限或者更高的权限)。当你为标准的 Linux OpenSSH 客户端指定密钥时:

ssh -i keyNameGoesHere user@host

使用 SSH 密钥获得更好的 shell

假设用户启用了登录(www-data 通常不启用登录,但是普通用户和 root 用户会启用登录),那么SSH 密钥将会是“升级”反向 shell 的极好方法。

将一个 SSH 密钥保留在 authorized_keys文件中可能是一个有用的后门,而且你不需要处理任何不稳定的反向 shell 的问题,比如按Control-C会中断shell或者不能使用选项卡补全键。

解释 Diffie Hellman 密钥交换

什么是密钥交换?

密钥交换允许 2 个人/各方建立一组通用加密密钥,而观察者无法 以获取这些密钥。通常,要建立通用的对称密钥。

Diffie Hellman 密钥交换如何工作?

Alice 和 Bob 想要安全地交谈。他们希望建立一个通用密钥,以便他们可以使用对称加密, 但他们不想将密钥交换与非对称加密一起使用。这就是 DH Key Exchange 的用武之地。

Alice 和 Bob 都有他们生成的秘密,我们称之为 A 和 B。它们也有一些常见的材料 这是公共的,我们称之为 C。

我们需要做出一些假设。首先,每当我们结合秘密/材料时,这是不可能的或非常非常不可能的 难以分离。其次,它们组合的顺序并不重要。

Alice 和 Bob 将他们的秘密与共同的材料相结合,形成 AC 和 BC。然后,他们会将这些发送到 彼此,并将其与它们的秘密结合起来,形成两个相同的密钥,都是 ABC。现在,他们可以使用此密钥来 沟通。

额外资源

如果您想要视觉解释,可以在此处获得出色的视频。https://www.youtube.com/watch?v=NmM9HA2MQGI

DH 密钥交换通常与 RSA 公钥加密一起使用,以证明您的身份 与数字签名交谈。这可以防止有人使用中间人攻击来攻击连接 假装是鲍勃。

公共资源g,ag,bg。无法从ag和bg去推出a的私钥和b的私钥

 PGP、GPG 和 AES

什么是PGP?

PGP 代表 相当好的隐私。它是一种实现加密的软件 加密文件、执行数字签名等。

什么是GPG?

GnuPG 或 GPG 是 GNU 项目中 PGP 的开源实现。您可能需要使用 GPG 来解密文件 在 CTF 中。使用 PGP/GPG,可以使用密码保护私钥,就像 SSH 私钥一样。如果密钥受密码保护,则可以 尝试使用 John The Ripper 和 gpg2john 破解此密码。此任务中提供的密钥不受密码保护。

GPG 的手册页可以在这里在线找到。

john破解pgp

gpg2john把它转换成john能理解的hash值,执行

gpg2john ~/.gnupg/secring.gpg > hash

当前目录下就多出了一个名为hash的文件,接下来就可以使用john来破解这个文件了:

john hash --wordlist=/usr/share/wordlist/rockyou.txt

AES呢?

AES,有时以其创建者的名字称为 Rijndael,代表高级加密标准。这是一个替代品 对于具有短密钥和其他加密缺陷的 DES。

AES 和 DES 都对数据块进行操作(块是 固定大小的位系列)。

AES的解释很复杂,而且似乎并不经常出现。如果您愿意 了解它是如何工作的,这里有一个来自 Computerphile https://www.youtube.com/watch?v=O4xNJsjtN6E 的优秀视频

 

unzip gpg.zip 

gpg --import tryhackme.key   导入密钥

gpg message.gpg     

cat message