加密聊天&正常的消息

时间:2016-06-24 12:52:23

标签: node.js security encryption reactjs message

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

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

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

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

    2用于加密邮件的正确技术也是如此,因为它是“对称的”,允许发件人和收件人解密邮件......或者我应该使用1收集1to1邮件和2聊天?

1 个答案:

答案 0 :(得分:4)

请参阅此文章:Public-key cryptography

Alice向Bob发送消息。

要加密它,Alice会获取Bob的公钥。邮件使用Bob的公钥加密。

只有Bob可以解密邮件,因为只有Bob拥有私钥。

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

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

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

消息 M 使用对称密钥 K 进行加密。 M 被加密发送给该组的所有收件人,以及 K n 加密的 K

K n 是一个非对称公钥,因收件人而异。

e.g。 K 1 是Bob的公钥。 K 2 是Alice的公钥。

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

来自评论:

  

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

没有

K 是由CSPRNG生成的密钥。

K 用于加密消息 M ,提供 m 。即 K M )= m ,其中括号中的值显示加密的内容,外部的值显示使用了哪个键。

通过网络发送以下内容: mK 1 K K 2 ķ

K 1 用于加密 K ,因此Bob可以使用他的私钥 K >ķ <子> 1

K 2 用于加密 K ,因此Alice可以使用她的私钥 K >ķ <子> 2

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

公钥始终用于加密,私钥用于解密。发件人不需要解密邮件,因为他们已经知道邮件的明文。