我正在开发一个使用Couchbase-Lite (1.1.0)的Android项目,并且要求所有数据(文档本身和任何Couchbase附件)在存储之前都是加密的。
我最初设想使用像SQLCipher这样的方法加密整个数据库文件,但是我还没有找到一个简单的实现(我知道iOS的Couchbase-Lite实现使用了这种方法,但Android的构建有点落后),所以我的计划是在将文档( JSON表示)和附件(流)加密之前,将它们保存到Couchbase-Lite数据库中。
我的问题是:这种加密的建议是什么?什么方法/图书馆?我假设AES-256,但我应该自己构建它还是使用第三方库(任何建议)?
在设备中维护密码比在应用程序中硬编码更安全的最佳方法是什么(这真的非常糟糕)?
有没有人看到过类似的东西(我的googling能力让我感到兴奋和枯燥),它能让我找到类似的用例?
谢谢!
发布于 2015-07-02 22:41:44
使用现有的AES库。或者使用CBC模式与HMAC一起检查真实性,或者使用GCM这样的自我检查模式。并不是所有的库都有GCM,因为它是最近的。
把密码写在一张纸上,放在一个锁着的抽屉里。这是不可阻挡的。需要时输入。使用完毕后,立即清除内存。或者,把它放在记忆棒上,把它锁在抽屉里。您仍然需要清除内存。有规律地改变密码。是的,这确实意味着用旧密钥解密整个数据库,用新密钥重新加密。在你的每日/每周/每月/任何日程安排中留出时间来做这件事。就在后援做好之前。将旧密码保持在离线状态下,可能在一个保险箱中,以防您需要重新派生密钥以恢复旧备份。
看看一个很好的密钥派生函数,比如HKDF (来自RFC 5869),从您的密码中派生出实际的密钥。
这是密码,而且很复杂。这一切都已经做过,所以你需要坚持尝试和测试的方法。
https://stackoverflow.com/questions/31195649
复制相似问题