安全保存帐户余额数据

时间:2015-04-17 19:58:34

标签: database security encryption hash

我正在开发一个应用程序,它目前只能在客户端上运行,而不会在服务器上保存数据。我想要改变但我已经意识到需要保存的数据非常敏感。与银行账户余额一样。

有没有办法安全地保存这样的数据?我是指数字数据。我还需要使用这些数据来计算其他一些东西。

这是什么常规方法?

3 个答案:

答案 0 :(得分:0)

使用对称密钥加密(使用AES)加密数据并将密文保存到磁盘。如果服务器受到攻击并且数据被盗,这将有所帮助。但是,数据以明文形式提供给服务器端应用程序,因此任何有权访问服务器的人(肯定是在服务器上具有管理员权限的任何人)都可能看到数据。因此服务器的物理安全性也是至关重要的。

答案 1 :(得分:0)

哎呀......这很棘手,你必须用AES-256加密这样的数据来加密这些数据。这当然将包括可能对用户造成潜在安全风险的所有数据字段,例如:密码,电子邮件,名称等。

要输入此数据,您必须确保使用会话安全登录进行SSL传输,以防止cookie的副本。这正是我能想到的最重要的事情。

您最好获得某种经过验证的经过测试的第三方软件。

答案 2 :(得分:0)

存储此类数据的最佳方法是在将用户密码上传到服务器之前使用用户密码对其进行加密。这样,您的服务器无法访问数据,只能将其发送回客户端进行解密。这意味着服务器上不会进行任何计算;他们都需要在客户端上发生。

任何允许服务器直接访问数据的方案都意味着有权访问服务器的任何人(无论是因为他们是被授权还是因为他们已经入侵)都可以访问数据。避免这种情况的最佳方法是避免直接访问数据。

考虑到存储少量数字的目标,我可能会采用这种方法来攻击它以平衡复杂性和性能以及良好的安全性。

  • 制作一个"全局前缀"为您的应用程序(如" net.robnapier.thisparticularapp")。
  • 生成每用户"盐"前缀+用户名
  • 使用PBKDF2从salt和用户密码生成主密钥。
  • 对于您要加密的每个字段,请为该字段命名。
  • 要获取每字段加密密钥,请应用HMAC(master,keyname)生成新的256位密钥。
  • 使用该密钥加密AES-256-CBC字段:
    • 选择一个随机的8字节IV(初始化向量)
    • 使用AES加密(字段键,IV,数据)
    • 以IV +加密存储(所以总共16个字节来存储8个字节的数据)

要解密,您可以使用PBKDF2重新创建密钥,从字段开头读取IV,然后解密其余部分。

有比CBC更好的加密模式,但它无处不在,并且可能对这个应用程序来说足够好。 CBC的缺点是,如果有人修改了数据库中的数据,可能很难检测到,并且用户可能会得到错误的结果。有几种方法可以解决这个问题,但这种情况听起来并不像数据完整性是主要问题。 (如果是,请查看HMAC + CBC或"经过身份验证的分组密码模式"而不是CBC。)