用于密钥安全的加密方法和设备与流程

文档序号:12131479阅读:231来源:国知局
用于密钥安全的加密方法和设备与流程

本申请涉及计算机领域,尤其涉及一种用于密钥安全的加密技术。



背景技术:

移动终端密钥的攻击模型分为三种:恶意软件,申请所有可用的系统权限,比如发短信、打电话、读取联系人、获取地理位置等隐私信息;越狱攻击,获取设备最高权限,扫描文件系统,获取系统敏感数据;监听Root攻击,监听用户键盘输入,获取输入内容。

目前针对移动终端密钥保护方式主要有如下几种:第一,ARM TrustZone技术,从系统总线、处理器等方面的设计将嵌入式设备划分为两个独立的运行环境,Normal Word负责Android OS(安卓系统)运行,Secure word负责处理敏感进程与数据。非授权程序无法获取到存储在Secure Word硬件中的数据,在Android系统中提供运行在Normal World的Android KeyStore Service进程,移动应用可以调用此进程获取到存储在Secure World硬件中密码等敏感数据。使用上述密码针对存储在系统私有空间data/misc/keystore/目录下的密钥文件进行加解密。因Secure word中的密码获取困难,所以使用ARM TrustZone技术能够增强密码加密后的密钥库文件的安全性。在ARM TrustZone技术中,密钥库文件命名为UID_USRPKEY_KeyAlias,UID是系统分配给应用的用户账号,UID_USRPKEY是固定字符串,KeyAlias是密钥别名。在移动终端被获取最高权限后,恶意软件可以拷贝上述密钥库文件并进行重命名,将上述UID变更成恶意软件自身UID,此时调用Android KeyStore Service进程读取Secure word密码解密密钥库文件获得密钥。ARM TrustZone技术的缺陷是移动终端被越狱后密钥可以安装在同一个终端上的其他应用获取。

第二,移动应用私有空间方式。移动操作系统为每一个应用分配私有存储空间,将用于加密密钥库的密码直接存储在上述私有空间目录下,因其他非授权应用无法访问此应用的私有空间数据,所以增强使用上述密码加密后的密钥库文件的安全性。在私有目录下,密钥库密码存储在文件系统的文件或数据库,在移动终端被获取最高权限后,恶意软件可以针对文件系统进行全面扫描获取到密钥库密码。移动应用私有空间存储密钥库的缺陷是密钥可以被同一个终端上的应用获取,也可以被拷贝到其他终端上使用。

第三,用户手动输入的方式。密钥库密码不存储在移动终端上,移动应用启动时,要求用户输入密码,使用此密码加密密钥库文件,移动应用进程关闭后,清除内存中密码数据。因恶意软件无法直接通过扫描文件系统获取到密码,所以增强使用上述密码加密后的密钥库文件的安全性。此方法的缺陷是用户输入的密码安全强度低,很容易被暴力破解。在移动终端被获取最高权限的情况下,键盘输入内容可以被监听。这样,密钥可以被同一个终端上的应用获取,也可以被拷贝到其他终端上使用。



技术实现要素:

本申请的目的是提供一种用于密钥安全的加密方法与设备,以解决用户设备端的密钥安全问题。

根据本申请的一个方面,提供了一种用于密钥安全的加密方法,该方法包括:

基于从服务设备中获取移动应用的唯一标识字符串,生成所述移动应用的数据密钥;

根据加密算法及宏定义对所述数据密钥进行静态加密,并根据预设的散列函数及所获取的用户设备的MAC地址和用户密码对所述数据密钥进行动态加密。

进一步地,从服务设备中获取移动应用的唯一标识字符串,包括:

判断移动应用启动时本地是否存有密钥,若没有,则通过加密传输协议接口从服务设备中获取所述移动应用的唯一标识字符串,

若有,则对存储在用户设备的所述移动应用的加密的密钥进行解密,得到所述移动应用的唯一标识字符串。

进一步地,基于从服务设备中获取移动应用的唯一标识字符串,生成所述移动应用的数据密钥,包括:

根据预设的散列函数对从服务设备中获取到的移动应用的唯一标识字符串进行哈希运算,生成所述移动应用的数据密钥。

进一步地,根据加密算法及宏定义对所述数据密钥进行静态加密包括:

分别对所述数据密钥、加密密钥函数及对应的解密函数进行宏定义,基于所述宏定义得到静态加密后的数据密钥。

更进一步地,分别对所述数据密钥、加密密钥函数及对应的解密函数进行宏定义,基于所述宏定义得到静态加密后的数据密钥,包括:

分别对所述数据密钥、加密密钥函数及对应的解密函数进行宏定义,得到宏定义常量的字符;

将每个宏定义常量的字符填入函数执行栈的连续地址中,得到字符串;

提取所述连续地址的首地址对应的字符串,作为参数传给对应的函数;

调用所述参数的对应的函数,得到静态加密后的数据密钥。

