AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1657387
Accepted
c_anirudh
c_anirudh
Asked: 2021-06-18 09:04:40 +0800 CST2021-06-18 09:04:40 +0800 CST 2021-06-18 09:04:40 +0800 CST

主机密钥检查如何防止中间人攻击?

  • 772

我正在编写一个程序,试图建立与服务器的 SSH 连接(严格的密钥检查开启)。文档说,没有严格的密钥检查会让我容易受到中间人攻击。

我知道主机密钥验证检查我们尝试连接的服务器是否具有健全的主机密钥(存储在 中/etc/ssh)作为我们~/.ssh/known_hosts文件中的内容。

我对主机密钥验证的理解是否正确?

但是,由于主机密钥是公开可用的(ssh-keyscan <hostname>),任何人都可以通过复制和使用此主机密钥来欺骗服务器吗?

ssh linux
  • 1 1 个回答
  • 527 Views

1 个回答

  • Voted
  1. Best Answer
    Kamil Maciorowski
    2021-06-18T09:51:41+08:002021-06-18T09:51:41+08:00

    由于主机密钥是公开可用的,任何人都可以通过复制和使用此主机密钥来欺骗服务器吗?

    不可以。服务器的公钥是公开的。要欺骗服务器,需要它的私钥。它们是不同的,它们在数学上是相连的,它们形成了一对。它们背后的数学使得从公钥中导出私钥非常非常困难(计算成本很高)。

    知道服务器的公钥(在您的本地~/.ssh/known_hosts),您的 SSH 客户端可以构建一个“难题”供服务器解决。当且仅当服务器知道相应的私钥时,解决这个难题很容易。因此,如果服务器解决了这个难题,那么您的客户端就知道服务器拥有正确的私钥,因此它是真正的服务器。

    反过来:当你想用你的私钥进行身份验证时,服务器(让你的公钥在~/.ssh/authorized_keys你想登录的用户中)为你的 SSH 客户端构建一个“难题”来解决。当且仅当客户端知道相应的私钥(即您的私钥)时,解决这个难题很容易。您的客户端确实知道它,它解决了难题并且服务器知道它是您。

    潜在的欺骗者可以知道服务器的公钥。这允许他们检查真实服务器是否是真实的(通过构建一个谜题),但他们仍然无法冒充服务器,因为他们无法轻松解决其他人(例如您的)旨在验证服务器真实性的谜题。他们需要服务器的私钥来执行此操作。

    同样,如果有人知道您的公钥但不知道您的私钥,则他们无法向您可以进行身份​​验证的服务器进行身份验证(使用您的私钥)。

    私钥应保密。

    此外,客户端和服务器使用会话密钥对通信进行加密。他们首先选择一些(随机)秘密和一些容易从秘密中获得的信息。他们交换派生的信息,并且都达到相同的秘密会话密钥。该过程背后的数学使得从交换的信息中获取会话密钥(或起始秘密)非常非常困难(计算成本很高)。外部观察者无法预测会话密钥。但是起始秘钥和从另一端接收到的信息足以让两端得到相同的密钥。密钥取决于两个起始秘密,因此没有结束可以强制使用某个特定密钥。

    这发生在身份验证之前。事实上,认证程序使用会话密钥来构建“谜题”。由于这个中间人在客户端面前扮演服务器,在服务器前面扮演客户端,不能简单地传递谜题及其解决方案。他与客户端的通信将使用与服务器通信不同的会话密钥。他可以通过用一个密钥解密并用另一个密钥加密来中继数据。但是,如果他转达了一个谜题,则该谜题中内置的会话密钥将与另一端所期望的不匹配。身份验证将失败。中间的人需要真正解决难题以传递它们(或者更确切地说,将它们从一个会话密钥“翻译”到另一个)。或者他需要建立独立的谜题。

    总而言之:在不知道服务器私钥的情况下,攻击者无法自行冒充服务器,也无法中继来自真实服务器的身份验证。

    • 3

相关问题

  • 需要 LDAP 身份验证 * 和 * ssh 身份验证

  • 加载密钥“ec256.pem”:尝试从私钥生成公钥时抛出无效格式

  • 如何在域和 Linux 活动目录中启用指纹传感器

  • 如何在CentOS 7 中将Ctrl+C 永久更改为Ctrl+K?

  • 为什么 chown 600 id_rsa 修复权限问题?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    Saaru Lindestøkke 为什么使用 Python 的 tar 库时 tar.xz 文件比 macOS tar 小 15 倍? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    v15 为什么通过电缆(同轴电缆)的千兆位/秒 Internet 连接不能像光纤一样提供对称速度? 2020-01-25 08:53:31 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve