一种文件签名方法、装置、电子设备及可读存储介质
技术领域
本发明涉及计算机技术领域,特别是涉及一种文件签名方法、装置、电子设备及可读存储介质。
背景技术
文件签名是指对文件进行数字签名。其中,数字签名是附加在文件中的一些数据,而且数字签名常常附加在文件尾部。这样,文件的接收者能够根据附加的数据来验证:该文件是否确实是签名者发送的,以及该文件的文件内容是否被篡改。
例如,张三利用私钥对文件A进行数字签名。其中,签名后的文件A的尾部写入有该数字签名。然后,张三将签名后的文件A发送给李四。李四在接收到签名后的文件A后,可以利用张三的公钥解密该数字签名。若李四能够利用张三的公钥解密得到文件A的哈希值,则证明文件A确实是张三发送的。并且,可以对接收到的文件A进行哈希计算,并将计算得到的哈希值与解密得到的哈希值进行比对。若比对结果一致,则表明文件A未被篡改,若比对结果不一致,则表明文件A被篡改。
但是,该种将数字签名附加在文件中的方式,使得数字签名容易被恶意用户篡改,无法保证数字签名的有效性,从而使用户数据的安全受到威胁。
发明内容
本发明实施例的目的在于提供一种文件签名方法、装置、电子设备及可读存储介质,以可以验证变更者的权限,并当变更者具有所有权变更权限时,可以将目标文件的所有权变更为第二用户。而且,可以在数字签名过程中不需要通过数字证书来确保数字签名的有效性,提高数据的安全性。具体技术方案如下:
第一方面,本发明实施例提供了一种文件签名方法,应用于文档阅读客户端,该方法可以包括:
在打开目标文件后,接收变更者发出的、针对目标文件的所有权变更指令;所有权变更指令用于指示:将第一用户对目标文件的所有权变更为第二用户;其中,对目标文件进行了数字签名的第一用户的第一公钥、目标文件的信息摘要值,以及第一公钥所对应的第一私钥对信息摘要值进行加密计算所得的第一数字签名对应存储在区块链分布式账本中;
利用变更者输入的私钥对第二用户的第二公钥进行加密计算,得到第二数字签名;
基于第一公钥和第二数字签名,验证变更者是否具有变更目标文件的所有权的权限;
若是,利用第二公钥所对应的第二私钥对信息摘要值进行加密计算,得到第三数字签名;
将第二公钥、信息摘要值、第三数字签名、第一公钥和第二数字签名对应存储至区块链分布式账本中。
可选地,在一种实现方式中,基于第一公钥和第二数字签名,验证变更者是否具有变更目标文件的所有权的权限的步骤,可以包括:
判断第一公钥是否能解密第二数字签名;其中,当第一公钥能解密第二数字签名时,变更者具有变更目标文件的所有权的权限;当第一公钥不能解密第二数字签名时,变更者不具有变更目标文件的所有权的权限。
可选地,在另一种实现方式中,基于第一公钥和第二数字签名,验证变更者是否具有变更目标文件的所有权的权限的步骤,可以包括:
将第一公钥和第二数字签名发送给区块链开发软件,以使区块链开发软件验证第一公钥是否能解密第二数字签名,并当验证第一公钥能解密第二数字签名时,向文档阅读客户端发送验证通过消息。
可选地,在本发明实施例中,该方法还可以包括:
在接收到针对目标文件的打开指令后,计算目标文件的当前信息摘要值作为目标信息摘要值;
基于目标信息摘要值,确定目标文件的文件内容是否被篡改;
若未被篡改,打开目标文件;
若被篡改,放弃打开目标文件。
可选地,基于目标信息摘要值,确定目标文件的文件内容是否被篡改的步骤,可以包括:
判断区块链分布式账本中是否存在与目标信息摘要值相匹配的摘要信息值;
若不存在,确定目标文件的文件内容被篡改。
可选地,目标文件中写入有签名标记,签名标记中携带有第一公钥;该方法还可以包括:
若存在,判断区块链分布式账本中与目标信息摘要值对应存储的公钥是否与签名标记中携带的第一公钥匹配;
若不匹配,触发确定目标文件的文件内容被篡改的步骤。
可选地,目标文件中写入有签名标记,在将第二公钥、信息摘要值、第三数字签名、第一公钥和第二数字签名对应存储至区块链分布式账本中的步骤之后,该方法还可以包括:
更新签名标记,得到更新后的签名标记;其中,更新后的签名标记中包括:第二公钥、信息摘要值、第三数字签名的签名时间和第二用户的身份标识中的至少一项。
第二方面,本发明实施例提供了一种文件签名装置,应用于文档阅读客户端,该装置可以包括:
接收模块,用于在打开目标文件后,接收变更者发出的、针对目标文件的所有权变更指令;所有权变更指令用于指示:将第一用户对目标文件的所有权变更为第二用户;其中,对目标文件进行了数字签名的第一用户的第一公钥、目标文件的信息摘要值,以及第一公钥所对应的第一私钥对信息摘要值进行加密计算所得的第一数字签名对应存储在区块链分布式账本中;
第一计算模块,用于利用变更者输入的私钥对第二用户的第二公钥进行加密计算,得到第二数字签名;
验证模块,用于基于第一公钥和第二数字签名,验证变更者是否具有变更目标文件的所有权的权限;
第二计算模块,用于当变更者具有变更目标文件的所有权的权限时,利用第二公钥所对应的第二私钥对信息摘要值进行加密计算,得到第三数字签名;
存储模块,用于将第二公钥、信息摘要值、第三数字签名、第一公钥和第二数字签名对应存储至区块链分布式账本中。
可选地,在一种实现方式中,验证模块可以包括:
第一判断子模块,用于判断第一公钥是否能解密第二数字签名;其中,当第一公钥能解密第二数字签名时,变更者具有变更目标文件的所有权的权限;当第一公钥不能解密第二数字签名时,变更者不具有变更目标文件的所有权的权限。
可选地,在另一种实现方式中,验证模块可以包括:
发送子模块,将第一公钥和第二数字签名发送给区块链开发软件,以使区块链开发软件验证第一公钥是否能解密第二数字签名,并当验证第一公钥能解密第二数字签名时,向文档阅读客户端发送验证通过消息。
可选地,在本发明实施例中,该装置还可以包括:
第三计算模块,用于在接收到针对目标文件的打开指令后,计算目标文件的当前信息摘要值作为目标信息摘要值;
确定模块,用于基于目标信息摘要值,确定目标文件的文件内容是否被篡改;
第一处理模块,用于当目标文件的文件内容未被篡改时,打开目标文件;
第二处理模块,用于当目标文件的文件内容被篡改时,放弃打开目标文件。
可选地,在本发明实施例中,确定模块可以包括:
第二判断子模块,用于判断区块链分布式账本中是否存在与目标信息摘要值相匹配的摘要信息值;
确定子模块,用于当区块链分布式账本中不存在与目标信息摘要值相匹配的摘要信息值时,确定目标文件的文件内容被篡改。
可选地,目标文件中写入有签名标记,签名标记中携带有第一公钥;该装置还可以包括:
第三判断子模块,用于当区块链分布式账本中存在与目标信息摘要值相匹配的摘要信息值时,判断区块链分布式账本中与目标信息摘要值对应存储的公钥是否与签名标记中携带的第一公钥匹配;
触发子模块,用于当区块链分布式账本中与目标信息摘要值对应存储的公钥不与签名标记中携带的第一公钥匹配时,触发确定子单元执行确定目标文件的文件内容被篡改的步骤。
可选地,目标文件中写入有签名标记,该装置还可以包括:
更新模块,用于在将第二公钥、信息摘要值、第三数字签名、第一公钥和第二数字签名对应存储至区块链分布式账本中之后,更新签名标记,得到更新后的签名标记;其中,更新后的签名标记中包括:第二公钥、信息摘要值、第三数字签名的签名时间和第二用户的身份标识中的至少一项。
第三方面,本发明实施例提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;电子设备中安装有文档阅读客户端;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现本发明实施例提供的任一项文件签名方法的方法步骤。
第四方面,本发明实施例提供了一种可读存储介质,可读存储介质内存储有计算机程序,计算机程序被安装有文档阅读客户端的电子设备中的处理器执行时实现:本发明实施例提供的任一项文件签名方法的方法步骤。
第五方面,本发明实施例还提供了一种包含指令的计算机程序产品,当其在安装有文档阅读客户端的电子设备上运行时,使得电子设备执行:本发明实施例提供的任一项文件签名方法的方法步骤。
在本发明实施例中,文档阅读客户端在打开目标文件后,可以接收变更者发出的、针对目标文件的所有权变更指令。其中,对目标文件进行了数字签名的第一用户的第一公钥、目标文件的信息摘要值,以及第一公钥所对应的第一私钥对信息摘要值进行加密计算所得的第一数字签名对应存储在区块链分布式账本中。由于该所有权变更指令用于指示:将第一用户对目标文件的所有权更变为第二用户。因而,可以利用变更者输入的私钥对第二用户的第二公钥进行加密计算,得到第二数字签名。然后,基于第一公钥和第二数字签名,验证变更者是否具有变更该目标文件的所有权的权限。当第一公钥能解密该第二数字签名时,该变更者具有变更该目标文件的所有权的权限。此时,可以利用第二公钥所对应的第二私钥对该目标文件的信息摘要值进行加密计算,得到第三数字签名。并且,可以将第二公钥、该目标文件的信息摘要值、第三数字签名、第一公钥和第二数字签名对应存储至区块链分布式账本中。这样,使得当变更者具有所有权变更权限时,可以将目标文件的所有权变更为第二用户,实现目标文件的所有权变更。
其中,由于区块链分布式账本是集体维护的分布式数据库,并具有去中心化和信息不可篡改性等特点。因而,该种数字签名方式,避免了现有技术中将数字签名写在文件尾部所造成的数字签名容易被篡改的情况发生,确保了第二用户的第三数字签名的有效性,即可确保变更所有权的有效性。
另外,将第二公钥、目标文件的信息摘要值、第三数字签名、第一公钥和第二数字签名对应存储至区块链分布式账本中,可以便于后续利用该信息摘要值和第二公钥对该第三数字签名进行验证。而且,便于后续利用该第一公钥和该第二数字签名来验证该第三数字签名是否是经过第一用户授权的,即,便于后续验证该第三数字签名是否为合法签名。当验证该第三数字签名为合法签名时,还可以利用该第一公钥来追溯该目标文件在历史上经历了几次所有权变更,以及所有权变更所对应的变更时间。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
图1为本发明实施例所提供的一种文件签名方法的流程图;
图2为本发明实施例所提供的一种文件签名装置的结构示意图;
图3为本发明实施例所提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了解决现有技术中存在的技术问题,本发明实施例提供了一种文件签名方法、装置、电子设备及可读存储介质。
下面首先对本发明实施例提供的文件签名方法进行说明。
其中,本发明实施例提供的文件签名方法可以应用于文档阅读客户端。该文档阅读客户端包括但并不局限于:WPS(WPS software,WPS软件)客户端、PPT(PowerPoint,演示文稿)客户端和PDF(Portable Document Format,便携式文档格式)客户端。
相应地,本发明实施例中的目标文件包括但并不局限于:WPS文件、PPT文件和PDF文件。当然并不局限于此。
参见图1,该文件签名方法可以包括如下步骤:
S101:在打开目标文件后,接收变更者发出的、针对目标文件的所有权变更指令;所有权变更指令用于指示:将第一用户对目标文件的所有权变更为第二用户;其中,对目标文件进行了数字签名的第一用户的第一公钥、目标文件的信息摘要值,以及第一公钥所对应的第一私钥对信息摘要值进行加密计算所得的第一数字签名对应存储在区块链分布式账本中;
其中,在变更所有权之前,目标文件是第一用户进行了数字签名的文件。也就是说,第一用户拥有目标文件的所有权。在该种情况下,第二用户不能对该目标文件进行数字签名。而且,对目标文件进行了数字签名的第一用户的第一公钥、目标文件的信息摘要值,以及第一公钥所对应的第一私钥对信息摘要值进行加密计算所得的第一数字签名对应存储在区块链分布式账本中。
由于区块链分布式账本是集体维护的分布式数据库,具有去中心化和信息不可篡改性等特点。因而,存储在该区块链分布式账本中的第一数字签名和对应存储的第一公钥是不可篡改的。也就是说,在第一用户对目标文件进行数字签名,并将第一公钥、目标文件的信息摘要值和第一数字签名对应存储至区块链分布式账本后,可以保证该第一公钥和第一数字签名不被恶意用户篡改,从而保证了该第一数字签名的有效性。
对于背景技术所举的示例而言,现有技术在使用数字签名过程中,常需要依赖数字证书来证明李四得到的公钥确实为张三的公钥,从而在一定程度上来确保张三的数字签名的有效性。其中,数字证书是证书授权中心机构进行数字签名的、包含公钥拥有者信息以及公钥的文件,该数字证书可以用于证明:公钥拥有者合法拥有该证书中列出的公钥。
但是,证书授权中心机构是中心化机构,该机构很可能会遭受到黑客的攻击。当该机构遭到攻击时,该机构所颁发的数字证书很可能是被黑客篡改的证书。并且,当该机构所颁发的张三的数字证书被黑客篡改时,此时无法确保张三的数字签名的有效性,使数据的安全受到威胁。
而在本发明实施例中,由于存储在该区块链分布式账本中的第一数字签名以及对应存储的第一公钥是不可篡改的,因而能够确保存储至区块链分布式账本中的该第一数字签名即为该第一公钥所对应的签名者的数字签名,从而可以保证该第一数字签名的有效性。
当文档阅读客户端打开该目标文件后,该文档阅读客户端可以接收变更者发出的、针对该目标文件的所有权变更指令。该所有权变更指令用于指示:将第一用户对目标文件的所有权变更为第二用户。
其中,目标文件的信息摘要值可以是基于:CRC(Cyclic Redundancy Check,循环冗余校验)算法、SHA(Secure Hash Algorithm,安全散列算法)算法、RIPEMD(RACEIntegrity Primitives Evaluation Message Digest,RACE原始完整性校验消息摘要)算法、MD4(Message-Digest Algorithm 4,信息摘要算法版本4)算法,以及MD5(Message-Digest Algorithm 5,信息摘要算法版本5)算法中的任意一种信息摘要算法对目标文件的文件内容进行计算得到的。当然并不局限于此。
S102:利用变更者输入的私钥对第二用户的第二公钥进行加密计算,得到第二数字签名;
S103:基于第一公钥和第二数字签名,验证变更者是否具有变更目标文件的所有权的权限;若是,执行步骤S104;若否,放弃执行步骤S104;
该文档阅读客户端在接收到所有权变更指令后,可以获得第二用户的第二公钥和第二私钥。并且,可以提示更变者输入用于验证变更者权限的私钥。在接收到变更者输入的私钥后,可以利用该私钥对第二私钥进行加密计算,从而得到第二数字签名。
然后,该文档阅读客户端可以通过判断第一公钥是否能解密第二数字签名的方式,来验证该变更者是否具有变更该目标文件的所有权的权限。
当然,该文档阅读客户端也可以将第一公钥和第二数字签名发送给区块链开发软件。这样,可以通过区块链开发软件来验证第一公钥是否能解密该第二数字签名。具体地,当区块链开发软件验证第一公钥能解密第二数字签名时,会向该文档阅读客户端发送验证通过消息,从而,该文档阅读客户端可以接收到该验证通过消息。
该文档阅读客户端也可以将第一公钥、第二数字签名和第二公钥发送给区块链开发软件。这样,当通过区块链开发软件验证第一公钥能解密第二数字签名时,还能通过区块链开发软件来验证第二数字签名所解密得到的公钥是否与该第二公钥匹配。若匹配,则表明该文档阅读客户端发送给该区块链开发软件的内容未被篡改,此时可以准确地确定第一公钥能解密第二数字签名。
其中,当变更者输入的私钥为第一私钥时,加密计算所得到的第二数字签名才能被第一公钥解密。在该种情况下,表明变更者拥有第一用户的第一私钥,因而该变更者具有变更目标文件的所有权的权限。
反之,当变更者输入的私钥不是第一私钥时,加密计算所得到的第二数字签名不能被解密。在该种情况下,表明变更者不具有第一用户的第一私钥,因而该变更者不具有变更目标文件的所有权的权限。
也就是说,当变更者能够输入第一用户的第一私钥时,该变更者才具有变更该目标文件的所有权的权限。当变更者不能输入第一用户的第一私钥时,该变更者不具有变更该目标文件的所有权的权限。
其中,当变更者为第一用户本人时,该变更者可以直接输入第一用户的第一私钥,也可以从私钥存储软件中导出该第一私钥,从而实现第一私钥的输入。当变更者为非第一用户的其他用户时,该变更者可以直接输入第一用户所告知的第一私钥,也可以让第一用户本人直接输入第一私钥,从而实现第一私钥的输入。这都是合理的,当然并不局限于此。
S104:利用第二公钥所对应的第二私钥对信息摘要值进行加密计算,得到第三数字签名;
S105:将第二公钥、信息摘要值、第三数字签名、第一公钥和第二数字签名对应存储至区块链分布式账本中。
在验证变更者具有变更目标文件的所有权的权限之后,该文档阅读客户端还可以利用第二用户的第二私钥对目标文档的信息摘要值进行加密计算,从而得到第三数字签名。即可以得到第二用户对目标文档的数字签名。此时,第二用户拥有目标文件的所有权,实现了将第一用户的所有权变更成了第二用户。
在计算得到第三数字签名后,可以将第二公钥、信息摘要值、第三数字签名、第一公钥和第二数字签名对应存储至区块链分布式账本中。
具体地,可以利用第二公钥、信息摘要值、第三数字签名、第一公钥和第二数字签名来构建一个区块链发布块,实现第二公钥、信息摘要值、第三数字签名、第一公钥和第二数字签名的对应存储。
然后,调用区块链SDK(Software Development Kit,软件开发工具包)将该发布块存储至区块链分布式账本中,从而实现该发布块的全网发布。其中,该区块链SDK为任意可以将发布块存储至区块链分布式账本中的软件,在此不做详述。
其中,将第二公钥、信息摘要值、第三数字签名、第一公钥和第二数字签名进行对应存储,一方面,可以实现:存储至该区块链分布式账本中的第二公钥和第三数字签名是不可篡改的,从而保证了该第三数字签名的有效性。另一方面,可以实现:可以基于第一公钥和第二数字签名来验证该第三数字签名是经过第一用户授权的,即可以验证该第三数字签名是合法签名。
其中,将信息摘要值、第三数字签名和第二公钥对应存储至区块链分布式账本中,可以便于后续利用该信息摘要值和第二公钥对该第三数字签名进行验证。
另外,还可以基于对应存储在区块链账本中的信息摘要值和/或第一公钥,来追溯该目标文件在历史上经历了几次所有权变更,以及所有权变更所对应的变更时间。
具体地,假设用户A对目标文件进行数字签名后,得到数字签名A。并假设将目标文件的信息摘要值、数字签名A和用户A的公钥A对应存储至区块链分布式账本中。而且,在存储过程中,获得一个第一时间戳。
此外,假设用户A授权变更者将目标文件的所有权变更为用户B。其中,在授权过程中,利用变更者输入的用户A的私钥a对用户B的公钥B进行加密计算,得到数字签名K1。而且,在用户B对目标文件进行数字签名后,得到数字签名B。然后,将公钥B、数字签名B、目标文件的信息摘要值、公钥A和数字签名K1对应存储至区块链分布式账本中。在存储过程中,获得一个第二时间戳。
这样,可以利用与数字签名B对应存储的公钥A,对区块链分布式账本进行查找。从而,可以查找到数字签名A和第一时间戳。进而,可以确定在第一时间戳所对应的时间对该目标文件的所有权进行变更过。
示例性地,还可以假设用户B授权变更者将目标文件的所有权变更为用户C。其中,在授权过程中,利用变更者输入的用户B的私钥b对用户C的公钥C进行加密计算,得到数字签名K2。而且,在用户C对目标文件进行数字签名后,得到数字签名C。然后,将公钥C、数字签名C、目标文件的信息摘要值、公钥B和数字签名K2对应存储至区块链分布式账本中。在存储过程中,获得一个第三时间戳。
这样,可以利用与数字签名C对应存储的公钥B,对区块链分布式账本进行查找。从而,可以查找到数字签名B和第二时间戳。同理,再利用与数字签名B对应存储的公钥A,对区块链分布式账本进行查找。从而,可以查找到数字签名A和第一时间戳。进而,可以确定在第二时间戳和第一时间戳所对应的时间均对该目标文件的所有权进行变更过,而且,可以确定用户A和用户B均在历史上拥有过该目标文件的所有权。
在本发明实施例中,文档阅读客户端在打开目标文件后,可以接收变更者发出的、针对目标文件的所有权变更指令。其中,对目标文件进行了数字签名的第一用户的第一公钥、目标文件的信息摘要值,以及第一公钥所对应的第一私钥对信息摘要值进行加密计算所得的第一数字签名对应存储在区块链分布式账本中。由于该所有权变更指令用于指示:将第一用户对目标文件的所有权更变为第二用户。因而,可以利用变更者输入的私钥对第二用户的第二公钥进行加密计算,得到第二数字签名。然后,基于第一公钥和第二数字签名,验证变更者是否具有变更该目标文件的所有权的权限。当第一公钥能解密该第二数字签名时,该变更者具有变更该目标文件的所有权的权限。此时,可以利用第二公钥所对应的第二私钥对该目标文件的信息摘要值进行加密计算,得到第三数字签名。并且,可以将第二公钥、该目标文件的信息摘要值、第三数字签名、第一公钥和第二数字签名对应存储至区块链分布式账本中。这样,使得当变更者具有所有权变更权限时,可以将目标文件的所有权变更为第二用户,实现目标文件的所有权变更。
其中,由于区块链分布式账本是集体维护的分布式数据库,并具有去中心化和信息不可篡改性等特点。因而,该种数字签名方式,避免了现有技术中将数字签名写在文件尾部所造成的数字签名容易被篡改的情况发生,确保了第二用户的第三数字签名的有效性,即可确保变更所有权的有效性。
另外,将第二公钥、目标文件的信息摘要值、第三数字签名、第一公钥和第二数字签名对应存储至区块链分布式账本中,可以便于后续利用该信息摘要值和第二公钥对该第三数字签名进行验证。而且,便于后续利用该第一公钥和该第二数字签名来验证该第三数字签名是否是经过第一用户授权的,即,便于后续验证该第三数字签名是否为合法签名。当验证该第三数字签名为合法签名时,还可以利用该第一公钥来追溯该目标文件在历史上经历了几次所有权变更,以及所有权变更所对应的变更时间。
下面以目标文件为PDF文件为示例,对本发明实施例提供的文件签名方法进行说明。
假设电子设备中安装有PDF客户端,当该PDF客户端接收到针对目标文件的打开指令时,可以计算该目标文件的当前信息摘要值作为目标信息摘要值。其中,该当前信息摘要值为:该PDF客户端收到针对目标文件的打开指令时,对此时的目标文件进行信息摘要计算所得到的信息摘要值。
其中,该目标文件为第一用户对其进行了数字签名的文件。其中,利用该第一用户的第一私钥对该目标文件的信息摘要值进行加密计算,得到第一数字签名。而且,该目标文件的信息摘要值、第一数字签名,以及第一私钥所对应的第一公钥对应存储在区块链分布式账本中。其中,该目标文件的信息摘要值为:第一用户对目标文件进行数字签名并得到第一数字签名时,该目标文件的信息摘要值。
在计算得到该目标文件的目标信息摘要值后,还可以基于该目标信息摘要值来确定目标文件的文件内容是否被篡改。当确定该目标文件的文件内容未被篡改时,则打开该目标文件。若确定该目标文件的文件内容被篡改时,则可以放弃打开该目标文件。当然,也可以向用户提示该目标文件已被修改,并询问用户是否继续打开该目标文件。当接收到用户发出的、继续打开该目标文件的指令后,打开该目标文件。
具体地,可以判断该区块链分布式账本中是否存在与该目标信息摘要值相匹配的摘要信息值。若不存在,表明目标文件的文件内容发生了变化,从而导致目标信息摘要值与第一用户对目标文件进行数字签名时该目标文件的信息摘要值不匹配。此时,可以确定目标文件的文件内容被篡改。
另外,当目标文件中写入有携带该第一用户的第一公钥的签名标记,并判断区块链分布式账本中存在与该目标信息摘要值相匹配的摘要信息值时,还可以判断该区块链分布式账本中与目标信息摘要值对应存储的公钥是否与签名标记中的第一公钥相匹配。若不匹配,表明与目标信息摘要值对应存储的公钥不是第一用户的公钥。由于当目标文件的文件内容未被篡改时,可以查找到与目标信息摘要值对应存储的公钥,且所查找到的公钥与第一用户的第一公钥相匹配。因而,此时也可以确定该目标文件的文件内容被篡改。
其中,当区块链分布式账本中存在与该目标信息摘要值相匹配的摘要信息值、第一用户的第一公钥与该摘要信息值对应存储的公钥相匹配,并且利用该公钥解密对应存储的数字签名得到的信息摘要值与目标信息摘要值相匹配时,则确定该目标文件的文件内容未被篡改。
假设该PDF客户端确定该目标文件的文件内容未被篡改,并打开该目标文件。在打开该目标文件后,该PDF客户端可以接收变更者发出的、针对该目标文件的所有权变更指令。其中,该所有权变更指令用于指示:将第一用户对目标文件的所有权变更为第二用户。
然后,获得第二用户的第二公钥和第二私钥。并且,可以提示更变者输入用于验证变更者权限的私钥。在接收到变更者输入的私钥后,可以利用该私钥对第二私钥进行加密计算,从而得到第二数字签名。之后,判断第一公钥是否能解密第二数字签名。当第一公钥能解密第二数字签名时,确定变更者具有变更该目标文件的所有权的权限。此时,可以利用第二用户的第二私钥对目标文档的信息摘要值进行加密计算,从而得到第三数字签名。即,可以得到第二用户对目标文档的数字签名。此时,第二用户拥有目标文件的所有权,实现了将第一用户对该目标文件的所有权变更成了第二用户。
在计算得到第三数字签名后,可以将第二公钥、目标文件的信息摘要值、第三数字签名、第一公钥和第二数字签名对应存储至区块链分布式账本中。这样,可以保证存储至该区块链分布式账本中的第二公钥和第三数字签名是不可篡改的,从而保证了该第三数字签名的有效性。并且,可以基于第一公钥和第二数字签名来验证该第三数字签名是否是经过第一用户授权的,即可以验证该第三数字签名是否是合法签名。
另外,还可以基于对应存储在区块链账本中的信息摘要值和/或第一公钥,来追溯该目标文件在历史上经历了几次所有权变更,以及所有权变更所对应的变更时间。
这样,在完成对该目标文件的所有权更换之后,还可以基于该第三数字签名来验证该目标文件的文件内容是否被篡改。其中,为了验证该目标文件的文件内容是否被篡改,该PDF客户端还可以计算该目标文件当前的信息摘要值(例如MD5值)。然后,查找区块链分布式账本中的、与当前的MD5值匹配的MD5值。当在该区块链分布式账本中查找不到与当前的MD5值匹配的MD5值时,则表明该目标文件的文件内容被篡改。
当在该区块链分布式账本中能够查找到与当前的MD5值匹配的MD5值时,该PDF客户端还可以获取区块链分布式账本中与该MD5值对应存储的第二公钥、第三数字签名、第一公钥和第二数字签名。然后,利用获取得到的第二公钥对该第三数字签名进行解密,并利用解密得到的MD5值与当前的MD5值进行匹配。若匹配成功,则表明该目标文件的文件内容未被篡改。而且,利用第一公钥对第二数字签名进行解密,若能解密成功,且解密得到公钥与该第二公钥相匹配,则说明该第三数据签名是合法签名。
其中,当目标文件中写入有签名标记时,在将第二公钥、目标文件的信息摘要值、第三数字签名、第一公钥和第二数字签名对应存储至区块链分布式账本中之后,为了后续便于对第三数字签名进行验证,还可以更新该签名标记,从而得到更新后的签名标记。
其中,更新后的签名标记中可以包括:第二公钥、目标文件的信息摘要值、第三数字签名的签名时间和第二用户的身份标识中的至少一项,当然并不局限于此。
当签名标记中携带有第二用户的身份标识时,PDF客户端可以在接收到针对该目标文件的数字签名的验证指令时,先向用户展示该第二用户的身份标识。当用户对该身份标识进行确认之后,即在用户确认是第二用户的数字签名后,PDF客户端可以计算该目标文件当前的MD5值,并可以在区块链分布式账本中查找该当前的MD5值,并根据查找结果执行相应的操作。反之,当用户对该身份标识进行否认时,则确定该目标文件被篡改。
当该签名标记中还携带有目标文件的信息摘要值时,在计算得到目标文件当前的MD5值之后,该PDF客户端还可以判断签名标记中携带的信息摘要值是否与该当前的MD5值相等。若不相等,则确定该目标文件被篡改。若相等,则相当,则调用区块链SDK查找区块链分布式账本中的、与当前的MD5值匹配的MD5值。
当该签名标记中还携带有第三数字签名的签名时间时,而且,在该区块链分布式账本中能查找到与当前的MD5值匹配的MD5值时,该PDF客户端还可以确定区块链分布式账本中匹配成功的MD5值所对应的存储时间戳。并判断该存储时间戳与第三数字签名的签名时间的时间间隔是否小于预设阈值。若大于等于预设阈值,则确定目标文件被篡改。其中,该预设阈值可以由本领域技术人员根据实际情况进行设定,在此不做限定。
反之,若小于预设阈值,则可以确定目标文件未被篡改。其中,当该签名标记中还携带有第二公钥时,还可以判断区块链分布式账本中的、该匹配成功的MD5值所对应存储的公钥是否与该签名标记中携带的第二公钥匹配。若不匹配,则确定该目标文件被篡改。
若匹配,则利用该对应存储的公钥,对区块链分布式账本中的、与该匹配成功的MD5值对应存储的数字签名进行解密。若解密失败,确定目标文件被篡改。若解密成功,判断解密得到的MD5值是否与该匹配成功的MD5值相同。若相同,确定目标文件未被篡改。若不相同,则表明该对应存储的数字签名很可能是恶意用户伪造的数字签名。此时,为了保证第三数字签名的有效性,可以再次利用本发明实施例提供的数字签名方式对该目标文件进行数字签名。
其中,为了签名标记中所携带的内容不被恶意用户篡改,在得到更新后的签名标记之后,还可以利用第二用户的私钥对该更新后的签名标记中所携带的内容进行数字签名,这是合理的。
综上,由于区块链分布式账本是集体维护的分布式数据库,并具有去中心化和信息不可篡改性等特点。因而,应用本发明实施例提供的文件签名方法,可以确保数字签名的有效性,即可以保证该数字签名不被篡改,从而提高了数据的安全性。而且,当变更者具有所有权变更权限时,可以将目标文件的所有权变更为第二用户,实现对目标文件的所有权的变更。
相应于上述方法实施例,本发明实施例还提供了一种文件签名装置,参见图2,应用于文档阅读客户端,该装置可以包括:
接收模块201,用于在打开目标文件后,接收变更者发出的、针对目标文件的所有权变更指令;所有权变更指令用于指示:将第一用户对目标文件的所有权变更为第二用户;其中,对目标文件进行了数字签名的第一用户的第一公钥、目标文件的信息摘要值,以及第一公钥所对应的第一私钥对信息摘要值进行加密计算所得的第一数字签名对应存储在区块链分布式账本中;
第一计算模块202,用于利用变更者输入的私钥对第二用户的第二公钥进行加密计算,得到第二数字签名;
验证模块203,用于基于第一公钥和第二数字签名,验证变更者是否具有变更目标文件的所有权的权限;
第二计算模块204,用于当变更者具有变更目标文件的所有权的权限时,利用第二公钥所对应的第二私钥对信息摘要值进行加密计算,得到第三数字签名;
存储模块205,用于将第二公钥、信息摘要值、第三数字签名、第一公钥和第二数字签名对应存储至区块链分布式账本中。
在本发明实施例中,文档阅读客户端在打开目标文件后,可以接收变更者发出的、针对目标文件的所有权变更指令。其中,对目标文件进行了数字签名的第一用户的第一公钥、目标文件的信息摘要值,以及第一公钥所对应的第一私钥对信息摘要值进行加密计算所得的第一数字签名对应存储在区块链分布式账本中。由于该所有权变更指令用于指示:将第一用户对目标文件的所有权更变为第二用户。因而,可以利用变更者输入的私钥对第二用户的第二公钥进行加密计算,得到第二数字签名。然后,基于第一公钥和第二数字签名,验证变更者是否具有变更该目标文件的所有权的权限。当第一公钥能解密该第二数字签名时,该变更者具有变更该目标文件的所有权的权限。此时,可以利用第二公钥所对应的第二私钥对该目标文件的信息摘要值进行加密计算,得到第三数字签名。并且,可以将第二公钥、该目标文件的信息摘要值、第三数字签名、第一公钥和第二数字签名对应存储至区块链分布式账本中。这样,使得当变更者具有所有权变更权限时,可以将目标文件的所有权变更为第二用户,实现目标文件的所有权变更。
其中,由于区块链分布式账本是集体维护的分布式数据库,并具有去中心化和信息不可篡改性等特点。因而,该种数字签名方式,避免了现有技术中将数字签名写在文件尾部所造成的数字签名容易被篡改的情况发生,确保了第二用户的第三数字签名的有效性,即可确保变更所有权的有效性。
另外,将第二公钥、目标文件的信息摘要值、第三数字签名、第一公钥和第二数字签名对应存储至区块链分布式账本中,可以便于后续利用该信息摘要值和第二公钥对该第三数字签名进行验证。而且,便于后续利用该第一公钥和该第二数字签名来验证该第三数字签名是否是经过第一用户授权的,即,便于后续验证该第三数字签名是否为合法签名。当验证该第三数字签名为合法签名时,还可以利用该第一公钥来追溯该目标文件在历史上经历了几次所有权变更,以及所有权变更所对应的变更时间。
可选地,在本发明的一个实施例中,验证模块203可以包括:
第一判断子模块,用于判断第一公钥是否能解密第二数字签名;其中,当第一公钥能解密第二数字签名时,变更者具有变更目标文件的所有权的权限;当第一公钥不能解密第二数字签名时,变更者不具有变更目标文件的所有权的权限。
可选地,在本发明的另一个实施例中,验证模块203可以包括:
发送子模块,将第一公钥和第二数字签名发送给区块链开发软件,以使区块链开发软件验证第一公钥是否能解密第二数字签名,并当验证第一公钥能解密第二数字签名时,向文档阅读客户端发送验证通过消息。
可选地,在本发明实施例中,该装置还可以包括:
第三计算模块,用于在接收到针对目标文件的打开指令后,计算目标文件的当前信息摘要值作为目标信息摘要值;
确定模块,用于基于目标信息摘要值,确定目标文件的文件内容是否被篡改;
第一处理模块,用于当目标文件的文件内容未被篡改时,打开目标文件;
第二处理模块,用于当目标文件的文件内容被篡改时,放弃打开目标文件。
可选地,在本发明实施例中,确定模块可以包括:
第二判断子模块,用于判断区块链分布式账本中是否存在与目标信息摘要值相匹配的摘要信息值;
确定子模块,用于当区块链分布式账本中不存在与目标信息摘要值相匹配的摘要信息值时,确定目标文件的文件内容被篡改。
可选地,目标文件中写入有签名标记,签名标记中携带有第一公钥;相应地,该装置还可以包括:
第三判断子模块,用于当区块链分布式账本中存在与目标信息摘要值相匹配的摘要信息值时,判断区块链分布式账本中与目标信息摘要值对应存储的公钥是否与签名标记中携带的第一公钥匹配;
触发子模块,用于当区块链分布式账本中与目标信息摘要值对应存储的公钥不与签名标记中携带的第一公钥匹配时,触发确定子单元执行确定目标文件的文件内容被篡改的步骤。
可选地,目标文件中写入有签名标记,相应地,该装置还可以包括:
更新模块,用于在将第二公钥、信息摘要值、第三数字签名、第一公钥和第二数字签名对应存储至区块链分布式账本中之后,更新签名标记,得到更新后的签名标记;其中,更新后的签名标记中包括:第二公钥、信息摘要值、第三数字签名的签名时间和第二用户的身份标识中的至少一项。
相应于上述方法实施例,本发明实施例还提供了一种电子设备,参见图3,包括处理器301、通信接口302、存储器303和通信总线304,其中,处理器301,通信接口302,存储器303通过通信总线304完成相互间的通信,该电子设备中安装有文档阅读客户端;
存储器303,用于存放计算机程序;
处理器301,用于执行存储器303上所存放的程序时,实现上述任一项文件签名方法的方法步骤。
在本发明实施例中,电子设备中的文档阅读客户端在打开目标文件后,可以接收变更者发出的、针对目标文件的所有权变更指令。其中,对目标文件进行了数字签名的第一用户的第一公钥、目标文件的信息摘要值,以及第一公钥所对应的第一私钥对信息摘要值进行加密计算所得的第一数字签名对应存储在区块链分布式账本中。由于该所有权变更指令用于指示:将第一用户对目标文件的所有权更变为第二用户。因而,可以利用变更者输入的私钥对第二用户的第二公钥进行加密计算,得到第二数字签名。然后,基于第一公钥和第二数字签名,验证变更者是否具有变更该目标文件的所有权的权限。当第一公钥能解密该第二数字签名时,该变更者具有变更该目标文件的所有权的权限。此时,可以利用第二公钥所对应的第二私钥对该目标文件的信息摘要值进行加密计算,得到第三数字签名。并且,可以将第二公钥、该目标文件的信息摘要值、第三数字签名、第一公钥和第二数字签名对应存储至区块链分布式账本中。这样,使得当变更者具有所有权变更权限时,可以将目标文件的所有权变更为第二用户,实现目标文件的所有权变更。
其中,由于区块链分布式账本是集体维护的分布式数据库,并具有去中心化和信息不可篡改性等特点。因而,该种数字签名方式,避免了现有技术中将数字签名写在文件尾部所造成的数字签名容易被篡改的情况发生,确保了第二用户的第三数字签名的有效性,即可确保变更所有权的有效性。
另外,将第二公钥、目标文件的信息摘要值、第三数字签名、第一公钥和第二数字签名对应存储至区块链分布式账本中,可以便于后续利用该信息摘要值和第二公钥对该第三数字签名进行验证。而且,便于后续利用该第一公钥和该第二数字签名来验证该第三数字签名是否是经过第一用户授权的,即,便于后续验证该第三数字签名是否为合法签名。当验证该第三数字签名为合法签名时,还可以利用该第一公钥来追溯该目标文件在历史上经历了几次所有权变更,以及所有权变更所对应的变更时间。
相应于上述方法实施例,本发明实施例还提供了一种可读存储介质,可读存储介质内存储有计算机程序,计算机程序被电子设备中的处理器执行时实现上述任一项文件签名方法的方法步骤;该电子设备中安装有文档阅读客户端。
本发明实施例提供的可读存储介质中存储的计算机程序被电子设备的处理器执行后,并在电子设备中的文档阅读客户端在打开目标文件后,文档阅读客户端可以接收变更者发出的、针对目标文件的所有权变更指令。其中,对目标文件进行了数字签名的第一用户的第一公钥、目标文件的信息摘要值,以及第一公钥所对应的第一私钥对信息摘要值进行加密计算所得的第一数字签名对应存储在区块链分布式账本中。由于该所有权变更指令用于指示:将第一用户对目标文件的所有权更变为第二用户。因而,可以利用变更者输入的私钥对第二用户的第二公钥进行加密计算,得到第二数字签名。然后,基于第一公钥和第二数字签名,验证变更者是否具有变更该目标文件的所有权的权限。当第一公钥能解密该第二数字签名时,该变更者具有变更该目标文件的所有权的权限。此时,可以利用第二公钥所对应的第二私钥对该目标文件的信息摘要值进行加密计算,得到第三数字签名。并且,可以将第二公钥、该目标文件的信息摘要值、第三数字签名、第一公钥和第二数字签名对应存储至区块链分布式账本中。这样,使得当变更者具有所有权变更权限时,可以将目标文件的所有权变更为第二用户,实现目标文件的所有权变更。
其中,由于区块链分布式账本是集体维护的分布式数据库,并具有去中心化和信息不可篡改性等特点。因而,该种数字签名方式,避免了现有技术中将数字签名写在文件尾部所造成的数字签名容易被篡改的情况发生,确保了第二用户的第三数字签名的有效性,即可确保变更所有权的有效性。
另外,将第二公钥、目标文件的信息摘要值、第三数字签名、第一公钥和第二数字签名对应存储至区块链分布式账本中,可以便于后续利用该信息摘要值和第二公钥对该第三数字签名进行验证。而且,便于后续利用该第一公钥和该第二数字签名来验证该第三数字签名是否是经过第一用户授权的,即,便于后续验证该第三数字签名是否为合法签名。当验证该第三数字签名为合法签名时,还可以利用该第一公钥来追溯该目标文件在历史上经历了几次所有权变更,以及所有权变更所对应的变更时间。
相应于上述方法实施例,本发明实施例还提供了一种包含指令的计算机程序产品,当其在电子设备上运行时,使得电子设备执行:上述任一项文件签名方法的方法步骤;该电子设备中安装有文档阅读客户端。
本发明实施例提供的包含指令的计算机程序产品,当其在电子设备上运行时,使得电子设备中的文档阅读客户端在打开目标文件后,文档阅读客户端可以接收变更者发出的、针对目标文件的所有权变更指令。其中,对目标文件进行了数字签名的第一用户的第一公钥、目标文件的信息摘要值,以及第一公钥所对应的第一私钥对信息摘要值进行加密计算所得的第一数字签名对应存储在区块链分布式账本中。由于该所有权变更指令用于指示:将第一用户对目标文件的所有权更变为第二用户。因而,可以利用变更者输入的私钥对第二用户的第二公钥进行加密计算,得到第二数字签名。然后,基于第一公钥和第二数字签名,验证变更者是否具有变更该目标文件的所有权的权限。当第一公钥能解密该第二数字签名时,该变更者具有变更该目标文件的所有权的权限。此时,可以利用第二公钥所对应的第二私钥对该目标文件的信息摘要值进行加密计算,得到第三数字签名。并且,可以将第二公钥、该目标文件的信息摘要值、第三数字签名、第一公钥和第二数字签名对应存储至区块链分布式账本中。这样,使得当变更者具有所有权变更权限时,可以将目标文件的所有权变更为第二用户,实现目标文件的所有权变更,并实现第二用户对该目标文件的数字签名。
其中,由于区块链分布式账本是集体维护的分布式数据库,并具有去中心化和信息不可篡改性等特点。因而,该种数字签名方式,避免了现有技术中将数字签名写在文件尾部所造成的数字签名容易被篡改的情况发生,确保了第二用户的第三数字签名的有效性,即可确保变更所有权的有效性。
另外,将第二公钥、目标文件的信息摘要值、第三数字签名、第一公钥和第二数字签名对应存储至区块链分布式账本中,可以便于后续利用该信息摘要值和第二公钥对该第三数字签名进行验证。而且,便于后续利用该第一公钥和该第二数字签名来验证该第三数字签名是否是经过第一用户授权的,即,便于后续验证该第三数字签名是否为合法签名。当验证该第三数字签名为合法签名时,还可以利用该第一公钥来追溯该目标文件在历史上经历了几次所有权变更,以及所有权变更所对应的变更时间。
上述电子设备提到的通信总线可以是外设部件互连标准(PeripheralComponentInterconnect,PCI)总线或扩展工业标准结构(Extended IndustryStandardArchitecture,EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessing,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、电子设备、可读存储介质和包含指令的计算机程序产品实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。