进一步地,所述方法还包括:将所述静态加密后的数据密钥存储至所述用户设备的本地文件系统的私有目录下。

进一步地,所述用户设备的MAC地址包括用户设备上的无线网络MAC地址和蓝牙MAC地址。

进一步地,根据预设的散列函数及所获取的用户设备的MAC地址和用户密码对所述数据密钥进行动态加密,包括:

从所述用户设备中获取无线网络MAC地址、蓝牙MAC地址及用户密码,得到拼接字符串;

根据预设的散列函数对所述拼接字符串进行散列计算,得到对应的哈希值;

将所述对应的哈希值作为所述数据密钥的动态加密密码,得到动态加密后的数据密钥,并将所述动态加密密码存储在所述用户设备中。

进一步地,所述方法还包括:将所述动态加密密码及所述动态加密后的数据密钥存储至所述用户设备的本地文件系统的私有目录下。

进一步地,从用户设备中获取用户设备的无线网络MAC地址、蓝牙MAC地址及用户密码,得到拼接字符串,包括:

通过调用对应的应用程序编程接口从用户设备中获取无线网络MAC地址、蓝牙MAC地址;

获取所述移动应用对应的用户密码;

分别提取所述无线网络MAC地址、所述蓝牙MAC地址及所述用户密码中的多个字节,进行拼接得到拼接字符串。

进一步地,根据预设的散列函数及所获取的用户设备的MAC地址和用户密码对所述数据密钥进行动态加密之后,包括:

根据所述移动应用的启动操作获取当前输入的用户密码,并获取所述移动应用所在当前用户设备上的MAC地址;

根据预设的散列函数对所述MAC地址和所述用户当前输入的用户密码进行散列计算,得到待验证结果;

将所述待验证结果与所述用户设备中存储的动态加密密码进行匹配,若不匹配,则未成功解密所述数据密钥的动态加密密码,若匹配,则成功解密所述数据密钥的动态加密密码。

根据本申请的另一方面,还提供了一种用于密钥安全的加密的设备,所述设备包括:

生成装置,用于基于从服务设备中获取移动应用的唯一标识字符串,生成所述移动应用的数据密钥;

加密装置,用于根据加密算法及宏定义对所述数据密钥进行静态加密,并根据预设的散列函数及所获取的用户设备的MAC地址和用户密码对所述数据密钥进行动态加密。

进一步地,所述生成装置用于:

判断移动应用启动时本地是否存有密钥,若没有,则通过加密传输协议接口从服务设备中获取所述移动应用的唯一标识字符串,

若有,则对存储在用户设备的所述移动应用的加密的密钥进行解密,得到所述移动应用的唯一标识字符串。

进一步地,所述生成装置用于:

根据预设的散列函数对从服务设备中获取到的移动应用的唯一标识字符串进行哈希运算,生成所述移动应用的数据密钥。

进一步地,所述加密装置用于:

分别对所述数据密钥、加密密钥函数及对应的解密函数进行宏定义,基于所述宏定义得到静态加密后的数据密钥。

更进一步地,所述加密装置用于:

分别对所述数据密钥、加密密钥函数及对应的解密函数进行宏定义,得到宏定义常量的字符;

将每个宏定义常量的字符填入函数执行栈的连续地址中,得到字符串;

提取所述连续地址的首地址对应的字符串,作为参数传给对应的函数;

调用所述参数的对应的函数,得到静态加密后的数据密钥。

进一步地,所述设备还包括:

存储装置,用于将所述静态加密后的数据密钥存储至所述用户设备的本地文件系统的私有目录下。

进一步地,所述用户设备的MAC地址包括用户设备上的无线网络MAC地址和蓝牙MAC地址。

进一步地,所述加密装置用于:

从所述用户设备中获取无线网络MAC地址、蓝牙MAC地址及用户密码,得到拼接字符串;

根据预设的散列函数对所述拼接字符串进行散列计算,得到对应的哈希值;

将所述对应的哈希值作为所述数据密钥的动态加密密码,得到动态加密后的数据密钥,并将所述动态加密密码存储在所述用户设备中。

进一步地,所述设备还包括:存储装置,用于将所述动态加密密码及所述动态加密后的数据密钥存储至所述用户设备的本地文件系统的私有目录下。

进一步地,所述加密装置用于:

通过调用对应的应用程序编程接口从用户设备中获取无线网络MAC地址、蓝牙MAC地址;

获取所述移动应用对应的用户密码;

分别提取所述无线网络MAC地址、所述蓝牙MAC地址及所述用户密码中的多个字节,进行拼接得到拼接字符串。

进一步地,所述设备还包括:

获取装置,用于根据所述移动应用的启动操作获取当前输入的用户密码,并获取所述移动应用所在当前用户设备上的MAC地址;

计算装置,用于根据预设的散列函数对所述MAC地址和所述用户当前输入的用户密码进行散列计算,得到待验证结果;

