首页> 中国专利> 对软件进行加密、解密的方法及加密、解密的装置

对软件进行加密、解密的方法及加密、解密的装置

摘要

本发明涉及计算机安全领域,具体的讲是对软件进行加密、解密的方法及加密、解密的装置。本发明解密包括以下步骤,步骤201,从第二软件密文的n个段中随机取t个门限密钥因子,将所述第二软件密文恢复为第一软件密文和密钥密文PSK,其中n为大于1的正整数,t为小于等于n的正整数;步骤202,提取所述密钥密文PSK,并根据所述t个门限密钥因子计算出第二密钥,利用该第二密钥将密钥密文PSK解密为第一密钥SK;步骤203,使用所述第一密钥SK将所述第一软件密文解密,获得软件明文。本发明有益效果在于加强了软件加密密钥的保护,使破解者很难通过跟踪软件加载过程实现软件破解的目的。

著录项

  • 公开/公告号CN101311942A

    专利类型发明专利

  • 公开/公告日2008-11-26

    原文格式PDF

  • 申请/专利权人 西门子(中国)有限公司;

    申请/专利号CN200710107636.6

  • 发明设计人 唐文;胡建钧;

    申请日2007-05-23

  • 分类号G06F21/22(20060101);

  • 代理机构

  • 代理人

  • 地址 100102 北京市朝阳区望京中环南路7号

  • 入库时间 2023-12-17 21:02:23

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-01-06

    专利权人的姓名或者名称、地址的变更 IPC(主分类):G06F21/22 变更前: 变更后: 申请日:20070523

    专利权人的姓名或者名称、地址的变更

  • 2015-10-28

    专利权的转移 IPC(主分类):G06F21/22 登记生效日:20150925 变更前: 变更后: 申请日:20070523

    专利申请权、专利权的转移

  • 2011-08-24

    授权

    授权

  • 2009-01-21

    实质审查的生效

    实质审查的生效

  • 2008-11-26

    公开

    公开

说明书

技术领域

本发明涉及计算机安全领域,特别涉及计算机加密领域,具体的讲是对软件进行加密、解密的方法及加密、解密的装置。

背景技术

现在,软件已经成为一种具有独立的价值的商品,软件的功能、执行过程和编码等等都很可能成为竞争对手或其它组织或个人抄袭的对象。所以软件,特别是由中间语言,例如,Java,.NET等编程语言编写的软件很容易通过逆向工程被逆向编码,例如使用.NET Reflect(微软的逆向工程工具),JAD(Java的逆向工程工具),从而得到软件的核心算法、编码等信息,这些信息如果被破解者恶意使用会造成开发者的损失,例如,模仿软件的核心算法,绕过注册过的软件等。

在现有技术中,通过更改程序内部函数名称,重新安排控制流程或其它方法来迷惑破解者的破解行为具有一定的效果,能够使逆向编码后的软件程序很难读懂或者无法读懂,但是这种源代码的保护机制不能避免软件程序被逆向编码,软件程序的信息还是有可能泄漏。

在《计算机与信息技术》2005年5月刊“利用DES加密算法保护Java源代码”一文中,公开了一种将Java编辑的软件进行加密,并在运行时解密的方案。该方案使用数据加密标准(DES:Data Encryption Standard)将可执行的Java程序加密,将加密后的程序编码和密钥存储于存储器内,加载器将加密的Java程序编码和密钥加载到系统中,调出密钥并将程序编码解密,转换为可执行的编码形式,并载入Java虚拟机(JVM)中运行。

上述方法很容易被破解者跟踪,破解者只要使用调试工具就可以跟踪程序启动的每一步。如果程序在每次运行时都访问某一个文件,从该文件中获得密钥或者获得系统符号名,这样会使破解者怀疑该文件可能为该软件的密钥文件或者系统符号名对照表,如果破解者确定了该文件就是密钥文件,则会千方百计的破解该密钥文件,如果破解了密钥文件,则就可以将密文的软件编码转换为明文的软件编码,对该软件就可以进行逆向工程以生成源代码,从而造成软件所有人的损失。

发明内容

为了解决以上问题,增加软件被反编译的难度,本发明的目的在于提供一种对软件进行加密的方法和一种相应的解密方法,加入了门限加密特征,在每次启动软件时获取门限密钥因子的地址都不一样,使破解者不能确定哪些是密钥地址。

