首页> 中国专利> 程序变换装置和秘密保持程序

程序变换装置和秘密保持程序

摘要

提供一种生成非法解析者不能容易地解析原始程序的秘密保持程序的程序变换装置。程序变换装置生成取得代入到多个选择参数中的值的第1指令群;包含根据使用所述多个选择参数的运算式、取得表示接着处理的选择对象数据的选择识别符的指令群的第2指令群;使选择参数的值反映表示过去处理的选择对象数据的选择识别符、或过去代入所述运算式中的1个以上选择参数的值中至少1个选择参数的值的第3指令群;和通过按规定顺序处理输出与所述原始程序相同的执行结果、并对应于不同的选择识别符的多个选择对象数据,生成包含所述第1指令群、所述第2指令群、所述第3指令群与所述多个选择对象数据的秘密保持程序。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2009-12-02

    授权

    授权

  • 2008-08-13

    实质审查的生效

    实质审查的生效

  • 2008-06-18

    公开

    公开

说明书

技术领域

本发明涉及一种将保持并执行秘密信息的程序变换为难以对秘密信息进行非法解析的程序的技术。

背景技术

以前,要求使用秘密要素进行处理的程序不想让非法解析者解析。这种程序中有例如加密程序。加密程序使用作为秘密信息的加密密钥进行处理,但期望其不被解析。

另外,例如是执行图像中埋入的拷贝控制信息的水印检测的程序。在水印检测程序的处理被非法解析者解析的情况下,担心制作去除图像中埋入的水印的工具。从而,期望非法解析者难以解析这种程序。对于这种期望,例如有对程序进行加密、在执行时解密后执行该程序的方法。但是,即使使用这种方法,也由于程序在执行时在存储器上变为明文,所以存在提取并解析存储器上的程序的威协。针对这种威协,若难以对提取出的程序中包含的程序指令群按什么样的执行顺序执行进行解析,则难以制作去除水印的工具。

以前,作为防止使用秘密要素进行处理的程序的非法解析/篡改用的方法,考虑如下程序难破解化(obfuscation)方法,即通过将程序的控制构造/处理等变换为与原来程序不同的形式,将控制构造变复杂,变为解析困难的程序(例如参照非专利文献1)。

在非专利文献1中,公开了通过将包含秘密信息的程序指令置换为多个程序指令群、使程序难以破解的方法。例如,在‘d0=1234’的程序指令中,‘1234’为被隐匿信息的情况下,将‘d0=1234’的程序指令置换为‘d0=100’、‘d0=d0×2’、‘d0=d0+30’、‘d0=d0+1000’、‘d0=d0+4’这样的程序指令群,将它们分散配置。若使用这种方法,则即使收集程序中存在的常数数据,也不能从中发现被隐匿信息。

但是,若知道程序中包含的各指令群的执行顺序,则非法解析者可根据该执行顺序,通过算出d0的值,发现被隐匿信息。

因此,以前作为将程序的执行顺序的解析变困难的方法,有如下方法,即:使用根据表示执行的指令群的值来确定分支目的地的分支指令(例如switch语句)与阵列(array),控制各指令群的执行顺序(非专利文献2)。此时,原始程序中包含的多个指令群(例如为指令群1~3,按该顺序来执行。),与表示执行的指令群的值1对1对应,另外,在指令群1~3的最后,插入程序指令,该程序指令利用使用了阵列的运算式算出表示接着执行的指令群的值、并将算出的值存储在switch语句中使用的变量Var中。若将阵列的个数设为10,则插入的程序指令一例为Var=g[3]+g[4]。

由此,即使替换指令群1~3的配置顺序,也可利用switch语句,将执行顺序保持正当不变。另外,通过替换指令群1~3的配置顺序,可使原始程序的构造解析变困难。即,可使水印的检测程序的解析或被隐匿信息的取得变困难。

非专利文献1:鴨志田、松本、井上,“耐タンパ一ソフトウエアの構成手法に関する考察”,ISEC97-59

非专利文献2:Chenxi Wang,“A Security Architecture forSurvivability Mechanisms”,Ph.D.Dissertation(2000)

但是,插入各指令群最后的程序指令与阵列中存储的各数据例如有可能从计算机装置的存储区域取得。因此,若非法解析者知道1插入各指令群最后的程序指令与阵列中存储的各数据,则非法解析者取得switch语句中使用的变量的值,可再构成原始程序的控制构造,可容易地执行原始程序的解析。

发明内容

因此,本发明的目的在于提供一种生成非法解析者不能容易解析原始程序的秘密保持程序的程序变换装置、执行所述秘密保持程序的秘密处理装置、变换方法、和秘密处理方法。

为了实现上述目的,本发明是一种程序变换装置,根据原始程序生成秘密保持程序,其特征在于:具备:程序取得部件,取得原始程序;选择对象数据生成部件,生成通过按规定顺序处理、输出与所述原始程序相同的执行结果、并对应了不同选择识别符的多个选择对象数据;预处理指令群生成部件,生成将值代入多个选择参数的每个中的预处理指令群;选择处理指令群生成部件,根据使用了所述多个选择参数的运算式,生成选择处理指令群,该选择处理指令群包含取得表示接着处理的选择对象数据的选择识别符的指令群;更新处理指令群生成部件,生成更新处理指令群,该更新处理指令群使选择参数的值,反映表示过去处理的选择对象数据的选择识别符、或过去代入所述选择参数中的1个以上选择参数值中的至少1个选择参数的值;和秘密保持程序生成部件,生成包含所述预处理指令群、所述处理选择指令群、所述更新处理指令群、所述多个选择对象数据的秘密保持程序,该秘密保持程序重复进行执行所述处理选择指令群的处理、处理由所述选择处理指令群取得的选择识别符表示的选择对象数据的处理、和若处理所述选择对象数据则执行所述更新处理指令群的处理。

发明效果

根据上述所示的构成,由程序变换装置生成的秘密保持程序当更新运算式的所述多个选择参数时,使选择参数值反映表示过去处理的选择对象数据的选择识别符、或过去代入所述运算式中的1个以上选择参数值中的至少1个选择参数值。以前,当确定接着应执行的块时,使用存储多个固定值的阵列,但由本发明的程序变换装置生成的秘密保持程序在确定接着应执行的块之后,始终更新运算式中使用的选择参数,所以难以确定存储在多个选择参数中的值。因此,非法解析者不能容易地解析原始程序。

这里,也可以是,所述规定顺序是向所述多个选择参数赋予规定的初始值、通过重复执行所述选择处理指令群和所述更新处理指令群、从而依次算出的选择识别符的顺序。

根据该构成,程序变换装置在向各选择参数赋予规定的初始值的情况下,可生成输出与原始程序相同执行结果的秘密保持程序。

这里,也可以是,所述多个选择对象数据的每个由1个以上的数据构成。

根据该构成,程序变换装置可生成将选择对象数据处理为数据的秘密保持程序。

这里,也可以是,所述原始程序具有应隐匿的秘密信息,所述选择处理指令群生成部件生成选择处理指令群,该选择处理指令群由通过使用所述多个选择参数的第1运算式来算出所述选择识别符的指令群构成,所述更新处理指令群生成部件生成更新处理指令群,该更新处理指令群根据由所算出的所述选择识别符表示的选择对象数据的值,更新所述多个选择参数,所述程序变换装置还具备:变迁处理指令群生成部件,生成变迁处理指令群,该变迁处理指令群利用使用了更新后的多个选择参数的第2运算式,算出与所述秘密信息相同的值,所述秘密保持程序生成部件,将生成的变迁处理指令群配置在所述更新处理指令群的配置位置与所述秘密信息的配置位置之间,并置换成由所述变迁处理指令群算出所述秘密信息的处理。

根据该构成,由于程序变换装置生成的秘密保持程序利用所述选择处理指令群、所述更新处理指令群和所述变迁处理指令群来隐匿算出与秘密信息相同值的方法,所以非法解析者难以解析秘密信息。

这里,也可以是,程序变换装置还具备分割部件,将所述原始程序分割成1个以上的块,所述多个选择对象数据的每个包含不同的块。

根据该构成,程序变换装置可生成将选择对象数据处理为从原始程序分割的块的秘密保持程序。

这里,也可以是,所述多个选择参数是从第1到第n的选择参数,所述更新处理指令群生成部件生成更新处理指令群,该更新处理指令群对于所述多个选择对象数据的每个,将存储在第j-1选择参数中的值存储到第j选择参数,将常数值存储在第1选择参数中,其中j是2以上n以下的整数。

根据该构成,程序变换装置生成的秘密保持程序可使过去代入所述运算式的1个以上选择参数值中的至少1个选择参数值得以反映地,更新所述多个选择参数值。

这里,也可以是,所述选择对象数据的个数是由所述块的个数以上构成的规定数量,所述运算式对所述第1到第n的选择参数的每个,算出Pi×第i选择参数,将算出的结果分别相加,对加法结果实施以所述规定数量为模数值N的模数运算,算出选择识别符,其中i是1以上n以下的整数,Pi与模数值N互质。

根据该构成,程序变换装置可使用运算式来可靠地确定选择对象数据。

这里,也可以是,选择对象数据生成部件具备:存储部,存储当前时刻之前由所述运算式算出的选择识别符的每个;执行部,对1个块选择1个值,将存储在第j-1选择参数中的值存储到第j选择参数,将选择到的值存储在第1选择参数中,执行所述运算式,其中j是2以上n以下的整数;判断部,判断与算出的算出值相同的选择识别符是否存储在所述存储部中;存储部,在判断结果为否定的情况下,将所述选择到的1个值确定为对所述1个块的所述常数值,并将所述1个块存储在所算出的算出值表示的选择对象数据中;和重复控制部,在判断结果为肯定的情况下,确定所述常数值,并进行控制,使得在1个块被存储在选择对象数据之前的期间中,重复所述执行部与所述判断部的处理,对全部块执行所述选择对象数据生成部件的处理。

根据该构成,程序变换装置可使用更新处理指令群的运算式,在确定存储下一块的选择对象数据的情况下,更新所述多个选择参数,以变为此前未存储的选择对象数据。由此,生成的秘密保持程序可利用使用了多个选择参数的运算式来可靠地确定接着应执行的块,所以可提供与原始程序同等的功能。

这里,也可以是,所述选择处理指令群生成部件生成选择处理指令群,该选择处理指令群始终取得表示未执行的选择对象数据的识别符。

根据该构成,程序变换装置生成的秘密保持程序可始终取得包含未执行的块的选择对象数据。另外,秘密保持程序由于利用选择处理指令群,始终将不同的选择对象数据设为接着应执行的选择对象数据,所以非法解析者难以确定正确的执行顺序。

这里,也可以是,所述选择处理指令群生成部件生成选择处理指令群,该选择处理指令群使用表示对所述多个选择对象数据的每个是否已执行完的管理信息,取得表示是未执行的选择对象数据的识别符。

根据该构成,程序变换装置生成的秘密保持程序可使用管理信息,始终取得包含未执行的块的选择对象数据。

这里,也可以是,所述多个选择参数是从第1到第n的选择参数,所述管理信息是表示对所述多个选择对象数据的每个,在当前时刻已执行完或未执行中的某一个的状态的排列表格,所述选择对象数据的个数是由所述块的个数以上构成的规定数量,所述选择处理指令群生成部件生成:所述排列表格;所述运算式,对所述第1到第n的选择参数的每个算出Pi×第i选择参数,将算出的结果分别相加,对加法结果实施以所述规定数量为模数值N的模数运算,算出表示包含接着应执行的块的选择对象数据的临时的选择识别符,其中i是1以上n以下的整数;和取得程序指令群,在由所述算出式算出的所述临时的选择识别符所示的选择对象数据在所述排列表格中表示未执行的情况下,将所述临时的选择识别符设为表示包含接着应执行的块的选择对象数据的真选择识别符,在表示已执行完的情况下,根据取得未执行的选择对象数据之前事先确定的选择顺序,取得临时的选择识别符,所述选择处理指令群包含所述排列表格、所述运算式、和所述取得程序指令群,Pi与模数值N互质。

根据该构成,程序变换装置生成的秘密保持程序可使用排列表格,可靠地取得包含未执行的块的选择对象数据。

这里,也可以是,所述更新处理指令群生成部件生成所述更新处理指令群,该更新处理指令群将存储在第j选择参数中的值存储到第j-1选择参数,将所述选择处理指令群取得的所述真选择识别符存储到第n变量,其中j是2以上n以下的整数。

根据该构成,程序变换装置生成的秘密保持程序当更新选择参数时,始终使选择参数值反映表示过去处理的选择对象数据的选择识别符、或过去代入所述运算式中的1个以上选择参数值中的至少1个选择参数值,所以难以确定存储在多个选择参数中的值。

这里,也可以是,所述运算式是第1取得程序指令群,该第1取得程序指令群使用表示1个选择参数的索引,从所述多个选择参数中取得所述1个参数,所述管理信息是排列表格,该排列表格对所述多个选择对象数据的每个,表示在当前时刻已执行完或未执行中的某一状态,所述选择处理指令群生成部件生成:所述第1取得程序指令群;所述排列表格;和第2取得程序指令群,根据表示所述排列表格中未执行的1个以上选择对象数据的选择识别符的排列顺序,取得按由所述取得程序指令群取得的参数值所示的顺序来配置的选择识别符,所述选择处理指令群包含所述第1取得程序指令群、所述排列表格和所述第2取得程序指令群。

根据该构成,程序变换装置生成的秘密保持程序可使用索引,取得表示接着执行的选择对象数据的选择识别符。

这里,也可以是,所述更新处理指令群生成部件生成将所述索引的值递增的所述更新处理指令群。

根据该构成,程序变换装置生成的秘密保持程序更新索引。非法解析者即便知道某1个块,也由于不知道索引值,所以不能确定接着应执行的块。因此,非法解析者不能容易地解析原始程序。

这里,也可以是,所述选择对象数据的个数是由所述块的个数以上构成的规定数量,所述多个选择参数是第1到第n的参数,所述管理信息是排列表格,该排列表格对所述多个选择对象数据的每个,表示在当前时刻已执行完或未执行中的某一个的状态,所述选择处理指令群生成部件生成:所述排列表格;所述运算式,对所述第1到第n的选择参数的每个算出Pi×第i选择参数,将算出的结果分别相加,对加法结果实施以所述规定数量为模数值N的模数运算,算出表示包含接着应执行的块的选择对象数据的值,其中i是1以上n以下的整数;和取得程序指令群,根据在与所述排列表格相同的表格内、表示未执行的1个以上选择对象数据的选择识别符的排列顺序,取得按由所述运算式算出的所述值表示的顺序来配置的选择识别符,所述选择处理指令群包含所述排列表格、所述运算式、和所述取得程序指令群。

根据该构成,程序变换装置生成的秘密保持程序可可靠地取得包含未执行的块的选择对象数据。另外,秘密保持程序利用选择处理指令群,始终将不同的选择对象数据设为接着应执行的选择对象数据,所以非法解析者难以确定正确的执行顺序。

这里,也可以是,所述选择对象数据的个数是由所述块的个数以上构成的规定数量,所述秘密保持程序生成部件还在所述多个块的每个包含于选择对象数据中之后,在未包含块的1个以上选择对象数据中,插入包含1个以上程序指令的伪块。

根据该构成,程序变换装置生成的秘密保持程序包含伪块,所以非法解析者难以解析。

本发明是一种秘密处理装置,通过对确定了处理顺序的多个选择对象数据进行处理,执行应隐匿的秘密处理,其特征在于:具备:预处理执行部件,将值代入多个选择参数的每个中;选择处理执行部件,根据使用了所述多个选择参数的运算式,取得表示接着处理的选择对象数据的选择识别符;更新处理执行部件,使选择参数的值,反映表示过去处理的选择对象数据的选择识别符、或过去代入所述选择参数中的1个以上选择参数值中的至少1个选择参数的值;和选择对象数据执行部件,对由所述选择处理执行部件取得的选择识别符表示的选择对象数据进行处理,在视为所述秘密保持程序结束之前,重复所述选择处理执行部件、更新处理指令执行部件、选择对象数据执行部件进行的处理。

根据该构成,秘密处理装置当更新运算式的所述多个选择参数时,使选择参数值反映表示过去处理的选择对象数据的选择识别符、或过去代入所述运算式中的1个以上选择参数值中的至少1个选择参数值。以前,当确定接着应执行的块时,使用存储多个固定值的阵列,但本发明的秘密处理装置在确定接着应执行的选择对象数据之后,始终更新运算式中使用的选择参数,所以难以确定存储在多个选择参数中的值。因此,非法解析者不能容易地解析秘密处理。

这里,也可以是,所述多个选择对象数据的每个由1个以上的数据构成。

根据该构成,秘密处理装置可将选择对象数据处理为数据。

这里,也可以是,所述秘密处理是代替使用应隐匿的秘密信息、实施规定处理后算出所述秘密信息的处理,所述选择处理执行部件利用使用了所述多个选择参数的运算式,算出所述选择识别符,所述更新处理执行部件根据由所述选择识别符表示的选择对象数据的值,更新所述多个选择参数,所述秘密处理装置还具备变迁处理执行部件,该变迁处理执行部件利用使用了更新后的多个选择参数的所述规定处理,算出与所述秘密信息相同的值。

根据该构成,由于秘密处理装置隐匿了算出与秘密信息相同值的方法,所以非法解析者难以解析秘密信息。

这里,也可以是,所述秘密处理是由外部装置执行被分割成1个以上块的原始程序的处理,所述块包含1个以上的程序指令,所述多个选择对象数据的每个包含不同的块。

根据该构成,秘密处理装置可将选择对象数据处理为从原始程序分割的块。

这里,也可以是,所述多个选择参数是从第1到第n的选择参数,所述更新处理执行部件对于所述多个选择对象数据的每个,将存储在第j-1选择参数中的值存储到第j选择参数,将常数值存储在第1选择参数中,其中j是2以上n以下的整数,所述常数值是所述外部装置在所述秘密保持程序生成时事先设定的值,以便使用所述运算式,算出表示接着执行的选择对象数据的选择识别符。

根据该构成,秘密处理装置可使过去代入所述运算式的1个以上选择参数值中至少1个选择参数值得以反映地,更新所述多个选择参数值。

这里,也可以是,所述选择对象数据的个数是由所述块的个数以上构成的规定数量,所述运算式对所述第1到第n的选择参数的每个,算出Pi×第i选择参数,将算出的结果分别相加,对加法结果实施以所述规定数量为模数值N的模数运算,算出选择识别符,其中i是1以上n以下的整数,Pi与模数值N互质。

根据该构成,秘密处理装置可利用运算式来可靠地确定选择对象数据。

这里,也可以是,所述选择处理执行部件始终取得表示未执行的选择对象数据的识别符。

根据该构成,秘密处理装置可始终取得包含未执行的块的选择对象数据。另外,秘密处理装置执行的秘密处理始终将不同的选择对象数据设为接着应执行的选择对象数据,所以非法解析者难以确定正确的执行顺序。

这里,也可以是,所述选择处理执行部件使用表示对所述多个选择对象数据的每个是否已执行完的管理信息,取得表示未执行的选择对象数据的识别符。

根据该构成,秘密处理装置可使用管理信息,始终取得包含未执行的块的选择对象数据。

这里,也可以是,所述多个选择参数是第1到第n的选择参数,所述选择对象数据的个数是由所述块的个数以上构成的规定数量,所述管理信息是排列表格,该排列表格对所述多个选择对象数据的每个,表示在当前时刻已执行完或未执行中的某一个的状态,所述选择处理执行部件保持所述排列表格,所述运算式是如下运算式,即:对所述第1到第n的选择参数的每个算出Pi×第i选择参数,将算出的结果分别相加,对加法结果实施以所述规定数量为模数值N的模数运算,算出表示包含接着应执行的块的选择对象数据的临时的选择识别符,其中i是1以上n以下的整数;所述选择处理执行部件在由所述算出式算出的所述临时的选择识别符所示的选择对象数据在所述排列表格中表示未执行的情况下,将所述临时的选择识别符设为表示包含接着应执行的块的选择对象数据的真选择识别符,在表示已执行完的情况下,根据取得未执行的选择对象数据之前事先确定的选择顺序,取得临时的选择识别符,Pi与模数值N互质。

根据该构成,秘密处理装置可使用排列表格,可靠地取得包含未执行的块的选择对象数据。

这里,也可以是,所述更新处理执行部件将存储在第j选择参数中的值存储到第j-1选择参数,将所述选择处理执行部件取得的所述真选择识别符存储到第n变量,其中j是2以上n以下的整数。

根据该构成,秘密处理装置当更新选择参数时,始终使选择参数值反映表示过去处理的选择对象数据的选择识别符、或过去代入所述运算式中的1个以上选择参数值中的至少1个选择参数值,所以难以确定存储在多个选择参数中的值。

这里,也可以是,所述管理信息是排列表格,该排列表格对所述多个选择对象数据的每个,表示在当前时刻已执行完或未执行中的某一个的状态,所述选择处理执行部件保持所述排列表格,并且包含:第1取得部,执行所述运算式,该运算式使用表示1个选择参数的索引,从所述多个选择参数中取得所述1个选择参数;和第2取得部,根据表示所述排列表格中未执行的1个以上选择对象数据的选择识别符的排列顺序,取得按由所述第1取得部取得的选择参数值所示的顺序来配置的选择识别符。

根据该构成,秘密处理装置可使用索引,取得表示接着执行的选择对象数据的选择识别符。

这里,也可以是,所述更新处理执行部件将所述索引的值递增。

根据该构成,秘密处理装置更新索引。非法解析者即便知道某个块,也由于不知道索引值,所以不能确定接着应执行的块。因此,非法解析者不能容易地解析原始程序。

这里,也可以是,所述选择对象数据的个数是由所述块的个数以上构成的规定数量,所述多个选择参数是第1到第n的参数,所述管理信息是排列表格,该排列表格对所述多个选择对象数据的每个,表示在当前时刻已执行完或未执行中的某一个的状态,所述选择处理执行部件保持所述排列表格,所述运算式是如下运算式,即:对所述第1到第n的选择参数的每个算出Pi×第i选择参数,将算出的结果分别相加,对加法结果实施以所述规定数量为模数值N的模数运算,算出表示包含接着应执行的块的选择对象数据的临时的选择识别符,其中i是1以上n以下的整数;所述选择处理执行部件根据在与所述排列表格相同的表格内、表示未执行的1个以上选择对象数据的选择识别符的排列顺序,取得按由所述运算式算出的所述值表示的顺序来配置的选择识别符。

根据该构成,秘密处理装置可可靠地取得包含未执行的块的选择对象数据。另外,秘密处理装置执行的秘密处理始终将不同的选择对象数据设为接着应执行的选择对象数据,所以非法解析者难以确定正确的执行顺序。

这里,也可以是,所述秘密处理是由所述外部装置执行根据所述原始程序生成的秘密保持程序的处理,所述选择对象数据的个数是由所述块的个数以上构成的规定数量,在不包含块的1个以上选择对象数据中,包含含有1个以上程序指令的伪块,所述秘密保持程序包含从所述原始块分割出的各块、和1个以上的伪块。

根据该构成,秘密处理装置执行的秘密保持程序包含伪块,所以非法解析者难以解析。

附图说明

图1是表示秘密保持系统1的构成框图。

图2是表示秘密保持程序100的构造的图。

图3是表示秘密保持程序100的具体程序的图。

图4是表示由正常系统执行秘密保持程序100时的处理动作的流程图。

图5是表示程序难破解化装置10的构成框图。

图6是表示秘密保持程序生成部203的构成框图。

图7是表示程序难破解化装置10的动作概要的流程图。

图8是表示选择对象数据的生成处理动作的流程图。后接图9。

图9是表示选择对象数据的生成处理动作的流程图。上接图8。

图10是表示秘密保持系统2的构成框图。

图11是表示秘密保持程序300的构造的图。

图12是表示由正常系统执行秘密保持程序300时的处理动作的流程图。

图13是表示程序难破解化装置30的构成框图。

图14是表示程序难破解化装置30的动作概要的流程图。

图15是表示秘密保持系统3的构成框图。

图16是表示秘密保持程序500的构造的图。

图17是表示难破解对象程序的控制流程的图。

图18是模式记述秘密保持程序500的各块的图。

图19是表示秘密保持程序500的具体程序的图。

图20是表示用C语言记述秘密保持程序500的各块的具体例的图。

图21是表示秘密处理装置60的构成框图。

图22是表示管理信息表格T700的数据构造一例的图。

图23是表示控制部700的构成框图。

图24是表示秘密处理装置60的动作流程图。

图25是表示程序难破解化装置50的构成框图。

图26是表示配置顺序确定部804的构成框图。

图27是表示程序难破解化装置50的动作概要的流程图。

图28是表示配置确定处理的动作的流程图。

图29是表示初始值算出处理的动作的流程图。

图30是表示功能提供指令群1~3的执行顺序的图。

图31是表示选择处理部722b的构成框图。

图32是表示选择识别符取得处理的动作的流程图。

图33是表示难破解化对象程序的控制流程的图。

图34是表示程序难破解化装置50c的构成框图。

图35是表示将图33所示的控制流程置换成所生成的3个功能提供指令群的控制流程的图。

图36是表示展开各功能提供指令群的程序的控制流程的图。

图37是表示配置顺序确定部804c的构成框图。

图38是表示秘密保持程序1800的构造图。

图39是表示配置顺序确定部804d的动作的流程图。

图40是用C语言记述秘密保持程序500e各块的具体例的图。

图41是表示秘密保持程序2000的构造图。

图42是表示秘密保持程序2000的动作具体例的流程图。

图43是表示程序难破解化装置1010的构成框图。

图44是表示配置确定处理的动作的流程图。

图45是表示秘密保持程序2200的构造图。

图46是表示秘密保持程序2200的动作具体例的流程图。

图47是表示程序难破解化装置3010的构成框图。

图48是表示配置确定处理的动作的流程图。

符号说明

1秘密保持系统

10程序难破解化装置

20程序执行装置

100秘密保持程序

200输入部

201功能提供指令群生成部

202伪功能提供指令群生成部

203秘密保持程序生成部

2秘密保持系统

30程序难破解化装置

40程序执行装置

300秘密保持程序

400输入部

401功能提供指令群生成部

402变迁处理指令群生成部

403秘密保持程序生成部

3秘密保持系统

50程序难破解化装置

60秘密处理装置

500秘密保持程序

700控制部

701存储部

702第1程序存储部

703第2程序存储部

704管理信息保持部

705选择参数群保持部

800程序存储部

801输入部

802功能提供指令群生成部

803伪功能提供指令群生成部

804配置顺序确定部

805管理指令群生成部

806秘密保持程序生成部

807输出部

1010程序难破解化装置

1020秘密处理装置

2000秘密保持程序

2200秘密保持程序

3010程序难破解化装置

3020秘密处理装置

具体实施方式

1.第1实施方式

下面,参照附图说明作为本发明第1实施方式的秘密保持程序100和程序难破解化装置10。

1.1秘密保持系统1的概要

秘密保持系统1如图1所示,由程序难破解化装置10和程序执行装置20构成。

程序难破解化装置10根据想将执行顺序变为秘密的难破解化对象程序,生成秘密保持程序100,将生成的秘密保持程序100分配给程序执行装置20。

程序执行装置20执行从程序难破解化装置10分配的秘密保持程序100。

这里,难破解化对象程序由指令群A、指令群B、指令群C等3个指令群构成,设通过按指令群A、B、C的顺序执行,可正确动作。

1.2秘密保持程序100的构造

这里,说明程序难破解化装置10生成、程序执行装置20执行的秘密保持程序100的程序构造。

秘密保持程序100是使用秘密要素进行处理的程序,是不想让非法解析者解析出程序中包含的程序指令群按什么样的执行顺序执行的程序。例如,是水印检测程序、或按非专利文献1所述的方法将处理秘密信息的程序指令置换为其它程序指令群、将它们分散并配置的程序。就后者而言,若非法解析者收集置换后的程序指令群,按正确的顺序执行,则可算出秘密信息的值,所以难以知道执行路径。

秘密保持程序100是难以解析程序中包含的多个选择对象数据140~146大致按什么样的执行顺序执行的程序。在选择对象数据140~146中,还包含正常系统执行时不执行的选择对象数据。为了增多不知道正确执行顺序的非法解析者考虑的执行顺序组合数量而加入未执行的选择对象数据。这里,所谓正常系统的执行是通过不执行使用调试工具等强制变更程序计数器或选择参数等特别操作来进行处理。秘密保持程序100如图2所示,由预处理指令群110、选择处理指令群120、变迁处理指令群130、选择对象数据140、141、...、146构成,它们按图2所示的顺序配置。

秘密保持程序100从调用源程序接收32比特的输入值in1、in2、in3、和执行该程序提供的功能处理时使用的参数。

秘密保持程序100使用保持选择处理指令群120的处理中使用的多个选择参数的各值(这里为3个值)的32比特的第1、第2和第3选择参数用变量、与保持选择识别符的32比特的选择识别符用变量,进行处理。这里,选择参数是根据选择对象数据140、141、...、146确定1个选择对象时使用的参数,选择识别符是唯一识别选择对象数据的识别符。

这里,设秘密保持程序100实际使用时从调用源程序接收的输入值in1、in2、in3为值‘1’、‘2’、‘3’。本实施方式中提供的秘密保持程序100是若使用从调用源程序接收的值、则可按正确顺序执行(包含选择对象主要指令群的)选择对象数据的程序,是不能知道从调用源程序接收的值的非法解析者难以知道(包含选择对象主要指令群的)选择对象数据的执行顺序的程序。

1.2.1预处理指令群110

预处理指令群110是算出选择处理指令群120中使用的选择参数群的初始值的程序指令群。这里,选择参数群由第1、第2和第3选择参数用变量构成。

预处理指令群110是启动秘密保持程序100时最初执行的程序指令群。

预处理指令群110由第1预处理程序指令群和分支到选择处理指令群120的第2预处理程序指令群构成,并按此顺序执行,其中该第1预处理程序指令群从调用源程序接收32比特的输入值in1、in2、in3,将接收到的值作为选择参数群的初始值,存储在选择参数用变量中。

具体而言,第1预处理程序指令群分别将in1、in2、in3的值存储在第1~第3选择参数用变量中。当正常系统执行时,第1预处理程序指令群执行如下处理,即分别接收值‘1’、‘2’、‘3’,作为输入值in1、in2、in3,分别将值‘1’、‘2’、‘3’存储在第1~第3选择参数用变量中。

第2预处理程序指令群是在例如用C语言记述的程序中、在选择处理指令群120的开头插入标签‘label_120’的情况下、用程序指令‘goto label_120;’表示的程序指令。

在紧挨着预处理指令群110的后面配置选择处理指令群120的情况下,也可没有程序指令‘goto label_120;’。此时,预处理指令群110仅由第1预处理程序指令群构成。

1.2.2选择处理指令群120

选择处理指令群120是根据选择参数群、从选择对象数据140~146中选择1个并设为选择识别符的程序指令群。

选择处理指令群120由使用选择参数群算出选择识别符的第1选择处理程序指令群、和分支到变迁处理指令群130的第2选择处理程序指令群构成,按此顺序执行。选择识别符是后述的变迁处理指令群中使用的值。

下面使用具体例来说明第1选择处理程序指令群。第1选择处理程序指令群是算出p1×(第1选择参数用变量)+p2×(第2选择参数用变量)+p3×(第3选择参数用变量)mod NN、并将算出的值存储在选择识别符用变量中的程序指令的集合,NN为选择对象数据的数量。另外,p1、p2、p3分别是与NN互质的素数,并且在以NN为模的情况下设为构成各不相同的值的数。也可将NN设为素数,将p1、p2、p3分别设为小于NN的各不相同的素数。这里,运算符‘×’表示乘法。这里,将p1、p2、p3、NN分别设为值‘2’、‘3’、‘5’、‘7’,设为是算出式1、即‘2×(第1选择参数用变量)+3×(第2选择参数用变量)+5×(第3选择参数用变量)MOD 7’的程序指令群。

分支到变迁处理指令群130的程序指令群与预处理指令群110中所述的第2预处理程序指令群一样,分支目的地变为变迁处理指令群130。

1.2.3变迁处理指令群130

变迁处理指令群130是根据选择处理指令群120算出的选择识别符、执行分支到任一选择对象数据140~146的处理的程序指令群。

具体而言,是在选择识别符用变量的值为0、1、...、6的情况下、分别执行至选择对象数据140、141、...、146的分支的程序指令群。

例如,若设记述秘密保持程序100的程序为C语言的程序,在选择对象数据140、141、...、146的开头分别有标签‘label_140:’、‘label_141:’、...、‘label_146:’,则变迁处理指令群130为下面的程序指令。

switch(选择识别符用变量){

case 0:goto label_140;

case 1:goto label_141;

case 6:goto label_146;

}

1.2.4选择对象数据140~146

选择对象数据140~146是由变迁处理指令群130分支来时、执行的程序指令群。

选择对象数据140~146分别由选择对象主要指令群150~156、更新处理指令群160~166、分支指令群170~176构成,上述指令群按图2所示的顺序配置。各指令群是由1个以上程序指令构成的程序指令群。

这里,说明选择对象数据140的构成内容。选择对象数据141~146与选择对象数据140的构成内容一样,所以省略说明。

(1)选择对象主要指令群150

选择对象主要指令群150是执行该程序提供的功能(例如水印检测功能)的处理的一部分的程序指令群,或是与提供的功能无关、在由正常系统执行时(后面称为正常系统执行时)不执行的指令群。

在本实施例中,通过在正常系统执行时按选择对象主要指令群152、154、156的顺序执行,执行该秘密保持程序提供的功能的处理。即,选择对象主要指令群152、154、156是包含难破解化对象程序提供的功能的处理的一部分的程序指令群,选择对象主要指令群152、154、156分别顺序与指令群A、B、C相同。

选择对象主要指令群150、151、153、155是包含与提供的功能无关的处理的程序指令群。在下面的说明中,将选择对象主要指令群152、154、156的指令群、即作为秘密保持程序提供的功能的一部分的指令群分别称为功能提供指令群1~3。将选择对象主要指令群150、151、153、155中包含的正常系统执行时不执行的指令群称为伪(dummy)功能提供指令群。

在本实施例中,在未执行使用调试工具等强制变更程序计数器或选择参数等特别操作的正常系统执行时(下面称为正常系统执行时),预处理指令群110分别将初始值‘1’、‘2’、‘3’存储在选择参数用变量1~3中,越过(乗つ取る)后面说明的处理,顺序执行选择对象主要指令群152、154、156。更准确地,中途执行更新处理指令群等处理。

(2)更新处理指令群160

更新处理指令群160是执行选择参数群的值的更新的程序指令群。

更新处理指令群160事先具有用于选择参数群的值的更新的常数值。更新处理指令群160在接收了正当的选择参数群的情况下,使用接收到的选择参数群与常数值,生成选择处理指令群120可选择正当的选择对象作为下一处理的新的选择参数群。

这里,在下面示出生成方法的一例。

更新处理指令群160将第2选择参数用变量的值存储在第3选择参数用变量中,将第1选择参数用变量的值存储在第2选择参数用变量中,将事先具有的常数值代入选择参数用变量1中,生成新的选择参数。

常数值是将这些第1~第3选择参数用变量的值‘(常数值)’、‘x’、‘y’代入选择处理指令群120的式1中得到的选择识别符不表示此前选择的1个以上选择对象数据的值。这是因为,若其为构成此前选择的1个选择对象数据的值,则会变为该选择对象数据连续执行无限循环的处理。

这里,在下面示出更新处理指令群160~166各自具有的常数值的具体例。

秘密保持程序100如上所述,通过按选择对象主要指令群152、154、156的顺序执行,执行该秘密保持程序提供的功能的处理。

在执行选择对象主要指令群152之后,更新处理指令群162将第2选择参数用变量的值‘2’存储在第3选择参数用变量中,将第1选择参数用变量的值‘1’存储在第2选择参数用变量中。此时,通过将更新处理指令群162具有的常数值A设为‘6’,选择处理指令群120可选择选择对象数据144,作为下一正当的处理。

接着,在执行选择对象主要指令群154之后,更新处理指令群164将第2选择参数用变量的值‘1’存储在第3选择参数用变量中,将第1选择参数用变量的值‘6’存储在第2选择参数用变量中。此时,通过将更新处理指令群164具有的常数值B设为‘2’,选择处理指令群120可选择选择对象数据146,作为下一正当的处理。

接着,在执行选择对象主要指令群156之后,更新处理指令群166将第2选择参数用变量的值‘6’存储在第3选择参数用变量中,将第1选择参数用变量的值‘2’存储在第2选择参数用变量中。此时,通过将更新处理指令群164具有的常数值B设为‘0’,选择处理指令群120可指定此前执行的选择对象数据142、144、146以外的选择对象数据。

在正常系统的动作中未执行的选择对象数据140、141、143、145的更新处理指令群160、161、163、165中,不重复地选择值‘0’~‘6’中未使用的值。这里,对更新处理指令群160、161、163、165分别设值‘1’、‘3’、‘4’、‘5’。

(3)分支指令群170

分支指令群170是分支到选择处理指令群120的程序指令群、或将控制返回到程序调用源的处理的程序指令群。

1.2.5秘密保持程序100的具体例

作为秘密保持程序100的具体例,图3中示出用C语言记述的秘密保持程序100a。这里,运算符‘*’表示乘法。

程序指令群110a对应于预处理指令群110,程序指令群120a对应于选择处理指令群120,程序指令群130a对应于变迁处理指令群130。另外,程序指令群140a、142a、143a、146a分别对应于选择对象数据140、142、143、146。

程序指令群150a、152a、153a、156a分别对应于选择对象主要指令群150、152、153、156。程序指令群160a、162a、163a、166a分别对应于更新处理指令群160、162、163、166。另外,程序指令群170a、172a、173a、176a分别对应于分支指令群170、172、173、176。对应于选择对象数据141、144、145的具体例由于附图的关系而未记述。

1.3秘密保持程序100的执行

用图4所示的流程图来说明程序执行装置20由正常系统执行秘密保持程序100时的处理。

秘密保持程序100执行预处理指令群110的处理(步骤S5)。具体而言,预处理指令群110执行如下处理,即分别接收值‘1’、‘2’、‘3’,作为输入值in1、in2、in3,分别将值‘1’、‘2’、‘3’存储到第1~第3选择参数用变量中,分支到选择处理指令群120。

接着,秘密保持程序100使用接收到的输入值‘1’、‘2’、‘3’,执行选择处理指令群120的处理(步骤S10)。具体而言,选择处理指令群120利用式1‘2×(第1选择参数用变量(=1))+3×(第2选择参数用变量(=2))+5×(第3选择参数用变量(=3))MOD 7’,算出值‘2’,将算出的值‘2’存储在选择识别符用变量中,分支到变迁处理指令群130。

秘密保持程序100使用选择识别符用变量(=2),执行变迁处理指令群130的处理(步骤S15)。具体而言,变迁处理指令群130根据选择处理指令群120算出的选择识别符‘2’,分支到选择对象数据142。

秘密保持程序100根据变迁处理指令群130的分支指令,执行选择对象数据142的选择对象主要指令群152的处理(步骤S20)。具体而言,选择对象主要指令群152执行难破解化对象程序中的指令群A。

接着,秘密保持程序100执行更新处理指令群162的处理(步骤S25)。具体而言,更新处理指令群162是执行如下处理的程序指令群,即:将第2选择参数用变量的值存储在第3选择参数用变量中,将第1选择参数用变量的值存储在第2选择参数用变量中,将常数值A(=‘6’)代入第1选择参数用变量中。这里,第1~第3选择参数用变量分别是初始值‘1’、‘2’、‘3’,所以更新处理指令群162将值‘常数值A(=6)’、‘1’、‘2’代入第1~第3选择参数用变量的每个中。

接着,秘密保持程序100执行分支指令群172的处理(步骤S30)。具体而言,分支指令群172分支到选择处理指令群120。

接着,秘密保持程序100使用更新后的选择参数群(值‘6’、‘1’、‘2’),执行选择处理指令群120的处理(步骤S35)。具体而言,选择处理指令群120利用式1‘2×(第1选择参数用变量(=6))+3×(第2选择参数用变量(=1))+5×(第3选择参数用变量(=2))MOD 7’,算出值‘4’,将算出的值‘4’存储在选择识别符用变量中,分支到变迁处理指令群130。

秘密保持程序100使用选择识别符用变量(=4),执行变迁处理指令群130的处理(步骤S40)。具体而言,变迁处理指令群130根据由选择处理指令群120算出的选择识别符‘4’,分支到选择对象数据144。

秘密保持程序100根据变迁处理指令群130的分支指令,执行选择对象数据144的选择对象主要指令群154的处理(步骤S45)。具体而言,选择对象主要指令群154执行难破解化对象程序中的指令群B。

接着,秘密保持程序100执行更新处理指令群164的处理(步骤S50)。具体而言,更新处理指令群164是执行如下处理的程序指令群,即:将第2选择参数用变量的值存储在第3选择参数用变量中,将第1选择参数用变量的值存储在第2选择参数用变量中,将常数值B(=‘2’)代入第1选择参数用变量中。这里,第1~第3选择参数用变量分别是初始值‘6’、‘1’、‘2’,所以更新处理指令群164将值‘常数值B(=2)’、‘6’、‘1’代入第1~第3选择参数用变量的每个中。

接着,秘密保持程序100执行分支指令群174的处理(步骤S55)。具体而言,分支指令群174分支到选择处理指令群120。

接着,秘密保持程序100使用更新后的选择参数群(值‘2’、‘6’、‘1’),执行选择处理指令群120的处理(步骤S60)。具体而言,选择处理指令群120利用式1‘2×(第1选择参数用变量(=2))+3×(第2选择参数用变量(=6))+5×(第3选择参数用变量(=1))MOD 7’,算出值‘6’,将算出的值‘6’存储在选择识别符用变量中,分支到变迁处理指令群130。

秘密保持程序100使用选择识别符用变量(=6),执行变迁处理指令群130的处理(步骤S65)。具体而言,变迁处理指令群130根据由选择处理指令群120算出的选择识别符‘6’,分支到选择对象数据146。

秘密保持程序100根据变迁处理指令群130的分支指令,执行选择对象数据146的选择对象主要指令群156的处理(步骤S70)。具体而言,选择对象主要指令群156执行难破解化对象程序中的指令群C。

接着,秘密保持程序100执行更新处理指令群166的处理(步骤S75)。具体而言,更新处理指令群166是执行如下处理的程序指令群,即:将第2选择参数用变量的值存储在第3选择参数用变量中,将第1选择参数用变量的值存储在第2选择参数用变量中,将常数值C(=‘0’)代入第1选择参数用变量中。这里,第1~第3选择参数用变量分别是初始值‘2’、‘6’、‘1’,所以更新处理指令群164将值‘常数值C(=0)’、‘2’、‘6’代入第1~第3选择参数用变量的每个中。

接着,秘密保持程序100执行分支指令群176的处理(步骤S80)。具体而言,分支指令群176执行将控制返回到调用源程序的处理(由于选择对象数据146是最后执行的选择对象数据,所以不必分支到选择处理指令群120)。例如,C语言的程序中return语句对应于该处理。

这里,将动作的主体设为秘密保持程序100,但实际上程序执行装置20通过执行秘密保持程序100,可实现上述动作。即,也可将动作的主体从秘密保持程序100置换为程序执行装置20。

1.4程序难破解化装置10

这里,描述根据想隐匿执行顺序的难破解化对象程序、生成秘密保持程序100的程序难破解化装置10。秘密保持程序100中,选择对象主要指令群150~156中包含的功能提供指令群和伪功能提供指令群以外的各部,可对任何难破解化对象程序共同使用。这里,主要描述功能提供指令群的生成、伪功能提供指令群的生成。

程序难破解化装置10如图5所示,由输入部200、功能提供指令群生成部201、伪功能提供指令群生成部202、秘密保持程序生成部203构成。

程序难破解化装置10具体而言,是由微处理器、ROM、RAM、硬盘单元、显示器单元、键盘、鼠标等构成的计算机系统。在所述RAM或所述硬盘单元中存储计算机程序。这里,计算机程序为了实现规定的功能,组合多个表示对计算机的指令的指令代码来构成。通过所述微处理器根据所述计算机程序动作,程序难破解化装置10实现其功能。即,所述微处理器1个个地读出所述计算机程序中包含的各指令,解读读出的指令,根据解读结果进行动作。

1.4.1输入部200

当由正常系统执行难破解化对象的程序与秘密保持程序100时,接收提供给秘密保持程序100的3个初始值(这里为‘1’、‘2’、‘ 3’)。

1.4.2功能提供指令群生成部201

功能提供指令群生成部201将由输入部200接收的难破解化对象程序分割成由1个以上程序指令构成的多个块,生成多个功能提供指令群。在难破解化对象程序中包含无条件跳跃、有条件跳跃的情况下,分割成执行跳跃的程序指令与跳跃目的地的程序指令包含于同一块中。涉及编译器的术语记述在非专利文献2、3中。

这里,分割成3个块,以使得分割后的各部中包含的指令数尽可能均等地,生成3个功能提供指令群。生成的功能提供指令群按原始的程序指令群在难破解化对象程序中位于初始的顺序,设为功能提供指令群1~3。

1.4.3伪功能提供指令群生成部202

伪功能提供指令群生成部202生成多个随机组合了用记述难破解化对象程序的编程语言记述的1个以上程序指令的伪功能提供指令群。

也可仅使用难破解化对象程序中包含的程序指令,随机或手动地生成伪功能提供指令群。由此,难以区别伪功能提供指令群与从最初开始包含于难破解化对象程序中的指令,难以解析。另外,就C语言、Java(注册商标)语言等执行编译处理的编程语言而言,伪功能提供指令群生成部202如编译那样使用在难破解化对象程序中使用的变量,生成伪功能提供指令群。或者,在难破解化对象程序中未使用的变量包含于伪功能提供指令群中的情况下,伪功能提供指令群生成部202向难破解化后的程序追加这种变量的说明(宣言)。就涉及C语言的术语、变量说明的方式等而言,由于是公知的编程语言(C语言)的方式,所以这里省略说明。涉及Java(注册商标)的术语就变量的说明的方式等而言,由于是公知的编程语言(Java(注册商标))的方式,所以这里省略说明。这里,伪功能提供指令群生成部202生成4个伪功能提供指令群。

1.4.4秘密保持程序生成部203

秘密保持程序生成部203通过使用多个功能提供指令群和多个伪功能提供指令群,来生成预处理指令群110、选择处理指令群120、变迁处理指令群130、选择对象数据140、141、...、146,从而生成秘密保持程序100。

秘密保持程序生成部203如图6所示,具有程序存储部210、位置存储部211、块选择部212、块配置部213、确定部214、和插入部215。

程序存储部210具有存储所生成的各指令群和选择对象数据的区域。

位置存储部211具有存储表示配置各选择对象主要指令群的位置的信息的区域。例如,在将值‘2’存储在位置存储部211中的情况下,表示选择对象数据142中已插入1个功能提供指令群或1个伪功能提供指令群。

块选择部212从难破解对象程序中选择接着应配置的块(功能提供指令群)。

块配置部213使用式1,算出所选择的所述块的配置位置,在所述中间程序内,将选择到的所述块配置在算出的所述配置位置上。

确定部214确定应代入所述变量的代入值,以算出存储在位置存储部211中的所述配置位置以外的配置位置。

插入部215生成将确定的代入值代入所述变量中的程序指令群(更新处理指令群),在紧挨着配置后的所述块的后面,插入生成的所述程序指令群。

(1)预处理指令群110的生成

秘密保持程序生成部203生成预处理指令群110,该预处理指令群110由第1预处理程序指令群和分支到选择处理指令群120的第2预处理程序指令群构成,并按此顺序执行,其中该第1预处理程序指令群从调用源程序接收32比特的输入值in1、in2、in3,将接收到的值作为选择参数群的初始值,存储在选择参数用变量中。秘密保持程序生成部203将生成的预处理指令群110存储在程序存储部210中。

(2)选择处理指令群120的生成

秘密保持程序生成部203生成选择处理指令群120,该选择处理指令群120由使用选择参数群算出选择识别符的第1选择处理程序指令群、和分支到变迁处理指令群130的第2选择处理程序指令群构成,并按此顺序执行。

这里,秘密保持程序生成部203生成算出式1‘2×(第1选择参数用变量)+3×(第2选择参数用变量)+5×(第3选择参数用变量)MOD 7’的程序指令群,作为第1选择处理程序指令群。秘密保持程序生成部203将生成的选择处理指令群120存储在程序存储部210中。

(3)变迁处理指令群130的生成

秘密保持程序生成部203根据选择处理指令群120算出的选择识别符生成变迁处理指令群130,该变迁处理指令群130执行分支到选择对象数据140~146中的任一选择对象数据的处理。

具体而言,秘密保持程序生成部203取得由功能提供指令群生成部201生成的多个功能提供指令群的个数(这里为3个)、和由伪功能提供指令群生成部202生成的多个伪功能提供指令群的个数(这里为4个),算出其合计值。秘密保持程序生成部203生成与算出的合计值(这里为7个)相同数量的标签名。秘密保持程序生成部203通过对选择处理指令群120中包含的式1可取的值的每个、将生成的标签名建立对应,作为分支目的地,生成变迁处理指令群130。秘密保持程序生成部203将生成的变迁处理指令群130存储在程序存储部210中。

(4)选择对象数据140、141、...、146的生成

秘密保持程序生成部203使用3个初始值、式1、生成的多个功能提供指令群和多个伪功能提供指令群,生成与多个功能提供指令群的个数和伪功能提供指令群的个数的合计值相同数量的选择对象数据。

以下,使用具体例对选择对象数据的生成进行说明。

秘密保持程序生成部203生成仅由生成的各标签名构成的选择对象数据。这里,秘密保持程序生成部203生成7个选择对象数据140~146。秘密保持程序生成部203将仅由生成的各标签名构成的选择对象数据分别存储在程序存储部210中。

秘密保持程序生成部203从功能提供指令群生成部201取得功能提供指令群1。秘密保持程序生成部203使用由输入部200接收的3个初始值与式1,确定插入所取得的功能提供指令群1的选择对象数据。这里,由于根据3个初始值(‘1’、‘2’、‘3’)与式1算出值‘2’,所以秘密保持程序生成部203将功能提供指令群1插入到存储在程序存储部210中的选择对象数据142中。秘密保持程序生成部203将‘2’存储在位置存储部211中。

秘密保持程序生成部203生成插入到选择对象数据142中的更新处理指令群162。这里,秘密保持程序生成部203将第2选择参数用变量的值‘2’存储在第3选择参数用变量中,将第1选择参数用变量的值‘1’存储在第2选择参数用变量中。秘密保持程序生成部203使用存储在位置存储部211中的1个以上的值,取得‘6’作为常数值A,以便将第1~第3选择参数用变量的值‘(常数值A)’、‘1’、‘2’代入式1得到的值变为不表示此前选择的1个以上选择对象数据的值。取得方法如后所述。秘密保持程序生成部203生成包含取得的常数值A(=‘6’)的、执行选择参数群的值的更新的更新处理指令群162,将生成的更新处理指令群插入到存储在程序存储部210中的选择对象数据142中。

秘密保持程序生成部203生成插入到选择对象数据142中的分支指令群172,将生成的分支指令群172插入选择对象数据142中。这里,秘密保持程序生成部203生成分支到选择处理指令群120的分支指令群172,将生成的分支指令群172插入到存储在程序存储部210中的选择对象数据142中。由此,生成构成秘密保持程序的选择对象数据142。

秘密保持程序生成部203从功能提供指令群生成部201取得功能提供指令群2。秘密保持程序生成部203使用选择参数群(‘常数值A(=6)’、‘1’、‘2’)与式1,确定插入了所取得的功能提供指令群2的选择对象数据。这里,由于根据3个初始值(‘6’、‘1’、‘2’)与式1算出值‘4’,所以秘密保持程序生成部203将功能提供指令群2插入到存储在程序存储部210中的选择对象数据144中。秘密保持程序生成部203将‘4’存储在位置存储部211中。此时,位置存储部211中存储值‘2’、‘4’。

秘密保持程序生成部203生成插入到选择对象数据144中的更新处理指令群164。这里,秘密保持程序生成部203将第2选择参数用变量的值‘1’存储在第3选择参数用变量中,将第1选择参数用变量的值‘6’存储在第2选择参数用变量中。秘密保持程序生成部203使用存储在位置存储部211中的1个以上的值,取得‘2’,作为常数值B,以便作为常数值B,将第1~第3选择参数用变量的值‘(常数值B)’、‘6’、‘1’代入式1得到的值变为不表示此前选择的1个以上选择对象数据的值。秘密保持程序生成部203生成包含取得的常数值B(=‘2’)的、执行选择参数群的值的更新的更新处理指令群164,将生成的更新处理指令群164插入到存储在程序存储部210中的选择对象数据144中。

秘密保持程序生成部203生成插入到选择对象数据144中的分支指令群174。这里,秘密保持程序生成部203生成分支到选择处理指令群120的分支指令群174,将生成的分支指令群174插入到存储在程序存储部210中的选择对象数据144中。由此,生成构成秘密保持程序的选择对象数据144。

秘密保持程序生成部203从功能提供指令群生成部201取得功能提供指令群3。秘密保持程序生成部203使用选择参数群(‘常数值B(=2)’、‘6’、‘1’)与式1,确定插入所取得的功能提供指令群3的选择对象数据。这里,由于根据3个初始值(‘2’、‘6’、‘1’)与式1算出值‘6’,所以秘密保持程序生成部203将功能提供指令群3插入到存储在程序存储部210中的选择对象数据146中。秘密保持程序生成部203将‘6’存储在位置存储部211中。此时,位置存储部211中存储值‘2’、‘4’、‘6’。

秘密保持程序生成部203生成插入到选择对象数据146中的更新处理指令群166。这里,秘密保持程序生成部203将第2选择参数用变量的值‘6’存储在第3选择参数用变量中,将第1选择参数用变量的值‘2’存储在第2选择参数用变量中。秘密保持程序生成部203使用存储在位置存储部211中的1个以上的值,取得‘0’,作为常数值C,以便作为常数值C,将第1~第3选择参数用变量的值‘(常数值C)’、‘2’、‘6’代入式1得到的值变为不表示此前选择的1个以上选择对象数据的值。秘密保持程序生成部203生成包含取得的常数值C(=‘0’)的、执行选择参数群的值的更新的更新处理指令群166,将生成的更新处理指令群166插入到存储在程序存储部210中的选择对象数据146中。

秘密保持程序生成部203生成插入到选择对象数据146中的分支指令群176。这里,秘密保持程序生成部203生成执行将控制返回到调用源程序的处理的分支指令群176,将生成的分支指令群176插入到存储在程序存储部210中的选择对象数据146中。由此,生成构成秘密保持程序的选择对象数据146。另外,在最后的功能提供指令群3(选择对象主要指令群156)自身以return语句结束的情况下,不必更改追加return语句。

接着,秘密保持程序生成部203取得未插入功能提供指令群或伪功能提供指令群的选择对象数据140。秘密保持程序生成部203在取得的选择对象数据140中插入未被插入到选择对象数据中的1个以上伪功能提供指令群中的1个伪功能提供指令群。秘密保持程序生成部203生成包含‘0’~‘6’中未被用作常数值的值(这里为‘1’)的、执行选择参数群的值的更新的更新处理指令群160,将生成的更新处理指令群160插入选择对象数据140中。

秘密保持程序生成部203生成插入到选择对象数据140中的分支指令群170。这里,秘密保持程序生成部203生成分支到选择处理指令群120的分支指令群170,将生成的分支指令群170插入选择对象数据140中。由此,生成构成秘密保持程序的选择对象数据140。

选择对象数据141、143、145的生成与选择对象数据140的生成一样,所以这里省略说明。

这里,说明功能提供指令群插入时的常数值的取得方法。将选择对象数据的个数设为m个。

秘密保持程序生成部203在‘0’~‘m-1’的整数中随机选择1个整数‘n’,将第1~第3选择参数用变量的值分别设为‘n’、‘第1选择参数用变量的值’、‘第2选择参数用变量的值’,代入式1,算出值。在算出的值未存在于位置存储部211中的情况下,秘密保持程序生成部203将选择到的整数‘n’设为常数值。在算出的值存在于位置存储部211中的情况下,秘密保持程序生成部203在‘0’~‘m-1’的整数中再次随机选择1个整数‘n’,重复上述动作,直到式1算出未存在于位置存储部211中的值为止。

秘密保持程序生成部203当全部的功能提供指令群的插入结束时,向多个伪功能提供指令群的每个,分配‘0’~‘m-1’的整数中未使用的整数。

另外,整数‘n’从‘0’~‘m-1’的整数中选择,但不限于此。选择的整数只要是0以上的整数即可。此时,即便伪功能提供指令群的插入目的地也可使用上述所示的常数值的算出方法来确定。

(5)秘密保持程序100的生成

秘密保持程序生成部203通过按图2所示的顺序配置存储在程序存储部210中的预处理指令群110、选择处理指令群120、变迁处理指令群130、和选择对象数据140、141、...、146,生成秘密保持程序100。

1.4.5程序难破解化装置10的动作

(1)动作概要

这里,用图7所示的流程图来说明程序难破解化装置10的动作概要。

程序难破解化装置10的输入部200在由正常系统执行难破解化对象程序与秘密保持程序100时,接收提供给秘密保持程序的3个初始值(这里为‘1’、‘2’、‘3’)(步骤S100)。

功能提供指令群生成部201将由输入部200接收到的难破解化对象程序,分割成由1个以上程序指令构成的多个块,生成多个功能提供指令群(步骤S105)。

伪功能提供指令群生成部202生成多个使由记述难破解化对象程序的编程语言记述的1个以上程序指令随机组合的、伪功能提供指令群(步骤S110)。

秘密保持程序生成部203生成预处理指令群(步骤S115),该预处理指令群由第1预处理程序指令群和分支到选择处理指令群的第2预处理程序指令群构成,并按此顺序执行,该第1预处理程序指令群从调用源程序接收32比特的输入值in1、in2、in3,将接收到的值作为选择参数群的初始值,存储在选择参数用变量中。

秘密保持程序生成部203生成选择处理指令群(步骤S120),该选择处理指令群由使用选择参数群算出选择识别符的第1选择处理程序指令群、和分支到变迁处理指令群的第2选择处理程序指令群构成,按此顺序执行。这里,秘密保持程序生成部203生成算出式1‘2×(第1选择参数用变量)+3×(第2选择参数用变量)+5×(第3选择参数用变量)MOD 7’的程序指令群,作为第1选择处理程序指令群。

秘密保持程序生成部203根据选择处理指令群算出的选择识别符生成变迁处理指令群(步骤125),该变迁处理指令群执行分支到多个选择对象数据中任一选择对象数据的处理。具体而言,秘密保持程序生成部203取得由功能提供指令群生成部201生成的多个功能提供指令群的个数(m个)与由伪功能提供指令群生成部202生成的多个伪功能提供指令群的个数(n个),算出其合计值。秘密保持程序生成部203生成与算出的合计值(这里为7个)相同数量的标签名。秘密保持程序生成部203通过对选择处理指令群120中包含的式1可取的值的每个、将生成的标签名建立对应,作为分支目的地,从而生成变迁处理指令群。

秘密保持程序生成部203使用3个初始值、式1、生成的多个功能提供指令群和多个伪功能提供指令群,生成与多个功能提供指令群的个数和功能提供指令群的个数的合计值相同数量的选择对象数据(步骤S130)。

秘密保持程序生成部203通过顺序配置生成的预处理指令群、选择处理指令群、变迁处理指令群、和多个选择对象数据,从而生成秘密保持程序(步骤S135)。

(2)选择对象数据的生成处理

这里,用图8和图9所示的流程图来说明图7的步骤S130所示的选择对象数据的生成处理的动作。

秘密保持程序生成部203生成仅由生成的各标签名构成的选择对象数据(步骤S200)。

秘密保持程序生成部203对计数器i设定1(步骤S205)。这里,计数器i表示当前着眼的功能提供指令群应第几个被执行。

秘密保持程序生成部203从功能提供指令群201取得执行顺序为第i个的功能提供指令群。秘密保持程序生成部203使用选择参数群和式1,确定插入了取得的执行顺序为第i个的功能提供指令群的选择对象数据。在i为1的情况下,秘密保持程序生成部203使用由3个初始值构成的选择参数群和式1,确定选择对象数据,在i为2以上的情况下,秘密保持程序生成部203使用更新后的选择参数群和式1,确定选择对象数据。秘密保持程序生成部203向确定的选择对象数据中插入执行顺序为第i个的功能提供指令群(步骤S210)。

秘密保持程序生成部203将第2选择参数用变量的值存储在第3选择参数用变量中,将第1选择参数用变量的值存储在第2选择参数用变量中。秘密保持程序生成部203取得常数值,以便将第1~第3选择参数用变量的值‘常数值’、‘1’、‘2’代入式1得到的值变为不表示此前选择的1个以上选择对象数据的值(步骤S215)。

秘密保持程序生成部203生成包含取得的常数值的、执行选择参数群的值的更新的更新处理指令群,将生成的更新处理指令群插入到选择对象数据中(步骤S220)。

秘密保持程序生成部203判定计数器i的值是否与功能提供指令群的个数m一致(步骤S225)。

在判定为不一致的情况下(步骤S225为‘否’),秘密保持程序生成部203生成分支到选择处理指令群的分支指令群,将生成的分支指令群插入选择对象数据中(步骤S230)。

在判定为一致的情况下(步骤S225为‘是’),秘密保持程序生成部203生成执行将控制返回到调用源程序的处理的分支指令群,将生成的分支指令群插入到选择对象数据中(步骤S235)。

秘密保持程序生成部203向计数器i加上值‘1’(步骤S240)。