匹配装置,用于将所述待验证结果与所述用户设备中存储的动态加密密码进行匹配,若不匹配,则未成功解密所述数据密钥的动态加密密码,若匹配,则成功解密所述数据密钥的动态加密密码。

与现有技术相比,本申请通过基于从服务设备中获取移动应用的唯一标识字符串,生成所述移动应用的数据密钥;接着,根据加密算法及宏定义对所述数据密钥进行静态加密,并根据预设的散列函数及所获取的用户设备的MAC地址和用户密码对所述数据密钥进行动态加密。通过对移动应用的数据密钥进行静态加密,保证移动应用的数据密钥只能被包含宏定义加密过程的应用获取,实现了数据密钥的应用绑定;进一步地,通过对移动应用的数据密钥进行动态加密,实现了数据密钥的用户设备绑定和用户赞同,即使用户设备的MAC地址被篡改成两个用户设备一致,用户密码不一致,则也无法破解数据密钥获取到移动应用中的业务数据,可以实现数据密钥的用户感知。

附图说明

通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:

图1示出根据本申请一个方面的一种用于密钥安全的加密方法流程示意图;

图2示出本申请一实施例中密钥生成以及安全保护过程的示意图;

图3示出本申请一实施例中密钥安全保护的方法流程示意图;

图4示出示出根据本申请另一个方面的一种用于密钥安全的加密的设备结构示意图。

附图中相同或相似的附图标记代表相同或相似的部件。

具体实施方式

下面结合附图对本申请作进一步详细描述。

图1示出根据本申请一个方面的一种用于密钥安全的加密方法流程示意图;所述方法包括步骤S11和步骤S12,

在步骤S11中,基于从服务设备中获取移动应用的唯一标识字符串,生成所述移动应用的数据密钥;在此,服务设备随机生成移动应用的唯一字符串,用户设备端从服务设备中获取到该唯一标识字符串后进行哈希运算得到固定长度的唯一值,将该固定长度的唯一值作为该移动应用的数据密钥。在此,用户设备端优选为移动终端。

在步骤S12中,根据加密算法及宏定义对所述数据密钥进行静态加密,并根据预设的散列函数及所获取的用户设备的MAC地址和用户密码PWD对所述数据密钥进行动态加密。在此,移动应用在无网络情况下使用时,用户依然有浏览密文数据的需求,因此,需要对密文数据的数据密钥进行安全保护,在本申请实施例中,根据加密算法及宏定义对数据密钥进行静态加密,保证移动应用的数据密钥只能被包含宏定义加密过程的应用获取,实现了密钥的应用绑定,其中,加密算法可以包括国密SM4算法。在本申请一实施例中,将静态加密后的数据密钥直接存储在用户设备端A,当用户设备端A被越狱后移动应用的业务数据及移动应用的数据密钥同时被迁移到用户设备端B上的安装与用户设备端A相同的移动应用(APP)时,用户设备端B与用户设备端A有一样的宏定义的函数,可以成功解密从用户设备端A中拷贝的业务数据,若仅是通过静态加密处理数据密钥是不能满足数据密钥的设备绑定的要求,因此还需要使用动态加密进行处理。动态加密处理是使用散列算法对用户设备的MAC地址和用户密码PWD进行散列,得到动态加密密码。需要说明的是,静态加密处理和动态加密处理的过程是相互独立的,顺序先后不影响最终的数据密钥安全保护的效果。

通过上述本申请所述的对数据密钥进行静态加密和动态加密的处理,使得数据密钥仅能被一个特定应用访问,不能被其他应用或终端访问,满足应用绑定与设备绑定的要求,实现用户设备端的密钥保护。

优选地,在步骤S11中,判断移动应用启动时是否本地存有密钥,若没有,则通过加密传输协议接口从服务设备中获取所述移动应用的唯一标识字符串,若有,则对存储在用户设备的所述移动应用的加密的密钥进行解密,得到所述移动应用的唯一标识字符串。在此,服务设备会给每个移动应用分配一个唯一的字符串,用来唯一标识移动应用,在用户端需要判断启动某一移动应用时是否本地存有密钥,若没有,则从加密传输协议接口(https接口)获取到服务设备给该移动应用分配的唯一标识字符串,若有,则从保存在用户端的加密的密钥解密后获取,以获取到的移动应用的唯一标识字符串进行生成密钥。

接着,在步骤S11中,根据预设的散列函数对从服务设备中获取到的移动应用的唯一标识字符串进行哈希运算,生成所述移动应用的数据密钥。获取到移动应用的唯一标识字符串后,使用预设的散列函数对该唯一字符串进行哈希算法,其中,预设的散列函数如对sm3算法进行修改,例如算法中将迭代条件改为满足多少轮,和哪些字符进行混淆迭代等,使得经过散列算法后的字符串能够成为具有一定安全性的数据密钥。

