【问题标题】:Encrypting chat & normal messages加密聊天和普通消息
【发布时间】:2016-10-27 02:29:39
【问题描述】:

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

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

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

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

2 也是用于加密消息的正确技术,因为它是“对称的”,它允许发送者和接收者都解密消息...或者我应该使用 1 来处理 1to1 消息和 2聊天?

【问题讨论】:

  • 1.发件人在加密之前拥有消息。 2. 您可以在群聊中使用公钥,但加密通常有点慢。如果您可以管理共享对称密钥会更好,您只需在每次组更改时通过在每个用户的 pubkey 下发送 aes 密钥来重新生成密钥。

标签: node.js security encryption reactjs message


【解决方案1】:

见这篇文章:Public-key cryptography

Alice 向 Bob 发送一条消息。

为了加密它,Alice 得到 Bob 的公钥。消息使用 Bob 的公钥加密。

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

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

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

您可以为此使用非对称加密,并结合对称加密。

消息 M 使用对称密钥 K 加密。 MKn 加密的 K 一起被加密发送给该组的所有收件人。

Kn 是非对称公钥,因接收者而异。

例如K1 是 Bob 的公钥。 K2 是 Alice 的公钥。

K 是一个对称密钥,每条消息都是完全随机的,因为它是为每个接收者加密并随消息一起发送的,所以只有当前组成员可以解密。

来自评论:

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

没有。

K 是由 CSPRNG 生成的密钥。

K用于加密消息M,给出m。即K(M) = m,括号中的值表示加密的内容,外面的值表示使用的密钥。 p>

以下内容通过网络发送:mK1(K)K2(K)

K1用来加密K,所以Bob可以用他的私钥解密K >k1.

K2用来加密K,所以Alice可以用她的私钥解密K >k2.

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

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

【讨论】:

  • so K 是由许多其他公钥生成的密钥,用于加密消息。为了解密它,我需要一个链接到 K 的私钥。这允许人们聊天。对于 1to1 消息,应使用公钥(来自收件人)和私钥(来自发件人)对消息进行加密。这将允许发件人和收件人解密邮件。这是正确的吗?
  • 谢谢,所以每个用户都有一个由公钥生成的每条消息的密钥。所以如果有 30 人在聊天,我需要为每个用户创建 30 个密钥来获取 1 条消息?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-10
相关资源
最近更新 更多