本发明还提供了一种对软件进行加密的装置和一种相应的解密装置,能够随机的将多个门限密钥因子存储于软件的不同段中,解密时随机的从某些段中取得门限密钥因子用于解密软件。

步骤101,利用第一加密模块将存储介质中的软件明文加密为第一软件密文,其中解密所用的密钥为第一密钥SK;

步骤102,第二加密模块利用n个门限密钥因子生成第二密钥,使用该第二密钥将所述第一密钥SK加密为密钥密文PSK,并将所述密钥密文PSK拼接于所述第一软件密文中,其中n>1的正整数;

步骤103,利用封装模块将所述密钥密文PSK和第一软件密文作为一体分为n段,将所述门限密钥因子拼接于所述分段中,形成第二软件密文,并存储于所述存储介质中。

根据本发明加密方法的一个进一步的方面,所述步骤101中所述的加密方法包括,对称加密算法或非对称加密算法。

根据本发明加密方法的再一个进一步的方面,所述步骤102中使用的门限密钥算法包括沙米尔门限密钥算法。

根据本发明加密方法的另一个进一步的方面,所述步骤103中,所述封装模块将所述密钥密文PSK和第一软件密文作为一体分为n段,C代表所述n段中的任意一段,段C由块C0,C2,…,Cm-1构成,针对于每一段C和相应的k计算:

C′0=C0×k             (E0)

C′1=C1×k+C0          (E2)

C′2=C2×k+C1          (E3)

      … … …

C′m-1=Cm-1×k+Cm-2    (Em-1)

C′m=Cm-1              (Em)

以上的×为算术乘法运算,同时计算门限密钥因子k的的哈希值h,合并C′0至C′m形成C’,将n段C’和相应的哈希值h拼接到一起形成所述的第二软件密文。

一种对软件进行解密的方法,在软件加载的过程中包括以下步骤:

步骤201,解封装模块从第二软件密文的n个段中随机取t个门限密钥因子,将所述第二软件密文恢复为第一软件密文和密钥密文PSK,其中1≤t≤n,n为大于1的正整数;

步骤202,提取所述密钥密文PSK,第二解密模块根据所述t个门限密钥因子生成第二密钥,利用该第二密钥将密钥密文PSK解密为第一密钥SK;

步骤203,第一解密模块使用所述第一密钥SK将所述第一软件密文解密,并将软件明文传送给CPU,以执行该软件。

根据本发明解密方法的一个进一步的方面,所述步骤201中,所述解封装模块分别对n段第二软件密文中的每一段计算:根据E0至Em消去C0,C1,…,Cm-1,得到等式0=-C′mkm+C′m-1×km-1-C′m-2×km-2+...+(-1)m-1×C′0    (P0),

求解该等式中的k,当k的哈希值等于该C’段相应的哈希值h时,用该k将C′0至C′m恢复为C0至Cm-1,将C0至Cm-1合并以获得段C,该段C为第一软件密文和密钥密文作为一体的n段中的一段;求出n个k,并将第二软件密文恢复为第一软件密文和密钥密文PSK。

根据本发明解密方法的再一个进一步的方面,使用多项式的牛顿迭代法所述求解等式(P0)中的k。

一种对软件进行加密的装置,其特征在于包括,第一加密模块,第二加密模块和封装模块;所述第一加密模块,利用第一密钥SK将软件明文加密为第一软件密文;所述第二加密模块与所述第一加密模块相连接,利用n个门限密钥因子生成第二密钥,使用该第二密钥将所述第一密钥SK加密为密钥密文PSK,并将所述密钥密文PSK存储于所述第一软件密文中;所述封装模块与所述第二加密模块相连接,将所述第一软件密文分为n段,将所述门限密钥因子拼接于所述分段中,形成第二软件密文。

一种对软件进行解密的装置,其特征在于包括,解封装模块,第二解密模块和第一解密模块;所述解封装模块将第二软件密文解封装为第一软件密文和密钥密文PSK,并在所述第一软件密文的n个段中随机取t个门限密钥因子;所述第二解密模块与所述解封装模块相连接,根据所述t个门限密钥因子生成第二密钥,利用该第二密钥将密钥密文PSK解密为第一密钥SK;所述第一解密模块与所述第二解密模块相连接,使用所述第一密钥SK将所述第一软件密文解密,获得软件明文并传送给CPU,以执行该软件。

