一种系统分区关键数据的保护方法及系统与流程

文档序号:12467792阅读:168来源:国知局
一种系统分区关键数据的保护方法及系统与流程

本发明涉及终端设备技术领域,特别涉及一种系统分区关键数据的保护方法及系统。



背景技术:

近年来Android智能手机的普及率越来越高,用户体验也越来越好,不过系统安全问题一直是用户和运营商关注的重点,Google以及各手机方案提供商也在安全方面做了很多改善。如分区加密、安全版本号验证等方案。但是针对系统分区,由于分区文件太大,无法对其进行加密处理。目前Google只提供了DM-verity机制来保证系统分区的数据安全,而该机制是开源的项目,并且在某些特定条件下可以用adb命令关闭。这样,当系统分区里的某些数据文件被破解(如记录系统属性的文件),那么就相当于破解了整个系统,使得系统的安全性受到影响。

因而现有技术还有待改进和提高。



技术实现要素:

本发明要解决的技术问题在于,针对现有技术的不足,提供一种系统分区关键数据的保护方法及系统,实现在无需对整个系统分区进行加密的情况下保护系统分区的关键数据。

为了解决上述技术问题,本发明所采用的技术方案如下:

一种系统分区关键数据的保护方法,其包括:

在Bootloader启动时,获取系统分区文件携带的关键数据对应的验证表,其中,所述验证表包括数字签名、块地址以及Hash值;

采用预设的公钥或私钥解密所述数字签名得到第一验证值;

根据所述块地址和Hash值生成第二验证值,将第一验证值和第二验证值进行比较;

若第一验证值与第二验证值一致,则启动系统。

所述系统分区关键数据的保护方法,其中,所述若第一验证值与第二验证值一致,则启动系统具体包括:

若第一验证值与第二验证值一致,则根据所述块地址计算所述关键数据的当前Hash值;

将所述当前Hash值与所述Hash值进行比较,当所述当前Hash值与所述Hash值一致时,启动系统。

所述系统分区关键数据的保护方法,其中,所述在Bootloader启动时,获取系统分区文件携带的关键数据对应的验证表,其中,所述验证表包括数字签名信息、块地址以及Hash值之前还包括:

在编译系统文件时,生成记录有系统分区所有文件及其对应的块地址的映射文件;

根据所述映射文件确定所述关键数据对应的块地址,并计算所述块地址的Hash值;

根据所述块地址和Hash值生成第一验证值,并采用预设的私钥或公钥加密所述第一验证值得到所述数字签名;

将所述数字签名、块地址以及Hash值存于所述验证表,并将所述验证表追加至系统文件后面。

所述系统分区关键数据的保护方法,其中,所述根据所述块地址和Hash值生成第一验证值,并采用预设的私钥或公钥加密所述第一验证值得到所述数字签名具体包括:

将所述Hash值放置于所述块地址后生成第一待验证值,并计算所述第一待验证值的Hash值以得到第一验证值;

采用预设的私钥或公钥加密所述第一验证值得到所述数字签名,其中,所述私钥为所述公钥对应的私钥。

所述系统分区关键数据的保护方法,其中,所述将所述数字签名信息、块地址以及Hash值存于所述验证表,并将所述验证表追加至系统文件后面之后还包括:

将所述私钥或公钥对应的公钥或私钥以数组的形式编译到Bootloader,以使得在Bootloader启动时采用所述公钥或私钥解密所述数字签名。

一种系统分区关键数据的保护系统,其包括:

获取模块,用于在Bootloader启动时,获取系统分区文件携带的关键数据对应的验证表,其中,所述验证表包括数字签名、块地址以及Hash值;

解密模块,用于采用预设的公钥或私钥解密所述数字签名得到第一验证值;

比较模块,用于根据所述块地址和Hash值生成第二验证值,将第一验证值和第二验证值进行比较;

执行模块,用于当第一验证值与第二验证值一致时,启动系统。

所述系统分区关键数据的保护系统,其中,所述执行模块具体包括:

计算单元,用于当第一验证值与第二验证值一致时,根据所述块地址计算所述关键数据的当前Hash值;

执行单元,用于将所述当前Hash值与所述Hash值进行比较,当所述当前Hash值与所述Hash值一致时,启动系统。

