APP下载

安卓系统屏幕密码锁暴力破解的可行性分析

2014-12-18

衡水学院学报 2014年1期
关键词:密码锁明文密文

倪 超 凡

(福建师范大学福清分校 数学与计算机科学系,福建 福清 350300)

随着移动终端设备的发展,安卓系统已经成为了主流操作系统,被广泛应用于智能手机、平板电脑等移动终端设备上.而用户在使用这些移动终端设备时,对于隐私的保护也越来越重视,这就要求安卓系统有符合用户需求的安全机制.其中,安卓系统的屏幕密码是保护用户隐私的一个重要手段.安卓系统的屏幕密码的加密过程和其他的密码一样都要经过明文输入、明文加密、密文存储等几个步骤.那么加密后,屏幕密码的安全性如何?是否存在暴力破解的可行性?让我们先从屏幕密码锁的加密原理说起.

1 安卓系统屏幕密码锁介绍

用过安卓系统屏幕密码的人都知道,这种图形密码锁是类似于九宫格的9个点组成.在设置屏幕密码的时候,要求至少连接4个或4个以上,9个以下不重复的点.这些点及其连接的先后顺序就构成了一条带方向的路径,这条路径就是图案密码.按照这个规则,只要不经过重复点,路径的设置可以非常灵活,甚至可以交叉,但是却有一个例外:路径不允许跳过途中必须要经过的点.如图1中的路径一所示,如果从点3连接到点7,那么中间的点5会被自动地加进路径里.

但麻烦就麻烦在,这个规则本身也有一个值得注意的地方,如图2所示:如果中间的点5是之前已经用过的,那么这个点就可以被跳过去了.也就是这个路径是由点3,点5,点7,点8,点9,点1组成的.

图1 屏幕密码锁路径一

图2 屏幕密码锁路径二

2 加密原理简介

如果我们把点 1到点 9分别用代码 00、01、02、03、04、05、06、07、08来表示,那么经过用户的初始化设置后,一条带方向的路径就可以用一串代码表示了,这串代码就是明文了.如图2的路径,所形成的明文应该是020406070800.接下来,就是对明文进行加密的工作了.

安卓系统的屏幕锁采用的加密算法是SHA-1.SHA-1算法是目前最常用的安全散列算法,它是由美国国家标准与技术学会(NIST)和美国国家安全局(NSA)设计的安全哈希算法(Secure Hash Algo-rithm,SHA),通常用于数字签名标准, 是全世界使用最为广泛的哈希算法,已经成为业界的事实标准[1]. SHA-1算法的特点是:1)是一种单向加密算法,即数据只能加密,而不能被解密;2) 不同的两段数据,加密之后的密文绝不可能相同;相同的两段数据,经过加密以后,其结果是相同的[2].

屏幕锁的加密工作是由安卓系统自动完成的,对明文加密后,形成的密文被放在安卓系统/DATA/SYSTEM/GESTURE.KEY文件中.我们可以用adb pull /data/system/gesture.key gesture.key命令将这个密码文件下载到本地.如果此时用记事本打开 gesture.key文件,你会发现显示的只是一堆乱码,要用十六进制编辑器打开它才可以看到密文[3].图 2中的明文经安卓系统用 SHA-1算法自动加密后得到的密文是“92fac3efb1b1e71384f447d8cb81190358a51dac”.

3 暴力破解的可行性

要对安卓的屏幕密码锁进行破解,关键就是要对密文进行破解,也就是说将密文还原成明文.和大多数密码破解一样,我们首先考虑的是暴力破解法.暴力破解的原理是:在已经获得密码文件或者存储在数据库中的经过加密的密码信息的前提下,通过暴力猜解或者穷举的方式来获得明文[4].当然,使用暴力破解的前提是可能存在的密码个数不能太多,否则使用暴力破解的效率就大打折扣了.那么,安卓系统可能存在的屏幕密码个数到底是多少个?是否能使用暴力破解法?这里我们用数学软件 Mathematica来帮助我们进行分析.

首先,我们把屏幕图案的9个点分别用数字 1 到 9 编号,如图1所示.在仅考虑连接4个或4个以上的点,而不考虑这种连接是否合法的情况下,一共有 985 824 种没有限制的排列组合,以下是所有组合的一部分:{1, 2, 3, 4}, {1, 2, 3, 5}, {1, 2, 3, 6}, {1, 2, 3, 7}, {1, 2, 3, 8}, {1, 2, 3, 9}, {1, 2, 4, 3}, {1, 2, 4, 5}, {1, 2, 4, 6}, {1, 2, 4,7}, {1, 2, 4, 8}, {1, 2, 4, 9}, {1, 2, 5, 3}, {1, 2, 5, 4}, {1, 2, 5, 6}, {1, 2, 5, 7}, {1, 2, 5, 8}, {1, 2, 5, 9}, {1, 2, 6, 3}, {1, 2,6, 4}, {1, 2, 6, 5}, {9, 8, 7, 6, 5, 1, 4, 2, 3}, {9, 8, 7, 6, 5, 1, 4, 3, 2}, {9, 8, 7, 6, 5, 2, 1, 3, 4}, {9, 8, 7, 6, 5, 2, 1, 4, 3},{9, 8, 7, 6, 5, 2, 3, 1, 4}, {9, 8, 7, 6, 5, 2, 3, 4, 1}, {9, 8, 7, 6, 5, 2, 4, 1, 3}, {9, 8, 7, 6, 5, 2, 4, 3, 1}, {9, 8, 7, 6, 5, 3, 1, 2,4}, {9, 8, 7, 6, 5, 3, 1, 4, 2}, {9, 8, 7, 6, 5, 3, 2, 1, 4}, {9, 8, 7, 6, 5, 3, 2, 4, 1}, {9, 8, 7, 6, 5, 3, 4, 1, 2}, {9, 8, 7, 6, 5, 3,4, 2, 1}, {9, 8, 7, 6, 5, 4, 1, 2, 3}, {9, 8, 7, 6, 5, 4, 1, 3, 2}, {9, 8, 7, 6, 5, 4, 2, 1, 3}, {9, 8, 7, 6, 5, 4, 2, 3, 1}, {9, 8, 7, 6,5, 4, 3, 1, 2}, {9, 8, 7, 6, 5, 4, 3, 2, 1},……

