掌桥专利:专业的专利平台
掌桥专利
首页

一种Android环境密钥分段处理方法及装置

文献发布时间:2024-01-17 01:14:25


一种Android环境密钥分段处理方法及装置

技术领域

本申请涉及密钥存储技术领域,尤其涉及一种Android环境密钥分段处理方法及装置。

背景技术

对于android手机系统来说,目前手机里存储密钥都是通过TEE和SE来完成,TA作为TEE的应用,密钥数据都在TA中存储,位于TEE中,而TEE隔离于REE(比如android系统),多个TA并行于TEE中,互不干扰,相互隔离。这就保证了TA存储的密钥及中间过程生成的数据的安全。SE需要手机内安全硬件的支持,密钥可以存储在SE的applet中。

对于Android系统来说,虽然当前手机厂商推出的主流手机都包含有TEE系统和SE,可以运行TA应用及安装applet,但是在三四线城市及偏远地区的手机比较低端,大部分手机在千元以下,因为成本问题,不包含TEE环境及SE,无法存储密钥,在涉及手机安全应用方向,受限手机型号,无法大面积推广。

另外,对于Android系统来说,因为手机品牌不同,采用的CPU芯片型号也不一样,所以使用的TEE系统及SE也不一样,比如华为使用自己的TEE环境,而高通也有自己的TEE环境,同样的TA应用无法同时适配华为麒麟芯片和高通芯片的手机,手机安全应用受限手机品牌及手机芯片,开发成本高且无法大面积推广。

发明内容

本申请提供了一种Android环境密钥分段处理方法,包括:

将初始密钥输入白盒密钥模块生成目标存储密钥;

根据当前设备的设备唯一标识生成密钥运算因子;

根据目标存储密钥和密钥运算因子生成待分段密钥;

对待分段密钥执行分段操作,将得到的分段子密钥分别存储至对应的so库中。

如上所述的Android环境密钥分段处理方法,其中,根据当前设备的设备唯一标识生成密钥运算因子,具体包括如下子步骤:

由于每台设备都有唯一的标识,且唯一标识的最后半字节均不相同,保证起始位置的随机数,因此根据当前设备的设备唯一标识,将设备唯一标识的最后半字节的值作为起始位置读取到最后一个字节;

对读取的数据做哈希运算,截取哈希运算结果前预设长度的数据作为第一数据;

生成预设长度的随机数作为第二数据,将第一数据和第二数据进行异或操作,再对异或结果做哈希运算后截取哈希运算结果前预设长度的数据作为密钥运算因子。

如上所述的Android环境密钥分段处理方法,其中,根据目标存储密钥和密钥运算因子生成待分段密钥,具体包括如下子步骤:

对目标存储密钥作哈希运算后得到哈希值;

将目标存储密钥及其哈希值进行拼接,再使用密钥运算因子对拼接值作加密运算得到待分段密钥;采用目标存储密钥与哈希值拼接的方式方便验证目标存储密钥是否被篡改且验证是否合法。

如上所述的Android环境密钥分段处理方法,其中,对待分段密钥执行分段操作,将得到的分段子密钥分别存储至对应的so库中,具体包括如下子步骤:

按照so库数量将待分段密钥进行分段;

根据so库数量对待分段密钥的首字节作模运算,根据运算结果将分段子密钥按照tlv格式存储到对应so库的全局变量中。

如上所述的Android环境密钥分段处理方法,其中,tlv格式为分段标识+待分段密钥长度/so库数量+分段子密钥。

如上所述的Android环境密钥分段处理方法,其中,so库中的分段子密钥存储在Android设备本地。

如上所述的Android环境密钥分段处理方法,其中,响应于接收到密钥提取指令,从so库中获取分段子密钥,将分段子密钥组装成密文;

使用密钥运算因子对组装得到的密文进行解密,并将解密结果分解为密钥和密钥哈希值;

若计算密钥的哈希值与分解得到的密钥哈希值一致,则将密钥输入白盒密钥模块进行解密操作,得到初始密钥,密钥提取成功;采用白盒密钥模块进行加解密运算,即使知晓加解密密钥也无法解密出正确的初始密钥,增加密钥存储的安全性。

如上所述的Android环境密钥分段处理方法,其中,so库包括功能so库和一个或多个分段密钥存储so库;

功能so库存储主要功能接口,提供密钥生成、存储、读写、校验功能,以及用于加解密数据和指令处理;

分段密钥存储so库用于分段存储密钥,以及提供读写接口;

so库还包括校验so库,在分段密钥存储so库之前加载,用于预置分段密钥存储so库的校验值,以校验库文件是否被篡改。;其中可以选择不加载用于检验库文件是否被篡改的libcheck.so库,本申请优选采用加载libcheck.so库的方式增加密钥存储的安全性,防止so库被反编译后修改代码逻辑。

如上所述的Android环境密钥分段处理方法,其中,从so库中获取分段子密钥,将分段子密钥组装成密文,具体为:

响应于接收到密钥提取指令,调用接口向功能so库发送密钥提取指示,功能so库从分段密钥存储so库中分别提取出对应存储的分段子密钥;

