我正在开发一项服务,该服务将涉及定期(每周、每月等)直接借记客户帐户,因此我需要将他们的信息(BSB/路由号码和帐号)存储在我的数据库中. 我非常关心安全性,所以我的第一个想法是不要存储这些信息,但是在阅读了关于这个主题的许多其他问题之后,我想出了一个我认为可行的解决方案 - 但我想运行它过去你们,以确保我没有留下任何安全漏洞。
当用户注册到服务时,它将创建一个公钥/私钥对,私钥具有用户提供的密码(他们的帐户密码)。密码使用 bcrypt 散列,公钥和私钥与密码散列一起存储在用户表中。
我还将建立一个管理员公钥/私钥对,当我们需要处理直接借记时将使用它。公钥对应用程序和数据库是已知的,但私钥将被保存在服务器之外,因此只有在加密后才能下载数据,然后在其他地方进行处理。加密时下载的替代方法是将私钥上传到应用程序,仅解密该请求的数据,然后删除上传的私钥 - 这是一个安全漏洞吗?
当用户注册直接借记时,该服务将获取用户的公钥和管理员的公钥,并使用GPG 的多收件人功能对其进行加密。
据我所知,这包括以下情况:
- 如果用户想要查看数据,他们将需要提供密码来解密信息。
- 如果用户想要添加更多数据,他们不需要提供密码,因为我只使用他们的公钥。
- 如果管理员想要查看数据,他们需要下载信息并解密,或者上传他们的私钥(见上文)。
- 如果用户更改了他们的密码,我只需要更新他们的私钥。如果他们忘记了密码,我可以解密他们的数据的唯一方法是通过管理员私钥,但由于这是在场外保存的,因此应该删除数据。
如果管理密钥对被泄露(除了显而易见的问题)并且我需要生成一个新的管理密钥对然后重新加密所有存储的数据,是否会有任何问题?
此设计中是否存在任何安全漏洞?诚然,我不是专家,但我已尽力对此进行研究,现在很想得到一些意见。
我还研究了Authorize.net 的客户信息管理器 (CIM) 之类的服务,但据我所知,您需要使用他们的服务来收款,而我们已经建立了自己的商家以更便宜的价格进行此操作率,所以我们只需要一个安全的信息存储服务。
该服务将使用 HTTPS,并在 Ubuntu 12.04 上运行,使用 PHP 和 MySQL,如果有帮助的话。
您可以提供的任何建议将不胜感激!
谢谢