所述系统分区关键数据的保护系统,其还包括:

生成模块,用于在编译系统文件时,生成记录有系统分区所有文件及其对应的块地址的映射文件;

计算模块,用于根据所述映射文件确定所述关键数据对应的块地址,并计算所述块地址的Hash值;

加密模块,用于根据所述块地址和Hash值生成第一验证值,并采用预设的私钥或公钥加密所述第一验证值得到所述数字签名;

存储模块,用于将所述数字签名、块地址以及Hash值存于所述验证表,并将所述验证表追加至系统文件后面。

所述系统分区关键数据的保护系统,其中,所述加密模块具体包括:

生成单元,用于将所述Hash值放置于所述块地址后生成第一待验证值,并计算所述第一待验证值的Hash值以得到第一验证值;

加密单元,用于采用预设的私钥或公钥加密所述第一验证值得到所述数字签名,其中,所述私钥为所述公钥对应的私钥。

所述系统分区关键数据的保护系统,其还包括:

编译模块,用于将所述私钥或公钥对应的公钥或私钥以数组的形式编译到Bootloader,以使得在Bootloader启动时采用所述公钥或私钥解密所述数字签名。

有益效果:与现有技术相比,本发明提供了一种系统分区关键数据的保护方法及系统,所述方法包括:在Bootloader启动时,获取系统分区文件携带的关键数据对应的验证表,其中,所述验证表包括数字签名、块地址以及Hash值;采用预设的公钥或私钥解密所述数字签名得到第一验证值;根据所述块地址和Hash值生成第二验证值,将第一验证值和第二验证值进行比较;若第一验证值与第二验证值一致,则启动系统。本发明通过对系统关键数据的验证,而不是先进行整个系统文件分区校验后,再加加载系统文件;从而节省了读取整个文件系统分区的时间,大大减少了系统启动时间,同时对系统进行了保护。

附图说明

图1为本发明提供的系统分区关键数据的保护方法较佳实施的流程图。

图2为本发明提供的系统分区关键数据的保护系统的结构原理图。

具体实施方式

本发明提供一种系统分区关键数据的保护方法及系统,为使本发明的目的、技术方案及效果更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

本发明中,使用用于表示元件的诸如“模块”、“部件”或“单元”的后缀仅为了有利于本发明的说明,其本身并没有特定的意义。因此,模块”、“部件”或“单元”可以混合地使用。

终端设备可以以各种形式来实施。例如,本发明中描述的终端可以包括诸如移动电话、智能电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、导航装置等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。然而,本领域技术人员将理解的是,除了特别用于移动目的的元件之外,根据本发明的实施方式的构造也能够应用于固定类型的终端。

下面结合附图,通过对实施例的描述,对发明内容作进一步说明。

请参照图1,图1为本发明提供的系统分区关键数据的保护方法的较佳实施例的流程图。所述方法包括:

S101、在Bootloader启动时,获取系统分区文件携带的关键数据对应的验证表,其中,所述验证表包括数字签名、块地址以及Hash值;

S102、采用预设的公钥或私钥解密所述数字签名得到第一验证值;

S103、根据所述块地址和Hash值生成第二验证值,将第一验证值和第二验证值进行比较;

S104、若第一验证值与第二验证值一致,则启动系统。

本实施例提供在Bootloader启动时,对系统分区文件携带的关键数据的验证表进行解析以得到数字签名、块地址以及Hash值;通过对数字签名解密得到第一验证值,并根据块地址以及Hash值生成第二验证值;通过第一验证值和第二验证值的比较来判定所述关键数据是否被篡改,进行判定是否启动系统。本发明通过对系统关键数据的验证,而不是先进行整个系统文件分区校验后,再加加载系统文件;从而节省了读取整个文件系统分区的时间,大大减少了系统启动时间,同时对系统进行了保护。

具体的来说,在所述步骤S101中,所述关键数据预设设置的系统分区文件的一部分,例如,记录系统属性的文件。也就是说,所述关键数据也为系统分区文件。

在所述步骤S102中,所述公钥或私钥为Bootloader启动程序中携带的,用于解密所述数字签名。所述公钥或私钥与系统编译过程中对所述第一验证值进行加密的私钥或公钥相对应。