本发明的有益效果在于,加强了软件加密密钥的保护,使破解者很难通过跟踪软件加载过程,获得密钥物理地址从而通过分析密钥实现软件破解的目的本发明通过动态存储密钥的技术加强了现有给软件加密,以提高其安全性的方案。

附图说明

图1为本发明进行软件加密的流程图;

图2为本发明进行软件解密的流程图;

图3为本发明进行软件加密的装置结构示意图;

图4为本发明进行软件解密的装置结构示意图;

图5为实施本发明时的装置结构示意图。

具体实施方式

下面,结合附图对于本发明进行如下详细说明。

本发明使用门限密钥的理论对所述第一密钥进一步保护,并将门限密钥因子拼接被加密的软件中,这样使破解者每次跟踪程序运行时都获得不同的跳转地址,使破解者无法确定去哪寻找所述的第一密钥。本发明所能够保护的软件不仅限于可执行程序,还包括功能模块和软件的核心算法等。现有的门限加密方法是,利用一个随机数作为第二密钥将所述第一密钥SK加密为密钥密文PSK,同时生成用于计算该随机数的n个门限密钥因子;在需要密钥进行解密的时候,只需要t个门限密钥因子(t≤n)生成所述第二密钥用于解密。门限密码学提出的目的是为了权利分散及提高安全性,权利分散性体现于在使用门限密码方法进行解密时,当每个人都持有一个密钥因子,则必须达到一定数量(门限值t)的人合作才能完成解密;安全性,一方面是为了防止获得一个密钥因子就使加密失去意义,在这群人中只要少于门限值的人被攻陷,那么还是无法解密的;另一方面,防止密钥因子丢失影响正常的解密工作,因为只要有多于或等于门限值的人拥有有效的密钥因子,还是能够解密。本发明具体实施方式中使用门限加密算法以沙米尔方案(Shamir)为例,但不限于沙米尔方案,还可以使用阿斯木斯-布隆门限密钥方案(Asmuth-Bloom)。

在销售软件之前,软件的卖主利用加密算法对明文的软件进行加密,该加密算法为现有的对称或非对称加密算法,例如,AES,DES或RSA,ECC等。如果使用了对称加密算法,则软件加密密钥与解密密钥相同,也可用于解密,该解密密钥为密钥SK(即,第一密钥)。如果使用非对称加密算法,则加密密钥与所述非对称加密算法的解密密钥存在着对应关系,在本发明中解密密钥为密钥SK(即,第一密钥)。因为软件的密钥SK是关系到软件能否被破解的关键,所以关于该密钥SK的安全就相当重要,本发明特别使用门限加密的沙米尔方案通过n个门限密钥因子K1,K2,…,Kn的运算生成第二密钥,利用该第二密钥将该密钥SK加密为密钥密文PSK,将密钥密文PSK拼接到被加密的软件中,例如将其拼接于被加密软件的头部或者尾部。并且将该n个门限密钥因子由一个强壮的拼接算法(或者简单的拼接方式)拼接于被加密的软件不同的物理段落中,例如,拼接于软件的头部或尾部。本发明通过第一步,加密需要保护的软件;第二步,加密第一步中的第一密钥SK;第三步,拼接实现第二步加密的密钥因子;在软件运行需要解密时,随机地从被保护的软件密文中取得t(1≤t≤n,t和n均为正整数)个门限密钥因子,然后通过沙米尔方案就可以从密钥密文PSK中将被加密软件的第一密钥SK解出,从而对软件密文进行解密。门限密钥恢复方法使软件加载的过程产生了动态特性,每次都从软件中不同的位置获得门限密钥因子用于解密,可以有效针对跟踪软件加载的破解方法,增加破解的难度。

如图1所示,为本发明软件加密过程的流程图。

步骤101,选择合适的对称加密算法,例如AES,DES等,利用第一加密模块将软件的明文加密为第一软件密文,其所使用密钥为第一密钥SK。

步骤102,第二加密模块利用门限加密算法中的Shamir算法保护上述密钥SK,在域Zp中使用拉格朗日插值多项式算法的Shamir方案,其中Zp是由素数域,生成t-1次的多项式:

Pn(x)=a0+a1x+a2x2+...+at-1xt-1

其中Pn(x)的系数a0,…,an是随机生成的。