秘密保持程序生成部203判定计数器i是否比功能提供指令群的个数大(步骤S243)。

在判定为不大的情况下(步骤S243为‘否’),秘密保持程序生成部203返回步骤S210,再次重复处理。

在判定为大的情况下(步骤S243为‘是’),秘密保持程序生成部203在伪功能提供指令群的个数n之间,重复步骤S245~步骤S275。

秘密保持程序生成部203取得1个功能提供指令群和伪功能提供指令群均未插入的选择对象数据、即仅包含标签名的选择对象数据(步骤S250)。

秘密保持程序生成部203取得1个未插入选择对象数据中的伪功能提供指令群,将取得的伪功能提供指令群插入步骤S250取得的选择对象数据中(步骤S255)。

秘密保持程序生成部203取得未用作常数值的值(步骤S260),生成包含取得的常数值的、执行选择参数群的值的更新的更新处理指令群,将生成的更新处理指令群插入到选择对象数据中(步骤S265)。

秘密保持程序生成部203生成分支到选择处理指令群的分支指令群,将生成的分支指令群插入到选择对象数据中(步骤S270)。

秘密保持程序生成部203在伪功能提供指令群的个数n之前的期间,重复步骤S250~步骤S270,结束处理(步骤S275)。

1.5变形例

根据上述第1实施方式说明了本发明,但本发明当然不限于上述实施方式。下面的情况也包含于本发明中。

(1)在上述第1实施方式中,使用式1作为算出选择识别符的算出式,但不限于此。算出选择识别符的算出式只要是使用选择参数用变量的其它公式即可。

另外,即便是对选择识别符用变量设定初始值、使用选择识别符用变量的公式也无妨。另外,即便是对选择处理指令群设定计数调用选择处理指令群的次数的计数器用变量、还使用计数器用变量的公式也无妨。

另外,计数器用变量也可在选择处理指令群以外执行提高计数器值的处理。

(2)在上述第1实施方式中,包含最后功能提供指令群3的选择对象数据146中也可不包含更新处理指令群166。

(3)在上述第1实施方式中,将功能提供指令群的数量设为3个,但不限于此。功能提供指令群的数量是几个均无妨。

(4)在上述第1实施方式中,将选择参数的数量设为3个,但不限于此。选择参数的数量只要是多个即可。

此时的式1变为‘p1×(第1选择参数用变量)+p2×(第2选择参数用变量)+...+pn×(第n选择参数用变量)MOD NN’(n为2以上的整数)。p1、p2、...、pn是互质的素数,将NN设为选择对象数据的数量。另外,当更新选择参数时,将存储在第i-1参数中的值存储在第i参数中。此时,按第n参数、第n-1参数、...、第2参数的顺序存储。另外,在第1参数中,存储执行了的选择对象主要指令群所具有的常数值。这里,i是2以上n以下的整数。

另外,将输入值的初始值设为‘1’、‘2’、‘3’,但也可不是该值。

另外,将输入值等设为32比特的值,但也可以是比32比特短的比特数,或是比32比特长的比特数。

(5)在上述第1实施方式中,也可构成为,将选择对象数据140~146中具有分支指令群170~175的构成,变为各选择对象数据中具有选择处理指令群与变迁处理指令群的构成。

(6)在上述第1实施方式中,选择信息参数的初始值,也可以是由预处理部等使用秘密保持程序以外的程序或执行程序的设备所具有的功能、来确定作为赋予秘密保持程序的值的构成的值。

(7)在秘密保持程序具有秘密信息的情况下,也可置换为使用选择参数用变量、选择识别符用变量算出秘密信息的值的处理。

(8)在上述第1实施方式的程序难破解化装置10中,选择对象数据的数量或选择参数的数量未必是固定值,也可以是其它值。

另外,也可将这些值作为输入赋予程序难破解化装置。

(9)在上述第1实施方式中,作为块的分割的分割方法,这里说明简单的方法,但不限于该方法,只要执行对应于块分割方式的控制构造的解析,生成对应于块分割方式的功能提供指令群即可。控制构造的解析是公知的,所以省略说明。

(10)在上述第1实施方式中,程序难破解化装置10在确定初始值、常数值之后,确定插入功能提供指令群的选择对象数据,但不限于此。程序难破解化装置10也可在确定功能提供指令群的配置之后,确定初始值、常数值。

(11)在上述第1实施方式中,程序难破解化装置10在仅由标签名构成的多个选择对象数据的每个中插入选择对象主要指令群、更新处理指令群和分支指令群之后,确定预处理指令群、选择处理指令群、变迁处理指令群、和多个选择对象数据的配置,生成秘密保持程序,但不限于此。

程序难破解化装置10也可确定预处理指令群、选择处理指令群、变迁处理指令群、和仅由标签名构成的多个选择对象数据的配置,之后,在仅由标签名构成的多个选择对象数据的每个中,插入选择对象主要指令群、更新处理指令群和分支指令群,生成秘密保持程序。

(12)也可分别组合上述实施方式及上述变形例。

1.6汇总

上述第1实施方式所示的秘密保持程序100由于将选择对象主要指令群152、154、156与实际的执行顺序无关地配置在分散的位置上,所以难以解析执行顺序。

另外,选择对象主要指令群152、154、156中不包含向其它选择对象主要指令群的直接分支指令,所以难以解析执行顺序。

另外,执行确定接着分支到哪个选择对象数据的处理的选择处理指令群,是根据选择参数的值的不同、有可能分支到全部选择对象主要指令群的程序指令,所以难以解析执行顺序。并且,选择对象数据140~146中包含正常系统执行时未执行的选择对象数据140、141、143、145,所以解析更困难。

在本实施方式中,使用多个选择参数来确定选择对象数据140~146的执行顺序。从而,即便非法解析者已知执行顺序的一部分,也难以知道此外部分的执行顺序。具体进行说明。例如,在秘密保持程序是水印检测的算法的情况下,认为非法解析者知道一般的水印处理、具体而言为一般的水印检测算法的哪个处理中包含。在这种情况下,考虑从多个选择对象数据中发现要执行的选择对象数据。此时,若选择处理指令群是根据1个选择参数来确定执行顺序的处理,则非法解析者可知道只此一个选择参数的值。当执行时,为了分支到要执行的选择对象数据,对变迁处理指令群使用哪个选择识别符进行逆运算,并且,为了得到该选择识别符,只要对选择处理指令群使用什么样的选择参数进行了处理进行逆运算即可。下面,可通过追踪选择参数值的变化、选择处理指令群的处理来知道执行顺序。

但是,若象本方法那样使用多个选择参数,则即便偶尔发现1个要执行的选择对象数据,也不能根据选择识别符来逆运算选择参数。

还考虑非法解析者偶尔知道连续执行的选择对象数据的情况。在这种情况下,非法解析者由于可知道更多选择处理指令群对式1的输入输出组合,所以增多式1中使用的选择参数用变量的数量使解析变困难。

并且,在本实施例中,存在将选择参数更新为选择对象数据的处理。从而,即便非法解析者已知秘密保持程序与赋予秘密保持程序的输入值,只要未顺序解析选择参数的值如何变化,就不能解析实际执行选择对象的顺序。

另外,在以前,例如使用Switch语句确定执行顺序的情况下,在某个块的最后,直接记述表示接着应执行的块的值(Switch语句中使用的值)。在本实施方式中,通过使用由3个值构成的选择参数群来执行选择处理指令群,从而确定接着执行的选择对象数据。此时,首先根据正当的3个初始值,确定第1个执行的功能提供指令群。接着,根据由更新处理指令群更新后的选择参数群(第1次更新选择参数群),确定第2个执行的功能提供指令群。第n个执行的功能提供指令群通过依次使用由3个初始值构成的选择参数群、第1次更新选择参数群、...、第(n-1)次选择参数群执行选择处理指令群来确定。这里,n为1以上的整数。具体而言,通过按正当的顺序执行更新处理指令群,生成正当更新后的选择参数群,使用生成的选择参数群执行选择处理指令群,由此确定第n个执行的功能提供指令群。在本实施方式中,通过依次更新选择参数群,可取得Switch语句中使用的值。即,在本实施方式中,通过在程序上隐匿、依次更新选择参数群来取得Switch语句中使用的值。这样,将从几个其它信息取得想隐匿的信息称为基于分割秘密的难破解化,本实施方式中的更新处理指令群相当于分割秘密。

2.第2实施方式

下面,参照附图说明作为本发明第2实施方式的秘密保持程序300和程序难破解化装置30。

2.1秘密保持系统2的概要

秘密保持系统2如图10所示,由程序难破解化装置30和程序执行装置40构成。

程序难破解化装置30根据想将执行顺序变为秘密的难破解化对象程序,生成秘密保持程序300,将生成的秘密保持程序300分配给程序执行装置40。

程序执行装置40执行从程序难破解化装置30分配的秘密保持程序300。

这里,难破解化对象程序由指令群A、指令群B、指令群C等3个指令群构成,设通过按指令群A、B、C的顺序执行,可正确动作。

2.2秘密保持程序300的构造

这里,说明程序难破解化装置30生成、程序执行装置40执行的秘密保持程序300的程序构造。

秘密保持程序300是使用2个以上秘密信息进行处理的程序。秘密信息是不想让非法解析者解析的程序。例如,秘密保持程序300是使用作为秘密信息的多个子密钥进行加密处理的程序。要求希望这种程序中隐匿多个秘密信息。这里,设指令群A、B、C的每个具有秘密信息。

秘密保持程序300由预处理指令群310、选择处理指令群320、主要处理指令群340、选择对象数据350~356构成,它们按图11所示的顺序配置。

秘密保持程序300是如下程序指令群,即:从调用源程序接收构成选择参数群的初始值的32比特的输入值in1、in2、in3、和使用秘密信息的处理中使用的参数,执行使用秘密信息的处理的程序指令群。在秘密保持程序的处理中,使用的是保持选择处理指令群320的处理中使用的多个选择参数的各值(这里为3个值)的32比特的变量——即第1~第3选择参数用变量、保持选择识别符的32比特的变量——即选择识别符用变量、或存储变迁处理指令群390~392算出的秘密信息的32比特的变量——即秘密信息用变量。这里,选择参数是根据选择对象数据140、141、...、146确定1个选择对象时使用的参数,选择识别符是唯一识别选择对象数据的识别符。

这里,设秘密保持程序实际使用时从调用源程序接收的输入值in1、in2、in3为值‘1’、‘2’、‘3’。

秘密保持程序300是执行使用2个以上秘密信息的处理的程序指令群,在本实施例中,将指令群A、B、C的每个具有的秘密信息设为第1~第3秘密信息,将各个的值设为‘100’、‘200’、‘300’。

2.2.1预处理指令群310

预处理指令群310是算出后述的选择处理指令群320中使用的选择参数群的初始值的程序指令群。这里,选择参数群由第1、第2和第3选择参数用变量构成。

预处理指令群310的处理是与上述第1实施方式所示的预处理指令群110大致一样的处理,但不同之处在于预处理指令群110的最后是分支到选择处理指令群120的程序指令群,而预处理指令群310的最后是分支到主要处理指令群340的程序指令群。

2.2.2选择处理指令群320

选择处理指令群320是根据选择参数群、从选择对象数据350~356中选择1个并设为选择识别符的程序指令群。

选择处理指令群320的处理是与选择处理指令群120一样大致同等的处理,但不同之处在于选择处理指令群320是子程序(subroutine)。

具体而言,不同之处在于,选择处理指令群120具有在该指令群的处理最后分支到变迁处理指令群的程序指令,而选择处理指令群320是程序函数,在选择处理指令群320的最后分支到调用该函数的调用源。

这里,与选择处理指令群120一样,设使用式1来算出选择识别符。

2.2.3选择对象数据350~356

选择对象数据350~356是由更新处理指令群读出的数据。

具体而言,选择对象数据350~356例如是阵列数据,在C语言的情况下,是如下阵列。

variable_140[7]={1,2,3,4,5,6,7};

该阵列是后述的变迁处理指令群390~392使用的阵列,取决于该阵列与预处理指令群3 10设定给选择参数的初始值,确定变迁处理指令群390~392变为哪个程序指令群。

2.2.4主要处理指令群340

主要处理指令群340是使用秘密信息进行处理的程序指令群。

主要处理指令群340是由功能提供指令群360~362、选择处理指令群调用指令370~372、更新处理指令群380~382、和变迁处理指令群390~392构成的程序指令群,各指令群配置在图11所示的位置上。

(1)功能提供指令群360~362

功能提供指令群360是执行使用秘密信息的处理的程序指令群。使用秘密信息的值的程序指令被记述为使用秘密信息用变量的处理。即,将秘密信息事先变换为秘密信息用变量。若秘密信息用变量的值为第1秘密信息的值‘100’,则功能提供指令群360是执行原来处理的程序指令群。

功能提供指令群361也是同样的程序指令群,若存储在秘密信息用变量中的值为秘密信息2的值是‘200’,则功能提供指令群361是执行原来处理的程序指令群。

功能提供指令群362也是同样的程序指令群,若存储在秘密信息用变量中的值为秘密信息3的值是‘300’,则功能提供指令群362是执行原来处理的程序指令群。

另外,各功能提供指令群中包含的秘密信息被事先变换为秘密信息用变量。

(2)选择处理指令群调用指令370~372

选择处理指令群调用指令370~372是调用选择处理指令群320的程序指令群。

(3)更新处理指令群380~382

更新处理指令群380是如下程序指令群,即:执行读出对应于选择识别符的选择对象数据的值的处理,之后执行使用读出的值来更新选择参数群的值的处理。

具体而言,更新处理指令群380首先在选择识别符用变量的值为0、1、...、6的情况下,分别读出存储在选择对象数据350、351、...、356中的值。

接着,更新处理指令群380根据读出的值,更新选择参数群。这里,更新处理指令群380将第2选择参数的值存储在第3选择参数中,将第1选择参数的值存储在第2选择参数中,将读出的值存储在第1选择参数中。

例如,若用C语言的程序指令记载更新处理,则变为由

(第3选择参数变量)=(第2选择参数变量);

(第2选择参数变量)=(第1选择参数变量);

(第1选择参数变量)=variable_140[(选择识别符用变量)];’

表示的程序指令群。

更新处理指令群381~382与更新处理指令群380的构成一样,所以这里省略说明。

(4)变迁处理指令群390~392

变迁处理指令群390~392是根据选择参数变量的值来确定秘密信息用变量的值的处理。

具体而言,变迁处理指令群390~392是算出存储在选择参数变量中的值(秘密信息)、并将算出的值存储在秘密信息用变量中的程序指令群。

下面,说明变迁处理指令群390~392的动作细节。

(4-1)变迁处理指令群390

变迁处理指令群390是执行如下处理的程序指令,即:执行使用第1~第3选择参数用变量的运算,算出第1秘密信息的值,将算出的值存储在秘密信息用变量中。

例如,变迁处理指令群390是执行如下处理的程序指令群,即:将P4、P5、P6设为互质的素数,算出‘P4×(第1选择参数用变量)+P5×(第2选择参数用变量)+P6×(第3选择参数用变量)+(常数1)’,将算出的值存储在秘密信息用变量中。运算符‘×’表示乘法。这里,在将P4、P5、P6分别设为值‘2’、‘3’、‘5’的情况下,是算出式2‘2×(第1选择参数用变量)+3×(第2选择参数用变量)+5×(第3选择参数用变量)+(常数1)’、并将算出的值存储在秘密信息用变量中的处理。

下面,说明常数1。

秘密保持程序300中,在执行变迁处理指令群390之前,顺序执行预处理指令群310、选择处理指令群调用指令370、选择处理指令群320、更新处理指令群380。当执行预处理指令群310、选择处理指令群调用指令370、选择处理指令群320、和更新处理指令群380时,将从调用源程序接收到的输入值in1、in2、in3的值分别作为值‘1’、‘2’、‘3’来执行。从其它调用源程序接收到的输入值也可以是任意值。

此时,选择处理指令群320利用式1‘2×(第1选择参数用变量(=1))+3×(第2选择参数用变量(=2))+5×(第3选择参数用变量(=3))MOD 7’,选择识别符的值变为‘2’,更新处理指令群380从选择对象数据350~356取得的值变为‘3’,第1~第3选择参数变量的更新后的值变为‘3’、‘1’、‘2’。

常数1是事先设定的值,以使得将如此得到的第1~第3选择参数变量的值代入式2得到的秘密信息用变量的值变为第1秘密信息的值‘100’,这里为81。

(4-2)变迁处理指令群391

同样,变迁处理指令群391是由‘2×(第1选择参数用变量)+3×(第2选择参数用变量)+5×(第3选择参数用变量)+(常数2)’构成的指令群。

下面,说明常数2的值。

秘密保持程序300在执行变迁处理指令群391之前,顺序执行预处理指令群310、选择处理指令群调用指令370、选择处理指令群320、更新处理指令群380、变迁处理指令群390、功能提供指令群360、选择处理指令群调用指令371、选择处理指令群320、更新处理指令群381。

此时,更新处理指令群381取得的第1~第3选择参数变量的值变为‘6’、‘3’、‘1’。若用与上述一样的方法算出常数2,则变为值‘174’。

(4-3)变迁处理指令群392

同样,变迁处理指令群392是由‘2×(第1选择参数用变量)+3×(第2选择参数用变量)+5×(第3选择参数用变量)+(常数3)’构成的指令群。

秘密保持程序300中,在执行变迁处理指令群392之前,顺序执行预处理指令群310、选择处理指令群调用指令370、选择处理指令群320、更新处理指令群380、变迁处理指令群390、功能提供指令群360、选择处理指令群调用指令371、选择处理指令群320、更新处理指令群381、变迁处理指令群391、功能提供指令群361、选择处理指令群调用指令372、选择处理指令群320、和更新处理指令群382。

此时,更新处理指令群382取得的第1~第3选择参数变量的值变为‘6’、‘6’、‘3’。若用与上述一样的方法算出常数3,则变为值‘255’。

2.3秘密保持程序300的执行

用图12所示的流程图来说明程序执行装置40由正常系统执行秘密保持程序300时的处理。

秘密保持程序300执行预处理指令群310的处理(步骤S300)。具体而言,预处理指令群310执行如下处理,即分别接收值‘1’、‘2’、‘3’,作为输入值in1、in2、in3,分别将值‘1’、‘2’、‘3’存储到第1~第3选择参数用变量中,分支到选择处理指令群调用指令370。

接着,秘密保持程序300执行选择处理指令群调用指令370的处理(步骤S305)。具体而言,选择处理指令群调用指令370调用选择处理指令群320。

接着,秘密保持程序300使用接收到的输入值‘1’、‘2’、‘3’,执行选择处理指令群320的处理(步骤S310)。具体而言,选择处理指令群320利用式1‘2×(第1选择参数用变量(=1))+3×(第2选择参数用变量(=2))+5×(第3选择参数用变量(=3))MOD 7’,算出值‘2’,将算出的值‘2’存储在选择识别符用变量中。

秘密保持程序300执行更新处理指令群380的处理(步骤S315)。具体而言,更新处理指令群380利用选择识别符用变量的值‘2’,读出选择对象数据352的值‘3’。更新处理指令群380将第2选择参数的值‘2’存储在第3选择参数中,将第1选择参数的值‘1’存储在第2选择参数中,将读出的值‘3’存储在第1选择参数中。

秘密保持程序300使用更新处理指令群3 80生成的选择参数群(第1~第3选择参数),执行变迁处理指令群390的处理(步骤S320)。具体而言,变迁处理指令群390使用式2‘2×(第1选择参数用变量)+3×(第2选择参数用变量)+5×(第3选择参数用变量)+(常数1)’,算出存储在秘密信息用变量中的值,将算出的值存储在秘密信息变量中。这里,将‘100’存储在秘密信息变量中。

秘密保持程序300根据存储在秘密信息变量中的值,执行功能提供指令群360的处理(步骤S325)。具体而言,功能提供指令群360执行难破解化对象程序中的指令群A。

接着,秘密保持程序300执行选择处理指令群调用指令371的处理(步骤S330)。具体而言,选择处理指令群调用指令371调用选择处理指令群320。

接着,秘密保持程序300使用第1~第3选择参数的值‘3’、‘1’、‘2’,执行选择处理指令群320的处理(步骤S335)。具体而言,选择处理指令群320利用式1‘2×(第1选择参数用变量(=3))+3×(第2选择参数用变量(=1))+5×(第3选择参数用变量(=2))MOD 7’,算出值‘5’,将算出的值‘5’存储在选择识别符用变量中。

秘密保持程序300执行更新处理指令群381的处理(步骤S340)。具体而言,更新处理指令群381利用选择识别符用变量的值‘5’,读出选择对象数据355的值‘6’。更新处理指令群381将第2选择参数的值‘1’存储在第3选择参数中,将第1选择参数的值‘3’存储在第2选择参数中,将读出的值‘6’存储在第1选择参数中。

秘密保持程序300使用更新处理指令群381生成的选择参数群(第1~第3选择参数),执行变迁处理指令群391的处理(步骤S345)。具体而言,变迁处理指令群391使用式2‘2×(第1选择参数用变量)+3×(第2选择参数用变量)+5×(第3选择参数用变量)+(常数2)’,算出存储在秘密信息用变量中的值,将算出的值存储在秘密信息变量中。这里,将‘200’存储在秘密信息变量中。

秘密保持程序300根据存储在秘密信息变量中的值,执行功能提供指令群361的处理(步骤S350)。具体而言,功能提供指令群361执行难破解化对象程序中的指令群B。

接着,秘密保持程序300执行选择处理指令群调用指令372的处理(步骤S355)。具体而言,选择处理指令群调用指令372调用选择处理指令群320。

接着,秘密保持程序300使用第1~第3选择参数的值‘6’、‘3’、‘1’,执行选择处理指令群320的处理(步骤S360)。具体而言,选择处理指令群320利用式1‘2×(第1选择参数用变量(=6))+3×(第2选择参数用变量(=3))+5×(第3选择参数用变量(=1))MOD 7’,算出值‘5’,将算出的值‘5’存储在选择识别符用变量中。

秘密保持程序300执行更新处理指令群382的处理(步骤S365)。具体而言,更新处理指令群382利用选择识别符用变量的值‘5’,读出选择对象数据355的值‘6’。更新处理指令群382将第2选择参数的值‘3’存储在第3选择参数中,将第1选择参数的值‘6’存储在第2选择参数中,将读出的值‘6’存储在第1选择参数中。

秘密保持程序300使用更新处理指令群382生成的选择参数群(第1~第3选择参数),执行变迁处理指令群392的处理(步骤S370)。具体而言,变迁处理指令群392使用式2‘2×(第1选择参数用变量)+3×(第2选择参数用变量)+5×(第3选择参数用变量)+(常数3)’,算出存储在秘密信息用变量中的值,将算出的值存储在秘密信息变量中。这里,将‘300’存储在秘密信息变量中。

秘密保持程序300根据存储在秘密信息变量中的值,执行功能提供指令群362的处理(步骤S375)。具体而言,功能提供指令群362执行难破解化对象程序中的指令群C。

2.4程序难破解化装置30

这里,描述根据想隐匿执行顺序的难破解化对象程序、生成秘密保持程序300的程序难破解化装置30。秘密保持程序300中,功能提供指令群360~362、变迁处理指令群390~392以外的各部可对任何难破解化对象程序共同使用。这里,主要描述功能提供指令群、变更处理指令群的生成。

程序难破解化装置30如图13所示,由输入部400、功能提供指令群生成部401、变迁处理指令群生成部402、秘密保持程序生成部403构成。

程序难破解化装置30具体而言,是由微处理器、ROM、RAM、硬盘单元、显示器单元、键盘、鼠标等构成的计算机系统。在所述RAM或所述硬盘单元中存储计算机程序。这里,计算机程序为了实现规定的功能,组合多个表示对计算机的指令的指令代码来构成。通过所述微处理器根据所述计算机程序动作,程序难破解化装置30实现其功能。即,所述微处理器1个个地读出所述计算机程序中包含的各指令,解读读出的指令,根据解读结果进行动作。

2.4.1输入部400

当由正常系统执行难破解化对象的程序与秘密保持程序300时,接收提供给秘密保持程序300的3个初始值(这里为‘1’、‘2’、‘3’)、和表示秘密信息的位置的位置信息(这里为表示3个秘密信息‘100’、‘200’、‘300’出现的位置的信息)。

2.4.2功能提供指令群生成部401

功能提供指令群生成部401将由输入部400接收的难破解化对象程序分割成由1个以上程序指令构成的多个块,生成功能提供指令群。在难破解化对象程序中包含无条件跳跃、有条件跳跃的情况下,分割成执行跳跃的程序指令与跳跃目的地的程序指令包含于同一块中。另外,构成块,使得执行使用了秘密信息的值的处理的程序指令包含于各不相同的块中。

这里,设难破解化对象程序是使用3个秘密信息的值的处理,分割成3个块,以使得分割后的各部中包含的指令数尽可能均等,生成3个功能提供指令群。生成的功能提供指令群按构成基础的程序指令群在难破解化对象程序中位于初始的顺序,设为功能提供指令群1~3。

2.4.3变迁处理指令群生成部402

变迁处理指令群生成部402生成包含常数未确定的式2的变迁处理指令群,生成的个数为功能提供指令群生成部401所生成的功能提供指令群的个数。

这里,变迁处理指令群生成部402生成3个包含常数未确定的式2的变迁处理指令群。

2.4.4秘密保持程序生成部403

秘密保持程序生成部403通过使用多个功能提供指令群和数量与功能提供指令群相同的变迁处理指令群,生成预处理指令群3 10、选择处理指令群320、选择处理指令群调用指令370~372、更新处理指令群380~382、和选择对象数据350~351,生成秘密保持程序300。

秘密保持程序生成部403如图13所示,具有程序存储部410。

程序存储部410具有存储生成的各指令群和选择对象数据的区域。

秘密保持程序生成部403取得由功能提供指令群生成部401生成的多个功能提供指令群,将取得的多个功能提供指令群存储在程序存储部410中。

秘密保持程序生成部403取得由变迁处理指令群生成部402生成的、数量与功能提供指令群的个数相同的变迁处理指令群,将取得的多个变迁处理指令群存储在程序存储部410中。

(1)预处理指令群310的生成

秘密保持程序生成部403生成预处理指令群310,该预处理指令群310由第1预处理程序指令群和分支到选择处理指令群调用指令的第2预处理程序指令群构成,并按此顺序执行,其中该第1预处理程序指令群从调用源程序接收32比特的输入值in1、in2、in3,将接收到的值作为选择参数群的初始值,存储在选择参数用变量中。

秘密保持程序生成部403将生成的预处理指令群310存储在程序存储部410中。

(2)选择处理指令群320的生成

秘密保持程序生成部403根据选择参数群,生成选择处理指令群320,该选择处理指令群320从选择对象数据350~356中选择1个,并作为选择识别符。

选择处理指令群320的处理是与选择处理指令群120同样大致同等的处理,但不同之处在于选择处理指令群320是子程序。具体而言,不同之处在于,选择处理指令群120具有在该指令群的处理的最后分支到变迁处理指令群的程序指令,而选择处理指令群320是程序函数,在选择处理指令群320的最后分支到调用该函数的调用源。这里,设与选择处理指令群120一样,使用式1来算出选择识别符。

秘密保持程序生成部403将生成的选择处理指令群320存储在程序存储部410中。

(3)选择处理指令群调用指令370~372的生成

秘密保持程序生成部403生成调用选择处理指令群320的选择处理指令群调用指令370~372。

秘密保持程序生成部403将生成的选择处理指令群调用指令370~372存储到程序存储部410中。

(4)更新处理指令群380~382的生成

秘密保持程序生成部403生成执行如下处理的更新处理指令群380~382,即:执行读出对应于选择识别符的选择对象数据的值的处理,之后,使用读出的值,更新选择参数群的值。

秘密保持程序生成部403将生成的更新处理指令群380~382存储到程序存储部410中。

(5)选择对象数据350~351的生成

秘密保持程序生成部403生成由更新处理指令群380~382读出的数据、即选择对象数据350~356。秘密保持程序生成部403将生成的选择对象数据350~356存储到程序存储部410中。

具体而言,选择对象数据350~356例如是阵列数据,在C语言的情况下,是如下排列。

variable_140[7]={1,2,3,4,5,6,7};

利用秘密保持程序生成部403的上述动作,可将本发明的选择对象数据处理为数据。

(6)秘密保持程序300的生成

秘密保持程序生成部403通过按图11所示的顺序配置存储在程序存储部410中的预处理指令群310、选择处理指令群320、功能提供指令群360~362、选择处理指令群调用指令370~372、更新处理指令群380~382、变迁处理指令群390~392和选择对象数据350~356,从而生成变迁处理指令群390~392中包含的各常数未确定的秘密保持程序300a。

之后,秘密保持程序生成部403使用由输入部400接收到的初始值(‘1’、‘2’、‘3’),执行生成的秘密保持程序300a,直到更新处理指令群380的处理为止。之后,秘密保持程序生成部403在变迁处理指令群390的执行时,使用由输入部400接收到的秘密信息‘100’,确定常数1,将确定的常数1代入变迁处理指令群390中包含的式2中。

秘密保持程序生成部403接着执行,直到更新处理指令群381的处理为止。之后,秘密保持程序生成部403在变迁处理指令群391的执行时,使用由输入部400接收到的秘密信息‘200’,确定常数2,将确定的常数2代入变迁处理指令群391中包含的式2中。

秘密保持程序生成部403接着执行,直到更新处理指令群382的处理为止。之后,秘密保持程序生成部403在变迁处理指令群392的执行时,使用由输入部400接收到的秘密信息‘300’,确定常数3,将确定的常数3代入变迁处理指令群392中包含的式2中。

由此,秘密保持程序生成部403可生成确定了变迁处理指令群390~392中包含的各常数的秘密保持程序300。

秘密保持程序生成部403通过配置选择处理指令群调用指令370~372、更新处理指令群380~382、变迁处理指令群390~392,确定各常数,并代入对应的变迁处理指令群的式2中,从而可将各指令群插入适当的配置位置上。

秘密保持程序生成部403根据由输入部400接收到的位置信息,将秘密信息变换为秘密信息用变量。由此,可将生成的秘密保持程序变为使用事先变换了应隐匿的秘密信息的秘密变量的处理。

2.4.5程序难破解化装置30的动作

这里,用图14所示的流程图来说明程序难破解化装置30的动作。

程序难破解化装置30的输入部400在由正常系统执行难破解化对象程序与秘密保持程序300时,接收提供给秘密保持程序的3个初始值(这里为‘1’、‘2’、‘3’)和表示秘密信息的位置的位置信息(这里为表示3个秘密信息‘100’、‘200’、‘300’的位置的信息)(步骤S400)。

功能提供指令群生成部401将由输入部400接收到的难破解化对象程序分割成由1个以上程序指令构成的多个块,生成多个功能提供指令群(这里为功能提供指令群360~362)(步骤S405)。