在所述步骤S103中,所述根据块地址(Key Blocks)和Hash值(Key Hash)为系统分区文件中的验证表中携带的块地址和Hash值。所述根据所述块地址和Hash值生成第二验证值生成第二验证值具体为将所述Hash值放置于块地址之后形成第二待验证值(Key Blocks+Key Hash),之后openssl库中提供的EVP系列函数来计算这段地址的SHA256哈希值记为第二验证值。在实际应用中,当所述块地址(Key Blocks)对应的内容太大时,可以采用则采用以4K为单位分段读取内容,并分别每段内容输入到EVP函数中,最终输出一个SHA256哈希值。由于所述分段输入得到的SHA256哈希值等同于对整段内容直接计算SHA256哈希值,从而将所述分段输入得到的SHA256哈希值记为第二验证值。值得说明的,所述根据块地址和Hash值生成第二验证值的方法与第一验证值的生成方法一样,这样可以根据第一验证值和第二验证值的一致性来判断系统分区关键数据文件是否被篡改,进而判断系统的安全性。

在所述步骤S104中,所述第一验证值与第二验证一致,认为该关键数据文件是没有被篡改的,可以正常启动系统。当然,当第一验证值与第二验证不一致时,判定关键数据文件被篡改,自动关机。

在本发明的一个实施例中,所述步骤S104:若第一验证值与第二验证值一致,则启动系统具体可以包括:

S1041、若第一验证值与第二验证值一致,则根据所述块地址计算所述关键数据的当前Hash值;

S1042、将所述当前Hash值与所述Hash值进行比较,当所述当前Hash值与所述Hash值一致时,启动系统。

本实施例在第一验证值和第二验证值一致的情况下,将验证表携带的Hash值与根据块地址计算的当前Hash值进行比较,进而判定所述关键数据的存放地址是否发生变化,在关键数据的存放地址未发生变化时,正常启动系统。这样在关键数据未篡改以及存放地址未发生变化时才正常启动系统,进一步提高了系统的安全。

实施例一

本实施例提供了一种系统分区关键数据的保护方法,其具体包括:

S201、在编译系统文件时,生成记录有系统分区所有文件及其对应的块地址的映射文件;

S202、根据所述映射文件确定所述关键数据对应的块地址,并计算所述块地址的Hash值;

S203、根据所述块地址和Hash值生成第一验证值,并采用预设的私钥或公钥加密所述第一验证值得到所述数字签名;

S204、将所述数字签名、块地址以及Hash值存于所述验证表,并将所述验证表追加至系统文件后面;

S205、在Bootloader启动时,获取系统分区文件携带的所述关键数据对应的验证表;

S206、采用预设的公钥和私钥解密所述数字签名得到第一验证值;

S207、根据所述块地址和Hash值生成第二验证值,将第一验证值和第二验证值进行比较;

S208、若第一验证值与第二验证值一致,则启动系统。

本实施提供的系统分区关键数据的保护方法中,首先在编译系统分区文件时生成记录有系统分区所有文件及其对应的块地址的映射文件,并根据所述映射文件确定所述关键数据对应的块地址,根据所述块地址生成第一验证值,在采用公钥或私钥加密生成数字签名。在Bootloader启动时,获取系统分区文件携带的数字签名,块地址和Hash值,并采用私钥或公钥解密数字签名得到第一验证值,同时根据块地址和Hash值生成第二验证值,根据第一验证值和第二验证值判断关键数据是否被篡改,进而判断系统是否安全。

具体地来说,在所述步骤S201中,所述在编译系统文件时,生成记录系统分区所有文件以及其对应块地址的映射文件(map文件),所述map文件内记载着系统分区文件的名称以及其对应的块地址。也就是说,所述map文件中记录有系统分区文件名称、块地址,以及系统系统文件名称与块地址之间的对应关系。在所述map文件中,根据系统分区文件名称可以确定其对应的块地址,根据块地址也可以确定其对应的系统分区文件名称。这样可以从所述map文件中解析出关键数据文件对应的块地址。在实际应用中,所述map文件的内容摘选可以为:

/system/xbin/tcpdump 293974-294294

/system/xbin/taskstats 293969-293972

/system/xbin/su 293965-293967

/system/xbin/strace 293801-293963

/system/xbin/sqlite3293781-293799

/system/xbin/simpleperf 293680-293779。

在所述步骤S202中,所述块地址Key Blocks通常是以xxx-xxx格式记录的一段地址范围。所述计算所述块地址的Hash值可以采用openssl库中提供的EVP系列函数来计算这段地址的SHA256哈希值,如果这段地址的内容太大,则采用以4K为单位分段读取内容,输入到EVP函数中,最终输出一个SHA256哈希值,其最终结果等同于对整段内容直接计算SHA256哈希值。所述使用EVP计算SHA256哈希值的伪代码可以为:

在所述步骤S203中,所述根据所述块地址和Hash值生成第一验值可以采用RSA2048算法确定第一验证值,再采用预先生成的私钥或公钥对所述第一验证值加密得到数字签名(Signature)。所述数字签名(Signature)的计算方法采用标准的RSA签名过程,其具体为:获取要签名的内容[Key Blocks+Key Hash],再用RSA2048算法对以上内容进行签名得到数字签名(Signature)。值得说明的,所述加密采用的私钥或公钥与后面解密采用的公钥或私钥成对的。

示例性的,根据所述块地址和Hash值生成第一验证值,并采用预设的私钥或公钥加密所述第一验证值得到所述数字签名具体可以包括:

S2031、所述将所述Hash值放置于所述块地址后生成第一待验证值,并计算所述第一待验证值的Hash值以得到第一验证值;

S2032、采用预设的私钥或公钥加密所述第一验证值得到所述数字签名。

在本发明的另一个实施例中,为了便于在Bootloader启动时获取所述私钥或公钥对应的公钥或私钥,在所述步骤S204之后还可以包括:将所述私钥或公钥对应的公钥或私钥以数组的形式编译到Bootloader,以使得在Bootloader启动时采用所述公钥或私钥解密所述数字签名。

本发明还提供了一种系统分区关键数据的保护系统,如图2所示,其包括:

获取模块100,用于在Bootloader启动时,获取系统分区文件携带的关键数据对应的验证表,其中,所述验证表包括数字签名、块地址以及Hash值;

解密模块200,用于采用预设的公钥或私钥解密所述数字签名得到第一验证值;

比较模块300,用于根据所述块地址和Hash值生成第二验证值,将第一验证值和第二验证值进行比较;

执行模块400,用于当第一验证值与第二验证值一致时,启动系统。

所述系统分区关键数据的保护系统,其中,所述执行模块具体包括:

计算单元,用于当第一验证值与第二验证值一致时,根据所述块地址计算所述关键数据的当前Hash值;

执行单元,用于将所述当前Hash值与所述Hash值进行比较,当所述当前Hash值与所述Hash值一致时,启动系统。

所述系统分区关键数据的保护系统,其还包括:

生成模块,用于在编译系统文件时,生成记录有系统分区所有文件及其对应的块地址的映射文件;

计算模块,用于根据所述映射文件确定所述关键数据对应的块地址,并计算所述块地址的Hash值;

加密模块,用于根据所述块地址和Hash值生成第一验证值,并采用预设的私钥或公钥加密所述第一验证值得到所述数字签名;

存储模块,用于将所述数字签名、块地址以及Hash值存于所述验证表,并将所述验证表追加至系统文件后面。

所述系统分区关键数据的保护系统,其中,所述加密模块具体包括:

生成单元,用于将所述Hash值放置于所述块地址后生成第一待验证值,并计算所述第一待验证值的Hash值以得到第一验证值;

加密单元,用于采用预设的私钥或公钥加密所述第一验证值得到所述数字签名,其中,所述私钥为所述公钥对应的私钥。

所述系统分区关键数据的保护系统,其还包括:

编译模块,用于将所述私钥或公钥对应的公钥或私钥以数组的形式编译到Bootloader,以使得在Bootloader启动时采用所述公钥或私钥解密所述数字签名。

上述系统分区关键数据的保护系统的各个模块在上述方法中已经详细说明,在这里就不再一一陈述。

在本发明所提供的实施例中,应该理解到,所揭露的系统和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。

上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

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