tryhackme-Cyber Security 101-Cryptography-Public Key Cryptography Basics(公钥加密基础知识)

了解 RSA 等公有密钥密码的工作原理,并探索它们在 SSH 等应用程序中的作用。

任务1:介绍

考虑以下日常生活中的场景。假设您正在与一位商业伙伴一起喝咖啡并讨论一些机密的商业计划。让我们从安全角度来分解会议。

  • 您可以看到和听到对方。因此,很容易确定他们的身份。这就是身份验证,即您正在确认与您交谈的人的身份。
  • 您还可以确认您“听到”的内容来自您的业务合作伙伴。您可以分辨哪些单词和句子来自您的业务合作伙伴,哪些来自其他人。这就是真实性,即您验证消息是否真实来自特定发件人。而且,你知道他们所说的是传到你的耳中,而且桌子对面对方的话没有任何改变的机会。这就是完整性,即确保数据没有被更改或篡改。
  • 最后,您可以选择远离其他客户的座位,并保持低声,以便只有您的业务合作伙伴可以听到您。这就是机密性,即只有授权方才能访问数据。

让我们快速将其与网络领域的通信进行比较。当有人向您发送短信时,您如何确定他们是他们声称的身份?您如何确定文本在各种网络链接中传输时没有任何更改?当您通过在线消息传递平台与业务合作伙伴通信时,您需要确保以下事项:

  • 身份验证: 您要确保与正确的人通信,而不是其他人伪装。
  • 真实性: 您可以验证信息是否来自声明的来源。
  • 完整性:您必须确保没有人更改您交换的数据。
  • 保密性:您希望防止未经授权的一方窃听您的对话。

密码学可以提供满足上述要求的解决方案,其中包括许多其他要求。私钥密码学,即对称加密,主要保护机密性。然而,公钥加密,即非对称加密,在身份验证、真实性和完整性方面起着重要作用。这个房间将展示公钥加密如何实现这一目标的各种示例。

学习先决条件

这个房间是三个关于密码学的介绍性房间中的第二个。在开始这个房间之前,请确保您已完成列表中的第一个房间。

学习目标

在这个房间里,我们将介绍各种非对称密码系统和使用它们的应用程序,例如:

  • RSA
  • 迪菲-赫尔曼
  • SSH 公司
  • SSL/TLS 证书
  • PGP 和 GPG

首先,让我们通过按下下面的 Start Machine 按钮来启动虚拟机

启动机器

本机将在分屏视图中启动。如果 VM 不可见,请使用页面顶部的蓝色 Show Split View 按钮。

您还可以使用以下凭证通过 SSH 在 IP 地址访问虚拟机:MACHINE_IP

  • 用户名:user
  • 密码:Tryhackme123!

任务2:非对称加密的常见用途

交换密钥以进行对称加密是非对称加密技术的广泛使用。与对称加密相比,非对称加密相对较慢;因此,我们依靠非对称加密来协商和商定对称加密密码和密钥

但问题是,您如何与服务器就密钥达成一致,而不将密钥传输给窥探者查看?

类比

假设您有一个用于通信的密码和使用这些密码的说明。问题是如何将这些说明发送给您的朋友,而其他人无法阅读它们。答案比看起来更直接;你可以向你的朋友要一把锁。只有您的朋友拥有这把锁的钥匙,我们假设您有一个坚不可摧的盒子,您可以用它来锁。

如果您将装在上锁盒子中的说明发送给您的朋友,他们可以在收到后解锁并阅读说明。之后,您可以使用密码进行通信,而不会有被人窥探的风险。

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

类比加密系统
密码对称加密密码和密钥
锁Lock公钥
Lock 的钥匙私钥

因此,您只需使用一次非对称加密,以免影响速度,然后您就可以使用对称加密进行私下通信。

真实世界

实际上,您需要更多的密码学来验证与您交谈的人是否是他们所说的那个人。这是使用数字签名和证书实现的,我们稍后将在本会议室中介绍这些数字签名和证书。

任务3:RSA

RSA 是一种公钥加密算法,支持通过不安全的通道进行安全数据传输。对于不安全的通道,我们预计攻击者会窃听它。

