我正在构建一个应用程序,它将使用 AES/CBC/PKCS5Padding 方法来加密用户设备上的数据,安全性非常重要。我想防止暴力攻击,以防有人掌握数据库。
表中的每一行都有一个关联的标题。我不知道用什么作为种子。我可以执行以下操作之一:
在源代码中硬编码我自己的种子,但我相信如果有人反编译我的应用程序,可以阅读
使用用户输入的标题作为种子
使用我自己的种子和输入的标题的串联
除非有其他方法,否则在上述所有场景中,我可以想象有人找出种子。这对他们能够暴力破解加密数据有用吗?当然,在上述所有场景中,我还将用户密码作为密钥的一部分。
我怎样才能让潜在的黑客变得更加困难?
编辑(重新编辑)
基于以下回复以及我的研究和思考过程。我想我可以做到以下几点。
- 让用户输入密码,但不将其存储在数据库中
- 在存储敏感数据之前,他们必须输入一个标签来识别它。我会将其作为明文存储在数据库中并将其用作盐
- 我将使用用户的密码和带有 PBKDF2 的标签来生成密钥,但不会存储它
- 我将使用 #3 生成的密钥来加密敏感数据
- 为了解密,我将再次根据用户的密码和行标签生成密钥,并使用它来解密敏感数据
这听起来对吗?如果黑客通过两列(标签明文和加密数据)掌握数据库,他们是否能够推断出任何东西?
编辑 2
我正计划构建一个具体的 Android 应用程序,以下链接非常符合我的需要。
https://nelenkov.blogspot.in/2012/04/using-password-based-encryption-on.html?m=1
https://android-developers.googleblog.com/2013/02/using-cryptography-to-store-credentials.html?m=1