变迁处理指令群生成部402生成包含常数未确定的式2的变迁处理指令群,生成的个数为步骤S405生成的功能提供指令群的个数(步骤S410)。这里,变迁处理指令群生成部402生成包含常数未确定的式2的变迁处理指令群390~392。

秘密保持程序生成部403生成预处理指令群310(步骤S415)。

秘密保持程序生成部403生成选择处理指令群320(步骤S420)。

秘密保持程序生成部403生成数量与所生成的功能提供指令群的数量相同的选择处理指令群调用指令370~372(步骤S425)。

秘密保持程序生成部403生成数量与所生成的功能提供指令群的数量相同的更新处理指令群380~382(步骤S430)。

秘密保持程序生成部403生成选择对象数据350~356(步骤S435)。

秘密保持程序生成部403确定生成的预处理指令群310、选择处理指令群320、功能提供指令群360~362、选择处理指令群调用指令370~372、更新处理指令群380~382、变迁处理指令群390~392和选择对象数据350~356的配置,生成秘密保持程序300a(步骤S440)。

秘密保持程序生成部403使用步骤S400接收到的3个初始值、3个秘密信息与秘密保持程序300a,确定未确定的各常数,将各秘密信息变换为秘密信息用变量,生成秘密保持程序300(步骤S445)。

2.5变形例

根据上述第2实施方式说明了本发明,但本发明当然不限于上述实施方式。下面的情况也包含于本发明中。

(1)在上述第2实施方式中,使用式2作为算出秘密信息的算出式,但不限于此。算出秘密信息的算出式即便是使用选择参数用变量的其它公式也无妨。

(2)在上述第2实施方式中,与第1实施方式一样,使用式1作为算出选择识别符的算出式,但不限于此。算出选择识别符的算出式即便是使用选择参数用变量的其它公式也无妨。

另外,即便是对选择识别符用变量设定初始值、使用选择识别符用变量的公式也无妨。另外,即便是对选择处理指令群设定计数调用选择处理指令群的次数的计数器用变量、还使用计数器用变量的公式也无妨。

另外,计数器用变量也可在选择处理指令群以外执行提高计数器值的处理。

(3)在上述第2实施方式中,将功能提供指令群的数量设为3个,但不限于此。功能提供指令群的数量是几个均无妨。

(4)在上述第2实施方式中,将选择参数的数量设为3个,但不限于此。选择参数的数量只要是多个即可。

此时的式2变为‘p1×(第1选择参数用变量)+p2×(第2选择参数用变量)+...+pn×(第n选择参数用变量)+常数值’(n为2以上的整数)。p1、p2、...、pn是互质的素数。另外,当更新选择参数时,将存储在第i-1参数中的值存储在第i参数中。此时,按第n参数、第n-1参数、...、第2参数的顺序存储。另外,在第1参数中,存储从对应于选择识别符的选择对象数据中读出的值。这里,i是2以上n以下的整数。

另外,将输入值的初始值设为‘1’、‘2’、‘3’,但也可不是该值。

另外,将输入值等设为32比特的值,但也可以是比32比特短的比特数,或是比32比特长的比特数。

(5)在上述第2实施方式中,选择信息参数的初始值,也可以是由预处理部等使用秘密保持程序以外的程序或执行程序的设备所具有的功能、来确定作为赋予秘密保持程序的值的构成的值。

(6)在秘密保持程序具有秘密信息的情况下,也可置换为使用选择参数用变量、选择识别符用变量算出秘密信息的值的处理。

(7)在上述第2实施方式的程序难破解化装置30中,选择对象数据的数量或选择参数的数量未必是固定值,也可以是其它值。

另外,也可将这些值作为输入赋予程序难破解化装置。

(8)在上述第2实施方式中,作为块的分割的分割方法,这里说明简单的方法,但不限于该方法,只要执行对应于块分割方式的控制构造的解析,生成对应于块分割方式的功能提供指令群即可。控制构造的解析在编译器领域是公知的,所以省略说明。

(9)在上述第2实施方式中,程序难破解化装置30在确定式2中的各常数之后,将秘密信息变换为秘密信息用变量,但不限于此。程序难破解化装置30也可在生成多个功能提供指令群时,将秘密信息变换为秘密信息用变量。即,程序难破解化装置30也可在确定式2中的各常数之前,将秘密信息变换为秘密信息用变量。此时,程序难破解化装置30暂时存储各秘密信息,当确定式2中的各常数时,使用暂时存储的秘密信息。

(10)也可分别组合上述实施方式及上述变形例。

2.6汇总

在上述第2实施方式中,选择对象的执行顺序由选择参数的初始值确定,所以对于仅看到程序而不知道选择参数的初始值的非法解析者而言,难以解析选择对象数据的执行顺序。

另外,在第2实施方式中,在更新处理指令群中存在更新选择参数的处理。从而,即便非法解析者知道秘密保持程序与赋予秘密保持程序的输入值,若未顺序解析选择参数的值如何变化,则不能解析实际执行选择对象的顺序。

3.第3实施方式

下面,参照附图说明作为本发明第3实施方式的秘密保持程序500、程序难破解化装置50和秘密处理装置60。

在非专利文献2和第1实施方式的难破解化方法中,在正确的步骤下仅能1次1个地执行各块。当非法解析者知道该情况时,可执行有效的解析。

例如,在第1实施方式中,不知道程序的正确初始值组合的非法解析者在将初始值的组合假设为‘0’、‘0’、‘0’的情况下,秘密保持程序100首先当执行式1时取得选择识别符‘0’,并分支到选择对象数据143。之后,通过执行更新处理指令群163,各选择参数的值分别变为‘1’、‘0’、‘0’。秘密保持程序100再使用更新后的值‘1’、‘0’、‘0’,当执行式1时取得选择识别符‘2’,并分支到选择对象数据142。之后,通过执行更新处理指令群162,各选择参数的值分别变为‘6’、‘1’、‘0’。秘密保持程序100再使用更新后的值‘6’、‘1’、‘0’,当执行式1时取得选择识别符‘1’,将各选择参数更新为‘3’、‘6’、‘1’。秘密保持程序100使用值‘3’、‘6’、‘1’,当执行式1时取得选择识别符‘1’。这要执行2次选择对象数据141。

并且,若非法解析者知道相同块不重复执行,则可知道将此时选择对象数据141重复执行的初始值的组合假设为‘0’、‘0’、‘0’的执行步骤是错误的。这种情况下,非法解析者将知道该假设错误,不再继续解析之后的块并制作出水印去除工具,可有效解析。

因此,在本实施方式中,提供一种秘密保持系统3,无论使用什么样的初始值的组合,相同的块都不重复执行。

3.1秘密保持系统3的概要

秘密保持系统3如图15所示,由程序难破解化装置50、和秘密处理装置60构成。

程序难破解化装置50根据想隐匿执行顺序的难破解化对象程序,生成秘密保持程序500,将生成的秘密保持程序500分配给秘密处理装置60。

秘密处理装置60执行从程序难破解化装置50分配的秘密保持程序500。

3.2秘密保持程序500的构造

说明秘密保持程序500的构造。秘密保持程序500是被难破解化成非法解析者不能解析程序中包含的程序指令群按什么样的执行顺序执行的程序。

秘密保持程序500如图16所示,由预处理指令群510、选择处理指令群520、管理信息更新指令群525、变迁处理指令群530、选择对象数据540、541、...、546构成,它们按图16所示的顺序配置。

选择对象数据540~546分别由选择对象主要指令群550~556、更新处理指令群560~566、分支指令群570~576构成,它们按图16所示的顺序配置。各指令部是由1个以上程序指令构成的程序指令群。选择对象主要指令群550~556是表示该程序提供的功能(例如水印检测功能)的处理的一部分的程序指令群,或是与提供的功能无关、在正常系统执行时不执行的指令群。这里,所谓正常系统是指不执行使用调试工具等强制变更程序计数器或选择参数等特别操作来执行秘密保持程序500的情况。

难破解对象程序例如是执行图17所示的控制流程的程序的程序。这里,图17中的第1功能提供指令群601、第2功能提供指令群602、第3功能提供指令群603是程序指令的集合,是在按图17所示的流程执行的情况下输出适当结果的指令群。但是,由于若按该顺序不变地对其加以执行,则容易解析,所以秘密保持程序500中实施难以解析该执行顺序的难破解化。即,秘密保持程序500被难破解化,以使得在多个选择对象数据540~546之一中包含第1功能提供指令群601、第2功能提供指令群602、第3功能提供指令群603。

这里,设选择对象数据545、546、543中分别包含第1功能提供指令群601、第2功能提供指令群602、第3功能提供指令群603,当正常系统执行时,作为依次选择并执行选择对象数据545、546、543,继续说明。另外,未分配第1~第3功能提供指令群的选择对象数据540、541、542、544是正常系统未执行的选择对象数据。这些数据是有时在不知道正常执行顺序的非法解析者利用穷举攻击进行解析时执行的选择对象数据,为了非法解析者难以得到第1~第3功能提供指令群而组装。下面,将这种指令群称为伪功能提供指令群。

这里,图18中示出秘密保持程序500的控制流程的一例。秘密保持程序500如该控制流程所示,首先依次执行预处理指令群510、选择处理指令群520、管理信息更新指令群525、变迁处理指令群530,之后,根据变迁处理指令群530,执行选择对象数据540~546之一。秘密保持程序500重复该处理,直到执行选择对象数据543为止。秘密保持程序500构造成即便知道变迁处理指令群130执行哪个分支,也不知道执行选择对象数据的顺序。

这里,图19示出用C语言记述的秘密保持程序500a,作为秘密保持程序500的具体例。

程序指令群510a对应于预处理指令群510,程序指令群520a对应于选择处理指令群520,程序指令群525a对应于管理信息更新指令群525,程序指令群530a对应于变迁处理指令群530。另外,程序指令群540a、543a、545a、546a分别对应于选择对象数据540、543、545、546。

程序指令群550a、553a、555a、556a分别对应于选择对象主要指令群550、553、555、556。程序指令群560a、563a、565a、566a分别对应于更新处理指令群560、563、565、566。程序指令群570a、573a、575a、576a分别对应于分支指令群570、573、574、576。另外,对应于选择对象数据541、542、544的具体例为了附图方便未被记述。

另外,图20中具体示出图19所示的程序的处理流程。

秘密保持程序500是如下程序指令群,即:从调用源程序接收输入值in_1、in_2、和执行该程序提供的功能的处理时使用的参数,执行该程序提供的功能的预处理的程序指令群。这里,设输入值in_1和in_2是选择处理指令群520的处理中使用的选择参数CP_1和CP_2的初始值。在本实施方式中,由于选择对象数据的数量为7个,所以说明为in_1和in_2是不足7的非负整数。

这里,设秘密保持程序500使用‘cp_1’、‘cp_2’作为表示选择参数CP_1和CP_2的变量,使用‘sv’,作为表示选择识别符swVar的变量。选择参数是在从选择对象数据540、541、...、546中确定1个选择对象时使用的参数,选择识别符是唯一识别选择对象数据的识别符,是确定接着应执行的选择对象数据的信息。

下面,说明图18的各块与图20的各块之间的对应关系。

图20中,图18的预处理指令群510相当于块650中记载的‘cp_1=1;cp_2=2;tb[7]=0;’。选择处理指令群520相当于块651中记载的‘label A:sv=(cp_1+cp_2*2)%7;while(tb[sv]==1){sv=(++sv)%7;}’。另外,管理信息更新指令群525相当于块652中记载的‘tb[sv]=1;’,变迁处理指令群530相当于块653中记载的‘switch(sv)’,选择对象数据540~546相当于选择对象数据660~666。

图16所示的更新处理指令群560~566相当于选择对象数据660~666中包含的各自的‘cp_1=cp2;cp2_sv;’。另外,第1~第3功能提供指令群分别相当于‘a=b=2;’、‘a*b;’、‘a--;’,分别包含于选择对象数据665、666、663中。因此,伪功能提供指令群是选择对象数据660、661、662、664中包含的‘a=1,a=2;’‘a*=b;b+=a;’‘b--;’‘a=b/a’。

另外,分支指令群570~572和574~576相当于‘goto label A;’,分支指令群573相当于‘return;’。

下面,详细说明各个指令群的具体动作。

3.2.1预处理指令群510

预处理指令群510是算出选择处理指令群520中使用的选择参数群的初始值的程序指令群。

预处理指令群510是启动秘密保持程序500时最初执行的程序指令群。

预处理指令群510具体而言是由从调用源程序接收输入值in_1、in_2、将接收到的值作为选择参数群的初始值存储在选择参数CP_1~CP_2中的指令群、和数量与选择对象数据的个数相同的管理信息的初始化指令构成的程序指令群。这里,管理信息分别对应于选择对象数据,管理是否执行对应的选择对象数据。

这里,预处理指令群510执行将in_1、in_2的值分别存储在选择参数CP_1~CP_2中的处理。另外,设当正常系统执行时,赋予值‘1’、‘2’,作为输入值in_1、in_2。

预处理指令群510,作为管理信息的初始化,对秘密处理装置60所具有的管理信息进行初始化。这里,管理信息由6个阵列构成,预处理指令群510通过将表示未执行的‘0’代入这些全部的值中,执行管理信息的初始化。

这里,预处理指令群5 10相当于图20的块650中记载的‘cp_1=in_1;cp_2=in_2;tb[7]=0;’。

3.2.2选择处理指令群520

选择处理指令群520是使用选择参数群来算出选择识别符的程序指令群。

下面,说明选择处理指令群520算出选择识别符的处理。在下面的说明中,用NN等记号来表示选择对象数据的个数。

首先,选择处理指令群520利用使用了值NN、和作为与值NN互质的素数的p1和p2的式3‘p1×(选择参数CP_1)+p2×(选择参数CP_2)mod NN’,算出临时的选择识别符。这里,运算符‘×’表示乘法。另外,p1与NN互质表示p1与NN的最大公约数为1。这里,设p1、p2和NN分别为‘1’、‘2’、和‘7’。

接着,选择处理指令群520将式3的结果作为临时的选择识别符swVar,存储在选择识别符用变量sv中。接着,选择处理指令群520判断sv表示的选择对象数据是否已执行。

在判断为sv表示的选择对象数据为未执行的情况下,选择处理指令群520不变更sv的值,将选择识别符的值确定为当前的sv的值。

在判断为sv表示的选择对象数据已执行的情况下,选择处理指令群520检索在算出的值之后、最近的未执行的选择对象数据。这里,在算出的值之后的全部选择对象数据均已执行的情况下,选择处理指令群520从最初的选择对象数据开始顺序检索未执行的选择对象数据。

选择处理指令群520将通过检索发现的选择对象数据的序号存储在选择识别符用变量sv中。通过执行这种处理,即便在对应于算出值的选择对象数据已被执行的情况下,也始终选择未执行的选择对象数据,与是否是正常系统的执行时无关,执行始终不同的对象数据。

这里,选择处理指令群520相当于图20的块651中记载的‘sv=(cp_1+cp_2*2)%7;while(tb[sv]==1){sv=(++sv)%7}’。

3.2.3管理信息更新指令群525

管理信息更新指令群525是将对应于由选择处理指令群520选择的选择对象数据的管理信息,更新为表示‘已执行’的状态的程序指令群。具体而言,相当于图20的块652中记载的‘tb[sv]=1;’。

例如,在选择处理指令群520的动作结果是、选择识别符用变量sv的值变为‘5’的情况下,管理信息更新指令群525将对应于选择对象数据545的管理信息tb[5]的值从表示未执行的‘0’更新为表示已执行的‘1’。

3.2.4变迁处理指令群530

变迁处理指令群530是根据选择处理指令群520选择的选择识别符、执行分支到任一选择对象数据540~546的处理的程序指令群。具体而言,在选择识别符用变量sv的值为0、1、...、6的情况下,分别是分支到选择对象数据540、541、...、546的程序指令群。

作为具体例,在记述秘密保持程序500的程序是C语言程序,在选择对象数据540、541、...、546的开头分别记述标签‘label_140:’、‘label_141:’、...、‘label_146:’的情况下,变迁处理指令群530变为下面的程序指令。

switch(sv){

case 0:goto label_140;

case 1:goto label_141;

......

case 6:goto label_146;

}

3.2.5选择对象数据540~546

选择对象数据540~546是当由变迁处理指令群530分支来时、执行的程序指令群。

选择对象数据540~546分别是由选择对象主要指令群550~556、更新处理指令群560~566、分支指令群570~576构成的程序指令群。

选择对象主要指令群550~556是表示各选择对象数据中应执行的处理的程序指令群。具体而言,例如选择对象数据660中记载的‘a=1;b=2;’与之相当。

更新处理指令群560~566是更新选择参数群中包含的各值的程序指令群。这里,作为一例,将存储在选择参数变量cp_2中的值代入选择参数变量cp_1,将选择识别符用变量sv的值代入选择参数变量cp_2。具体而言,图20中的选择对象数据660~666的每个中包含的‘cp_1=cp2;cp_2=sv;’与之相当。

分支指令群570~576分别是分支到位于选择对象数据540~546之外的选择处理指令群520的程序指令群、和将控制返回程序调用源的处理的程序指令群之一。

这里,包含应最后执行的第3功能提供指令群的选择对象数据543的分支指令群573,是将控制返回程序调用源的处理的程序指令群,其它选择对象数据中包含的分支指令群,是分支到选择处理指令群120的程序指令群。具体而言,图20的选择对象数据660~666的每个中包含的‘goto label A;’或‘return’相当于此。

3.3秘密处理装置60

这里,描述执行秘密保持程序500的秘密处理装置60。

秘密处理装置60如图21所示,由控制部700与存储部701构成。

秘密处理装置60具体而言,是由微处理器、ROM、RAM、硬盘单元、显示器单元、键盘、鼠标等构成的计算机系统。在所述RAM或所述硬盘单元中存储计算机程序。这里,计算机程序为了实现规定的功能,组合多个表示对计算机的指令的指令代码来构成。通过所述微处理器根据所述计算机程序动作,秘密处理装置60实现其功能。即,所述微处理器1个个地读出所述计算机程序中包含的各指令,解读读出的指令,根据解读结果进行动作。

3.3.1存储部701

存储部701如图21所示,具有第1程序存储部702、第2程序存储部703、管理信息保持部704和选择参数群保持部705。

(1)第1程序存储部702

第1程序存储部702存储秘密保持程序中包含的多个选择对象数据。这里,选择对象数据是表示使用秘密信息的处理的步骤的信息,具体而言是程序指令的集合等。这些选择对象数据对应于来自控制部700的指示选择之一,由秘密处理装置60执行所选择的选择对象数据所示的步骤。另外,选择对象数据是分割了使用秘密信息的运算的正确步骤之后的数据,或包含使用了正常系统不执行的伪秘密信息的运算的数据。

这里,设第1程序存储部702中存储选择对象数据540、541、...、546共计7个数据,但当然该数量不限于7个。

(2)第2程序存储部703

第2程序存储部703存储秘密保持程序中包含的多个选择对象数据以外的程序指令。

具体而言,第2程序存储部703存储秘密保持程序500中包含的预处理指令群510、选择处理指令群520、管理信息更新指令群525、变迁处理指令群530。

(3)管理信息保持部704

管理信息保持部704对各选择对象数据的每个,保持管理信息,该管理信息管理着选择对象数据的执行和未执行的信息。

管理信息保持部704如图22所示,具有管理信息表格T700。

管理信息表格T700具有由选择对象数据的个数构成、存储对应于选择对象数据的每个的管理信息的区域。

管理信息表格T700中包含的管理信息710~716的每个,顺序对应于选择对象数据540~546。

管理信息710~716中存储的初始值是表示未执行的值‘0’。

若选择对象数据被控制部700选择,则对应的管理信息被控制部700从值‘0’更新为表示已执行的值‘1’。

(4)选择参数群保持部705

选择参数群保持部705保持由选择参数CP_1、CP_2构成的选择参数群。

3.3.2控制部700

控制部700控制秘密处理装置60整体的动作,并执行,以使得使用秘密信息的处理(秘密保持程序)难以解析。

控制部700如图23所示,具有整体处理部720、预处理部721、选择处理部722、管理信息更新部723、变迁处理部724、和更新处理部725。

控制部700也可不具备这些构成要素作为单独的构成,控制部700随时实现这些构成要素每个的功能。

(1)预处理部721

预处理部721当启动秘密保持程序时最初动作。

预处理部721经整体处理部720,从第2程序存储部703读出预处理指令群中包含的1个以上的程序指令,根据秘密保持程序的构造,依次执行读出的1个以上程序指令。

具体而言,预处理部721首先取得来自调用源程序的输入值in_1、in_2,作为选择参数CP_1和CP_2的初始值,将取得的选择参数CP_1和CP_2经整体处理部720存储到选择参数群保持部705。接着,预处理部721执行管理信息保持部704的初始化。即,将管理信息表格T700中包含的各管理信息的值设定为‘0’。

(2)选择处理部722

选择处理部722使用选择参数,确定选择识别符swVar。

选择处理部722经整体处理部720,从第2程序存储部703中读出选择处理指令群中包含的以上程序指令,并根据秘密保持程序的构造,依次执行读出的1个以上程序指令。

具体而言,选择处理部722使用存储在选择参数群保持部705中的选择参数CP_1和CP_2、与选择处理指令群中包含的式3,算出临时的选择识别符。选择处理部722使用管理信息表格T700,判定对应于算出的临时的选择识别符的选择对象数据是否已执行。

在判定为已执行的情况下,选择处理部722取得表示未执行的选择对象数据的识别符,将取得的值设为选择识别符swVar。

在判定为未执行的情况下,选择处理部722将算出的临时的选择识别符设为选择识别符swVar。

通过执行上述处理,选择处理部722可始终取得对应于未执行的选择对象数据的值,作为选择识别符swVar。即,由于无论选择参数的初始值是何值均不重复执行相同的选择对象数据,所以非法解析者难以解析。

(3)管理信息更新部723

管理信息更新部723更新对应于选择处理部722选择的选择对象数据的管理信息。

管理信息更新部723经整体处理部720,从第2程序存储部703读出管理信息指令群中包含的以上程序指令,并根据秘密保持程序的构造,依次执行读出的1个以上程序指令。

具体而言,管理信息更新部723将管理信息表格T700中包含的多个管理信息中、对应于选择处理部722取得的选择识别符swVar的管理信息,从值‘0’更新为值‘1’。

例如在图22中,在选择处理部722将选择识别符swVar的值设为‘5’的情况下,管理信息更新部723将对应于选择对象数据545的管理信息715的值更新为‘1’。

(4)变迁处理部724

变迁处理部724根据选择处理部722选择的选择识别符swVar,确定多个选择对象数据中、分支目的地的选择对象数据,执行确定的选择对象数据中包含的选择对象主要指令群。

变迁处理部724经整体处理部720,从第2程序存储部703读出变迁处理指令群中包含的以上程序指令,并根据秘密保持程序的构造,依次执行读出的程序指令。

具体而言,变迁处理部724根据选择处理部722选择的选择识别符swVar,确定多个选择对象数据中分支目的地的选择对象数据。

变迁处理部724经整体处理部720,读出确定的选择对象数据中包含的选择对象主要指令群,并执行读出的选择对象主要指令群。

(5)更新处理部725

更新处理部725在执行选择到的选择对象数据中包含的选择对象主要指令群之后,执行更新选择参数的值的处理。

更新处理部725经整体处理部720从第1程序存储部702读出所选择的选择对象数据中包含的更新处理指令群,并执行读出的更新处理指令群。

具体而言,更新处理部725使用选择参数保持部705中存储的选择参数CP_1和CP_2、与选择识别符,更新选择参数CP_1和CP_2。更新方法如上所述,所以这里省略说明。

(6)整体处理部720

整体处理部720控制包含于控制部700中的各构成部的动作。

整体处理部720在秘密保持程序开始执行时,控制成按预处理部721、选择处理部722、管理信息更新部723、变迁处理部724、更新处理部725的顺序动作。

整体处理部720根据选择对象数据中包含的分支指令群,执行秘密保持程序的结束控制和控制成按选择处理部722、管理信息更新部723、变迁处理部724、更新处理部725的顺序进行动作的控制之一。

具体而言,整体处理部720经整体处理部720从第1程序存储部702读出选择的选择对象数据中包含的分支指令群。

整体处理部720在读出的分支指令群是表示向选择处理指令群的分支的程序指令群的情况下,控制成按选择处理部722、管理信息更新部723、变迁处理部724、更新处理部725的顺序动作。

整体处理部720在读出的分支指令群是将控制返回程序调用源的处理的程序指令群的情况下,整体处理部720结束秘密保持程序,将控制返回秘密保持程序的调用源。

3.3.3秘密处理装置60的动作

这里,用图24所示的流程图来说明秘密处理装置60的动作。

秘密处理装置60的预处理部721取得来自调用源程序或外部装置等的输入值in_1、in_2,作为选择参数CP_1和CP_2的初始值,经整体处理部720将取得的选择参数CP_1和CP_2存储到选择参数群保持部705,对管理信息保持部704的管理信息表格T700进行初始化(步骤S500)。

预处理部721在必要时在存储部701上确保第1程序存储部702、第2程序存储部703、管理信息保持部704、选择参数群保持部705所用的区域,初始化各区域中存储的值。

选择处理部722使用选择参数群保持部705中存储的选择参数CP_1和CP_2、与选择处理指令群中包含的式3,算出临时的选择识别符(步骤S505)。

选择处理部722使用管理信息表格T700,判定对应于算出的临时的选择识别符的选择对象数据是否已执行(步骤S510)。

在判定为已执行的情况下(步骤S510为‘是’),选择处理部722更新临时的选择识别符(步骤S515)。这里,步骤S510和S515的具体例是图20中的块651中包含的‘while(tb[sv]==1){sv=(++sv)%7;}’等。在该例中,只要tb[sv]的值为1(表示已执行),则通过将sv递增,搜索相当于未执行的选择对象数据的选择识别符。

在判定为未执行的情况下(步骤S510为‘否’),选择处理部722将算出的临时的选择识别符设为选择识别符swVar。管理信息更新部723将管理信息表格T700中包含的多个管理信息中、对应于选择识别符swVar的管理信息,从值‘0’更新为值‘1’(步骤S520)。

变迁处理部724根据选择识别符swVar,取得多个选择对象数据中、分支目的地的选择对象数据,执行取得的选择对象数据中包含的选择对象主要指令群(步骤S525)。

更新处理部725使用选择参数群保持部705中存储的选择参数CP_1和CP_2、与选择识别符,执行选择参数CP_1和CP_2的更新(步骤S530)。

整体处理部720判断选择的选择对象数据中包含的分支指令群是否表示程序结束(步骤S535)。

在判断为分支指令群表示程序结束的情况下(步骤S535为‘是’),整体处理部720结束秘密保持程序,将控制返回秘密保持程序的调用源。

在判断为分支指令群不表示程序结束的情况下(步骤S535为‘否’),即判断为分支指令群表示向选择处理指令群的分支的情况下,整体处理部720返回步骤S505。

步骤S535具体而言,在选择的选择对象数据中包含的分支指令群是分支到选择处理指令群的指令群(例如goto语句)的情况下,将判断结果设为‘否’,在分支指令群是表示程序结束的指令群(例如return语句)的情况下,将判断结果设为‘是’。

3.4程序难破解化装置50

这里,描述根据想隐匿执行顺序的难破解化对象程序生成秘密保持程序500的程序难破解化装置50。

程序难破解化装置50如图25所示,由程序存储部800、输入部801、功能提供指令群生成部802、伪功能提供指令群生成部803、配置顺序确定部804、管理指令群生成部805、秘密保持程序生成部806和输出部807构成。

程序难破解化装置50具体而言,是由微处理器、ROM、RAM、硬盘单元、显示器单元、键盘、鼠标等构成的计算机系统。在所述RAM或所述硬盘单元中存储计算机程序。这里,计算机程序为了实现规定的功能,组合多个表示对计算机的指令的指令代码来构成。通过所述微处理器根据所述计算机程序动作,程序难破解化装置50实现其功能。即,所述微处理器1个个地读出所述计算机程序中包含的各指令,解读读出的指令,根据解读结果进行动作。

3.4.1程序存储部800

程序存储部800具有存储该装置生成的各指令群和选择对象数据用的区域。

3.4.2输入部801

输入部801接收赋予构成难破解化对象的程序、和生成的秘密保持程序的2个初始值。

3.4.3功能提供指令群生成部802

功能提供指令群生成部802将由输入部801接收的难破解化对象程序分割成由1个以上程序指令构成的多个块。功能提供指令群生成部802将分割后的各块设为功能提供指令群。由此,功能提供指令群生成部802可根据由输入部801接收的难破解化对象程序来生成多个功能提供指令群。

功能提供指令群生成部802在分割成多个块时,在难破解化对象程序中包含执行有条件跳跃的程序指令的情况下,功能提供指令群生成部802进行分割,以使执行该有条件跳跃的程序指令与多个某跳跃目的地的程序指令全部包含于相同块中。通过如此分割,功能提供指令群生成部802必然可将来自1个块的分支目的地变为1个块。

在输入程序中存在执行无条件跳跃的程序指令的情况下,功能提供指令群生成部802进行分割,使执行该无条件跳跃的程序指令与跳跃目的地的程序指令变为相同块。通过如此分割,功能提供指令群生成部802必然可将对于1个块的分支源变为1个块。

这里,所谓‘执行有条件跳跃的指令’是根据规定条件跳跃程序指令的指令,具体而言,在是‘if(a==0)goto labelA;’等的情况下,当满足变量a为零的条件时,向labelA执行程序指令的跳跃。另外,所谓‘执行无条件跳跃的指令’是始终跳跃程序指令的指令,具体而言,是‘goto labelA;’等。此时,与变量的值等无关,始终执行向labelA的跳跃。

这里,设功能提供指令群生成部802分割成3个功能提供指令群。此时的控制流程图与图17一样。即,如上所述分割成跳跃指令的跳跃源与跳跃目的地包含于1个块中,所以生成的块的控制流程图构成无分支的控制流程。这里,从构成控制流程起点的块开始,将构成各块的程序指令群顺序设为第1、第2和第3功能提供指令群。

3.4.4伪功能提供指令群生成部803

伪功能提供指令群生成部803根据由输入部801接收的难破解化对象程序,生成多个伪功能提供指令群。

伪功能提供指令群生成部803例如生成随机组合了记述难破解化对象程序的编程语言的程序指令的伪功能提供指令群。

既可仅使用难破解化对象程序中包含的程序指令,随机或手动地生成伪功能提供指令群,也可适当生成输入程序内没有的指令。另外,编程语言是C语言、Java(注册商标)语言等执行编译处理的编程语言的情况下,如编译那样使用输入程序中使用的变量,生成伪功能提供指令群。或者,在输入程序中未使用的变量包含于伪功能提供指令群中的情况下,通过向难破解化后的程序追加这种变量的说明,使编译不失败。

这里,接着说明伪功能提供指令群生成部803生成4个伪功能提供指令群。

3.4.5管理指令群生成部805