确保 RSA 安全的数学

RSA 基于因式分解大数的数学难题。将两个大素数相乘是一个简单的操作;但是,找到一个巨大数字的因数需要更多的计算能力。

即使在纸上,将两个素数相乘也很简单,比如 113 × 127 = 14351。即使对于较大的素数,即使手动计算,它仍然是一项可行的工作。请考虑以下数值示例:

  • 素数 1:982451653031
  • 素数 2:169743212279
  • 他们的乘积:982451653031 × 169743212279 = 166764499494295486767649

另一方面,确定两个素数相乘得到 14351 是相当棘手的,找到 166764499494295486767649 的因数更具挑战性。

在实际示例中,素数将比此示例中的素数大得多。计算机可以轻松地对166764499494295486767649进行因式分解;但是,它无法对超过 600 位的数字进行因式分解。你会同意,两个巨大的素数相乘,每个大约 300 位,比他们的乘积因式分解更容易。

数值示例

让我们重新审视非对称加密中的加密、解密和密钥使用。公钥是所有通信商都知道的,用于加密,而私钥受到保护并用于解密,如下图所示。

在 Cryptography Basics 房间里,我们解释了模运算,并说它在密码学中起着重要作用。在下面的简化数值示例中,我们看到了 RSA 算法的运行情况:

  1. Bob 选择两个素数:p = 157 和 q = 199。他计算 n = p × q = 31243。
  2. 当 φn) = n − p − q + 1 = 31243 − 157 − 199 + 1 = 30888 时,Bob 选择了 e = 163,使得 e 相对于 φn) 相对素数;此外,他选择了 d = 379,其中 e × d = 1 模 φn),即 e × d = 163 × 379 = 61777 和 61777 模 30888 = 1。公钥是 (n,e),即 (31243,163),私钥是 $(n,d),即 (31243,379)。
  3. 假设他们想要加密的值是 x = 13,那么 Alice 会计算并发送 y = xe mod n = 13163 mod 31243 = 16341。
  4. Bob 将通过计算 x = yd mod n = 16341379 mod 31243 = 13 来解密接收到的值。这样,Bob 就可以恢复 Alice 发送的值。

上述算法有效的证明可以在 modular arithmetic 中找到,并且超出了本模块的范围。值得重复的是,在此示例中,我们选择了一个 3 位数的素数,而在实际应用程序中,p 和 q 至少是一个 300 位数的素数。

CTF 中的 RSA

RSA 背后的数学运算在 CTF 中相对频繁地出现,需要您计算变量或基于它们破解一些加密。许多在线优秀文章都解释了 RSA,它们将为您提供完成挑战所需的几乎所有信息。RSA CTF 挑战赛的一个很好的例子是 Breaking RSA room。

有一些出色的工具可以击败 CTF 中的 RSA 挑战。我最喜欢的是 RsaCtfTool,它对我来说效果很好。我在 rsatool 上也取得了一些成功。

您需要了解 CTF 中 RSA 的主要变量:p、q、m、n、e、d 和 c。根据我们的数值示例:

  • p 和 q 是大素数
  • n 是 p 和 q 的乘积
  • 公钥是 n 和 e
  • 私钥为 n 和 d
  • m 用于表示原始消息,即 plaintext
  • c 表示加密文本,即密文

加密 CTF 质询通常会为您提供一组这些值,您需要破解加密并解密消息才能检索标志。

任务4:Diffie-Hellman 密钥交换

使用对称加密的挑战之一是共享密钥。假设您希望将受密码保护的文档发送给您的业务合作伙伴,以讨论机密业务策略。您将如何与他们共享密码?如果您有一个安全的通道来发送密码,并且知道对手无法读取或更改密码,那将是最好的。

Diffie-Hellman 密钥交换

密钥交换旨在在双方之间建立共享密钥。这种方法允许双方通过不安全的通信通道建立共享密钥,而无需预先存在的共享密钥,也不需要观察者能够获取此密钥。因此,此共享密钥可用于后续通信中的对称加密。

