如何使用多人公钥加密聊天消息并恢复消息?

时间:2018-03-12 10:21:34

标签: cryptography encryption-asymmetric

我有两个用户和一个中间人的应用程序,他们都持有私钥和公钥。为了进行安全聊天,两个用户和一个中间人都发送公钥并生成安全通道。在建立频道之后,中间人没有能力看到加密的消息,除非其中一个用户正在向中间人发送他自己的密钥。

我对密码学不是很熟悉,所以对于这个应用程序,我知道如何加密和解密消息。

encrypt(data) {
    try {
        var cipher = Crypto.createCipher('aes-256-cbc', this.password);
        var encrypted = Buffer.concat([cipher.update(new Buffer(JSON.stringify(data), "utf8")), cipher.final()]);
        FileSystem.writeFileSync(this.filePath, encrypted);
        return { message: "Encrypted!" };
    } catch (exception) {
        throw new Error(exception.message);
    }
}

但我不知道如何建立利益相关方的加密渠道。密钥,以及如何使用他的密钥和用户之一来查看消息。键?

有没有办法使用加密技术实现这一目标?

1 个答案:

答案 0 :(得分:0)

我不确定我是否完全理解,但我认为如果您想使用不使用公钥加密的系统,我会建议使用2阶段加密的系统,实际上很像PGP只有两个阶段都使用对称密钥 -

1)聊天中第一个人生成固定会话密钥,这可以是随机生成的数字。

2)然后,该会话密钥由属于聊天组的每个新成员的密钥加密,并分别发送给他们。

3)新成员使用自己的唯一密钥解密,以获取明文会话密钥。

4)此会话密钥随后用于解密发送给所有参与者的消息。相同的密钥也可用于加密和发送来自任何有权参与者的任何新消息(即具有有效的会话密钥)。

这在某些系统中使用,但它首先依赖于安全传输的唯一密钥。如果无法满足这一条件,则可以通过公钥加密来解决问题,以构建端到端的安全消息系统,如PGP,whatsapp等。