我有两个用户和一个中间人的应用程序,他们都持有私钥和公钥。为了进行安全聊天,两个用户和一个中间人都发送公钥并生成安全通道。在建立频道之后,中间人没有能力看到加密的消息,除非其中一个用户正在向中间人发送他自己的密钥。
我对密码学不是很熟悉,所以对于这个应用程序,我知道如何加密和解密消息。
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);
}
}
但我不知道如何建立利益相关方的加密渠道。密钥,以及如何使用他的密钥和用户之一来查看消息。键?
有没有办法使用加密技术实现这一目标?
答案 0 :(得分:0)
我不确定我是否完全理解,但我认为如果您想使用不使用公钥加密的系统,我会建议使用2阶段加密的系统,实际上很像PGP只有两个阶段都使用对称密钥 -
1)聊天中第一个人生成固定会话密钥,这可以是随机生成的数字。
2)然后,该会话密钥由属于聊天组的每个新成员的密钥加密,并分别发送给他们。
3)新成员使用自己的唯一密钥解密,以获取明文会话密钥。
4)此会话密钥随后用于解密发送给所有参与者的消息。相同的密钥也可用于加密和发送来自任何有权参与者的任何新消息(即具有有效的会话密钥)。
这在某些系统中使用,但它首先依赖于安全传输的唯一密钥。如果无法满足这一条件,则可以通过公钥加密来解决问题,以构建端到端的安全消息系统,如PGP,whatsapp等。