一种对文件进行签名的方法和装置
技术领域
本发明涉及信息安全技术领域,特别是涉及一种对文件进行签名的方法和一种对文件进行签名的装置。
背景技术
可执行文件在计算机科学上,是指一种内容可被电脑解释为程序的电脑文件。相对于其它文件类型,可执行文件可能是一个操作系统中最重要的文件类型,因为它们是完成操作的真正执行者。可执行文件的大小、运行速度、资源占用情况以及可扩展性、可移植性等与文件格式的定义和文件加载过程紧密相关。操作系统中的程序具有相应的可执行文件,当需要运行某个程序时,可以将该程序对应的可执行文件加载到内存中,从而顺利运行该程序。
随着计算机技术在社会生活中各个领域的广泛运用,恶意软件(是指任何故意创建用来执行未经授权并通常是有害行为的软件)也如同其附属品一样接踵而来。由于这些恶意软件所具有的感染性、复制性及破坏性,其已成为困扰计算机使用的一个重大问题。因此,程序对应的可执行文件很有可能被恶意软件破坏,从而导致程序被恶意软件劫持等严重后果。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的对文件进行签名的方法和相应的对文件进行签名的装置。
依据本发明的一个方面,提供了一种对文件进行签名的方法,包括:
根据文件当前的状态,将预设的所述文件对应的签名信息添加至所述文件中;
对所述文件中除所述签名信息之外的内容数据进行压缩得到用于校验所述文件的校验数据,并利用预设的加密密钥对所述校验数据进行加密;
将加密后的校验数据添加至所述签名信息中。
可选地,所述根据文件当前的状态,将预设的所述文件对应的签名信息添加至所述文件中的步骤包括:
若所述文件为正在编译状态,则当编译到预设的所述文件对应的第一专用节位置时,将所述文件对应的签名信息编译到所述第一专用节中;
其中,所述第一专用节位置为在正在编译状态下,所述文件中需要添加所述文件对应的签名信息的位置。
可选地,所述根据文件当前的状态,将预设的所述文件对应的签名信息添加至所述文件中的步骤包括:
若所述文件为编译完成状态,则从所述文件中查找预设的所述文件对应的第二专用节位置,将所述文件对应的签名信息插入所述第二专用节中;
其中,所述第二专用节位置为在编译完成状态下,所述文件中需要添加所述文件对应的签名信息的位置。
可选地,所述方法还包括:
当需要运行程序时,在加载所述程序对应的文件之前,获取所述文件对应的携带有所述加密后的校验数据的签名信息;
提取所述签名信息携带的所述加密后的校验数据,并利用与所述加密密钥对应的解密密钥对所述加密后的校验数据进行解密;
利用所述解密后的校验数据验证所述文件是否被篡改;
利用所述签名信息验证所述文件的安全性。
可选地,所述利用所述签名信息验证所述文件的安全性的步骤包括:
将所述签名信息与预设的白名单数据库进行匹配,其中,所述白名单数据库包括可信签名信息;
若所述签名信息与所述可信签名信息相匹配,则确定所述文件为安全文件。
可选地,所述利用所述解密后的校验数据验证所述文件是否被篡改的步骤包括:
对所述文件中除所述签名信息之外的内容数据进行压缩得到用于校验所述文件的当前校验数据;
将所述解密后的校验数据和所述当前校验数据进行比较;
若所述解密后的校验数据和所述当前校验数据一致,则确定所述文件未被篡改。
可选地,所述对所述文件中除所述签名信息之外的内容数据进行压缩得到用于校验所述文件的校验数据,并利用预设的加密密钥对所述校验数据进行加密的步骤包括:
计算所述内容数据对应的第一散列摘要信息,其中,所述第一散列摘要信息为所述校验数据;
利用预设的加密密钥对所述第一散列摘要信息进行加密。
可选地,所述对所述文件中除所述签名信息之外的内容数据进行压缩得到用于校验所述文件的当前校验数据的步骤包括:
计算所述内容数据对应的第二散列摘要信息,其中,所述第二散列摘要信息为所述当前校验数据;
所述将所述解密后的校验数据和当前校验数据进行比较的步骤包括:
将所述第二散列摘要信息与所述第一散列摘要信息进行比较;
若所述第二散列摘要信息与所述第一散列摘要信息相同,则确定所述解密后的校验数据和所述当前校验数据一致。
可选地,所述利用预设的加密密钥对所述校验数据进行加密的步骤包括:
利用预设的公私密钥对中的私钥对所述校验数据进行加密;
所述利用与所述加密密钥对应的解密密钥对所述加密后的校验数据进行解密的步骤包括:
利用所述公私密钥对中的公钥对所述加密后的校验数据进行解密。
可选地,在所述获取所述文件对应的携带有所述加密后的校验数据的签名信息的步骤之前,还包括:
确定所述文件是否为需要验证的文件;
若是,则执行所述获取所述文件对应的携带有所述加密后的校验数据的签名信息的步骤。
可选地,所述对所述文件中除所述签名信息之外的内容数据进行压缩得到用于校验所述文件的校验数据的步骤包括:
当所述文件为编译完成状态时,对所述文件中除所述签名信息之外的内容数据进行压缩得到用于校验所述文件的校验数据。
可选地,所述签名信息包括所述文件的版本信息,和/或发行者信息,和/或产品信息。
根据本发明的另一方面,提供了一种对文件进行签名的装置,包括:
添加模块,用于根据文件当前的状态,将预设的所述文件对应的签名信息添加至所述文件中;
加密模块,用于对所述文件中除所述签名信息之外的内容数据进行压缩得到用于校验所述文件的校验数据,并利用预设的加密密钥对所述校验数据进行加密;
生成模块,用于将加密后的校验数据添加至所述签名信息中。
可选地,所述添加模块包括:
第一添加子模块,用于在所述文件为正在编译状态时,当编译到预设的所述文件对应的第一专用节位置时,将所述文件对应的签名信息编译到所述第一专用节中;
其中,所述第一专用节位置为在正在编译状态下,所述文件中需要添加所述文件对应的签名信息的位置。
可选地,所述添加模块包括:
第二添加子模块,用于当所述文件为编译完成状态时,从所述文件中查找预设的所述文件对应的第二专用节位置,将所述文件对应的签名信息插入所述第二专用节中;
其中,所述第二专用节位置为在编译完成状态下,所述文件中需要添加所述文件对应的签名信息的位置。
可选地,所述装置还包括:
获取模块,用于当需要运行程序时,在加载所述程序对应的文件之前,获取所述文件对应的携带有所述加密后的校验数据的签名信息;
解密模块,用于提取所述签名信息携带的所述加密后的校验数据,并利用与所述加密密钥对应的解密密钥对所述加密后的校验数据进行解密;
第一验证模块,用于利用所述解密后的校验数据验证所述文件是否被篡改;
第二验证模块,用于利用所述签名信息验证所述文件的安全性。
可选地,所述第二验证模块包括:
匹配子模块,用于将所述签名信息与预设的白名单数据库进行匹配,其中,所述白名单数据库包括可信签名信息;
第二确定子模块,用于当所述签名信息与所述可信签名信息相匹配时,确定所述文件为安全文件。
可选地,所述第一验证模块包括:
比较子模块,用于对所述文件中除所述签名信息之外的内容数据进行压缩得到用于校验所述文件的当前校验数据,并将所述解密后的校验数据和所述当前校验数据进行比较;
第一确定子模块,用于当所述解密后的校验数据和所述当前校验数据一致时,确定所述文件未被篡改。
可选地,所述加密模块包括,具体用于计算所述内容数据对应的第一散列摘要信息,并利用预设的加密密钥对所述第一散列摘要信息进行加密,其中,所述第一散列摘要信息为所述校验数据。
可选地,所述比较子模块,具体用于计算所述内容数据对应的第二散列摘要信息,其中,所述第二散列摘要信息为所述当前校验数据;将所述第二散列摘要信息与所述第一散列摘要信息进行比较;当所述第二散列摘要信息与所述第一散列摘要信息相同时,确定所述解密后的校验数据和所述当前校验数据一致。
可选地,所述加密模块,具体用于利用预设的公私密钥对中的私钥对所述校验数据进行加密;
所述解密模块,具体用于利用所述公私密钥对中的公钥对所述加密后的校验数据进行解密。
可选地,所述装置还包括:
确定模块,用于在所述获取模块获取所述文件对应的携带有所述加密后的校验数据的签名信息之前,确定所述文件是否为需要验证的文件;若是,则调用所述获取模块获取所述文件对应的携带有所述加密后的校验数据的签名信息。
可选地,具体用于当所述文件为编译完成状态时,对所述文件中除所述签名信息之外的内容数据进行压缩得到用于校验所述文件的校验数据,并利用预设的加密密钥对所述校验数据进行加密。
可选地,所述签名信息包括所述文件的版本信息,和/或发行者信息,和/或产品信息。
根据本发明的对文件进行签名的方案,首先根据文件当前的状态,将预设的文件对应的签名信息添加至文件中,然后对文件中除签名信息之外的内容数据进行压缩得到用于校验所述文件的校验数据,并利用预设的加密密钥对校验数据进行加密,最后将加密后的校验数据写入签名信息中。由于对文件进行了签名,并且对文件的内容数据进行加密,因此后续在加载文件时,即可利用对应的文件的签名对文件的安全性进行验证,还可以利用加密的校验数据对文件是否被篡改进行验证,从而达到了防止加载被恶意篡改破坏的文件的效果,保证了文件的安全性和完整性。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明实施例一的一种对文件进行签名的方法的步骤流程图;
图2示出了根据本发明实施例二的一种对文件进行签名的方法的步骤流程图;
图3示出了根据本发明实施例三的一种对文件进行签名的装置的结构框图;
图4示出了根据本发明实施例四的一种对文件进行签名的装置的结构框图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
实施例一
参照图1,示出了根据本发明实施例一的一种对文件进行签名的方法的步骤流程图。
本实施例中,对文件进行签名的方法可以包括如下步骤:
步骤101,根据文件当前的状态,将预设的所述文件对应的签名信息添加至所述文件中。
本发明实施例中,首先可以预设文件对应的签名信息,该签名信息可以包括以下至少之一:版本信息(即文件对应的程序的版本)、发行者信息(即文件对应的程序的发行者)、产品信息(即文件对应的程序的产品信息)。当然,文件对应的签名信息还可以包括其他信息,如时间信息等,本发明实施例对此并不加以限制。
文件当前的状态是指文件当前的编译状态,包括正在编译状态和编译完成状态,根据文件当前的状态的不同,将采用不同的方式将文件对应的签名信息添加至文件中,具体过程将在下面的实施例二中详细论述。
本发明实施例中的文件可以为Linux系统、Android(安卓)系统等开源系统中的文件,其中,文件可以包括程序的可执行文件,例如,Linux系统下的ELF(Executable and Linkable Format,可执行连接格式)格式的可执行文件,Android系统下的NDK(Native Development Kit,使用本地代码编写的组件的工具集)格式的可执行文件,等等,本发明实施例对此并不加以限制。
步骤102,对所述文件中除所述签名信息之外的内容数据进行压缩得到用于校验所述文件的校验数据,并利用预设的加密密钥对所述校验数据进行加密。
文件中除签名信息之外,还包括一些内容数据(如程序代码等),这些内容数据为程序运行时所需的数据,因此这些内容数据的完整性尤为重要。本发明实施例中获取到文件中除签名信息之外的内容数据后,进一步对该内容数据进行压缩得到用于校验文件的校验数据,并利用预设的加密密钥对所述校验数据进行加密,后续为了保证文件的完整性,还要进一步对这些校验数据进行验证。
其中,对校验数据进行加密可以采用任意一种加密方法,例如对称加密算法(如DES(Data Encryption Standard,数据加密标准)加密算法、AES(Advanced Encryption Standard,高级加密标准)加密算法等)、非对称加密算法(如ECC(Elliptic Curves Cryptography,椭圆曲线密码编码学)加密算法、背包算法等),本发明实施例对此并不加以限制。
步骤103,将加密后的校验数据添加至所述签名信息中。
在对上述校验数据进行加密之后,即可将加密后的校验数据添加至上述签名信息中,即该签名信息中携带有加密后的校验数据的。后续根据该签名文件即可实现对文件的验证。
本发明实施例中,由于对文件进行了签名,并且对文件的内容数据进行加密,因此后续在加载文件时,即可利用对应的文件的签名对文件的安全性进行验证,还可以利用加密的校验数据对文件是否被篡改进行验证,从而达到了防止加载被恶意篡改破坏的文件的效果,保证了文件的安全性和完整性。
实施例二
参照图2,示出了根据本发明实施例二的一种对文件进行签名的方法的步骤流程图。
本实施例中,对文件进行签名的方法可以包括如下步骤:
步骤201,根据文件当前的状态,将预设的所述文件对应的签名信息添加至所述文件中。
本发明实施例中,根据文件当前的状态的不同,将采用不同的方式将文件对应的签名信息添加至文件中。其中,文件当前的状态包括正在编译状态和编译完成状态。因此,该步骤201可以包括以下子步骤a1~子步骤a2:
子步骤a1,若所述文件为正在编译状态,则当编译到预设的所述文件对应的第一专用Section位置时,将所述文件对应的签名信息编译到所述第一专用Section中;
文件中可以包括多个节(Section),每个Section里存储该节对应的数据内容,每个Section具有各自对应的位置、名称等信息。
以ELF格式的文件为例,ELF文件的格式布局如表一所示:
ELF header9(ELF头部) |
Program header table(程序头表) |
Segment1(段1) |
Segment2(段2) |
…… |
Sengmentn(段n) |
Setion header table(节头表,可选) |
表一
其中,段(Segment)由若干个节(Section)构成,节头表对每一个节的信息有相关描述,对可执行程序而言,节头表是可选的。
本发明实施例中,可以预先设置在正在编译状态下,所述文件中需要添加所述文件对应的签名信息的位置,即第一专用Section位置,该第一专用Section位置可以为文件中能够存储签名信息的任意一个或多个Section位置,本发明实施例对此并不加以限制。
在文件为正在编译状态时,当编译到所述文件对应的第一专用Section位置时,即可将所述文件对应的签名信息编译到所述第一专用Section中,实现将签名信息添加至文件中。
子步骤a2,若所述文件为编译完成状态,则从所述文件中查找预设的所述文件对应的第二专用Section位置,将所述文件对应的签名信息插入所述第二专用Section中。
本发明实施例中,可以预先设置在编译完成状态下,所述文件中需要添加所述文件对应的签名信息的位置,即第二专用Section位置,该第二专用Section位置可以为文件中能够存储签名信息的任意一个或多个Section位置,本发明实施例对此并不加以限制。
在文件为编译完成状态时,即可从所述文件中查找预设的所述文件对应的第二专用Section位置,将所述文件对应的签名信息插入所述第二专用Section中,实现将签名信息添加至文件中。
本发明实施例中,可以利用签名工具将所述文件对应的签名信息插入所述第二专用Section中,例如使用Zero Add软件、LordPE Deluxe软件等工具对文件进行编辑,本发明实施例对具体的工具并不加以限制。
步骤202,对文件中除所述签名信息之外的内容数据进行压缩得到用于校验所述文件的校验数据,并利用预设的加密密钥对所述校验数据进行加密。
本发明实施例中,当所述文件为编译完成状态时,获取所述文件中除所述签名信息之外的内容数据,然后对除签名信息之外的内容数据进行压缩得到用于校验所述文件的校验数据,并利用预设的加密密钥对所述校验数据进行加密。
在本发明的一种优选实施例中,可以通过MD5算法(Message DigestAlgorithm MD5,消息摘要算法第五版)对所述内容数据进行加密。MD5算法的典型应用是对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。MD5算法将整个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的MD5信息摘要。
因此,该步骤202中对所述文件中除所述签名信息之外的内容数据进行压缩得到用于校验所述文件的校验数据,并利用预设的加密密钥对所述校验数据进行加密的过程可以包括:计算所述内容数据对应的第一散列摘要信息(例如通过MD5算法计算出文件的唯一HASH(哈希)值),其中,第一散列摘要信息为所述校验数据;利用预设的加密密钥对所述第一散列摘要信息进行加密。对于其中计算内容数据对应的第一散列摘要信息的具体过程,本领域技术人员根据实际经验进行相关处理即可,本发明实施例在此不再详细论述。
在本发明的一种优选实施例中,为了进一步提高数据的安全性,可以使用非对称加密算法,预先设置加密密钥对(包括公钥和私钥),并使用其中的私钥对所述校验数据进行加密。对于具体的加密过程,本领域技术人员根据实际经验进行相关处理即可,本发明实施例在此不再详细论述。
步骤203,将加密后的校验数据添加至所述签名信息中。
在对上述校验数据进行加密后,即可将加密后的校验数据添加至所述签名信息中。因此,该签名信息中携带有加密后的校验数据的,后续利用这些信息即可对文件进行相关的验证。
步骤204,当需要运行程序时,在加载所述程序对应的文件之前,获取所述文件对应的携带有所述加密后的校验数据的签名信息。
需要运行某个程序时,需要将该程序对应的文件加载到内存中,从而顺利运行该程序。本发明实施例中,为了保证程序的安全性和完整性,在加载所述程序对应的文件之前,还可以对文件的安全性和内容数据的完整性进行验证。因此,可以获取所述文件对应的携带有所述加密后的校验数据的签名信息,并基于该签名信息对文件进行相应的验证操作。
在本发明的一种优选实施例中,在获取所述文件对应的携带有所述加密后的校验数据的签名信息之前,还可以包括:确定所述文件是否为需要验证的文件。若是,则执行获取所述文件对应的携带有所述加密后的校验数据的签名信息的步骤;若否,则直接加载所述程序对应的文件。
针对程序对应的文件,可以预先设置该文件是否需要验证。例如针对每个文件设置对应的验证标识,该验证标识用于指示对应的文件是否需要验证,如该验证标识可以用比特位表示,验证标识为1时指示对应的文件需要验证,验证标识为0时指示对应的文件不需要验证。当然还可以通过其他任意方式设置文件是否需要验证,本发明实施例对此并不加以限制。
通过上述过程,可以仅对需要验证的文件进行验证操作,对不需要验证的文件直接加载,因此可以避免不必要的操作,进一步简化执行过程。
步骤205,提取所述签名信息携带的所述加密后的校验数据,并利用与所述加密密钥对应的解密密钥对所述加密后的校验数据进行解密。
例如,根据上述步骤202的相关描述,如果采用非对称加密算法对校验数据进行加密,则该步骤205中即利用所述公私密钥对中的公钥对所述加密后的校验数据进行解密。对于具体的解密过程,本领域技术人员根据实际经验进行相关处理即可,本发明实施例在此不再详细论述。
步骤206,利用所述解密后的校验数据验证所述文件是否被篡改。
根据解密后的校验数据即可验证文件是否被篡改。该步骤206可以包括以下子步骤b1~子步骤b2:
子步骤b1,对所述文件中除所述签名信息之外的内容数据进行压缩得到用于校验所述文件的当前校验数据,并将所述解密后的校验数据和所述当前校验数据进行比较;
此处对文件中除签名信息之外的内容数据进行压缩得到用于校验所述文件的当前校验数据的过程与上述步骤202中对文件中除所述签名信息之外的内容数据进行压缩得到用于校验文件的校验数据的过程基本相似,具体参照上述步骤202的相关描述即可。
例如,根据上述步骤202的相关描述,如果利用MD5算法对所述内容数据进行加密,即计算所述内容数据对应的第一散列摘要信息,并利用加密密钥对第一散列摘要信息进行加密,则该子步骤b1可以包括以下子步骤b11~子步骤b13:
子步骤b11,计算所述内容数据对应的第二散列摘要信息,其中,所述第二散列摘要信息为所述当前校验数据;;
对于其中计算内容数据对应的第二散列摘要信息的具体过程,本领域技术人员根据实际经验进行相关处理即可,本发明实施例在此不再详细论述。
子步骤b12,将所述第二散列摘要信息与所述第一散列摘要信息进行比较;
子步骤b13,若所述第二散列摘要信息与所述第一散列摘要信息相同,则确定所述解密后的校验数据和所述当前校验数据一致;否则,确定所述解密后的校验数据和所述当前校验数据不一致。
子步骤b2,若所述解密后的校验数据和所述当前校验数据一致,则确定所述文件未被篡改;若所述解密后的内容数据和所述加密后的内容数据不一致,则确定所述文件被篡改。
通过将解密后的校验数据和当前校验数据进行比较,即可得知文件是否被篡改。如果文件未被篡改,则可以加载所述程序对应的文件,正常运行程序;如果文件被篡改,则暂时不加载所述程序对应的文件,即不运行程序,该种情况下可以进一步对该文件进行后续的相关处理,例如定位该文件中被篡改的内容数据,确定被篡改的原因等,本发明实施例对此并不加以限制。
步骤207,利用所述签名信息验证所述文件的安全性。
获取文件对应的签名文件之后,还可从签名文件中提取所述签名信息,根据该签名信息即可验证文件是否安全。
该步骤207中利用签名信息验证所述文件的安全性的过程可以包括以下子步骤c1~子步骤c2:
子步骤c1,将所述签名信息与预设的白名单数据库进行匹配,其中,所述白名单数据库包括可信签名信息;
本发明实施例中,可以预先设置白名单数据库,该白名单数据库中包括多个可信签名信息,该可信签名信息为预先对大量的签名信息进行分析,得到的可以信赖的、安全的签名信息,例如可信的发行者、可信的产品信息等等。对于生成白名单数据库的具体过程,本领域技术人员根据实际经验进行相关处理即可,本发明实施例在此不再详细论述。
子步骤c2,若所述签名信息与所述可信签名信息相匹配,则确定所述文件为安全文件;否则,确定所述文件为不安全文件(例如为可疑文件、危险文件等)。
通过将签名信息与白名单数据库中的可信签名信息进行匹配(例如遍历白名单数据库中的可信签名信息进行匹配等),即可得知文件是否安全。如果文件为安全文件,则可以加载所述程序对应的文件,正常运行程序;如果文件为不安全文件,则暂时不加载所述程序对应的文件,即不运行程序,该种情况下可以进一步对该文件进行后续的相关处理,例如升级文件的版本,下载其他可信的发行者发行的文件等,本发明实施例对此并不加以限制。
例如,根据文件的签名信息中包括的发行者信息可以验证该文件是否为可信的发行者发行,以确定该文件是否为安全文件;根据文件的签名信息中包括的版本信息可以得知当前文件的版本,以确定该文件是否为安全文件,并确定是否需要升级当前文件的版本,等等。
本发明实施例中,实现了对文件的签名验证,从而达到了防止加载被恶意篡改破坏的程序的效果,实现了对程序的安全性和完整性的保证。
对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
实施例三
参照图3,示出了根据本发明实施例三的一种对文件进行签名的装置的结构框图。
本实施例中,对文件进行签名的装置可以包括如下模块:
添加模块301,用于根据文件当前的状态,将预设的所述文件对应的签名信息添加至所述文件中;
加密模块302,用于对所述文件中除所述签名信息之外的内容数据进行压缩得到用于校验所述文件的校验数据,并利用预设的加密密钥对所述校验数据进行加密;
生成模块303,用于将加密后的校验数据添加至所述签名信息中。
本发明实施例中,首先根据文件当前的状态,将预设的文件对应的签名信息添加至文件中,然后对文件中除签名信息之外的内容数据进行压缩得到用于校验所述文件的校验数据,并利用预设的加密密钥对校验数据进行加密,最后将加密后的校验数据写入签名信息中。由于对文件进行了签名,并且对文件的内容数据进行加密,因此后续在加载文件时,即可利用对应的文件的签名对文件的安全性进行验证,还可以利用加密的校验数据对文件是否被篡改进行验证,从而达到了防止加载被恶意篡改破坏的文件的效果,保证了文件的安全性和完整性。
实施例四
参照图4,示出了根据本发明实施例四的一种对文件进行签名的装置的结构框图。
本实施例中,对文件进行签名的装置可以包括如下模块:
添加模块401,用于根据文件当前的状态,将预设的所述文件对应的签名信息添加至所述文件中;
加密模块402,用于对所述文件中除所述签名信息之外的内容数据进行压缩得到用于校验所述文件的校验数据,并利用预设的加密密钥对所述校验数据进行加密;
生成模块403,用于将加密后的校验数据添加至所述签名信息中;
获取模块404,用于当需要运行程序时,在加载所述程序对应的文件之前,获取所述文件对应的携带有所述加密后的校验数据的签名信息;
确定模块405,用于在获取模块获取所述文件对应的携带有所述加密后的校验数据的签名信息之前,确定所述文件是否为需要验证的文件;若是,则调用获取模块获取文件对应的携带有所述加密后的校验数据的签名信息;
解密模块406,用于提取所述签名信息携带的所述加密后的校验数据,并利用与所述加密密钥对应的解密密钥对所述加密后的校验数据进行解密;
第一验证模块407,用于利用所述解密后的校验数据验证所述文件是否被篡改;
第二验证模块408,用于利用所述签名信息验证所述文件的安全性。
其中,所述签名信息可以包括所述文件的版本信息,和/或发行者信息,和/或产品信息。所述加密模块,具体用于当所述文件为编译完成状态时,对所述文件中除所述签名信息之外的内容数据进行压缩得到用于校验所述文件的校验数据,并利用预设的加密密钥对所述校验数据进行加密。
在本发明的一种优选实施例中,所述加密模块,具体用于利用预设的公私密钥对中的私钥对所述校验数据进行加密;
所述解密模块,具体用于利用所述公私密钥对中的公钥对所述加密后的校验数据进行解密。
在本发明的一种优选实施例中,所述添加模块可以包括以下子模块:
第一添加子模块,用于在所述文件为正在编译状态时,当编译到预设的所述文件对应的第一专用Section位置时,将所述文件对应的签名信息编译到所述第一专用Section中;
第二添加子模块,用于当所述文件为编译完成状态时,从所述文件中查找预设的所述文件对应的第二专用Section位置,将所述文件对应的签名信息插入所述第二专用Section中;
其中,所述第一专用Section位置为在正在编译状态下,所述文件中需要添加所述文件对应的签名信息的位置;所述第二专用Section位置为在编译完成状态下,所述文件中需要添加所述文件对应的签名信息的位置。
所述第一验证模块可以包括以下子模块:
比较子模块,用于对所述文件中除所述签名信息之外的内容数据进行压缩得到用于校验所述文件的当前校验数据,并将所述解密后的校验数据和所述当前校验数据进行比较;
第一确定子模块,用于当所述解密后的校验数据和所述当前校验数据一致时,确定所述文件未被篡改。
其中,所述加密模块包括,具体用于计算所述内容数据对应的第一散列摘要信息,并利用预设的加密密钥对所述第一散列摘要信息进行加密,其中,第一散列摘要信息为所述校验数据。
所述比较子模块,具体用于计算所述内容数据对应的第二散列摘要信息,其中,所述第二散列摘要信息为所述当前校验数据;将所述第二散列摘要信息与所述第一散列摘要信息进行比较;当所述第二散列摘要信息与所述第一散列摘要信息相同时,确定所述解密后的校验数据和所述当前校验数据一致。
所述第二验证模块可以包括以下子模块:
匹配子模块,用于将所述签名信息与预设的白名单数据库进行匹配,其中,所述白名单数据库包括可信签名信息;
第二确定子模块,用于当所述签名信息与所述可信签名信息相匹配时,确定所述文件为安全文件。
本发明实施例中,实现了对文件的签名验证,从而达到了防止加载被恶意篡改破坏的程序的效果,实现了对程序的安全性和完整性的保证。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的对文件进行签名的设备中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。