首页 理论教育 密码输入保护方案实现

密码输入保护方案实现

时间:2023-10-17 理论教育 版权反馈
【摘要】:(一)实现方案概述密码输入保护方案具体实现方案如下:首先,自定义密码输入器扩展应用独有权限,以保障只有此权限的应用才能发送密码信息,同时只有声明使用此权限的受保护普通Android应用才能接收来自密码输入器的广播。密码输入器各个模块的具体作用如下文所述。

密码输入保护方案实现

(一)实现方案概述

密码输入保护方案具体实现方案如下:首先,自定义密码输入器扩展应用独有权限,以保障只有此权限的应用才能发送密码信息,同时只有声明使用此权限的受保护普通Android应用才能接收来自密码输入器的广播。其次,用户将密码输入器与使用者的SmartWatch2使用蓝牙MAC地址进行绑定(蓝牙设备的MAC地址具有唯一性),保障只有此SmartWatch2才可以使用密码输入器。最后,对于广播内Intent包含的密码数据事先通过RSA加密算法的公钥加密,将加密后的密码信息发送给需要密码的普通Android应用。而普通Android应用端事先声明上述自定义权限,通过Broadcast Receiver接收包含密码数据的广播,通过与上述公钥配对使用的密钥进行解密,最后进行校验密码,密码正确则启动受保护界面,否则不启动。

在研究学习Smart Extension APIs内容的基础上可以知道必须使用其中的Control API用以显示密码输入器的UI界面,使用Registration Capabilities API对密码输入器进行扩展应用的注册,并不需要使用Notification API,Sensor API,Widget API。对于获取蓝牙设备的MAC地址必须调用Android SDK中蓝牙相关的接口

(二)实现过程

在完成各部分功能模块前,首先需要为扩展应用申请必要的权限以及自定义所需权限,所有权限的声明与定义都在Android Manifest.xml文件中完成。扩展应用需要注册自定义的权限以及声明一些必须的权限来保证扩展应用与主应用间的正常通信使用。

通过自定义权限的限制,只有声明了此自定义权限的应用程序才能接收到密码输入器发送的广播,同时也只有注册了此权限的应用程序才能发送广播给需要密码的应用程序。通过此方法可以在一定程度上保障密码传输的安全性,但还需其他保护措施。

1.主要模块分析

密码输入器的主要模块可以分为广播接收模块、应用注册模块、逻辑模块、显示功能模块、设置模块以及加密模块这六大模块。密码输入器各个模块的具体作用如下文所述。

(1)广播接收模块

作为SmartWatch2的扩展应用,其广播接收模块通过Android Broadcast Receiver类接收来自主应用的不同广播信息,广播中的信息传输载体使用Intent,而在接收各个广播之后广播接收模块启动以Service为实体的逻辑模块。这些广播主要包括以下几个部分。

通用请求:扩展应用注册请求(这必须作为第一步)、设备连接以及本地化信息(主要是与可穿戴设备相连的智能手机语言类别)。

②通知请求:视图事件详情以及刷新请求。

③控制请求:作为使用可穿戴设备必不可少的部分,其包括控制类扩展应用的各类事件,主要有按键、点击、滑动、点击对象等。

(2)应用注册模块

笔者所述的扩展应用是供SmartWatch2使用的特殊应用,其相对于普通Android应用的特殊性体现在扩展应用需要在主应用上通过注册模块将自身注册为扩展应用,在此之后主应用才会将扩展应用相关信息(包括扩展应用名字、图片信息)传送给SrnartWatch2端供其使用。其中必不可少的是必须调用方法来声明本扩展应用所需使用的API。

(3)逻辑模块

逻辑模块承接自广播接收模块,广播接收模块接收主应用发送来的广播之后会调用逻辑模块,逻辑模块的主要作用是调用方法完成应用注册以及生成作为扩展应用实体Control Extension的显示传输模块。

(4)显示传输模块

显示传输模块一般作为应用实体部分存在,无论扩展应用本身是通知类型、控制类型还是综合类型,其主要功能部分均在显示传输模块实现。

(5)设置模块

设置模块通常以Activity为实体,在应用注册模块时需要将此Activity注册以供密码输入器使用,密码输入器使用这一模块设置与自身绑定使用的SmartWatch2的MAC地址。

(6)加密模块

笔者设计实现的密码输入器由于考虑到通用性,采用广播机制发送已输入密码。由于权限机制以及地址绑定有一定程度的可破坏性,故需要在发送密码之前对密码进行加密处理,本模块作用即是采用RSA加密算法对密码数据进行加密。

2.主要类的划分及关系

笔者将密码输入器扩展应用命名为Password,普通Android应用命名为App In Cell。App In Cell是与密码输入器配合使用的普通Android应用,包含一个Broadcast Receiver的子类,用以接收扩展应用通过广播发送的Intent,以及两个Activity的子类,分别用来显示锁定界面及应用功能界面。Password包含四个重要类,如图8-32所示。

(1)Password Control SmartWatch2.java:扩展应用的核心功能部分,负责手表端界面的显示,用以输入密码,对输入密码进行RSA加密,发送加密后的密码数据至手机端的App In Cell。

(2)Extension Receiver.java:接收不同的广播,以此启动Extension Service。

(3)Password Extension Service.java:扩展应用的核心巡辑部分,负责Extension的注册以及生成Password Control SmartWatch2对象。