管理指令群生成部805生成不依赖于秘密保持程序500中难破解化对象程序的程序指令群。即,若以图16的秘密保持程序500为例,则由于依赖于难破解化对象程序而变化的是,分割难破解化对象程序步骤之后的、作为选择对象主指令群的150~156,所以管理指令群生成部805生成其它指令群。

具体而言,管理指令群生成部805生成预处理指令群510、选择处理指令群520、管理信息更新指令群525、变迁处理指令群530、1个更新处理指令群、由分支目的地表示选择处理指令群的程序指令群构成的第1分支指令群、和由将控制返回到程序调用源的处理的程序指令群构成的第2分支指令群。

此时,管理指令群生成部805取得功能提供指令群生成部802生成的多个功能提供指令群的个数(这里为3个)、和伪功能提供指令群生成部803生成的多个伪功能提供指令群的个数(这里为4个),并算出其合计值。管理指令群生成部805生成数量与算出的合计值(这里为7个)相同的标签名。管理指令群生成部805通过对选择处理指令群520中包含的式3可取的值的每个、将生成的标签名建立对应,作为分支目的地,生成变迁处理指令群530。

管理指令群生成部805生成仅由生成的各标签名构成的选择对象数据。这里,管理指令群生成部805生成7个选择对象数据540~546。

这里,管理指令群生成部805将生成的预处理指令群510、选择处理指令群520、管理信息更新指令群525、变迁处理指令群530、1个更新处理指令群、第1分支指令群、和第2分支指令群存储到程序存储部800中。

另外,管理指令群生成部805将仅由生成的各标签名构成的选择对象数据540~546也存储到程序存储部800中。

3.4.6配置顺序确定部804

配置顺序确定部804确定按何顺序将生成的功能提供指令群(这里为3个功能提供指令群)和伪功能提供指令群(这里为4个伪功能提供指令群)分配给选择对象主要指令群550~556。具体而言,配置顺序确定部804确定将第1~第3功能提供指令群配置给选择对象主要指令群550~556的某个,并确定将伪功能提供指令群配置给剩余的4个选择对象主要指令群的某个。

配置顺序确定部804事先存储上述式3。这里,将式3中的p1、p2和NN分别设为‘1’、‘2’和‘7’。

这里,设由后述的管理指令群生成部805生成由标签名构成的选择对象主要指令群550~556。

配置顺序确定部804使用由输入部801接收的2个选择参数的初始值与事先存储的式3,确认实际上按何顺序算出选择识别符,由此确定应配置功能提供指令群和伪功能提供指令群的选择对象主要指令群。

设输入部801接收选择参数CP_1(=1)、CP_2(=2),作为2个初始值。下面,说明配置的确定方法的一例。

配置顺序确定部804如图26所示,具备控制部850、选择处理部851、管理信息更新部852、更新处理部853和管理信息保持部854。下面,说明配置顺序确定部804的各构成要素的细节。

(1)管理信息保持部854

管理信息保持部854具有管理信息表格T800。管理信息表格T800的数据构造与管理信息保持部704具有的管理信息表格T700的数据构造一样,所以这里省略说明。

这里,管理信息表格T800中存储的值‘1’表示将功能提供指令群配置在对应的选择对象数据中,值‘0’表示不将功能提供指令群配置在对应的选择对象数据中。

另外,管理信息表格T800的各管理信息的初始值为‘0’。

由此,可存储配置功能提供指令群的位置(已配置的选择对象数据)。

(2)控制部850

控制部850具有存储选择参数群的参数存储区域。

控制部850将输入部801接收到的选择参数的初始值CP_1和CP_2(这里分别为‘1’、‘2’)存储在参数存储区域中。

控制部850控制选择处理部851、管理信息更新部852和更新处理部853的动作。

控制部850执行后述的选择处理部851具有的式3可取的值、即式3可取的选择识别符的值的每个,与程序存储部800存储的选择对象数据之间的对应。

控制部850从功能提供指令群生成部802取得生成的第i个功能提供指令群。控制部850根据选择处理部851取得的选择识别符,将取得的第i个功能提供指令群插入程序存储部800存储的对应的选择对象数据中。这里,i是1以上m以下的整数。另外,控制部850暂时存储第i个功能提供指令群与插入目的地的选择对象数据之间的对应关系。

控制部850从伪功能提供指令群生成部803取得生成的多个伪功能提供指令群中、未插入选择对象数据中的1个伪功能提供指令群。控制部850将取得的伪功能提供指令群插入未插入第i功能提供指令群或伪功能提供指令群的1个选择对象数据中。控制部850对全部伪功能提供指令群执行该动作。

由此,控制部850可在各选择对象数据中插入第i功能提供指令群或伪功能提供指令群。

通过控制部850取得第i个功能提供指令群的动作,可选择构成配置目的地的功能提供指令群。

(3)选择处理部851

选择处理部851事先存储上述式3。

选择处理部851取得存储在参数存储区域中的选择参数CP_1、和CP_2。

选择处理部851使用取得的CP_1、和CP_2、与事先存储的式3,算出临时的选择识别符。选择处理部851使用管理信息表格T800,判定对应于算出的临时的选择识别符的选择对象数据是否已配置。

在判定为已配置的情况下,选择处理部851取得表示未配置的选择对象数据的识别符,将取得的值设为选择识别符swVar。

在判定为未配置的情况下,选择处理部851将算出的临时的选择识别符设为选择识别符swVar。

通过选择处理部851的动作、以及控制部850进行的根据选择处理部851取得的选择识别符而将第i个功能提供指令群插入选择对象数据中的动作,可将功能提供指令群配置到适当的配置目的地。

(4)管理信息更新部852

管理信息更新部852将管理信息表格T800中包含的多个管理信息中、对应于选择处理部851取得的选择识别符swVar的管理信息从值‘0’更新为值‘1’。

(5)更新处理部853

更新处理部853使用参数存储区域中存储的选择参数群、和选择处理部851取得的选择识别符,更新选择参数CP_1和CP_2。更新方法如上所述,所以这里省略说明。

更新处理部853将更新后的选择参数群盖写到控制部850的参数存储区域上。

3.4.7秘密保持程序生成部806

秘密保持程序生成部806插入程序存储部800存储的更新处理指令群,以使得其对于选择对象数据的每个,位于选择对象主要指令群之后。由此,秘密保持程序生成部806可对选择对象数据的每个生成更新处理指令群560~566。通过管理指令群生成部805的更新处理指令群的生成动作、和秘密保持程序生成部806的上述动作,可将更新处理指令群560~566插入到适当的配置目的地。

秘密保持程序生成部806对于插入了第m个功能提供指令群(即正常系统最后执行的功能提供指令群)的选择对象数据,插入管理指令群生成部805生成的第2分支指令群,使之位于更新处理指令群之后。此时,秘密保持程序生成部806在第m个功能提供指令群的最后包含将控制返回到程序调用源的处理的程序指令的情况下,删除该程序指令,或不插入第2分支指令群。

秘密保持程序生成部806对于其它选择对象数据,插入管理指令群生成部805生成的第1分支指令群,使之位于更新处理指令群之后。由此,秘密保持程序生成部806可生成选择对象数据540~546。

秘密保持程序生成部806配置程序存储部800存储的各指令群,生成秘密保持程序500。即,管理指令群生成部805按图16所示的顺序配置生成的各指令群。

3.4.8输出部807

输出部807将生成的秘密保持程序输出到秘密处理装置60。

3.4.9程序难破解化装置50的动作

(1)动作概要

这里,用图27所示的流程图来说明程序难破解化装置50的动作概要。

输入部801接收赋予构成难破解化对象的程序和所生成的秘密保持程序的2个初始值(步骤S600)。

功能提供指令群生成部802将由输入部801接收到的难破解化对象程序分割成由1个以上程序指令构成的多个块(步骤S605)。

伪功能提供指令群生成部803根据输入部801接收到的难破解化对象程序,生成多个伪功能提供指令群(步骤S610)。

管理指令群生成部805生成预处理指令群510、选择处理指令群520、管理信息更新指令群525、变迁处理指令群530、1个更新处理指令群、由分支目的地表示选择处理指令群的程序指令群构成的第1分支指令群、由将控制返回到程序调用源的处理的程序指令群构成的第2分支指令群、和仅由标签名构成的多个选择对象数据(步骤S615)。选择对象数据的个数,与功能提供指令群的个数及伪功能提供指令群的个数的合计值相同。

配置顺序确定部804使用选择参数群与事先存储的式3,确定功能提供指令群和伪功能提供指令群的配置目的地(步骤S620)。

秘密保持程序生成部806使用管理指令群生成部805生成的更新处理指令群,生成对应于选择对象数据的每个的更新处理指令群560~566。秘密保持程序生成部806使用第1和第2分支指令群,生成选择对象数据540~546。秘密保持程序生成部806配置生成的各指令群,生成秘密保持程序500(步骤S625)。

输出部807将生成的秘密保持程序输出到秘密处理装置60(步骤S630)。

(2)配置确定处理

这里,用图28所示的流程图来说明图27的步骤S620所示的配置确定处理的动作。

控制部850对计数器i设定‘1’,将选择参数群的初始值存储到参数存储区域中。控制部850执行选择识别符的值的每个与程序存储部800存储的选择对象数据之间的对应(步骤S700)。这里,计数器i表示当前着眼的功能提供指令群应第几个执行。即,这里,从第1功能提供指令群开始顺序确定配置顺序。

选择处理部851取得参数存储区域中存储的选择参数CP_1和CP_2。选择处理部851使用取得的CP_1和CP_2与事先存储的式3,算出临时的选择识别符(步骤S705)。例如在选择参数CP_1~CP_2的值为‘1’、‘2’的情况下,式3的值变为‘1×1+2×2 MOD 7=5’。

选择处理部851使用管理信息表格T800,判定对应于算出的临时的选择识别符的管理信息的值是否为‘1’(步骤S710)。

在判定为是‘1’的情况下(步骤S710为‘是’),选择处理部851更新临时的选择识别符(步骤S715),返回步骤S710。具体而言,选择处理部851在算出的临时的选择识别符为‘5’,对应于值‘5’的管理信息的值为‘1’的情况下,将临时的选择识别符‘5’之后最近的值‘6’设为临时的选择识别符。

在判定为不是‘1’的情况下(步骤S710为‘否’),选择处理部851将算出的临时的选择识别符设为选择识别符swVar,控制部850根据选择处理部851取得的选择识别符swVar,将第i个功能提供指令群插入对应的选择对象数据中(步骤S720)。例如在cont=1、选择识别符的值为‘5’的情况下,第1功能提供指令群被配置在选择对象数据545中。

管理信息更新部852将管理信息表格T800中包含的多个管理信息中、对应于选择处理部851取得的选择识别符swVar的管理信息从值‘0’更新为值‘1’(步骤S725)。例如,在选择识别符的值为‘5’的情况下,管理信息保持部854的管理信息表格T800中,对应于选择对象数据545的管理信息从未配置变为已配置。

更新处理部853使用参数存储区域存储的选择参数群与选择处理部851取得的选择识别符,更新选择参数CP_1和CP_2。更新处理部853将更新后的选择参数群盖写到控制部850的参数存储区域上(步骤S730)。例如,在选择参数的值为‘1’、‘2’、选择识别符的值为‘5’的情况下,选择参数的值变为‘2’、‘5’。

控制部850将计数器i加上值‘1’(步骤S735)。

控制部850判定计数器i是否比功能提供指令群的个数大(步骤S740)。

在判定为不大的情况下(步骤S740为‘否’),控制部850返回步骤S705,控制选择处理部851的动作。

在判定为大的情况下(步骤S740为‘是’),控制部850对多个伪功能提供指令群的每个确定配置目的地,使未插入功能提供指令群的1个以上选择对象数据之一变为配置目的地(步骤S745)。例如,若选择对象数据540、541、542、544未执行,则将配置伪功能提供指令群的位置确定为这些选择对象数据,插入各伪提供指令群。

3.5汇总

第3实施方式的秘密处理装置60的选择处理部722、和秘密保持程序500的选择处理指令群520中,仅从多个选择对象数据中的未执行的选择对象数据中,确定接着选择的选择对象数据。由此,知道秘密处理装置60或秘密保持程序500不重复执行同一选择对象数据的非法解析者即便执行改变选择参数群的初始值的穷举搜索,也由于在代入任一初始值的情况下都不会重复选择选择对象数,所以难以有效解析。

程序难破解化装置50可将难破解化对象程序变换为秘密处理装置60执行的秘密保持程序。由此,知道不重复执行相同程序指令群的非法解析者即便对变换后的程序执行改变选择参数群的初始值的穷举搜索,也不能根据是否重复而有效发现错误的初始值。因此,具有可将输入程序变换为可防止有效地在短时间内执行非法解析的程序的效果。

3.6变形例1

上述所示的程序难破解化装置50也可将配置顺序确定部804置换成下示的配置顺序确定部804a(未图示)。

其它的构成要素与上述一样,所以这里省略说明。

在本变形例1中,程序难破解化装置50中输入部801仅接收难破解化对象程序。

3.6.1配置顺序确定部804a

配置顺序确定部804与配置顺序确定部804a的不同之处在于前者是在确定选择参数用初始值之后、确定配置功能提供指令群的位置的方法,相反,后者是在确定配置第1~第p个(p为选择参数的数量)的功能提供指令群的位置之后,确定选择参数用变量的初始值,并确定配置第p+1个以后的功能提供指令群的位置。

配置顺序确定部804a具备控制部850a、选择处理部851a、管理信息更新部852a、更新处理部853a和管理信息保持部854a。下面,说明配置顺序确定部804a的各构成要素的细节。

(1)管理信息保持部854a

管理信息保持部854a与管理信息保持部854一样,所以这里省略说明。以后必要时,用管理信息表格T800进行说明。

(2)控制部850a

控制部850a事先存储选择参数的个数p(这里为2个)。

控制部850a具有存储选择参数群的参数存储区域。

控制部850a执行后述的选择处理部851a具有的式3可取的值、即式3可取的选择识别符的值的每个,与程序存储部800存储的选择对象数据之间的对应。

控制部850a随机设定配置第1~p个功能提供指令群的位置。例如,控制部850a使用随机数来确定将第1功能提供指令群配置在选择对象数据540~546哪个中,接着,使用随机数来确定将第2功能提供指令群配置在未配置第1功能提供指令群的选择对象数据哪个中。下面,同样使用随机数来确定将功能提供指令群K(K=3...m)配置在未配置功能提供指令群的选择对象数据的哪个中。

控制部850a将对应于第1~p个功能提供指令群的每个的配置目的地的管理信息的值从‘0’更新为‘1’。控制部850a使用更新后的管理信息表格T800、涉及第1~p个功能提供指令群的每个的配置目的地的信息、和算出选择识别符的算出式,算出p个初始值。控制部850a通过用显示部(未图示)显示算出的p个初始值,通知用户。

控制部850a将算出的p个初始值存储在参数存储区域中。

控制部850a控制选择处理部851、管理信息更新部852和更新处理部853的动作。

控制部850a根据选择处理部851a取得的选择识别符,将第i个功能提供指令群插入对应的选择对象数据中。这里,i是(p+1)以上m以下的整数,m是功能提供指令群的个数。另外,控制部850a暂时存储第i个功能提供指令群与插入目的地的选择对象数据之间的对应。选择处理部851a如后所述。

控制部850a对未插入功能提供指令群的1个以上选择对象数据的每个,插入生成的多个伪功能提供指令群中的1个伪功能提供指令群。这里,已插入1次的伪功能提供指令群不被插入其它选择对象数据中。

<初始值算出方法的具体例>

下面示出初始值算出方法的具体例。这里,设选择参数数量p=2,使用选择对象数据540~546、式3。另外,第1个功能提供指令群被配置在选择对象数据545中,第2功能提供指令群被配置在选择对象数据546中。

控制部850a首先取得选择对象数据545的处理结束时刻的选择参数的值CP_1和CP_2。下面说明该取得。由于选择对象数据545的更新处理指令群165是‘cp_1=cp_2;cp_2=sv;’,所以向选择参数CP_1(相当于程序中的变量cp_1)中代入对选择参数CP_2设定的值。之后,向选择参数CP_2(相当于程序中的变量cp_2)中代入选择识别符的值(相当于程序中的变量sv)的值。该时刻的选择识别符是配置第1功能提供指令群的选择对象数据545的识别符(即5)。之后,使用如上所述代入值后的选择参数,计算选择识别符。若将此前的情况汇总,则第1选择参数的值变为选择参数CP_2的初始值,第2选择参数的值变为配置了第1功能提供指令群的选择对象数据的识别符。在本变形例1中,由于将配置第2功能提供指令群的位置设为选择对象数据546,所以由式3算出的临时选择识别符信息变为‘5’或‘6’。这是因为若式3的值为‘6’,则选择未执行的选择对象数据546,若式3的值为‘5’,则不选择已选择完成的选择对象数据545,而选择位于之后最近的未执行的选择对象数据546。

这里,为了使式3的值为‘5’,必需是‘1×(选择参数CP_1)+2×5MOD 7=5’,若求解,则选择参数CP_1的值变为‘2’。同样,为了使式的值为‘6’,必需是‘1×(选择参数CP_1)+2×5 MOD 7=6’,若求解,则选择参数CP_1的值变为‘3’。通常当p1与NN互质时,对于全部自然数A,存在满足‘p1×Y MOD NN=A’的Y。由此,可确定选择参数CP_1的值。

从而,选择参数CP_2的初始值变为‘2’或‘3’之一。控制部850a将选择参数CP_2的初始值选择为‘2’或‘3’之一。

下面,继续说明控制部850a选择‘2’作为选择参数CP_2的初始值的情况。

接着,控制部850a确定选择参数CP_1的初始值。

为了选择配置了第1功能提供指令群的选择对象数据545,由式3算出的临时的选择识别符必需是‘5’。由于该时刻全部选择对象数据均未执行,所以式的值不能取直接表示选择对象数据545的‘5’以外的值。从而,必需是‘1×(选择参数CP_1)+2×(选择参数CP_2)MOD 7=5’。并且,选择参数CP_2的初始值如前面算出的那样为‘2’,在最初执行管理信息更新指令群125的时刻,选择参数CP_2的值为其初始值。若将该值代入式3,则变为‘1×(选择参数CP_1)+2×2 MOD7=5’。若求解,则选择参数CP_1的值变为‘1’。此时,选择参数CP_1的值仍为初始值,所以选择参数CP_1的初始值变为‘1’。

由此,算出第1和第2选择参数的初始值‘1’、‘2’。

(3)选择处理部851a

选择处理部851a与选择处理部851一样,所以这里省略说明。

(4)管理信息更新部852a

管理信息更新部852a与管理信息更新部852一样,所以这里省略说明。

(5)更新处理部853a

更新处理部853a与更新处理部853一样,所以这里省略说明。

3.6.2变形例1的程序难破解化装置的动作

(1)动作概要

变形例1的程序难破解化装置的动作通过在图27所示的步骤S615与配置确定处理(步骤S620)之间追加初始值算出处理,可生成秘密保持程序。

(2)初始值算出处理

这里,用图29所示的流程图来说明初始值算出处理的动作。

控制部850a随机设定配置第1~p个功能提供指令群的位置(步骤S800)。

控制部850a将与第1~p个功能提供指令群的每个的配置目的地相对应的管理信息的值从‘0’更新为‘1’(步骤S805)。

控制部850a在j=p~1之前的期间中,重复步骤S815~步骤S825(步骤S810)。

控制部850a算出第j选择参数的初始值(步骤S815),将算出的第j选择参数的初始值存储到参数存储区域中(步骤S820)。

在重复结束之后,控制部850a显示算出的第1~p选择参数的初始值(步骤S830)。

3.6.2变形例1的效果

本变形例1的程序难破解化装置可将难破解化对象程序变换为第1实施方式所示的秘密保持程序。由此,知道不重复执行同一程序指令群的非法解析者即便对变换后的秘密保持程序执行改变选择参数群的初始值的穷举搜索,也不能根据是否重复来有效发现错误的初始值。因此,具有可将难破解化对象程序变换为可阻止有效地在短时间内执行非法解析的程序的效果。

本变形例1的程序难破解化装置在确定第1~p功能提供指令群的配置目的地之后,利用配置确定处理,再次确定第1~p功能提供指令群的配置目的地。此时,由于算出各选择参数的初始值以便算出事先确定的配置目的地的选择识别符,所以由配置确定处理确定的第1~p功能提供指令群的配置目的地与事先确定的配置目的地相同。

这里,本变形例1的程序难破解化装置也可不在确定第1~p功能提供指令群的配置目的地之后,利用配置确定处理,再次确定第1~p功能提供指令群的配置目的地。此时,控制部850a算出依次执行第1~p功能提供指令群之后的各选择参数的值,将算出的各值存储到参数存储区域中,控制此后的选择处理部851、管理信息更新部852和更新处理部853的动作。此时,当执行图28所示的配置确定处理时,将步骤S600变更为i=p+1。由此,程序难破解化装置可省略对配置目的地已确定的第1~p功能提供指令群的位置确定处理,利用配置确定处理,确定第p+1以后的功能提供指令群的配置目的地。

3.7变形例2

在变形例2中,说明按图30所示的顺序执行功能提供指令群1~3的秘密处理装置。即,该秘密处理装置是正常系统执行时可以重复执行相同选择对象数据的步骤的秘密处理装置。变形例2的秘密处理装置通过将第3实施方式的选择处理部722置换成图31所示的选择处理部722b来实现。

3.7.1选择处理部722b

选择处理部722b具有计数执行选择对象数据的选择的次数的计数器,对应于计数器的值,使选择识别符的确定方法变化。

下面,将与第3实施方式一样的选择识别符的确定方法、即更新选择识别符直到得到表示未执行的选择对象数据的选择识别符的确定方法称为‘第一确定方法’。另外,将把选择识别符的值设为与第A次(B=1、2、...6)确定的选择识别符相同的确定方法称为‘第二确定方法’。

下面,选择处理部722b如图31所示,具有确定方法保持部750b、选择履历保持部751b、计数器752b、控制部753b。

(1)确定方法保持部750b

确定方法保持部750b如图31所示,具有确定方法表格T1000。

确定方法表格T1000具有存储1个以上选择次数与确定方法构成的组的区域。

选择次数表示选择对象数据的选择次数,确定方法表示该次数的情况下的选择识别符的确定方法。

在将值‘0’设定为确定方法的情况下,表示选择识别符的确定方法是第一确定方法,在将值‘0’以外的值‘A’设定为确定方法的情况下,表示选择识别符的确定方法是第二确定方法。在设定值‘A’的情况下,表示取得与第A次选择的值相同的选择识别符。

例如,在选择次数与确定方法构成的组为‘1、0’的情况下,表示确定第1次选择的选择对象数据的选择识别符,使用第一确定方法来确定。另外,在选择次数与确定方法构成的组为‘3、1’的情况下,表示确定第3次选择的选择对象数据的选择识别符,使用第二确定方法来确定,设为与第1次确定的值相同的选择识别符。

(2)选择履历保持部751b

选择履历保持部751b将过去确定的选择识别符与确定的时刻下的计数器值相对应来保持。

(3)计数器752b

计数器752b计数当前执行的选择对象数据的选择是第几次选择。计数器752b的初始值为1,每执行一次选择,将计数器752b的值递增。

(4)控制部753b

控制部753b使用计数器752b的值与确定方法表格T1000,确定选择识别符的确定方法。具体而言,在计数器752b的值为‘1’的情况下,控制部753b取得确定方法表格T1000的选择次数对应于‘1’的确定方法‘0’。控制部753b由于取得的确定方法为‘0’,所以确定选择识别符的确定方法是第一确定方法。在取得的确定方法的值为‘0’以外的情况下,控制部753b确定为选择识别符的确定方法是第二确定方法。

控制部753b在确定的确定方法是第一确定方法的情况下,利用与执行选择处理指令群520时一样的处理,选择选择识别符。

控制部753b在确定的确定方法是第二确定方法的情况下,使用取得的值‘A’,从选择履历保持部751b中取得第A次确定的选择识别符。

控制部753b将计数器752b表示的值与确定的选择识别符存储在选择履历保持部751b中。控制部753b将计数器1340的值累加计数。

3.7.2秘密处理装置的动作

变形例2中的秘密处理装置的动作向图24所示的步骤S500追加对计数器752b的计数器count设定初始值‘1’的处理。

之后,执行下示的识别符算出处理,之后,执行步骤S520以后的步骤。在步骤S535的判断为‘是’的情况下,结束处理,在为‘否’的情况下,返回识别符算出处理。

下面,用图32所示的流程图来说明识别符算出处理的动作。

这里,设选择参数的数量为2个,算出选择识别符的式用式3。必要时,用第3实施方式所示的构成部来进行说明。

控制部753b使用计数器752b的值与确定方法表格T1000,确定选择识别符的确定方法(步骤S850)。

控制部753b判断确定的确定方法是否是第一确定方法(步骤S855)。

在判断为是第一确定方法的情况下(步骤S855为‘是’),控制部753b使用选择参数群保持部705中存储的选择参数CP_1和CP_2、与选择处理指令群中包含的式3,算出临时的选择识别符(步骤S860)。

控制部753b使用管理信息表格T700,判定对应于算出的临时的选择识别符的选择对象数据是否已执行(步骤S865)。

控制部753b在判定为已执行的情况下(步骤S865为‘是’),控制部753b更新临时的选择识别符(步骤S870)。

在判定为未执行的情况下(步骤S865为‘否’),控制部753b将计数器752b所示的值与确定的选择识别符存储在选择履历保持部751b中(步骤S880)。将计数器1340的值count递增(步骤S885)。

在判断为是第二确定方法的情况下(步骤S855为‘否’),控制部753b使用从确定方法表格T1000取得的确定方法的值‘A’,从选择履历保持部751b中取得第A次确定的选择识别符(步骤S875),执行步骤S880以后的动作。

3.7.3变形例2的效果

变形例2的选择处理部722b当在图31所示的确定方法表格T1000中选择第3、4、6次执行的选择对象数据时,从已选择的选择对象数据中选择1个。从而,知道难破解化对象程序重复执行同一选择对象数据的非法解析者即便执行改变选择参数群的初始值的穷举搜索,也不能在代入任一初始值的情况下重复选择选择对象数据,不能有效发现错误的初始值。因此,具有可将难破解化对象程序变换为可阻止有效地在短时间内执行非法解析的程序的效果。

3.8变形例3

这里是程序难破解化装置50c,根据具有循环、执行循环内的程序指令群的次数为固定次数的难破解化对象程序,生成秘密保持程序。在本变形例3中,作为1例,图33示出难破解化对象程序的控制流程。在该程序中有2处循环构造,执行各个循环内的程序指令的次数为2次。

下面,用图33所示的难破解化对象程序进行说明。

3.8.1程序难破解化装置50c

程序难破解化装置50c如图34所示,由程序存储部800c、输入部801c、功能提供指令群生成部802c、伪功能提供指令群生成部803c、配置顺序确定部804c、管理指令群生成部805c、秘密保持程序生成部806c、输出部807和选择处理指令群生成部808c构成。

程序难破解化装置50c具体而言,是由微处理器、ROM、RAM、硬盘单元、显示器单元、键盘、鼠标等构成的计算机系统。在所述RAM或所述硬盘单元中存储计算机程序。这里,计算机程序为了实现规定的功能,组合多个表示对计算机的指令的指令代码来构成。通过所述微处理器根据所述计算机程序动作,程序难破解化装置50c实现其功能。即,所述微处理器1个个地读出所述计算机程序中包含的各指令,解读读出的指令,根据解读结果进行动作。

设程序难破解化装置50c从难破解化对象程序取得3个功能提供指令群。另外,设由程序难破解化装置50c生成的秘密保持程序的构造与上述所示的秘密保持程序500的构造一样,在下面的说明中,必要时,用秘密保持程序500中使用的符号来说明。

(1)程序存储部800c

程序存储部800c与上述第3实施方式所示的程序存储部800一样,所以省略说明。

(2)输入部801c

输入部801c与上述第3实施方式所示的输入部801一样,所以省略说明。

输入部801c接收的难破解化对象程序是具有循环、事先确定执行循环内的程序指令群的次数的程序。

(3)功能提供指令群生成部802c

功能提供指令群生成部802c根据输入部801c接收的难破解化对象程序,生成多个功能提供指令群。

功能提供指令群生成部802c,例如若输入部801c接收图33所示的难破解化对象程序,则对循环内存在的2个程序指令群(这里是步骤S905执行的程序指令群1与步骤S925执行的程序指令群2)的每个,与上述所示的功能提供指令群生成部802一样执行动作,生成多个功能提供指令群。这里,功能提供指令群生成部802c分割程序指令群1,生成2个功能提供指令群(下面称为功能提供指令群1、2。),根据程序指令群2,生成1个功能提供指令群(下面称为功能提供指令群3。)。

图35示出将图33所示的控制流程置换为生成的3个功能提供指令群的控制流程。

步骤S905执行的程序指令群1被置换为步骤S906执行的功能提供指令群1与步骤S907执行的功能提供指令群2,步骤S925执行的程序指令群2被置换为步骤S926执行的功能提供指令群3。程序指令群2与功能提供指令群3相同。

(4)伪功能提供指令群生成部803c

伪功能提供指令群生成部803c与上述所示的伪功能提供指令群生成部803一样,所以省略说明。

(5)选择处理指令群生成部808c

选择处理指令群生成部808c生成使计算机等实现变形例2所示的选择处理部722b的程序指令群。

选择处理指令群生成部808c首先生成确定方法保持部750b所具有的确定方法表格T1000。

选择处理指令群生成部808c根据图35所示的控制流程,生成展开循环之后的程序的控制流程。具体而言,在图35中,对作为循环内的程序指令的第1和第2功能提供指令群进行执行循环的次数的展开、即2次展开,第3功能提供指令群同样展开2次。图36中示出展开各功能提供指令群之后的程序的控制流程。

接着,选择处理指令群生成部808c根据展开循环后的程序的控制流程,生成确定方法保持部750b中保持的确定方法。

在图36的控制流程中,步骤S950~S975分别是第1~第6个执行的块。在该控制流程中第3个执行的功能提供指令群1与第1个执行的功能提供指令群1相同。由此,选择处理指令群生成部808c对确定方法表格T1000中对应于选择次数‘3’的确定方法设定值‘1’。同样,选择处理指令群生成部808c对确定方法表格T1000中对应于选择次数‘4’、‘6’的每个的确定方法设定值‘2’、‘5’。

另外,设选择虽然在图36的控制流程上不存在、但在展开循环后的控制流程上仅出现1次的块时的选择识别符的确定方法,为从未配置的选择对象数据中选择的确定方法。

这样,选择处理指令群生成部808c生成由确定方法保持部750b保持的确定方法表格T1000。具体而言,选择处理指令群生成部808c生成使计算机上具有确定方法表格T1000的数据构造的程序指令群。由此,可实现确定方法表格T1000,使得在使用第e次选择识别符为表示未执行的选择对象数据的选择识别符的确定方法的情况下具有‘e、0’的组、在设为与第f次确定的选择识别符相同的情况下具有‘e、f’的组。

