android开发如何保障本地加密密钥的安全?

首先要明白本地加密密钥是用来加密什么内容的,重要程度是什么样的。
其次评估密钥被逆向出来会造成什么风险。
最后分析下密钥存储的问题,有以下方法:
1、密钥直接明文存在sharedprefs文件中,这是最不安全的。
2、密钥直接硬编码在Java代码中,这很不安全,dex文件很容易被逆向成java代码。
3、将密钥分成不同的几段,有的存储在文件中、有的存储在代码中,最后将他们拼接起来,可以将整个操作写的很复杂,这因为还是在java层,逆向者只要花点时间,也很容易被逆向。
4、用ndk开发,将密钥放在so文件,加密解密操作都在so文件里,这从一定程度上提高了的安全性,挡住了一些逆向者,但是有经验的逆向者还是会使用IDA破解的。
5、在so文件中不存储密钥,so文件中对密钥进行加解密操作,将密钥加密后的密钥命名为其他普通文件,存放在assets目录下或者其他目录下,接着在so文件里面添加无关代码(花指令),虽然可以增加静态分析难度,但是可以使用动态调式的方法,追踪加密解密函数,也可以查找到密钥内容。

可以说在设备上安全存储密钥这个基本无解,只能选择增大逆向成本。而要是普通开发者的话,这需要耗费很大的心血,要评估你的app应用的重要程度来选择相应的技术方案。

第三方提供的加密工具:
阿里聚安全http://jaq.alibaba.com/
采用白盒加密技术,最新加密技术,使用复杂数学运算取代密钥,加解密过程更安全。
**白盒加密技术的核心思想是把秘钥隐藏起来, 加密执行过程中, 内存中不会出现秘钥的值. 现在通用的技术是查找表技术, 即把秘钥隐藏在查找表中。白盒加密的攻击需要从数学理论上去分析, 这无疑会极大增加破解难度。白盒加密的安全度目前来看是可以值得信任的, 当然这个世界上没有绝对的安全, 白盒加密也会被破, 就是攻击成本的问题啦. **

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值