Android App数据加密

Android App数据加密

一、App数据加密概述:

App数据加密从哪些方面去考虑呢?以及为什么要加密呢?

1.1、网络传输加密

网络传输是不安全的,基于http 协议传输的内容是很容易被抓包提取数据。

1.2、跨进程intent 携带的数据加密

跨进程的传递的intent的数据,也是不安全的。比如sendBroadcast广播,携带的数据都是不安全的。

1.3、SharedPreference加密

SharedPreference存储起来其实就是一个xml文件,虽然默认或可设置Mode为Private,但基于沙箱保护的文件,虽然手机被root过了,是可以拿到的。也是不安全的。需要对文件内容进行加密。

1.4、Sqlite数据库加密

SQLite数据库与SharedPreference类似是被以.db的文件存储起来的。若被root后,也是很容易的被拿到的。

1.5、普通文件File加密

普通文件的存储要不放在App内存(此处内存指放在/data/data/app包名/xxx下)要不放在SDCard,放在SDCard不需root也可以拿到。放在App内存若被root当然也不安全了。

1.6、程序中加密的需求

SDK插件或AIDL组件提供给第三方app数据,组件或插件提供的数据不做处理也是不安全的。若攻击者下载SDK或接AIDL组件规范的调用,可以直接获取相关的数据值。


二、App数据加密方法

说到加密不得不提到加密方式及加密算法,加密方式上:一般有对称加密与非对称加密。这两者的区别是看是否使用同一个密钥。加密算法上,主要有DES、3DES、AES、RSA等。

2.1、网络传输加密

一般是使用https ssl协议,通过CA证书或自签名证书进行认证验证。若是CA认证的证书基本上是不用做处理,google默认实现的htttspurlconnection通过查找操作系统默认信任的证书即可达到验证信任的过程。当然若想更安全点的做法是 SSL pinning 限定受信SSL的范围。通过只信任你所访问的服务端所使用CA厂商颁布的CA证书链。
当然若使用是自签名的证书,首先需要生成服务端的公私钥证书,然后把证书添加到truststore中,在程序把truststore加载到app中去。实现X509TrustManager使用加载到app中的公钥对服务端做checkServerTrusted认证。最后使用https协议传输数据时,就都是加密后的数据了。
关于https ssl加密的过程可以通过下面的图来理解:
https ssl加密会话过程
整个过程使用非对称与对称加密,由于非对称加密性能比较低,只在第一握手时,如步骤2中,服务端响应传公钥证书给客户端后,客户端做公钥证书做验证。验证通过后将产生随机数,使用公钥加密随机数传给服务端。最后客户端与服务端都使用此随机数进行对称加密了。

2.2、跨进程intent 携带的数据加密

一般使用对称加密方式即可,比如通过AES加密,可以使用特定的Seed 生成256的密钥然后进行加密。解密的进程使用同一个Seed生成密钥然后进行解密数据。

2.3、SharedPreference加密

一般也是使用对称加密方式用AES,这里可以使用更安全的AES/CBC/PKCS5Padding方式,使用特定的随机的盐salt与初始化向量IV。不过这个盐与初始化向量都需要存储起来,保证解密也是使用它们来生成密钥与解密。
一种开源项目Secure-Preference对SharedPreference进行了封装,并实现了SharedPreferences接口,内部实现会使用AES对称加密对键Key与值Value都进行加密,加密后再进行base64写入到XML文件中。
Secure-Preference下载地址:https://github.com/scottyab/secure-preferences
另一个开源项目是cwac-prefs,也实现了对sharedpreferences接口并加密。不得不说老外这块就是走到国内前面啊…

2.4、Sqlite数据库加密

基本的原理与SharedPreference加密是相类似的,也是通过使用AES加密。若自己的实现的话,一般只对表中的值进行AES加密,由于有了数据库那么密钥生成的规则及加密规则可以自己玩,比如随机生成salt或iv,自己维护一个salt、iv表。这样可以达到每次插入的数据,加密的规则都是不一样的。(salt、iv不一样,表中插入一条salt iv表的id)
当然加密版Sqlite数据库也是有优秀的开源项目,SQLCipher是实现安全数据库存储的最简单方式之一,兼容Android 2.1+设置,这个当然没什么问题了吧。目前根据友盟的数据统计 2.3以下的活跃设备都只有4%以下了。且它使用的是256位的AES加密算法,对数据库中的每一页以CBC模式进行加密。当然也有一个小缺点,就是加入想着的依赖库了会使APK大上7M左右,这个也可能是它的唯一的缺点吧。
Android 版SQLCipher下载地址:https://github.com/sqlcipher/android-database-sqlcipher

2.5、普通文件File加密