另外,选择处理指令群生成部808c还生成在计算机上实现选择履历保持部751b、计数器752b和控制部753b的程序指令群。这里,实现选择履历保持部751b的程序指令群是将选择识别符与计数器的值相对应地加以存储的指令群。实现计数器752b的程序指令群是表示将初始值设为‘1’、并递增1的计数器的指令群。另外,实现控制部753b的指令群是实现变形例2中已说明的动作的程序指令群。下面,将计数器表示的指令群、和实现控制部753b的指令群统称为确定方法控制指令群。

由此,选择处理指令群生成部808c可生成使选择处理部722b动作的程序指令群。

选择处理指令群生成部808c将生成的各指令群存储到程序存储部800c中。

(6)配置顺序确定部804c

配置顺序确定部804c确定按何顺序将生成的功能提供指令群(这里为3个功能提供指令群)和伪功能提供指令群(这里为4个伪功能提供指令群)分配给选择对象主要指令群550~556。具体而言,配置顺序确定部804c确定将第1~第3功能提供指令群配置给选择对象主要指令群550~556的哪个,确定将伪功能提供指令群配置给剩余的4个选择对象主要指令群的哪个。

配置顺序确定部804c事先存储上述式3。这里,将式3中的p1、p2和NN分别设为‘1’、‘2’和‘7’。

配置顺序确定部804c使用由输入部801c接收的2个选择参数的初始值与事先存储的式3,确认实际上按何顺序算出选择识别符,由此,确定应配置功能提供指令群和伪功能提供指令群的选择对象主要指令群。

设输入部801c接收选择参数CP_1(=1)、CP_2(=2),作为2个初始值。下面,说明配置的确定方法的一例。

配置顺序确定部804c如图37所示,具备控制部850c、选择处理部851c、管理信息更新部852c、更新处理部853c和管理信息保持部854c。下面,说明配置顺序确定部804c的各构成要素的细节。

<管理信息保持部854c>

管理信息保持部854c与管理信息保持部854一样,所以省略说明。之后在必要时,使用管理信息表格T800来说明。

由此,可存储配置了功能提供指令群的位置(配置的选择对象数据)。

<控制部850c>

控制部850c具有存储选择参数群的参数存储区域。

控制部850c将输入部801c接收到的选择参数的初始值CP_1和CP_2(这里分别为‘1’、‘2’)存储在参数存储区域中。

控制部850c控制选择处理部851c、管理信息更新部852c和更新处理部853c的动作。

控制部850c执行后述的选择处理部851c具有的式3可取的值、即式3可取的选择识别符的值的每个,与程序存储部800c存储的选择对象数据之间的对应。

控制部850c从功能提供指令群生成部802c取得所生成的第i个功能提供指令群。控制部850c根据选择处理部851c取得的选择识别符,将取得的第i个功能提供指令群插入程序存储部800c存储的对应的选择对象数据中。这里,i是1以上m以下的整数。另外,控制部850c暂时存储第i个功能提供指令群与插入目的地的选择对象数据的对应。

控制部850c从伪功能提供指令群生成部803取得生成的多个伪功能提供指令群中、未插入选择对象数据中的1个伪功能提供指令群。控制部850c将取得的伪功能提供指令群插入未插入第i功能提供指令群或伪功能提供指令群的1个选择对象数据中。控制部850c对全部伪功能提供指令群执行该动作。

由此,控制部850c可在各选择对象数据中插入第i功能提供指令群或伪功能提供指令群。

通过控制部850c取得第i个功能提供指令群的动作,可选择构成配置目的地的功能提供指令群。

<选择处理部851c>

选择处理部851c事先存储上述式3。

选择处理部851c根据图36所示的控制流程和选择处理指令群生成部808c生成的使选择处理部722b动作用的程序指令群,确定各功能提供指令群的配置目的地。

选择处理部851c通过图36所示的控制流程,取得第t次执行的第i功能提供指令群。这里,t为1以上6以下的整数,i为1以上3以下的整数。

选择处理部851c使用选择处理指令群生成部808c生成的确定方法表格T1000,取得对应于选择次数‘t’的确定方法。

在确定方法为‘0’的情况下,选择处理部851c通过与上述所示的选择处理部851一样的动作,取得选择识别符swVar。选择处理部851c将取得的选择识别符swVar与第i功能提供指令群相对应。由此,选择处理部851c可将第i功能提供指令群插入由对应的选择识别符swVar所示的选择对象数据中。

在确定方法为‘0’以外的值的情况下,选择处理部851c取得第t+1次执行的第j功能提供指令群,执行上述动作。

利用选择处理部851c的动作、和控制部850c根据选择处理部851c取得的选择识别符将第i个功能提供指令群插入到选择对象数据中的动作,可将功能提供指令群插入适当的配置目的地中。

<管理信息更新部852c>

管理信息更新部852c与管理信息更新部852一样,所以省略说明。

<更新处理部853c>

更新处理部853c与更新处理部853一样,所以省略说明。

(7)管理指令群生成部805c

管理指令群生成部805c与上述所示的管理指令群生成部805一样,所以省略说明。

(8)秘密保持程序生成部806c

秘密保持程序生成部806c配置程序存储部800c存储的各指令群,生成秘密保持程序。即,按图38的顺序,配置管理指令群生成部805c生成的指令群、选择处理指令群生成部808c生成的指令群、和配置顺序确定部804c生成的选择对象数据,生成秘密保持程序1800。利用管理指令群生成部805c的更新处理指令群的生成动作与秘密保持程序生成部806c的上述动作,可将各指令群插入适当的配置位置上。

选择处理指令群生成部808c生成的确定方法控制指令群580以外的其它指令群的位置未特别明示,但例如通过包含于预处理指令群510中等,可确保执行开始时所需的区域,或在例如存储器上生成确定方法保持部750b。

并且,秘密保持程序生成部806c对选择对象主要指令群550~556配置功能提供指令群生成部802c生成的多个功能提供指令群和伪功能提供指令群生成部803c生成的多个伪功能提供指令群,以对应于配置顺序确定部804c确定的顺序。

(9)输出部807c

输出部807c与上述所示的输出部807一样,所以省略说明。

3.8.2程序难破解化装置50c的动作

这里,说明程序难破解化装置50c的动作。

程序难破解化装置50c的动作基本上与程序难破解化装置50一样。下面,用图27所示的流程图,主要说明与程序难破解化装置50的动作的不同点。

步骤S620由配置顺序确定部804c执行。

另外,在图27所示的流程图中,加入选择处理指令群生成部808c动作的步骤。使选择处理指令群生成部808c动作的步骤只要在配置顺序确定部804c确定配置顺序之前,即步骤S620之前,则可以是任意位置。

3.8.3变形例3的效果

本变形例3的程序难破解化装置50c可将难破解化对象程序变换为第3实施方式所示的秘密保持程序。这里,与第3实施方式所示的程序难破解化装置50不同,由于可以用具有循环的程序进行难破解化,所以可对更多种的输入程序实施难破解化。

3.9.4变形例4

变形例4所示的程序难破解化装置是如下装置,即除第3实施方式的程序难破解化装置执行的程序难破解化外,还追加将包含常数的程序指令置换成不包含该常数的程序指令的难破解化。

3.9.1变形例4的程序难破解化装置

这里,程序难破解化装置将构成功能提供指令群的程序指令中包含的第一常数置换成‘(第1选择参数)+(第2选择参数)+(第二常数)’。例如,在功能提供指令群1中包含程序指令‘b=a+30’、执行功能提供指令群1时的第1和第2选择参数各自的值为‘1’、‘2’的情况下,将‘b=a+30’置换为‘b=a+(选择参数CP_1)+(选择参数CP_2)+27’。

下面,说明执行这种变换的程序难破解化装置。

在变形例4中,使用配置顺序确定部804d(未图示)代替第3实施方式所示的配置顺序确定部804。配置顺序确定部804d除第3实施方式中说明的构成要素外,具有程序指令变更部810d。

程序指令变更部810d如上所述,执行将输入程序中的常数置换为‘(第1选择参数)+(第2选择参数)+(第二常数)’的处理。具体而言,配置顺序确定部804d对于当前看到的各功能提供指令群,在包含含有常数的程序指令的情况下,取得存储在参数存储区域中的第1和第2选择参数。程序指令变更部810d使用取得的第1和第2选择参数,执行将该常数置换为‘(第1选择参数)+(第2选择参数)+(第二常数)’的处理。

这里,第二常数通过从第一常数中减去第1和第2选择参数各自的值来算出。

3.9.2动作

下面,主要以配置顺序确定部804d的处理流程用图39来说明变形例4的程序难破解化装置的动作。变形例4的程序难破解化装置的动作除配置顺序确定部804d的动作以外,与第3实施方式一样。

配置顺序确定部804d对计数器count设定‘1’,将选择参数群的初始值存储在参数存储区域中(步骤S1000)。

配置顺序确定部804d取得存储在参数存储区域中的选择参数CP_1和CP_2。配置顺序确定部804d使用取得的CP_1和CP_2与事先存储的式3,算出临时的选择识别符(步骤S1005)。

配置顺序确定部804d确定第count个功能提供指令群的配置目的地(步骤S1010)。具体而言,配置顺序确定部804d执行图28所示的步骤S710、S715、S720。

配置顺序确定部804d判断第count个功能提供指令群中是否存在包含常数的程序指令(步骤S1015)。

在判断为存在的情况下(步骤S1015为‘是’),则配置顺序确定部804d取得包含常数的程序指令,使用取得的程序指令中包含的常数和参数存储区域中存储的第1和第2选择参数,算出第二常数(步骤S1020)。配置顺序确定部804d将取得的程序指令中包含的常数置换为第1和第2选择参数与算出的第二常数(步骤S1025)。例如,配置顺序确定部804d将‘b=a+30’置换为‘b=a+(选择参数CP_1)+(选择参数CP_2)+27’。配置顺序确定部804d对第count个功能提供指令群中存在的包含常数的程序指令全部执行步骤S1020和S1025的动作。

配置顺序确定部804d使用参数存储区域存储的选择参数群与选择处理部851取得的选择识别符,执行选择参数CP_1和CP_2的更新,将更新后的选择参数群盖写到参数存储区域(步骤S1030)。

配置顺序确定部804d将管理信息表格T800中包含的多个管理信息中、对应于取得的选择识别符swVar的管理信息,从值‘0’更新到值‘1’(步骤S1035)。

配置顺序确定部804d对计数器count加上值‘1’(步骤S1040)。

配置顺序确定部804d判定计数器count是否比功能提供指令群的个数大(步骤S1045)。

在判定为不大的情况下(步骤S1045为‘否’),配置顺序确定部804d返回步骤S1005。

在判定为大的情况下(步骤S1045为‘是’)配置顺序确定部804d对多个伪功能提供指令群的每个配置配置目的地,使未插入功能提供指令群的1个以上选择对象数据之一构成配置目的地(步骤S1050)。

在判断为第count个功能提供指令群中不存在包含常数的程序指令的情况下(步骤S1015为‘否’),配置顺序确定部804d执行步骤S1030之后的步骤。

这里,将置换常数的置换式设为‘(选择参数1)+(选择参数2)+(第二常数)’,但也可以是其它式。此时,也可制作根据式‘(置换式)=(第一常数)’求出第二常数的式,并使用该式,算出第二常数。置换式不一定是固定的,也可在每次进行置换时使用不同的式。

说明中使用的难破解化对象程序是一例,其控制流程或循环的次数等控制构造不限于此。

3.9.4变形例4的效果

根据本变形例4的这种变换,除第3实施方式中进行的难破解化外,不能直接发现生成的程序中的常数的值,解析更加困难。尤其是通过本变形例4不能直接看到作为秘密信息的密钥的值等,可使秘密信息的值的解析变困难。

3.10其它变形例

根据上述第3实施方式和变形例1~4说明了本发明,但本发明当然不限于上述实施方式。下面的情况也包含于本发明中。

(1)在上述第3实施方式中,设选择识别符的算出式为‘1×(选择参数CP_1)+2×(选择参数CP_2)MOD 7’,但不限于此。只要是可以任何形式算出选择识别符的候选的式,则也可以是其它式。

(2)在上述第3实施方式中,将选择参数群的更新处理(更新处理指令群)埋入选择对象数据540~546中(例如图20中的选择对象数据660的‘cp_1=cp_2;cp_2=sv;’等),但不限于此。秘密保持程序也可构成为在选择对象数据540~546执行之后参照更新处理指令群。

(3)图20中,构成为未明示地执行图24所示的步骤S535的判断,在正常系统执行中最后执行的选择对象数据543执行之后结束处理,但不限于此。秘密保持程序也可以以与选择对象数据独立的形式,执行对被执行的选择对象数据是否是处理最后应执行的选择对象数据进行判断的判断处理。

(4)并且,在上述第3实施方式中,通过更新选择参数来间接地更新选择对象识别符,但不限于此。秘密保持程序也可构成为直接更新选择识别符。此时,在图24所示的步骤S530中执行选择识别符的更新,在步骤S535的判断结果为‘否’的情况下,返回步骤S510。

(5)在上述第3实施方式中,秘密保持程序存储来自调用源的输入值,作为选择参数的初始值,但不限于此。秘密保持程序也可构成为将从网络上的其它设备取得的值代入选择参数的初始值,或构成为将程序执行装置执行保持的其它程序的结果得到的输出值代入选择参数的初始值。

(6)在上述第3实施方式中,程序难破解化装置当将难破解化对象程序变换为秘密保持程序时,由输入部接收选择参数的初始值,但不限于此。程序难破解化装置也可设定选择参数的初始值,事先存储。

(7)在上述第3实施方式中,示出功能提供指令群为3个、伪功能提供指令群为4个的情况,但未必是该个数。功能提供指令群为多个、伪功能提供指令群为1个以上即可。

(8)在上述第3实施方式中,描述固定选择对象部的数量、选择参数的数量、选择识别符的计算式来生成秘密保持程序的情况,但这些值或式未必是固定的值,也可以是其它值或式。这些值或式可以构成为作为输入提供给程序难破解化装置,或是构成为根据使用穷举攻击进行攻击时的穷举来确定。在构成为作为输入提供的情况下,为了保证生成的秘密保持程序500在计算机上正确动作,期望选择识别符的计算式是其计算结果始终为选择对象数据的数量以下的式。另外,该式为了使非法解析者难以解析,期望是对应于选择参数的值算出的值变动大的式。

另外,选择参数的初始值也可以是对构成难破解化对象的每个程序随机的值。由此,即便假设非法解析者可得到正确的选择参数的初始值,也不能对其它程序适用该初始值。

(9)在上述第3实施方式中,块的分割以简单的方法说明,但不限于该方法,只要执行对应于块的分割方式的控制构造的解析,生成对应于块的分割方式的功能提供指令群即可。

(10)在上述第3实施方式中,以上述使用了程序的程序执行装置的形式实现秘密处理装置60,但不限于此,也可执行硬件的安装。

(11)在上述第3实施方式中,秘密处理装置60利用图24的步骤S535的判断结果,执行处理的结束或继续的判断,但不限于此。

秘密处理装置60也可判断是否选择与分割后块的个数相同的选择处理数据,代替图24的步骤S535所示的判断。

用图40的流程图来表示此时的秘密保持程序500e的具体例。图40所示的程序的流程图是用C语言记述图18的各块的具体例。

图40中的值‘i’表示选择对象数据的选择次数。利用块651e中包含的条件式‘if(i>3)then return;’,控制秘密保持程序500e的结束和处理的继续。即,在选择次数比3大的情况下,秘密处理装置60结束秘密保持程序500e的执行,在为3以下的情况下,继续执行秘密保持程序500e。这里,条件式中包含的值‘3’是与分割后块的数量相同的值。

选择对象数据中包含的分支指令群被统一成分支到选择处理指令群的分支指令。

由此,难以发现正常系统执行中最后执行的选择对象数据。

另外,通过将条件式‘if(i>3)then return;’中包含的值设为与分割后块的数量相同,在执行正常系统的动作中最后执行的选择对象数据(例如第3功能提供指令群)之后,始终保证秘密保持程序500e的动作结束。

(12)在上述第3实施方式中,将选择参数的数量设为2,但不限于此。选择参数的数量也可以是多个。

此时的式3为‘p1×(第1选择参数用变量)+p2×(第2选择参数用变量)+...+pn×(第n选择参数用变量)mod NN’(n为2以上的整数)。NN与p1、p2、...、pn是互质的素数。另外,当更新选择参数时,将第i参数中存储的值存储在第i-1参数中。此时,按第1参数、第2参数、...、第n-1参数的顺序存储。另外,在第n参数中,存储选择对象数据的选择中使用的选择识别符的值。这里,i是2以上n以下的整数。

(13)在上述第3实施方式中,程序难破解化装置50在向仅由标签名构成的多个选择对象数据的每个中插入选择对象主要指令群、更新处理指令群和分支指令群之后,确定预处理指令群、选择处理指令群、变迁处理指令群和多个选择对象数据的配置,生成秘密保持程序,但不限于此。

程序难破解化装置50也可确定预处理指令群、选择处理指令群、变迁处理指令群和仅由标签名构成的多个选择对象数据的配置目的地,之后,向仅由标签名构成的多个选择对象数据的每个中,插入选择对象主要指令群、更新处理指令群和分支指令群,生成秘密保持程序。

(14)也可使上述实施方式和上述变形例分别组合。

4.第4实施方式

下面,参照附图来说明作为本发明第4实施方式的秘密保持程序2000、程序难破解化装置1010和秘密处理装置1020。

系统的构成与第3实施方式所示的构成一样,省略说明。

秘密处理装置1020与第3实施方式所示的秘密处理装置60一样,是使用秘密信息的装置。

秘密处理装置1020与第3实施方式所示的秘密处理装置60的构成要素相同,但各部的处理各不相同。下面,由于主要说明各部的处理,所以为了简化说明,采用通过在计算机上执行来实现秘密处理装置的秘密保持程序2000的说明,来代替秘密处理装置的说明。这里,秘密处理装置1020的构成与秘密保持程序2000的各部之间的对应关系与第3实施方式一样。

4.1秘密保持程序2000

图41示出秘密保持程序2000的整体构成图。下面,参照图41来说明秘密保持程序2000的细节。这里,向与第3实施方式的秘密保持程序500一样的部分附加相同的符号,省略说明。

秘密保持程序2000与第3实施方式所示的秘密保持程序500一样,是进行了难破解化、以使非法解析者不能解析程序中包含的程序指令群按什么样的执行顺序执行的程序。

秘密保持程序2000具备与第3实施方式一样的管理信息更新指令群525、变迁处理指令群530、与第3实施方式不同的预处理指令群2010、选择处理指令群2020、选择对象数据2040、2041、...、2046,它们按图41所示的顺序配置。各部的具体说明如后所述。

选择对象数据2040~2046分别由与第3实施方式一样的选择对象主要指令群550~556、与第3实施方式不同的更新处理指令群2060~2066和分支指令群2070~2076构成,它们按图41所示的顺序配置。各部是由1个以上程序指令构成的程序指令群。

秘密保持程序2000是如下程序指令群,即:从调用源程序中接收3个输入值in_1、in_2、in_3、和执行该程序提供的功能处理时使用的参数,并执行该程序提供的功能处理。in_k(k是索引)是不足(7-k)的非负整数。这里,将选择对象数据设为2040~2046等7个,但不限于此。也可将选择对象数据的个数设为n+1个。这里,n为自然数。此时,in_k是不足(n+1-k)的非负整数。另外,输入值的个数设为in_1、in_2、in_3等3个,但不限于此。也可以是m(m为n+1以下的自然数)个。

在秘密保持程序2000的处理中,使用选择处理指令群2020的处理中使用的选择参数群的选择参数CP_1、CP_2、CP_3、与选择参数索引CPI、和保持选择识别符的选择识别符用变量。

这里,设秘密保持程序2000在正常系统执行时从调用源程序中接收的输入值in_1、in_2、in_3为值‘2’、‘4’、‘3’。本实施方式中提供的秘密保持程序2000是若使用从调用源程序中接收的值、则可按正确顺序执行(包含选择对象主要指令群的)选择对象数据的程序,是无法知道从调用源程序中接收的值的非法解析者难以知道(包含选择对象主要指令群的)选择对象数据的执行顺序的程序。

4.1.1预处理指令群2010

预处理指令群2010是设定选择处理指令群2020中使用的选择参数群的程序指令群。选择参数群由选择参数CP_1、选择参数CP_2、选择参数CP_3与选择参数索引CPI构成。这些选择参数CP_1~CP_3是非负整数值,选择参数索引CPI是自然数。

预处理指令群2010是启动秘密保持程序2000时最初执行的程序指令群。包含如下程序指令群,即:从调用源程序接收输入值in_1、in_2、in_3,将接收到的3个值的每个分别存储在选择参数群的选择参数CP_1、选择参数CP_2、选择参数CP_3中,将选择参数群的选择参数索引CPI设定为值‘1’的程序指令群。在正常系统执行时,in_1、in_2、in_3为值‘2’、‘4’、‘3’,执行在选择参数CP_1~CP_3中分别存储值‘2’、‘4’、‘3’的处理。仅存在输入值in_1、in_2、...的个数(在本实施方式中为3个)的选择参数。

4.1.2选择处理指令群2020

选择处理指令群2020包含使用选择参数群来算出选择识别符的程序指令群。选择识别符与第3实施方式一样,是变迁处理指令群执行时使用的值。

在选择处理指令群算出选择识别符的处理中,首先,对选择参数群的选择参数索引CPI,选择选择参数群的选择参数CP_CPI(即在CPI=1的情况下,选择选择参数CP_1)。

接着,使用秘密处理装置1020具有的管理信息,选择未执行的选择对象数据中第CP_CPI个选择对象数据。将选择到的选择对象数据的序号存储在选择识别用变量中。这里,选择对象数据的序号不是从1、而是从0开始顺序计数。例如,在选择对象数据2040未执行、CP_CPI=0的情况下,选择选择对象数据2040,将0存储在选择识别符用变量中。

4.1.3选择对象数据2040~2046

选择对象数据2040~2046是当由变迁处理指令群530进行分支后、任一被执行的程序指令群。

选择对象数据2040~2046分别是包含与第3实施方式一样的选择对象主要指令群150~156、与第3实施方式不同的更新处理指令群2060~2066和分支指令群2070~2076的程序指令群。

在本实施方式中,当正常系统执行时,通过按选择对象主要指令群552、555、554的顺序执行,执行该秘密保持程序提供的功能处理。即,在选择对象主要指令群552、555、554的每个中插入第1~第3功能提供指令群。另外,在选择对象主要指令群550、551、553、556中插入伪功能提供指令群。

(1)更新处理指令群2060~2066

更新处理指令群2060~2066是更新下次选择时使用的选择参数群的值的程序指令群。具体而言,更新处理指令群2060~2066将选择参数索引CPI递增。由此,选择处理指令群2020直接指定选择时使用的选择参数。

(2)分支指令群2070~2076

分支指令群2070~2076分别由分支到位于选择对象数据2040~2046以外的选择处理指令群2020的程序指令群、和将控制返回到程序调用源的处理的程序指令群之一构成。

包含第3功能提供指令群的选择对象数据2044中包含的分支指令群2074是将控制返回到程序调用源的处理的程序指令群,向其它选择对象数据中包含的选择对象之外分支的分支指令群是分支到选择处理指令群2020的程序指令群。

4.1.4动作

(1)秘密保持程序2000执行时的动作

这里,用图24说明执行秘密保持程序2000时的秘密处理装置1020的动作与秘密处理装置60的动作之间的不同之处。

秘密处理装置1020的动作将图24所示的步骤S500、步骤S505、步骤S530的动作变更为以下的动作。

在本实施方式中,将步骤S500变更为取得与功能提供指令群相同数量的选择参数的初始值,进行选择参数索引CPI的值的初始化和预处理的执行。

在本实施方式中,将步骤S505变更为通过选择具有选择参数索引CPI所示的序号的选择参数,来对选择识别符进行选择。例如,在选择参数索引CPI为‘1’的情况下,选择选择参数CP_1。

在本实施方式中,将步骤S530变更为将选择参数索引CPI的值递增。

(2)动作的具体例

下面,用图42来说明本实施方式中的秘密保持程序2000的动作的具体例。

这里,如上所述,在选择对象主要指令群552、555、554的每个中包含第1~第3功能提供指令群,在选择对象主要指令群550、551、553、556中包含伪功能提供指令群,在正常系统执行时,通过按选择对象主要指令群552、555、554的顺序执行,进行该秘密保持程序提供的功能的处理。

秘密保持程序2000执行预处理指令群2010的处理(步骤S2000)。具体而言,秘密保持程序2000的预处理指令群2010执行从调用源程序分别接收值‘2’、‘4’、‘3’、作为输入值in1、in2、in3、分别将值‘2’、‘4’、‘3’存储在第1~第3选择参数用变量中的处理、和将选择参数索引CPI初始化为值‘1’的处理,分支到选择处理指令群2020。

秘密保持程序2000执行选择处理指令群2020的处理(步骤S2005)。具体而言,选择处理指令群2020根据选择参数索引CPI中存储的值,取得1个选择参数。选择处理指令群2020根据取得的选择参数,选择多个选择对象数据中的1个选择对象数据。这里,由于选择参数索引CPI是1,所以选择处理指令群2020取得选择参数CP_1(=2)。选择处理指令群2020利用秘密处理装置1020具有的管理信息,选择未执行的选择对象数据(2040、2041、2042、2043、2044、2045、2046)中第CP_1(=2)个配置的选择对象数据2042。选择处理指令群2020将值‘2’存储在选择识别符用变量中。

秘密保持程序2000执行管理信息更新指令群525的处理(步骤S2010)。具体而言,管理信息更新指令群525将对应于选择识别符用变量‘2’的选择对象数据2042的管理信息更新为已执行。

秘密保持程序2000执行变迁处理指令群530的处理(步骤S2015)。具体而言,变迁处理指令群530执行分支到对应于选择识别符用变量‘2’的选择对象数据2042的处理。

秘密保持程序2000执行选择对象数据2042中包含的选择对象主要指令群552的处理(步骤S2020)。具体而言,选择对象数据2042执行相当于该程序提供的功能的一部分——即第1功能提供指令群的处理。

秘密保持程序2000执行更新处理指令群2062的处理(步骤S2025)。具体而言,更新处理指令群2062将选择参数群的选择参数索引CPI递增。这里,选择参数索引CPI的值为‘1’的变为‘2’。

秘密保持程序2000执行分支指令群2072的处理(步骤S2030)。具体而言,分支指令群2072执行分支到选择处理指令群2020的处理。

秘密保持程序2000执行选择处理指令群2020的处理(步骤S2035)。具体而言,由于选择参数索引CPI中存储的值为‘2’,所以选择处理指令群2020取得选择参数CP_2(=4)。选择处理指令群2020利用秘密处理装置1020具有的管理信息,选择未执行的选择对象数据(2040、2041、2043、2044、2045、2046)中第CP_2(=4)个配置的选择对象数据2045。选择处理指令群2020将值‘5’存储在选择识别符用变量中。

秘密保持程序2000执行管理信息更新指令群525的处理(步骤S2040)。具体而言,管理信息更新指令群525将对应于选择识别符用变量‘5’的选择对象数据2045的管理信息更新为已执行。

秘密保持程序2000执行变迁处理指令群530的处理(步骤S2045)。具体而言,变迁处理指令群530执行分支到对应于选择识别符用变量‘5’的选择对象数据2045的处理。

秘密保持程序2000执行选择对象数据2045中包含的选择对象主要指令群555的处理(步骤S2050)。具体而言,选择对象数据2045执行相当于该程序提供的功能的一部分——即第2功能提供指令群的处理。

秘密保持程序2000执行更新处理指令群2065的处理(步骤S2055)。具体而言,更新处理指令群2065将选择参数群的选择参数索引CPI递增。这里,选择参数索引的值为‘2’的变为‘3’。

秘密保持程序2000执行分支指令群2075的处理(步骤S2060)。具体而言,分支指令群2075执行分支到选择处理指令群2020的处理。

秘密保持程序2000执行选择处理指令群2020的处理(步骤S2065)。具体而言,由于选择参数索引CPI中存储的值为‘3’,所以选择处理指令群2020取得选择参数CP_3(=3)。选择处理指令群2020利用秘密处理装置1020具有的管理信息,选择未执行的选择对象数据(2040、2041、2043、2044、2046)中第CP_3(=3)个配置的选择对象数据2044。选择处理指令群2020将值‘4’存储在选择识别符用变量中。

秘密保持程序2000执行管理信息更新指令群525的处理(步骤S2070)。具体而言,管理信息更新指令群525将对应于选择识别符用变量‘4’的选择对象数据2044的管理信息更新为已执行。

秘密保持程序2000执行变迁处理指令群530的处理(步骤S2075)。具体而言,变迁处理指令群530执行分支到对应于选择识别符用变量‘4’的选择对象数据2044的处理。

秘密保持程序2000执行选择对象数据2044中包含的选择对象主要指令群554的处理(步骤S2080)。具体而言,选择对象数据2044执行相当于该程序提供的功能的一部分——即第3功能提供指令群的处理。

秘密保持程序2000执行更新处理指令群2064的处理(步骤S2085)。具体而言,更新处理指令群2064将选择参数群的选择参数索引CPI递增。这里,选择参数索引的值为‘3’的变为‘4’。

秘密保持程序2000执行分支指令群2074的处理(步骤S2090)。具体而言,分支指令群2074执行分支到秘密保持程序2000的调用源的处理。

4.2程序难破解化装置1010

程序难破解化装置1010如图43所示,由程序存储部800f、输入部801f、功能提供指令群生成部802f、伪功能提供指令群生成部803f、配置顺序确定部804f、管理指令群生成部805f、秘密保持程序生成部806f和输出部807f构成。

程序难破解化装置1010具体而言,是由微处理器、ROM、RAM、硬盘单元、显示器单元、键盘、鼠标等构成的计算机系统。在所述RAM或所述硬盘单元中存储计算机程序。这里,计算机程序为了实现规定的功能,组合多个表示对计算机的指令的指令代码来构成。通过所述微处理器根据所述计算机程序动作,程序难破解化装置1010实现其功能。即,所述微处理器1个个地读出所述计算机程序中包含的各指令,解读读出的指令,根据解读结果进行动作。

程序存储部800f、输入部801f、功能提供指令群生成部802f、伪功能提供指令群生成部803f、管理指令群生成部805f、秘密保持程序生成部806f和输出部807f分别与第3实施方式所示的程序存储部800、输入部801、功能提供指令群生成部802、伪功能提供指令群生成部803、管理指令群生成部805、秘密保持程序生成部806和输出部807一样,所以省略说明。

配置顺序确定部804与配置顺序确定部804f的不同之处在于,前者使用选择参数初始值与用于求出选择识别符的计算式来算出选择识别符,而后者使用选择参数的初始值,不使用计算式。

下面,说明配置顺序确定部804f。

