zoukankan      html  css  js  c++  java
  • 论文相关笔记3

    三、Android安全保护机制及解密方法研究(2013《技术研究》)

    1.Android设备安全机制

    从用户界面看,Android的安全保护机制主要体现为对于用户界面的访问控制的保护,比如在设备空闲时,用户可以锁定设备,并设置解锁口令,从而防止未授权的其他用户打开设备。

    在Android设备上,常用的屏幕锁定方式包含以下几种:

    此外,新版的Android操作系统还加入了与苹果iOS类似的文件系统加密机制。

    2.Android图案锁定原理及解密

    (1)加密

    在Android设备上,用户可以通过设置锁定图案作为密码对设备用户界面进行锁定。

    Android设备的锁定界面有9点组成,锁定图案需满足三个条件:至少3点、最多9点、无重复。这种解锁方式在Android存储时使用的是明文转换后采用散列方式存储。

    Android设备图案锁定的加密存储过程:图案输入——>转换明文——>SHA-1散列——>存储

    (a)用户输入图案。

    (b)图案转换为明文,从左上角起编号为00,至右下角止编号为08,例如Z字形转换后为00-01-02-04-06-07-08。

    (c)将十六进制字符串00010204060708使用SHA-1进行散列计算,得到散列值。

    (d)将散列值存储在Android设备~/data/system/gesture.key文件中。

    至此,可以看出Android设备锁定图案的实质是6位数字到18位数字,且各单数位数字为零,双数位数字不重复地排列,并将这个排列进行单次SHA-1计算。

    通过数学计算,由于单数位确定,双数位不重复,则,根据Android图案锁定规则可以设置的锁定图案总数为986328个,其密码容量甚至小于6位纯数字密码,所以其密码复杂度不高,破解相对容易。

    (2)解密

    针对图形锁定,可以采用预计算密码表方式进行暴力破解,在得到图案存储文件gesture.key的基础上(需要具有root权限),使用月50MB的密码表在1秒内即可完成所有图形锁定的破解。

    3.Android字符密码加密原理及破解

    (1)加密

    除了采用图形设定设备之外,Android还允许用户使用4-16位的数字PIN码或者文本字符作为锁定密码。每一位密码范围为94字符,包括52个大小写英文字母+10个数字+30个除空格外的标点符号,在这种要求下输入的字符,加入Salt后进行SHA-1和MD5散列,之后,将散列结果存储于~/data/system/password.key文件中。

    Android设备字符密码加密过程:字符输入——>加入Salt——>SHA-1+MD5散列——>合并散列存储

    在Android的源代码中可了解其字符密码加密过程的实现方式(com/android/internal/widget/LockPatternUtils.java)。

    若用户设置了4位密码,密码容量为78074896(94^4);当设置了16位密码时,密码容量就很大了。

    由此可以看出,Android设备上字符型密码锁定设备的密码强度相当高。

    (2)解密

    由于在SHA-1前先被加入了Salt值,所以暴力破解或预计算密码表的方式需提供Salt值。在Android操作系统中,字符型密码使用到的Salt值存储于手机设备的settings.db数据库中,该文件位于~/data/data/com.android.providers.settings/,该数据库中的secure表,存储了字符密码加密使用的Salt。同时,解密还需password.key文件中所包含的散列值,该文件存储于~/data/system/password.key。在该key文件中,包含了72字节的16进制字符串。

    在得到password值与Salt之后,同样可以采用暴力破解方式对Android设备的字符型密码进行攻击(需要用到一些暴力破解工具)。

    4.Android面部识别的破解

    面部识别并不完全可靠和准确,并且缺乏真人判断机制,恶意用户可以用照片绕过验证。

    5.Android存储加密

    除了屏幕锁定,新版Android操作系统还支持Android设备内置存储空间进行加密,这种加密方式基于dmcrypt,运行于block device层,这样的加密默认只能对ext4分区进行,所以在Android3.0及以上的版本中财提供这种功能,存储加密要求首先设置至少6位且包含至少1位数字的字符型密码。

    在Android存储加密中,主密钥采用AES 128位加密,主密钥在加入Salt值之后被存储于分区尾部或独立的文件中。

    存储解密时,首先需要将Android设备进行完整的物理转储(可采用JTAG等方式),之后从分区尾部查找Salt值及加密后的主密钥,使用带Salt的PBKDF暴力破解的方式对密码进行测试,使用得出的密钥与SHA-256计算后的VI对主密钥进行解密,之后可使用真正主密钥对完整镜像进行解密。

    6.总结

    分析的是Android2.3.5,就了解下理论知识。

  • 相关阅读:
    阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第2节 线程实现方式_5_主线程
    阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第2节 线程实现方式_4_线程调度
    阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第2节 线程实现方式_3_线程概念
    阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第2节 线程实现方式_2_进程概念
    阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第2节 线程实现方式_1_并发与并行
    阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第1节 异常_14_自定义异常类的练习
    阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第1节 异常_13_自定义异常类
    阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第1节 异常_12_异常注意事项_子父类异常
    阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第1节 异常_10_异常注意事项_多异常的捕获处理
    阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第1节 异常_9_finally代码块
  • 原文地址:https://www.cnblogs.com/whp2011/p/4238927.html
Copyright © 2011-2022 走看看