优选地,在步骤S12中,分别对所述数据密钥、加密密钥函数及对应的解密函数进行宏定义,基于所述宏定义得到静态加密后的数据密钥。函数式宏定义可以嵌入到程序代码中,没有明确的入口,增加静态分析难度。具体地,在步骤S12中,分别对所述数据密钥、加密密钥函数及对应的解密函数进行宏定义,得到宏定义常量的字符;将每个宏定义常量的字符填入函数执行栈的连续地址中,得到字符串;提取所述连续地址的首地址对应的字符串,作为参数传给对应的函数;调用所述参数的对应的函数,得到静态加密后的数据密钥。在此,使用国密SM4算法对移动应用中的业务数据的数据密钥进行静态加密。静态加密是指数据密钥的加密的密码在不同设备上是一致的,静态加密的密码(简称StaticKey)实际以密文字符串的形式定义在代码中,使用时需要进行解密。StaticKey以及解密StaticKey函数均采用宏定义,例如,数据密钥为:0x26,0x67,0x3b,0x31,0x3f,0x66,0x30,0x57,0x2f,0x3d,0x52,0x38,0x36,0x66,0x40,0x2a;对该数据密钥进行静态加密,具体如下所示的程序代码:

#define PRIMARYKEY

((uint8_t[]){'a','b','c','d','e','f','g','h','1','2','3','4','5','6','7','8'})

#define SECRETKEY

((uint8_t[]){0x48,0x5d,0xcc,0xfd,0x68,0x34,0x0b,0xbb,0x59,0x26,0xe7,0xb2,0xf4,0x39,0x4f,0xeb})

#define GETSECRET

({

unsigned char originKey[16];

sm4_context ctx;

sm4_setkey_dec(&ctx,PRIMARYKEY);

sm4_crypt_ecb(&ctx,0,16,SECRETKEY,originKey);

originKey[16]='\0';

originKey;

})

在上述代码中,SECRETKEY为加密后的StaticKey,PRIMARYKEY为加密密钥,GETSECRET为解密函数,返回解密后的StaticKey,通过反汇编得知PRIMARYKEY、SECRETKEY不直接存储在数据(data)段,被打散到多个指令中,成为指令的一部分,增加静态分析的难度。上述宏定义常量的每个字符被逐个压进函数执行栈的连续地址中组装成字符串,然后取寄存器对应连续地址的首地址,作为参数传给对应的函数,这使得每次调用时传入的字符串地址都不同。函数执行完成后,它的执行栈被清空,PRIMARYKEY、SECRETKEY原始信息一并从栈中清除,重要信息不会常驻内存,仅在用到时才进入内存,用完立即清除,有效预防内存扫描,达到应用绑定的效果,数据密钥仅被一个特定的移动应用访问,不能被其他移动应用访问。

优选地,所述用户设备的MAC地址包括用户设备上的无线网络MAC地址和蓝牙MAC地址。在本申请一实施例中,步骤S12包括:从所述用户设备中获取无线网络MAC地址、蓝牙MAC地址及用户密码PWD,得到拼接字符串;根据预设的散列函数对所述拼接字符串进行散列计算,得到对应的哈希值;将所述对应的哈希值作为所述数据密钥的动态加密密码,得到动态加密后的数据密钥,并将所述动态加密密码存储在所述用户设备中。在此,动态加密与静态加密的区别是动态加密的密码不写死在代码中,而是使用用户设备的MAC地址和用户密码PWD拼接成一字符串,将该字符串进行散列运算,得到对应的哈希值,并存储至用户设备中,该哈希值为动态加密的密码。由上述可知,动态加密是通过用户设备的MAC地址和用户密码PWD拼接成的字符串散列后得到的,用户设备不一致导致MAC地址不一致,不能破解数据密钥,获取到移动应用的业务数据,用户密码PWD输入不正确表示用户不赞同,同样也不能破解数据密钥。因此,通过对数据密钥进行动态加密,可实现设备绑定和用户赞同的密钥安全需求。

优选地,在步骤S12中,通过调用对应的应用程序编程接口从用户设备中获取无线网络MAC地址、蓝牙MAC地址;获取所述移动应用对应的用户密码PWD;分别提取所述无线网络MAC地址、所述蓝牙MAC地址及所述用户密码PWD中的多个字节,进行拼接得到拼接字符串。在本申请一实施例中,使用“6字节无线网络MAC地址+6字节蓝牙MAC地址+4字节用户密码PWD”拼接成的字符串进行SM3散列后的哈希值存放在用户设备上,作为动态加密的密码,其中MAC地址通过调用系统API获取。需要说明的是,动态加密时使用的“6字节无线网络MAC地址+6字节蓝牙MAC地址+4字节用户密码PWD”拼接成的字符串仅为举例,当用户设备的MAC地址不为6字节时,也可以使用满足此时MAC地址的字节对应的字符串。

