一种高安全性的软件安装方法
技术领域
本发明涉及软件工程领域,提供了一种高安全性的软件安装方法,用于在复杂环境下,从云端为终端计算机提供安全、可靠的应用软件安装包。
背景技术
现有技术中,用户为了在其计算机上安装一份应用软件,通常需要从某处获得该软件的安装包,获取的主要来源从原始的软盘,到光盘、U盘,一直在变化。在互联网大发展后,现在的应用软件常常是从网上下载,即由软件厂商在其主页上提供软件安装包的下载链接,用户根据该链接,从软件厂商的下载服务器下载该软件安装包后进行安装。
但是,现有技术中,这种根据下载链接从某个下载服务器下载软件的方法具有缺陷,首先,下载服务器在软件发布初期可能需要承受大量的下载请求,从而导致下载缓慢,甚至中断下载,可靠性降低;其次,下载服务器如果出现故障、黑客入侵时,软件的安全性就会受到威胁。此外,对于需要保密的软件安装包(例如软件厂商指定在某个时刻才可以下载,之前需要保密),下载链接也很容易被提前泄露出去。
发明内容
为了解决上述技术问题,本发明提供了一种高安全性的软件安装方法。
为了达到上述目的,本发明所采用的技术方案是:
一种高安全性的软件安装方法,该方法使用n台云端服务器为软件下载提供云服务,并使用一台管理服务器作为软件安装包的分发中心,用户的计算机内安装有云客户端,通过云客户端进行软件安装,云客户端中预先安装了管理服务器的数字证书,n>2,该方法的步骤包括:
步骤1:软件厂商将软件安装包上传到管理服务器上,管理服务器使用数字签名算法对软件安装包进行数字签名,获得签名结果,即S=R(A,K),其中A是软件安装包,K是管理服务器的私钥,S是签名结果,R是数字签名算法,管理服务器将所述签名结果上传到每一台云端服务器;
步骤2:管理服务器使用有限域算法处理该软件安装包,从而生成n个子安装包,并将每个子安装包分别上传到一台云端服务器中,所述子安装包中的任意t个可以通过有限域重构算法重构出软件安装包,其中t是一个预先确定的数值,1<t<n;
步骤3:用户在其计算机上使用云客户端连接n台云端服务器,从n台云端服务器上分别下载其保存的子安装包以及签名结果;
步骤4:当所有下载都结束后,云客户端检查其下载获得的子安装包数量,如果下载的子安装包数量小于t,则云客户端向用户报告下载失败,流程结束,如果下载的子安装包数量大于等于t,则继续执行下列步骤;
步骤5:云客户端核对所有下载获得的签名结果,如果所有签名结果都各不相同,则云客户端向用户报告下载失败,流程结束,否则采用相同数量最多的签名结果作为正确的签名结果;
步骤6:令i=1,云客户端从下载的所有子安装包中随机选择t个子安装包集合,记为集合Ai;
步骤7:对选择的集合Ai使用有限域重构算法进行计算,重构出软件安装包;
步骤8:使用管理服务器的数字证书和步骤5获得的签名结果,对步骤7获得的软件安装包进行数字签名验证,如果验证通过,则执行该软件安装包进行软件安装,流程结束;如果验证不通过,则继续执行下列步骤;
步骤9:令i增加1,并重新从下载的所有子安装包中随机选择t个子安装包集合Ai,且对任意的j<i,满足条件Ai≠Aj,j为整数;如果找不到满足该条件的集合,则云客户端向用户报告下载失败,流程结束,否则转到步骤7。
其中n=10,t=6。
其中所述n台云端服务器编号为cloud 1,cloud 2,…………,cloud n;
所述有限域算法的具体步骤如下:
1)管理服务器选择一个素数p,在有限域GF(p)中随机选择t-1个数a1,a2,…,at-1,从而构造一个t-1次多项式f(x),即
其中,p是一个预先确定的公开的素数,但是a1,a2,…,at-1保密,只有产生它们的管理服务器知道,x是自变量,k为整数,1≤k<t;
2)管理服务器计算f(1),f(2),……,f(n),获得n个函数值,每个函数值做为一个子安装包;
3)管理服务器将f(j1)上传到cloud j1,1≤j1≤n。
其中ak在GF(p)上满足:ak mod k=0。
其中所述有限域重构算法的具体步骤如下:
1)获取t个子安装包,以及每个子安装包对应的云端服务器编号;
2)基于上述t个子安装包及对应的云端服务器编号,重构出多项式f(x),从而获得软件安装包。
有益效果:本发明提出了一种高安全性的软件安装方法,该软件安装方法使用多台云端服务器存储软件安装包,用户通过云客户端从云端服务器下载软件并安装。其中软件安装包并不是每台云端服务器各存储一个,而是通过本发明的有限域算法,将软件安装包的有限域计算结果(即子安装包)分别存储在各个云端服务器上,云客户端只有获得其中预定数量的子安装包,通过有限域重构算法,才能获得软件安装包,从而大大提高了软件安装的容错性、鲁棒性、安全性和可靠性。
附图说明
图1:实现本发明软件安装方法的系统结构
具体实施方式
如图1所示,本发明提供了n台云端服务器为软件下载提供云服务,n>2,另外还提供了一台管理服务器作为软件的分发中心。用户计算机安装有云客户端,通过云客户端进行软件安装,管理服务器具有其数字证书和对应的私钥,该数字证书已预先安装到云客户端中。
软件安装的主要步骤流程如下:
步骤1:软件厂商将软件安装包上传到管理服务器上,管理服务器使用数字签名算法对软件安装包进行数字签名,获得签名结果,即S=R(A,K),其中A是软件安装包,K是管理服务器的私钥,S是签名结果,R是数字签名算法。数字签名算法可以采用任意一种公知的数字签名算法。然后,管理服务器将所述签名结果上传到每一台云端服务器。
步骤2:管理服务器使用有限域算法处理该软件安装包,从而生成n份子安装包并上传到云端服务器(详细的有限域算法在下面说明),每一份子安装包都上传到一台云端服务器上保存,从而每台云端服务器都存储了一份子安装包。
本发明所提出的有限域算法具有这样的特性:只要获得n份子安装包中的t份,就可以通过计算重构出软件安装包,如果获得的子安装包数量小于t份,就无法重构出软件安装包,其中t是一个预先设定的数值,1<t<n。优选的,n=10,t=6,只要获得10份子安装包中的6份,就可以重构出完整的软件安装包,如果小于6份,就无法重构。
步骤3:用户在其计算机上使用云客户端连接n台云端服务器,从n台云端服务器上分别下载其保存的子安装包以及签名结果。
步骤4:由于各种原因,从云端服务器的下载可能被拒绝或者被中断,但是无论每个下载是否成功,当所有下载都结束后,云客户端检查其下载获得的子安装包数量,如果下载的子安装包数量小于t,则云客户端向用户报告下载失败,流程结束,如果下载的子安装包数量大于等于t,则继续执行下列步骤。
步骤5:云客户端核对所有下载获得的签名结果,从理论上说,下载的n个签名结果都应该是相同的,但是可能由于网络传输错误等原因,少数下载的签名结果与其他签名结果不一致。因此,云客户端采用少数服从多数的原则,剔除少数与其他签名结果不一致的签名结果,采用相同数量最多的签名结果作为正确的签名结果。如果所有签名结果都各不相同,则云客户端向用户报告下载失败,流程结束,否则继续执行下列步骤。
步骤6:令i=1,云客户端从下载的所有子安装包中随机选择t个子安装包集合,设为Ai。
步骤7:对选择的集合Ai使用有限域重构算法(具体算法在下面说明)进行计算,重构出软件安装包。
步骤8:使用管理服务器的数字证书和步骤5获得的签名结果,对软件安装包进行数字签名验证,如果验证通过,则执行该软件安装包进行软件安装,流程结束。如果验证不通过,则继续执行下列步骤。
步骤9:令i增加1,并重新从下载的所有子安装包中随机选择t个子安装包集合Ai,且对任意的j<i,满足条件Ai≠Aj,j为整数;如果找不到满足该条件的集合,则云客户端向用户报告下载失败,流程结束,否则转到步骤7。
有限域算法:
以下说明有限域算法的具体过程:
1)管理服务器选择一个素数p,在有限域GF(p)中随机选择t-1个数a1,a2,…,at-1,从而构造一个t-1次多项式f(x):
这里,p可以是一个预先确定的公开的素数,但是a1,a2,…,at-1保密,只有产生它们的管理服务器知道,x是自变量,k为整数,1≤k<t。
2)管理服务器计算f(1),f(2),……,f(n),获得n个函数值,这就是n个子安装包。
3)对云端服务器进行编号,设为cloud 1,cloud 2,…………,cloud n,管理服务器将f(j1)上传到cloud j1,1≤j1≤n。
在一个优选方案中,上述各个ak的选择不能是任意的,本申请的有限域算法的特性要求至少需要t个子安装包才能重构软件安装包,而t-1个子安装包不行,为了满足这一特性,同时为了抵御黑客的强度攻击和中间人攻击,具有雪崩效应,从数学强度的分析看,应该使ak在GF(p)上满足:ak mod k=0。
有限域重构算法:
以下说明有限域重构算法,用于使用n个子安装包(即f(1),f(2),……,f(n))中的t个子安装包重构软件安装包。
1)获取t个子安装包,以及每个子安装包对应的云端服务器编号(即云客户端在下载获得每个子安装包时,需要记录从哪个编号的云端服务器下载的)。
2)由于函数f(x)是一个t-1次多项式,基于上述t个子安装包,可重构出该多项式曲线。也就是说,只要获得t个云端服务器所存储的t个函数值以及云端服务器的编号,将其代入f(x),就可以构造出t个t元一次方程,求解这个方程组就可以计算出软件安装包。
基于本发明的软件安装方法,软件厂商实际上将软件安装包存放于n台云端服务器上,并且需要其中t台云端服务器,才可以重构软件安装包。这样一方面容错性大大提高,即使有少数云端服务器出现故障,只要故障服务器不超过n-t台,云客户端也仍然可以获得软件安装包;另一方面,对于需要保密的软件安装包,其安全性也可以获得提高,因为黑客如果需要获得该软件安装包,其至少需要获得t台云端服务器的控制权,其难度无疑大大提高。在实际应用中,n台云端服务器可以放置在不同地方,有不同的管理人员,采用不同的系统和存储方式,这样想要同时攻击t台云端服务器几乎就是不可能的。最后,用户在下载软件安装包时,下载流量分布在n台云端服务器上,并且只要有t个下载成功即可,从而可以减轻服务器的负荷,提高下载可靠性,通过数字签名的使用,也保证了下载的完整性和可靠性。
以上所述的本发明实施方式,并不构成对本发明保护范围的限定。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明的权利要求保护范围之内。