请考虑以下场景。Alice 和 Bob 希望安全地交谈。他们希望为对称加密建立共享密钥,但不想使用非对称加密进行密钥交换。这就是 Diffie-Hellman 密钥交换的用武之地。

Alice 和 Bob 独立生成密钥;让我们将这些秘密称为 A 和 B。他们也有一些公共的公共材料;我们称之为 C。

我们需要做出一些假设。首先,每当我们组合秘密时,它们几乎不可能分开。其次,它们的组合顺序并不重要。Alice 和 Bob 将他们的秘密与通用材料相结合,形成 AC 和 BC。然后,他们将这些密钥相互发送,并将接收到的部分与他们的密钥相结合,以创建两个相同的密钥,都是 ABC。现在,他们可以使用此密钥进行通信。

如果您觉得前面的段落太抽象了,让我们研究一下确切的过程。

  1. Alice 和 Bob 在公共变量上达成一致:一个大素数 p 和一个生成器 g,其中 0 < g < p。这些值将通过通信渠道公开披露。虽然不安全地小,但我们将选择 p = 29 和 g = 3 来简化我们的计算。
  2. 每个参与方选择一个私有整数。作为一个数值示例,Alice 选择了 a = 13,Bob 选择了 b = 15。这些值中的每一个都代表一个私钥,不得披露。
  3. 现在是各方使用第 2 步中的私钥和第 1 步中商定的公共变量计算其公钥的时候了。Alice 计算 A = ga mod p = 313 mod 29 = 19,Bob 计算 B = gb mod p = 315 mod 29 = 26。这些是公钥。
  4. Alice 和 Bob 将密钥发送给彼此。Bob 收到 A = ga mod p = 19,即 Alice 的公钥。Alice 收到 B = gb mod p = 26,即 Bob 的公钥。此步骤称为密钥交换
  5. Alice 和 Bob 最终可以使用收到的公钥和他们自己的私钥来计算共享密钥。Alice 计算 Ba mod p = 2613 mod 29 = 10,Bob 计算 Ab mod p = 1915 mod 29 = 10。两次计算都会得到相同的结果,即 gab mod p = 10,即共享密钥。

选择的数字太小,无法提供任何安全性,在实际应用中,我们会考虑更大的数字。

Diffie-Hellman 密钥交换通常与 RSA 公钥加密一起使用。Diffie-Hellman 用于密钥协议,而 RSA 用于数字签名、密钥传输和身份验证等。例如,RSA 通过数字签名帮助证明您正在与之交谈的人的身份,因为您可以根据他们的公钥进行确认。这将防止有人通过假装是 Bob 来攻击对 Alice 的中间人攻击连接。简而言之,Diffie-Hellman 和 RSA 被纳入许多安全协议和标准中,以提供全面的安全解决方案。

任务5:SSH 公司

验证服务器

如果您以前使用过 SSH 客户端,则会在下面的终端输出中了解确认提示。

在上面的交互中,SSH 客户端确认我们是否识别了服务器的公钥指纹。ED25519 是本例中用于数字签名生成和验证的公钥算法。我们的 SSH 客户端无法识别此密钥,并要求我们确认是否要继续连接。此警告是因为可能存在中间人攻击;恶意服务器可能已经拦截了连接并回复,假装是目标服务器。

在这种情况下,用户必须对服务器进行身份验证,即通过检查公钥签名来确认服务器的身份。回答 “yes” 后,SSH 客户端将记录此主机的公钥签名。将来,它将以静默方式连接您,除非此主机使用不同的公钥进行回复。

对客户端进行身份验证

现在我们已经确认我们正在与正确的服务器通信,我们需要识别自己并进行身份验证。在许多情况下,SSH 用户使用用户名和密码进行身份验证,就像您登录物理机一样。但是,考虑到密码的固有问题,这不属于最佳安全实践。

在某些时候,人们肯定会攻击配置了密钥身份验证的 SSH 的计算机。此身份验证使用公钥和私钥来证明客户端是服务器上的有效且经过授权的用户。默认情况下,SSH 密钥是 RSA 密钥。您可以选择要生成的算法,并添加密码来加密 SSH 密钥。

