【发布时间】:2013-08-07 15:02:24
【问题描述】:
我目前正在开发一个允许用户保存敏感日期的应用程序。由于它是一个 Web 应用程序,我们使用 NodeJS 和 MongoDB 进行持久化。 (顺便说一句,我对 Node 和 NoSQL 完全陌生)
我们确实有可以存储某种病史的用户。姓名和电子邮件存储在用户文档中,而其他内容存储在配置文件中。
为了提高安全性,我想encrypt 用户对其个人资料的引用,反之亦然。
目前我正在使用NodeJS 的Crypto 库来加密(AES256)用户配置文件中的user_id 引用。因此,引用不再是 ObjectID 的类型,而是字符串
因此,通过直接查看数据库,无法检查哪个配置文件属于哪个用户。 encrypt 和 decrypt 的用户 ID 的密钥存储在 NodeJS 服务器的 js 文件中的某个位置。
这是一种常见/好方法还是我做错了什么?有没有更好的方法——我读到 mongoDB 不支持任何“内置加密”
至少,这里是加密/解密的代码
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 的回答!您对如何提高安全性/数据匿名化有什么建议吗?如果保持数据本身加密不是最好的方法,那么还有什么替代方法?
-
感谢您的模块。效果很好。可以通过构造函数传入秘密,使其更加灵活。
标签: node.js mongodb encryption sensitive-data