文件的加密,个人理解,可以借鉴压缩算法,既可以减少文件存储占用的空间大小又可以实现加密安全。当然安全压缩的算法得达到一定的安全性。一般来说压缩其实类似proguard混淆,通过将相同数据片段,以一个简洁数据替换,并维护原始数据片段与简洁数据的表。当然这种加密方式不是特别安全。
没错你猜对了,文件加密也是有优势开源的项目。IOCipher,看名字大概猜出来这货是实现了java.io API了。这意味着你基本上不用怎么改代码了,直接把原来import java.io.xxx的改成import info.guardianproject.iocipher.xxx就可以了。
IOCipher其实是SQLCipher的兄弟,它们同属于Guardian项目。它使用程序猿员透明的进行加解密文件。Oh,my god,不得不赞下,好强大啊。
IOCipher 下载地址:https://github.com/guardianproject/iocipher

2.6、程序中加密的需求

很类似与跨进程intent 携带的数据加密。若你开的程序需要给三方app,提供相应的数据,是通过AIDL或Messager等IPC形式,又或者是提供了SDK组件,向三方app提供数据时,最好通过AES加密。加密与解密的使用的随机Seed或Salt iv需要统一约定好。使用同一套即可。

Secure-Preference下载地址:https://github.com/scottyab/secure-preferences

Android 版SQLCipher下载地址:https://github.com/sqlcipher/android-database-sqlcipher

IOCipher 下载地址:https://github.com/guardianproject/iocipher


ps:转载 请注明出处:http://blog.csdn.net/chenshufei2/article/details/48263823 谢谢。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Android app渗透测试是一种评估应用程序安全性的方法。以下是一些常用的Android app渗透测试方法: 1. 静态分析:通过检查应用程序的代码和资源文件,检查是否存在可能的安全漏洞,如弱密码、硬编码凭据等。 2. 动态分析:通过运行应用程序并监视其行为来检测潜在的安全风险,如未经授权的数据访问、隐私泄露等。 3. 安全配置审计:审查应用程序的安全配置,如SSL证书验证、数据加密等,以确保安全配置符合最佳实践。 4. 绕过认证:尝试绕过应用程序的身份验证机制,如用户名/密码验证、令牌验证等。 5. URL操纵:检查应用程序对URL的处理,尝试利用URL跳转漏洞,发现任意重定向漏洞等。 6. 数据存储审计:评估应用程序的数据存储和传输机制,检查是否存在数据泄露、未加密数据等问题。 7. API测试:检查应用程序的API调用,确定是否存在敏感函数、未受限制的接口等。 8. 代码审查:仔细检查应用程序的源代码,检查是否存在安全漏洞,如XSS、SQL注入等。 9. 弱密码测试:尝试推导或猜测用户的密码,以评估应用程序对弱密码的防御能力。 10. 社会工程学测试:尝试通过社交工程技术获取用户敏感信息,评估应用程序的安全意识和对恶意用户的防护能力。 综上所述,这些方法可以帮助评估Android应用程序的安全性,并发现潜在的安全风险和漏洞。然后可以采取相应的措施来修复这些漏洞,保护用户数据安全。 ### 回答2: Android App渗透测试是一种评估应用程序安全性的方法,以发现其中存在的漏洞和潜在风险。这些测试可以帮助开发人员和安全团队改进应用程序的安全性,并保护用户的数据不受到攻击。以下是Android App渗透测试的一些常用方法。 1. 静态分析:通过逆向应用程序代码并检查其结构和逻辑,以发现可能存在的漏洞。这可以通过反编译和检查应用程序的代码、资源、配置文件等来实现。 2. 动态分析:通过模拟用户输入和交互行为,以对应用程序进行测试。这可以通过模拟攻击、针对应用程序网络通信进行监视、检查应用程序运行时的行为等来实现。 3. 数据传输和存储测试:检查应用程序在数据传输和存储过程中是否存在安全漏洞。这包括SSL/TLS证书验证、数据加密和解密、数据存储的安全性等方面的测试。 4. 授权和身份验证测试:检查应用程序对用户身份验证和授权的实施方式。这包括检查应用程序是否正确处理登录、注册和密码重置等功能,并验证应用程序在访问敏感数据时是否正确进行授权。 5. 网络安全测试:通过分析应用程序的网络交互方式,发现可能存在的网络攻击面。这包括检查应用程序的网络通信是否受到中间人攻击、拦截和劫持等方面的测试。 6. 权限测试:检查应用程序所请求的权限是否与其功能和行为相符,并验证应用程序在获得权限后是否正确使用这些权限。 7. 安全配置测试:检查应用程序的安全配置和设置是否正确,例如是否启用了调试模式、是否有敏感信息泄露的风险等。 8. 前端和后端安全测试:检查应用程序的前端和后端代码和配置的安全性,包括用户输入验证、服务器端漏洞等方面的测试。 这些方法可以被组合使用,以形成全面的Android App渗透测试计划。测试人员应根据具体的应用程序特点和需求来选择适合的测试方法,以确保应用程序的安全性和用户数据的保护。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值