根据各分段子密钥的分段标识确定组装顺序,将对应的数据按照组装顺序组装成密文。

本申请还提供一种Android环境密钥分段处理装置,所述装置执行上述任一项所述的Android环境密钥分段处理方法。

本申请实现的有益效果如下:本申请采用多so库分段存储密钥的策略来保护密钥数据,适用于所有的Android系统设备,利于安全应用的推广。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。

图1是本申请实施例一提供的一种Android环境密钥分段存储方法流程图;

图2是本申请实施例二提供的一种Android环境密钥分段提取方法流程图;

具体实施方式

下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本申请实施例提供一种Android环境密钥分段处理方法,包括如实施例一所示的密钥分段存储方法和实施例二所示的密钥分段提取方法。

实施例一

本申请实施例一提供一种Android环境密钥分段存储方法,如图1所示,包括:

步骤110、将初始密钥输入白盒密钥模块生成table表,将table表作为目标存储密钥;

本申请实施例中,白盒密钥模块是利用白盒加密计算对输入的初始密钥pkey加密生成table表,此table作为目标存储密钥key;

由于采用白盒加解密算法无法根据加解密密钥解密出正确的初始密钥,因此本申请采用白盒加解密计算作为更加安全的加解密算法,增加密钥存储的安全性。

步骤120、根据当前设备的设备唯一标识生成密钥运算因子;

由于每台设备都有唯一的标识,类比UUID(通用唯一识别码),且每台设备唯一标识的最后半字节都不相同,以此保证起始位置的随机性,因此根据当前设备的设备唯一标识deviceID(该标识由服务器下发的32字节唯一数据),将设备唯一标识的最后半字节的值作为起始位置读取到最后一个字节,例如,deviceID的最后半字节的值为4,则从第4字节开始读取到最后一个字节,然后对读取的数据做哈希运算(如sha256算法),截取哈希运算结果前预设长度(如24字节)的数据作为第一数据mR1,并生成对应长度的随机数作为第二数据mR2,将第一数据mR1和第二数据mR2进行异或操作得到第三数据,再对第三数据做哈希运算后截取哈希运算结果前预设长度的数据作为密钥运算因子mmkey;

其中,第二数据mR2可以由服务器数据+控件随机数+签名数据+so库各生成随机数后提取预定字节(如各提取6字节组成24字节的第二数据)后组合而成;

此外,本申请需要将生成的密钥运算因子mmkey存储至本地,方便对密钥的提取;另外也可以只存储随机生成的第二数据mR2,在后续密钥提取时进行与步骤120相同的计算方法得到密钥运算因子。

步骤130、根据目标存储密钥和密钥运算因子生成待分段密钥;

具体地,生成待分段密钥,具体包括如下子步骤:

步骤131、对目标存储密钥key作哈希运算后得到哈希值;

步骤132、将目标存储密钥key及其哈希值进行拼接,再使用密钥运算因子mmkey对拼接值作加密运算得到待分段密钥;

具体地,目标存储密钥key及其哈希值进行拼接可以采用多种方式,例如采用目标存储密钥key+哈希值,或哈希值+目标存储密钥key,也可以根据哈希值长度,将目标存储密钥key和哈希值按字节间隔拼接等,在此不做限定。

其中,加密算法可以采用3Des-CBC算法。

步骤140、对待分段密钥执行分段操作,将分段子密钥分别存储至对应的so库中;

本申请实施例中,为了保证密钥数据的安全性,将密钥分段存储至so库中,so库包括功能so库和一个或多个分段密钥存储so库;功能so库存储主要功能接口,提供密钥生成、存储、读写、校验功能,以及用于加解密数据和指令处理;分段密钥存储so库用于分段存储密钥,以及提供读写接口;

优选地,so库还包括校验so库,在分段密钥存储so库之前加载,用于预置分段密钥存储so库的校验值,以校验库文件是否被篡改。

其中so库的数量可以依据需求设定,分段越多,存储和提取的工作量越大,效率也越低,但会提高安全性,综合安全与效率考虑优选分配为一个功能so库和三个分段密钥存储so库;例如so库包括libmainFunc.so库、libsecurity1.so库、libsecurity2.so库和libsecurity3.so库;其中,libmainFunc.so库为功能so库,存储主要功能接口,提供密钥生成、存储、读写、校验功能,以及用于加解密数据和指令处理;libsecurity1.so库、libsecurity2.so库和libsecurity3.so库用于分段存储密钥,提供读写接口,增强密钥的安全性。

另外,为了增加密钥存储的安全性,防止so库被反编译后修改代码逻辑,因此在加载libmainFunc.so库、libsecurity1.so库、libsecurity2.so库和libsecurity3.so库之前先加载libcheck.so库,在libcheck.so库中预置libmainFunc.so库、libsecurity1.so库、libsecurity2.so库和libsecurity3.so库的校验值(MD5值),用于检验库文件是否被篡改过;

对待分段密钥执行分段操作可以为平均分段,也可以按照约定方式进行分段,然后分别存储到so库中,同样采用相同的约定方式进行分段密钥提取,例如存储时每个so库中存储的分段密钥字节数与提取时对应;

