Rob*_*yle 17 python security google-app-engine rsa sha
我们的谷歌应用引擎应用程序存储了大量的个人识别信息(电子邮件,ssn等)来识别用户.我正在寻找有关如何保护这些数据的建议.
将敏感数据存储为两种形式:
当我们需要做仰视时:
如果我们需要重新散列数据或以原始形式处理它:
保持哈希盐的秘密
如果攻击者获得数据存储区中的数据,以及我们的哈希盐,我担心他们可能会强行攻击敏感数据.其中一些(如SSN,一个9位数字)没有大的密钥空间,所以即使使用现代哈希算法,我相信如果攻击者知道盐就可以完成.
我目前的想法是将盐保持在源代码控制之外并保存在自己的文件中.该文件在部署期间加载到GAE,应用程序在需要散列传入数据时读取该文件.
在部署之间,salt文件存在于受愤怒的熊(或保险箱)保护的USB密钥上.
盐只生活在两个地方
并且在永久禁用代码下载的情况下,我无法想到有人在不偷取USB密钥的情况下获取盐的方法.我错过了什么吗?
保密我们的私人RSA密钥
不那么担心这个.我们很少需要解密加密版本(仅当我们更改哈希算法或数据格式时).
私钥永远不必触及GAE服务器,我们可以下载加密数据,在本地解密,处理它,并重新上传加密/散列版本.
我们可以将我们的RSA私钥保存在由熊和老虎守卫的USB记忆棒上,并且只在我们需要它时将它带出来.
我意识到这个问题并不完全是谷歌应用程序,但我认为GAE使情况有点独特.
如果我有完全控制权,我会做一些事情,例如锁定部署访问权限和使用双因素身份验证访问数据存储区查看器,但这些选项目前不可用(拥有GAE特定密码是好的,但我喜欢涉及RSA令牌).
我也不是GAE专家,也不是安全专家,所以如果我有一个漏洞,或者我想不出具体的平台,我很乐意听到.
Nic*_*son 11
在决定安全架构时,您头脑中的第一件事应该始终是威胁模型.谁是你的潜在攻击者,他们的能力是什么,你如何防御他们?如果不清楚您的威胁模型,您就无法评估您提出的安全措施是否足够,或者即使它们是必要的.
从你的文字,我猜你正在寻求保护以防止以下某些子集:
对于前者,加密或散列数据存储数据可能就足够了(但请参阅本答案后面的注意事项).保护后者更加困难,但只要您的管理员用户无法部署新的应用程序版本就无法执行任意代码,将密钥存储在未检入源代码管理的模块中,如您所示,应该可以正常工作因为即使使用管理员访问权限,他们也无法恢复密钥,也无法部署显示密钥的新版本.显然,请确保禁用源代码下载.
你正确地注意到有关使用有限数量的熵对数据进行散列的一些顾虑 - 你是对的.在某种程度上,盐可以通过防止预计算攻击来帮助解决这个问题,而关键拉伸,例如PBKDF2,scrypt和bcrypt中使用的,可以通过增加他们必须做的工作量来使攻击者的生活更加艰难.但是,对于像SSN这样的东西,你的密钥空间非常小,以至于没有任何密钥扩展会有所帮助 - 如果你对数据进行散列,并且攻击者获得了散列,他们将能够确定原始的SSN.
在这种情况下,您唯一可行的方法是使用密钥加密数据.现在,你的攻击者被迫暴力破解密钥以获取数据,这是一个难以达到数量级的挑战.
简而言之,我的建议是使用标准(私钥)密码加密您的数据,密钥存储在不受源代码控制的模块中.使用散列代替只会削弱您的数据,而使用公钥加密并不能提供明显的安全性,以防止您使用标准密码时尚未拥有的任何合理的威胁模型.
当然,保护用户数据的首要方法是,如果可以的话,不要将其存储在第一位.:)
| 归档时间: |
|
| 查看次数: |
3703 次 |
| 最近记录: |