优选地,所述方法还包括:根据所述移动应用的启动操作获取当前输入的用户密码PWD,并获取所述移动应用所在当前用户设备上的MAC地址;根据预设的散列函数对所述MAC地址和所述用户当前输入的用户密码PWD进行散列计算,得到待待验证结果;将所述待验证结果与所述用户设备中存储的动态加密密码进行匹配,若不匹配,则未成功解密所述数据密钥的动态加密密码,若匹配,则成功解密所述数据密钥的动态加密密码。

在此,使用用户设备的MAC地址与用户密码PWD对数据密钥进行动态加密之后,在每次启动移动应用时要求用户输入用户密码PWD,并调用系统API获取用户设备的MAC地址,包括获取无线网络MAC地址和蓝牙MAC地址,将所获取到的用户设备的MAC地址与用户输入的PWD进行拼接,利用预设的散列函数如SM3进行散列运算,得到待验证结果,将该待验证结果与之前已存储在用户设备的哈希值进行对比,若不匹配,则未成功解密所述数据密钥的动态加密密码,若匹配,则成功解密所述数据密钥的动态加密密码。若在同一用户设备上,动态加密使得满足用户赞同的安全需求,在获取到的用户设备MAC地址和用户输入PWD密码作为散列对象,对散列运算结果验证是验证PWD是否输入正确,若输入正确则表示用户赞同,若输入不正确,则表示用户不赞同,保护数据密钥;需要说明的是,PWD不存储到用户设备的本地,只存在内存中,移动应用进程杀死后,PWD自动销毁,不保留任何痕迹。若用户设备A的业务数据与业务密钥同时被迁移到用户设备B中,因在用户设备上对密钥进行了动态加密的安全保护,则即使用户输入PWD是对的,因用户设备A与用户设备的B的MAC地址不一致,致使最后的散列运算后的结果也与之前的动态加密密码不一致,同样不能成功破解到从用户设备A拷贝的业务数据,因此通过动态加密也实现了设备绑定的密钥安全需求。综上所述,业务数据与业务数据密钥文件从用户设备A迁移到用户设备B时,设备MAC地址不一致,无法破解密钥文件,可以实现密钥的设备绑定。即使MAC地址被篡改成两个设备一致,PWD不一致,无法破解密钥文件,可以实现密钥的用户感知。

优选地,所述方法还包括:步骤S13,将所述静态加密后的数据密钥存储至所述用户设备的本地文件系统的私有目录下,在步骤S13中,还将所述动态加密密码及所述动态加密后的数据密钥存储至所述用户设备的本地文件系统的私有目录下。在本申请实施例中,将动态加密处理得到的SM3散列运算后的哈希值以及静态加密后的数据密钥、动态加密后的数据密钥存储至用户设备的本地系统的私有目录下,在此,每一个用户设备的操作系统为每一个移动应用分配私有存储空间,将两次加密后的数据密钥存储在上述分配的私有存储空间的目录下,即存储在用户设备的本地系统的私有目录下,因其他非法授权应用无法访问此应用的私有空间数据,所以增强使用了静态加密和动态加密后的数据密钥的安全性。

图2示出本申请一实施例中密钥生成以及安全保护过程,其中,server为服务设备,client为用户设备,优选为移动终端,在服务设备端生成移动应用的一个唯一的字符串(str),判断移动终端的对应的移动应用启动时本地是否存有密钥,若没有,通过https接口获取str,若有,则从保存在移动终端上的加密的密钥解密后获取;使用修改过的sm3算法对str进行散列得到数据密钥(KEY),完成密钥的生成过程,接着,进行密钥的加密存储,包括静态加密和动态加密,在静态加密过程中使用宏定义的方式,即#definePRIMARYKEY,#define SECRETKEY,#define GETSECRET,其中,SECRETKEY为加密后的静态加密的密码,PRIMARYKEY为加密密钥,GETSECRET为解密函数,经过宏定义后得到静态密钥;使用国密sm4算法对静态密钥进行加密,得到静态加密后的数据密钥sm4str1,实现应用绑定(app bingding);通过用户输入(user input)获取到用户密码PWD,并获取用户设备的MAC地址,将MAC地址+PWD的拼接字符串作为动态密钥,使用sm3散列上述拼接字符串(MAC地址+PWD),使用sm4算法对该动态密钥进行运算,得到动态加密后的数据密钥sm4str2,实现设备绑定(device binding)和用户赞同(user consent),最后,将sm4str2和散列运算得到的哈希值写入(fwrite)密钥数据库文件,存储至移动终端的本地文件系统的私有目录下。图2的密钥安全保护过程的具体方法流程如图3所示,通过图3所示的对数据密钥进行静态加密和动态加密的过程,使得移动应用的业务数据密钥只能被包含宏定义加密过程的应用获取,实现了密钥的应用绑定;业务数据与业务数据密钥文件从移动终端A迁移到移动终端B时,设备MAC地址不一致,无法破解密钥文件,可以实现密钥的设备绑定,即使MAC地址被篡改成两个设备一致,PWD不一致,无法破解密钥文件,可以实现密钥的用户感知。