(4)Password Registration Information.java:提供注册Extension时所需的注册信息,尤其是需要使用的AM的信息。

(5)Main Activity.java:负责提供用户设置其需要绑定的SmartWatch2的蓝牙MAC地址,以供验证安全使用,设置界面较为独立故未体现在上文类图中。(www.xing528.com)

图8-32 密码输入器主要类的类图

扩展应用Password与普通Android应用App In Cell的序列图如图8-33所示,图中左边三个类属于Password,右边两个类属于App In Cell。

图8-33 密码输入器的序列图

3.设置模块

设置模块实体为Activity类,由上文应用注册模块注册此Activity。此处实现扩展应用的设置功能,即由使用者设置绑定的SmartWatch2的蓝牙MAC地址。在Eclipse工程下创建Main Activity.java,Main Activity类继承自Activity类。作为扩展应用提供的安全保护措施,它提供输入框供使用者使用。

具体实现方面,本模块提供两个输入对象,使用者输入大端模式的两个相同蓝牙MAC地址后,扩展应用记录下此地址,此地址在程序运行阶段不再改变。之后在使用SmartWatch2时,只有与Android手机连接的SmartWatch2的蓝牙MAC地址与此地址一致时,才会广播发送输入的密码。SmartWatch2的蓝牙MAC地址根据Android提供的一系列蓝牙相关API获取得到。

4.加密模块

实现扩展应用密码数据的加密过程。采用RSA加密算法对密码数据进行加密解密工作。JDK1.7中已经为RSA加解密提供了统一的接口,同时也提供了获得密钥的接口,故可以直接调用进行加解密工作。

考虑到扩展应用对于时间以及效率的要求较高,且需要相对安全的加密过程,因此根据前文所述,选用1 024位的密钥可以满足要求。首先,通过调用generateKeyPair方法可获得所需的密钥对。在获得密钥对之后,分别调用getPlublic以及getPrivate方法获得此密钥对的公钥以及私钥。在程序的初始化阶段,用得到公钥和私钥初始化程序中的公钥和私钥。程序运行阶段,其值不再改变。

5.普通Android应用

笔者编写的普通Android应用只是作为演示,故结构功能比较简单,只需建立两个Activity,第一个Activity的作用是提示使用者密码,在应用接收广播获得Intent之后,此应用使用生成的密钥实现对Intent内密码数据的解密,最后校对密码是否正确。第二个Activity的作用是作为密码输入正确后的显示界面,在实际应用中可根据特定需求更改为自定义的Activity,以实现特定功能。值得注意的是,为接收广播需要声明使用扩展应用自定义的权限。这个普通Android应用为了接收来SmartWatch2手表端输入的密码消息,需要实现一个Broadcast Receiver接收广播。密码数据的解密过程使用与加密公钥配对的密钥,解密过程类似于加密过程。

(三)结果测试及分析

1.测试过程中的关键问题

在对整个密码保护方案的实现以及测试的过程中,以下几个问题值得注意。

(1)没有正确为开发的扩展应用的Library属性添加Smart Extension API和Smart Extension Utils这两个必要的包,其中容易被忽视的是,Smart Extension Utils包需要添加Smart Extension API包为Lib。在建立新的扩展应用工程时,首先就要在工程的Properties>Android中的Library属性添加这两个包。

(2)扩展应用显示的界面是从手机端通过蓝牙传送至手表端,因此需要考虑蓝牙的实际传送速率。为了保证显示效果的流畅度,每分钟通过send Image方法传送的图片最好不超过20幅,即手表端的图片更新频率不宜过大。

(3)需要考虑到SmartWatch2的分辨率很小(仅为220×176),在设计其界面时,XML布局文件应采用相对布局并使用绝对尺寸px,因而在布局属性中需要添加tools:ignore="ContentDescription,PxUsage"属性以达到使用绝对尺寸的目的。

(4)密码输入器通过show Layout方法显示界面的方式问题,可以提供数组实参给show Layout方法,将密码数字和其按钮图片独立显示,但这种方法需要图片与数字通过布局文件配合才能达到比较好的效果。所以最终选择使用带数字的按钮直接显示。

2.密码输入器的测试结果

测试环境包括系统版本为Android4.1.2的三星GalaxS3Android智能手机以及索尼SmartWatch2智能手表。

编译并且成功安装扩展应用后,使用上述设备进行测试工作。主要测试以下几种情况是否符合既定需求。

(1)输入长度满四位的错误密码,确认提交密码后,App In Cell并没有成功启动,手机端弹出密码错误的提示。

(2)输入长度不满四位的密码,App In Cell也没有启动,但此时不弹出密码错误提示,表明长度不满四位的密码信息并没有通过广播发送,App In Cell应用收不到此密码信息,故未做提示。

(3)输入任意位数字密码后,按下回退按钮,可以实现回退一位密码的功能。

(4)输入四位长度且正确的密码并确认后,App In Cell成功启动,并弹出密码正确提示。

(5)使用与绑定蓝牙MAC地址不同的SmartWatch2输入密码,虽然有可以输入密码假象,但无论密码正确与否,App In Cell均无任何反应。

(6)使用未自定义权限的密码输入器或者为使用该权限的普通Android应用,均无法成功发送或接收密码。

经过以上测试步骤,可以说明笔者设计实现的基于SmartWatch2的密码输入保护方案(密码输入器扩展应用)在综合研究Smart Extension APIs以及合理的设计实现过程中,最终成功实现了设想的所需功能。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