【发布时间】:2015-06-24 20:14:41
【问题描述】:
我正在开发一个应用程序,该应用程序目前只能在客户端上运行,而没有数据保存在服务器上。我希望改变这种情况,但我开始意识到需要保存的数据非常敏感。就像银行账户余额一样。
有没有办法像这样安全地保存数据?我的意思是数字数据。我还需要使用这些数据来计算其他一些东西。
这种情况的正常方法是什么?
【问题讨论】:
标签: database security encryption hash
我正在开发一个应用程序,该应用程序目前只能在客户端上运行,而没有数据保存在服务器上。我希望改变这种情况,但我开始意识到需要保存的数据非常敏感。就像银行账户余额一样。
有没有办法像这样安全地保存数据?我的意思是数字数据。我还需要使用这些数据来计算其他一些东西。
这种情况的正常方法是什么?
【问题讨论】:
标签: database security encryption hash
存储此类数据的最佳方式是在将其上传到服务器之前使用用户密码对其进行加密。这样,您的服务器就无法访问数据,只能将其发送回客户端进行解密。这意味着服务器上不能进行任何计算;它们都需要在客户端发生。
任何允许您的服务器直接访问数据的方案都意味着有权访问服务器的任何人(无论是因为他们被授权,还是因为他们已经闯入)都可以访问数据。避免这种情况的最佳方法是避免直接访问数据。
鉴于存储少量数字的目标,我可能会采用一种方法来平衡复杂性和性能以及良好的安全性。
要解密,您使用 PBKDF2 重新创建密钥,从字段开头读取 IV,然后解密其余部分。
有比 CBC 更好的加密模式,但它无处不在,并且对于这个应用程序来说可能已经足够好了。 CBC 的缺点是,如果有人修改了数据库中的数据,可能很难检测到,并且用户可能会得到错误的结果。有几种方法可以解决这个问题,但这种情况听起来不像数据完整性是主要问题。 (如果是,请查看 HMAC+CBC 或“经过身份验证的分组密码模式”而不是 CBC。)
【讨论】:
使用对称密钥加密(使用 AES)加密数据并将密文保存到磁盘。如果服务器受到威胁并且数据被盗,这会有所帮助。但是,数据以明文形式提供给服务器端应用程序,因此有权访问服务器的任何人(绝对是在服务器上具有管理员权限的任何人)都可能看到数据。因此,服务器的物理安全也至关重要。
【讨论】:
哎呀...这很棘手,您必须以 AES-256 加密之类的方式加密这些数据。当然,这将包括所有可能对用户构成潜在安全风险的数据字段,例如:密码、电子邮件、姓名等。
要输入此数据,您必须确保使用会话安全登录进行 SSL 传输,以防止 cookie 复制。这只是我能想到的。
购买一些经过验证的第三方软件会更好。
【讨论】: