发明内容
本发明实施例提供了一种软件升级方法、客户端及电子设备,以解决目前软件更新容易被黑客所利用,用于传播病毒,广告等信息,给软件厂商带来巨大的损失的问题。
第一方面,本申请提供了一种软件升级方法,该方法包括:
在客户端登录服务平台对应的服务器时,所述客户端生成第一共享秘钥;
所述客户端向服务器发起软件更新请求;
所述客户端接收所述服务器下发的目标软件升级包地址加密信息,所述目标软件升级包地址加密信息为所述服务器根据所述第二共享秘钥加密目标软件升级包地址信息得到的,所述第一共享秘钥和所述第二共享秘钥的值相同;
所述客户端根据所述第一共享秘钥解密所述目标软件升级包地址加密信息得到所述目标软件升级包地址信息,并根据所述目标软件升级包地址信息下载目标软件升级包。
进一步的,所述客户端生成第一共享秘钥,包括:
所述客户端生成配对的第一公钥和第一私钥;
所述客户端接收服务器生成的第二公钥,并根据所述第二公钥和所述第一私钥生成第一共享秘钥;
所述客户端将所述第一公钥发送到所述服务器,以使得所述服务器根据所述第一公钥和与所述第二公钥配对的第二私钥生成所述第二共享秘钥。
进一步的,所述客户端向服务器发起软件更新请求,具体包括:
所述客户端获取参数时间戳、客户端对应的用户登录信息、客户端的唯一标识信息以及客户端软件的版本号;
所述客户端利用AES加密算法及所述第一共享秘钥计算参数时间戳、客户端对应的用户登录信息、客户端的唯一标识信息以及客户端软件的版本号对应的第一KEY值;
所述客户端向所述服务器发送软件更新请求,所述软件更新请求中包括所述第一KEY值、所述参数时间戳、所述客户端对应的用户登录信息、所述客户端的唯一标识信息以及所述客户端软件的版本号。
进一步的,所述服务器在确定所述第一KEY值与所述服务器自身预先得到的第二KEY值一致时,确定所述客户端的更新请求合法,其中,所述第二KEY值为所述服务器利用AES加密算法及所述第二共享秘钥计算所述参数时间戳、所述客户端对应的用户登录信息、所述客户端的唯一标识信息以及客户端软件的版本号。
进一步的,所述目标软件升级包地址加密信息中还包括待下载目标软件升级包的第一哈希值;所述客户端根据所述第一共享秘钥解密所述目标软件升级包地址加密信息得到所述目标软件升级包地址信息,并根据所述目标软件升级包地址信息进行软件升级包括:
所述客户端根据所述第一共享秘钥解密所述目标软件升级包地址加密信息,得到所述第一哈希值和所述目标软件升级包下载地址信息;
所述客户端根据所述目标软件升级包地址信息下载所述目标软件升级包。
进一步的,所述方法还包括:
在所述客户端下载所述目标软件升级包之后,计算所述目标软件升级包的第二哈希值;
所述客户端比较所述第一哈希值和所述第二哈希值是否匹配,若是,则确定所述目标软件升级包为合法软件升级包。
第二方面,本申请提供一种客户端,应用于电子设备,该客户端包括:
生成模块,用于在客户端登录服务平台对应的服务器时,生成第一共享秘钥;
发送模块,用于向服务器发起软件更新请求;
接收模块,用于接收所述服务器下发的目标软件升级包地址加密信息,所述目标软件升级包地址加密信息为所述服务器根据所述第二共享秘钥加密目标软件升级包地址信息得到的,所述第一共享秘钥和所述第二共享秘钥的值相同;
下载模块,用于根据所述第一共享秘钥解密所述目标软件升级包地址加密信息得到所述目标软件升级包地址信息,并根据所述目标软件升级包地址信息下载目标软件升级包。
进一步的,所述生成模块具体用于:
生成配对的第一公钥和第一私钥;
接收服务器生成的第二公钥,并根据所述第二公钥和所述第一私钥生成第一共享秘钥;
将所述第一公钥发送到所述服务器,以使得所述服务器根据所述第一公钥和与所述第二公钥配对的第二私钥生成所述第二共享秘钥。
进一步的,所述发送模块具体用于:
获取参数时间戳、客户端对应的用户登录信息、客户端的唯一标识信息以及客户端软件的版本号;
利用AES加密算法及所述第一共享秘钥计算参数时间戳、客户端对应的用户登录信息、客户端的唯一标识信息以及客户端软件的版本号对应的第一KEY值;
向所述服务器发送软件更新请求,所述软件更新请求中包括所述第一KEY值、所述参数时间戳、所述客户端对应的用户登录信息、所述客户端的唯一标识信息以及所述客户端软件的版本号。
进一步的,所述服务器在确定所述第一KEY值与所述服务器自身预先得到的第二KEY值一致时,确定所述客户端的更新请求合法,其中,所述第二KEY值为所述服务器利用AES加密算法及所述第二共享秘钥计算所述参数时间戳、所述客户端对应的用户登录信息、所述客户端的唯一标识信息以及客户端软件的版本号。
第三方面,本发明还提供一种电子设备,包括:存储器,处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时可以实现第一方面中任一所述的方法。
第四方面,本发明还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面中任一所述的方法。
本发明实施例通过在客户端登录服务平台对应的服务器时,生成第一共享秘钥;向服务器发起软件更新请求;接收服务器下发的目标软件升级包地址加密信息,目标软件升级包地址加密信息为服务器根据第二共享秘钥加密目标软件升级包地址信息得到的,第一共享秘钥和第二共享秘钥的值相同;根据第一共享秘钥解密目标软件升级包地址加密信息得到目标软件升级包地址信息,并根据目标软件升级包地址信息下载软件升级包。本发明实施例中在客户端软件更新过程中,通过客户端与服务器交互增加共享秘钥鉴权的逻辑,保障客户端是合法的客户端,防止黑客进行篡改,提高了软件更新的安全性。
具体实现方式为:
APublickey=RSA.CreatePair(APrivatekey);
即第一公钥APublickey是调用RSA的生成配对钥匙接口RSA.CreatePair来生成的,从而最终客户端则生成了第一公钥APublickey和第一私钥APrivatekey。
需要说明的是,本发明实施例中所述非对称加密算法还可以是RSA外的其他算法,如Elgamal算法、背包算法、Rabin算法、D-H算法、ECC(椭圆曲线加密算法)等,此处不作限定,当然,此处优选最新加密最安全的非对称加密算法。
S1012、客户端接收服务器生成的第二公钥,并根据第二公钥和第一私钥生成第一共享秘钥。
同样的,服务器也会依照上述客户端生成第一公钥和第一私钥的类似方式来生成一对公钥和私钥信息,即第二公钥和第二私钥,该第二公钥和第二私钥是针对本实施例中该客户端生成的,因为服务器的生成第二公钥和第二私钥时需要依据客户端对应的用户身份证明(User Identification,UID)以及随机数据来生成私钥,从而尽可能保障不同属性的客户端(例如直播平台中不同房间的客户端)的私钥不一样。具体实现方式如下:
(1)生成随机数据
Randdata=rand();
通过调用系统函数rand来生成一段随机数据Randdata。
(2)依据UID和随机数生成其哈希值做为第二私钥。
ServerPrivatekey=Md5.Create(Randdata+UID)
通过调用Md5函数的接口Md5.Create来对随机数据和用户的UID拼接到一起计算其Md5值,从而得到了第二私钥。同样的,此处Md5仅为举例,也可以是使用其他哈希函数,如SHA-1等,具体不做限定。当然,此处优选最新加密最安全的哈希算法。
(3)计算公钥。
ServerPublickey=RSA.CreatePair(ServerPrivatekey);
即第二公钥ServerPublickey是通过调用RSA的生成配对钥匙接口RSA.CreatePair来生成的,从而最终客户端则生成了第二公钥ServerPublickey和第二私钥ServerPrivatekey。至此,通过这个步骤就实现了服务器对每个客户端生成一个公钥和私钥信息。
S1013、客户端将第一公钥发送到服务器,以使得服务器根据第一公钥和与第二公钥配对的第二私钥生成第二共享秘钥。
然后服务器和客户端会交换各自的公钥信息,来生成一个共享的秘钥,并且客户端和服务器生成的共享秘钥是同一个值。具体如步骤S1012中客户端生成第一共享秘钥,S1013中服务器生成第二共享秘钥,具体实现如下:
(1)互换公钥。
服务器将服务器的公钥ServerPublickey发送给客户端。
客户端将客户端的公钥ClientPublickey发送给服务器。
(2)客户端生成共享秘钥。
ShareKey=RSA.CreateShareKey(ServerPublickey,ClientPrivatekey);
(3)服务器生成共享秘钥。
ShareKey=RSA.CreateShareKey(ClientPublickey,ServerPrivatekey);
从而2个ShareKey的值是一致的,通过这个步骤就完成了服务器和客户端都生成了相同值的共享秘钥(即第一共享秘钥和第二共享秘钥)。
本发明实施例中为了进一步的考虑到软件更新的多样性,不同的客户端软件版本需要更新下载的更新包是不一样的,同时为了对客户端的请求量进行分流,所以是会存在更新包下载地址有多个,服务器依据客户端的请求来下发更新包的下载地址,同时还包括更新包的校验值(可以是哈希值,如MD5值),然后客户端去下载更新包,并对更新包进行校验值计算与服务器下发的校验值进行校验。为了校验请求更新地址的客户端是一个合法的客户端,本发明实施例中则在请求接口中增加了鉴权值的计算,以提高请求接口的安全性,具体实现如下:
在请求服务器更新包地址的请求接口中,则会携带一个加密的鉴权KEY值,此值则是通过一定算法计算得到,并且每个客户端每一个时刻此值都不一样,那么黑客就比较难的伪造此值,黑客如果通过网络抓包获取到此值,直接填入此值来请求,对于服务器是校验不通过的,因为鉴权KEY对于每个时刻都不一样,每个客户端不一样。从而提高此接口的安全性。具体的,即如图4所示,上述步骤S102具体还可以包括:
S1021、客户端获取参数时间戳、客户端对应的用户登录信息、客户端的唯一标识信息以及客户端软件的版本号;
具体的,客户端获取参数时间戳timestamp、客户端对应的用户登录信息token、客户端的唯一标识信息DID、客户端软件的版本号version。其中,DID全称DeviceIdentification,又称Device ID,是针对设备本身标识的代码,即常说的设备ID。这个ID标识主要区别同类设备的不同型号,一般由技术发明厂商按PCI规范命名,不同厂商的设备可以有重名(由于不同厂商都有唯一的VID,因此并不会混淆身份)。
S1022、客户端利用AES加密算法及第一共享秘钥计算参数时间戳、客户端对应的用户登录信息、客户端的唯一标识信息以及客户端软件的版本号对应的第一KEY值;
具体的,第一KEY值的计算公式具体可以如下:
EncryptKey=AES.Encrypt(timestamp+token+Uid+did+version,ShareKey);
KEY=Md5.Create(EncryptKey)
其中,此处KEY值为第一KEY值,EncryptKey为中间运算值,AES为加密算法,timestamp、token、did、version为步骤S1021中获取的参数,UID为客户端对应的UID,ShareKey为第一共享秘钥。
S1023、客户端向所述服务器发送软件更新请求;
其中,该软件更新请求中包括所述第一KEY值、所述参数时间戳、所述客户端对应的用户登录信息、所述客户端的唯一标识信息以及所述客户端软件的版本号。服务器收到客户端的请求后,则会根据这些相同的信息及自己已经知晓的第二共享秘钥计算得到第二KEY值,服务器会根据第二KEY值对软件更新请求中的第一KEY值进行合法性校验,以确定客户端是一个合法的客户端。
进一步的,服务器在确定所述第一KEY值与所述服务器自身预先得到的第二KEY值一致时,确定客户端的更新请求合法,如果合法,服务器会依据客户端上报的软件版本号以及当前各个更新包接口的网络请求压力来提供给客户端一个软件升级包的下载地址。具体则假设软件升级包下载地址为:
url=http://219.138.21.91/douyucdn.cn/5a548c0d04.data
那么服务器则会使用加密算法和第二共享秘钥来将此地址加密后下发给客户端。
另外为了进一步保障安全性,服务器还可以计算软件升级包的哈希值(例如MD5值)同时下发给客户端。此时即所述目标软件升级包地址加密信息中还包括待下载软件升级包的第一哈希值,服务器下发目标软件升级包地址及目标软件升级包哈希值的方式具体实现方式如下:
EncryptUrl=AES.Encrypt(timestamp+url+md5,ShareKey);
服务器则通过将此加密后的EncryptUrl下方给客户端,其中,url为目标软件升级包地址,md5为目标软件升级包的第一哈希值,此处哈希值以MD5值举例,timestamp为参数时间戳,ShareKey为服务器计算的第二共享秘钥。
此时,如图5所示,步骤S104具体包括:
S1041、客户端根据第一共享秘钥解密目标软件升级包地址加密信息,得到第一哈希值和目标软件升级包下载地址信息;
具体的,客户端接收目标软件升级包地址加密信息后,由于第一共享秘钥和第二共享秘钥相同,客户端即可以通过第一共享秘钥进行解密,此时只有合法的客户端才能够正确的解密服务器下发的更新包地址。具体实现如下:
timestamp+url+md5=AES.Decrypt(EncryptUrl,ShareKey);
客户端通过解密后即可得到目标软件升级包的下载地址url、目标软件升级包的第一哈希值。
S1042、客户端根据目标软件升级包地址信息下载目标软件升级包。
具体的,从而客户端可以使用步骤S1041中解密得到的这个url去下载目标软件升级包。
此时,所述方法还包括:
S105、在客户端下载目标软件升级包之后,计算目标软件升级包的第二哈希值;
具体的,客户端在下载目标软件升级包之后,利用服务器计算第一哈希值相同的哈希算法,计算目标软件升级包的第二哈希值。
S106、客户端比较第一哈希值和第二哈希值是否匹配,若是,则确定所述目标软件升级包为合法软件升级包。
具体的,客户端比较第一哈希值和第二哈希值是否匹配,只有匹配该目标软件升级包才是合法软件升级包,否则是非法的软件升级包,客户端可以丢弃该目标软件升级包,不进行升级。
下面介绍本发明实施例中的客户端的实施例。
如图6所示,为本发明实施例中提供一种客户端,应用于电子设备,该客户端包括:
生成模块601,用于在客户端登录服务平台对应的服务器时,生成第一共享秘钥;
发送模块602,用于向服务器发起软件更新请求;
接收模块603,用于接收所述服务器下发的目标软件升级包地址加密信息,所述目标软件升级包地址加密信息为所述服务器根据所述第二共享秘钥加密目标软件升级包地址信息得到的,所述第一共享秘钥和所述第二共享秘钥的值相同;
下载模块604,用于根据所述第一共享秘钥解密所述目标软件升级包地址加密信息得到所述目标软件升级包地址信息,并根据所述目标软件升级包地址信息下载目标软件升级包。
进一步的,所述生成模块601具体用于:
生成配对的第一公钥和第一私钥;
接收服务器生成的第二公钥,并根据所述第二公钥和所述第一私钥生成第一共享秘钥;
将所述第一公钥发送到所述服务器,以使得所述服务器根据所述第一公钥和与所述第二公钥配对的第二私钥生成所述第二共享秘钥。
进一步的,所述发送模块602具体用于:
获取参数时间戳、客户端对应的用户登录信息、客户端的唯一标识信息以及客户端软件的版本号;
利用AES加密算法及所述第一共享秘钥计算参数时间戳、客户端对应的用户登录信息、客户端的唯一标识信息以及客户端软件的版本号对应的第一KEY值;
向所述服务器发送软件更新请求,所述软件更新请求中包括所述第一KEY值、所述参数时间戳、所述客户端对应的用户登录信息、所述客户端的唯一标识信息以及所述客户端软件的版本号。
进一步的,所述服务器在确定所述第一KEY值与所述服务器自身预先得到的第二KEY值一致时,确定所述客户端的更新请求合法,其中,所述第二KEY值为所述服务器利用AES加密算法及所述第二共享秘钥计算所述参数时间戳、所述客户端对应的用户登录信息、所述客户端的唯一标识信息以及客户端软件的版本号。
本发明实施例中还提供一种电子设备,请参见图7,所述电子设备包括:
存储器701,处理器702及存储在所述存储器上并可在所述处理器上运行的计算机程序703,其中,所述处理器702执行所述计算机程序703时可以实现上述软件升级方法。
需要说明的是,本申请涉及的电子设备包括但不限于是:移动终端(手机、智能手机、PAD、笔记本电脑等等)、固定终端(计算机)。
为了便于说明,仅示出了与本发明实施例相关的部分,具体技术细节未揭示的,请参照本发明实施例方法部分。存储器701可用于存储计算机程序703,上述计算机程序包括软件程序、模块和数据,处理器702通过运行执行存储在存储器701的计算机程序703,从而执行电子设备的各种功能应用以及数据处理。
在具体的实施过程中,存储器701可用于存储软件程序以及模块,处理器702通过运行存储在存储器701的软件程序以及模块,从而执行电子设备的各种功能应用以及数据处理。存储器701可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(例如游戏类应用程序、聊天类应用程序)等;存储数据区可存储根据电子设备的使用所创建的数据(游戏配置数据、音频数据)等。此外,存储器701可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。处理器702是电子设备的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或执行存储在存储器701内的软件程序和/或模块,以及调用存储在存储器701内的数据,执行电子设备的各种功能和处理数据,从而对电子设备进行整体监控。可选的,处理器702可包括一个或多个处理单元;优选的,处理器702可集成应用处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等。
本发明实施例还提供一种计算机可读存储介质,其中,该计算机可读存储介质可存储有程序,该程序执行时包括上述方法实施例中记载的软件升级方法的部分或全部步骤。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。