我正在尝试将Virgil安全性集成到我的基本聊天应用程序中,但是并不需要。
正在聊天的2个用户说A和B。两个用户都登录并在他们之间进行一些通信之后。现在两个用户都重新加载/注销或登录,然后发送的旧消息无法解密,因为将生成新的私钥。 我不想将用户的公钥和私钥存储在数据库或本地存储中。
答案 0 :(得分:2)
我是维吉尔的点心。让我帮您解决这个用例。
我准备了一些其他信息:
Virgil Simple JS演示中的步骤1和2(您已经看过)
步骤1。用户注册步骤。
users register their Public Keys
在此步骤:
最后,爱丽丝和鲍勃拥有自己的私钥和维吉尔卡(公钥已发布到我们的云中,供用户查找彼此的公钥)。
步骤2。简单交流(聊天)。
Simple e2e encrypted communication
在此步骤:
结果,Bob验证了Alice的签名并解密了来自Alice的邮件。
现在,遇到问题:爱丽丝决定使用其他浏览器(或设备B),但是她无法在新设备上加密鲍勃的先前消息。
解决方案:,您应该将其先前的私钥从设备A传输到设备B。以最安全的方式执行此操作:
因此,如您所见,您必须在两个设备上都使用一些特殊的附加密钥(某些使者使用设备之间的QR码进行此操作)才能安全地执行此操作。为了简化起见,我们为您提供了一种特殊的技术,您可以生成“附加密钥”,这在两个设备上都是相同的。我们称该秘密密钥为大脑密钥。 脑密钥-基于爱丽丝的密码的强密码非对称密钥。
您可以在这里找到有关此键的更多信息:https://developer.virgilsecurity.com/docs/java/use-cases/v1/brainkey
现在,让我们看一下下一步。
步骤3。将您的私钥存储在云中
store somewhere encrypted Private Key
在此步骤:
结果,爱丽丝将把自己用来与鲍勃聊天的加密私钥存储在云中。
步骤4。爱丽丝现在使用她的新浏览器(或新设备)
在此步骤:
结果,爱丽丝将在设备B上获取她的私钥,该私钥是她以前在设备A上与鲍勃聊天的方式。这种聊天对话在她的设备更改后仍然存在。 >
每次Alice使用新设备时,她都可以重新生成相同的Brain Key并轻松获取她的Private Key,这是她在所有设备上用于与Bob聊天的密钥。
答案 1 :(得分:1)
维吉尔的大卫。感谢您的提问,也很抱歉让您感到困惑。
我认为问题在于:虽然示例应用程序同时为Alice和Bob生成了用户私钥和公钥,并已将公钥发布到我们的Cards服务中,但并未将私钥保存在任何地方。因此,私钥保留在浏览器的本地存储中,因此不会与您的用户下一次登录的其他浏览器/设备同步。因此,由于缺少私钥,您的用户无法解密其消息...这是示例应用程序的局限性,我们应尽快修复该问题(已创建任务)。
为了使该应用正常运行,即为了使您的用户能够从其他浏览器登录并解密消息,他们需要从一个中央位置检索他们尊敬的私钥。现在,建议将用户私钥保存到数据库(并允许其他人访问它并解密用户的消息)对我来说太la脚了,因此我们创建了一种称为BrainKey的技术来加密用户私钥与我们从用户密码派生的密钥。 Apple用您的TouchID派生密钥加密您的钥匙串的类似方法。
要使其正常运行,您需要执行以下操作:
在用户注册期间(在客户端设备上),为您的用户生成一个私钥,并将公钥发布到我们的Cards服务。
然后使用用户密码生成BrainKey(从技术上讲是私钥)。
从BrainKey生成公钥,并对用户先前(步骤1)生成的私钥进行加密。
现在,为用户将该加密的私钥保存到您的数据库中。
您的用户每次使用她的密码登录,从她的密码重新生成相同的BrainKey,从数据库中下载加密的私钥,使用BrainKey对其进行解密,现在您可以使用此密钥来解密所有聊天消息寄给她的。
以下是我们BrainKey技术的参考和示例代码:https://developer.virgilsecurity.com/docs/javascript/use-cases/v1/brainkey
这有意义吗?您想查看一个示例代码吗?如果您加入我们的Slack,我们可以实时聊天,我是@dave:https://join.slack.com/t/virgilsecurity/shared_invite/enQtMjg4MDE4ODM3ODA4LTc2OWQwOTQ3YjNhNTQ0ZjJiZDc2NjkzYjYxNTI0YzhmNTY2ZDliMGJjYWQ5YmZiOGU5ZWEzNmJiMWZhYWVmYTM
大卫