我正在开发一个将在网络上托管的小型辅助医疗应用程序(主要是日历和有关患者的信息)。该应用程序将允许不共享数据的多个帐户(每个从业者 1 个)。我想尽可能地保护个人数据,尤其是避免两个可能的问题:
1/ 一个编程错误,可能导致一名从业者访问其他人的数据 2/ 如果整个数据库被盗,我希望个人信息是安全的
我知道首先要做的是避免每一个 sql 或参数注入,但我想采取额外的步骤,因为我是人类,我知道如果数据泄漏,一个错误可能会导致真正的混乱......我真的想避免这种情况。
- 该应用程序基于 PHP 和 Mysql
- 该应用程序必须有自己的方法来解密个人数据,因为例如它会在后台向患者发送电子邮件和短信,以提醒他们预约。
- 从业者通常有一个秘书,该秘书必须能够使用自己的登录名/密码访问应用程序并查看从业者的数据(但不是全部,只有与联系信息、约会日期/时间相关的数据......)
- 当然,医生或秘书应该能够在数据库中进行搜索,例如通过病人的姓名、电话号码……即使它在数据库中被加密。
所以...我正在尝试找出存储、加密、解密数据的最佳方式。我也有点害怕性能,例如加密数据的搜索引擎......
现在这是我有的最简单的想法: 1/当一个新从业者创建一个帐户时,我生成一个与该帐户相关的唯一密钥,它永远不会改变,并将其存储在数据库中......这将是一种“salt” 2/ 对于每个个人数据,我使用由两部分组成的密钥对其进行加密(例如:患者姓名、电话号码):一个对整个应用程序相同(例如存储在 php 配置文件中) ) + 从从业者帐户中提取的“盐”。
这是实用的,因为从业者的密码和应用程序之间没有链接,因此例如从业者的秘书访问数据没有问题,我的电子邮件/短信任务解密数据以及从业者是否丢失了他的密码(这更比窃取数据库更可能发生)。我最初想用从业者的(明文)密码来加密加密密钥,但随后无法使用秘书帐户或计划任务访问数据。如果我用从业者密码的哈希值(存储在数据库中)加密加密密钥,它会复杂得多,实际上增加了零安全性好处。
问题 :
A/你认为它足够强大还是我错过了什么?我知道如果整个服务器遭到破坏,数据可能不安全(如果黑客足够聪明,可以找到密钥,请编写代码来解密所有数据)......但这并不是我所担心的。而且我找不到任何更好的解决方案来保持计划任务能够解密数据。你有更好的建议吗?
B/你将如何加密/解密文本数据?(算法、密钥、数据库......)我对 PHP 很陌生,我害怕犯错误。我阅读了文档,但它缺乏完整的现实生活示例(从密钥生成到文本加密/解密)。我担心 utf8 问题,密钥长度问题(从固定部分(php 配置文件)和存储在数据库中的可变部分创建复合密钥的良好做法是什么?)...
C/对于搜索引擎,你会怎么做?例如,我想找到一个名字以“ABCD”开头的人,我有比检索整个加密名称列表更好的方法吗,解密(php)每个名字,把它们放在一个列表中,然后(仍然是 php) 在该列表中创建搜索功能?你认为我应该使用 MySQL 的 AES_ENCRYPT/AES_DECRYPT 函数来加密/解密整个数据吗?
提前致谢