买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】基于同态加密算法保护程序代码安全的方法和装置_北京梆梆安全科技有限公司_201710418396.5 

申请/专利权人:北京梆梆安全科技有限公司

申请日:2017-06-06

公开(公告)日:2020-05-22

公开(公告)号:CN107124261B

主分类号:H04L9/00(20060101)

分类号:H04L9/00(20060101);H04L9/14(20060101);H04L9/28(20060101);G06F21/12(20130101);G06F21/60(20130101)

优先权:

专利状态码:有效-授权

法律状态:2020.05.22#授权;2018.01.23#著录事项变更;2017.09.29#实质审查的生效;2017.09.01#公开

摘要:本申请提供了一种基于同态加密算法保护程序代码安全的方法和装置。所述方法包括:按照分块规则,将待处理程序代码分成程序代码块;为每个程序代码块,分配同态加密算法产生的一对公钥和私钥;针对每个程序代码块,用为该程序代码块分配的公钥加密;将加密后的各程序代码块组合成加密后程序代码;将加密后程序代码发往外部程序代码处理方进行程序代码处理;从外部程序代码处理方接收程序代码处理结果;将所述程序代码处理结果分成各程序代码块的处理结果块;针对每个程序代码块的处理结果块,用为该程序代码块分配的所述私钥解密;将解密后的各程序代码块的处理结果块组合成最终程序代码。本申请实施例能够增加程序代码安全性。

主权项:1.一种基于同态加密算法保护程序代码安全的方法,其特征在于,所述方法包括:按照分块规则,将待处理程序代码分成程序代码块,其中,所述分块规则是从预设的分块规则库中随机选取的;为每个程序代码块,分配同态加密算法产生的一对公钥和私钥;针对每个程序代码块,用为该程序代码块分配的公钥加密;将加密后的各程序代码块组合成加密后程序代码;将加密后程序代码发往外部程序代码处理方进行程序代码处理;从外部程序代码处理方接收程序代码处理结果;按照所述分块规则,将所述程序代码处理结果分成各程序代码块的处理结果块;针对每个程序代码块的处理结果块,用为该程序代码块分配的所述私钥解密;将解密后的各程序代码块的处理结果块组合成最终程序代码,其中,所述待处理程序代码具有不参与所述加密、所述解密、所述外部程序代码处理方的处理的程序代码标识,并且,在分配同态加密算法产生的一对公钥和私钥后,所述方法还包括:将待处理程序代码的程序代码标识、与该待处理程序代码相应的分块规则、以及为分出的每个程序代码块分配的公钥和私钥对相对应地存储,并且,在从外部程序代码处理方接收程序代码处理结果后,所述方法还包括:根据与接收的程序代码处理结果相应的待处理程序代码的程序代码标识,查找与该程序代码标识相对应地存储的分块规则、以及为分出的每个程序代码块分配的私钥对;其中,将加密后的各程序代码块组合成加密后程序代码包括:将加密后的各程序代码块组合后的预定位置处加入干扰位,成为加密后程序代码,并且,按照所述分块规则将所述程序代码处理结果分成各程序代码块的处理结果块包括:去除所述程序代码处理结果的预定位置处的干扰位;按照所述分块规则,将去除干扰位的所述程序代码处理结果分成各程序代码块的处理结果块,所述预定位置是从预先确定的位置集合中随机选取的。