ssh-keygen是通常用于生成密钥对的程序。它支持各种算法,如下面的手册页所示。

以下内容仅供参考。在此阶段,我们建议您仅识别其姓名。

  • DSA(数字签名算法)是一种专为数字签名设计的公钥加密算法。
  • ECDSA (Elliptic Curve Digital Signature Algorithm) 是 DSA 的一种变体,它使用椭圆曲线加密技术来提供更小的密钥大小,以实现等效的安全性。
  • ECDSA-SK(ECDSA with Security Key)是 ECDSA 的扩展。它包含基于硬件的安全密钥,以增强私钥保护。
  • Ed25519 是使用 EdDSA(Edwards 曲线数字签名算法)和 Curve25519 的公钥签名系统。
  • Ed25519-SK(带安全密钥的 Ed25519)是 Ed25519 的变体。与 ECDSA-SK 类似,它使用基于硬件的安全密钥来改进私钥保护。

让我们使用默认选项生成一个密钥对。

在上面的示例中,我们没有使用 passphrase 来向您展示私钥的内容。我们来看一下生成的公钥 和生成的私钥 。id_ed25519.pubid_ed25519

SSH 公司私钥

如前所述,您应该将私有 SSH 密钥视为密码。在任何情况下都不要分享它们;它们被称为私钥是有原因的。拥有您的私钥的人可以登录接受它的服务器,即将其包含在授权密钥中,除非密钥使用密码加密。

值得一提的是,用于解密私钥的密码根本无法向服务器识别您的身份;它仅解密 SSH 私钥。密码永远不会传输,也不会离开您的系统。

使用 John the Ripper 等工具,您可以攻击加密的 SSH 密钥以尝试查找密码,从而强调使用复杂密码并保持私钥私密的重要性。

生成 SSH 密钥以登录到远程计算机时,您应该在计算机上生成密钥,然后复制公钥,因为这意味着私钥永远不会存在于目标计算机上。但是,这对于为访问 CTF 框而生成的临时密钥来说并不重要。ssh-copy-id

必须正确设置权限才能使用私有 SSH 密钥;否则,您的 SSH 客户端将忽略该文件并显示警告。只有所有者才能读取或写入私钥(或更严格)。 是为标准 Linux OpenSSH 客户端指定密钥的方法。600ssh -i privateKeyFileName user@host

远程主机信任的密钥

该文件夹是存储 OpenSSH 的这些密钥的默认位置。此目录中的(注意 US English 拼写)文件包含允许访问服务器的公钥(如果启用了密钥身份验证)。默认情况下,在许多 Linux 发行版上,密钥身份验证处于启用状态,因为它比使用密码进行身份验证更安全。如果要允许 root 用户进行 SSH 访问,则只应接受密钥身份验证。~/.sshauthorized_keys

使用 SSH 密钥获得“更好的 shell”

在 CTF、渗透测试和红队练习期间,SSH 密钥是“升级”反向 shell 的绝佳方式,前提是用户已启用登录。请注意,www-data 通常不允许这样做,但普通用户和 root 可以工作。将 SSH 密钥留在机器上的文件中可能是一个有用的后门,您无需处理任何不稳定的反向 shell(如 Control-C)或缺少 Tab 键完成的问题。authorized_keys

任务6:数字签名和证书

“模拟”世界里,你时不时地被要求签署一份文件。当您去银行开设储蓄账户时,您很可能会被要求签署几份文件。当您想在当地图书馆创建帐户时,系统会要求您填写并签署申请。目的可能因情况而异。例如,它可以确认您同意条款和条件、授权交易或确认收到物品。在“数字”世界中,您不能使用您的签名、印章或指纹;您需要数字签名。

什么是数字签名?

数字签名提供了一种验证数字消息或文档的真实性和完整性的方法。证明文件的真实性,意味着我们知道谁创建或修改了它们。使用非对称加密技术,您可以使用私有密钥生成签名,该签名可以使用您的公有密钥进行验证。只有您应该有权访问您的私钥,这证明您签署了文件。在许多现代国家/地区,数字签名和物理签名具有相同的法律价值。

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

