即时通讯开发Android中密钥硬编码的风险

经常发现有开发者将密钥硬编码在Java代码、文件中,这样做会引起很大风险。

信息安全的基础在于密码学,而常用的密码学算法都是公开的,加密内容的保密依靠的是密钥的保密,密钥如果泄露,对于对称密码算法,根据用到的密钥算法和加密后的密文,很容易得到加密前的明文;对于非对称密码算法或者签名算法,根据密钥和要加密的明文,很容易获得计算出签名值,从而伪造签名。

密钥硬编码在代码中,而根据密钥的用途不同,这导致了不同的安全风险,有的导致加密数据被破解,数据不再保密,有的导致和服务器通信的加签被破解,引发各种血案,本文主要借用乌云上已公布的几个APP漏洞来讲讲这其中的潜在风险和危害。

总结下自己平时发现密钥硬编码的主要形式有:

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


保证密钥的安全确是件难事,涉及到密钥分发,存储,失效回收,APP防反编译和防调试,还有风险评估。可以说在设备上安全存储密钥这个基本无解,只能选择增大攻击者的逆向成本,让攻击者知难而退。而要是普通开发者的话,做妥善保护密钥这些事情这需要耗费很大的心血。

产品设计者或者开发者要明白自己的密钥是做什么用的,重要程度怎么样,密钥被逆向出来会造成什么风险,通过评估APP应用的重要程度来选择相应的技术方案。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android应用程序开发,将AES密钥存储在最安全的位置是使用Android Keystore系统。Android Keystore是一个安全的密钥存储系统,旨在保护应用程序的敏感信息,如加密密钥Android Keystore提供了一种将密钥存储在受硬件支持的安全环境的方法,例如可信执行环境(TEE)或安全元素(SE)。这些硬件环境提供了额外的安全性保障,可以防止敏感信息被恶意应用或恶意用户访问。 您可以使用Android Keystore生成并存储AES密钥。该密钥将被存储在设备上,并受到设备锁屏密码、指纹或面部识别等用户验证方式的保护。只有经过授权的应用程序才能访问和使用该密钥。 以下是使用Android Keystore存储AES密钥的基本步骤: 1. 生成AES密钥:使用KeyGenerator类生成一个AES密钥。 2. 创建KeyStore对象:使用KeyStore类创建一个KeyStore对象,并将其加载到Android Keystore。 3. 生成并存储密钥对:使用KeyPairGenerator类生成一个密钥对,并将其存储在KeyStore。 4. 使用密钥:通过KeyStore获取存储的AES密钥,并将其用于加密和解密操作。 请注意,尽管Android Keystore提供了较高的安全性,但也需要采取其他安全措施来确保密钥的安全性,例如限制对存储密钥的访问权限,并使用其他加密技术来保护敏感数据。 总而言之,将AES密钥存储在Android KeystoreAndroid应用程序开发最安全的方式之一。它提供了硬件级别的安全保障,并且仅允许经过授权的应用程序访问密钥

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值