情况:发件人A需要向B发送消息。使用RSA公钥加密来保护数据。 och B创建私钥和公钥并共享公钥。 B运行一个接收加密消息的客户端,并使用其计算机上的私钥解密它们。
现在B转到另一台机器,运行客户端,接收消息,但私钥不在那里,所以他无法解密它们!
真实世界场景:聊天应用程序,如Skype。 B可以在几台都可以接收消息的机器上运行Skype。
如何在不转移私钥的情况下完成此操作?这通常如何处理?
答案 0 :(得分:1)
GnuPG这样做。您可以向很多人发送消息。让我们分解吧。从明文消息M开始。
接下来创建一个随机密钥sk。
使用对称密码。 Aes是一个不错的选择。
使用sk加密M. em = E_sk(M)
所以A发送到B和C.A获取Bpub和Cpub,即它们各自的公钥。
然后A使用每个公钥加密sk。标题= E_Bpub(sk)& E_Cpub(SK)
然后, A将Header
和em
发送给B和C.
B和C都使用各自的私钥来解密他们Header
的部分,然后当他们有sk
时,使用sk
来解密消息。
因此,为了回答您的问题,skype或iMessage之类的内容为每个用户提供了多个公钥,并使用所有用户加密sk
,以便任何设备都可以解密该消息。
希望有所帮助。
Whatsapp的加密基于窃窃私语的论文。
https://www.whatsapp.com/security/WhatsApp-Security-Whitepaper.pdf
https://eprint.iacr.org/2014/904.pdf https://whispersystems.org/
答案 1 :(得分:1)
有多种方法可以满足要求。 1)用户外部“公钥”服务器,不参与会话,但根据请求“返回”指定用户的公钥; 2)使用洋葱路由:说“A”知道“B”,但不知道“C”。我们假设B知道所有这些,因此,想法是将B作为向C传递消息的代理,而没有明确的知识“A-> C”。除此之外,我们可以使用大蒜路由来构建更复杂的网络。这是一种非常困难的解决方案。 3)使用一个对称密钥(和对称算法)进行聊天。它有效,但撤销存在问题:想象聊天组中的某个人不再信任。我们至少应该将它们从下一条消息中排除,但是当他们知道加密密钥时,他知道参与者之间的所有下一次握手。 4)使用会话密钥,在其上产生一些临时密钥“每个消息一个”(例如,参见OTR)。这是更复杂的解决方案,但其最简单的实现具有与方法3相同的缺点。
答案 2 :(得分:0)
我想我拥有它。
仅常规消息的AES。每个客户的密钥相同。 当新客户端连接时,美国RSA使用优先级消息将AES密钥从发送方发送到新客户端。 (收件人向发件人发送请求,“给我AES密钥,这是我的RSA公钥”)然后处理等待的AES加密邮件!
但有一个问题是,发件人必须在线才能发回AES密钥。因此,当新客户端连接时,在发送者处于联机状态并且能够响应请求之前,他将无法接受任何消息。但我也许可以忍受。
但是......如果SENDER在另一台机器上安装了新客户端,他就不再拥有AES密钥......