配置顺序确定部804f未图示,但具有控制部850f、选择处理部851f、管理信息更新部852f、更新处理部853f和管理信息保持部854f。这些构成要素的连接关系与图26所示的配置顺序确定部804的构成要素的连接关系一样。

配置顺序确定部804f通过使用选择参数的初始值,确认实际上按什么样的顺序算出选择识别符,由此,确定应配置功能提供指令群和伪功能提供指令群的选择对象主要指令群。

在本实施方式中,与第3实施方式一样,设由输入部801f接收选择参数的初始值,设选择参数CP_1~CP~3的初始值为‘2’、‘4’、‘3’  。

(1)管理信息保持部854f

管理信息保持部854f与管理信息保持部854一样,所以省略说明。下面,必要时,使用管理信息表格T800进行说明。

由此,可存储配置了功能提供指令群的位置(配置的选择对象数据)。

(2)控制部850f

控制部850f具有存储选择参数群的参数存储区域。

控制部850f将输入部801f接收到的选择参数的初始值CP_1、CP_2和CP_3(这里分别为‘2’、‘4’、‘3’)存储在参数存储区域中。

在处理开始时,控制部850f对选择参数索引CPI设定初始值‘1’,并存储在参数存储区域中。

控制部850f控制选择处理部851f、管理信息更新部852f和更新处理部853f的动作。

控制部850f执行选择识别符的值的每个、与程序存储部800f存储的选择对象数据之间的对应。

控制部850f从功能提供指令群生成部802f取得生成的第i个功能提供指令群。控制部850f根据选择处理部851f取得的选择识别符,将取得的第i个功能提供指令群插入程序存储部800f存储的对应的选择对象数据中。这里,i是1以上m以下的整数。另外,控制部850f暂时存储第i个功能提供指令群与插入目的地的选择对象数据之间的对应关系。

控制部850f从伪功能提供指令群生成部803f取得生成的多个伪功能提供指令群中、未插入到选择对象数据中的1个伪功能提供指令群。控制部850f将取得的伪功能提供指令群插入到未插入第i功能提供指令群或伪功能提供指令群的1个选择对象数据中。控制部850f对全部伪功能提供指令群执行该动作。

由此,控制部850f可在各选择对象数据中插入第i功能提供指令群或伪功能提供指令群。

通过控制部850f进行的取得第i个功能提供指令群的动作,可选择构成配置对象的功能提供指令群。

(3)选择处理部851f

选择处理部851f取得存储在参数存储区域中的选择参数索引CPI,根据取得的CPI,取得选择参数CP_k。这里,k是1以上3以下的数。

选择处理部851f使用取得的CP_k的值与管理信息表格T800,取得选择识别符。

下面说明选择识别符的取得方法。

选择处理部851f将管理信息表格T800中值为‘0’的从上位起依次设为第0个、第1个、...,取得与所取得的CP_k的值一致的管理信息。选择处理部851f取得对应于所取得的管理信息的选择对象数据的选择识别符。

通过选择处理部851f的动作、和控制部850f进行的根据选择处理部851f取得的选择识别符将第i个功能提供指令群插入到选择对象数据中的动作,可将功能提供指令群配置到适当的配置目的地。

(4)管理信息更新部852f

管理信息更新部852f与管理信息更新部852一样,所以省略说明。

(5)更新处理部853f

更新处理部853f更新参数存储区域存储的选择参数索引CPI。即,将参数存储区域存储的选择参数索引CPI递增。

4.3程序难破解化装置1010的动作

程序难破解化装置1010的动作通过将图27所示的步骤S620的处理置换为下示的配置确定处理,生成秘密保持程序。

4.3.1配置确定处理

这里,用图44所示的流程图来说明配置确定处理的动作。

控制部850f对计数器i设定‘1’,对选择参数索引CPI设定初始值‘1’,并将选择参数索引CPI和选择参数CP_1、CP_2、CP_3的各初始值‘2’、‘4’、‘3’存储到参数存储区域中。控制部850f执行选择识别符的值的每个与选择对象数据之间的对应(步骤S2500)。这里,计数器i表示当前着眼的功能提供指令群应第几个执行。即,这里,从第1功能提供指令群开始顺序确定配置顺序。

选择处理部851f取得选择参数索引CPI,根据取得的CPI,取得选择参数CP_k。选择处理部851f使用取得的CP_k的值与管理信息表格T800,取得选择识别符(步骤S2505)。这里,k是1以上3以下的数。例如,选择处理部851f在选择参数索引CPI为‘1’的情况下,取得选择参数CP_1(=2),使用取得的CP_1与管理信息表格T800,取得选择识别符‘2’。

控制部850f根据选择处理部851f取得的选择识别符,将第i个功能提供指令群插入到对应的选择对象数据中(步骤S2510)。例如,在cont=1、选择识别符的值为‘2’的情况下,将第1功能提供指令群配置在选择对象数据542中。

管理信息更新部852f将管理信息表格T800中包含的多个管理信息中、对应于选择处理部851f取得的选择识别符的管理信息,从值‘0’更新为值‘1’(步骤S2515)。例如,在选择识别符的值为‘2’的情况下,管理信息保持部854f的管理信息表格T800中,对应于选择对象数据542的管理信息从未配置变为已配置。

更新处理部853f将参数存储区域存储的选择参数索引CPI递增,更新选择参数索引CPI的值,将更新结果盖写到参数存储区域上(步骤S2520)。

控制部850f将计数器i加上值‘1’(步骤S2525)。

控制部850f判定计数器i是否比功能提供指令群的个数大(步骤S2530)。

在判定为不大的情况下(步骤S2530为‘否’),控制部850f返回步骤S2505,控制选择处理部851f的动作。

在判定为大的情况下(步骤S2530为‘是’),控制部850f对多个伪功能提供指令群的每个,确定配置目的地,使未插入功能提供指令群的1个以上选择对象数据之一变为配置目的地(步骤S2535)。例如,若选择对象数据540、541、542、544未执行,则将配置伪功能提供指令群的位置确定为这些选择对象数据,插入各伪提供指令群。

4.4变形例

(1)在上述第4实施方式中,秘密保持程序存储来自调用源的输入值,作为选择参数的初始值,但不限于此。秘密保持程序也可构成为将从网络上的其它设备取得的值代入选择参数的初始值,或构成为将程序执行装置执行了保持的其它程序的结果得到的输出值代入选择参数的初始值。

(2)在上述第4实施方式中,示出功能提供指令群为3个、伪功能提供指令群为4个的情况,但未必是该个数。功能提供指令群为多个、伪功能提供指令群为1个以上即可。

(3)在上述第4实施方式中,如上所述,以使用了程序的程序执行装置的形式来实现秘密处理装置1020,但不限于此,也可执行硬件的安装。

(4)也可使上述实施方式和上述变形例分别组合。

4.5第4实施方式的效果

在本实施方式中,选择处理指令群2020仅从选择对象数据中、未执行的选择对象数据中,确定接着选择的选择对象数据。由此,知道难破解化对象数据不重复执行相同选择对象数据的非法解析者即便执行改变选择参数群的初始值的穷举搜索,也不会在代入任一初始值的情况下重复选择选择对象数据,难以根据是否重复来有效发现错误的初始值。

另外,在本实施方式中,准备数量与功能提供指令群相同的输入值,选择对应于各输入值的选择对象数据。下面,给出具体例描述这种实现带来的效果。在上述实例中,由于功能提供指令群的数量为3个,所以利用输入值in_1、in_2、in_3来选择选择对象数据。在本实施方式的秘密保持程序2000中,开始使用6以下的非负整数in_1(存在7种),选择7种选择对象数据2040~2046之一。这里,括号内的“存在7种”是指非法解析者可设定的in_1的值存在7种。接着使用5以下的非负整数in_2(存在6种),选择6种未执行的选择对象数据(从选择对象数据2040~2046中去除了以in_1选择的选择对象数据之后的选择对象数据)之一。再使用4以下的非负整数in_3(存在5种),选择5种未执行的选择对象数据(从选择对象数据2040~2046中去除了以in_1和in_2选择的选择对象数据之后的选择对象数据)。通过如此唯一选择选择对象数据,对于输入值,选择对象数据的选择的变化不减少,不减少攻击者穷举攻击时的组合数。

5.第5实施方式

下面,参照附图说明作为本发明第5实施方式的秘密保持程序2200、程序难破解化装置3010和秘密处理装置3020。

系统的构成与第3实施方式所示的构成一样,所以省略说明。

秘密处理装置1020与第3实施方式所示的秘密处理装置60一样,是使用秘密信息的装置。

秘密处理装置3020与第3实施方式所示的秘密处理装置60的构成要素相同,但各部的处理各不相同。下面,主要说明各部的处理,所以为了简化说明,采用通过在计算机上执行来实现秘密处理装置的秘密保持程序2200的说明,来代替秘密处理装置的说明。这里,秘密处理装置3020的构成与秘密保持程序2200的各部的对应关系与第3实施方式一样。

5.1秘密保持程序2200

图45示出秘密保持程序2200的整体构成图。下面,参照图45来说明秘密保持程序2200的细节。这里,向与第3实施方式的秘密保持程序500一样的部分附加相同的符号,省略说明。

秘密保持程序2200与第3实施方式的秘密保持程序500一样,是不想让非法解析者解析程序中包含的程序指令群按什么样的执行顺序执行的程序。

秘密保持程序2200包含管理信息更新指令群525、变迁处理指令群530、与第3实施方式不同的预处理指令群2210、选择处理指令群2220、选择对象数据2240、2241、...、2246,它们按图45所示的顺序配置。

选择对象数据2240~2246分别由与第3实施方式一样的选择对象主要指令群550~556、与第3实施方式不同的更新处理指令群2260~2266和分支指令群2270~2276构成,它们按图45所示的顺序配置。各指令群是由1个以上程序指令构成的程序指令群。

秘密保持程序2200是如下程序指令群,即:从调用源程序中接收2个输入值in_1、in_2、和执行该程序提供的功能处理时使用的参数,执行该程序提供的功能的处理。in_k(k是索引)是不足(7-k)的非负整数。这里,将选择对象数据设为2240~2246等7个,但不限于此。也可将选择对象数据的个数设为n+1个。这里,n为自然数。此时,in_k是不足(n+1-k)的非负整数。另外,输入值in_1、in_2的个数设为2个,但不限于此。也可以是m(m为n+1以下的自然数)个。

在秘密保持程序2200的处理中,使用后述的选择处理指令群2220的处理中使用的选择参数群的选择参数CP_1、CP_2与模数值NN、和保持后述的选择识别符的选择识别符用变量。

这里,设秘密保持程序2200在正常系统执行时从调用源程序中接收的输入值in_1、in_2为值‘2’、‘4’。本实施方式中提供的秘密保持程序2200是若使用从调用源程序中接收的值、则可按正确顺序执行(包含选择对象主要指令群的)选择对象数据的程序,是无法知道从调用源程序中接收的值的非法解析者难以知道(包含选择对象主要指令群的)选择对象数据的执行顺序的程序。

5.1.1预处理指令群2210

预处理指令群2210是设定选择处理指令群2220中使用的选择参数群的程序指令群。选择参数群由选择参数CP_1、选择参数CP_2与模数值NN构成。这些选择参数CP_1、CP_2是非负整数值,模数值NN是自然数。

预处理指令群2210是启动秘密保持程序2200时最初执行的程序指令群。由从调用源程序接收输入值in_1、in_2、预处理指令群2210将接收到的值分别存储在选择参数群的选择参数CP_1、选择参数CP_2中、将选择参数群的模数值NN设定为7的程序指令群,以及分支到选择处理指令群2220的程序指令群构成,是顺序执行这些程序指令群的程序指令群。在正常系统执行时,in_1、in_2为值‘2’、‘4’,预处理指令群2210执行在选择参数CP_1、CP_2中分别存储值‘2’、‘4’的处理。仅存在输入值in_1、in_2、...的个数(在本实施方式中为2个)的选择参数。另外,在本实施方式中,模数值的初始值与选择对象数据的数量一致,为7。

5.1.2选择处理指令群2220

选择处理指令群2220由使用选择参数群来算出选择识别符的程序指令群、和分支到变迁处理指令群530的程序指令群构成,是顺序执行这些程序指令群的程序指令群。选择识别符与第3实施方式一样,是变迁处理指令群530中使用的值。

在选择处理指令群2220算出选择识别符的处理中,首先,对选择参数群的选择参数CP_1、CP_2和模数值NN,设p1、p2为与NN互质的素数,算出式20‘p1×(选择参数CP_1)+p2×(选择参数CP_2)mod NN’,将算出结果设定成IND。在后面的说明中,IND表示选择识别符。这里,p1与NN互质表示p1与NN的最大公约数为1。另外,运算符‘×’表示乘法。接着,使用秘密处理装置3020具有的管理信息,选择未执行的选择对象数据中第IND个选择对象数据。将选择到的选择对象数据的序号存储在选择识别符用变量中。这里,选择对象数据的序号不是从1、而是从0开始顺序计数。因此,在选择对象数据2240未执行、IND=0的情况下,选择选择对象数据2240,选择识别符用变量变为0。

在本实施方式中,将p1、p2分别设为值‘1’、‘2’,将式20设为‘1×(选择参数CP_1)+2×(选择参数CP_2)mod NN’。

5.1.3选择对象数据2240~2246

选择对象数据2240~2246是当由变迁处理指令群530分支来时被执行的程序指令群。

选择对象数据2240~2246分别是由与第3实施方式一样的选择对象主要指令群550~556、与第3实施方式不同的更新处理指令群2260~2266和分支指令群2270~2276构成的程序指令群。

在本实施例中,当正常系统执行时,通过按选择对象主要指令群553、555、554的顺序执行,执行该秘密保持程序提供的功能的处理。即,在选择对象主要指令群553、555、554的每个中插入第3实施方式中的第1功能提供指令群、第2功能提供指令群、和第3功能提供指令群,设在选择对象主要指令群550、551、552、556中插入与第3实施方式一样的伪功能提供指令群。

(1)更新处理指令群2260~2266

更新处理指令群2260~2266是更新选择参数群的值的程序指令群。将选择参数CP_2的值代入选择参数CP_1中,将选择识别符用变量中存储的值代入选择参数CP_2中,将选择参数群的模数值递减。这里,选择参数的数量为2个,但在m个的情况下,将选择参数CP_m的值代入选择参数CP(m-1)中,将选择参数CP(m-1)的值代入选择参数CP(m-2)中,...,将选择参数CP_2的值代入选择参数CP_1中,将选择识别符用变量中存储的值代入选择参数CP_m中,将模数值递减。另外,在将模数值递减的情况下,递减后的模数值未必与p1、p2互质。

(2)分支指令群2270~2276

分支指令群2270~2276分别是分支到位于选择对象数据2240~2246以外的选择处理指令群520的程序指令群、或将控制返回到程序调用源的处理的程序指令群。包含第3功能提供指令群的选择对象数据2244中包含的分支指令群2274,是将控制返回到程序调用源的处理的程序指令群,其它选择对象数据中包含的分支指令群是分支到选择处理指令群520的程序指令群。

5.1.4动作

这里,用图24说明执行秘密保持程序2200时的秘密处理装置3020的动作与秘密处理装置60的动作的不同之处。

秘密处理装置3020的动作将图24所示的步骤S500、步骤S505、步骤S530的动作变更为以下的动作。

在本实施方式中,将步骤S500变更为除选择参数的初始化和预处理的执行外,还执行模数值NN的初始化。这里,模数值的初始值与选择对象数据的数量相同。

在本实施方式中,将步骤S505变更为取得选择参数群中包含的模数值NN,使用式20与取得的模数值NN,算出选择识别符。这里的NN不是选择对象数据的数量,而是模数值。

在本实施方式中,将步骤S530变更为除更新选择参数外,还将模数值递减。

(2)动作的具体例

下面,用图46来说明本实施方式中的秘密保持程序2200的动作的具体例。

这里,如上所述,在选择对象主要指令群553、555、554的每个中包含第1~第3功能提供指令群,在选择对象主要指令群550、551、552、556中包含伪功能提供指令群,在正常系统执行时,通过按选择对象主要指令群553、555、554的顺序执行,执行该秘密保持程序提供的功能的处理。

秘密保持程序2200执行预处理指令群2210的处理(步骤S3000)。具体而言,预处理指令群2210将值‘2’、‘4’存储在选择参数CP_1、CP_2的每个中,将值‘7’设定给模数值NN。

秘密保持程序2200执行选择处理指令群2220的处理(步骤S3005)。具体而言,选择处理指令群2220使用式20、选择参数CP_1(=2)、CP_2(=4)和模数值NN(=7),算出值IND。这里,算出的值IND为‘1×2+2×4 mod 7=3’。根据秘密处理装置3020具有的管理信息,选择未执行的选择对象数据(2240、2241、2242、2243、2244、2245、2246)中第3个选择对象数据2243。选择识别符用变量的值变为‘3’。

秘密保持程序2200执行管理信息更新指令群525的处理(步骤S3010)。具体而言,管理信息更新指令群525将对应于选择识别符用变量‘3’的选择对象数据2243的管理信息更新为已执行。

秘密保持程序2200执行变迁处理指令群530的处理(步骤S3015)。具体而言,变迁处理指令群530执行分支到对应于选择识别符用变量‘3’的选择对象数据2243的处理。

秘密保持程序2200执行选择对象数据2243中包含的选择对象主要指令群553的处理(步骤S3020)。具体而言,选择对象数据2243执行相当于程序提供的功能一部分——即第1功能提供指令群的处理。

秘密保持程序2200执行更新处理指令群2263的处理(步骤S3025)。具体而言,更新处理指令群2263将选择参数CP_2的值代入选择参数CP_1中,将选择识别符用变量的值代入选择参数CP_2中。这里,选择参数CP_1、CP_2各自的值为‘2’、‘4’的变为‘4’、‘3’。并且,将模数值NN递减。这里,模数值NN为‘7’的变为‘6’。

秘密保持程序2200执行分支指令群2273的处理(步骤S3030)。具体而言,分支指令群2273执行分支到选择处理指令群2220的处理。

秘密保持程序2200执行选择处理指令群2220的处理(步骤S3035)。具体而言,选择处理指令群2220使用式20、选择参数CP_1(=4)、CP_2(=3)和模数值NN(=6),算出值IND。这里,算出的值IND为‘1×4+2×3 mod 6=4’。根据秘密处理装置3020具有的管理信息,选择未执行的选择对象数据(2240、2241、2242、2244、2245、2246)中第4个选择对象数据2245。选择识别符用变量的值变为‘5’。

秘密保持程序2200执行管理信息更新指令群525的处理(步骤S3040)。具体而言,管理信息更新指令群525将对应于选择识别符用变量‘5’的选择对象数据2245的管理信息更新为已执行。

秘密保持程序2200执行变迁处理指令群530的处理(步骤S3045)。具体而言,变迁处理指令群530执行分支到对应于选择识别符用变量‘5’的选择对象数据2245的处理。

秘密保持程序2200执行选择对象数据2245中包含的选择对象主要指令群555的处理(步骤S3050)。具体而言,选择对象数据2245执行相当于程序提供的功能一部分——即第2功能提供指令群的处理。

秘密保持程序2200执行更新处理指令群2265的处理(步骤S3055)。具体而言,更新处理指令群2265将选择参数CP_2的值代入选择参数CP_1中,将选择识别符用变量的值代入选择参数CP_2中。这里,选择参数CP_1、CP_2各自的值为‘4’、‘3’的变为‘3’、‘5’。并且,将模数值NN递减。这里,模数值NN为‘6’的变为‘5’。

秘密保持程序2200执行分支指令群2275的处理(步骤S3060)。具体而言,分支指令群2275执行分支到选择处理指令群2220的处理。

秘密保持程序2200执行选择处理指令群2220的处理(步骤S3065)。具体而言,选择处理指令群2220使用式20、选择参数CP_1(=3)、CP_2(=5)和模数值NN(=5),算出值IND。这里,算出的值IND为‘1×3+2×5 mod 5=3’。根据秘密处理装置3020具有的管理信息,选择未执行的选择对象数据(2240、2241、2242、2244、2246)中第3个选择对象数据2244。选择识别符用变量的值变为‘4’。

秘密保持程序2200执行管理信息更新指令群525的处理(步骤S3070)。具体而言,管理信息更新指令群525将对应于选择识别符用变量‘4’的选择对象数据2244的管理信息更新为已执行。

秘密保持程序2200执行变迁处理指令群530的处理(步骤S3075)。具体而言,变迁处理指令群530执行分支到对应于选择识别符用变量‘4’的选择对象数据2244的处理。

秘密保持程序2200执行选择对象数据2244中包含的选择对象主要指令群554的处理(步骤S3080)。具体而言,选择对象数据2244执行相当于程序提供的功能的一部分——即第3功能提供指令群的处理。

秘密保持程序2200执行更新处理指令群2264的处理(步骤S3085)。具体而言,更新处理指令群2264将选择参数CP_2的值代入选择参数CP_1中,将选择识别符用变量的值代入选择参数CP_2中。这里,选择参数CP_1、CP_2各自的值为‘3’、‘5’的变为‘5’、‘4’。并且,将模数值NN递减。这里,模数值NN为‘5’的变为‘4’。

秘密保持程序2200执行分支指令群2274的处理(步骤S3090)。具体而言,分支指令群2274执行分支到秘密保持程序2200的调用源的处理。

4.2程序难破解化装置3010

程序难破解化装置3010如图47所示,由程序存储部800g、输入部801g、功能提供指令群生成部802g、伪功能提供指令群生成部803g、配置顺序确定部804g、管理指令群生成部805g、秘密保持程序生成部806g和输出部807g构成。

程序难破解化装置3010具体而言,是由微处理器、ROM、RAM、硬盘单元、显示器单元、键盘、鼠标等构成的计算机系统。在所述RAM或所述硬盘单元中存储计算机程序。这里,计算机程序为了实现规定的功能,组合多个表示对计算机的指令的指令代码来构成。通过所述微处理器根据所述计算机程序动作,程序难破解化装置3010实现其功能。即,所述微处理器1个个地读出所述计算机程序中包含的各指令,解读读出的指令,根据解读结果进行动作。

程序存储部800g、输入部801g、功能提供指令群生成部802g、伪功能提供指令群生成部803g、管理指令群生成部805g、秘密保持程序生成部806g和输出部807g分别与第3实施方式所示的程序存储部800、输入部801、功能提供指令群生成部802、伪功能提供指令群生成部803、管理指令群生成部805、秘密保持程序生成部806和输出部807一样,所以省略说明。

配置顺序确定部804与配置顺序确定部804g的不同之处在于用于求出选择识别符的计算式不同,和后者中计算式的模数值是变化的。

下面,说明配置顺序确定部804g。

配置顺序确定部804g未图示,但具有控制部850fg、选择处理部851g、管理信息更新部852g、更新处理部853g和管理信息保持部854g。这些构成要素的连接关系与图26所示的配置顺序确定部804的构成要素的连接关系一样。

配置顺序确定部804g通过使用选择参数的初始值与选择识别符的计算式,确认实际上按什么样的顺序算出选择识别符,由此确定应配置功能提供指令群和伪功能提供指令群的选择对象主要指令群。在本实施方式中,设由输入部801g接收选择参数的初始值,设选择参数CP_1~CP~2的初始值为‘2’、‘4’。

(1)管理信息保持部854g

管理信息保持部854g与管理信息保持部854一样,所以省略说明。下面,必要时,使用管理信息表格T800进行说明。

由此,可存储配置了功能提供指令群的位置(配置的选择对象数据)。

(2)控制部850g

控制部850g具有存储选择参数群的参数存储区域。

控制部850g将输入部801g接收到的选择参数的初始值CP_1和CP_2(这里分别为‘2’、‘4’)存储在参数存储区域中。

在处理开始时,控制部850g对模数值NN设定初始值‘7’,并存储在参数存储区域中。

控制部850g控制选择处理部851g、管理信息更新部852g和更新处理部853g的动作。

控制部850g执行选择处理部851g具有的式20可取的值、即由式20可取的选择识别符的值的每个、与程序存储部800g存储的选择对象数据之间的对应。

控制部850g从功能提供指令群生成部802g取得生成的第i个功能提供指令群。控制部850g根据选择处理部851g取得的选择识别符,将取得的第i个功能提供指令群插入程序存储部800g存储的对应的选择对象数据中。这里,i是1以上m以下的整数。另外,控制部850g暂时存储第i个功能提供指令群与插入目的地的选择对象数据之间的对应关系。

控制部850g从伪功能提供指令群生成部803g取得生成的多个伪功能提供指令群中、未插入到选择对象数据中的1个伪功能提供指令群。控制部850g将取得的伪功能提供指令群,插入到未插入第i功能提供指令群或伪功能提供指令群的1个选择对象数据中。控制部850g对全部伪功能提供指令群执行该动作。

由此,控制部850g可在各选择对象数据中插入第i功能提供指令群或伪功能提供指令群。

通过控制部850g取得第i个功能提供指令群的动作,可选择构成配置对象的功能提供指令群。

(3)选择处理部851g

选择处理部851g取得存储在参数存储区域中的选择参数CP_1、CP_2和模数值NN,使用取得的各值与式20,算出值IND。

选择处理部851g使用算出的值IND与管理信息表格T800,取得选择识别符。

下面说明选择识别符的取得方法。

选择处理部851g将管理信息表格T800中值为‘0’的从上位起依次设为第0个、第1个、...,取得与算出的IND的值一致的管理信息。选择处理部851g取得对应于取得的管理信息的选择对象数据的选择识别符。

通过选择处理部851的动作、和控制部850进行的根据选择处理部85 1取得的选择识别符将第i个功能提供指令群插入到选择对象数据中的动作,可将功能提供指令群配置到适当的配置目的地。

(4)管理信息更新部852g

管理信息更新部852g与管理信息更新部852一样,所以省略说明。

(5)更新处理部853g

更新处理部853g更新参数存储区域存储的选择参数CP_1、CP_2和模数值NN。

这里,更新处理部853g将选择参数CP_2的值代入选择参数CP_1中,将选择识别符用变量的值代入选择参数CP_2中,分别更新选择参数的值。更新处理部853g将更新后的选择参数CP_1和CP_2盖写到控制部850g的参数存储区域上。更新处理部853g将模数值NN递减,将其结果盖写到控制部850g的参数存储区域上。

5.3程序难破解化装置3010的动作

程序难破解化装置3010的动作通过将图27所示的步骤S620的处理置换为下示的配置确定处理,生成秘密保持程序。

5.3.1配置确定处理

这里,用图48所示的流程图来说明配置确定处理的动作。

控制部850g对计数器i设定‘1’,对模数值NN设定初始值‘7’,并将选择参数群中包含的选择参数CP_1、CP_2和模数值NN的各初始值‘2’、‘4’、‘7’存储到参数存储区域中。控制部850g执行选择识别符的值的每个与选择对象数据之间的对应(步骤S3500)。这里,计数器i表示当前着眼的功能提供指令群应第几个执行。即,这里,从第1功能提供指令群开始顺序确定配置顺序。

选择处理部851g取得参数存储区域中存储的CP_1、CP_2和模数值NN,使用取得的各值与式20,算出值IND。选择处理部851g使用算出的值IND与管理信息表格T800,取得选择识别符(步骤S3505)。例如,在选择参数CP_1~CP_2的值为‘2’、‘4’,模数值NN为‘7’的情况下,式20的值变为‘1×2+2×4 mod 7=3’。选择处理部851g从管理信息表格T800中,选择未执行的选择对象数据(2240、2241、2242、2243、2244、2245、2246)中第3个选择对象数据2243。选择识别符用变量的值变为‘3’。这里,所谓‘未执行’表示功能提供指令群未配置在选择对象数据中。另外,所谓‘已执行’表示功能提供指令群已配置在选择对象数据中。

控制部850g根据选择处理部851g取得的选择识别符,将第i个功能提供指令群插入到对应的选择对象数据中(步骤S3510)。例如,在cont=1、选择识别符的值为‘3’的情况下,将第1功能提供指令群配置在选择对象数据543中。

管理信息更新部852g将管理信息表格T800中包含的多个管理信息中、对应于选择处理部851g取得的选择识别符的管理信息,从值‘0’更新为值‘1’(步骤S3515)。例如,在选择识别符的值为‘3’的情况下,管理信息保持部854g的管理信息表格T800中,对应于选择对象数据543的管理信息从未配置变为已配置。

更新处理部853g更新参数存储区域存储的选择参数CP_1和CP_2,将更新结果盖写到参数存储区域上(步骤S3520)。更新方法如上所述,所以这里省略说明。例如,在选择参数CP_1和CP_2各自的值为‘2’、‘4’、选择识别符的值为‘3’的情况下,将选择参数CP_1和CP_2各自的值变为‘4’、‘3’。

更新处理部853g将模数值NN递减,将其结果盖写到参数存储区域上(步骤S3525)。

控制部850g将计数器i加上值‘1’(步骤S3530)。

控制部850g判定计数器i是否比功能提供指令群的个数大(步骤S3535)。

在判定为不大的情况下(步骤S3535为‘否’),控制部850g返回步骤S3505,控制选择处理部851g的动作。

在判定为大的情况下(步骤S3535为‘是’),控制部850g对多个伪功能提供指令群的每个确定配置目的地,使未插入功能提供指令群的1个以上选择对象数据之一变为配置目的地(步骤S3540)。例如,若选择对象数据540、541、542、544未执行,则将配置伪功能提供指令群的位置确定为这些选择对象数据,插入各伪提供指令群。

5.4变形例

(1)在上述第5实施方式中,秘密保持程序存储来自调用源的输入值,作为选择参数的初始值,但不限于此。秘密保持程序也可构成为将从网络上的其它设备取得的值代入选择参数的初始值,或构成为将程序执行装置执行了保持的其它程序的结果得到的输出值代入选择参数的初始值。

(2)在上述第5实施方式中,示出功能提供指令群为3个、伪功能提供指令群为4个的情况,但未必是该个数。功能提供指令群为多个、伪功能提供指令群为1个以上即可。

(3)在上述第5实施方式中,如上所述,以使用程序的程序执行装置的形式来实现秘密处理装置3020,但不限于此,也可执行硬件的安装。

(4)也可使上述实施方式和上述变形例分别组合。

5.5第5实施方式的效果

在本实施方式中,选择处理指令群2220仅从选择参数数据中、未执行的选择对象数据中,确定接着选择的选择对象数据。由此,知道难破解化对象数据不重复执行相同选择对象数据的非法解析者即便执行改变选择参数群的初始值的穷举搜索,也不会在代入任一初始值的情况下重复选择选择对象数据,难以根据是否重复来有效发现错误的初始值。

另外,在本实施方式中,利用输入值in_1、in_2,唯一选择选择对象数据。下面描述其理由。开始使用6以下的非负整数in_1(存在7种),选择7种选择对象数据2240~2246之一。接着使用5以下的非负整数in_2(存在6种),选择6种未执行的选择对象数据(从选择对象数据2040~2046中去除了以in_1选择的选择对象数据之后的选择对象数据)之一。由于输入的in_k(k=1、2)可取的种类与选择对象数据可选择的种类相同,所以这些选择使用in_1、in_2来唯一确定。因此,利用输入值in_1、in_2来唯一选择选择对象数据。通过如此唯一选择选择对象数据,对于输入值,选择对象数据的选择的变化不减少,不减少攻击者穷举攻击时的组合数。