图4示出根据本申请另一个方面的一种用于密钥安全的加密的设备结构示意图;所述设备1包括生成装置11和加密装置12,其中,生成装置11基于从服务设备中获取移动应用的唯一标识字符串,生成所述移动应用的数据密钥;加密装置12根据加密算法及宏定义对所述数据密钥进行静态加密,并根据预设的散列函数及所获取的用户设备的MAC地址和用户密码PWD对所述数据密钥进行动态加密。

在此,所述设备1包括但不限于任何一种可与用户通过触摸板进行人机交互的移动电子产品,例如智能手机、PDA等,所述移动电子产品可以采用任意操作系统,如android操作系统、iOS操作系统等。优选地,设备1还可以是运行于所述用户设备、或用户设备与网络设备、触摸终端或网络设备与触摸终端通过网络相集成所构成的设备上的脚本程序。当然,本领域技术人员应能理解上述用户设备1仅为举例,其他现有的或今后可能出现的设备1如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。

上述各装置之间是持续不断工作的,在此,本领域技术人员应理解“持续”是指上述各装置分别实时地或者按照设定的或实时调整的工作模式要求。

具体地,生成装置11用于基于从服务设备中获取移动应用的唯一标识字符串,生成所述移动应用的数据密钥;在此,服务设备随机生成移动应用的唯一字符串,用户设备端从服务设备中获取到该唯一标识字符串后进行哈希运算得到固定长度的唯一值,将该固定长度的唯一值作为该移动应用的数据密钥。在此,用户设备端优选为移动终端。

具体地,加密装置12用于根据加密算法及宏定义对所述数据密钥进行静态加密,并根据预设的散列函数及所获取的用户设备的MAC地址和用户密码PWD对所述数据密钥进行动态加密。在此,移动应用在无网络情况下使用时,用户依然有浏览密文数据的需求,因此,需要对密文数据的数据密钥进行安全保护,在本申请实施例中,根据加密算法及宏定义对数据密钥进行静态加密,保证移动应用的数据密钥只能被包含宏定义加密过程的应用获取,实现了密钥的应用绑定,其中,加密算法可以包括国密SM4算法。在本申请一实施例中,将静态加密后的数据密钥直接存储在用户设备端A,当用户设备端A被越狱后移动应用的业务数据及移动应用的数据密钥同时被迁移到用户设备端B上的安装与用户设备端A相同的移动应用(APP)时,用户设备端B与用户设备端A有一样的宏定义的函数,可以成功解密从用户设备端A中拷贝的业务数据,若仅是通过静态加密处理数据密钥是不能满足数据密钥的设备绑定的要求,因此还需要使用动态加密进行处理。动态加密处理是使用散列算法对用户设备的MAC地址和用户密码PWD进行散列,得到动态加密密码。需要说明的是,静态加密处理和动态加密处理的过程是相互独立的,顺序先后不影响最终的数据密钥安全保护的效果。

通过上述本申请所述的对数据密钥进行静态加密和动态加密的处理,使得数据密钥仅能被一个特定应用访问,不能被其他应用或终端访问,满足应用绑定与设备绑定的要求,实现用户设备端的密钥保护。

优选地,生成装置11用于判断移动应用启动时是否本地存有密钥,若没有,则通过加密传输协议接口从服务设备中获取所述移动应用的唯一标识字符串,若有,则对存储在用户设备的所述移动应用的加密的密钥进行解密,得到所述移动应用的唯一标识字符串。在此,服务设备会给每个移动应用分配一个唯一的字符串,用来唯一标识移动应用,在用户端需要判断启动某一移动应用时是否本地存有密钥,若没有,则从加密传输协议接口(https接口)获取到服务设备给该移动应用分配的唯一标识字符串,若有,则从保存在用户端的加密的密钥解密后获取,以获取到的移动应用的唯一标识字符串进行生成密钥。

接着,生成装置11用于根据预设的散列函数对从服务设备中获取到的移动应用的唯一标识字符串进行哈希运算,生成所述移动应用的数据密钥。获取到移动应用的唯一标识字符串后,使用预设的散列函数对该唯一字符串进行哈希算法,其中,预设的散列函数如对sm3算法进行修改,例如算法中将迭代条件改为满足多少轮,和哪些字符进行混淆迭代等,使得经过散列算法后的字符串能够成为具有一定安全性的数据密钥。