例如,以平均分段为例,先按照so库数量将待分段密钥进行平均分段,例如将待分段密钥按顺序平均分段,例如本申请将待分段数据均分为四份数据,即四份分段子密钥:data0,data1,data2,data3;然后根据so库数量对待分段密钥的首字节作模运算,例如对待分段密钥的首字节作模4运算,根据运算结果将分段子密钥按照tlv格式(分段标识+待分段密钥长度/so库数量+分段子密钥)存储到对应so库的全局变量中,并将so库中的所有分段子密钥存储在本地;

例如,若待分段密钥的首字节作模4运算得到结果为0,则将分段子密钥按照(0,1,2,3)的顺序按照tlv格式存储至libmainFunc.so库、libsecurity1.so库、libsecurity2.so库和libsecurity3.so库中,即将data0按照tlv格式(00+len/4+data0)存储到libmainFunc.so库的全局变量中、将data1按照tlv格式(01+len/4+data1)存储到libsecurity1.so库的全局变量中、将data2按照tlv格式(02+len/4+data2)存储到libsecurity2.so库的全局变量中、将data3按照tlv格式(03+len/4+data3)存储到libsecurity3.so库的全局变量中;若待分段密钥的首字节作模4运算得到结果为1,则将分段子密钥按照(1,2,3,0)的顺序存储至libsecurity1.so库、libsecurity2.so库、libsecurity3.so库和libmainFunc.so库;同样道理,若待分段密钥的首字节作模4运算得到结果为2,则将分段子密钥按照(2,3,0,1)的顺序存储至libsecurity2.so库、libsecurity3.so库、libmainFunc.so库和libsecurity1.so库中,以此类推;

另外,为了方便后续获取对应的分段子密钥,优选在将分段子密钥存储在对应的so库后,在libmainFunc.so库中记录能够获取到libsecurity1.so库、libsecurity2.so库和libsecurity3.so库中对应分段子密钥的关联索引。

实施例二

本申请实施例二提供一种Android环境密钥分段提取方法,如图2所示,包括:

步骤210、从so库中获取分段子密钥,将分段子密钥组装成密文;

具体地,在需要进行密钥提取时,响应于接收到密钥提取指令后,调用接口向功能so库发送密钥提取指示,功能so库从分段密钥存储so库中分别提取出对应存储的分段子密钥,例如,libmainFunc.so库接收到Android设备的密钥提取指示后,从libsecurity1.so库、libsecurity2.so库和libsecurity3.so库中分别提取出对应存储的分段子密钥,然后根据各分段子密钥的分段标识(即数据存储格式的首字节)确定组装的顺序,然后再将对应的数据按照组装顺序组装成密文;

进一步地,响应于接收到密钥提取指令,先根据在libcheck.so库中预置的libmainFunc.so库、libsecurity1.so库、libsecurity2.so库和libsecurity3.so库的校验值验证libmainFunc.so库、libsecurity1.so库、libsecurity2.so库和libsecurity3.so库中的数据是否被篡改,在确定so库数据未被篡改之后,libmainFunc.so库依据记录的其他so库的关联索引获取libsecurity1.so库、libsecurity2.so库和libsecurity3.so库中对应的分段子密钥。

步骤220、使用密钥运算因子对组装得到的密文进行解密,并将解密结果分解为密钥和密钥哈希值;

具体地,若本申请在实施例一计算待分段密钥时所用的方法中目标存储密钥key计算后的哈希值为32字节,因此在实施例二进行密钥提取时对组装后的密文解密后得到的解密结果,后32字节为密钥哈希值,剩余数据即为密钥。

步骤230、计算密钥的哈希值与分解得到的密钥哈希值是否一致,如果是,则执行步骤240,否则该密钥不合法;

若对上一步骤分解得到的密钥作哈希运算得到的哈希值与分解得到的密钥哈希值一致,则抛弃掉组装密钥解密结果的后32字节之后剩余的数据即为提取出的合法密钥。

步骤240、将密钥输入白盒密钥模块进行解密操作,得到初始密钥;

经上述操作后提取出的密钥为白盒密钥table表,需要送入白盒密钥模块中利用白盒密钥算法对输入数据进行解密操作,得到初始合法密钥,至此密钥提取成功。

实施例三

本申请实施例三提供一种Android环境密钥分段处理装置,包括:

密钥分段存储模块,执行如实施例一所述的Android环境密钥分段存储方法;

密钥分段提取模块,执行如实施例二所述的Android环境密钥分段提取方法。

采用本申请的技术方案能够达到如下效果:

1、节省开发成本,不区分手机厂商及使用的芯片型号,纯Android环境密钥分段存储方案,可以通用在所有的Android系统手机上,利于涉及安全应用的推广;

2、不需要TEE环境,在相对保证数据安全的基础下可以在低端手机上使用密钥处理敏感数据,利于涉及安全应用的推广。

以上所述实施例,仅为本申请的具体实施方式,用以说明本申请的技术方案,而非对其限制,本申请的保护范围并不局限于此,尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本申请实施例技术方案的精神和范围。都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。

技术分类

06120116076496