如何使用 Virgil 安全加密和解密消息?

May*_*r S 2 encryption public-key private-key

我正在尝试在我的基本聊天应用程序中集成 Virgil 安全性,但它不会根据需要。

聊天时,2 个用户说 A 和 B。在两个用户登录后,他们之间进行了一些交流。现在,两个用户都重新加载/注销或登录,然后发送的旧消息无法解密,因为将生成新的私钥。我不想将用户的公钥和私钥存储在数据库或本地存储中。

小智 5

我是来自 Virgil 的 Dim。让我帮助您解决这个用例。

我准备了一些额外的信息:

Virgil Simple JS Demo 中的步骤 #1 和 #2(你已经看过了)

第1步。用户注册步骤。

用户注册他们的公钥

在这一步:

  • 您对爱丽丝进行身份验证
  • 在您成功验证 Alice 的身份后,您可以给她一个 JWT 以授予她对 Virgil 的云 API 的访问权限
  • Alice 生成她的私钥 (2) -> 将她的私钥存储到本地存储中 -> 创建她的 Virgil Card
  • Alice 在 Virgil Cards Service 上发布 (3) 她的 Virgil Card(她使用她的 JWT 来做这件事)。
  • 然后您验证 Bob(用户 B):与 Alice 相同的故事。

最后,Alice 和 Bob 拥有自己的私钥和 Virgil 卡(公钥发布到我们的云中,供用户查找彼此的公钥)。

第2步。简单的交流(聊天)。

简单的端到端加密通信

在这一步:

  • Alice 在 Virgil Cards Service 中寻找并找到 Bob 的公钥 (1)
  • Alice 在浏览器中从她的本地存储中加载她的私钥
  • Alice(使用她的私钥)签署并加密(使用 Bob 的公钥)一条消息并通过您的应用服务器发送给 Bob
  • Bob 收到加密和签名的消息
  • Bob 前往 Cards Service 查找 Alice 的公钥以验证她的签名
  • Bob 从他的本地存储中加载他的私钥并解密消息

结果,Bob 验证了 Alice 的签名并解密了来自 Alice 的消息。

现在,问题来了:Alice 决定使用另一个浏览器(或设备 B),但她无法在新设备上加密 Bob 以前的消息。

解决方案:您应该将她先前的私钥从设备 A 传输到设备 B。要以最安全的方式执行此操作:

  • 是用一些额外的密钥加密设备 A 上的私钥。
  • 将加密的私钥传输到设备 B。
  • 在设备 B 上使用相同的附加密钥来解密来自设备 A 的加密私钥。

因此,如您所见,您必须在两台设备上使用一些特殊的附加密钥(一些信使在设备之间使用二维码来做到这一点)才能安全地做到这一点。不过,为了更简单,我们为您提供了一项特殊技术,您可以生成在两台设备上都相同的“附加密钥”。我们称该密钥为“大脑密钥”。Brain Key - 基于 Alice 的 PASSWORD 的强加密非对称密钥。

您可以在此处找到有关此密钥的更多信息:https : //developer.virgilsecurity.com/docs/java/use-cases/v1/brainkey

那么现在,让我们来看看下一步。

第 3 步。将您的私钥存储在云端

将加密的私钥存储在某个地方

在这一步:

  • 爱丽丝输入她的密码
  • 爱丽丝从她的密码中生成一个大脑密钥 (1)
  • Alice 用 Brain Key 加密她的私钥 (2)
  • Alice 将她加密的私钥上传到 Cloud 中的某个地方(到您的应用程序的后端/数据库)

结果,Alice 将在云中拥有她加密的私钥,她用来与 Bob 聊天。

第四步。Alice 现在使用她的新浏览器(或新设备)

传输私钥

在这一步:

  • Alice 输入她的密码(与她之前用于生成大脑密钥的密码相同)。
  • 这会生成她的大脑钥匙 (1)
  • Alice 从云端/后端/数据库下载她的加密私钥 (2)
  • Alice 用 Brain Key 解密加密后的 Private Key

结果,Alice 将在设备 B 上获得她的私钥,她用来在设备 A 上与 Bob 聊天。这样,聊天对话在她的设备更换后仍然存在。

每次 Alice 使用新设备时,她都可以重新生成相同的 Brain Key 并轻松获得她的私钥,这是她在所有设备上与 Bob 聊天时使用的密钥。