2013-08-06 45 views
4

我目前正在研究一个允许用户保存敏感日期的应用程序。由于它是一个Web应用程序,因此我们使用NodeJSMongoDB作为持久性。 (顺便说一下,我对Node和NoSQL是全新的)MongoDB和NodeJS中的敏感数据分隔 - 通过加密密钥引用

我们确实有可以存储某种病史的用户。姓名和电子邮件存储在用户文档中,而其他内容存储在配置文件中。 为了提高安全性,我想encrypt从用户引用他的个人资料,反之亦然。

目前我正在使用CryptoNodeJS在用户配置文件中加密(AES256)user_id引用。因此,该引用不再是ObjectID的一种类型,而是一个字符串

因此,通过直接查看数据库,不可能检查哪个配置文件属于哪个用户。 encryptdecrypt的密钥用户标识存储在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; 
    }; 

}代码;

+2

是“什么”的常用方式?在您的源代码中存储密钥?这当然不是理想的,但你会发现密钥管理很困难,需要存储在某个地方,配置文件中,由一个帐户加密等。你的“保护”数据的技术似乎很薄弱(如研究已经表明,即使是半匿名数据也能识别患者,在这种情况下,您所做的只是加密引用,而不是数据)。 – WiredPrairie

+0

首先,非常感谢您的回答@WiredPrairie!你有什么建议来改善安全性/数据的匿名化?如果保持数据本身加密并不是最好的方法,那么会有什么替代方案? – Alexander

+0

感谢您的模块。工作得很好。人们可以通过构造函数传递秘密,使其更加灵活。 – Henry

回答

4

让我们来看看你面临的风险:

  1. 黑客闯入你的服务器,并窃取了整个数据库。运气不好,在这种情况下,加密引用不会有太大帮助,因为黑客也可能访问密钥。即使您完全联合数据,例如到不同的数据中心,黑客只能获得数据的“匿名”部分,这些医疗记录可能包含名称,保险和/或其他识别数据。即使没有,有研究显示,这几乎是不可能的匿名数据(例如:匿名朋友图表,设备配置文件)

  2. 黑客黑客网站,并获得对数据的访问自己的账户外部。由于您的服务器必须能够处理去引用逻辑,并且必须能够访问两个数据存储以履行其职责,但这种方法根本不会增加安全性。但是,由于您使用的服务器技术对您来说是全新的,因此软件中存在安全漏洞的机率很高...

  3. 磁盘崩溃,您丢失部分数据或密钥在这种情况下,与没有加密引用的类似方案恢复相比,您需要做更多的工作。

使Web应用程序安全归结为一个和半可能性:要么通过使用安全编码标准,渗透测试,入侵防御,双因素认证等,使系统本身尽可能稳定等等和/或使用客户端加密。后者看起来像是终极武器,但充满了自身的危险。恐怕没有银弹[我能想到]。

1

我建议把你的encryptionSecret放在environment variable

+0

然后情况如何(在回答中提到)服务器被黑客入侵?环境变量很容易被访问(例如'printenv')。关键不安全。 – amlwwalker

+0

我想如果你的服务器被黑客攻击,那么你的运气不好。您的环境变量不仅易于访问,而且字面上应用程序可以访问的所有内容都可供黑客使用。 --- 我不认为让你的服务器被黑客攻击是人们抵御的一种常见情况。他们通常只是首先防御自己被黑客攻击,而不是黑客一旦进入黑客。 – Eric