0

* 澄清:我的问题涉及在现实世界中已经同意密钥(读取密码短语)的双方之间建立“安全”通信通道。只有使用RSA才能允许MITM攻击(如果我没有误解),所以我在考虑在将AES发送给各方之前用AES(双方同意的密钥)对公钥进行加密*在运输过程中保护公共RSA密钥

I'目前正试图建立两个应用程序,与彼此进行会谈。为了保护交换的消息,我正在考虑使用RSA,其中每个应用程序都有自己的一组密钥。

在两个应用程序之间开始通信之前,他们需要交换密钥。这应该不是问题,但我想在使用AES加密公钥之前通过互联网发送它们。

我知道public(公钥)这个词是什么意思,但我在想这样会发现正确的应用程序/计算机获得了密钥而没有其他人。

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

如果有人可以提供更好的建议(我正在使用LibCrypto库btw),我全部都是耳朵。

谢谢。

问候 /托马斯Gustavsson的

+0

如果你已经有了一个预先建立的对称密钥,你为什么要进行非对称加密?您需要使用某种方式创建AES会话密钥,最好是不易受MITM攻击影响的密钥,并且不会使主密钥暴露于危险之中。但我认为这是错误的论坛,请尝试crypto.stackexchange.com – 2011-12-29 14:30:33

+0

哦,并且密码不是关键。它可以被转换成*键,例如使用像PBKDF2这样的基于密码的密钥派生函数,但它不一样。例如,使用密码作为密钥可能会导致相关的密钥攻击。 – 2012-01-01 23:18:01

+0

OK,查看它,可能密码仍然不能用作相关的密钥攻击,但是你肯定会将密码限制为密钥大小,这意味着你也限制了密钥空间(密钥的数量例如在蛮力攻击中搜索)。 – 2012-01-03 20:11:03

回答

1

这个问题表明你的一部分许多误解。

我知道这个词是什么公众(如公钥)意思,但我是 心想这下看到正确的应用程序/计算机 得到钥匙并没有其他人。

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

该问题在典型安装中由可信管理机构签署的证书解决,并颁发给特定实体即IP或DNS名称。

在你的情况下,你还没有给出你的证书的任何细节。

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

如果您按照其他计划,例如对称加密,那么你会开始提出其他问题,例如你如何安全地共享密钥等

+0

网络上没有确定性,我知道。但是,如果双方都同意AES密钥(可能在酒吧,商场或其他现实生活中),他们会使用这个加密密钥来加密和解密他们发送给彼此的其他公钥。 如果攻击者不知道AES密钥,他可能无法发送给我一个我将接受的公钥(因为它不能被解密和验证为有效的公钥)。这不正确吗? – tomplast 2011-12-29 11:57:17

+0

@ tomplast:在这种情况下,他们可以轻松地交换他们的公钥,并避免AES加密的开销。请注意,您现在提到的示例属于我的更通用的:在我的答案 – Cratylus 2011-12-29 11:59:58

+0

中提到的'manuall pre-installation'对不起,我想我需要更具体些。这两个应用程序实际上是两个人通过短信进行通信。他们不能相信第三方,他们唯一的信任手段是他们在现实世界中同意的AES密钥。双方之间开始的每个会话都应该每次都使用新生成的密钥,并且包括他们同意的AES密钥(可能是LaDo34MooMooTakida $或者更难猜测的密码)。所以双方应该能够交流“安全”而不会冒MITM攻击的风险。 – tomplast 2011-12-29 12:11:38