优选地,加密装置12用于分别对所述数据密钥、加密密钥函数及对应的解密函数进行宏定义,基于所述宏定义得到静态加密后的数据密钥。函数式宏定义可以嵌入到程序代码中,没有明确的入口,增加静态分析难度。具体地,加密装置12用于:分别对所述数据密钥、加密密钥函数及对应的解密函数进行宏定义,得到宏定义常量的字符;将每个宏定义常量的字符填入函数执行栈的连续地址中,得到字符串;提取所述连续地址的首地址对应的字符串,作为参数传给对应的函数;调用所述参数的对应的函数,得到静态加密后的数据密钥。在此,使用国密SM4算法对移动应用中的业务数据的数据密钥进行静态加密。静态加密是指数据密钥的加密的密码在不同设备上是一致的,静态加密的密码(简称StaticKey)实际以密文字符串的形式定义在代码中,使用时需要进行解密。StaticKey以及解密StaticKey函数均采用宏定义,例如,数据密钥为:0x26,0x67,0x3b,0x31,0x3f,0x66,0x30,0x57,0x2f,0x3d,0x52,0x38,0x36,0x66,0x40,0x2a;对该数据密钥进行静态加密,具体如下所示的程序代码:

#define PRIMARYKEY

((uint8_t[]){'a','b','c','d','e','f','g','h','1','2','3','4','5','6','7','8'})

#define SECRETKEY

((uint8_t[]){0x48,0x5d,0xcc,0xfd,0x68,0x34,0x0b,0xbb,0x59,0x26,0xe7,0xb2,0xf4,0x39,0x4f,0xeb})

#define GETSECRET

({

unsigned char originKey[16];

sm4_context ctx;

sm4_setkey_dec(&ctx,PRIMARYKEY);

sm4_crypt_ecb(&ctx,0,16,SECRETKEY,originKey);

originKey[16]='\0';

originKey;

})

在上述代码中,SECRETKEY为加密后的StaticKey,PRIMARYKEY为加密密钥,GETSECRET为解密函数,返回解密后的StaticKey,通过反汇编得知PRIMARYKEY、SECRETKEY不直接存储在数据(data)段,被打散到多个指令中,成为指令的一部分,增加静态分析的难度。上述宏定义常量的每个字符被逐个压进函数执行栈的连续地址中组装成字符串,然后寄存器取对应连续地址的首地址,作为参数传给对应的函数,这使得每次调用时传入的字符串地址都不同。函数执行完成后,它的执行栈被清空,PRIMARYKEY、SECRETKEY原始信息一并从栈中清除,重要信息不会常驻内存,仅在用到时才进入内存,用完立即清除,有效预防内存扫描,达到应用绑定的效果,数据密钥仅被一个特定的移动应用访问,不能被其他移动应用访问。

优选地,所述用户设备的MAC地址包括用户设备上的无线网络MAC地址和蓝牙MAC地址。在本申请一实施例中,加密装置12用于:从所述用户设备中获取无线网络MAC地址、蓝牙MAC地址及用户密码PWD,得到拼接字符串;根据预设的散列函数对所述拼接字符串进行散列计算,得到对应的哈希值;将所述对应的哈希值作为所述数据密钥的动态加密密码,得到动态加密后的数据密钥,并将所述动态加密密码存储在所述用户设备中。在此,动态加密与静态加密的区别是动态加密的密码不写死在代码中,而是使用用户设备的MAC地址和用户密码PWD拼接成一字符串,将该字符串进行散列运算,得到对应的哈希值,并存储至用户设备中,该哈希值为动态加密的密码。由上述可知,动态加密是通过用户设备的MAC地址和用户密码PWD拼接成的字符串散列后得到的,用户设备不一致导致MAC地址不一致,不能破解数据密钥,获取到移动应用的业务数据,用户密码PWD输入不正确表示用户不赞同,同样也不能破解数据密钥。因此,通过对数据密钥进行动态加密,可实现设备绑定和用户赞同的密钥安全需求。

优选地,加密装置12用于,通过调用对应的应用程序编程接口从用户设备中获取无线网络MAC地址、蓝牙MAC地址;获取所述移动应用对应的用户密码PWD;分别提取所述无线网络MAC地址、所述蓝牙MAC地址及所述用户密码PWD中的多个字节,进行拼接得到拼接字符串。在本申请一实施例中,使用“6字节无线网络MAC地址+6字节蓝牙MAC地址+4字节用户密码PWD”拼接成的字符串进行SM3散列后的哈希值存放在用户设备上,作为动态加密的密码,其中MAC地址通过调用系统API获取。需要说明的是,动态加密时使用的“6字节无线网络MAC地址+6字节蓝牙MAC地址+4字节用户密码PWD”拼接成的字符串仅为举例,当用户设备的MAC地址不为6字节时,也可以使用满足此时MAC地址的字节对应的字符串。

优选地,所述设备1还包括:获取装置14(未示出),用于根据所述移动应用的启动操作获取当前输入的用户密码PWD,并获取所述移动应用所在当前用户设备上的MAC地址;计算装置15(未示出),用于根据预设的散列函数对所述MAC地址和所述用户当前输入的用户密码PWD进行散列计算,得到待待验证结果;匹配装置16(未示出),用于将所述待验证结果与所述用户设备中存储的动态加密密码进行匹配,若不匹配,则未成功解密所述数据密钥的动态加密密码,若匹配,则成功解密所述数据密钥的动态加密密码。

在此,使用用户设备的MAC地址与用户密码PWD对数据密钥进行动态加密之后,在每次启动移动应用时要求用户输入用户密码PWD,并调用系统API获取用户设备的MAC地址,包括获取无线网络MAC地址和蓝牙MAC地址,将所获取到的用户设备的MAC地址与用户输入的PWD进行拼接,利用预设的散列函数如SM3进行散列运算,得到待验证结果,将该待验证结果与之前已存储在用户设备的哈希值进行对比,若不匹配,则未成功解密所述数据密钥的动态加密密码,若匹配,则成功解密所述数据密钥的动态加密密码。若在同一用户设备上,动态加密使得满足用户赞同的安全需求,在获取到的用户设备MAC地址和用户输入PWD密码作为散列对象,对散列运算结果验证是验证PWD是否输入正确,若输入正确则表示用户赞同,若输入不正确,则表示用户不赞同,保护数据密钥;需要说明的是,PWD不存储到用户设备的本地,只存在内存中,移动应用进程杀死后,PWD自动销毁,不保留任何痕迹。若用户设备A的业务数据与业务密钥同时被迁移到用户设备B中,因在用户设备上对密钥进行了动态加密的安全保护,则即使用户输入PWD是对的,因用户设备A与用户设备的B的MAC地址不一致,致使最后的散列运算后的结果也与之前的动态加密密码不一致,同样不能成功破解到从用户设备A拷贝的业务数据,因此通过动态加密也实现了设备绑定的密钥安全需求。综上所述,业务数据与业务数据密钥文件从用户设备A迁移到用户设备B时,设备MAC地址不一致,无法破解密钥文件,可以实现密钥的设备绑定。即使MAC地址被篡改成两个设备一致,PWD不一致,无法破解密钥文件,可以实现密钥的用户感知。

优选地,所述设备1还包括:存储装置13(未示出),用于将所述静态加密后的数据密钥存储至所述用户设备的本地文件系统的私有目录下,存储装置13还用于将所述动态加密密码及所述动态加密后的数据密钥存储至所述用户设备的本地文件系统的私有目录下。在本申请实施例中,将动态加密处理得到的SM3散列运算后的哈希值以及静态加密后的数据密钥、动态加密后的数据密钥存储至用户设备的本地系统的私有目录下,在此,每一个用户设备的操作系统为每一个移动应用分配私有存储空间,将两次加密后的数据密钥存储在上述分配的私有存储空间的目录下,即存储在用户设备的本地系统的私有目录下,因其他非法授权应用无法访问此应用的私有空间数据,所以增强使用了静态加密和动态加密后的数据密钥的安全性。

图2示出本申请一实施例中密钥生成以及安全保护过程的示意图,其中,server为服务设备,client为用户设备,优选为移动终端,在服务设备端生成移动应用的一个唯一的字符串(str),判断移动终端的对应的移动应用是否启动时本地是否存有密钥,若没有,通过https接口获取str,若有,则从保存在移动终端上的加密的密钥解密后获取;使用修改过的sm3算法对str进行散列得到数据密钥(KEY),完成密钥的生成过程,接着,进行密钥的加密存储,包括静态加密和动态加密,在静态加密过程中使用宏定义的方式,即#define PRIMARYKEY,#define SECRETKEY,#define GETSECRET,其中,SECRETKEY为加密后的静态加密的密码,PRIMARYKEY为加密密钥,GETSECRET为解密函数,经过宏定义后得到静态密钥;使用国密sm4算法对静态密钥进行加密,得到静态加密后的数据密钥sm4str1,实现应用绑定(app bingding);通过用户输入(user input)获取到用户密码PWD,并获取用户设备的MAC地址,将MAC地址+PWD的拼接字符串作为动态密钥,使用sm3散列上述拼接字符串(MAC地址+PWD),使用sm4算法对该动态密钥进行运算,得到动态加密后的数据密钥sm4str2,实现设备绑定(device binding)和用户赞同(user consent),最后,将sm4str2和散列运算得到的哈希值写入(fwrite)密钥数据库文件,存储至移动终端的本地文件系统的私有目录下。图2的密钥安全保护过程的具体方法流程如图3所示,通过图3所示的对数据密钥进行静态加密和动态加密的过程,使得移动应用的业务数据密钥只能被包含宏定义加密过程的应用获取,实现了密钥的应用绑定;业务数据与业务数据密钥文件从移动终端A迁移到移动终端B时,设备MAC地址不一致,无法破解密钥文件,可以实现密钥的设备绑定,即使MAC地址被篡改成两个设备一致,PWD不一致,无法破解密钥文件,可以实现密钥的用户感知。

需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。

另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。

对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1