如何安全有效地将SSN存储在数据库中?

时间:2017-01-11 19:35:11

标签: python sql security hash

我的主要问题是,我想检查具有相同SSN的人是否有多个帐户。目前,所有个人身份信息都经过加密,解密需要花费大量时间。

我最初的想法是将ssn列添加到数据库中的用户列。然后我可以简单地进行一个查询,在那里我让所有用户都使用ssn或用户A.

我不想将ssn以明文形式存储在数据库中。我想的只是腌制和以某种方式散列它。

我的主要问题是,这是安全的(或者它有多安全)?有什么简单的方法可以使用python进行salt和hash或加密和ssn?

编辑:不需要显示SSN。

这是使用MySQL数据库。

3 个答案:

答案 0 :(得分:3)

不要加密SSN,当攻击者获得数据库时,他也会获得加密密钥。

仅仅使用哈希函数是不够的,只添加一个盐对提高安全性没什么作用。

基本上在与密码相同的mannor中处理SSN。

相反,使用随机盐对HMAC进行大约100毫秒的持续时间并使用哈希值保存盐。使用PBKDF2(又名Rfc2898DeriveBytes),password_hash / password_verifyBcrypt等功能以及类似功能。关键是要让攻击者花费大量时间通过暴力查找密码。保护您的用户非常重要,请使用安全密码方法。

答案 1 :(得分:1)

根据@zaph的建议。我决定使用PBKDF2。然后我可以创建一个BIT列并将其编入索引。

我的简单散列看起来像

 Lead.find({ownerId:owner._id}, function(err, data){
            if(err){res.json(err)}
              else{
                  var fields = ['lead', 'salutation', 'fname','lname','title','email','mobile','rating','address','city','state','zcode','company','industry','empSize','lsource'];
                  var csv = json2csv({ data: data, fields: fields });
                  var path='./public/csv/file'+Date.now()+'.csv'; 
                   fs.writeFile(path, csv, function(err,data) {
                    if (err) {throw err;}
                    else{ 
                      res.download(path); // This is what you need
                    }
                }); 
              }

          });

答案 2 :(得分:-1)

如果您需要显示这些SSN,您的问题并不清楚。我假设你不这样做。将SSN存储在SHA2哈希中。然后,您可以执行SQL查询以搜索这些散列值。仅存储加密显示的最后4位数字。