令x1=1,计算Pn(1)=a0+a1+a2+...+at-1

…               …              …

令xn=n,计算Pn(n)=a0+a1n+a2n2+...+at-1nt-1

其中,Pn(1),…,Pn(n)<264,n为大于1的正整数,t为大于等于1小于n的正整数。

然后生成了n个门限密钥因子对K1=(1,Pn(1)),…,Kn=(n,Pn(n)),使用a0为第二密钥将密钥SK加密为密钥密文PSK。并将加密后的密钥密文PSK拼接于所述第一软件密文的头部或尾部,本步骤可以使用现有技术中的存储方法。

步骤103,封装模块将第一软件密文和密钥密纹作为一体分割为n个段,将n个门限密钥因子分别拼接于n个段中。在此,可以直接将n个密钥因子分别拼接于第一软件密文每一段的头部或尾部,如图中所示黑色的部分为密钥因子,白色部分为n段,形成第二软件密文并存储于存储介质中,也可以使用下面的拼接方法,形成更加复杂的第二软件密文。

C代表第一软件密文的某一段,其中每段C由块C0,C2,…,Cm-1构成,k代表门限密钥因子对Ki中的Pn(i),具体拼接过程如下,

C′0=C0×k           (E0)

C′1=C1×k+C0        (E2)

C′2=C2×k+C1        (E3)

        …  …  … 

C′m-1=Cm-1×k+Cm-2  (Em-1)

C′m=Cm-1    (Em)

其中×为算术乘法运算。作为优选的实施例,每一块Ci的长度等于k的长度,即length(Ci)=length(k)。例如,软件加密后分为n个段,其中某一段C的长度为128字节,密钥因子的长度为16字节,则将C分成8块,即m=7,C的每一块Ci的长度为16字节。同时计算h=hash(k),即将门限密钥因子k的哈希值记录下来,用于解密时验证恢复的门限密钥因子是否正确。C′0至C′m合并成一段完整的C’后,再和哈希值h进行拼接(h加在C’段的前面或后面),然后拼接所有段C’和相应的哈希值h形成最终存储的软件密文,即第二软件密文,并将第二软件密文存储于存储介质中。

在Shamir门限密钥加密方案中,可以用任意的t个密钥因子恢复第二密钥a0,以用于解密PSK,因此软件装载器在每次装载被加密的软件时,都将会随机的从n个密钥因子中选择t个,用于解密PSK,以提供一种高强度的防止破解者跟踪、分析软件装载过程,并具有动态特点的保护机制。

图2为本发明软件加载解密的流程图。软件的启动阶段,由加载器从存储介质中将第二软件密文加载到内存中,其中黑色部分为密钥因子,白色部分为第一软件密文和PSK,如果在加密步骤中没有使用如步骤103那样的拼接方法,而只是将n个密钥因子直接拼接于软件密文相应段落的头部或尾部,则步骤201可以通过解封装模块直接从随机选取的t段密文中直接得到t个密钥因子,并将第二软件密文恢复为第一软件密文和PSK。如果在加密时使用了如步骤103中所述那样的拼接方法,则通过解封装模块选择一段密文C’和相应的哈希值h,恢复该段密文上携带的门限密钥因子k。恢复算法如下:

消去E0至Em中的C0至Cm-1,将Cm-1=C′m代入(Em-1),获得等式Cm-2=C′m-1-C′m×k+Cm×k2,将该等式代入(Em-2)……,直到代入(E0),最后形成0=-C′mkm+C′m-1×km-1-C′m-2×km-2+...+(-1)m-1×C′0,将0=-C′mkm+C′m-1×km-1-C′m-2×km-2+...+(-1)m-1×C′0标记为P0,密钥因子k为上述多项式的根,通过在多项式数值域的计算找出根,可以从第二软件密文C′0,C′1,…,C′m中恢复k。在本实施例中使用牛顿迭代算法寻找多项式P0的一个或多个根。

(a)令y=-C′mkm+C′m-1×km-1-C′m-2×km-2+...+(-1)m-1×C′0=f(k)(P1),任意选择起始k0,例如k0=2lengh(k)-1

(b)计算ki+1=ki-f(ki)f(ki),i=0至m,f′(k)为f(k)的导数,即,f′(k)=-C′m×m×km-1+C′m-1×(m-1)×km-2-C′m-2×(m-2)×km-3+...+(-1)m-2×C′1

(c)重复步骤b,直到|ki+1-ki|<1,此时ki+1近似为P1的根。

(d)如果hash(ki+1)=h,或者hash(ki+1+1)=h,hash(ki+1-1)=h,其中h为加密步骤(4)中的h值,则本步骤算出的ki+1就为加密步骤中的门限密钥因子k,跳转到步骤(f),如果不相等,则数字根k寻找算法失败,进入步骤(e)。本发明中所述的哈希算法,即散列算法,是一个单向算法,即数据被演算后无法反推出原数据,因而若要比较数据传输前后是否被改动过,只需比较传输前后的哈希值是否相等即可。

(e)如果在步骤(d)中没有找到k,则意味着P0有多个实根,其他的实根可以通过下面方法获得:

使用步骤(d)中的根ki+1作为新的k0

令b0=-C′m,bk=(-1)k-1×C′m-k+k0×bk-1,其中k=1,2,…,m-1,然后建立一个新的多项式,f(k)=b0×km-1+b1×km-2+...+bm-1    (P2);

使用上述步骤b-c计算新等式P2的实根,获得P0的其他实根。

通过本步骤(e)计算出P0的所有实根,每次经过(e)后,重复检查步骤(d),判断是否得到真正的密钥因子,然后得到门限密钥因子k。

(f)得到一段密文中的门限密钥因子k以后,代回方程组E0至Em,将第二软件密文C′0,C′1,…,C′m恢复为第一软件密文C1,C2,…,Cm

对n段C,分别进行a-f,得出解密钥密文PSK所需的所有门限密钥因子k,并利用k恢复所有的密文C’,形成第一软件密文。

步骤202,当恢复完t个门限密钥因子后,Ki=(xi,Pn(xi),1≤i≤t,第二解密模块用t个k构建一个新的多项式

Pn(x)=Σi=1t(Πi=1iktx-xixk-xi)yk,

其中,yk=Pn(xk),xi和xk为已经恢复的门限密钥因子对中的xi,其中i≠k,最后令x等于0,得出Pn(0)=a0

在第一软件密文中提取PSK,使用a0作为解密密钥密文PSK的密钥,从而获得解密被加密软件的第一密钥SK。

步骤203,第一解密模块使用SK对被加密的软件进行解密,获得原始软件明文。

CPU根据该软件明文执行。

如图3所示,为本发明加密装置的示意图,包括,第一加密模块,第二加密模块和封装模块;所述第一加密模块,利用第一密钥SK将软件明文加密为第一软件密文;所述第二加密模块与所述第一加密模块相连接,利用n个门限密钥因子生成第二密钥,使用该第二密钥将所述第一密钥SK加密为密钥密文PSK,并将所述密钥密文PSK存储于所述第一软件密文中;所述封装模块与所述第二加密模块相连接,将所述第一软件密文分为n段,将所述门限密钥因子拼接于所述分段中,形成第二软件密文。

如图4所示,为本发明解密装置的示意图,包括,解封装模块,第二解密模块和第一解密模块;所述解封装模块将第二软件密文解封装为第一软件密文,并在所述第一软件密文的n个段中随机取t个门限密钥因子;所述第二解密模块与所述解封装模块相连接,根据所述t个门限密钥因子生成第二密钥,利用该第二密钥将密钥密文PSK解密为第一密钥SK;所述第一解密模块与所述第二解密模块相连接,使用所述第一密钥SK将所述第一软件密文解密,获得软件明文。

如图5所示,为本发明装置运行的示意图。包括加载器,用于从存储介质中加载软件,还包括如图4所示的解密装置,相同部分不再赘述。加载器从软件的存储介质中(例如硬盘)加载第二软件密文,将其输入所述解密装置,所述解密装置将所述第二软件密文转换为软件明文,并将其传送给CPU执行软件。

本发明的有益效果在于,加密可执行的软件,使软件破解者不会通过简单的跟踪软件加载获得密钥,从而防止该软件被解密并通过逆向工程等方法逆向编译。加强了软件加密密钥的保护,使破解者很难通过跟踪软件加载过程,获得密钥物理地址从而通过分析密钥实现软件破解的目的本发明通过动态存储密钥的技术加强了现有给软件加密,以提高其安全性的方案。

以上具体实施方式仅用于说明本发明,而非用于限定本发明。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号