然后,我们列出不能直接连接的点对,共16对:{1,3},{3,1},{4,6},{6,4},{7,9},{9,7},{1,7},{7,1},{2,8},{8,2},{3,9},{9,3},{1,9},{9,1},{3,7},{7,3}

由此生成不合法的排列规则:

PatternSequence[Except[2]...,1,3]|

PatternSequence[Except[2]...,3,1]|PatternSequence[Except[5]...,4,6]|

PatternSequence[Except[5]...,6,4]|PatternSequence[Except[8]...,7,9]|

PatternSequence[Except[8]...,9,7]|PatternSequence[Except[4]...,1,7]|

PatternSequence[Except[4]...,7,1]|PatternSequence[Except[5]...,2,8]|

PatternSequence[Except[5]...,8,2]|PatternSequence[Except[6]...,3,9]|

PatternSequence[Except[6]...,9,3]|PatternSequence[Except[5]...,1,9]|

PatternSequence[Except[5]...,9,1]|PatternSequence[Except[5]...,3,7]|

PatternSequence[Except[5]...,7,3],___}

最后,从全部排列组合中删掉不合法的,便得到了所有可能的 Android 密码了,以下列出了一部分:

{1, 2, 3, 4}, {1, 2, 3, 5}, {1, 2, 3, 6}, {1, 2, 3, 8}, {1, 2, 4, 3}, {1, 2, 4, 5}, {1, 2, 4, 7}, {1, 2, 4, 8}, {1, 2, 4, 9}, {1,2, 5, 3}, {1, 2, 5, 4}, {9, 8, 7, 6, 5, 2, 4, 1, 3}, {9, 8, 7, 6, 5, 2, 4, 3, 1}, {9, 8, 7, 6, 5, 3, 2, 1, 4}, {9, 8, 7, 6, 5, 3, 2, 4,1}, {9, 8, 7, 6, 5, 3, 4, 1, 2}, {9, 8, 7, 6, 5, 3, 4, 2, 1}, {9, 8, 7, 6, 5, 4, 1, 2, 3}, {9, 8, 7, 6, 5, 4, 2, 1, 3}, {9, 8, 7, 6, 5, 4,2, 3, 1}, {9, 8, 7, 6, 5, 4, 3, 2, 1},……

这样,我们就得到了一个准确的数字:一共有 389 112 种可能的密码[5].由于可能存在的屏幕密码个数并不算太多,因此,用暴力破解法是可行的.为此,我们可以做一个字典,用来存放明文和密文,在使用的时候将整个字典文件装入内存,然后用密码进行字串匹配,破解的速度基本在1秒以内.

从用户界面上看,Android的安全保护机制主要体现为对于用户界面的访问控制和保护,比如在设备空闲时,用户可以锁定设备,并且设置解锁口令,从而防止未授权的其他用户打开设备.在安卓设备上,常用的屏幕锁定方式有PIN码,锁定图案,密码保护和面部解锁几种[6].比起传统手机的PIN码保护和密码保护,九宫格的屏幕密码锁的安全性要高得多.但是,经过本文的分析,用暴力破解法进行破解也并不难,所以目前安全性最高的应该是面部解锁.密码保护和破解永远是一对互相矛盾又相互依存的“兄弟”,随着新的密码技术不断地被发明和应用,各种相应的解密方式和方法也应运而生,这是信息密码学永恒的主题.相信在不久的将来,Android的安全机制应该会更加完善.

[1] 杜谦,张文霞.多语言可实现的SHA-1散列算法[J].武汉理工大学学报:信息与管理工程版,2007,29(7):42-44.

[2] 王倩丽.基于C#的SHA-1加密算法的应用[J].科技广场,2011(5):52-54.

[3] 徐金成.Android手机屏幕保护安全性研究[J].信息通信,2013(3):97-98.

[4] 郭凤宇,钱怡.一个密码暴力破解系统的设计[J].网络与信息,2009(8):30-31.

[5] matrix67.智能手机的密码总共有多少种[EB/OL]. (2011-07-03) [2013-08-26].http://www.guokr.com/article/49408/.

[6] 孙奕.Android安全保护机制及解密方法研究[J].信息网络安全,2013(1):71-74.

猜你喜欢

密码锁明文密文
一种支持动态更新的可排名密文搜索方案
基于模糊数学的通信网络密文信息差错恢复
奇怪的处罚
开启密码锁
数字密码锁的逻辑实现
一种基于密文分析的密码识别技术*
奇怪的处罚
四部委明文反对垃圾焚烧低价竞争
云存储中支持词频和用户喜好的密文模糊检索