我目前正在为养老院建立一个网站.
我已经设计了一个在我的数据库中存储私人数据的方案,但我想对你有所了解.
基本上,我有一个表患者,存储有关患者的公共(=非敏感)信息.其他一些信息(如姓名,地址)是私人信息,需要安全存储.我使用由PHP OpenSSL生成并由网站管理员发送的公钥/私钥对.只有被允许访问私人数据的人(基本上是医疗保健提供者)才知道密码.
我想把它们存放在另一张桌子里.第一个问题,BLOB是存储二进制数据的最佳列类型(使用MySQL).或者我应该转换它们(例如使用base64)并将它们存储在VARCHAR列中?
我的patient_secure_data表看起来像这样:
id INT AUTO_INCREMENT patient_id INT (FOREIGN KEY to patient.id) key VARCHAR(63) data BLOB env BLOB
它是一个键值表,其值由openssl_seal
密封.我需要存储第三个参数($env_keys)以便能够解密数据.所以第二个问题,如果我在拨打openssl_open
时拥有私钥的密码,为什么还需要这个env_keys?
第三个(也是最后一个)问题,它是一个安全的数据库架构吗?我的意思是,我可以保证没有密码短语的人可以看到私人数据吗?
注意:我还将使用相同的密钥对来加密存储在磁盘上的文件.但是数据库或文件,我看不出有关安全性的任何差异.
问候,
纪尧姆.
对不起,如果我的语言不完美,我不是母语为英语的人……我希望自己能说清楚.
最佳答案 1 – BLOB是我的首选,因为将它编码为base64会增加空间和处理时间(因为你必须在解密之前解码base64)
2 – openssl_seal不会为您提供用于加密数据的密钥. env_keys的目的是存储生成的密钥的加密形式.当你调用openssl_open时,你给它这个信封密钥和解密信封密钥所需的私钥.私钥需要与用于生成信封密钥的公钥匹配.
3-如果您的私钥需要密码,那么从技术上讲,您的数据相对安全.即使他们有信封密钥和私钥,他们也无法使用它……但是你的密码有多安全?有一点需要注意的是,你几乎永远无法保证一个完全安全的方案,但你绝对可以让黑客更难对付.在这里运用你的想象力.顺便说一下,你的代码中的明文密码是什么?