全文数据:基于同态加密算法保护程序代码安全的方法和装置技术领域[0001]本公开一般涉及计算机技术领域,具体涉及网络信息安全领域,尤其涉及一种基于同态加密算法保护程序代码安全的方法和装置。背景技术[0002]在大型程序代码的编写过程中,往往不是完全由某个程序员或某个公司内部的程序员单独完成的。对于其中的某些部分,经常需要外包给其它程序员或其它公司的程序员进行某些处理,然后利用所述其它程序员或其它公司的程序员的处理结果,进行后续编写。然而,在所述其它程序员或其它公司的程序员的处理过程中,所述其它程序员或其它公司的程序员就会看到所述程序代码,使程序代码安全性受到损害。[0003]因此,需要一种在需要将一些程序代码外包到其它程序员或其它公司的程序员进行某些处理时增加程序代码安全性的方案。发明内容[0004]鉴于现有技术中的上述缺陷或不足,期望提供一种能够在需要将一些程序代码外包到其它程序员或其它公司的程序员进行某些处理时增加程序代码安全性的技术。[0005]第一方面,本申请实施例提供了一种基于同态加密算法保护程序代码安全的方法,所述方法包括:按照分块规则,将待处理程序代码分成程序代码块;为每个程序代码块,分配同态加密算法产生的一对公钥和私钥;针对每个程序代码块,用为该程序代码块分配的公钥加密;将加密后的各程序代码块组合成加密后程序代码;将加密后程序代码发往外部程序代码处理方进行程序代码处理;从外部程序代码处理方接收程序代码处理结果;按照所述分块规则,将所述程序代码处理结果分成各程序代码块的处理结果块;针对每个程序代码块的处理结果块,用为该程序代码块分配的所述私钥解密;将解密后的各程序代码块的处理结果块组合成最终程序代码。[0006]第二方面,本申请实施例提供了一种基于同态加密算法保护程序代码安全的装置,所述装置包括:程序代码块划分单元,用于按照分块规则,将待处理程序代码分成程序代码块;公私钥分配单元,用于为每个程序代码块,分配同态加密算法产生的一对公钥和私钥;加密单元,用于针对每个程序代码块,用为该程序代码块分配的公钥加密;加密后程序代码组合单元,用于将加密后的各程序代码块组合成加密后程序代码;发送单元,用于将加密后程序代码发往外部程序代码处理方进行程序代码处理;接收单元,用于从外部程序代码处理方接收程序代码处理结果;处理结果块划分单元,用于按照所述分块规则,将所述程序代码处理结果分成各程序代码块的处理结果块;解密单元,用于针对每个程序代码块的处理结果块,用为该程序代码块分配的所述私钥解密;最终程序代码合成单元,用于将解密后的各程序代码块的处理结果块组合成最终程序代码。[0007]第三方面,本申请实施例提供了一种设备,包括处理器、存储器和显示器;所述存储器包含可由所述处理器执行的指令以使得所述处理器执行:按照分块规则,将待处理程序代码分成程序代码块;为每个程序代码块,分配同态加密算法产生的一对公钥和私钥;针对每个程序代码块,用为该程序代码块分配的公钥加密;将加密后的各程序代码块组合成加密后程序代码;将加密后程序代码发往外部程序代码处理方进行程序代码处理;从外部程序代码处理方接收程序代码处理结果;按照所述分块规则,将所述程序代码处理结果分成各程序代码块的处理结果块;针对每个程序代码块的处理结果块,用为该程序代码块分配的所述私钥解密;将解密后的各程序代码块的处理结果块组合成最终程序代码。[0008]第四方面,本申请实施例提供了一种机器可读介质,包含计算机程序,所述计算机程序包括用于执行以下的程序代码:按照分块规则,将待处理程序代码分成程序代码块;为每个程序代码块,分配同态加密算法产生的一对公钥和私钥;针对每个程序代码块,用为该程序代码块分配的公钥加密;将加密后的各程序代码块组合成加密后程序代码;将加密后程序代码发往外部程序代码处理方进行程序代码处理;从外部程序代码处理方接收程序代码处理结果;按照所述分块规则,将所述程序代码处理结果分成各程序代码块的处理结果块;针对每个程序代码块的处理结果块,用为该程序代码块分配的所述私钥解密;将解密后的各程序代码块的处理结果块组合成最终程序代码。[0009]同态加密具有这样的性质:对经过同态加密的数据进行处理得到一个输出,将这一输出进行解密,其结果与用同一方法处理未加密的原始数据得到的输出结果是一样的。利用同态加密的这个性质,本发明实施例将程序代码用同态加密算法产生的公钥加密再发给其它程序员或其它公司的程序员进行处理。这样,其它程序员或其它公司的程序员就不会看到原始的程序代码,但还仍然能够进行处理,增加了程序代码的安全性。当处理完后,将处理结果用同态加密算法产生的私钥解密。由于同态加密的上述性质,这样解密得到的结果与对原始程序代码直接处理得到的结果是一样的。为了进一步增加程序代码的安全性,本发明实施例还将程序代码分成程序代码块,为每个程序代码块都分配一个相应的公钥私钥对,对每个程序代码块用公钥加密,组合后发给其它程序员或其它公司的程序员进行处理。这时,其它程序员或其它公司的程序员不知道分块规则,也不知道每个程序代码块对应的私钥,比起不分块、单一用一个公钥去加密的方案,进一步增加了其它程序员或其它公司的程序员破解原程序代码的难度,提高了程序代码安全性。其它程序员或其它公司的程序员处理完后,将处理结果发回,然后再按照加密时的分块规则将处理结果进行分块,并针对每个程序代码块的处理结果块,用为该程序代码块分配的所述私钥解密。这样,仍然能够完全还原原程序代码,同时又提高了程序代码的安全性。附图说明[0010]通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:[0011]图1示出了同态加密的一个简单的原理图;[0012]图2示出了根据本申请一个实施例的基于同态加密算法保护程序代码安全的方法的示例性流程图;[0013]图3示出了根据本申请一个实施例的基于同态加密算法保护程序代码安全的装置的示例性结构框图;_[0014]图4示出了适于用来实现本申请实施例的计算机系统的结构示意图。具体实施方式[0015]下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与发明相关的部分。[0016]需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。[0017]请参考图1,其示出了同态加密的一个简单的原理图。[0018]如上所述,同态加密具有这样的性质:对经过同态加密的数据进行处理得到一个输出,将这一输出进行解密,其结果与用同一方法处理未加密的原始数据得到的输出结果是一样的。如图1所述,假设原数据为X,要对它进行处理的处理函数为f。这样,直接处理后的结果为fx。为了怕进行处理的受托方直接接触到数据X,可以将原数据x进行同态加密,即用同态加密算法产生的公钥加密,加密函数为E。加密后数据为Ex。这时,将Ex交给受托方处理,受托方没有解密密钥,因此看不到原数据X。受托方在Ex上用处理函数f0处理,得到处理后的加密数据fEx。将处理后的加密数据fEX发回。这时,用同态加密算法产生的私钥解密,解密函数为D4,解密后得到IT1fEx。同态加密算法固有的性质使得此时IT1fExx,即与对原数据直接进行处理得到的结果是一样的。[0019]假设张三具有原数据01001100。张三希望由李四帮其进行位取反操作,即位“1”变成位“0”,位“0”变成位“1”。位取反后的结果应为10110011。如果张三将原数据直接发给李四,李四就会看到原数据,造成信息泄露。因此,张三用同态加密算法产生的公钥先加密原数据01001100。例如,加密之后变成00011001。张三将00011001发给李四。李四进行位取反操作,得到11100110。李四将11100110发回给张三,张三用同态加密算法产生的私钥进行解密操作,将其变成10110011。可以看出,它与对原数据01001100直接进行位取反操作的结果是一样的,同时,避免了让李四看到原数据,增加了信息安全性。[0020]如背景技术中提到的,在大型程序代码的编写过程中,往往不是完全由某个程序员或某个公司内部的程序员单独完成的。对于其中的某些部分,经常需要外包给其它程序员或其它公司的程序员进行某些处理,然后利用所述其它程序员或其它公司的程序员的处理结果,进行后续编写。然而,在所述其它程序员或其它公司的程序员的处理过程中,所述其它程序员或其它公司的程序员就会看到所述程序代码,使程序代码安全性受到损害。因此,需要一种在需要将一些程序代码外包到其它程序员或其它公司的程序员进行某些处理时增加程序代码安全性的方案。[0021]本发明实施例利用同态加密算法的性质,将程序代码用同态加密算法产生的公钥加密再发给其它程序员或其它公司的程序员进行处理。这样,其它程序员或其它公司的程序员就不会看到原始的程序代码,但还仍然能够进行处理,增加了程序代码的安全性。当处理完后,将处理结果用同态加密算法产生的私钥解密。由于同态加密的上述性质,这样解密得到的结果与对原始程序代码直接处理得到的结果是一样的。为了进一步增加程序代码的安全性,本发明实施例还将程序代码分成程序代码块,为每个程序代码块都分配一个相应的公钥私钥对,对每个程序代码块用公钥加密,组合后发给其它程序员或其它公司的程序员进行处理。这时,其它程序员或其它公司的程序员不知道分块规则,也不知道每个程序代码块对应的私钥,比起不分块、单一用一个公钥去加密的方案,进一步增加了其它程序员或其它公司的程序员破解原程序代码的难度,提高了程序代码安全性。其它程序员或其它公司的程序员处理完后,将处理结果发回,然后再按照加密时的分块规则将处理结果进行分块,并针对每个程序代码块的处理结果块,用为该程序代码块分配的所述私钥解密。这样,仍然能够完全还原原程序代码,同时又提高了程序代码的安全性。[0022]参考图2,其示出了根据本申请一个实施例的基于同态加密算法保护程序代码安全的方法的示例性流程图。[0023]如图2所示,在步骤210中,按照分块规则,将待处理程序代码分成程序代码块。[0024]程序代码是用于计算机执行的程序的代码,例如机器代码。这里的“处理”是指在程序代码的编写过程中需要外包到其它程序员或其它公司的程序员的一些针对程序代码例如机器代码)的操作。上面所述的位取反仅是比较简单的一个例子。待处理程序代码指需要外包到其它程序员或其它公司的程序员进行处理的那些程序代码。[0025]分块规则是事先制定的、用于将待处理程序代码分成程序代码块的规则。例如,将待处理程序代码按位数等分成六块是一个分块规则。再例如,将待处理程序代码按位数1:2:3:4:5:6是另一个分块规则。在将待处理程序代码按位数1:2:3:4:5:6的分块规则下,如果待处理程序代码为210M比特,210•1八1+2+3+4+5+6=10M,则将待处理程序代码从头开始的10M比特划分为第一个程序代码块。同理,将接下来的20M比特划分为第二个程序代码块。将接下来的30M比特划分为第三个程序代码块。将接下来的40M比特划分为第四个程序代码块。将接下来的50M比特划分为第五个程序代码块。将接下来的60M比特划分为第六个程序代码块。[0026]在一个实施例中,所述分块规则是从预设的分块规则库中随机选取的。分块规则库是将事先设置的各种分块规则放入其中的库。例如,分块规则库包括6个规则:[0027]规则1:按位数等分成5个程序代码块;[0028]规则2:按位数等分成6个程序代码块;[0029]规则3:按位数1:2:1:2:1:2成6个程序代码块;[0030]规则4:按位数1:2:1:3:1:4成6个程序代码块;[0031]规则5:按位数1:3:1:3:1:3成6个程序代码块;[0032]规则6:按位数1:2:3:4:5:6成6个程序代码块。[0033]分块规则从预设的分块规则库中随机选取带来的好处是:由于分块规则不是固定不变的,而是每次需要将待处理程序代码分成程序代码块时随机选取的,因而是不确定的,增加了加密后程序代码外包到其它程序员或其它公司的程序员被其它程序员或其它公司的程序员破解的难度,从而进一步提高了程序代码安全性。[0034]在步骤220中,为每个程序代码块,分配同态加密算法产生的一对公钥和私钥。[0035]同态加密算法包括密钥生成算法、加密算法、解密算法等。密钥生成算法是生成加密算法和解密算法中分别需要的公钥和私钥的算法。加密算法是用密钥生成算法生成的公钥对原数据进行加密的算法。解密算法是用密钥生成算法生成的私钥对加密数据进行解密的算法。同态加密算法产生的一对公钥和私钥实质上是其中的密钥生成算法产生的一对公钥和私钥。[0036]在一个实施例中,分配同态加密算法产生的一对公钥和私钥包括:从公钥私钥对库中随机选取一对公钥和私钥,其中,所述公钥私钥对库中的公钥私钥对是事先由同态加密算法产生的。[0037]也就是说,事先由同态加密算法生成若干对公钥和私钥,放在公钥私钥对库中。当需要为程序代码块分配公钥私钥对时,就从公钥私钥对库随机选取一对公钥和私钥。这种做法带来的好处是:由于对于每个程序代码块选取的公钥私钥对不是固定不变的,而是在需要分配公钥私钥对时随机从公钥私钥对库中选取的,因而是不确定的,增加了加密后程序代码外包到其它程序员或其它公司的程序员被其它程序员或其它公司的程序员破解的难度,从而进一步提高了程序代码安全性。[0038]在一个实施例中,所述待处理程序代码具有不参与所述加密、所述解密、所述外部程序代码处理方的处理的程序代码标识。也就是说,在步骤210中,程序代码标识不分块,除了程序代码标识的程序代码主体部分才分块,因而也不参与加密。在将加密后程序代码发往外部程序代码处理方进行程序代码处理时,发往外部程序代码处理方看到的是未加密的程序代码标识,而程序代码的其它部分都是加密的。外部程序代码处理方也不处理程序代码标识,只处理程序代码的其它部分。从外部程序代码处理方接收到程序代码处理结果后,其中的程序代码标识是未处理过的,因而可以立刻识别。然后,根据识别出的程序代码标识查找到与该程序代码标识相对应地存储的分块规则、以及为分出的每个程序代码块分配的私钥对,进行解密。在解密时也仅是对程序代码处理结果中除了程序代码标识的剩余部分进行解密。[0039]在该实施例中,在步骤220后,所述方法还包括:将待处理程序代码的程序代码标识、与该待处理程序代码相应的分块规则、以及为分出的每个程序代码块分配的公钥和私钥对相对应地存储。这样做的好处是:在以后对从外部程序代码处理方接收到的程序代码处理结果进行解密时,能直接根据程序代码标识查找到与该待处理程序代码相应的分块规贝!J、以及为分出的每个程序代码块分配的私钥对。[0040]在步骤23〇中,针对每个程序代码块,用为该程序代码块分配的公钥加密。[0041]为该程序代码块分配的公钥即步骤220中同态加密算法产生的公钥私钥对中的公钥。[0042]在步骤240中,将加密后的各程序代码块组合成加密后程序代码。[0043]在一个实施例中,按照将待处理程序代码分成程序代码块的顺序将加密后的各程序代码块组合成加密后程序代码。[0044]例如,在将待处理程序代码按位数丨:2:3:4:5:6的分块规则下,待处理程序代码为210M比特,将待处理程序代码从头开始的10M比特划分为第一个程序代码块。将接下来的2〇1、3〇^1、401^、5〇1、6〇1!比特划分为第二-六个程序代码块。这样,组合成加密后程序代码时,将加密后的10M比特的程序代码块放在最前面,然后是加密后的2〇M比特的程序代码块,然后是加密后的30M比特的程序代码块,然后是加密后的4〇m比特的程序代码块,然后是加密后的50M比特的程序代码块,然后是加密后的60M比特的程序代码块。[0045]在步骤25〇中,将加密后程序代码发往外部程序代码处理方进行程序代码处理。[0046]外部程序代码处理方即程序代码编写过程中外包来进行某些程序代码的所要求的处理的人,如前面所述的其它程序员或其它公司的程序员。处理如前面的位取反。位取反仅是一个简单的例子。实际上的处理往往要复杂得多。[0047]在步骤260中,从外部程序代码处理方接收程序代码处理结果。[0048]程序代码处理结果即外部程序代码处理方处理后的程序代码。[0049]在一个实施例中,在步骤260之后,所述方法还包括:根据与接收的程序代码处理结果相应的待处理程序代码的程序代码标识,查找与该程序代码标识相对应地存储的分块规则、以及为分出的每个程序代码块分配的私钥对。[0050]如前所述,程序代码标识不参与所述加密、所述解密、所述外部程序代码处理方的处理。因此,从外部程序代码处理方接收到程序代码处理结果后,其中的程序代码标识是未处理过的,因而可以立刻识别出。由于如上所述,在加密环节,已经将待处理程序代码的程序代码标识、与该待处理程序代码相应的分块规则、以及为分出的每个程序代码块分配的公钥和私钥对相对应地存储,因而可以根据这些程序代码标识,查找到与该程序代码标识相对应地存储的分块规则、以及为分出的每个程序代码块分配的私钥对。[0051]在步骤270中,按照所述分块规则,将所述程序代码处理结果分成各程序代码块的处理结果块。[0052]例如,查找到的分块规则是按位数1:2:3:4:5:6成6个程序代码块,程序代码处理结果去除程序代码标识后是210M比特,将这210M比特从头开始的10M比特划分为第一个处理结果块,将接下来的20M比特划分为第二个处理结果块,将接下来的30M比特划分为第三个处理结果块,将接下来的40M比特划分为第四个处理结果块,将接下来的50M比特划分为第五个处理结果块,将接下来的60M比特划分为第六个处理结果块。[0053]在步骤280中,针对每个程序代码块的处理结果块,用为该程序代码块分配的所述私钥解密。[0054]在步骤290中,将解密后的各程序代码块的处理结果块组合成最终程序代码。[0055]最终程序代码即预期对待处理程序代码进行处理后应得到的处理后程序代码,即不用本发明实施例的加解密,直接处理也能得到的处理后程序代码。[0056]例如,在将待处理程序代码按位数1:2:3:4:5:6的分块规则下,程序代码处理结果去除程序代码标识后是210M比特,将这210M比特从头开始的10M比特划分为第一个处理结果块。将接下来的201!、3011、4011、501!、601!比特划分为第二-六个处理结果块。这样,组合成最终程序代码时,将解密后的10M比特的处理结果块放在最前面,然后分别是解密后的20M、30皿、401、5011、601比特的处理结果块,得到最终程序代码。[0057]在一个实施例中,步骤240包括:将加密后的各程序代码块组合后的预定位置处加入干扰位,成为加密后程序代码。[0058]例如,待处理程序代码180M比特,等分成6个程序代码块,每个程序代码块30M比特。加密后,也是6个加密后的程序代码块,每个加密后的程序代码块30M比特。在每两个相邻的加密后程序代码块之间加入10M干扰位,则一共加入5个10M的千扰位,共50M干扰位。所述预定位置是存储在本地的,但外部无法获知。在加入50M干扰位后,加密后程序代码变为230M比特。在本例中,加入干扰位的预定位置是:相邻两个加密后程序代码块之间的10M,即从第30M+1个比特到第40M个比特,从第70M+1个比特到第80M个比特,从第110M+1个比特到第120M个比特,从第150M+1个比特到第160M个比特,从第190M+1个比特到第200M个比特。[0059]加入干扰位的内容可以是随机的,其内容不会影响加解密和外部程序代码处理方的程序代码处理。[0060]在一个实施例中,加入干扰位的所述预定位置也与待处理程序代码的程序代码标识相对应地存储,即待处理程序代码的程序代码标识、与该待处理程序代码相应的分块规则、分出的每个程序代码块分配的公钥和私钥对、以及加入干扰位的预定位置都一起被相对应存储。[0061]在一个实施例中,步骤270包括:去除所述程序代码处理结果的预定位置处的千扰位;按照所述分块规则,将去除千扰位的所述程序代码处理结果分成各程序代码块的处理结果块。[0062]在一个实施例中,去除所述程序代码处理结果的预定位置处的干扰位包括:按照与所述程序代码处理结果对应的待处理程序代码的程序代码标识,查找存储的与该程序代码标识相对应的加入干扰位的所述预定位置;去除查找到的所述预定位置处的干扰位。[0063]例如,查找到加入干扰位的预定位置是:相邻两个加密后程序代码块之间的10M,即从第30M+1个比特到第40M个比特,从第70M+1个比特到第80M个比特,从第110M+1个比特到第120M个比特,从第150M+1个比特到第160M个比特,从第190M+1个比特到第200M个比特。将程序代码处理结果中第30M+1个比特到第40M个比特、第70M+1个比特到第80M个比特、第110M+1个比特到第120M个比特、第150M+1个比特到第160M个比特、第190M+1个比特到第200M个比特去除。[0064]这种加入干扰位的方案的好处是:加入干扰位后的加密后程序代码外包到其它程序员或其它公司的程序员后,其它程序员或其它公司的程序员不知道干扰位的具体位置,进一步增加了其破解的难度,提高了程序代码安全性。同时,在解密前去掉这些干扰位,又能还原出正确的原程序代码。[0065]在一个实施例中,所述预定位置是从预先确定的位置集合中随机选取的。[0066]也就是说,预先将构想出的各种可能的加入干扰位的位置放入位置集合中。在需要加干扰位时,从集合中随机选取一个位置。这种方式带来的好处是:由于加入干扰位的位置不是固定不变的,而是每次需要加入干扰位时随机选取的,因而是不确定的,增加了加密后程序代码外包到其它程序员或其它公司的程序员后被其它程序员或其它公司的程序员破解的难度,从而进一步提高了程序代码安全性。[0067]应当注意,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。相反,流程图中描绘的步骤可以改变执行顺序。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和或将一个步骤分解为多个步骤执行。[0068]进一步参考图3,其示出了根据本申请一个实施例的基于同态加密算法保护程序代码安全的装置300的示例性结构框图。基于同态加密算法保护程序代码安全的装置3〇〇包括:程序代码块划分单元310、公私钥分配单元320、加密单元330、加密后程序代码组合单元340、发送单元350、接收单元360、处理结果块划分单元370、解密单元380、最终程序代码合成单元390。[0069]程序代码块划分单元310按照分块规则,将待处理程序代码分成程序代码块。[0070]程序代码是用于计算机执行的程序的代码,例如机器代码。这里的“处理”是指在程序代码的编写过程中需要外包到其它程序员或其它公司的程序员的一些针对程序代码例如机器代码)的操作。上面所述的位取反仅是比较简单的一个例子。待处理程序代码指需要外包到其它程序员或其它公司的程序员进行处理的那些程序代码。[0071]分块规则是事先制定的、用于将待处理程序代码分成程序代码块的规则。例如,将待处理程序代码按位数等分成六块是一个分块规则。再例如,将待处理程序代码按位数1:2:3:4:5:6是另一个分块规则。在将待处理程序代码按位数1:2:3:4:5:6的分块规则下,如果待处理程序代码为210M比特,210•1八1+2+3+4+5+6=10M,则将待处理程序代码从头开始的10M比特划分为第一个程序代码块。同理,将接下来的20M比特划分为第二个程序代码块。将接下来的30M比特划分为第三个程序代码块。将接下来的40M比特划分为第四个程序代码块。将接下来的50M比特划分为第五个程序代码块。将接下来的60M比特划分为第六个程序代码块。[0072]在一个实施例中,所述分块规则是从预设的分块规则库中随机选取的。分块规则库是将事先设置的各种分块规则放入其中的库。例如,分块规则库包括6个规则:[0073]规则1:按位数等分成5个程序代码块;[0074]规则2:按位数等分成6个程序代码块;[0075]规则3:按位数1:2:1:2:1:2成6个程序代码块;[0076]规则4:按位数1:2:1:3:1:4成6个程序代码块;[0077]规则5:按位数1:3:1:3:1:3成6个程序代码块;[0078]规则6:按位数1:2:3:4:5:6成6个程序代码块。[0079]分块规则从预设的分块规则库中随机选取带来的好处是:由于分块规则不是固定不变的,而是每次需要将待处理程序代码分成程序代码块时随机选取的,因而是不确定的,增加了加密后程序代码外包到其它程序员或其它公司的程序员被其它程序员或其它公司的程序员破解的难度,从而进一步提高了程序代码安全性。[0080]公私钥分配单元320为每个程序代码块,分配同态加密算法产生的一对公钥和私钥。[0081]同态加密算法包括密钥生成算法、加密算法、解密算法等。密钥生成算法是生成加密算法和解密算法中分别需要的公钥和私钥的算法。加密算法是用密钥生成算法生成的公钥对原数据进行加密的算法。解密算法是用密钥生成算法生成的私钥对加密数据进行解密的算法。同态加密算法产生的一对公钥和私钥实质上是其中的密钥生成算法产生的一对公钥和私钥。[0082]在一个实施例中,分配同态加密算法产生的一对公钥和私钥包括:从公钥私钥对库中随机选取一对公钥和私钥,其中,所述公钥私钥对库中的公钥私钥对是事先由同态加密算法产生的。[0083]也就是说,事先由同态加密算法生成若干对公钥和私钥,放在公钥私钥对库中。当需要为程序代码块分配公钥私钥对时,就从公钥私钥对库随机选取一对公钥和私钥。这种做法带来的好处是:由于对于每个程序代码块选取的公钥私钥对不是固定不变的,而是在需要分配公钥私钥对时随机从公钥私钥对库中选取的,因而是不确定的,增加了加密后程序代码外包到其它程序员或其它公司的程序员被其它程序员或其它公司的程序员破解的难度,从而进一步提高了程序代码安全性。[0084]在一个实施例中,所述待处理程序代码具有不参与所述加密、所述解密、所述外部程序代码处理方的处理的程序代码标识。也就是说,在程序代码块划分单元310中,程序代码标识不分块,除了程序代码标识的程序代码主体部分才分块,因而也不参与加密。在将加密后程序代码发往外部程序代码处理方进行程序代码处理时,发往外部程序代码处理方看到的是未加密的程序代码标识,而程序代码的其它部分都是加密的。外部程序代码处理方也不处理程序代码标识,只处理程序代码的其它部分。从外部程序代码处理方接收到程序代码处理结果后,其中的程序代码标识是未处理过的,因而可以立刻识别。然后,根据识别出的程序代码标识查找到与该程序代码标识相对应地存储的分块规则、以及为分出的每个程序代码块分配的私钥对,进行解密。在解密时也仅是对程序代码处理结果中除了程序代码标识的剩余部分进行解密。[0085]在该实施例中,所述装置300还包括:存储单元,用于在分配同态加密算法产生的一对公钥和私钥后,将待处理程序代码的程序代码标识、与该待处理程序代码相应的分块规则、以及为分出的每个程序代码块分配的公钥和私钥对相对应地存储。这样做的好处是:在以后对从外部程序代码处理方接收到的程序代码处理结果进行解密时,能直接根据程序代码标识查找到与该待处理程序代码相应的分块规则、以及为分出的每个程序代码块分配的私钥对。[0086]加密单元330针对每个程序代码块,用为该程序代码块分配的公钥加密。[0087]为该程序代码块分配的公钥即前述同态加密算法产生的公钥私钥对中的公钥。[0088]加密后程序代码组合单元340将加密后的各程序代码块组合成加密后程序代码。[0089]在一个实施例中,按照将待处理程序代码分成程序代码块的顺序将加密后的各程序代码块组合成加密后程序代码。[0090]例如,在将待处理程序代码按位数1:2:3:4:5:6的分块规则下,待处理程序代码为210M比特,将待处理程序代码从头开始的10M比特划分为第一个程序代码块。将接下来的20M、30M、40M、50M、60M比特划分为第二-六个程序代码块。这样,组合成加密后程序代码时,将加密后的10M比特的程序代码块放在最前面,然后是加密后的20M比特的程序代码块,然后是加密后的30M比特的程序代码块,然后是加密后的40M比特的程序代码块,然后是加密后的50M比特的程序代码块,然后是加密后的60M比特的程序代码块。[0091]发送单元350将加密后程序代码发往外部程序代码处理方进行程序代码处理。[0092]外部程序代码处理方即程序代码编写过程中外包来进行某些程序代码的所要求的处理的人,如前面所述的其它程序员或其它公司的程序员。处理如前面的位取反。位取反仅是一个简单的例子。实际上的处理往往要复杂得多。[0093]接收单元360从外部程序代码处理方接收程序代码处理结果。[0094]程序代码处理结果即外部程序代码处理方处理后的程序代码。[0095]在一个实施例中,所述装置300还包括:查找单元,用于在从外部程序代码处理方接收程序代码处理结果后,根据与接收的程序代码处理结果相应的待处理程序代码的程序代码标识,查找与该程序代码标识相对应地存储的分块规则、以及为分出的每个程序代码块分配的私钥对。[0096]如前所述,程序代码标识不参与所述加密、所述解密、所述外部程序代码处理方的处理。因此,从外部程序代码处理方接收到程序代码处理结果后,其中的程序代码标识是未处理过的,因而可以立刻识别出。由于如上所述,在加密环节,已经将待处理程序代码的程序代码标识、与该待处理程序代码相应的分块规则、以及为分出的每个程序代码块分配的公钥和私钥对相对应地存储,因而可以根据这些程序代码标识,查找到与该程序代码标识相对应地存储的分块规则、以及为分出的每个程序代码块分配的私钥对。[0097]处理结果块划分单元370按照所述分块规则,将所述程序代码处理结果分成各程序代码块的处理结果块。[0098]例如,查找到的分块规则是按位数1:2:3:4:5:6成6个程序代码块,程序代码处理结果去除程序代码标识后是210M比特,将这210M比特从头开始的10M比特划分为第一个处理结果块,将接下来的20M比特划分为第二个处理结果块,将接下来的30M比特划分为第三个处理结果块,将接下来的40M比特划分为第四个处理结果块,将接下来的50M比特划分为第五个处理结果块,将接下来的60M比特划分为第六个处理结果块。[0099]解密单元380针对每个程序代码块的处理结果块,用为该程序代码块分配的所述私钥解密。[0100]最终程序代码合成单元390将解密后的各程序代码块的处理结果块组合成最终程序代码。[0101]最终程序代码即预期对待处理程序代码进行处理后应得到的处理后程序代码,即不用本发明实施例的加解密,直接处理也能得到的处理后程序代码。[0102]例如,在将待处理程序代码按位数1:2:3:4:5:6的分块规则下,程序代码处理结果去除程序代码标识后是210M比特,将这210M比特从头开始的10M比特划分为第一个处理结果块。将接下来的201、301;1、401;1、501;1、60^1比特划分为第二-六个处理结果块。这样,组合成最终程序代码时,将解密后的10M比特的处理结果块放在最前面,然后分别是解密后的20M、301!、40^1、5^601;1比特的处理结果块,得到最终程序代码。[0103]在一个实施例中,加密后程序代码组合单元340进一步用于:将加密后的各程序代码块组合后的预定位置处加入干扰位,成为加密后程序代码。[0104]例如,待处理程序代码180M比特,等分成6个程序代码块,每个程序代码块30M比特。加密后,也是6个加密后的程序代码块,每个加密后的程序代码块30M比特。在每两个相邻的加密后程序代码块之间加入10M干扰位,则一共加入5个10M的干扰位,共50M干扰位。所述预定位置是存储在本地的,但外部无法获知。在加入50M干扰位后,加密后程序代码变为230M比特。在本例中,加入干扰位的预定位置是:相邻两个加密后程序代码块之间的10M,即从第30M+1个比特到第40M个比特,从第70M+1个比特到第80M个比特,从第110M+1个比特到第120M个比特,从第150M+1个比特到第160M个比特,从第190M+1个比特到第200M个比特。[0105]加入干扰位的内容可以是随机的,其内容不会影响加解密和外部程序代码处理方的程序代码处理。[0106]在一个实施例中,加入干扰位的所述预定位置也与待处理程序代码的程序代码标识相对应地存储,即待处理程序代码的程序代码标识、与该待处理程序代码相应的分块规则、分出的每个程序代码块分配的公钥和私钥对、以及加入干扰位的预定位置都一起被相对应存储。[0107]在一个实施例中,处理结果块划分单元370进一步用于:去除所述程序代码处理结果的预定位置处的干扰位;按照所述分块规则,将去除干扰位的所述程序代码处理结果分成各程序代码块的处理结果块。[0108]在一个实施例中,去除所述程序代码处理结果的预定位置处的干扰位包括:按照与所述程序代码处理结果对应的待处理程序代码的程序代码标识,查找存储的与该程序代码标识相对应的加入干扰位的所述预定位置;去除查找到的所述预定位置处的干扰位。[0109]例如,查找到加入干扰位的预定位置是:相邻两个加密后程序代码块之间的l〇M,即从第30M+1个比特到第40M个比特,从第70M+1个比特到第80M个比特,从第110M+1个比特到第120M个比特,从第150M+1个比特到第160M个比特,从第190M+1个比特到第200M个比特。将程序代码处理结果中第30M+1个比特到第40M个比特、第7〇M+1个比特到第8〇M个比特、第110M+1个比特到第120M个比特、第150M+1个比特到第160M个比特、第190M+1个比特到第200M个比特去除。[0110]这种加入干扰位的方案的好处是:加入干扰位后的加密后程序代码外包到其它程序员或其它公司的程序员后,其它程序员或其它公司的程序员不知道干扰位的具体位置,进一步增加了其破解的难度,提高了程序代码安全性。同时,在解密前去掉这些干扰位,又能还原出正确的原程序代码。[0111]在一个实施例中,所述预定位置是从预先确定的位置集合中随机选取的。[0112]也就是说,预先将构想出的各种可能的加入干扰位的位置放入位置集合中。在需要加干扰位时,从集合中随机选取一个位置。这种方式带来的好处是:由于加入干扰位的位置不是固定不变的,而是每次需要加入干扰位时随机选取的,因而是不确定的,增加了加密后程序代码外包到其它程序员或其它公司的程序员后被其它程序员或其它公司的程序员破解的难度,从而进一步提高了程序代码安全性。[0113]下面参考图4,其示出了适于用来实现本申请实施例的消息接收方的计算机系统400的结构示意图。[0114]如图4所示,计算机系统400包括中央处理单元CPU401,其可以根据存储在只读存储器ROM402中的程序或者从存储部分408加载到随机访问存储器RAM403中的程序而执行各种适当的动作和处理。在RAM403中,还存储有系统400操作所需的各种程序和数据。CPU401、R0M402以及RAM403通过总线404彼此相连。输入输出(IO接口405也连接至总线404。[0115]以下部件连接至IO接口405:包括键盘、鼠标等的输入部分406;包括诸如阴极射线管CRT、液晶显示器LCD等以及扬声器等的输出部分407;包括硬盘等的存储部分408;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分409。通信部分409经由诸如因特网的网络执行通信处理。驱动器410也根据需要连接至IO接口405。可拆卸介质411,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器410上,以便于从其上读出的计算机程序根据需要被安装入存储部分408。[0116]特别地,根据本公开的实施例,上文参考图2描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括有形地包含在机器可读介质上的计算机程序,所述计算机程序包含用于执行图2的方法的程序代码。[0117]在这样的实施例中,该计算机程序可以通过通信部分409从网络上被下载和安装,和或从可拆卸介质411被安装。[0118]附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,所述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和或流程图中的每个方框、以及框图和或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。[0119]描述于本申请实施例中所涉及到的单元或模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元或模块也可以设置在处理器中。这些单元或模块的名称在某种情况下并不构成对该单元或模块本身的限定。[0120]作为另一方面,本申请还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中所述装置中所包含的计算机可读存储介质;也可以是单独存在,未装配入设备中的计算机可读存储介质。计算机可读存储介质存储有一个或者一个以上程序,所述程序被一个或者一个以上的处理器用来执行描述于本申请的公式输入方法。[0121]以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于具有类似功能的技术特征进行互相替换而形成的技术方案。

权利要求:1.一种基于同态加密算法保护程序代码安全的方法,其特征在于,所述方法包括:按照分块规则,将待处理程序代码分成程序代码块;为每个程序代码块,分配同态加密算法产生的一对公钥和私钥;针对每个程序代码块,用为该程序代码块分配的公钥加密;将加密后的各程序代码块组合成加密后程序代码;将加密后程序代码发往外部程序代码处理方进行程序代码处理;从外部程序代码处理方接收程序代码处理结果;按照所述分块规则,将所述程序代码处理结果分成各程序代码块的处理结果块;针对每个程序代码块的处理结果块,用为该程序代码块分配的所述私钥解密;将解密后的各程序代码块的处理结果块组合成最终程序代码。2.根据权利要求1所述的方法,其特征在于,所述分块规则是从预设的分块规则库中随机选取的。3.根据权利要求1所述的方法,其特征在于,分配同态加密算法产生的一对公钥和私钥包括:从公钥私钥对库中随机选取一对公钥和私钥,其中,所述公钥私钥对库中的公钥私钥对是事先由同态加密算法产生的。4.根据权利要求1所述的方法,其特征在于,所述待处理程序代码具有不参与所述加密、所述解密、所述外部程序代码处理方的处理的程序代码标识,并且在分配同态加密算法产生的一对公钥和私钥后,所述方法还包括:将待处理程序代码的程序代码标识、与该待处理程序代码相应的分块规则、以及为分出的每个程序代码块分配的公钥和私钥对相对应地存储,并且在从外部程序代码处理方接收程序代码处理结果后,所述方法还包括:根据与接收的程序代码处理结果相应的待处理程序代码的程序代码标识,查找与该程序代码标识相对应地存储的分块规则、以及为分出的每个程序代码块分配的私钥对。5.根据权利要求1所述的方法,其特征在于,将加密后的各程序代码块组合成加密后程序代码包括:将加密后的各程序代码块组合后的预定位置处加入干扰位,成为加密后程序代码,并且按照所述分块规则将所述程序代码处理结果分成各程序代码块的处理结果块包括:去除所述程序代码处理结果的预定位置处的干扰位;按照所述分块规则,将去除干扰位的所述程序代码处理结果分成各程序代码块的处理结果块。6.根据权利要求5所述的方法,其特征在于,所述预定位置是从预先确定的位置集合中随机选取的。7.—种基于同态加密算法保护程序代码安全的装置,其特征在于,所述装置包括:程序代码块划分单元,用于按照分块规则,将待处理程序代码分成程序代码块;公私钥分配单元,用于为每个程序代码块,分配同态加密算法产生的一对公钥和私钥;加密单元,用于针对每个程序代码块,用为该程序代码块分配的公钥加密;加密后程序代码组合单元,用于将加密后的各程序代码块组合成加密后程序代码;发送单元,用于将加密后程序代码发往外部程序代码处理方进行程序代码处理;接收单元,用于从外部程序代码处理方接收程序代码处理结果;处理结果块划分单元,用于按照所述分块规则,将所述程序代码处理结果分成各程序代码块的处理结果块;解密单元,用于针对每个程序代码块的处理结果块,用为该程序代码块分配的所述私钥解密;最终程序代码合成单元,用于将解密后的各程序代码块的处理结果块组合成最终程序代码。8.根据权利要求7所述的装置,其特征在于,所述分块规则是从预设的分块规则库中随机选取的。9.根据权利要求7所述的装置,其特征在于,公私钥分配单元进一步用于为每个程序代码块,从公钥私钥对库中随机选取一对公钥和私钥,其中,所述公钥私钥对库中的公钥私钥对是事先由同态加密算法产生的。10.根据权利要求7所述的装置,其特征在于,所述待处理程序代码具有不参与所述加密、所述解密、所述外部程序代码处理方的处理的程序代码标识,并且所述装置还包括:存储单元,用于在分配同态加密算法产生的一对公钥和私钥后,将待处理程序代码的程序代码标识、与该待处理程序代码相应的分块规则、以及为分出的每个程序代码块分配的公钥和私钥对相对应地存储,并且查找单元,用于在从外部程序代码处理方接收程序代码处理结果后,根据与接收的程序代码处理结果相应的待处理程序代码的程序代码标识,查找与该程序代码标识相对应地存储的分块规则、以及为分出的每个程序代码块分配的私钥对。

百度查询: 北京梆梆安全科技有限公司 基于同态加密算法保护程序代码安全的方法和装置

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。