6.变形例

上述说明的实施方式是本发明的实施一例,本发明不限于该实施方式,在不脱离其精神的范围内,可以各种方式来实施。例如,下面的情况也包含于本发明中。

(1)上述第3实施方式的选择处理指令群算出选择识别符的处理中,使用的式为式3‘p1×(选择参数CP_1)+p2×(选择参数CP_2)modNN’,但不限于此。该式只要满足在固定了选择参数CP_1的值时,选择参数CP_2的值与式的计算结果为1对1的条件即可。在式3中,若选择参数CP_2是不足NN的值,则由于p2与NN互质,所以若存在NN种可取的选择参数CP_2,则与之对应,p2×(选择参数CP_2)modNN也存在NN种。

另外,第5实施方式也一样,将选择识别符的计算式设为式20,但不限于此。例如,该式只要满足在固定了选择参数CP_1的值时,选择参数CP_2的值与式的计算结果为1对1的条件即可。

(2)在各实施方式的动作中,选择对象主要指令群与变迁处理指令群也可替换顺序。在第3实施方式中,更新处理指令群560~566为包含于选择对象数据540~546中的构成,但也可构成为在管理信息更新指令群525之后仅配置1个。另外,构成为选择处理指令群520、管理信息更新指令群525、变迁处理指令群530等3个指令群各为1个,但也可构成为配置所述3个指令群,代替各选择对象数据中包含的分支指令群570~576的每个。

另外,第4和第5实施方式也一样。

(3)各指令群未必是独立的指令群,也可构成为组合多个指令群提供的功能的部件。

(4)在第3、第4和第5实施方式中,采取在算出相当于已执行的选择对象数据的选择识别符的情况下,算出对应于未执行的选择识别符的最近的值的方法,但不限于该计算方法。例如,也可以是随机计算选择识别符、重复确认是否执行对应的选择对象数据的计算方法等。此时,非法解析者更难以解析。

(5)上述各实施方式和变形例中的功能提供指令群、伪功能提供指令群、管理指令群的生成顺序不限于上述顺序。各步骤只要在使用生成的各指令群生成秘密保持程序的步骤之前结束,则按什么样的顺序执行均无妨。例如,也可使伪功能提供指令群与功能提供指令群的生成顺序颠倒等。

(6)各实施方式的说明中例举的数值全部是一例,不限于该数值。例如,可进一步增加选择对象数据的数量或初始值的数量,或将初始值的数值设为其它数值。

通过增加初始值的数量,可进一步使解析变困难。

(7)在第1实施方式中,秘密保持程序包含1个以上伪功能提供指令群,但不限于此。

秘密保持程序也可不包含伪功能提供指令群。

另外,第3、第4和第5实施方式中也一样,秘密保持程序也可不包含伪功能提供指令群。

(8)在上述各实施方式的秘密处理装置或秘密保持程序中,均将分割程序后生成的指令群作为选择对象数据,但不限于此,只要是在按照某一顺序使用的情况下得到正当结果的信息均可。作为具体例,考虑在用多个加密密钥执行依照顺序的多重加密的情况下,将该加密密钥分别处理为选择对象数据。另外,秘密保持程序也一样。

(9)在上述各实施方式的秘密处理装置或秘密保持程序中,均采取接收选择参数的初始值、在内部更新该值的构成,但不限于此。具体而言,也可在秘密处理装置等的外部更新选择参数的值,秘密处理装置等接收更新后的值。另外,也可事先接收秘密处理装置执行的处理结束之前使用的选择参数全部,作为基于阵列的数据,执行依照该数据的动作。另外,秘密保持程序也一样。

(10)在第1实施方式中,作为选择识别符的算出方法,也可使用第3实施方式所示的方法、第4实施方式所示的方法和第5实施方式所示的方法之一。

(11)在上述第1实施方式中,程序难破解化装置10使用式1算出与块的配置位置相对应的值,但不限于此。

程序难破解化装置10也可使用算出配置了块的地址的算出式。此时,程序执行装置20使用所述算出式,算出接着执行的块的地址。

第3、第4和第5实施方式中也一样,程序难破解化装置也可使用算出配置了块的地址的算出式。

(12)本发明中的‘变量’不限于特定语言中的变量,也可以是寄存器、高速缓冲存储器、RAM、HDD等可改写的存储器中存储的内容、和用记载于这些存储器中的值指定的位置上存储的内容。

(13)在上述第1实施方式中,更新处理指令群配置在紧挨着选择对象主要指令群的后面,但不限于此。也可插入到选择对象主要指令群中。

这里,在紧挨着选择主要指令群中包含的1个以上程序指令群中位于最后的程序指令群的后面配置更新处理指令群,也称为插入到选择对象主要指令群中。

在紧挨着选择主要指令群中包含的1个以上程序指令群中位于最后的程序指令群的后面插入更新处理指令群,与配置在紧挨着选择对象主要指令群的后面的情况相同。

(14)在上述实施方式中,在更新选择参数的情况下,将上次算出的选择识别符本身代入选择参数中,但不限于此。

也可对算出的选择识别符实施运算,使用该运算结果,更新选择参数。例如,也可设A=(算出的选择识别符的值)+1,将A的值代入选择参数中。作为其它实例,也可设A=(算出的选择识别符的值)×3,将A的值代入选择参数中。

或者,也可代入表示之前2个选择的选择对象数据等、在过去某个时刻处理后的选择对象数据的选择识别符的值。即,只要反映表示过去选择的选择对象数据的选择识别符,则可以是任何代入方式。这里,所谓表示过去某个时刻处理后的选择对象数据的选择识别符,还包含表示当前选择的选择对象数据的选择识别符。

例如,也可使用表示上次算出的选择对象数据的选择识别符、与表示过去2次以上算出的选择对象数据的选择识别符,更新选择参数。具体而言,也可设A=(上次算出的选择识别符)+(2次之前算出的选择识别符),将A的值代入选择参数中。

(15)设本发明的指令群由1个以上的指令构成。即,本发明的指令群还包含由1个指令构成的情况。

(16)在上述第1实施方式中,使用多个选择参数全部,算出选择识别符,但不限于此。

也可使用多个选择参数中1个以上的选择参数来算出选择识别符。例如,也可以是在3个选择参数A、B、C中,当算出某个选择识别符时使用选择参数A、B,而当算出其它选择识别符时,使用选择参数A、C。

第2实施方式、第3实施方式、第4实施方式和第5实施方式中也一样,也可使用多个选择参数中1个以上的选择参数来算出选择识别符。

(17)在上述第2实施方式中,在各选择对象数据中存储1个数据,但不限于此。

各选择对象数据中存储的数据的个数也可是1个以上。

(18)在上述第2实施方式中,当更新选择参数时,将选择识别符的值代入更新对象的选择参数中,但不限于此。

也可对选择识别符的值实施运算,将其运算结果代入更新对象的选择参数中。例如,向选择识别符的值加上常数,将加法结果代入更新对象的选择参数中。

第3实施方式、第4实施方式和第5实施方式中也一样,也可对选择识别符的值实施运算,将其运算结果代入更新对象的选择参数中。

另外,在第2实施方式中,程序难破解化装置当生成秘密保持程序时,将秘密信息变换为秘密信息用变量,但不限于此。

也可变换为包含秘密信息用变量的运算式。例如,也可将秘密信息变换为秘密信息用变量与常数之和的运算式。

(19)构成上述各装置的构成要素的一部分或全部也可由一个系统LSI(Large Scale Integration:大规模集成电路)构成。系统LSI是在一个芯片上集成多个构成部制造的超多功能LSI,具体而言,是包含微处理器、ROM、RAM等构成的计算机系统。在所述RAM中存储计算机程序。通过所述微处理器根据所述计算机程序动作,系统LSI实现其功能。这里为系统LSI,但也可根据集成度的不同称为IC、LSI、超LSI、甚LSI。另外,集成电路化的方法不限于LSI,也可由专用电路或通用处理器来实现。也可利用在LSI制造后可编程的FPGA(Field Programmable Gate Array:现场可编程门阵列)或可再构成LSI内部的电路单元连接或设定的可重构处理器。

并且,如果因半导体技术的进步或派生的其它技术而出现置换LSI的集成电路化技术,则当然也可使用该技术来进行构成要素的集成化。可适应于生物技术等。

(20)构成上述各装置的构成要素的一部分或全部也可由可拆装于各装置上的IC卡或单体模块构成。所述IC卡或所述模块是由微处理器、ROM、RAM等构成的计算机系统。所述IC卡或所述模块也可包含上述超多功能LSI。通过微处理器根据计算机程序动作,所述IC卡或所述模块实现其功能。该IC卡或该模块也可具有耐篡改性。

(21)本发明也可以是上述所示的方法。另外,也可是由计算机来实现这些方法的计算机程序,或是由所述计算机程序构成的数字信号。

(22)另外,本发明也可将所述计算机程序或所述数字信号记录在计算机可读的记录媒体中,例如软盘、硬盘、CD-ROM、MO、DVD、DVD-ROM、DVD-RAM、BD(Blu-ray Disc:蓝光光盘)、半导体存储器等中。另外,也可以是记录在这些记录媒体中的所述数字信号。

(23)另外,本发明也可经由电气通信线路、无线或有线通信线路、以因特网为代表的网络、数据广播等来传输所述计算机程序或所述数字信号。

(24)另外,本发明也可以是具备微处理器与存储器的计算机系统,所述存储器存储上述计算机程序,所述微处理器根据所述计算机程序动作。

(25)另外,也可通过将所述程序或所述数字信号记录在所述记录媒体中移送,或经由所述网络等移送所述程序或所述数字信号,由独立的其它计算机系统来实施。

(26)也可组合这些实施方式及变形例。

产业上的可利用性

本发明的秘密处理装置、秘密保持程序由于在执行处理加密密钥等秘密信息的处理时使非法解析者的攻击变困难,所以在执行使用那些若向非法解析者泄漏则将导致不利的秘密信息的处理的装置等领域中有用。

另外,本发明的程序难破解化装置由于可将处理加密密钥等秘密信息的程序变换为更难以解析的形式,所以在执行使用那些若向非法解析者泄漏则将导致不利的秘密信息的处理的软件等领域中有用。

另外,上述所示的程序难破解化装置可在电器设备制造产业中经营地、并继续和反复地制造并出售。

权利要求书(按照条约第19条的修改)

1. (修改)一种根据原始程序生成秘密保持程序的程序变换装置,其特征在于:

程序取得部件,取得原始程序;

选择对象数据生成部件,生成多个选择对象数据,其中该多个选择对象数据通过按规定顺序进行处理、输出与所述原始程序相同的执行结果,并且对应了不同的选择识别符;

预处理指令群生成部件,生成将值代入多个选择参数的每个中的预处理指令群;

选择处理指令群生成部件,根据使用了所述多个选择参数的运算式,生成选择处理指令群,该选择处理指令群包含取得表示接着处理的选择对象数据的选择识别符的指令群;

更新处理指令群生成部件,生成更新处理指令群,该更新处理指令群使选择参数的值,反映表示过去处理的选择对象数据的选择识别符、或过去代入所述选择参数中的1个以上选择参数值中的至少1个选择参数值;和

秘密保持程序生成部件,生成包含所述预处理指令群、所述选择处理指令群、所述更新处理指令群、所述多个选择对象数据的秘密保持程序,该秘密保持程序重复进行执行所述选择处理指令群的处理、处理由所述选择处理指令群取得的选择识别符表示的选择对象数据的处理、和执行所述更新处理指令群的处理。

2. 根据权利要求1所述的程序变换装置,其特征在于:

所述规定顺序是向所述多个选择参数赋予规定的初始值、通过重复执行所述选择处理指令群和所述更新处理指令群、从而依次算出的选择识别符的顺序。

3. 根据权利要求2所述的程序变换装置,其特征在于:

所述多个选择对象数据的每个由1个以上的数据构成。

4. 根据权利要求3所述的程序变换装置,其特征在于:

所述原始程序具有应隐匿的秘密信息,

所述选择处理指令群生成部件生成选择处理指令群,该选择处理指令群由通过使用所述多个选择参数的第1运算式来算出所述选择识别符的指令群构成,

所述更新处理指令群生成部件生成更新处理指令群,该更新处理指令群根据由所算出的所述选择识别符表示的选择对象数据的值,更新所述多个选择参数,

所述程序变换装置还具备:

变迁处理指令群生成部件,生成变迁处理指令群,该变迁处理指令群利用使用了更新后的多个选择参数的第2运算式,算出与所述秘密信息相同的值,

所述秘密保持程序生成部件,将生成的变迁处理指令群配置在所述更新处理指令群的配置位置与所述秘密信息的配置位置之间,并置换成由所述变迁处理指令群算出所述秘密信息的处理。

5. 根据权利要求2所述的程序变换装置,其特征在于:

程序变换装置还具备分割部件,将所述原始程序分割成1个以上的块,

所述多个选择对象数据的每个包含不同的块。

6. 根据权利要求5所述的程序变换装置,其特征在于:

所述多个选择参数是从第1到第n的选择参数,

所述更新处理指令群生成部件生成更新处理指令群,该更新处理指令群对于所述多个选择对象数据的每个,将存储在第j-1选择参数中的值存储到第j选择参数,将常数值存储在第1选择参数中,其中j是2以上n以下的整数。

7. 根据权利要求6所述的程序变换装置,其特征在于:

所述选择对象数据的个数是由所述块的个数以上构成的规定数量,

所述运算式对所述第1到第n的选择参数的每个,算出Pi×第i选择参数,将算出的结果分别相加,对加法结果实施以所述规定数量为模数值N的模数运算,算出选择识别符,其中i是1以上n以下的整数,

Pi与模数值N互质。

8. 根据权利要求5所述的程序变换装置,其特征在于:

选择对象数据生成部件具备:

存储部,存储当前时刻之前由所述运算式算出的选择识别符的每个;

执行部,对1个块选择1个值,将存储在第j-1选择参数中的值存储到第j选择参数,将选择到的值存储在第1选择参数中,执行所述运算式,其中j是2以上n以下的整数;

判断部,判断与算出的算出值相同的选择识别符是否存储在所述存储部中;

存储部,在判断结果为否定的情况下,将所述选择到的1个值确定为对所述1个块的所述常数值,并将所述1个块存储在所算出的算出值表示的选择对象数据中;和

重复控制部,在判断结果为肯定的情况下,确定所述常数值,并进行控制,使得在1个块被存储在选择对象数据之前的期间中,重复所述执行部与所述判断部的处理,

对全部块执行所述选择对象数据生成部件的处理。

9. 根据权利要求5所述的程序变换装置,其特征在于:

所述选择处理指令群生成部件生成选择处理指令群,该选择处理指令群始终取得表示是未执行的选择对象数据的识别符。

10. 根据权利要求9所述的程序变换装置,其特征在于:

所述选择处理指令群生成部件生成选择处理指令群,该选择处理指令群使用表示对所述多个选择对象数据的每个是否已执行完的管理信息,取得表示是未执行的选择对象数据的识别符。

11. 据权利要求10所述的程序变换装置,其特征在于:

所述多个选择参数是从第1到第n的选择参数,

所述管理信息是表示对所述多个选择对象数据的每个,在当前时刻已执行完或未执行中的某一个的状态的排列表格,

所述选择对象数据的个数是由所述块的个数以上构成的规定数量,

所述选择处理指令群生成部件生成:

所述排列表格;

所述运算式,对所述第1到第n的选择参数的每个算出Pi×第i选择参数,将算出的结果分别相加,对加法结果实施以所述规定数量为模数值N的模数运算,算出表示包含接着应执行的块的选择对象数据的临时的选择识别符,其中i是1以上n以下的整数;和

取得程序指令群,在由所述算出式算出的所述临时的选择识别符所示的选择对象数据在所述排列表格中表示未执行的情况下,将所述临时的选择识别符设为表示包含接着应执行的块的选择对象数据的真选择识别符,在表示已执行完的情况下,根据取得未执行的选择对象数据之前事先确定的选择顺序,取得临时的选择识别符,

所述选择处理指令群包含所述排列表格、所述运算式、和所述取得程序指令群,

Pi与模数值N互质。

12. 根据权利要求11所述的程序变换装置,其特征在于:

所述更新处理指令群生成部件生成所述更新处理指令群,该更新处理指令群将存储在第j选择参数中的值存储到第j-1选择参数,将所述选择处理指令群取得的所述真选择识别符存储到第n变量,其中j是2以上n以下的整数。

13. 根据权利要求10所述的程序变换装置,其特征在于:

所述运算式是第1取得程序指令群,该第1取得程序指令群使用表示1个选择参数的索引,从所述多个选择参数中取得所述1个参数,

所述管理信息是排列表格,该排列表格对所述多个选择对象数据的每个,表示在当前时刻已执行完或未执行中的某一状态,

所述选择处理指令群生成部件生成:

所述第1取得程序指令群;

所述排列表格;和

第2取得程序指令群,根据表示所述排列表格中未执行的1个以上选择对象数据的选择识别符的排列顺序,取得按由所述取得程序指令群取得的参数值所示的顺序来配置的选择识别符,

所述选择处理指令群包含所述第1取得程序指令群、所述排列表格和所述第2取得程序指令群。

14. 根据权利要求13所述的程序变换装置,其特征在于:

所述更新处理指令群生成部件生成将所述索引值递增的所述更新处理指令群。

15. 根据权利要求10所述的程序变换装置,其特征在于:

所述选择对象数据的个数是由所述块的个数以上构成的规定数量,

所述多个选择参数是第1到第n的参数,

所述管理信息是排列表格,该排列表格对所述多个选择对象数据的每个,表示在当前时刻已执行完或未执行中的某一个的状态,

所述选择处理指令群生成部件生成:

所述排列表格;

所述运算式,对所述第1到第n的选择参数的每个算出Pi×第i选择参数,将算出的结果分别相加,对加法结果实施以所述规定数量为模数值N的模数运算,算出表示包含接着应执行的块的选择对象数据的值,其中i是1以上n以下的整数;和

取得程序指令群,根据在与所述排列表格相同的表格内、表示未执行的1个以上选择对象数据的选择识别符的排列顺序,取得按由所述运算式算出的所述值表示的顺序来配置的选择识别符,

所述选择处理指令群包含所述排列表格、所述运算式、和所述取得程序指令群。

16. 根据权利要求5所述的程序变换装置,其特征在于:

所述选择对象数据的个数是由所述块的个数以上构成的规定数量,

所述秘密保持程序生成部件还在所述多个块的每个包含于选择对象数据中之后,在未包含块的1个以上选择对象数据中,插入包含1个以上程序指令的伪块。

17. (修改)一种秘密处理装置,通过对确定了处理顺序的多个选择对象数据进行处理,执行应隐匿的秘密处理,其特征在于:

具备:

预处理执行部件,将值代入多个选择参数的每个中;

选择处理执行部件,根据使用了所述多个选择参数的运算式,取得表示接着处理的选择对象数据的选择识别符;

更新处理执行部件,使选择参数的值,反映表示过去处理的选择对象数据的选择识别符、或过去代入所述选择参数中的1个以上选择参数值中的至少1个选择参数值;和

选择对象数据执行部件,对由所述选择处理执行部件取得的选择识别符表示的选择对象数据进行处理,

在视为所述秘密保持程序结束之前,重复所述选择处理执行部件、更新处理执行部件、选择对象数据执行部件进行的处理。

18. 根据权利要求17所述的秘密处理装置,其特征在于:

所述多个选择对象数据的每个由1个以上的数据构成。

19. 根据权利要求18所述的秘密处理装置,其特征在于:

所述秘密处理是代替使用应隐匿的秘密信息、实施规定处理后算出所述秘密信息的处理,

所述选择处理执行部件利用使用了所述多个选择参数的运算式,算出所述选择识别符,

所述更新处理执行部件根据由所述选择识别符表示的选择对象数据的值,更新所述多个选择参数,

所述秘密处理装置还具备变迁处理执行部件,该变迁处理执行部件利用使用了更新后的多个选择参数的所述规定处理,算出与所述秘密信息相同的值。

20. 根据权利要求17所述的秘密处理装置,其特征在于:

所述秘密处理是由外部装置执行被分割成1个以上块的原始程序的处理,

所述块包含1个以上的程序指令,

所述多个选择对象数据的每个包含不同的块。

21.  根据权利要求20所述的秘密处理装置,其特征在于:

所述多个选择参数是从第1到第n的选择参数,

所述更新处理执行部件对于所述多个选择对象数据的每个,将存储在第j-1选择参数中的值存储到第j选择参数,将常数值存储在第1选择参数中,其中j是2以上n以下的整数,

所述常数值是所述外部装置在所述秘密保持程序生成时事先设定的值,以便使用所述运算式,算出表示接着执行的选择对象数据的选择识别符。

22. 根据权利要求21所述的秘密处理装置,其特征在于:

所述选择对象数据的个数是由所述块的个数以上构成的规定数量,

所述运算式对所述第1到第n的选择参数的每个,算出Pi×第i选择参数,将算出的结果分别相加,对加法结果实施以所述规定数量为模数值N的模数运算,算出选择识别符,其中i是1以上n以下的整数,

Pi与模数值N互质。

23. 根据权利要求20所述的秘密处理装置,其特征在于:

所述选择处理执行部件始终取得表示未执行的选择对象数据的识别符。

24. 根据权利要求23所述的秘密处理装置,其特征在于:

所述选择处理执行部件使用表示对所述多个选择对象数据的每个是否已执行完的管理信息,取得表示未执行的选择对象数据的识别符。

25. 根据权利要求24所述的秘密处理装置,其特征在于:

所述多个选择参数是第1到第n的选择参数,

所述选择对象数据的个数是由所述块的个数以上构成的规定数量,

所述管理信息是排列表格,该排列表格对所述多个选择对象数据的每个,表示在当前时刻已执行完或未执行中的某一个的状态,

所述选择处理执行部件保持所述排列表格,

所述运算式是如下运算式,即:对所述第1到第n的选择参数的每个算出Pi×第i选择参数,将算出的结果分别相加,对加法结果实施以所述规定数量为模数值N的模数运算,算出表示包含接着应执行的块的选择对象数据的临时的选择识别符,其中i是1以上n以下的整数;

所述选择处理执行部件在由所述算出式算出的所述临时的选择识别符所示的选择对象数据在所述排列表格中表示未执行的情况下,将所述临时的选择识别符设为表示包含接着应执行的块的选择对象数据的真选择识别符,在表示已执行完的情况下,根据取得未执行的选择对象数据之前事先确定的选择顺序,取得临时的选择识别符,

Pi与模数值N互质。

26. 根据权利要求25所述的秘密处理装置,其特征在于:

所述更新处理执行部件将存储在第j选择参数中的值存储到第j-1选择参数,将所述选择处理执行部件取得的所述真选择识别符存储到第n变量,其中j是2以上n以下的整数。

27. 根据权利要求24所述的秘密处理装置,其特征在于:

所述管理信息是排列表格,该排列表格对所述多个选择对象数据的每个,表示在当前时刻已执行完或未执行中的某一个的状态,

所述选择处理执行部件保持所述排列表格,并且包含:

第1取得部,执行所述运算式,该运算式使用表示1个选择参数的索引,从所述多个选择参数中取得所述1个选择参数;和

第2取得部,根据表示所述排列表格中未执行的1个以上选择对象数据的选择识别符的排列顺序,取得按由所述第1取得部取得的选择参数值所示的顺序来配置的选择识别符。

28. 根据权利要求27所述的秘密处理装置,其特征在于:

所述更新处理执行部件将所述索引的值递增。

29. 根据权利要求24所述的秘密处理装置,其特征在于:

所述选择对象数据的个数是由所述块的个数以上构成的规定数量,

所述多个选择参数是第1到第n的参数,

所述管理信息是排列表格,该排列表格对所述多个选择对象数据的每个,表示在当前时刻已执行完或未执行中的某一个的状态,

所述选择处理执行部件保持所述排列表格,

所述运算式是如下运算式,即:对所述第1到第n的选择参数的每个算出Pi×第i选择参数,将算出的结果分别相加,对加法结果实施以所述规定数量为模数值N的模数运算,算出表示包含接着应执行的块的选择对象数据的临时的选择识别符,其中i是1以上n以下的整数;

所述选择处理执行部件根据在与所述排列表格相同的表格内、表示未执行的1个以上选择对象数据的选择识别符的排列顺序,取得按由所述运算式算出的所述值表示的顺序来配置的选择识别符。

30. 根据权利要求20所述的秘密处理装置,其特征在于:

所述秘密处理是由所述外部装置执行根据所述原始程序生成的秘密保持程序的处理,

所述选择对象数据的个数是由所述块的个数以上构成的规定数量,

在不包含块的1个以上选择对象数据中,包含含有1个以上程序指令的伪块,

所述秘密保持程序包含从所述原始块分割出的各块、和1个以上的伪块。

31. (修改)一种根据原始程序生成秘密保持程序的程序变换装置中使用的变换方法,其特征在于:

该变换方法包含:

程序取得步骤,取得原始程序;

选择对象数据生成步骤,生成通过按规定顺序处理、输出与所述原始程序相同的执行结果、并对应了不同选择识别符的多个选择对象数据;

预处理指令群生成步骤,生成将值代入多个选择参数的每个中的预处理指令群;

选择处理指令群生成步骤,根据使用了所述多个选择参数的运算式,生成选择处理指令群,该选择处理指令群包含取得表示接着处理的选择对象数据的选择识别符的指令群;

更新处理指令群生成步骤,生成更新处理指令群,该更新处理指令群使选择参数的值,反映表示过去处理的选择对象数据的选择识别符、或过去代入所述选择参数中的1个以上选择参数值中的至少1个选择参数值;和

秘密保持程序生成步骤,生成包含所述预处理指令群、所述选择处理指令群、所述更新处理指令群、所述多个选择对象数据的秘密保持程序,该秘密保持程序重复进行执行所述选择处理指令群的处理、处理由所述选择处理指令群取得的选择识别符表示的选择对象数据的处理、和若处理所述选择对象数据则执行所述更新处理指令群的处理。

32. (修改)一种根据原始程序生成秘密保持程序的程序变换装置中使用的变换程序,其特征在于:

该变换程序包含:

程序取得步骤,取得原始程序;

选择对象数据生成步骤,生成通过按规定顺序处理、输出与所述原始程序相同的执行结果、并对应了不同选择识别符的多个选择对象数据;

预处理指令群生成步骤,生成将值代入多个选择参数的每个中的预处理指令群;

选择处理指令群生成步骤,根据使用了所述多个选择参数的运算式,生成选择处理指令群,该选择处理指令群包含取得表示接着处理的选择对象数据的选择识别符的指令群;

更新处理指令群生成步骤,生成更新处理指令群,该更新处理指令群使选择参数的值,反映表示过去处理的选择对象数据的选择识别符、或过去代入所述选择参数中的1个以上选择参数值中的至少1个选择参数值;和

秘密保持程序生成步骤,生成包含所述预处理指令群、所述选择处理指令群、所述更新处理指令群、所述多个选择对象数据的秘密保持程序,该秘密保持程序重复进行执行所述选择处理指令群的处理、处理由所述选择处理指令群取得的选择识别符表示的选择对象数据的处理、和执行所述更新处理指令群的处理。

33. 根据权利要求32所述的变换程序,其特征在于:

所述变换程序记录在计算机可读取的记录媒体中。

34. 一种秘密处理装置中使用的秘密处理方法,通过对确定了处理顺序的多个选择对象数据进行处理,执行应隐匿的秘密处理,其特征在于:

该秘密处理方法包含:

预处理执行步骤,将值代入多个选择参数的每个中;

选择处理执行步骤,根据使用了所述多个选择参数的运算式,取得表示接着处理的选择对象数据的选择识别符;

更新处理执行步骤,使选择参数的值,反映表示过去处理的选择对象数据的选择识别符、或过去代入所述选择参数中的1个以上选择参数值中的至少1个选择参数值;和

选择对象数据执行步骤,对所述选择处理执行步骤取得的选择识别符表示的选择对象数据进行处理。

35. 一种秘密处理装置中使用的秘密处理程序,执行包含确定了执行顺序的多个选择对象数据、且解析困难的秘密保持程序,其特征在于:

该秘密处理程序包含:

预处理执行步骤,将值代入多个选择参数的每个中;

选择处理执行步骤,根据使用了所述多个选择参数的运算式,取得表示接着处理的选择对象数据的选择识别符;

更新处理执行步骤,使选择参数的值,反映表示过去处理的选择对象数据的选择识别符、或过去代入所述选择参数中的1个以上选择参数值中的至少1个选择参数值;和

选择对象数据执行步骤,对所述选择处理执行步骤取得的选择识别符表示的选择对象数据进行处理。

36. 根据权利要求35所述的秘密处理程序,其特征在于:

所述秘密处理程序记录在计算机可读取的记录媒体中。

37. (修改)一种根据原始程序生成秘密保持程序的程序变换装置的集成电路,其特征在于:

该集成电路具备:

程序取得部件,取得原始程序;

选择对象数据生成部件,生成通过按规定顺序处理、输出与所述原始程序相同的执行结果、并对应了不同选择识别符的多个选择对象数据;

预处理指令群生成部件,生成将值代入多个选择参数的每个中的预处理指令群;

选择处理指令群生成部件,根据使用了所述多个选择参数的运算式,生成选择处理指令群,该选择处理指令群包含取得表示接着处理的选择对象数据的选择识别符的指令群;

更新处理指令群生成部件,生成更新处理指令群,该更新处理指令群使选择参数的值,反映表示过去处理的选择对象数据的选择识别符、或过去代入所述选择参数中的1个以上选择参数值中的至少1个选择参数值;和

秘密保持程序生成部件,生成包含所述预处理指令群、所述处理选择指令群、所述更新处理指令群、所述多个选择对象数据的秘密保持程序,该秘密保持程序重复进行执行所述处理选择指令群的处理、处理由所述选择处理指令群取得的选择识别符表示的选择对象数据的处理、和若处理所述选择对象数据则执行所述更新处理指令群的处理。

38. (修改)一种秘密处理装置的集成电路,通过对确定了处理顺序的多个选择对象数据进行处理,执行应隐匿的秘密处理,其特征在于:

该集成电路具备:

预处理执行部件,将值代入多个选择参数的每个中;

选择处理执行部件,根据使用了所述多个选择参数的运算式,取得表示接着处理的选择对象数据的选择识别符;

更新处理执行部件,使选择参数的值,反映表示过去处理的选择对象数据的选择识别符、或过去代入所述选择参数中的1个以上选择参数值中的至少1个选择参数值;和

选择对象数据执行部件,对由所述选择处理执行部件取得的选择识别符表示的选择对象数据进行处理,

在视为所述秘密保持程序结束之前,重复所述选择处理执行部件、更新处理执行部件、选择对象数据执行部件。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号