一些文章可以互换使用电子签名和数字签名等术语。它们是指将签名图像粘贴到文档之上。这种方法并不能证明文档的完整性,因为任何人都可以复制和粘贴图像。

在此任务中,我们使用术语数字签名来指代使用私钥或证书对文档进行签名。此过程类似于上图所示,其中 Bob 加密其文档的哈希值,并将其与原始文档一起与 Alice 共享。Alice 可以解密加密的哈希值,并将其与她收到的文件的哈希值进行比较。这种方法证明了文档的完整性,这与粘贴签名的花哨图像不同。我们将在 Hashing Basics 房间中介绍哈希。

证书:证明您是谁!

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

答案就在证书中。Web 服务器有一个证书,表明它是真正的 tryhackme.com。证书具有信任链,从根 CA(证书颁发机构)开始。从安装时开始,您的设备、操作系统和 Web 浏览器会自动信任各种根 CA。只有当根 CA 表示他们信任签署证书的组织时,证书才受信任。在某种程度上,它是一条链条;例如,证书由组织签名,组织受 CA 信任,CA 受浏览器信任。因此,您的浏览器信任该证书。一般来说,存在很长的信任链。您可以在此处查看 Mozilla Firefox 和 Google Chrome 信任的证书颁发机构。

假设您有一个网站并希望使用 HTTPS。此步骤需要具有 TLS 证书。您可以从各个证书颁发机构支付年费获得一个证书。此外,您可以使用 Let's Encrypt 免费为您拥有的域获取自己的 TLS 证书。如果您运行一个网站,则值得设置并切换到 HTTPS,就像任何现代网站一样。

任务7:PGP 和 GPG

PGP 代表 Pretty Good Privacy。它是实施加密以加密文件、执行数字签名等的软件。GnuPG 或 GPG 是 OpenPGP 标准的开源实现。

GPG 通常用于电子邮件中,以保护电子邮件的机密性。此外,它还可用于对电子邮件进行签名并确认其完整性。

下面是生成 GPG 的示例。系统会询问您使用gpg 的目的,无论是仅签名还是签名和加密。除了选择加密算法外,我们还需要为生成的密钥选择到期日期。最后,我们提供了一些关于我们的信息:我们的姓名、电子邮件地址和通常关于此密钥用途的评论。

您可能需要使用 GPG 来解密 CTF 中的文件。使用 PGP/GPG,可以使用密码保护私钥,就像我们保护 SSH 私钥一样。如果密钥受密码保护,您可以尝试使用 John the Ripper 和 破解它。此任务中提供的密钥不受密码保护。GPG 的手册页可以在这里在线找到。gpg2john

Practi cal Example

现在您拥有 GPG 密钥对,您可以与联系人共享公钥。每当您的联系人想要安全地通信时,他们都会使用您的公钥加密发送给您的消息。要解密消息,您必须使用您的私钥。由于 GPG 密钥的重要性,将备份副本保存在安全位置至关重要。

假设您有一台新计算机。您需要做的就是导入您的密钥,然后您可以再次开始解密您收到的消息:

  • 您将用于从 backup.key 导入密钥gpg --import backup.key
  • 要解密您的消息,您需要发出gpg --decrypt confidential_message.gpg

任务8:结论

我们将密码学定义为在存在对手的情况下保护通信的科学。研究如何破解或绕过加密系统的另一门重要科学是密码分析。至于尝试所有可能的密码组合,我们称之为暴力攻击。但是,当我们知道密码很可能是字典中的单词时,尝试字典中的单词而不是所有可能的密码组合会更有意义;这称为字典攻击

  • 密码学是使用代码和密码保护通信和数据的安全科学。
  • 密码分析是研究在不知道密钥的情况下破解或绕过加密安全系统的方法。
  • 暴力攻击是一种攻击方法,涉及尝试所有可能的密钥或密码来解密消息。
  • 字典攻击是一种攻击方法,攻击者尝试字典单词或它们的组合。

这个房间专注于公钥加密、非对称加密和密钥交换。它让您对 RSA、Diffie-Hellman、SSH 密钥对、数字签名和证书以及 OpenPGP 有了基本的了解。现在,是时候了解哈希了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值