我想创建一个应用程序,在该应用程序中,多个人应该能够安全地相互通信(想像一下去中心化的群聊)-听起来很简单,但这是我的问题:
据我了解,使用非对称加密,您将拥有一个公共密钥和一个私有密钥。每个想要发送消息给某人的人都必须使用公共密钥对其进行加密,而接收者可以使用私有密钥对其进行解密。
但是,如果有两个以上的人应该能够阅读所有消息,那么我不知道它应该如何工作……要么每个人都有公共密钥和私有密钥(我认为这是一个坏主意),要么每个人都有拥有所有人的公共密钥,并且必须向每个收件人发送单独的消息。
另外,我想100%确定,发送消息的人确实是他假装的人。(因此没有人能够“伪造”消息)
有没有可以解决我问题的加密算法?
我假设您的意思是非对称加密,而不是异步加密。
在大多数情况下,我们实际上并不使用非对称密码来加密消息的内容。这是因为消息可能很大,并且与对称密码相比,非对称密码的速度较慢。这也是由于您要在此处解决的问题:在多方通信中,您希望只发送一次消息,并让每个人都可以阅读。因此,诀窍在于我们将非对称和对称技术结合到了解决该问题的协议中。
首先,我们生成一个随机对称密钥,我们可以称其为“会话密钥”。我们将把该会话密钥分发给所有收件人,但是我们需要安全地进行此操作。这实际上是我们要使用非对称加密的地方。我们使用每个接收者的每个公用密钥和一个非对称密码(例如RSA)对每个接收者加密一次会话密钥,然后将加密的会话密钥发送给每个配方。我们可以将其分别发送给每个收件人,也可以仅构建如下结构:
"recip1|recip1EncryptedSessionKey|recip2|recip2EncryptesSessionKey..."
并将整个内容发送给所有接收者,每个接收者都可以解析并解密他们自己的会话密钥的加密副本。(这通常是在加密电子邮件中完成的方式:该消息随附所有收件人的所有会话密钥的所有加密版本的列表,并且每个人都获得完全相同的电子邮件。)
一旦将会话密钥安全地分发给所有收件人,我们就可以使用会话密钥对每个消息使用对称密码(例如AES)进行一次加密,然后将相同的加密消息发送给所有收件人。由于他们都已经收到了会话密钥的副本,因此他们都可以读取它并对其执行操作。
请注意,就像所有与加密有关的事情一样,会话密钥实际上是随机的至关重要。不要仅仅依靠普通的香草随机数生成器,并且出于天堂的缘故,不要自己动手。确保使用加密安全的伪随机数生成器。
真正的聊天系统可能会复杂得多,可能具有定期重新建立新会话密钥的机制,并且安全协议的细节可能非常复杂。即,考虑一下如何防止坏家伙介入并欺骗每个人使用他选择的会话密钥!但是基础如上所述。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句