Android已root设备下哈希数据的最佳存储方案
安卓端密码哈希值存储安全优化方案
- 优先采用Android Keystore加密存储哈希值
Android系统提供的Keystore机制会将加密密钥存储在独立于系统内核的可信执行环境(TEE)或安全元件(SE)中,即使设备被root,攻击者也无法导出Keystore内存储的密钥。你可以按以下流程处理:- 在Keystore中生成一个不可导出的AES密钥,可配置密钥使用条件(如需用户生物验证才可调用、仅允许当前应用访问)
- 用该AES密钥加密PBKDF2生成的密码哈希,加密后的密文可正常存储在SharedPreferences或本地数据库中,攻击者拿到密文也无法解密得到原始哈希
- 哈希值分片分散存储
将完整的密码哈希拆分为2-3个独立片段,分别存储在不同的存储路径下:比如一个片段存在应用私有目录的隐藏文件中,一个片段存储在SharedPreferences,最后一个片段可通过应用签名、设备硬件标识等固定信息派生得到无需落地存储。使用时只有将多个片段按规则拼接才能得到完整哈希,攻击者仅拿到部分片段无法还原有效内容。 - 强化哈希本身的抗破解能力
即使极端情况下哈希值泄露,也可以通过配置提升暴力破解成本:PBKDF2的迭代次数建议设置为100000次以上,搭配每个用户独立的随机盐值;也可以替换为抗GPU/ASIC破解能力更强的Argon2算法,进一步提升哈希被破解的门槛。 - 补充root设备运行限制
可在应用内增加root状态检测逻辑,检测到设备已被root时,禁止用户使用本地自主设置密码的功能,强制切换为系统账户认证或生物认证方式,从场景上规避敏感数据泄露风险。
内容的提问来源于stack exchange,提问作者Drogheda
相关产品推荐
相关产品推荐

