首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android -在sqlite数据库中存储敏感数据。

Android -在sqlite数据库中存储敏感数据。
EN

Stack Overflow用户
提问于 2012-03-01 11:08:03
回答 3查看 7.8K关注 0票数 10

我需要将敏感数据存储在android应用程序中的sqlite数据库中。

我如何确定这些数据是非常安全的?我知道我可以用密钥加密数据,但是我把密钥存储在哪里呢?我也不想让用户填写一个密钥,我只想让它自己工作。因为我害怕逆向工程,所以我也不想在代码中放置加密密钥。

我发现了SQLCipher的事。它说这是加密数据库中数据的一种非常安全的方法,但为什么是这样呢?我不也需要一个钥匙来解锁那个信息吗?或者,这真的是确保数据安全的完美方法吗?

如果不是,那么在sqlite数据库中存储敏感数据的(几乎)可靠的方法是什么呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-01 11:20:53

对称加密需要密钥进行加密,而解密则需要相同的密钥。这是无法避免的。

不要将密钥存储在代码中,因为它可以被解压缩(正如您已经说过的)。

在第一次使用时向用户询问密码,并使用PBKDF2派生用于加密的加密安全密钥。

要么用户必须输入密码,要么您需要将其存储在内存中。我要做的是,要求用户指定将密钥缓存在内存中用于解密的持续时间。

如果持续时间已过期,用户将不得不再次输入密码。

我没有彻底检查SQLCipher,但它说它使用的是AES-256。AES是一种对称密码算法,它需要加密密钥和解密密钥。

票数 9
EN

Stack Overflow用户

发布于 2012-03-01 13:18:11

你说..。

我也不想让用户填写一个密钥,我只想让它自己工作。因为我害怕逆向工程,所以我也不想在代码中放置加密密钥。

不幸的是,你需要做这些事情之一(嗯,可能)。您可以向用户询问密码,然后使用为此目的设计的算法(称为基于密码的加密( PBE )和Android包含一些优秀的PBE算法标准)从密码中获得密钥。您可以将密钥存储在代码中,或者将其作为APK中的资源存储,但随后会有人将其反向工程。您可以这样做,并混淆您的代码,这将减慢反向工程过程,但您不能使它不可能(您的代码将需要确定关键在某个时刻,所以这只是一个攻击者知道它是如何做的问题)。

这里尝试过的其他方法包括:迫使客户端返回到服务器以通过network...but检索密钥,如果网络连接被中断会发生什么,以及是什么阻止服务器将密钥分发给任何人,比如攻击者?那么,您可以使用相互验证的SSL来确保只允许您的客户端获得it...but,然后您需要存储客户端SSL私有key...which与您现在遇到的问题完全相同。:)

So...the的底线是,您需要一个密钥(或类似的东西)来加密/解密数据。你可以储存它,使它更难让人反向工程它。您可以给用户带来不便,并让他们输入密码。But...you不知何故需要这种秘密知识。

票数 12
EN

Stack Overflow用户

发布于 2014-08-10 07:02:36

有可能让应用程序自动生成一个随机密码吗?可能来自地点,时间或其他信息,这将不需要询问用户的通行证。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9515057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档