可以对端对端加密中的每条消息更改密钥对吗?

时间:2018-11-25 05:54:55

标签: encryption public-key-encryption private-key

我正在考虑加密应用程序中的安全性,并且想知道是否可行,并且是否为用户创建的密钥对可以随发送的每条消息而变化,从而以某种方式为应用程序增加任何安全性,因此消息是使用其他私钥加密的吗?我知道在用户的密钥之间非常需要同步,但这只是我正在考虑的一个假设。 谢谢

3 个答案:

答案 0 :(得分:2)

当然,每条消息只能使用一个键,我们称之为forward security。为此,您需要将密钥交换协议用作Diffie-Hellman Key exchange protocol。这样会增加通信量,但是安全性并不便宜,它已在TLS 1.3

中使用

由于具有向前保密性,即使各方成功进行了攻击,如果进行加密操作,攻击者最多也可以访问当前密钥。邮件发送后,先前的密钥不会存储,因此不会造成密钥泄露。

答案 1 :(得分:2)

这是很有可能的,但是可行性取决于您如何使用密钥。

正如已经回答的那样-临时(一次性临时)密钥在TLS中用于在密钥有效期内实现前向保密,以导出对称的会话加密密钥。因此,它并不是每个消息的新密钥对,而是用于建立会话的密钥对。生成新的好密钥可能需要一些性能和时间。

即使如此,您的应用程序仍需要维护一个长时间密钥来签署临时公共密钥以确保完整性,以便接收方可以确保临时密钥确实来自其声称的方。这也是TLS密钥交换的一部分。

如果您不使用直接(会话)通信,而是异步发送消息,则认为没有必要生成新的密钥对。您可以只创建一个新的随机加密密钥(假设混合加密)。为了确保完整性,消息也需要由发送者签名,因此必须使用长期存在的持久密钥。

答案 2 :(得分:0)

对于加密,消息接收者可以生成新的公用/专用密钥对,并将公用密钥发送给消息发送者。然后,发送者可以使用此公共密钥进行加密。由于密钥对受损,因此降低了风险。如果临时密钥被盗用,那么您只会丢失一条消息,如果长期密钥被盗用,您将丢失全部消息。

但是,单独加密不能提供安全性。您还需要验证发送方和接收方并提供完整性。

对于身份验证,您需要以安全的方式映射到特定身份的大量预先生成的密钥(例如,由可信证书颁发机构签名的证书,如PKI),或通过其他方式证明是谁生成的每个密钥对。您提到的这是巨大的同步工作。

由于PKI方法具有许多密钥,因此引入了许多方法来验证用户身份,因此它实际上通过增加攻击面来降低安全性。如果您做正确的事,则对临时密钥的攻击将对单个消息的损害限制为一个事实,这可以平衡更大的攻击面。但是,要强制执行此限制,您必须在安全的公共场所中实时维护有效/已使用密钥的列表。否则,可以重复使用一次性密钥。

如果不预先生成密钥,则需要一个长期的公共/私有密钥对,以通过诸如签名之类的方法来建立临时对的所有权。通过仅将其用于临时密钥对签名,可以降低损害长期密钥对的风险。但是,这仅降低了与长期密钥对相关的一种风险。您仍然面临与生成,分发,存储以及将长期密钥对绑定到特定用户相关的风险,并且临时密钥对的安全性取决于长期密钥对。

出于完整性考虑,可以使用数字签名。许多数字签名方法都类似于身份验证方法,其中私钥操作是密钥安全操作。

最重要的是:您可以通过对每个消息使用临时密钥对来提高安全性,但是性能会受到影响,您必须谨慎实施,并且安全性收益很小。