我目前正在研究一个允许用户保存敏感日期的应用程序。由于它是一个Web应用程序,因此我们使用NodeJS
和MongoDB
作为持久性。 (顺便说一下,我对Node和NoSQL是全新的)MongoDB和NodeJS中的敏感数据分隔 - 通过加密密钥引用
我们确实有可以存储某种病史的用户。姓名和电子邮件存储在用户文档中,而其他内容存储在配置文件中。 为了提高安全性,我想encrypt
从用户引用他的个人资料,反之亦然。
目前我正在使用Crypto
库NodeJS
在用户配置文件中加密(AES256)user_id
引用。因此,该引用不再是ObjectID的一种类型,而是一个字符串
因此,通过直接查看数据库,不可能检查哪个配置文件属于哪个用户。 encrypt
和decrypt
的密钥用户标识存储在NodeJS
服务器的js文件中的某处。
这是一种常见的/好的方法,还是我在做一些完全错误的事情?是否有更好的方式 - 我读了MongoDB是不支持任何“内置加密”
至少,这里是为EN /解密
module.exports = function() {
this.encryptionSecret = "ANYSECRET";
this.crypto = require('crypto');
this.algorithm = 'aes256';
this.encrypt = function (key) {
var cipher = this.crypto.createCipher(this.algorithm, this.encryptionSecret);
var encrypted = cipher.update(""+key, 'utf8', 'hex') + cipher.final('hex');
return encrypted;
};
this.decrypt = function (encryptedKey) {
var decipher = this.crypto.createDecipher(this.algorithm, this.encryptionSecret);
var decrypted = decipher.update(encryptedKey, 'hex', 'utf8') + decipher.final('utf8');
return decrypted;
};
}代码;
是“什么”的常用方式?在您的源代码中存储密钥?这当然不是理想的,但你会发现密钥管理很困难,需要存储在某个地方,配置文件中,由一个帐户加密等。你的“保护”数据的技术似乎很薄弱(如研究已经表明,即使是半匿名数据也能识别患者,在这种情况下,您所做的只是加密引用,而不是数据)。 – WiredPrairie
首先,非常感谢您的回答@WiredPrairie!你有什么建议来改善安全性/数据的匿名化?如果保持数据本身加密并不是最好的方法,那么会有什么替代方案? – Alexander
感谢您的模块。工作得很好。人们可以通过构造函数传递秘密,使其更加灵活。 – Henry