我如何最安全地将信息从第三方传递给用户?



作为一个学习项目,我正在尝试建立一个类似于我们在荷兰的冠状病毒疫苗QR码应用程序的项目。我对处理这些敏感/私人数据的最安全方法有一些疑问。

所以我有一个工作流程,我想在这里列出,并征求你的意见。我相信我可以在工作流程中使用JWT。据我所知,JWT既可以签名也可以加密。也许两者都有,我不确定。我想我需要一个加密的签名的JWT。我不完全了解签名和加密是如何工作的,所以我不知道它们的限制是什么。总之,我们有:

  • 为人们接种疫苗的机构。
  • 接种疫苗的人。
  • 希望能够验证某人是否接种了疫苗的人。
  • 最后是我的后端服务器。

简而言之,我将它们分别称为接种者、被接种者、验证者和服务器。以下是我认为最安全的工作流程:

  1. 接种者在手机上下载我的应用程序。
  2. 接种者接种疫苗,然后被告知在他们的手机上打开我的应用。
  3. 如果这是第一次打开应用程序,那么:
    1. app生成公钥/私钥对
    2. 应用程序用它的公钥向https://myserver.com/api/register发送POST请求。
    3. 服务器为该设备生成一个新的唯一id,将其与它们的公钥一起存储在数据库的users表中,并返回带有它们的id的响应。表现在看起来像这样:
  4. vaccination_data[用户的公钥]

    这是一个使用HMAC和PKI的经典用例。您有两个不受信任的实体(接种者和事件组织者),它们需要基于它们都信任的更高权威(类似于TLS证书信任的工作方式)在它们之间形成单向信任关系

    1. 后端服务器存储一个公私对,公钥与每个想要验证疫苗接种证明的实体共享。
    2. 当用户接种疫苗时,他提供他的电话号码并通过短信获得数字签名文件。
    3. 该文档使用第1条中提到的私钥进行签名,并包含您想要验证的数据(这是一个签名的JWT,即JWS)
    4. 文档可以编码为QR码图像
    5. 验证可以通过不同的应用程序完成,该应用程序从服务器预取公钥(因此不需要在线),扫描QR,解码并使用公钥进行验证。

相关内容

  • 没有找到相关文章

最新更新