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

前端之家收集整理的这篇文章主要介绍了如何在Android中保护我的加密密钥?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在我的 Android应用程序中实现了sqlCipher,使其数据库安全. sqlCipher需要一个密钥来加密数据库文件.我面临的问题是密钥保护,如果我的应用程序在root设备上使用或者是逆向工程,那么我的密钥将被公开并且数据库可以被解密.

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

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

解决方法

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

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

我的解决方案是:

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

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

Encryption Helper for Encrypting Passwords

Use case for SQLCipher

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

猜你在找的Android相关文章