【发布时间】:2019-01-07 10:35:44
【问题描述】:
我正在尝试将 Virgil 安全性集成到我的基本聊天应用程序中,但没有必要。
在聊天时,两个用户说 A 和 B。两个用户都登录并在他们之间进行了一些交流后。现在两个用户都重新加载/注销或登录,然后发送的旧消息无法解密,因为将生成新的私钥。 我不想将用户的公钥和私钥存储在数据库或本地存储中。
【问题讨论】:
标签: encryption private-key public-key
我正在尝试将 Virgil 安全性集成到我的基本聊天应用程序中,但没有必要。
在聊天时,两个用户说 A 和 B。两个用户都登录并在他们之间进行了一些交流后。现在两个用户都重新加载/注销或登录,然后发送的旧消息无法解密,因为将生成新的私钥。 我不想将用户的公钥和私钥存储在数据库或本地存储中。
【问题讨论】:
标签: encryption private-key public-key
我是来自 Virgil 的 Dim。让我帮你解决这个用例。
我准备了一些额外的信息:
Virgil Simple JS Demo 中的第 1 步和第 2 步(你已经看过了)
第 1 步。用户注册步骤。
users register their Public Keys
在这一步:
最后,Alice 和 Bob 拥有自己的私钥和 Virgil 卡(公钥发布到我们的云中,供用户查找彼此的公钥)。
第 2 步。简单的交流(聊天)。
Simple e2e encrypted communication
在这一步:
结果,Bob 验证了 Alice 的签名并解密了来自 Alice 的消息。
现在,问题来了:Alice 决定使用另一个浏览器(或设备 B),但她无法在新设备上加密 Bob 之前的消息。
解决方案:您应该将她以前的私钥从设备 A 传输到设备 B。要以最安全的方式执行此操作:
因此,如您所见,您必须在两台设备上使用一些特殊的附加密钥(一些信使会在设备之间使用 QR 码执行此操作)才能安全地执行此操作。不过,为了更简单,我们为您提供了一项特殊技术,您可以生成在两个设备上相同的“附加密钥”。我们称它为秘密钥匙——大脑钥匙。 Brain Key - 基于 Alice 密码的强加密非对称密钥。
您可以在此处找到有关此密钥的更多信息:https://developer.virgilsecurity.com/docs/java/use-cases/v1/brainkey
那么现在,让我们来看看下一步吧。
第 3 步。将您的私钥存储在云端
store somewhere encrypted Private Key
在这一步:
因此,Alice 将在云端拥有她用来与 Bob 聊天的加密私钥。
第 4 步。 Alice 现在使用她的新浏览器(或新设备)
在这一步:
因此,Alice 将在设备 B 上获得她的私钥,她曾经在设备 A 上与 Bob 聊天。这样,聊天对话在她更换设备后仍然存在。
每次 Alice 使用新设备时,她都可以重新生成相同的 Brain Key 并轻松获得她的私钥,这是她在所有设备上用来与 Bob 聊天的密钥。
【讨论】:
来自 Virgil 的大卫在这里。感谢您的提问,很抱歉让您感到困惑。
我认为问题在于:虽然示例应用为 Alice 和 Bob 生成了用户私钥和公钥,并将公钥发布到我们的 Cards 服务,但它并没有将私钥保存在任何地方。因此,私钥保留在浏览器的本地存储中,因此不会同步到您的用户接下来登录的其他浏览器/设备。因此,由于缺少私钥,您的用户无法解密他们的消息...这是示例应用的限制,我们应该尽快修复该问题(已创建任务)。
为了让应用程序正常工作,即使您的用户能够从另一个浏览器登录并解密消息,他们需要从一个中心位置检索他们尊重的私钥。现在,我不建议只将用户私钥保存到您的数据库(并允许其他人访问它+解密您用户的消息),所以我们创建了一种名为 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
大卫
【讨论】: