1.一种基于用户权限的安卓应用程序间的安全性鉴定方法,其特征在于该方法基于安卓系统中的三个主体,所述的三个主体,一是服务器端,二是作为主程序的安卓应用程序简称主程序,三是作为主程序的插件的安卓应用程序简称插件程序;在安卓设备中设计一个应用程序和另一个独立安装且作为该程序插件的应用程序两者间的安全性鉴定方法,这种鉴定方法是基于用户权限的,主程序中登录的不同的用户对被调用的插件程序具有不同的执行权限;设计一种主程序加载插件程序时对插件程序执行的基于用户权限的安全性鉴定方法,以及设计一种插件程序被调用时对主程序执行的基于用户权限的安全性鉴定方法;
所述的设计一种主程序加载插件程序时对插件程序执行的基于用户权限的安全性鉴定方法,当主程序扫描到安卓设备中一个已安装的插件程序时鉴定该插件程序是否为原版程序,并鉴定登录用户对该插件程序的使用权限,根据鉴定的结果选择是否加载该插件程序,鉴定流程为:
1)主程序获取插件程序的包名FunctionPackageName和插件程序的签名信息FunctionSignature;
2)主程序将FunctionPackageName和对应的FunctionSignature以及包含用户名和用户密码信息的密文UserID和用户登录时由服务器端生成的具有时效性的验证信息TempKey这四个字符串进行逐字符相加的运算,得到一个字符串;
3)主程序对该字符串使用哈希函数进行转换运算,得到一个新字符串命名为HashKey1;
4)主程序向服务器发送鉴定请求,请求参数包括HashKey1和用户名UserName和FunctionPackageName三个信息;
5)服务器先根据UserName和FunctionPackageName进行执行权限的验证,若验证失败则向主程序返回鉴定失败信息,执行步骤12),若验证成功则执行步骤6);
6)服务器使用本地记录的FunctionPackageName和FunctionSignature以及UserID和TempKey这四个字符串进行逐字符相加的运算,得到一个字符串,对该字符串进行哈希值运算,得到一个新字符串命名为HashKey1’;
7)服务器将HashKey1’与HashKey1进行比较,若不一致则返回鉴定失败信息,执行步骤
12),若验证一致则执行步骤8);
8)服务器将HashKey1和服务器端记录的UserID两个字符串进行逐字符相加运算,得到一个字符串,再对该字符串进行哈希值运算,得到HashKey2;
9)服务器将HashKey2发送给主程序;
10)主程序将HashKey1和UserID两个字符串进行逐字符相加运算,得到一个字符串,再对该字符串进行哈希值运算,得到HashKey2’;
11)主程序将HashKey2’和HashKey2进行比较,若不一致则执行步骤12),若验证一致则将加载该插件程序,鉴定完毕;
12)鉴定失败,不加载该插件程序;
其中UserID根据用户名信息和密码信息加密计算得到,目的为验证用户信息且不使用明文包含密码信息,以提高安全性,TempKey为用户登录时由服务器随机生成的验证码,在用户登录成功后发送至客户端,它具有时效性,一段时间之后即失效,在验证信息中加入具有时效性的信息,即便验证信息在传递中被恶意者截获,也会很快失去价值;
所述的设计一种插件程序被调用时对主程序执行的基于用户权限的安全性鉴定方法,当插件程序被主程序调用时鉴定主程序是否为原版程序,鉴定登录用户是否具有使用权限,鉴定流程为:
2.1)主程序获取插件程序的包名FunctionPackageName和签名信息
FunctionSignature;
2.2)主程序将FunctionPackageName和对应的FunctionSignature以及UserID和TempKey这四个字符串进行逐字符相加的运算,得到一个字符串;
2.3)主程序对该字符串使用哈希函数进行转换运算,得到一个新字符串命名为HashKey1;
2.4)主程序调用插件程序,将登录用户的用户名UserName和HashKey1作为参数传递给插件程序;
2.5)插件程序获取主程序的包名MainPackageName和主程序的签名信息
MainSignature;
2.6)插件程序将UserName和HashKey1以及MainPackageName和MainSignature共四个信息进行逐字符相加的运算,得到一个字符串;
2.7)插件程序对该字符串进行哈希值运算,得到一个新字符串命名为HashKey3;
2.8)插件程序向服务器发送鉴定请求,参数包括HashKey3和UserName和 FunctionPackageName三个信息;
2.9)服务器先根据UserName和FunctionPackageName进行执行权限的验证,若验证失败则向插件程序返回鉴定失败信息,执行步骤2.17),若验证成功则执行步骤2.10);
2.10)服务器使用本地记录的FunctionPackageName和对应的FunctionSignature以及UserID和TempKey这四个字符串进行逐字符相加的运算,得到一个字符串,对该字符串进行哈希值运算,得到一个新字符串命名为HashKey1’;
2.11)服务器将UserName和HashKey1’以及本地记录的主程序的的包名
MainPackageName和主程序的签名信息MainSignature共四个信息进行逐字符相加的运算,得到一个字符串,再对该字符串进行哈希值运算得到HashKey3’;
2.12)服务器将HashKey3’与HashKey3进行比较,若不一致则返回失败信息,执行步骤
2.17);若验证一致则执行步骤2.13);
2.13)服务器将HashKey1’和HashKey3和用于插件程序身份鉴定的标识FunctionID三个字符串进行逐字符相加运算,得到一个字符串,再对该字符串进行哈希值运算,得到HashKey4;
2.14)服务器将HashKey4发送给插件程序;
2.15)插件程序将HashKey1和HashKey3和FunctionID三个字符串进行逐字符相加运算,得到一个字符串,再对该字符串进行哈希值运算,得到HashKey4’;
2.16)插件程序将HashKey4’和HashKey4进行比较,若不一致则执行步骤2.17),若验证一致则允许该次调用,鉴定完毕;
2.17)鉴定失败,插件程序向用户反馈运行失败信息后关闭自身 ;
其中FunctionID为插件程序创建时服务器生成的身份标识,步骤2.13)中添加FunctionID信息是为了防止恶意者仿冒服务器端进行伪造鉴定。
2.根据权利要求1所述的一种基于用户权限的安卓应用程序间的安全性鉴定方法,其特征在于所述的服务器端,存有用户的所有信息,包括用户名、密码、由用户名和密码运算得到的用于身份标识的验证信息UserID,用户登陆时随机生成的具有短暂时效性的验证码TempKey,用户对插件程序的执行权限、主程序的包名MainPackageName和主程序的签名信息MainSignature、每个插件程序的包名FunctionPackageName和对应的插件程序的签名信息FunctionSignature、用于服务器和插件程序间进行身份验证的识别信息FunctionID,服务器作为身份识别的最终判定者,并将身份识别的结果发送给请求方。
3.根据权利要求1所述的一种基于用户权限的安卓应用程序间的安全性鉴定方法,其特征在于所述的主程序,安装于安卓设备中,主程序的作用有:为用户提供登录功能、根据登录用户的权限加载安卓设备中已安装的插件程序、调用插件程序;主程序中记录着带有登录用户的用户名和密码信息的验证信息UserID,主程序在用户请求加载插件时会扫描安卓设备中所有已安装的插件程序,当主程序扫描到一个可用插件程序时,主程序需要鉴别插件程序的安全性以及登录用户对该插件程序的执行权限,所以预加载插件程序时需向服务器端发送身份鉴定请求,主程序将含有用户信息和预加载的业务程序信息的身份鉴定请求发送给服务器端,服务器经过身份鉴定后再将鉴定结果发回给主程序,主程序根据服务器的返回结果选择加载该插件程序或者跳过该插件程序。
4.根据权利要求1所述的一种基于用户权限的安卓应用程序间的安全性鉴定方法,其特征在于所述的插件程序,是安装于同一安卓设备中的应用程序主程序的插件程序,插件程序在被调用时需要对主调程序进行身份鉴定和对主调用户进行权限鉴定,插件程序将包含有主程序的包名和签名信息以及登录用户信息的密文发送到服务器端进行鉴定,若鉴定成功则允许调用,若鉴定失败则反馈鉴定失败信息并关闭自身防止非法调用。
一种基于用户权限的安卓应用程序间的安全性鉴定方法\n技术领域\n[0001] 本发明是一种基于用户权限的安卓应用程序间的安全性鉴定方法,可以鉴定程序是否被篡改,并可以在程序被调用时对主调程序的登录用户权限进行鉴定,属于安卓应用程序开发中的安全领域。\n背景技术\n[0002] 在安卓应用程序开发中,有一种插件式开发方式。在这种插件式开发方式中,主程序和插件程序都以独立的应用程序形式存在于安卓系统中,它们可以独立安装,但插件程序并不给安卓系统提供启动接口,只可在主程序中进行调用。但是由于安卓平台的开放性,这种插件形式会遇到各种各样的安全问题。例如,主程序和插件程序之间的安全性鉴定问题,既存在恶意程序仿冒主程序的危险,也存在恶意者仿冒插件程序的危险。若不做任何安全措施,恶意的程序可以伪装成插件程序,骗取用户点击运行。恶意的程序也可以伪装成主程序,扫描所有的插件程序,肆意调用。再者,很多情况下主程序可能是基于用户的,不同的用户使用不同插件程序的权限也不同,所以插件程序在被调用时也需要鉴定调用者的权限。众所周知,安卓系统中窃取程序安装包是非常容易的,若不做防护措施,用户就可以随意安装使用所有插件程序,失去了用户权限的意义。更有甚者,恶意者可以伪装成鉴定服务器给用户授权,使得用户可以伪造权限调用插件程序。因此,就需要解决两个问题,一个是主程序和插件程序之间的身份鉴定问题,另一个是插件程序对在主程序中登陆用户的权限鉴定问题。\n[0003] 本方法中含有大量的哈希值计算,哈希算法是一种占用资源较小的加密算法,且我们的需求只是完成身份识别功能,哈希算法也完全符合我们要求。使用哈希值计算加密,也有效地隐藏了密码信息等敏感信息,使得即使信息在传输过程中被截获,也不具存在密码被破解以及系统被破坏的风险。\n发明内容\n[0004] 技术问题:本发明的目的是提供一种基于用户权限的安卓应用程序间的安全性鉴定方法。\n[0005] 功能1.作为主程序的安卓应用程序(以下简称主程序)在扫描到系统中已安装的可用的作为主程序的插件的安卓应用程序(以下简称插件程序)时,对插件程序进行鉴定是否被篡改,并根据主程序中登录用户的权限鉴定是否可以加载该插件程序。\n[0006] 功能2.插件程序在被主程序调用时,鉴定主程序是否被篡改,并对主程序中登录用户的权限进行鉴定,是否允许调用。\n[0007] 技术方案:本方法中包含三个主体,一是服务器端,二是主程序,三是插件程序。\n[0008] 服务器端:服务器端存有用户的所有信息,包括用户名、密码、由用户名和密码运算得到的用于身份标识的验证信息(UserID),用户登陆时随机生成的具有短暂时效性的验证码(TempKey),用户对插件程序的执行权限、主程序的包名(MainPackageName)和主程序的签名信息(MainSignature)、每个插件程序的包名(FunctionPackageName)和对应的插件程序的签名信息(FunctionSignature)、用于服务器和插件程序间进行身份验证的识别信息(FunctionID)。服务器作为身份识别的最终判定者,并将身份识别的结果发送给请求方。\n[0009] 主程序:主程序的作用有:为用户提供登录功能、根据登录用户的权限加载安卓设备中已安装的插件程序、调用插件程序。主程序中记录着带有登录用户的用户名和密码信息的验证信息(UserID)。主程序在用户请求加载插件时会扫描安卓设备中所有已安装的插件程序。当主程序扫描到一个可用插件程序时,主程序需要鉴别插件程序的安全性以及登录用户对该插件程序的执行权限,所以预加载插件程序时需向服务器端发送身份鉴定请求。主程序将含有用户信息和预加载的业务程序信息的身份鉴定请求发送给服务器端,服务器经过身份鉴定后再将鉴定结果发回给主程序。主程序根据服务器的返回结果选择加载该插件程序或者跳过该插件程序。\n[0010] 插件程序:插件程序在被调用时需要对主调程序进行身份鉴定和对主调用户进行权限鉴定。插件程序将包含有主程序的包名和签名信息以及登录用户信息的密文发送到服务器端进行鉴定。若鉴定成功则允许调用,若鉴定失败则反馈鉴定失败信息并关闭自身防止非法调用。\n[0011] 本发明的一种基于用户权限的安卓应用程序间的安全性鉴定方法基于安卓系统中的三个主体,所述的三个主体,一是服务器端,二是作为主程序的安卓应用程序简称主程序,三是作为主程序的插件的安卓应用程序简称插件程序;在安卓设备中设计一个应用程序和另一个独立安装且作为该程序插件的应用程序两者间的安全性鉴定方法,这种鉴定方法是基于用户权限的,主程序中登录的不同的用户对被调用的插件程序具有不同的执行权限;设计一种主程序加载插件程序时对插件程序执行的基于用户权限的安全性鉴定方法,以及设计一种插件程序被调用时对主程序执行的基于用户权限的安全性鉴定方法。\n[0012] 所述的设计一种主程序加载插件程序时对插件程序执行的基于用户权限的安全性鉴定方法,当主程序扫描到安卓设备中一个已安装的插件程序时鉴定该插件程序是否为原版程序,并鉴定登录用户对该插件程序的使用权限,根据鉴定的结果选择是否加载该插件程序,鉴定流程为:\n[0013] (1)主程序获取插件程序的包名FunctionPackageName和插件程序的签名信息FunctionSignature;\n[0014] (2)主程序将FunctionPackageName和对应的FunctionSignature以及包含用户名和用户密码信息的密文UserID和用户登录时由服务器端生成的具有时效性的验证信息TempKey这四个字符串进行逐字符相加的运算,得到一个字符串;\n[0015] (3)主程序对该字符串使用哈希函数进行转换运算,得到一个新字符串命名为HashKey1;\n[0016] (4)主程序向服务器发送鉴定请求,请求参数包括HashKey1和用户名UserName和FunctionPackageName三个信息;\n[0017] (5)服务器先根据UserName和FunctionPackageName进行执行权限的验证,若验证失败则向主程序返回鉴定失败信息,执行步骤(12),若验证成功则执行步骤(6);\n[0018] (6)服务器使用本地记录的FunctionPackageName和FunctionSignature以及UserID和TempKey这四个字符串进行逐字符相加的运算,得到一个字符串,对该字符串进行哈希值运算,得到一个新字符串命名为HashKey1’;\n[0019] (7)服务器将HashKey1’与HashKey1进行比较,若不一致则返回鉴定失败信息,执行步骤(12),若验证一致则执行步骤(8);\n[0020] (8)服务器将HashKey1和服务器端记录的UserID两个字符串进行逐字符相加运算,得到一个字符串,再对该字符串进行哈希值运算,得到HashKey2;\n[0021] (9)服务器将HashKey2发送给主程序;\n[0022] (10)主程序将HashKey1和UserID两个字符串进行逐字符相加运算,得到一个字符串,再对该字符串进行哈希值运算,得到HashKey2’;\n[0023] (11)主程序将HashKey2’和HashKey2进行比较,若不一致则执行步骤(12),若验证一致则将加载该插件程序,鉴定完毕;\n[0024] (12)鉴定失败,不加载该插件程序;\n[0025] 其中UserID根据用户名信息和密码信息加密计算得到,目的为验证用户信息且不使用明文包含密码信息,以提高安全性,TempKey为用户登录时由服务器随机生成的验证码,在用户登录成功后发送至客户端,它具有时效性,一段时间之后即失效,在验证信息中加入具有时效性的信息,即便验证信息在传递中被恶意者截获,也会很快失去价值。\n[0026] 所述的设计一种插件程序被调用时对主程序执行的基于用户权限的安全性鉴定方法,当插件程序被主程序调用时鉴定主程序是否为原版程序,鉴定登录用户是否具有使用权限,鉴定流程为:\n[0027] (1)主程序获取插件程序的包名FunctionPackageName和签名信息FunctionSignature;\n[0028] (2)主程序将FunctionPackageName和对应的FunctionSignature以及UserID和TempKey这四个字符串进行逐字符相加的运算,得到一个字符串;\n[0029] (3)主程序对该字符串使用哈希函数进行转换运算,得到一个新字符串命名为HashKey1;\n[0030] (4)主程序调用插件程序,将登录用户的用户名UserName和HashKey1作为参数传递给插件程序;\n[0031] (5)插件程序获取主程序的包名MainPackageName和主程序的签名信息MainSignature;\n[0032] (6)插件程序将UserName和HashKey1以及MainPackageName和MainSignature共四个信息进行逐字符相加的运算,得到一个字符串;\n[0033] (7)插件程序对该字符串进行哈希值运算,得到一个新字符串命名为HashKey3;\n[0034] (8)插件程序向服务器发送鉴定请求,参数包括HashKey3和UserName和FunctionPackageName三个信息;\n[0035] (9)服务器先根据UserName和FunctionPackageName进行执行权限的验证,若验证失败则向插件程序返回鉴定失败信息,执行步骤(17),若验证成功则执行步骤(10);\n[0036] (10)服务器使用本地记录的FunctionPackageName和对应的FunctionSignature以及UserID和TempKey这四个字符串进行逐字符相加的运算,得到一个字符串,对该字符串进行哈希值运算,得到一个新字符串命名为HashKey1’;\n[0037] (11)服务器将UserName和HashKey1’以及本地记录的主程序的的包名MainPackageName和主程序的签名信息MainSignature共四个信息进行逐字符相加的运算,得到一个字符串,再对该字符串进行哈希值运算得到HashKey3’;\n[0038] (12)服务器将HashKey3’与HashKey3进行比较,若不一致则返回失败信息,执行步骤(17);若验证一致则执行步骤(13);\n[0039] (13)服务器将HashKey1’和HashKey3和用于插件程序身份鉴定的标识FunctionID三个字符串进行逐字符相加运算,得到一个字符串,再对该字符串进行哈希值运算,得到HashKey4;\n[0040] (14)服务器将HashKey4发送给插件程序;\n[0041] (15)插件程序将HashKey1和HashKey3和FunctionID三个字符串进行逐字符相加运算,得到一个字符串,再对该字符串进行哈希值运算,得到HashKey4’;\n[0042] (16)插件程序将HashKey4’和HashKey4进行比较,若不一致则执行步骤(17),若验证一致则允许该次调用,鉴定完毕;\n[0043] (17)鉴定失败,插件程序向用户反馈运行失败信息后关闭自身。\n[0044] 其中FunctionID为插件程序创建时服务器生成的身份标识,步骤(13)中添加FunctionID信息是为了防止恶意者仿冒服务器端进行伪造鉴定。\n[0045] 所述的服务器端,存有用户的所有信息,包括用户名、密码、由用户名和密码运算得到的用于身份标识的验证信息UserID,用户登陆时随机生成的具有短暂时效性的验证码TempKey,用户对插件程序的执行权限、主程序的包名MainPackageName和主程序的签名信息MainSignature、每个插件程序的包名FunctionPackageName和对应的插件程序的签名信息FunctionSignature、用于服务器和插件程序间进行身份验证的识别信息FunctionID,服务器作为身份识别的最终判定者,并将身份识别的结果发送给请求方。\n[0046] 所述的主程序,安装于安卓设备中,主程序的作用有:为用户提供登录功能、根据登录用户的权限加载安卓设备中已安装的插件程序、调用插件程序;主程序中记录着带有登录用户的用户名和密码信息的验证信息UserID,主程序在用户请求加载插件时会扫描安卓设备中所有已安装的插件程序,当主程序扫描到一个可用插件程序时,主程序需要鉴别插件程序的安全性以及登录用户对该插件程序的执行权限,所以预加载插件程序时需向服务器端发送身份鉴定请求,主程序将含有用户信息和预加载的业务程序信息的身份鉴定请求发送给服务器端,服务器经过身份鉴定后再将鉴定结果发回给主程序,主程序根据服务器的返回结果选择加载该插件程序或者跳过该插件程序。\n[0047] 所述的插件程序,是安装于同一安卓设备中的应用程序主程序的插件程序,插件程序在被调用时需要对主调程序进行身份鉴定和对主调用户进行权限鉴定,插件程序将包含有主程序的包名和签名信息以及登录用户信息的密文发送到服务器端进行鉴定,若鉴定成功则允许调用,若鉴定失败则反馈鉴定失败信息并关闭自身防止非法调用。\n[0048] 有益效果:\n[0049] 本方法具有以下功能:\n[0050] (1)防止恶意程序伪装成合法的插件程序,欺骗用户加载和运行。\n[0051] (2)恶意者无法通过穷举扫描的方式检测某个用户的所有可用插件。\n[0052] (3)使用哈希值计算加密,隐藏敏感信息。\n[0053] (4)加入具有短暂时效性的参数,即便信息在传输过程中被截获也会很快变得毫无价值。\n[0054] (5)防止恶意者伪造服务器进行伪造授权。\n[0055] (6)防止恶意程序伪装成主程序对插件程序进行调用。\n[0056] (7)防止某位用户伪装成其他用户对插件程序进行调用。\n[0057] (8)防止某个插件程序去验证某个用户对其他插件程序的执行权限。\n附图说明\n[0058] 图1是一种主程序加载插件程序时对插件程序的安全性和用户权限鉴定流程。\n[0059] 图2是一种插件程序被调用时对主程序的安全性和权限性进行鉴定的流程。\n具体实施方式\n[0060] 1.用户在主程序中登录的时候,主程序将用户名和用户密码进行字符运算得到一个包含用户身份标识信息的字符串UserID,服务器端也保留有该UserID。用户登录成功后,服务器会为用户分配一个具有时效性的验证码TempKey,该TempKey为随机生成,并在服务器中只保存一段很短的时间(例如半小时),超时后TempKey将会无效。服务器端还保存有主程序和所有插件程序的包名和签名信息以及用于插件程序身份识别的FunctionID。\n[0061] 本发明的一种基于用户权限的安卓应用程序间的安全性鉴定方法,基于安卓系统中的三个主体,所述的三个主体,一是服务器端,二是作为主程序的安卓应用程序简称主程序,三是作为主程序的插件的安卓应用程序简称插件程序;在安卓设备中设计一个应用程序和另一个独立安装且作为该程序插件的应用程序两者间的安全性鉴定方法,这种鉴定方法是基于用户权限的,主程序中登录的不同的用户对被调用的插件程序具有不同的执行权限;设计一种主程序加载插件程序时对插件程序执行的基于用户权限的安全性鉴定方法,以及设计一种插件程序被调用时对主程序执行的基于用户权限的安全性鉴定方法。\n[0062] 所述的设计一种主程序加载插件程序时对插件程序执行的基于用户权限的安全性鉴定方法,当主程序扫描到安卓设备中一个已安装的插件程序时鉴定该插件程序是否为原版程序,并鉴定登录用户对该插件程序的使用权限,根据鉴定的结果选择是否加载该插件程序,鉴定流程为:\n[0063] (1)主程序获取插件程序的包名FunctionPackageName和插件程序的签名信息FunctionSignature;\n[0064] (2)主程序将FunctionPackageName和对应的FunctionSignature以及包含用户名和用户密码信息的密文UserID和用户登录时由服务器端生成的具有时效性的验证信息TempKey这四个字符串进行逐字符相加的运算,得到一个字符串;\n[0065] (3)主程序对该字符串使用哈希函数进行转换运算,得到一个新字符串命名为HashKey1;\n[0066] (4)主程序向服务器发送鉴定请求,请求参数包括HashKey1和用户名UserName和FunctionPackageName三个信息;\n[0067] (5)服务器先根据UserName和FunctionPackageName进行执行权限的验证,若验证失败则向主程序返回鉴定失败信息,执行步骤(12),若验证成功则执行步骤(6);\n[0068] (6)服务器使用本地记录的FunctionPackageName和FunctionSignature以及UserID和TempKey这四个字符串进行逐字符相加的运算,得到一个字符串,对该字符串进行哈希值运算,得到一个新字符串命名为HashKey1’;\n[0069] (7)服务器将HashKey1’与HashKey1进行比较,若不一致则返回鉴定失败信息,执行步骤(12),若验证一致则执行步骤(8);\n[0070] (8)服务器将HashKey1和服务器端记录的UserID两个字符串进行逐字符相加运算,得到一个字符串,再对该字符串进行哈希值运算,得到HashKey2;\n[0071] (9)服务器将HashKey2发送给主程序;\n[0072] (10)主程序将HashKey1和UserID两个字符串进行逐字符相加运算,得到一个字符串,再对该字符串进行哈希值运算,得到HashKey2’;\n[0073] (11)主程序将HashKey2’和HashKey2进行比较,若不一致则执行步骤(12),若验证一致则将加载该插件程序,鉴定完毕;\n[0074] (12)鉴定失败,不加载该插件程序;\n[0075] 其中UserID根据用户名信息和密码信息加密计算得到,目的为验证用户信息且不使用明文包含密码信息,以提高安全性,TempKey为用户登录时由服务器随机生成的验证码,在用户登录成功后发送至客户端,它具有时效性,一段时间之后即失效,在验证信息中加入具有时效性的信息,即便验证信息在传递中被恶意者截获,也会很快失去价值。\n[0076] 所述的设计一种插件程序被调用时对主程序执行的基于用户权限的安全性鉴定方法,当插件程序被主程序调用时鉴定主程序是否为原版程序,鉴定登录用户是否具有使用权限,鉴定流程为:\n[0077] (1)主程序获取插件程序的包名FunctionPackageName和签名信息FunctionSignature;\n[0078] (2)主程序将FunctionPackageName和对应的FunctionSignature以及UserID和TempKey这四个字符串进行逐字符相加的运算,得到一个字符串;\n[0079] (3)主程序对该字符串使用哈希函数进行转换运算,得到一个新字符串命名为HashKey1;\n[0080] (4)主程序调用插件程序,将登录用户的用户名UserName和HashKey1作为参数传递给插件程序;\n[0081] (5)插件程序获取主程序的包名MainPackageName和主程序的签名信息MainSignature;\n[0082] (6)插件程序将UserName和HashKey1以及MainPackageName和MainSignature共四个信息进行逐字符相加的运算,得到一个字符串;\n[0083] (7)插件程序对该字符串进行哈希值运算,得到一个新字符串命名为HashKey3;\n[0084] (8)插件程序向服务器发送鉴定请求,参数包括HashKey3和UserName和FunctionPackageName三个信息;\n[0085] (9)服务器先根据UserName和FunctionPackageName进行执行权限的验证,若验证失败则向插件程序返回鉴定失败信息,执行步骤(17),若验证成功则执行步骤(10);\n[0086] (10)服务器使用本地记录的FunctionPackageName和对应的FunctionSignature以及UserID和TempKey这四个字符串进行逐字符相加的运算,得到一个字符串,对该字符串进行哈希值运算,得到一个新字符串命名为HashKey1’;\n[0087] (11)服务器将UserName和HashKey1’以及本地记录的主程序的的包名MainPackageName和主程序的签名信息MainSignature共四个信息进行逐字符相加的运算,得到一个字符串,再对该字符串进行哈希值运算得到HashKey3’;\n[0088] (12)服务器将HashKey3’与HashKey3进行比较,若不一致则返回失败信息,执行步骤(17);若验证一致则执行步骤(13);\n[0089] (13)服务器将HashKey1’和HashKey3和用于插件程序身份鉴定的标识FunctionID三个字符串进行逐字符相加运算,得到一个字符串,再对该字符串进行哈希值运算,得到HashKey4;\n[0090] (14)服务器将HashKey4发送给插件程序;\n[0091] (15)插件程序将HashKey1和HashKey3和FunctionID三个字符串进行逐字符相加运算,得到一个字符串,再对该字符串进行哈希值运算,得到HashKey4’;\n[0092] (16)插件程序将HashKey4’和HashKey4进行比较,若不一致则执行步骤(17),若验证一致则允许该次调用,鉴定完毕;\n[0093] (17)鉴定失败,插件程序向用户反馈运行失败信息后关闭自身。\n[0094] 其中FunctionID为插件程序创建时服务器生成的身份标识,步骤(13)中添加FunctionID信息是为了防止恶意者仿冒服务器端进行伪造鉴定。\n[0095] 所述的服务器端,存有用户的所有信息,包括用户名、密码、由用户名和密码运算得到的用于身份标识的验证信息UserID,用户登陆时随机生成的具有短暂时效性的验证码TempKey,用户对插件程序的执行权限、主程序的包名MainPackageName和主程序的签名信息MainSignature、每个插件程序的包名FunctionPackageName和对应的插件程序的签名信息FunctionSignature、用于服务器和插件程序间进行身份验证的识别信息FunctionID,服务器作为身份识别的最终判定者,并将身份识别的结果发送给请求方。\n[0096] 所述的主程序,安装于安卓设备中,主程序的作用有:为用户提供登录功能、根据登录用户的权限加载安卓设备中已安装的插件程序、调用插件程序;主程序中记录着带有登录用户的用户名和密码信息的验证信息UserID,主程序在用户请求加载插件时会扫描安卓设备中所有已安装的插件程序,当主程序扫描到一个可用插件程序时,主程序需要鉴别插件程序的安全性以及登录用户对该插件程序的执行权限,所以预加载插件程序时需向服务器端发送身份鉴定请求,主程序将含有用户信息和预加载的业务程序信息的身份鉴定请求发送给服务器端,服务器经过身份鉴定后再将鉴定结果发回给主程序,主程序根据服务器的返回结果选择加载该插件程序或者跳过该插件程序。\n[0097] 所述的插件程序,是安装于同一安卓设备中的应用程序主程序的插件程序,插件程序在被调用时需要对主调程序进行身份鉴定和对主调用户进行权限鉴定,插件程序将包含有主程序的包名和签名信息以及登录用户信息的密文发送到服务器端进行鉴定,若鉴定成功则允许调用,若鉴定失败则反馈鉴定失败信息并关闭自身防止非法调用。\n[0098] 功能1:\n[0099] 主程序在安装新的插件程序或扫描系统中已有的插件程序时,对插件程序进行合法性鉴定,分为以下几步流程:\n[0100] (1)将获取到FunctionPackageName和对应的FunctionSignature以及UserID和TempKey这四个信息进行字符串运算(例如逐字符相加,该算法不固定),处理为包含了这四个信息的一个字符串。\n[0101] (2)再对得到的字符串进行哈希运算进行加密处理,得到一个新字符串命名为HashKey1。\n[0102] (3)将HashKey1和UserName和FunctionPackageName三个信息发送到服务器进行验证。\n[0103] (4)服务器先根据UserName和FunctionPackageName进行执行权限的验证,然后再验证插件程序的完整性。若服务器端验证失败,则返回验证失败信息。若服务器端验证成功,则服务器会将HashKey1以及服务器端记录的UserID进行字符串运算,得到一个字符串并进行哈希运算,命名为HashKey2,将HashKey2发送给主程序。主程序将HashKey1和UserID进行同样的运算,将结果和HashKey2进行比较,若一致则将加载该插件程序。\n[0104] 该方法可具有以下安全性:\n[0105] (1)由于安装包的签名信息具有较高的安全性,将其加入验证信息后,恶意程序无法伪装成合法的插件程序包,欺骗用户加载和运行。\n[0106] (2)将用户信息加入到验证信息中,在不知道用户密码的情况下,恶意者无法通过穷举扫描的方式检测该用户的所有可用插件。\n[0107] (3)在信息的检测过程中,使用UserID隐藏用户的密码信息,提高了安全性,并防止在信息传输过程中被截获破解。\n[0108] (4)使用随机生成并只具有短暂时效性的TempKey,信息在传输过程中万一被截获也会很快变得毫无价值,恶意者使用截获到的不变动的信息可以进行大量的恶意操作。\n[0109] (5)步骤(4)可以防止恶意者伪造服务器进行伪造授权。\n[0110] 功能2:\n[0111] 插件程序在被调用时也要检测主调程序的信息,以及登录用户的权限。具体流程如下:\n[0112] (1)首先在主程序中,在调用业务程序时,将UserName和HashKey1传递到被调用的插件程序中。\n[0113] (2)插件程序将收到的UserName和HashKey1,以及MainPackageName和主MainSignature共四个信息进行字符串运算成一个字符串。\n[0114] (3)插件程序再将得到的字符串进行哈希运算,得到一个新字符串命名为HashKey3。\n[0115] (4)插件程序将HashKey3以及UserName和FunctionPackageName,三个信息发送到服务器端进行权限验证。\n[0116] (5)服务器先根据UserName和FunctionPackageName进行执行权限的验证,然后再验证主程序的合法性。若验证失败,则服务器返回失败信息,插件程序不会被运行。若验证成功,服务器将运算出HashKey1,再将HashKey1和HashKey3和FunctionID三个字符串进行合并和哈希运算得到HashKey4。插件程序收到HashKey4后,进行同样的运算,将结果和HashKey4进行比较。若一致则说明主程序的合法性并且登录的用户具有运行该插件的权限。\n[0117] 该方法可具有以下安全性:\n[0118] (1)恶意程序无法伪装成主程序对插件程序进行调用。\n[0119] (2)一名用户无法伪装成其他用户对插件程序进行调用。\n[0120] (3)将HashKey1加入到验证信息中是为了阻止某个插件程序去验证该用户对其他插件程序的执行权限。
法律信息
- 2021-05-11
专利权的转移
登记生效日: 2021.04.28
专利权人由江苏江芯电子科技有限公司变更为王堃
地址由211899 江苏省南京市江北新区团结路99号孵鹰大厦D座408室变更为210009 江苏省南京市鼓楼区丁家桥32号人才公寓3-1-1902
- 2020-06-26
专利权的转移
登记生效日: 2020.06.05
专利权人由南京邮电大学变更为江苏江芯电子科技有限公司
地址由210003 江苏省南京市鼓楼区新模范马路66号变更为211899 江苏省南京市江北新区团结路99号孵鹰大厦D座408室
- 2018-02-09
专利实施许可合同备案的注销
合同备案号: 2016320000218
让与人: 南京邮电大学
受让人: 江苏南邮物联网科技园有限公司
解除日: 2018.01.16
- 2016-12-14
专利实施许可合同备案的生效
IPC(主分类): H04L 9/32
合同备案号: 2016320000218
专利号: ZL 201310521790.3
申请日: 2013.10.30
让与人: 南京邮电大学
受让人: 江苏南邮物联网科技园有限公司
发明名称: 一种基于用户权限的安卓应用程序间的安全性鉴定方法
申请公布日: 2014.02.05
授权公告日: 2016.08.31
许可种类: 普通许可
备案日期: 2016.11.18
- 2016-08-31
- 2014-03-12
实质审查的生效
IPC(主分类): H04L 9/32
专利申请号: 201310521790.3
申请日: 2013.10.30
- 2014-02-05
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2013-01-16
|
2012-10-19
| | |
2
| |
2009-10-07
|
2009-05-06
| | |
3
| |
2007-08-01
|
2006-01-24
| | |
4
| |
2013-10-23
|
2012-04-10
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |