Android安全开发之浅谈密钥硬编码
作者:伊樵、呆狐@阿里聚安全
1 简介
在阿里聚安全的漏洞扫描器中和人工APP安全审计中,经常发现有开发者将密钥硬编码在Java代码、文件中,这样做会引起很大风险。信息安全的基础在于密码学,而常用的密码学算法都是公开的,加密内容的保密依靠的是密钥的保密,密钥如果泄露,对于对称密码算法,根据用到的密钥算法和加密后的密文,很容易得到加密前的明文;对于非对称密码算法或者签名算法,根据密钥和要加密的明文,很容易获得计算出签名值,从而伪造签名。
2 风险案例
密钥硬编码在代码中,而根据密钥的用途不同,这导致了不同的安全风险,有的导致加密数据被破解,数据不再保密,有的导致和服务器通信的加签被破解,引发各种血案,以下借用乌云上已公布的几个APP漏洞来讲讲。
2.1 某互联网金融APP加密算法被破解导致敏感信息泄露
某P2P应用客户端,用来加密数据的DES算法的密钥硬编码在Java代码中,而DES算法是对称密码算法,既加密密钥和解密密钥相同。
反编译APP,发现DES算法:
发现DES算法的密钥,硬编码为“yrdAppKe”,用来加密手势密码:
将手势密码用DES加密后存放在本地LocusPassWordView.xml文件中:
知道了密文和加密算法以及密钥,通过解密操作,可以从文件中恢复出原始的手势密码。或者使用新的生成新的手势密码
而与服务器通信时接口中的Jason字段也用了DES算法和密钥硬编码为“yRdappKY”: