一种数据库文件加密方法、解密方法和相关装置转让专利

申请号 : CN201810972631.8

文献号 : CN110858249A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 廖婷曾英佩胡亮

申请人 : 中移(杭州)信息技术有限公司中国移动通信集团有限公司

摘要 :

本发明公开了一种数据库文件加密方法、解密方法和相关装置,属于数据安全技术领域,本发明提供的数据库文件加密方法包括:在加密任一应用涉及的数据库文件时,判断该应用的指定目录中是否存在加密的密钥信息,其中,所述加密的密钥信息为根据终端的设备指纹信息和该应用的应用指纹信息对所述密钥信息进行加密得到的;若是,则从读取到的所述加密的密钥信息中解密出密钥信息,并利用解密出的密钥信息加密数据库文件。通过采用上述方法,利用密钥信息对数据库文件进行加密,由于该密钥信息是利用终端的设备指纹信息和应用的应用指纹信息对密钥信息进行加密处理的,故提高了加密的密钥信息的破解难度,进而也就保证了加密的数据库文件的安全性。

权利要求 :

1.一种数据库文件加密方法,其特征在于,包括:在加密任一应用涉及的数据库文件时,判断该应用的指定目录中是否存在加密的密钥信息,其中,所述加密的密钥信息为根据终端的设备指纹信息和该应用的应用指纹信息对所述密钥信息进行加密得到的;

若是,则从读取到的所述加密的密钥信息中解密出密钥信息,并利用解密出的密钥信息加密所述数据库文件。

2.如权利要求1所述的方法,其特征在于,在从所述加密的密钥信息中解密出密钥信息之前,还包括:对所述加密的密钥信息的完整性校验通过。

3.如权利要求1或2所述的方法,其特征在于,还包括:若在所述指定目录中不存在加密的密钥信息时,或者对所述加密的密钥信息的完整性校验不通过时,则随机产生密钥信息并利用产生的密钥信息加密所述数据库文件。

4.如权利要求3所述的方法,其特征在于,还包括:获取所述终端的设备指纹信息和该应用的应用指纹信息;

利用所述设备指纹信息和所述应用指纹信息对密钥信息进行加密处理得到加密的密钥信息。

5.如权利要求3所述的方法,其特征在于,还包括:获取所述终端的设备指纹信息、该应用的应用指纹信息和随机数;

利用所述设备指纹信息、应用指纹信息、随机数和预置的子密钥对密钥信息进行加密处理得到加密的密钥信息;并将所述加密的密钥信息存储到该应用的指定目录中。

6.如权利要求5所述的方法,其特征在于,利用所述设备指纹信息、应用指纹信息、随机数和预置的子密钥对密钥信息进行加密处理得到加密的密钥信息,具体包括:根据所述设备指纹信息、所述应用指纹信息、随机数和预置的子密钥,生成根密钥;

利用所述根密钥对所述密钥信息进行加密处理得到第一加密信息;

利用所述根密钥对所述第一加密信息、所述设备指纹信息和所述应用指纹信息进行加密处理,得到第二加密信息;

利用预设的第一混淆参数对所述第二加密信息、所述设备指纹信息和所述应用指纹信息进行加密处理,得到第三加密信息;

对所述第二加密信息和所述第三加密信息进行或处理得到加密的密钥信息。

7.如权利要求1所述的方法,其特征在于,读取所述加密的密钥信息,具体包括:通过内部调用getTerminalKey()函数读取所述加密的密钥信息。

8.如权利要求2所述的方法,其特征在于,按照下述方法确定对所述加密的密钥信息的完整性校验通过:将所述加密的密钥信息拆分为第四加密信息和第五加密信息;

利用预设的第一混淆参数对所述第五加密信息进行解密,并解密出第六加密信息、终端的设备指纹信息和应用的应用指纹信息;

利用根密钥对解密出的第六加密信息、终端的设备指纹信息和应用的应用指纹信息进行加密处理得到第七加密信息;

若确定出所述第七加密信息和第四加密信息一致,则确定对所述加密的密钥信息的完整性校验通过。

9.如权利要求1所述的方法,其特征在于,还包括:在检测到应用的版本更新时,从所述加密的密钥信息中解密出密钥信息;

确定更新后的应用的应用指纹信息;

根据获取到的终端的设备指纹信息、所述应用指纹信息、获取到的随机数和预置的子密钥,重新对所述密钥信息进行加密处理得到新的加密的密钥信息;

将所述新的加密的密钥信息存储到所述应用的指定目录中。

10.如权利要求5、6或9所述的方法,其特征在于,按照下述方法获取随机数:向该应用的服务器发送随机数获取请求,所述请求中携带有所述终端的终端标识和该应用的应用标识,以使所述服务器根据终端标识、应用标识和随机数三者之间的对应关系,确定该应用的随机数;

在确定出成功接收到服务器下发的随机数后,获取所述随机数;

若确定出未成功接收到服务器下发的随机数,则确定安全元件SE中是否存储有随机数,若是则从SE中获取随机数;若否,则在确定出数据库文件开始位置存储有随机数时,从所述数据库文件开始位置获取所述随机数。

11.如权利要求10所述的方法,其特征在于,在获取所述随机数之后,还包括:判断所述终端是否具有安全元件SE权限;

若是,则在确定出所述SE中未存储随机数时,将接收到的随机数用白盒进行加密并将加密后的随机数存储到SE中;

若否,则在确定出数据库文件开始位置未存储随机数时,将接收到的随机数用白盒进行加密并将加密后的随机数存储到数据库文件开始位置处。

12.如权利要求1、4、5或6所述的方法,其特征在于,按照下述方法生成终端的设备指纹信息:获取终 端的国际移动设备识别码IMEI 、蓝牙多媒体访问控制地址BluetoothMacAddress和所述终端使用的操作系统的版本号;

根据预设的第二混淆参数、所述IMEI、所述BluetoothMacAddress和所述操作系统的版本号,生成所述终端的设备指纹信息。

13.如权利要求1、4、5或6所述的方法,其特征在于,按照下述方法生成应用的应用指纹信息:获取所述应用的dex文件、证书和所述应用的包名;

根据预设的第三混淆参数、所述dex文件、证书和所述包名,生成所述应用的应用指纹信息。

14.一种数据库文件的解密方法,其特征在于,包括:在接收到针对终端中应用的数据库文件的操作请求后,从所述应用的指定目录中获取加密的密钥信息,其中,所述加密的密钥信息为根据终端的设备指纹信息和该应用的应用指纹信息对所述密钥信息进行加密得到的;

从所述加密的密钥信息中解密出所述密钥信息;

利用所述密钥信息对数据库文件进行解密并对解密后的数据库文件进行操作。

15.如权利要求14所述的方法,其特征在于,在从所述加密的密钥信息中解密出所述密钥信息之前,还包括:对所述加密的密钥信息的完整性校验通过。

16.如权利要求14所述的方法,其特征在于,在从所述应用的指定目录中获取加密的密钥信息之前,还包括:获取所述终端的设备指纹信息;并

对所述设备指纹信息验证通过。

17.如权利要求16所述的方法,其特征在于,在对所述终端的设备指纹信息验证通过之后,在从所述应用的指定目录中获取加密的密钥信息之前,还包括:获取所述应用的应用指纹信息;并

对所述应用指纹信息验证通过。

18.如权利要求14~17任一所述的方法,其特征在于,从所述加密的密钥信息中解密出所述密钥信息,具体包括:将所述加密的密钥信息拆分成第一密文信息和第二密文信息;

利用预设的第一混淆参数对所述第二密文信息进行解密处理,得到第三密文信息;

利用根密钥对所述第三密文信息进行解密处理,得到所述密钥信息。

19.一种数据库文件加密装置,其特征在于,包括:判断单元,用于在加密任一应用涉及的数据库文件时,判断该应用的指定目录中是否存在加密的密钥信息,其中,所述加密的密钥信息为根据终端的设备指纹信息和该应用的应用指纹信息对所述密钥信息进行加密得到的;

加解密单元,用于在所述判断单元的判断结果为是时,则从读取到的所述加密的密钥信息中解密出密钥信息,并利用解密出的密钥信息加密所述数据库文件。

20.一种数据库文件解密装置,其特征在于,包括:获取单元,用于在接收到针对终端中应用的数据库文件的操作请求后,从所述应用的指定目录中获取加密的密钥信息,其中,所述加密的密钥信息为根据终端的设备指纹信息和该应用的应用指纹信息对所述密钥信息进行加密得到的;

第一解密单元,用于从所述加密的密钥信息中解密出所述密钥信息;

第二解密单元,用于利用所述密钥信息对数据库文件进行解密并对解密后的数据库文件进行操作。

21.一种通信设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序;其特征在于,所述处理器执行所述程序时实现如权利要求1~13任一项所述的数据库文件加密方法,和/或实现如权利要求14~18任一项所述的数据库文件解密方法。

22.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1~13任一项所述的数据库文件加密方法中的步骤,和/或实现如权利要求14~18任一项所述的数据库文件解密方法中的步骤。

说明书 :

一种数据库文件加密方法、解密方法和相关装置

技术领域

[0001] 本发明涉及数据安全技术领域,尤其涉及一种数据库文件加密方法、解密方法和相关装置。

背景技术

[0002] SQLCipher是一个在SQLite基础之上进行扩展的开源数据库,它主要是在SQLite的基础之上增加了数据加密功能,在项目中使用它来存储数据,可以大大提高程序的安全性。SQLCipher加密性能高,只要5%-15%的开销用于加密,且采用OpenSSL加密库提供的算法,完全做到数据库100%加密,因此非常适合移动开发过程的数据库保护。SQLCipher支持很多种不同的平台,例如可以应用到基于Android系统中应用,其他领域类似拓展。Android系统的数据库文件一般存储在/data/data/your_packagename/databases路径下,只要获得root权限就可以进入该目录,并可以查看、编辑应用数据,如果数据库存储了一些不允许用户查看和操作的敏感数据,则必须要给数据库加密。SqlCipher不是对表或列进行加密,而是对存储有敏感数据的整个数据库db文件加密,因而密钥的可靠性和难破解性就显得尤为重要。
[0003] 现有的基于SQLCipher的密钥生成方法有以下几种:1、直接用明文密钥加密;2、对明文密钥进行加密得到密文密钥,然后利用密文密钥对数据库文件进行加密;3、动态生成明文密钥,然后利用加密算法生成密文密钥,再执行加密操作。上述几种方法在特定场合都有自己的适用性,但各有利弊,当对安全性要求较高时,极易通过静态分析、动态调试、反编译和反hook等方法破解密钥,从而拿到用户敏感数据,损害用户的利益。
[0004] 因此,如何提高数据库文件的安全性是首要考虑的问题之一。

发明内容

[0005] 本发明实施例提供一种数据库文件加密方法、解密方法和相关装置,用以提高数据库文件的安全性。
[0006] 第一方面,本发明实施例提供一种数据库文件加密方法,包括:
[0007] 在加密任一应用涉及的数据库文件时,判断该应用的指定目录中是否存在加密的密钥信息,其中,所述加密的密钥信息为根据终端的设备指纹信息和该应用的应用指纹信息对所述密钥信息进行加密得到的;
[0008] 若是,则从读取到的所述加密的密钥信息中解密出密钥信息,并利用解密出的密钥信息加密所述数据库文件。
[0009] 这样,通过利用密钥信息进行加密,然后利用终端的设备指纹信息和应用的应用指纹信息对密钥信息进行加密,这样能够保证一设备一应用一加密的密钥信息,从而提高了加密的数据库文件的破解难度。
[0010] 第二方面,本发明实施例提供一种数据库文件解密方法,包括:
[0011] 在接收到针对终端中应用的数据库文件的操作请求后,从所述应用的指定目录中获取加密的密钥信息,其中,所述加密的密钥信息为根据终端的设备指纹信息和该应用的应用指纹信息对所述密钥信息进行加密得到的;
[0012] 从所述加密的密钥信息中解密出所述密钥信息;
[0013] 利用所述密钥信息对数据库文件进行解密并对解密后的数据库文件进行操作。
[0014] 第三方面,本发明实施例提供一种数据库文件加密装置,包括:
[0015] 判断单元,用于在加密任一应用涉及的数据库文件时,判断该应用的指定目录中是否存在加密的密钥信息,其中,所述加密的密钥信息为根据终端的设备指纹信息和该应用的应用指纹信息对所述密钥信息进行加密得到的;
[0016] 加解密单元,用于在所述判断单元的判断结果为是时,则从读取到的所述加密的密钥信息中解密出密钥信息,并利用解密出的密钥信息加密所述数据库文件。
[0017] 第四发明,本发明实施例提供一种数据库文件解密装置,包括:
[0018] 获取单元,用于在接收到针对终端中应用的数据库文件的操作请求后,从所述应用的指定目录中获取加密的密钥信息,其中,所述加密的密钥信息为根据终端的设备指纹信息和该应用的应用指纹信息对所述密钥信息进行加密得到的;
[0019] 第一解密单元,用于从所述加密的密钥信息中解密出所述密钥信息;
[0020] 第二解密单元,用于利用所述密钥信息对数据库文件进行解密并对解密后的数据库文件进行操作。
[0021] 第五发明,本发明实施例提供一种通信设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序;所述处理器执行所述程序时实现如本发明提供的任一项所述的数据库文件加密方法,和/或实现如本发明提供的任一项所述的数据库文件解密方法。
[0022] 第六方面,本发明实施例提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明提供的任一项所述的数据库文件加密方法中的步骤,和/或实现如本发明提供的任一项所述的数据库文件解密方法中的步骤。
[0023] 本发明有益效果:
[0024] 本发明实施例提供的数据库文件加密方法,通过利用密钥信息对数据库文件进行加密,由于该密钥信息是利用终端的设备指纹信息和应用的应用指纹信息对密钥信息进行加密处理的,故提高了加密的密钥信息的破解难度,进而也就保证了加密的数据库文件的安全性。
[0025] 本发明实施例提供的数据库文件解密方法,在接收到针对终端中应用的数据库文件的操作请求后,通过从应用的指定目录中读取加密的密钥信息,然后从加密的密钥信息中解密出密钥信息,再利用解密出的密钥信息对加密的数据库文件进行解密,从而在解密成功后对数据库文件进行操作,可以做到用户无感知的获取加密的密钥信息并解密出密钥信息,简化了用户操作流程。
[0026] 本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。

附图说明

[0027] 此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
[0028] 图1为本发明实施例提供的实施数据库文件加密方法或解密方法的终端100的结构示意图;
[0029] 图2为本发明实施例提供的数据库文件加密方法的流程示意图之一;
[0030] 图3为本发明实施例提供的加密的密钥信息生成方法的流程示意图之一;
[0031] 图4为本发明实施例提供的对密钥信息进行加密得到加密的密钥信息的流程示意图;
[0032] 图5为本发明实施例提供的获取随机数的流程示意图;
[0033] 图6为本发明实施例提供的利用设备指纹信息、应用指纹信息、随机数和预置的子密钥对密钥信息进行加密处理得到加密的密钥信息的流程示意图;
[0034] 图7为本发明实施例提供的对加密的密钥信息进行完整性校验的流程示意图;
[0035] 图8为本发明实施例提供的数据库文件加密方法的流程示意图之二;
[0036] 图9为本发明实施例提供的获取终端的设备指纹信息的流程示意图;
[0037] 图10为本发明实施例提供的获取应用的应用指纹信息的流程示意图;
[0038] 图11为本发明实施例提供的数据库文件解密方法的流程示意图之一;
[0039] 图12为本发明实施例提供的解密加密的密钥信息的流程示意图;
[0040] 图13为本发明实施例提供的数据库文件解密方法的流程示意图之二;
[0041] 图14为本发明实施例提供的数据库文件解密方法的流程示意图之三;
[0042] 图15为本发明实施例提供的数据库文件加密装置的结构示意图;
[0043] 图16为本发明实施例提供的数据库文件解密装置的结构示意图;
[0044] 图17为实施本发明实施例提供的数据库文件加密、解密方法的终端设备的硬件结构示意图。

具体实施方式

[0045] 本发明实施例提供的数据库文件加密方法、解密方法和相关装置,用以提高数据库文件的安全性。
[0046] 以下结合说明书附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明,并且在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
[0047] 便于理解本发明,本发明涉及的技术术语中:
[0048] 1、终端,为可以安装各类应用程序,并且能够将已安装的应用程序中提供的对象进行显示的电子设备,该电子设备可以是移动的,也可以是固定的。例如,手机、平板电脑、各类可穿戴设备、车载设备、个人数字助理(personal digital assistant,PDA)、销售终端(point of sales,POS)、地铁站内的监控设备或其它能够实现上述功能的电子设备等。
[0049] 2、应用,也即应用程序,为可以完成某项或多项特定工作的计算机程序,它具有可视的显示界面,能与用户进行交互,比如电子地图和微信等都可以称为应用。
[0050] 3、高级加密标准,(Advanced Encryption Standard,AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。
[0051] 4、密钥相关的哈希运输消息认证码,(Hash-based Message Authentication Code,HMAC),HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。
[0052] 5、在本发明实施例的描述中,“第一”、“第二”等词汇,仅用于区分描述的目的,而不能理解为指示或暗示相对重要性,也不能理解为指示或暗示顺序。
[0053] 现有技术采用的直接用明文密钥对数据库执行加解密操作,但这里的明文密钥可以是用户自行设置,也可以是随机生成器产生,这样做的好处是操作简单,坏处是密钥容易被获取,当涉及到敏感数据时,安全性很低;现有技术采用的“利用加密算法对明文密钥进行加密得到密文密钥,然后利用密文密钥对数据库进行加解密操作”的方法,虽然采用密文密钥加密在一定程度上提高了安全性,但根据加密算法还是容易逆向分析和推导出明文密钥,同样存在安全隐患;现有技术采用的动态生成明文密钥的方法,虽然每次密钥不同,存在不易被破解的优点,但每次重新生成明文密钥会造成开销增大;此外,现有技术中还采用了将密钥存储在应用的服务端,将安全防护重点转移到通信和服务端的防护上,虽然在一定程度上提高了安全性,但会造成应用与服务端通信以及服务端自身安全防护压力增大。上述几种方法都有自己的应用场景,但当数据库文件安全性要求较高时,上述几种方法仍然存在安全隐患。
[0054] 为了解决现有技术中数据库文件的安全性,本发明提出一种数据库文件加密方法,该方法可以应用到安装有能够实施本发明提供的方法的终端中,图1示出了一种终端100的结构示意图。参照图1所示,终端100包括:处理器110、存储器120、重力加速度传感器
130、显示单元1/40、输入单元150、射频(radio frequency,RF)电路160以及电源170等。
[0055] 其中,处理器110是终端100的控制中心,利用各种接口和线路连接各个部件,通过运行或执行存储在存储器120内的软件程序和/或数据,执行终端100的各种功能,从而对终端进行整体监控。可选的,处理器110可包括一个或多个处理单元;优选的,处理器110可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器110中。在一些实施例中,处理器、存储器、可以在单一芯片上实现,在一些实施例中,它们也可以在独立的芯片上分别实现。
[0056] 存储器120可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、各种应用程序等;存储数据区可存储根据终端100的使用所创建的数据等。此外,存储器120可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件等。
[0057] 重力加速度传感器130可检测各个方向上(一般为三轴)加速度的大小,同时,该重力加速度传感器130还可用于检测终端静止时重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等。
[0058] 显示单元140可用于显示由用户输入的信息或提供给用户的信息以及终端100的各种菜单等,本发明实施例中主要用于显示终端100中各应用程序的显示界面以及显示界面中显示的文本、图片等对象。显示单元140可以包括显示面板141。显示面板141可以采用液晶显示屏(Liquid Crystal Display,LCD)、有机发光二极管(Organic Light-Emitting Diode,OLED)等形式来配置。
[0059] 输入单元150可用于接收用户输入的数字或字符等信息。输入单元150可包括触控面板151以及其他输入设备152。其中,触控面板151,也称为触摸屏,可收集用户在其上或附近的触摸操作(比如用户使用手指、触摸笔等任何适合的物体或附件在触控面板151上或在触控面板151附近的操作),例如本发明实施例中的触控面板151可用于检测是否有用户的按压操作。具体的,触控面板151可以检测用户的触摸操作,并检测触摸操作带来的信号,将这些信号转换成触点坐标,发送给处理器110,并接收处理器110发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触控面板151。其他输入设备152可以包括但不限于物理键盘、功能键(比如音量控制按键、开关机按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
[0060] 当然,触控面板151可覆盖显示面板141,当触控面板151检测到在其上或附近的触摸操作后,传送给处理器110以确定触摸事件的类型,随后处理器110根据触摸事件的类型在显示面板141上提供相应的视觉输出。虽然在图2中,触控面板151与显示面板141是作为两个独立的部件来实现终端100的输入和输出功能,但是在某些实施例中,可以将触控面板151与显示面板141集成而实现终端100的输入和输出功能。
[0061] 终端100还可包括RF电路160,可用于和基站进行收发信息或数据。通常,RF电路160包括但不限于天线、至少一个放大器、收发信机、耦合器、低噪声放大器(low noise amplifier,LNA)、双工器等。本发明实施例中,RF电路160可以通过无线通信与网络和其他电子设备通信,上述无线通信可以使用任一通信标准或协议。
[0062] 终端100还包括给各个部件供电的电源170(比如电池),电源可以通过电源管理系统与处理器110逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗等功能。
[0063] 终端100还可以包括音频电路180、扬声器181、麦克风182可提供用户与终端之间的音频接口。音频电路180可将接收到的音频数据转换后的电信号传输到扬声器181,由扬声器181转换为声音信号输出;另一方面,麦克风182将收集的声音信号转换为电信号,由音频电路180接收后转换为音频数据,再将音频数据输出处理器110处理后输出,或者将音频数据输出至存储器120以便进一步处理。
[0064] 终端100还可包括一个或多个传感器,例如压力传感器、重力加速度传感器、接近光传感器等。当然,根据具体应用中的需要,上述终端100还可以包括摄像头等其它部件,由于这些部件不是本申请实施例中重点使用的部件,因此,在图1中没有示出,且不再详述。
[0065] 本领域技术人员可以理解,图1仅仅是终端的举例,并不构成对终端的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件。
[0066] 本发明提供的数据库文件加密方法和数据库文件解密方法的应用场景是,将本发明提供的加密方法和解密方法集成到软件工具开发包(Software Development Kit,SDK)中,然后将SDK集成到应用开发商开发的应用中,即在SQLCipher集成上述SDK,当用户在终端中下载集成了上述具有数据库文件加解密功能的SDK的应用时,现在的应用一般都需要用户注册,而且有些应用会涉及充值等交易,为了避免用户每次登录应用都需要输入用户名和密码等信息和保证涉及交易的用户的数据的安全性,可以采用本发明提供的方法对存储有这些敏感数据的数据库文件进行加密处理,从而可以保证数据库文件的安全性,进而保证敏感数据的安全性。此外,当检测到数据库文件时,通过内部调用SDK工具来读取加密的密钥信息,并利用解密出的密钥信息解密加密的数据库文件,以实现数据库文件的解密,无需用户手动输入密钥信息,在用户无感知的情况下就可以实现对数据库文件的解密,不仅简化了操作流程而且提高了用户体验。
[0067] 下面结合图1和上述描述的应用场景,参考图2-图17来描述根据本发明示例性实施方式提供的数据库文件加密方法和数据库文件解密方法。需要注意的是,上述应用场景仅是为了便于理解本发明的精神和原理而示出,本发明的实施方式在此方面不受任何限制。相反,本发明的实施方式可以应用于适用的任何场景。
[0068] 参考图2所示,为本发明实施例提供的数据库文件加密方法的流程示意图,在下文的介绍过程中,以将该方法应用在图1所示的终端100为例。该方法的具体实施流程如下:
[0069] S11、在加密任一应用涉及的数据库文件时,判断该应用的指定目录中是否存在加密的密钥信息;若是则执行步骤S12;否则执行步骤S13。
[0070] 本发明中加密的密钥信息为根据终端的设备指纹信息和该应用的应用指纹信息对所述密钥信息进行加密得到的,后续详细介绍之。
[0071] 具体地,本发明中的应用的指定目录可以根据实际情况而定,本发明对此不进行限定。
[0072] S12、从读取到的所述加密的密钥信息中解密出密钥信息,并利用解密出的密钥信息加密所述数据库文件。
[0073] 在步骤S11判断结果为是时,表明该应用的指定目录中存储有加密的密钥信息,也就是说之前已执行过密钥信息的加密及存储过程。
[0074] 具体地,可以通过内部调用getTerminalKey()函数读取所述加密的密钥信息。具体实施时,通过在SQLCipher的SQLiteOpenHelper类中添加getTerminalKey()函数,该函数用于调用密钥生成工具SDK中TerminalCypto类的ReceiveTerminalKey()函数来读取密钥信息,并赋值给变量password,用于后续的加解密数据库db文件,无需在数据库操作函数中直接传递密钥信息。
[0075] 在SQLiteOpenHelper类中,重载了getWritableDatabase(char[]password)和getReadableDatabase(String  password),去掉了password入参,改为getWritableDatabase()和getReadableDatabase(),函数内部调用getTerminalKey()函数获取赋值给password的加密的密钥信息。
[0076] 在SQLiteDatabase类中,重载了openOrCreateDatabase(String path,String password,CursorFactory factory,SQLiteDatabaseHookdatabaseHook),同上述一样,去掉password入参,改为openOrCreateDatabase(String path,Context context,SQLiteDatabase.CursorFactory factory,SQLiteDatabaseHook databaseHook),函数内部调用getTerminalKey()函数获取赋值给password的加密的密钥信息。
[0077] S13、随机产生密钥信息并利用产生的密钥信息加密所述数据库文件。
[0078] 本步骤中,在步骤S11检测到上述指定目录中未存储加密的密钥信息时,则随机生成一个密钥信息key2,实际应用中随机生成的密钥信息key2也是一个随机数。在生成该密钥信息key2后,将key2传递给SDK工具中的TerminalCypto类的ReceiveTerminalKey函数,SQLCipher中通过添加在SQLiteOpenHelper类中的getTerminalKey()函数来获取SDK中的密钥信息,而无需在数据库操作函数中直接传递密钥信息。
[0079] 通过执行步骤S11~S13的流程,针对任一应用,产生的密钥信息对数据库文件进行加密处理,从而保证了数据库文件中敏感数据的安全性,此外,为了防止密钥信息被窃取,本发明提出利用终端的设备指纹信息和该应用的应用指纹信息对密钥信息进行加密处理,然后将加密的密钥信息存储到该应用的指定目录中,从而提高了加密的密钥信息的防破解能力,进一步提高了加密的数据库文件中敏感数据的安全性。此外,采用本发明提供的密钥信息加密方法,实现了同一终端上不同的应用加密得到加密的密钥信息不同,且不同终端由于终端的设备指纹不同,故也保证了不同终端的同一应用的加密的密钥信息不同,由此提高了加密的密钥信息的防破解能力。
[0080] 较佳地,在执行步骤S13之后,还需要对随机产生的密钥信息进行加密处理,具体可以参考图3或图4所示的加密的流程,此外步骤S11中涉及的加密的密钥信息也是按照图3或图4所示的加密流程执行的,以下详细介绍之:
[0081] 一种可能的实施方式中,如图3所示,为本发明实施例提供的加密的密钥信息生成方法的流程示意图,可以包括以下步骤:
[0082] S21、获取终端的设备指纹信息和该应用的应用指纹信息。
[0083] S22、利用所述设备指纹信息和所述应用指纹信息对密钥信息进行加密处理得到加密的密钥信息。
[0084] 步骤S21和步骤S22中,可以利用AES加密算法对上述设备指纹信息和应用指纹信息加密处理,然后再利用加密得到的信息对密钥信息进行加密处理得到加密的密钥信息。步骤S21和S22中的密钥信息可以为步骤S11中涉及的密钥信息,也可以为步骤S13中随机产生的密钥信息。由于终端的设备指纹信息用于唯一标识终端,而应用的应用指纹信息用于唯一标识应用,则利用终端的设备指纹信息和应用指纹信息来加密密钥信息时,能够保证一个终端设备中一应用对应一个加密的密钥信息,提高了加密的密钥信息的安全性和破解难度,进而也就保证了利用密钥信息加密的数据库文件中敏感数据的安全性。
[0085] 另一种可能的实施方式中,为了进一步提高加密的密钥信息的安全性,还可以按照图4所示的流程对密钥信息进行加密得到加密的密钥信息,包括以下步骤:
[0086] S31、获取终端的设备指纹信息、该应用的应用指纹信息和随机数。
[0087] 本步骤中,可以按照图5所示的流程获取随机数,包括以下步骤:
[0088] S41、向应用的服务器发送随机数获取请求。
[0089] 本发明中随机数获取请求中携带有所述终端的终端标识和该应用的应用标识。
[0090] 具体地,为了进一步保证数据库文件的安全性,终端中的应用会向服务器发送随机数获取请求,服务器在接收到随机数获取请求后,根据终端标识、应用标识和随机数三者之间的对应关系,会确定是否为该应用生成随机数,若是则上述对应关系中必然存储有请求中携带的终端标识和应用的应用标识对应的随机数,然后将上述随机数进行加密处理,并将加密的随机数发送给终端。若确定出上述对应关系中未存储有请求中携带的终端标识和应用标识,则表明未为该终端中的该应用生成随机数,则表明该随机数获取请求为第一次请求,则为该终端中该应用随机生成一个随机数,然后对该随机数进行加密处理并将加密后的随机数发送给终端。
[0091] S42、判断终端是否成功接收到服务器下发的随机数;若是则执行步骤S43;若否,则执行步骤S47。
[0092] 具体地,可以通过检测终端是否向服务器发送上述获取请求的响应消息,响应消息中的具体内容可以由应用与服务器进行协商而定,由此可以根据响应消息来确定是否成功接收到服务器下发的随机数。
[0093] S43、获取服务器下发的随机数。
[0094] 基于此,在成功接收时,可以获取到服务器下发的随机数。在成功接收之后,为了避免多次向服务器获取随机数而导致的应用与服务器交互太多所造成的处理资源浪费,本发明提出在获取到随机数后,还需要执行步骤S44~S46所示的存储过程。
[0095] S44、判断终端是否具有安全元件SE权限,若是,则执行步骤S45;否则执行步骤S46。
[0096] S45、在确定出所述SE中未存储随机数时,将接收到的随机数用白盒进行加密并将加密后的随机数存储到SE中。
[0097] 具体地,为了避免多次向服务器获取随机数,本发明在获取到随机数中,会判断是否具有SE权限,若有则将获取到的随机数存储到SE中,由于SE权限是比较难拿到的,当该终端具有SE权限时表明该终端对安全性要求较高,而由于SE权限较高,相应其安全性也较高,故将随机数存储到SE中,会加大随机数的安全性,进而也就加大了加密的密钥信息的破解难度。此外,为了进行一步提高加密的密钥信息的破解难度,本发明在将SE中写入随机数之前,采用白盒加密的方法对随机数进行加密处理然后将加密的随机数存到SE中。若SE中存储有该应用的随机数,则可以利用加密的随机数覆盖SE中存储的该应用的随机数。
[0098] S46、在确定出数据库文件开始位置未存储随机数时,将接收到的随机数用白盒进行加密并将加密后的随机数存储到数据库文件开始位置处。
[0099] 当终端不具备SE权限时,为了避免多次向服务器获取随机数,本发明在获取到随机数中,还会判断该应用对应的数据库文件的开始位置是否存储有随机数,若不存在则将接收到的随机数存储到数据库文件的开始位置,为了进一步提高加密的密钥信息的破解难度,在将随机数存储到数据库文件的开始位置时,可以先对随机数进行白盒加密处理,然后将加密处理后的随机数存储到数据库文件的开始位置。当数据库文件中存储有该应用的随机数时,则利用接收到的随机数更新数据库文件开始位置存储的该应用的随机数。
[0100] S47、确定安全元件SE中是否存储有随机数;若是则执行步骤S48;否则执行步骤S49。
[0101] 当步骤S42未成功接收到服务器下发的随机数时,表明可能因为网络异常导致终端无法收到服务器下发的随机数,则此时判断SE中是否存储有该应用对应的随机数,若存在则从SE中提取出该应用的随机数。
[0102] S48、从SE中获取随机数。
[0103] S49、确定数据库文件开始位置是否存储有随机数,若是,则执行步骤S410;否则再次执行步骤S41。
[0104] S410、从数据库文件开始位置获取所述随机数。
[0105] 步骤S49~S410中,当SE中未存储有该应用的随机数,则判断数据库文件的开始位置是否存储有该应用的随机数,若存在则从上述开始位置提取该应用对应的随机数,由此通过执行步骤S41~S410可以获取到随机数。
[0106] 需要说明的是,步骤S41~S410所示的步骤可以每加密一次数据库文件就向服务器请求一次随机数,这样可以保证随机数的动态下发,进而保证加密的密钥信息的动态变化,从而大大提高了加密的密钥信息的安全性,进而也就提升了数据库文件的防破解难度。
[0107] 实际应用中,为了避免应用与服务器之间频繁交互所带来的终端处理资源消耗较大,针对一个应用,终端一般为该应用向该应用的服务器仅发送一次随机数获取请求,即步骤S41仅执行一次,当需要获取随机数时只需执行步骤S47~S410来获取随机数。
[0108] 通过采用服务器下发的随机数来加密用于加密数据库文件的密钥信息,避免了所有与加密的密钥信息生成相关的参数全部存储在本地,服务器端针对一终端设备一应用分配的Rand_GUID存储在服务器端,只有在特殊情况如网络不通才会从终端本地SE或数据库文件开始位置备份中提取用白盒加密的Rand_GUID,在很大程度上提升了安全性。
[0109] S32、利用设备指纹信息、应用指纹信息、随机数和预置的子密钥对密钥信息进行加密处理得到加密的密钥信息。
[0110] 本步骤中,可以利用SHA2算法、AES算法和HMAC算法来得到加密的密钥信息。具体地,可以按照图6所示的方法执行步骤S32,包括以下步骤:
[0111] S51、根据设备指纹信息、所述应用指纹信息、随机数和预置的子密钥,生成根密钥。
[0112] 具体地,可以根据设备指纹信息、应用指纹信息、随机数和预置的子密钥,利用SHA2(SHA2-256)算法生成根密钥。例如,以设备指纹信息记为deviceFingerprint、应用指纹信息记为appFingerprint、随机数记为Rand_GuID,以及预置的子密钥包括d1、d2和d3为例进行说明,则可以按照下述公式生成根密钥key1:
[0113] key1=SHA2(d1|d2|d3|deviceFingerprint|appFingerprint|Rand_GuID)  (1)[0114] S52、利用根密钥对所述密钥信息进行加密处理得到第一加密信息。
[0115] 具体地,可以利用AES算法和根密钥key1对密钥信息进行加密处理得到第一加密信息cipher1,参考下述公式:
[0116] cipher1=AESENkey1(key2)  (2)
[0117] S53、利用根密钥对第一加密信息、所述设备指纹信息和所述应用指纹信息进行加密处理,得到第二加密信息。
[0118] 本步骤中,可以利用HMAC和根密钥对第一加密信息、所述设备指纹信息和所述应用指纹信息进行加密处理,得到第二加密信息cipher2,参考下述公式:
[0119] cipher2=HMACkey1(cipher|deviceFingerprint|appFingerprint)  (3)[0120] 实际应用中,可以取HMAC结果,即等式右边的前64比特作为cipher2的值,即第二加密信息。
[0121] S54、利用预设的第一混淆参数对所述第二加密信息、所述设备指纹信息和所述应用指纹信息进行加密处理,得到第三加密信息。
[0122] 具体地,可以利用AES算法执行步骤S54,可以按照公式(4)得到第三加密信息cipher3:
[0123] cipher3=AESENK(cipher1|deviceFingerprint|appFingerprint)  (4)[0124] 具体地,公式(4)中K为预设的第一混淆参数,可以根据实际情况而定。
[0125] S55、对所述第二加密信息和所述第三加密信息进行或处理得到加密的密钥信息。
[0126] 本步骤中,可以按照公式(5)获得加密的密钥信息cipher:
[0127] cipher=cipher3|cipher2  (5)
[0128] S33、将加密的密钥信息存储到该应用的指定目录中。
[0129] 本步骤中,基于步骤S51~S55即可得到加密的密钥信息cipher,并将其存储到该应用的指定目录中。由于终端的设备指纹信息用于唯一标识终端,而应用的应用指纹信息用于唯一标识应用,再基于服务器为该终端该应用下发的随机数,则利用终端的设备指纹信息、应用指纹信息和服务器下发的随机数加密的密钥信息时,保证了一终端设备中一个应用对应一个随机数再对应一个加密的密钥信息,大大提高了加密的密钥信息的安全性和破解难度,进一步保证了利用密钥信息加密的数据库文件中敏感数据的安全性。
[0130] 较佳地,为了保证应用中指定目录存储的加密的密钥信息的准确性,本发明提出在步骤S11判断结果为是之后,在执行步骤S12之前,还包括:
[0131] 对所述加密的密钥信息的完整性校验通过。
[0132] 具体地,通过对加密的密钥信息进行完整性校验,可以在一定程度上提高数据库文件的安全性。当对指定目录中存储的加密的密钥信息进行完整性校验时,可以按照图7所示的流程对加密的密钥信息进行完整性校验,可以包括以下步骤:
[0133] S61、将加密的密钥信息拆分为第四加密信息和第五加密信息。
[0134] 具体地,还以加密的密钥信息为cipher为例进行说明,则将cipher拆分成第四密钥信息cipher4和第五密钥信息cipher5。
[0135] S62、利用预设的第一混淆参数对所述第五加密信息进行解密,并解密出第六加密信息、终端的设备指纹信息和应用的应用指纹信息。
[0136] 本步骤中,利用AES解密算法执行步骤S62,即将cipher5利用第一混淆参数K进行AES解密,可以得到第六加密信息cipher6、解密出的设备指纹信息deviceFingerprint1、解密出的应用指纹信息appFingerprint1。’
[0137] S63、利用根密钥对解密出的第六加密信息、终端的设备指纹信息和应用的应用指纹信息进行加密处理得到第七加密信息。
[0138] 基于步骤S62,可以利用HMAC算法执行步骤S63,可以按照公式(6)得到第七加密信息cipher2‘:
[0139] cipher2‘=HMACkey1(cipher1|deviceFingerprint1|appFringerprint1)  (6)[0140] S64、判断第七加密信息和第四加密信息是否一致,若是则执行步骤S65;否则执行步骤S66。
[0141] 若确定出公式(6)得到的第七加密信息与拆分出的第四加密信息一致,即cipher2‘=cipher4,则执行步骤S65,即加密的密钥信息完整,否则加密的密钥信息不完整。
[0142] S65、确定对所述加密的密钥信息的完整性校验通过。
[0143] S66、确定对所述加密的密钥信息的完整性校验不通过。
[0144] 通过执行图7所示的流程即可确定出加密的密钥信息是否完整,当确定出加密的密钥信息不完整时,还需要执行步骤S13。
[0145] 优选地,本发明提供的方法还可以包括图8所示的流程,包括以下步骤:
[0146] S71、在检测到应用的版本更新时,从所述加密的密钥信息中解密出密钥信息。
[0147] 本步骤中,在检测到应用的版本更新时,相当于应用发生了变化,故需要利用更新后的应用的应用指纹信息来重新加密密钥信息。故需要先从加密的密钥信息中解密出密钥信息。具体可以根据生成加密的密钥信息的过程的逆过程来执行解密过程,从而解密出密钥信息。
[0148] S72、确定更新后的应用的应用指纹信息。
[0149] 具体地,可以重新获取更新后的应用的dex文件、证书和更新后的应用的包名,然后再利用更新后的dex文件、证书和更新后的应用的包名确定更新后的应用的应用指纹信息。
[0150] S73、根据获取到的终端的设备指纹信息、所述应用指纹信息、获取到的随机数和预置的子密钥,重新对所述密钥信息进行加密处理得到新的加密的密钥信息。
[0151] 本步骤中,在确定出更新后的应用的应用指纹信息后,在利用图4所示的流程重新对步骤S71中解密出的密钥信息进行加密处理,得到新的加密的密钥信息。需要说明的是,步骤S73中的随机数可以从SE或者数据库文件开始位置获取到的。
[0152] S74、将所述新的加密的密钥信息存储到所述应用的指定目录中。
[0153] 在基于应用的新版本确定出新的加密的密钥信息后,将新的加密的密钥信息存储到更新后的应用的指定目录中。
[0154] 较佳地,可以按照图9所示的方法获取图3、图4和图8中的终端的设备指纹信息,包括以下步骤:
[0155] S81、获取终端的IMEI、蓝牙多媒体访问控制地址BluetoothMacAddress和所述终端使用的操作系统的版本号。
[0156] S82、根据预设的第二混淆参数、所述IMEI、所述BluetoothMacAddress和所述操作系统的版本号,生成所述终端的设备指纹信息。
[0157] 步骤S81~S82中,可以按照公式(7)确定终端的设备指纹信息:
[0158] SHA2(IMEI|BluetoothMacAddress|AndroidID|K5)  (7)
[0159] 本发明中终端的设备指纹信息用于唯一标识终端,不同的终端其设备指纹信息不同。实际应用中,可以将公式(7)中的前64比特作为终端的设备指纹信息,由于不同的终端其国际移动设备识别码(International Mobile Equipment Identity,IMEI)、BluetoothMacAddress和操作系统的版本号均不相同,故可以得出不同终端的设备指纹信息不同。公式(7)中K5为第二混淆参数,可以由实际情况而定。
[0160] 可选地,可以按照图10所示的流程确定应用的应用指纹信息,包括以下步骤:
[0161] S91、获取所述应用的dex文件、证书和所述应用的包名。
[0162] S92、根据预设的第三混淆参数、所述dex文件、证书和所述包名,生成所述应用的应用指纹信息。
[0163] 步骤S91~S92中,可以按照公式(8)确定应用的应用指纹信息:
[0164] SHA2(dex|certificate|apk包名|K4)  (8)
[0165] 本发明中应用的应用指纹信息用于唯一应用,不同的应用其应用指纹信息不同。实际应用中,可以取公式(8)中的前64比特作为应用的指纹信息,由于不同的应用的dex文件、证书和包名均不相同,则可以得出不同应用的应用指纹信息不同。本发明公式(8)中的K4为第三混淆参数,可以根据实际情况而定。
[0166] 本发明提供的数据库文件加密方法,在加密任一应用涉及的数据库文件时,判断该应用的指定目录中是否存在加密的密钥信息,其中,所述加密的密钥信息为根据终端的设备指纹信息和该应用的应用指纹信息对所述密钥信息进行加密得到的;若是,则从读取到的所述加密的密钥信息中解密出密钥信息,并利用解密出的密钥信息加密所述数据库文件。通过采用上述方法,利用密钥信息对数据库文件进行加密,由于该密钥信息是利用终端的设备指纹信息和应用的应用指纹信息对密钥信息进行加密处理的,故提高了加密的密钥信息的破解难度,进而也就保证了加密的数据库文件的安全性。
[0167] 基于同一发明构思,本发明实施例还提供了一种数据库文件解密方法,参考图11所示,以将该方法应用在图1所示的终端100为例进行说明,该数据库文件解密方法的具体实施流程如下:
[0168] S101、在接收到针对终端中应用的数据库文件的操作请求后,从所述应用的指定目录中获取加密的密钥信息。
[0169] 其中,所述加密的密钥信息为根据终端的设备指纹信息和该应用的应用指纹信息对所述密钥信息进行加密得到的。
[0170] 本步骤中,可以通过内部调用getTerminalKey()函数读取所述加密的密钥信息。具体实施时,通过在SQLCipher的SQLiteOpenHelper类中添加getTerminalKey()函数,该函数用于调用密钥生成工具SDK中TerminalCypto类的ReceiveTerminalKey()函数来读取密钥信息,并赋值给变量password,用于后续的加解密数据库db文件,无需在数据库操作函数中直接传递密钥信息。
[0171] 具体地,加密的密钥信息具体可以参考图3或图4所示的流程获得,在此不再重复赘述。
[0172] S102、从所述加密的密钥信息中解密出所述密钥信息。
[0173] 具体地,可以按照图12所示的方法解密出密钥信息,包括以下步骤:
[0174] S111、将加密的密钥信息拆分成第一密文信息和第二密文信息。
[0175] 本步骤中,参考图6所示的加密操作,按照该加密操作的解密过程,先将加密的密钥信息cipher拆分成第一密文信息和第二密文信息,若执行解密操作的应用为合法应用,不存在攻击工具,则拆分出的第一密文信息应该为步骤S53中的第二加密信息cipher2,第二密文信息应该为步骤S54中的第三加密信息cipher3。
[0176] S112、利用预设的第一混淆参数对所述第二密文信息进行解密处理,得到第三密文信息。
[0177] 本步骤中,利用第一混淆参数K对第二密文信息cipher3进行AES解密操作,可以解密出第三密文信息,同样若执行解密操作的应用为合法应用,不存在攻击工具,则解密出的第三密文信息cipher6应该为步骤S52中的第一加密信息cipher1。
[0178] S113、利用根密钥对所述第三密文信息进行解密处理,得到所述密钥信息。
[0179] 本步骤中,利用根密钥key1利用AES解密算法对第三密文信息进行解密处理,参考公式(9)所示:
[0180] key2=AESDEkey1(cipher6)  (9)
[0181] 若操作该应用属于合法应用,则第三密文信息cipher6=第一加密信息cipher1。
[0182] S103、利用所述密钥信息对数据库文件进行解密并对解密后的数据库文件进行操作。
[0183] 具体地,在解密完成后,返回解密出的密钥信息key2及状态码0。然后利用解密出的密钥信息key2对加密的数据库进行解密操作。然后SQLCipher中数据库函数通过调用getTerminalKey函数便可获取key2对数据库文件进行增删改查操作。用户在调用SQLCipher这几个函数执行数据库增删改查等相关操作时,无需再传入password参数,密钥信息的生成、管理和调用等完全对用户无感知,从而简化了用户操作流程。
[0184] 较佳地,在从所述加密的密钥信息中解密出所述密钥信息之前,还包括:
[0185] 对所述加密的密钥信息的完整性校验通过。
[0186] 具体地,可以参考图7所示的流程对加密的密钥信息进行完整性校验,在此不再详细描述。
[0187] 优选地,在从所述应用的指定目录中获取加密的密钥信息之前,还包括图13所示的流程,包括以下步骤:
[0188] S121、获取终端的设备指纹信息。
[0189] 实际应用中,如果每次都要实时确定终端的设备指纹信息,可能会造成终端的处理资源的浪费,故在确定加密的密钥信息过程中,在确定出终端的设备指纹信息后,将终端的设备指纹信息进行存储。
[0190] S122、对所述设备指纹信息验证通过。
[0191] 本步骤中,在执行步骤S122时,通过再次执行步骤9所示的流程,确定终端当前的设备指纹信息,然后判断当前确定出的设备指纹信息与之前存储的设备指纹信息是否一致,若一致则对终端的设备指纹信息验证通过。只有在对终端的设备指纹信息验证通过后才会执行解密操作,即步骤S102。若对设备指纹信息验证不通过,则返回空值及相应状态码。
[0192] 进一步地,在对所述终端的设备指纹信息验证通过之后,在从所述应用的指定目录中获取加密的密钥信息之前,还包括图14所示的流程,包括以下步骤:
[0193] S131、获取应用的应用指纹信息。
[0194] 实际应用中,如果每次都要实时确定应用的应用指纹信息,可能会造成终端的处理资源的浪费,故在确定加密的密钥信息过程中,在确定出应用的应用指纹信息后,将应用的应用指纹信息进行存储。
[0195] S132、对所述应用指纹信息验证通过。
[0196] 本步骤中,在执行步骤S132时,通过再次执行步骤10所示的流程,确定应用当前的应用指纹信息,然后判断当前确定出的应用指纹信息与之前存储的应用指纹信息是否一致,若一致则对应用指纹信息验证通过。只有在对应用指纹信息验证通过后才会执行解密操作,即步骤S102。
[0197] 通过执行本发明提供的数据库文件解密方法,在接收到针对终端中应用的数据库文件的操作请求后,从所述应用的指定目录中获取加密的密钥信息,其中,所述加密的密钥信息为根据终端的设备指纹信息和该应用的应用指纹信息对所述密钥信息进行加密得到的;从所述加密的密钥信息中解密出所述密钥信息;利用所述密钥信息对数据库文件进行解密并对解密后的数据库文件进行操作。采用上述方法,通过内部调用getTerminalKey()函数读取加密的密钥信息,然后从加密的密钥信息中解密出密钥信息,再利用解密出的密钥信息对加密的数据库文件进行解密,从而在解密成功后对数据库文件进行操作,可以做到用户无感知的获取加密的密钥信息并解密出密钥信息,简化了用户操作流程。
[0198] 本发明通过在SQLCipher上集成密钥管理SDK,结合设备指纹信息、应用指纹信息和服务器下发的随机数对用于加密数据库文件的密钥信息进行加密存储,简化用户调用相关数据操作函数,无需传入密钥参数,简化了用户使用SQLCipher的操作,从而做到数据库加解密操作对用户无感知。
[0199] 基于同一发明构思,本发明实施例中还提供了一种数据库文件加密装置,由于上述装置解决问题的原理与数据库文件加密方法相似,因此上述装置的实施可以参见方法的实施,重复之处不再赘述。
[0200] 如图15所示,为本发明实施例提供的数据库文件加密装置的结构示意图,包括:
[0201] 判断单元141,用于在加密任一应用涉及的数据库文件时,判断该应用的指定目录中是否存在加密的密钥信息,其中,所述加密的密钥信息为根据终端的设备指纹信息和该应用的应用指纹信息对所述密钥信息进行加密得到的;
[0202] 加解密单元142,用于在所述判断单元141的判断结果为是时,则从读取到的所述加密的密钥信息中解密出密钥信息,并利用解密出的密钥信息加密所述数据库文件。
[0203] 一种可能的实施方式中,所述装置,还包括:
[0204] 检验单元143,用于在所述判断单元141判断结果为是,在所述加解密单元142从所述加密的密钥信息中解密出密钥信息之前,对所述加密的密钥信息的完整性校验通过。
[0205] 优选地,所述装置,还包括:
[0206] 第一加密单元144,用于若上述判断单元141判断在所述指定目录中不存在加密的密钥信息时,或者所述校验单元143对所述加密的密钥信息的完整性校验不通过时,则随机产生密钥信息并利用产生的密钥信息加密所述数据库文件。
[0207] 再一种可能的实施方式中,本发明提供的数据库文件加密装置,还包括:
[0208] 获取单元145,用于获取所述终端的设备指纹信息和该应用的应用指纹信息;
[0209] 第二加密单元146,用于利用所述设备指纹信息和所述应用指纹信息对密钥信息进行加密处理得到加密的密钥信息。
[0210] 优选地,所述获取单元145,还用于获取所述终端的设备指纹信息、该应用的应用指纹信息和随机数;
[0211] 所述第二加密单元146,还用于利用所述设备指纹信息、应用指纹信息、随机数和预置的子密钥对密钥信息进行加密处理得到加密的密钥信息;
[0212] 所述装置,还包括:
[0213] 存储单元147,用于将所述加密的密钥信息存储到该应用的指定目录中。
[0214] 较佳地,所述第二加密单元146,具体用于根据所述设备指纹信息、所述应用指纹信息、随机数和预置的子密钥,生成根密钥;利用所述根密钥对所述密钥信息进行加密处理得到第一加密信息;利用所述根密钥对所述第一加密信息、所述设备指纹信息和所述应用指纹信息进行加密处理,得到第二加密信息;利用预设的第一混淆参数对所述第二加密信息、所述设备指纹信息和所述应用指纹信息进行加密处理,得到第三加密信息;对所述第二加密信息和所述第三加密信息进行或处理得到加密的密钥信息。
[0215] 优选地,所述加解密单元,具体用于通过内部调用getTerminalKey()函数读取所述加密的密钥信息。
[0216] 优选地,所述校验单元143,具体用于按照下述方法确定对所述加密的密钥信息的完整性校验通过:将所述加密的密钥信息拆分为第四加密信息和第五加密信息;利用预设的第一混淆参数对所述第五加密信息进行解密,并解密出第六加密信息、终端的设备指纹信息和应用的应用指纹信息;利用根密钥对解密出的第六加密信息、终端的设备指纹信息和应用的应用指纹信息进行加密处理得到第七加密信息;若确定出所述第七加密信息和第四加密信息一致,则确定对所述加密的密钥信息的完整性校验通过。
[0217] 再一种可能的实施方式中,本发明提供的数据库文件加密装置中,[0218] 加解密单元142,还用于在检测到应用的版本更新时,从所述加密的密钥信息中解密出密钥信息;
[0219] 上述装置,还包括:
[0220] 确定单元148,用于确定更新后的应用的应用指纹信息;
[0221] 所述第二加密单元146,还用于根据获取到的终端的设备指纹信息、所述应用指纹信息、获取到的随机数和预置的子密钥,重新对所述密钥信息进行加密处理得到新的加密的密钥信息;
[0222] 所述存储单元147,还用于将所述新的加密的密钥信息存储到所述应用的指定目录中。
[0223] 再一种可能的实施方式中,本发明提供的数据库文件加密装置,还包括:
[0224] 获取单元145,还用于按照下述方法获取随机数:向该应用的服务器发送随机数获取请求,所述请求中携带有所述终端的终端标识和该应用的应用标识,以使所述服务器根据终端标识、应用标识和随机数三者之间的对应关系,确定该应用的随机数;在确定出成功接收到服务器下发的随机数后,获取所述随机数;若确定出未成功接收到服务器下发的随机数,则确定安全元件SE中是否存储有随机数,若是则从SE中获取随机数;若否,则在确定出数据库文件开始位置存储有随机数时,从所述数据库文件开始位置获取所述随机数。
[0225] 优选地,所述装置,还包括:
[0226] 处理单元149,用于在所述获取单元145在获取所述随机数之后,判断所述终端是否具有安全元件SE权限;若是,则在确定出所述SE中未存储随机数时,将接收到的随机数用白盒进行加密并将加密后的随机数存储到SE中;若否,则在确定出数据库文件开始位置未存储随机数时,将接收到的随机数用白盒进行加密并将加密后的随机数存储到数据库文件开始位置处。
[0227] 可选地,所述第二加密单元146,具体用于按照下述方法生成终端的设备指纹信息:获取终端的国际移动设备识别码IMEI、蓝牙多媒体访问控制地址BluetoothMacAddress和所述终端使用的操作系统的版本号;根据预设的第二混淆参数、所述IMEI、所述BluetoothMacAddress和所述操作系统的版本号,生成所述终端的设备指纹信息。
[0228] 可选地,所述第二加密单元146,具体用于按照下述方法生成应用的应用指纹信息:获取所述应用的dex文件、证书和所述应用的包名;根据预设的第三混淆参数、所述dex文件、证书和所述包名,生成所述应用的应用指纹信息。
[0229] 为了描述的方便,以上各部分按照功能划分为各模块(或单元)分别描述。当然,在实施本发明时可以把各模块(或单元)的功能在同一个或多个软件或硬件中实现。
[0230] 基于同一发明构思,本发明实施例中还提供了一种数据库文件解密装置,由于上述装置解决问题的原理与数据库文件解密方法相似,因此上述装置的实施可以参见方法的实施,重复之处不再赘述。
[0231] 如图16所示,为本发明实施例提供的数据库文件解密装置的结构示意图,包括:
[0232] 获取单元151,用于在接收到针对终端中应用的数据库文件的操作请求后,从所述应用的指定目录中获取加密的密钥信息,其中,所述加密的密钥信息为根据终端的设备指纹信息和该应用的应用指纹信息对所述密钥信息进行加密得到的;
[0233] 第一解密单元152,用于从所述加密的密钥信息中解密出所述密钥信息;
[0234] 第二解密单元153,用于利用所述密钥信息对数据库文件进行解密并对解密后的数据库文件进行操作。
[0235] 在一种可能的实施方式中,本发明提供的数据库文件解密装置,还包括:
[0236] 校验单元154,用于在所述第一解密单元152从所述加密的密钥信息中解密出所述密钥信息之前,对所述加密的密钥信息的完整性校验通过。
[0237] 在一种可能的实施方式中,本发明提供的数据库文件解密装置,还包括:
[0238] 第一验证单元155,用于在所述第一解密单元152从所述加密的密钥信息中解密出所述密钥信息之前,获取所述终端的设备指纹信息;并对所述设备指纹信息验证通过。
[0239] 在一种可能的实施方式中,本发明提供的数据库文件解密装置,还包括:
[0240] 第二验证单元156,用于在所述第一验证单元155对所述终端的设备指纹信息验证通过之后,在所述第一解密单元152从所述加密的密钥信息中解密出所述密钥信息之前,获取所述应用的应用指纹信息;并对所述应用指纹信息验证通过。
[0241] 优选地,所述第一解密单元152,具体用于将所述加密的密钥信息拆分成第一密文信息和第二密文信息;利用预设的第一混淆参数对所述第二密文信息进行解密处理,得到第三密文信息;利用根密钥对所述第三密文信息进行解密处理,得到所述密钥信息。
[0242] 基于同一发明构思,本发明实施例还提供一种通信设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序;所述处理器执行所述程序时实现如本发明实施例提供的任一项所述的数据库文件加密方法或数据库文件解密方法。
[0243] 此外,本申请实施例还提供了一种计算机可读存储介质,存储为执行上述处理器所需执行的计算机可执行指令,其包含用于执行上述处理器所需执行的程序。
[0244] 在一些可能的实施方式中,本发明提供的数据库文件加密方法或数据库文件解密方法的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在计算机设备上运行时,所述程序代码用于使所述计算机设备执行本说明书上述描述的根据本发明各种示例性实施方式的数据库文件加密方法中的步骤,或者数据库文件解密方法中的步骤,例如,所述计算机设备可以执行如图2所示的步骤S11~S13中数据库文件加密流程,或者执行如图11所示的步骤S101~S103中数据库文件解密流程。
[0245] 所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
[0246] 本发明的实施方式的用于数据库文件加密方法或数据库文件解密方法的程序产品可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在计算设备上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
[0247] 可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
[0248] 可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、有线、光缆、RF等等,或者上述的任意合适的组合。
[0249] 可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
[0250] 应当注意,尽管在上文详细描述中提及了装置的若干单元或子单元,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多单元的特征和功能可以在一个单元中具体化。反之,上文描述的一个单元的特征和功能可以进一步划分为由多个单元来具体化。
[0251] 此外,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
[0252] 本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
[0253] 本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0254] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0255] 这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0256] 尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
[0257] 显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。