【问题标题】:Protect public RSA key during transit在传输过程中保护公共 RSA 密钥
【发布时间】:2012-01-29 20:10:11
【问题描述】:

*澄清:我的问题与在现实世界中就密钥(读取密码)达成一致的两方之间建立“安全”通信渠道有关。只有使用 RSA 才允许 MITM 攻击(如果我没记错的话),所以我想在将公钥发送给各方之前用 AES(双方都同意的密钥)加密公钥 *

我目前正在尝试构建两个相互通信的应用程序。为了保护交换的消息,我正在考虑使用 RSA,其中每个应用程序都有自己的一组密钥。

在两个应用程序之间开始通信之前,它们确实需要交换密钥。这应该不是问题,但我正在考虑使用 AES 加密公钥,然后再通过 Internet 发送它们。

我知道公共这个词(如公钥)的含义,但我认为这会确保正确的应用程序/计算机获得密钥,而没有其他人。

所以我想交换密钥并保护它们免受 MITM 攻击。

如果有人能提供更好的建议(顺便说一句,我正在使用 LibCrypto 库),我会全力以赴。

谢谢。

最好的问候 /托马斯·古斯塔夫森

【问题讨论】:

  • 如果您已经获得了预先建立的对称密钥,为什么还要进行非对称加密?您需要以某种方式创建 AES 会话密钥,最好是一种不易受到 MITM 攻击并且不会将您的主密钥暴露于危险的方法。但我认为这是错误的论坛,请尝试 crypto.stackexchange.com
  • 哦,密码不是密钥。它可以被转换为一个键,例如使用像 PBKDF2 这样的基于密码的密钥派生函数,但它不一样。例如,使用您的密码作为密钥可能会导致相关的密钥攻击。
  • 好的,查了一下,可能密码作为密钥仍然不能用作相关的密钥攻击,但是您肯定将密码限制为密钥大小,这意味着您也在限制密钥空格(例如在暴力攻击中搜索的键数)。

标签: encryption rsa aes public-key-encryption encryption-asymmetric


【解决方案1】:

这个问题显示了您的许多误解。

我知道公共这个词(如公钥)是什么意思,但我知道 认为这将确保正确的应用程序/计算机 得到钥匙,没有其他人。

我认为这是您遇到并提出的真正问题。
我认为是:你怎么知道你正在使用你真正想要与之通信的实体的公钥,而不是声称是你想要与之通信的恶意实体的公钥?

此问题在典型安装中通过由受信任的机构签名并颁发给特定实体(即 IP 或 DNS 名称)的证书来解决。

在您的情况下,您没有提供证书的任何详细信息。

您也可以手动预安装它们并将它们用于安全连接。

如果您遵循其他计划,例如对称加密然后你会开始问其他问题,例如您如何安全地共享密钥等

【讨论】:

  • 据我所知,网络上没有确定性。但是,如果双方已就 AES 密钥达成一致(可能在酒吧、商场或其他一些现实生活中的位置),他们将使用此加密密钥来加密和解密彼此发送给彼此的公钥。如果攻击者不知道 AES 密钥,他可能无法向我发送我将接受的公钥(因为它不能被解密和验证为有效的公钥)。这不正确吗?
  • @tomplast:好吧,在这种情况下,他们也可以轻松地交换他们的公钥,并一起避免 AES 加密的开销。请注意,您现在提到的示例属于我更通用的:manuall pre-installation 在我的回答中提到
  • 抱歉,我想我需要更具体一点。这两个应用程序实际上是两个人通过短信进行通信。他们不能信任第三方,他们唯一的信任方式是他们在现实世界中商定的 AES 密钥。双方之间开始的每个会话都应该每次都使用新生成的密钥,其中包括他们商定的 AES 密钥(可能是 LaDo34MooMooTakida$ 或更难猜到的密码)。因此,双方应该能够“安全”地进行通信,而不会冒 MITM 攻击的风险。
猜你喜欢
  • 2011-02-02
  • 2023-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-07
  • 2020-07-05
  • 2023-04-05
  • 2014-12-03
相关资源
最近更新 更多