加密聊天和普通消息

IT技术 node.js security encryption reactjs message
2021-05-02 04:14:59

在阅读了加密之后,我想将该技术应用于我的应用程序(节点 + react)。我有一个使人们可以进行人与人聊天并创建群组的信使。我相信应该有两种不同的技术来做到这一点

  1. 使用私钥和公钥来加密人与人之间的消息

  2. 为聊天组创建一个共享的“私钥”,只有加入的人才能访问

我有点困惑如何1工作,因为如果使用公钥加密消息,则只有收件人才能解密它。但是发件人是如何做到的呢?这意味着只有接收者才能看到我发送的消息,除非我有他/她的私钥......在这种情况下,公钥有什么意义?

那么2用于加密消息的正确技术是什么,因为它是“对称的”,它允许发件人和收件人解密消息......还是我应该1用于一对一消息和2聊天?

1个回答

请参阅这篇文章:公钥密码学

Alice 向 Bob 发送一条消息。

为了对其进行加密,Alice 获得了 Bob 的公钥。该消息使用 Bob 的公钥加密。

只有 Bob 可以解密消息,因为只有 Bob 拥有私钥。

这被称为非对称加密,因为加密的密钥与解密的密钥不同。

使用对称方法进行群聊的问题在于,您还需要一种让每个人都安全地知道密钥的方法。此外,如果有人离开该组,他们仍然可以解密聊天记录。

您可以将非对称加密与对称加密结合使用。

消息M使用对称密钥K加密中号被加密发送到该组的所有接收者,沿着ķ通过加密ķ Ñ

K n是非对称公钥并且因接收者而异。

例如,K 1是鲍勃的公钥。 K 2是Alice 的公钥。

K是一个对称密钥,每条消息都是完全随机的,并且因为这是为每个收件人加密并与消息一起发送的,所以只有当前组成员才能解密。

来自评论:

所以K是由许多其他公钥生成的密钥,用于对消息进行加密。为了解密它,我需要一个链接到 K 的私钥。这允许人们聊天。对于 1to1 消息,应使用公钥(来自接收者)和私钥(来自发送者)对消息进行加密。这将允许发件人和收件人解密消息。这个对吗?

不。

K是由 CSPRNG 生成的密钥。

K用于加密消息M,给出mK ( M ) = m,其中括号中的值显示加密的内容,外面的值显示使用了哪个密钥。

以下内容通过线路发送:mK 1 ( K ) K 2 ( K )

ķ 1用于加密ķ,所以Bob可以解密ķ使用自己的私钥ķ 1

ķ 2用于加密ķ,所以Alice可以解密ķ使用自己的私钥ķ 2

Alice 和 Bob 可以看到K并使用它将m解密M

公钥总是用来加密,私钥用来解密。发件人不需要解密消息,因为他们已经知道消息的明文。