如何在Android中保护我的加密密钥?

Sye*_*qvi 7 android public-key-encryption sqlcipher-android

SQLCipher在我的Android应用程序中实现了它的数据库安全性.SQLCipher需要一个密钥来加密数据库文件.我面临的问题是密钥保护,如果我的应用程序在root设备上使用或者是逆向工程,那么我的密钥将被公开并且数据库可以被解密.

请注意,每次用户打开密码时我的应用程序都不会要求输入密码,因此用户输入的密码不能用作密钥.我想实现像facebook,whatsapp应用程序这样的行为,它使用私钥/密钥加密数据而不需要任何密码并让用户始终保持登录状态.这些应用程序在何处以及如何存储密钥?

请建议一个能够保护密钥的解决方案/算法.此外,Android OS是否提供任何此类功能以进行数据保护/管理?

Tal*_*lha 6

您可以使用Andriod Keystore加密您的SQLCipher密码.

我之前遇到过同样的问题,其中SQLCipher用于保护数据,但密码本身却没有.这允许一个安全漏洞,一个简单的反编译将显示密码,因为它是字符串常量的形式.

我的解决方案是:

  • 当app首先启动时生成一个随机数.(您可以根据自己的需要更改此行为)
  • 使用Android Keystore加密此号码.
  • 数字的原始形式一旦加密就消失了.
  • 在Prefs中保存.
  • 现在,只要SQLCipher需要密码,它就会解密并使用它.
  • 由于Android Keystore在运行时提供密钥,并且密钥严格依赖于应用程序,因此很难破坏此数据库.
  • 虽然一切都可以破解,但这种方法会让攻击者更难从DB或DB密码中检索数据.

这是我制作的一个示例项目,它还有一个与您相同的SQLCipher用例.

用于加密密码的加密助手

SQLCipher的用例

请注意,在上面的讨论中,您用作加密密钥的术语将用作DB的密码/编号.