專利名稱:程序變換裝置、安全處理裝置、計(jì)算機(jī)程序及記錄媒體的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種在計(jì)算機(jī)系統(tǒng)上執(zhí)行處理秘密信息的程序時(shí)、使 機(jī)密性提高的技術(shù)。
背景技術(shù):
近年來(lái),就計(jì)算機(jī)系統(tǒng)而言,調(diào)試工具(debug)或ICE(In-Circuit Emulator:內(nèi)電路仿真器,注冊(cè)商標(biāo))等程序解析工具的功能充實(shí),使 用這些工具的程序的解析和改變變得容易。作為強(qiáng)化機(jī)密保護(hù)的技術(shù),例如提議如下方法,分割后加密化程 序,通過(guò)僅解密并執(zhí)行在執(zhí)行時(shí)所需的部分,將明文程序的收集和程 序的解析變困難,或如專利文獻(xiàn)1所述,分割成可并列執(zhí)行加密化計(jì) 算,難以清楚解析的方法。專利文獻(xiàn)1:日本特表2002-536911號(hào)公報(bào)但是,就使用秘密信息解密加密化數(shù)據(jù)的程序而言,如上所述, 即便分割、加密化程序,也由于在執(zhí)行時(shí)恢復(fù)該程序,解密密鑰等秘 密信息在程序執(zhí)行中出現(xiàn)在存儲(chǔ)器上,所以有可能利用解析工具取得 存儲(chǔ)器上的上述秘密信息。發(fā)明內(nèi)容鑒于上述問(wèn)題,本發(fā)明的目的在于提供一種程序變換裝置,能不 將秘密信息表示在存儲(chǔ)器上地執(zhí)行使用該秘密信息對(duì)加密化數(shù)據(jù)進(jìn) 行解密的程序,使程序執(zhí)行時(shí)的機(jī)密性提高。為了解決上述課題,本發(fā)明是一種程序變換裝置,具備程序存儲(chǔ)部件,存儲(chǔ)原程序,該原程序包含對(duì)被運(yùn)算信息執(zhí)行使用秘密信息的運(yùn)算的秘密運(yùn)算命令;分割秘密信息生成部件,使用所述秘密信息 與規(guī)定的結(jié)合運(yùn)算,生成若實(shí)施所述結(jié)合運(yùn)算則得到所述秘密信息的 多個(gè)分割秘密信息;分割運(yùn)算命令生成部件,對(duì)各個(gè)所述分割秘密信 息,生成用于執(zhí)行使用所述被運(yùn)算信息與該分割秘密信息的分割運(yùn)算 的分割運(yùn)算命令;結(jié)合命令生成部件,生成結(jié)合命令,該結(jié)合命令通 過(guò)使用所述結(jié)合運(yùn)算結(jié)合所述分割運(yùn)算命令的處理結(jié)果,從而算出與 所述秘密運(yùn)算命令相同的結(jié)果;和置換部件,將所述原程序中的所述 秘密運(yùn)算命令置換為所述分割運(yùn)算命令與所述結(jié)合命令。 發(fā)明效果本發(fā)明的程序變換裝置通過(guò)具備上述構(gòu)成,可在原程序中的所述 運(yùn)算中,使用多個(gè)所述分割秘密信息,代替使用所述秘密信息,并且, 生成執(zhí)行結(jié)果與原程序相同的程序。從而,在計(jì)算機(jī)系統(tǒng)上執(zhí)行所生成的程序的情況下,由于所述秘 密信息不出現(xiàn)在存儲(chǔ)器上,所以可防止所述秘密信息泄漏,可使程序 的機(jī)密性提高。另外,即便在分割秘密信息偶然為與秘密信息相同的值的情況 下,也由于對(duì)其它分割秘密信息也執(zhí)行同樣的運(yùn)算,所以難以了解該 分割秘密信息是與秘密信息相同的值。另外,所述結(jié)合運(yùn)算也可以是基于每比特的自雙反函數(shù)的運(yùn)算。另外,也可以是所述結(jié)合運(yùn)算是在輸入比特值全部為0時(shí)輸出0、 輸入比特值全部為1時(shí)輸出1的運(yùn)算。根據(jù)該構(gòu)成,可在原程序中的所述運(yùn)算中,使用多個(gè)所述分割秘 密信息,代替使用所述秘密信息,并且,生成執(zhí)行結(jié)果與原程序相同 的程序。從而,在計(jì)算機(jī)系統(tǒng)上執(zhí)行所生成的程序的情況下,由于所述秘 密信息不出現(xiàn)在存儲(chǔ)器上,所以可防止所述秘密信息泄漏,可使程序 的機(jī)密性提高。另外,即便在分割秘密信息偶然為與秘密信息相同的值的情況 下,也由于對(duì)其它分割秘密信息也執(zhí)行同樣的運(yùn)算,所以難以了解該 分割秘密信息是與秘密信息相同的值。這里,所謂自雙反函數(shù)(self-dual fimction)是將n(n為2以上的自 然數(shù))個(gè)變量xl、 x2.......xn設(shè)為輸入的n變量輸入函數(shù) f(xl,x2,…,xn),滿足 f(xl,x2,…,xn)-f( xl, ~x2,..., xn),艮P,在對(duì)提 供給函數(shù)f的各輸入值全部否定(NOT)的情況下,輸出為對(duì)原始輸入 值的輸出值的否定(NOT)。其中,是表示否定的符號(hào)。另外, 作為條件,設(shè)滿足f(0,0,...,0)=0,且f(l,l,…,l戶l。另外,也可以是所述秘密運(yùn)算命令執(zhí)行的運(yùn)算是每個(gè)比特的邏輯 運(yùn)算,所述分割運(yùn)算是與所述秘密運(yùn)算命令執(zhí)行的運(yùn)算相同的運(yùn)算, 所述結(jié)合命令是執(zhí)行與所述結(jié)合運(yùn)算相同的運(yùn)算的命令。根據(jù)該構(gòu)成,可在原程序中所述秘密運(yùn)算命令執(zhí)行的運(yùn)算、即每 個(gè)比特的邏輯運(yùn)算中,使用多個(gè)所述分割秘密信息,代替使用所述秘 密信息,并且,生成執(zhí)行結(jié)果與原程序相同的程序。另外,也可以是所述秘密運(yùn)算命令執(zhí)行的運(yùn)算,是所述被運(yùn)算信 息與所述秘密信息之間的按每個(gè)相同比特位置的運(yùn)算,所述分割秘密 信息生成部件,對(duì)所述秘密信息的每個(gè)比特位置,生成作為對(duì)該比特 位置的自雙反函數(shù)逆運(yùn)算結(jié)果的多個(gè)比特值,并將生成的多個(gè)比特值 的每個(gè)分配給多個(gè)分割秘密信息的該比特位置,所述分割運(yùn)算命令, 是對(duì)所述被運(yùn)算信息與所述分割秘密信息的每個(gè)相同比特位置執(zhí)行所述運(yùn)算的命令,所述結(jié)合命令是如下命令,即對(duì)于所述分割運(yùn)算分別算出的多個(gè)結(jié)果,對(duì)相同比特位置的比特值實(shí)施所述自雙反函 數(shù),并將其結(jié)果設(shè)為該比特位置的比特值,由此執(zhí)行所述結(jié)合的命令。 根據(jù)該構(gòu)成,可在原程序中所述秘密運(yùn)算命令執(zhí)行的運(yùn)算、即每 個(gè)比特的運(yùn)算中,使用多個(gè)所述分割秘密信息,代替使用所述秘密信 息,并且,生成執(zhí)行結(jié)果與原程序相同的程序。這里,所謂自雙反函數(shù)的逆運(yùn)算是對(duì)作為運(yùn)算對(duì)象的數(shù)據(jù)X、算 出滿足乂=^1^2,...,^)的^、 x2…xn并輸出的運(yùn)算。另夕卜,在存在 多個(gè)滿足X= f(xl,x2,…,xn)的(xl、 x2…xn)的組的情況下,從這些組 中隨機(jī)選出l組。另外,也可以是所述自雙反函數(shù)是將多個(gè)輸入值中的、占過(guò)半數(shù) 的輸入值輸出的多數(shù)決定函數(shù),所述分割秘密信息生成部件,預(yù)先保 持與自雙反函數(shù)相關(guān)的多個(gè)輸入值與對(duì)應(yīng)的輸出值之間的對(duì)應(yīng)表,對(duì) 于所述秘密信息的各個(gè)比特位置,從所述對(duì)應(yīng)表中讀出和與該比特位
置的比特值相同值的輸出值相對(duì)應(yīng)的多個(gè)輸入值,將所述多個(gè)輸入值 設(shè)為所述多個(gè)分割秘密信息的每個(gè)的該比特位置的比特值。根據(jù)該構(gòu)成,所述分割秘密信息生成部件在事先知道多數(shù)決定的 結(jié)果值的情況下,可確定多數(shù)決定的結(jié)果構(gòu)成所述結(jié)果值的多個(gè)值。 另外,由于向多個(gè)所述分割秘密信息的相同比特位置分配所確定的多 個(gè)所述值的每個(gè),所以可生成各自難以從所述秘密信息推定出的多個(gè) 分割秘密信息。另外,所述程序變換裝置還包含存儲(chǔ)不同的多個(gè)自雙反函數(shù)的運(yùn) 算存儲(chǔ)部件,所述分割秘密信息生成部件從存儲(chǔ)在所述運(yùn)算存儲(chǔ)部件 中的自雙反函數(shù)中隨機(jī)選出自雙反函數(shù),作為所述結(jié)合運(yùn)算。根據(jù)該構(gòu)成,由于所述程序變換裝置可生成使用從多個(gè)中選出的 自雙反函數(shù)的程序,所以可使非法解析更加困難,可使程序的機(jī)密性 提高。另外,也可以是所述置換部件還在不影響程序的執(zhí)行結(jié)果的范圍 內(nèi),重新排列各個(gè)所述分割運(yùn)算命令與所述結(jié)合運(yùn)算命令。另外,也可以是所述置換部件還在不影響程序執(zhí)行結(jié)果的范圍 內(nèi),使重新排列后的各運(yùn)算命令的配置分散。另外,也可以是所述置換部件還在不影響程序執(zhí)行結(jié)果的范圍 內(nèi),追加偽運(yùn)算處理。根據(jù)該構(gòu)成,與執(zhí)行原程序中的秘密運(yùn)算的部位相比,由于生成 處理擴(kuò)散到多個(gè)部位的程序,所以可使非法解析更加困難,可使程序 的機(jī)密性提高。本發(fā)明的程序變換方法對(duì)原程序進(jìn)行變換,該原程序包含對(duì)被運(yùn) 算信息執(zhí)行使用秘密信息的運(yùn)算的秘密運(yùn)算命令,該方法包含分割 秘密信息生成步驟,使用所述秘密信息與規(guī)定的結(jié)合運(yùn)算,生成若實(shí) 施所述結(jié)合運(yùn)算則得到所述秘密信息的多個(gè)分割秘密信息;分割運(yùn)算命令生成步驟,對(duì)各個(gè)所述分割秘密信息,生成用于執(zhí)行使用所述被運(yùn)算信息與該分割秘密信息的分割運(yùn)算的分割運(yùn)算命令;結(jié)合命令生 成步驟,生成結(jié)合命令,該結(jié)合命令通過(guò)使用所述結(jié)合運(yùn)算結(jié)合所述 分割運(yùn)算命令的處理結(jié)果,從而算出與所述秘密運(yùn)算命令相同的結(jié)
果;和置換步驟,將所述原程序中的所述秘密運(yùn)算命令置換為所述分 割運(yùn)算命令與所述結(jié)合命令。本發(fā)明的計(jì)算機(jī)程序,在程序變換裝置中使用,該程序變換裝置 對(duì)原程序進(jìn)行變換,該原程序包含對(duì)被運(yùn)算信息執(zhí)^1使用秘密信息的 運(yùn)算的秘密運(yùn)算命令,該計(jì)算機(jī)程序包含分割秘密信息生成步驟, 使用所述秘密信息與規(guī)定的結(jié)合運(yùn)算,生成若實(shí)施所述結(jié)合運(yùn)算則得 到所述秘密信息的多個(gè)分割秘密信息;分割運(yùn)算命令生成步驟,對(duì)各 個(gè)所述分割秘密信息,生成用于執(zhí)行使用所述被運(yùn)算信息與該分割秘 密信息的分割運(yùn)算的分割運(yùn)算命令;結(jié)合命令生成步驟,生成結(jié)合命 令,該結(jié)合命令通過(guò)使用所述結(jié)合運(yùn)算結(jié)合所述分割運(yùn)算命令的處理 結(jié)果,從而算出與所述秘密運(yùn)算命令相同的結(jié)果;和置換步驟,將所 述原程序中的所述秘密運(yùn)算命令置換為所述分割運(yùn)算命令與所述結(jié) 合命令。本發(fā)明的集成電路,在程序變換裝置中使用,該程序變換裝置對(duì) 原程序進(jìn)行變換,該原程序包含對(duì)被運(yùn)算信息執(zhí)行使用秘密信息的運(yùn) 算的秘密運(yùn)算命令,該集成電路具備分割秘密信息生成部件,使用 所述秘密信息與規(guī)定的結(jié)合運(yùn)算,生成若實(shí)施所述結(jié)合運(yùn)算則得到所 述秘密信息的多個(gè)分割秘密信息;分割運(yùn)算命令生成部件,對(duì)各個(gè)所 述分割秘密信息,生成用于執(zhí)行使用所述被運(yùn)算信息與該分割秘密信 息的分割運(yùn)算的分割運(yùn)算命令;結(jié)合命令生成部件,生成結(jié)合命令, 該結(jié)合命令通過(guò)使用所述結(jié)合運(yùn)算結(jié)合所述分割運(yùn)算命令的處理結(jié) 果,從而算出與所述秘密運(yùn)算命令相同的結(jié)果;和置換部件,將所述 原程序中的所述秘密運(yùn)算命令置換為所述分割運(yùn)算命令與所述結(jié)合 命令。本發(fā)明的記錄媒體,是存儲(chǔ)了程序變換裝置中使用的計(jì)算機(jī)程序 的計(jì)算機(jī)可讀取記錄媒體,該程序變換裝置對(duì)原程序進(jìn)行變換,該原 程序包含對(duì)被運(yùn)算信息執(zhí)行使用秘密信息的運(yùn)算的秘密運(yùn)算命令,所 述計(jì)算機(jī)程序包含分割秘密信息生成步驟,使用所述秘密信息與規(guī) 定的結(jié)合運(yùn)算,生成若實(shí)施所述結(jié)合運(yùn)算則得到所述秘密信息的多個(gè) 分割秘密信息;分割運(yùn)算命令生成步驟,對(duì)各個(gè)所述分割秘密信息,
生成用于執(zhí)行使用所述被運(yùn)算信息與該分割秘密信息的分割運(yùn)算的分割運(yùn)算命令;結(jié)合命令生成步驟,生成結(jié)合命令,該結(jié)合命令通過(guò) 使用所述結(jié)合運(yùn)算結(jié)合所述分割運(yùn)算命令的處理結(jié)果,從而算出與所 述秘密運(yùn)算命令相同的結(jié)果;和置換步驟,將所述原程序中的所述秘 密運(yùn)算命令置換為所述分割運(yùn)算命令與所述結(jié)合命令。根據(jù)該構(gòu)成,可在原程序中的所述運(yùn)算中,使用多個(gè)所述分割秘 密信息,代替使用所述秘密信息,并且,生成執(zhí)行結(jié)果與原程序相同 的程序。從而,在計(jì)算機(jī)系統(tǒng)上執(zhí)行所生成的程序的情況下,由于所述秘 密信息不出現(xiàn)在存儲(chǔ)器上,所以可防止秘密信息泄漏,可使程序的機(jī) 密性提高。另外,即便在分割秘密信息偶然為與秘密信息相同的值的情況 下,也由于對(duì)其它分割秘密信息也執(zhí)行同樣的運(yùn)算,所以難以了解該 分割秘密信息是與秘密信息相同的值。本發(fā)明的安全處理裝置,具備被運(yùn)算信息保持部件,保持被運(yùn) 算信息;分割秘密信息保持部件,保持多個(gè)分割秘密信息;結(jié)合運(yùn)算 式保持部件,保持表示結(jié)合所述多個(gè)分割秘密信息的結(jié)合運(yùn)算的結(jié)合 運(yùn)算式;分割運(yùn)算部件,對(duì)所述多個(gè)分割秘密信息的每個(gè),實(shí)施對(duì)所 述被運(yùn)算信息使用該分割秘密信息的第1運(yùn)算、即分割運(yùn)算;和結(jié)合 部件,使用所述結(jié)合運(yùn)算,對(duì)所述多個(gè)分割運(yùn)算的結(jié)果進(jìn)行結(jié)合,所 述結(jié)合部件使用所述結(jié)合運(yùn)算對(duì)所述分割運(yùn)算的結(jié)果進(jìn)行結(jié)合,以使 得結(jié)合的結(jié)果與使用通過(guò)所述結(jié)合運(yùn)算結(jié)合所述多個(gè)分割秘密信息 時(shí)得到的秘密信息、對(duì)所述被運(yùn)算信息實(shí)施第2運(yùn)算的結(jié)果相同。本發(fā)明的計(jì)算機(jī)程序,具備被運(yùn)算信息、多個(gè)分割秘密信息、和 可結(jié)合所述多個(gè)分割秘密信息的結(jié)合運(yùn)算式,該計(jì)算機(jī)程序具有分 割運(yùn)算步驟,對(duì)所述多個(gè)分割秘密信息的每個(gè),實(shí)施對(duì)所述被運(yùn)算信 息使用該分割秘密信息的第1運(yùn)算、即分割運(yùn)算;和結(jié)合步驟,使用 所述結(jié)合運(yùn)算,對(duì)所述多個(gè)分割運(yùn)算步驟的結(jié)果進(jìn)行結(jié)合,所述結(jié)合 步驟使用所述結(jié)合運(yùn)算對(duì)所述分割運(yùn)算步驟的結(jié)果進(jìn)行結(jié)合,以使得 結(jié)合的結(jié)果與使用通過(guò)所述結(jié)合運(yùn)算結(jié)合所述多個(gè)分割秘密信息時(shí)得到的秘密信息、對(duì)所述被運(yùn)算信息實(shí)施第2運(yùn)算的結(jié)果相同。 另外,也可以是所述第1運(yùn)算與所述第2運(yùn)算為相同運(yùn)算。 根據(jù)該構(gòu)成,可通過(guò)使用多個(gè)所述分割秘密信息的運(yùn)算,代替使用所述秘密信息的運(yùn)算,得到與使用所述秘密信息的運(yùn)算相同的執(zhí)行結(jié)果。從而,由于所述秘密信息不出現(xiàn)在存儲(chǔ)器上,所以可防止秘密信 息泄漏,可使機(jī)密性提高。另外,即便在分割秘密信息偶然為與秘密信息相同的值的情況 下,也由于對(duì)其它分割秘密信息也執(zhí)行同樣的運(yùn)算,所以難以了解該 分割秘密信息是與秘密信息相同的值。
圖1是表示本發(fā)明的程序變換裝置處理的程序的一例的圖。 圖2是表示本發(fā)明一實(shí)施方式的執(zhí)行程序生成裝置的內(nèi)部構(gòu)成 的框圖。圖3是表示自雙反函數(shù)一例的圖。圖4是表示自雙反函數(shù)一例的圖。圖5是表示自雙反函數(shù)一例的圖。圖6是表示分割秘密信息的生成處理的流程圖。圖7是表示程序變換處理的流程圖。圖8是表示本發(fā)明的程序變換裝置處理的程序的一例的圖。 圖9是表示本發(fā)明一實(shí)施方式的執(zhí)行程序生成裝置的內(nèi)部構(gòu)成 的框圖。圖10是表示函數(shù)fimc()的處理步驟的流程圖。圖11是表示變形例的信息處理執(zhí)行裝置的構(gòu)成的框圖。符號(hào)說(shuō)明10執(zhí)行程序生成裝置 11輸入部 12程序保持部 13變換程序生成部14執(zhí)行程序生成部 101秘密運(yùn)算指定部 102分割秘密信息生成部 103程序取得部 104分割數(shù)指定部 105結(jié)合函數(shù)保持部 106程序變換部 107結(jié)合函數(shù)生成部 1101秘密運(yùn)算指定部 1107結(jié)合函數(shù)生成部 1106程序變換部 1300變換程序生成部具體實(shí)施方式
<第1實(shí)施方式> <概要>本發(fā)明一實(shí)施方式的執(zhí)行程序生成裝置對(duì)用戶制作的、包含使用 解密密鑰解密加密化數(shù)據(jù)這樣的要求隱匿性的處理的程序,執(zhí)行在執(zhí) 行時(shí)所述解密密鑰不出現(xiàn)在存儲(chǔ)器上等使隱匿性提高的變換處理,編 譯所述變換處理后的程序,生成難以非法解析的執(zhí)行程序。用戶制作的程序,作為一例,是使用作為秘密信息的解密密鑰對(duì) 加密化的音樂(lè)數(shù)據(jù)或視頻數(shù)據(jù)等內(nèi)容進(jìn)行解密并再現(xiàn)的播放器程序, 如圖1所示的程序601所示,根據(jù)C語(yǔ)言等規(guī)定的程序語(yǔ)言標(biāo)準(zhǔn)來(lái)制 作。下面,以程序601為例繼續(xù)說(shuō)明。程序601由多個(gè)行的文本構(gòu)成。下面將文本的各行稱為代碼。 程序601包含請(qǐng)求秘密信息處理隱匿性的代碼611 Mata2-f一xor(datal,KEY);'。代碼611是解密上述加密化數(shù)據(jù)或其 一部分并存儲(chǔ)解密結(jié)果的運(yùn)算一例。 datal是變量,是解密的對(duì)象數(shù)據(jù)。
KEY是埋入程序中的常量,是用于解密數(shù)據(jù)的解密密鑰。 函數(shù)f一xor(A,B)將8比特的自變量A與B各位置的異或設(shè)為返回 值的該位置的值。這里,從8比特的最低位位置起,順序稱為比特0、 比特l、比特2、...比特7,將變量X的第j比特的值記載為X:j。另 外,將16進(jìn)制數(shù)記載為OxY。 0x表示該數(shù)是16進(jìn)制數(shù)。OxF表示 10進(jìn)制數(shù)的15, OxFF表示10進(jìn)制的255。fjcor(A,B)具體而言,是對(duì)自變量A、自變量B各自的比特O, 算出異或(XOR),將算出結(jié)果設(shè)為返回值的比特O,對(duì)自變量A、自 變量B各自的比特1,算出XOR,將算出結(jié)果設(shè)為返回值的比特l, 比特2 比特7也執(zhí)行同樣的處理,從而計(jì)算8比特的返回值。例如, 在datal=0x03、 KEY=0x03的情況下,^xor(datal,KEY)的返回值為 0x00。這里,由于對(duì)[XOT(A,B)的自變量A、 B的各位置獨(dú)立地進(jìn)行異 或處理,所以A、 B也可以是8比特以外的、例如1024比特、2048 比特等,此時(shí),只要連結(jié)對(duì)1024比特、2048比特等各位置的異或的 算出結(jié)果即可。另外,自變量A、B為1比特長(zhǎng)、即datal與KEY均 為1比特長(zhǎng)的情況下,代碼611與'data2-datarKEY;'相同。這里, "'是表示XOR的運(yùn)算符。另外,若A、 B為2比特長(zhǎng),則data2-f一xor(datal,KEY)與將基 于下述兩個(gè)公式的處理記載于程序601中相同。data2:l=datal:lAKEY:l;data2:0-datal :(TKEY:0;原樣編譯程序601,生成執(zhí)行程序,若在計(jì)算機(jī)上執(zhí)行,則當(dāng)計(jì) 算機(jī)執(zhí)行執(zhí)行程序的對(duì)應(yīng)于代碼611的部分時(shí),由于在存儲(chǔ)器上會(huì)出 現(xiàn)解密密鑰KEY,所以若用調(diào)試工具或ICE(In-Circuit Emulator,注冊(cè)商標(biāo))等解析工具解析正在執(zhí)行執(zhí)行程序的存儲(chǔ)器上的數(shù)據(jù),則可 得到解密密鑰KEY的立即值(immediate value)。本發(fā)明的執(zhí)行程序生成裝置作為一例,從程序601暫時(shí)生成圖1 所示的程序605,編譯程序605,生成執(zhí)行程序。程序605的細(xì)節(jié)如后所述,程序601中的代碼611在程序605中
被分為多個(gè)代碼612、代碼613、代碼614、代碼615,若執(zhí)行代碼 612、代碼613、代碼614、代碼615,則執(zhí)行與代碼611相同內(nèi)容的 處理。用戶制作的程序中,如上所述,將變換為相同內(nèi)容處理的程序稱 為變換程序。所述程序605是變換程序。另外,即便在計(jì)算機(jī)上執(zhí)行從程序605生成的執(zhí)行程序,也由于 在存儲(chǔ)器上不出現(xiàn)解密密鑰KEY的立即值,得到與使用KEY的運(yùn)算 相同的結(jié)果,所以可避免因非法解析而使密鑰容易曝露。<構(gòu)成>下面,參照附圖來(lái)說(shuō)明作為本發(fā)明一實(shí)施方式的執(zhí)行程序生成裝執(zhí)行程序生成裝置10如圖2所示,包含輸入部11、程序保持部 12、變換程序生成部13、執(zhí)行程序生成部14來(lái)構(gòu)成。執(zhí)行程序生成裝置10具體而言,是由微處理器、ROM、 RAM、 硬盤(pán)單元、顯示器單元、鍵盤(pán)、鼠標(biāo)等構(gòu)成的計(jì)算機(jī)系統(tǒng)。所述RAM 或所述硬盤(pán)單元中存儲(chǔ)計(jì)算機(jī)程序。通過(guò)所述微處理器根據(jù)所述計(jì)算 機(jī)程序動(dòng)作,執(zhí)行程序生成裝置10實(shí)現(xiàn)其功能。<輸入部11、程序保持部12、執(zhí)行程序生成部14>輸入部ll受理用戶使用鍵盤(pán)、鼠標(biāo)(未圖示)等輸入裝置輸入的、 對(duì)執(zhí)行程序生成裝置10的指示,向?qū)?yīng)于所述指示內(nèi)容的處理部發(fā) 送所述指示。程序保持部12是硬盤(pán)等存儲(chǔ)裝置,保持用戶制作的程序。程序 保持部12作為一例,保持程序601。執(zhí)行程序生成部14由CPU和編譯器構(gòu)成,將由變換程序生成部 13生成的變換程序變換為計(jì)算機(jī)可執(zhí)行的程序。<變換程序生成部13>變換程序生成部13由CPU及其控制程序構(gòu)成,將用戶制作的程 序變換為變換程序。變換程序生成部13如圖2所示,包含秘密運(yùn)算指定部101、分 割秘密信息生成部102、程序取得部103、分割數(shù)指定部104、結(jié)合 函數(shù)保持部105、程序變換部106和結(jié)合函數(shù)生成部107來(lái)構(gòu)成。 (程序取得部103)程序取得部103若從輸入部11接收應(yīng)變換程序的取得指示,則 從程序保持部12中讀出由所述取得指示表示的程序,顯示于顯示器 (未圖示)中。這里,設(shè)所述取得指示包含記錄了應(yīng)變換程序的文件名。作為一例,程序取得部103從輸入部11接收包含記錄了程序601 的文件名的取得指示,從程序保持部12中讀出記錄在由所述文件名 識(shí)別的文件中的程序601,顯示于所述顯示器中。(秘密運(yùn)算指定部101)秘密運(yùn)算指定部101從輸入部11取得用于確定程序中的秘密信 息的信息、即秘密確定信息,并將所述秘密確定信息輸出到分割秘密 信息生成部102。作為一例,所述秘密確定信息包含表示包含秘密信息的代碼(例 如代碼611)的位置的秘密位置信息、所述秘密信息。例如,所述秘密位置信息是程序601中代碼611的行序號(hào),秘密 信息是'KEY,。作為具體取得步驟的一例,用戶在觀察程序取得部103顯示于顯 示器中的程序601的同時(shí),搜索包含秘密信息、希望提高隱匿性的代 碼(例如代碼611),為了指示所述秘密信息,向輸入部ll輸入所述秘 密確定信息。秘密運(yùn)算指定部101經(jīng)輸入部11取得輸入的所述秘密 確定信息。(分割數(shù)指定部104)分割數(shù)指定部104經(jīng)輸入部11取得用戶輸入的分割數(shù),將該分 割數(shù)輸出到結(jié)合函數(shù)生成部107。所述分割數(shù)表示將所述秘密信息分割成幾個(gè)分割秘密信息。 秘密信息的分割及分割秘密信息如后所述。 (結(jié)合函數(shù)保持部105)結(jié)合函數(shù)保持部105是硬盤(pán)等存儲(chǔ)裝置,保持1個(gè)以上的結(jié)合函、yf 數(shù)o結(jié)合函數(shù)是結(jié)合多個(gè)分割秘密信息、生成秘密信息用的函數(shù)。
結(jié)合函數(shù)保持部105保持結(jié)合函數(shù)f()。在第1實(shí)施方式中,作為f()的一例,設(shè)保持結(jié)合函數(shù) f一major(Pl,P2,P3)。flmajor(Pl,P2,P3)對(duì)8比特的自變量Pl、 P2、 P3的各位置執(zhí)行 多數(shù)決定運(yùn)算(majority operation),將該多數(shù)決定結(jié)果設(shè)為返回值的對(duì) 應(yīng)位置的值。圖3示出作為執(zhí)行所述多數(shù)決定運(yùn)算的函數(shù)f0的一例的函數(shù)401。函數(shù)401是在x、 y、 z中半數(shù)以上、即2個(gè)以上為值1的情況下、 輸出1的多數(shù)決定運(yùn)算。函數(shù)401若輸入x、 y、 z等3個(gè)數(shù),則根據(jù)圖3中的真值表402, 輸出結(jié)合結(jié)果。例如,若向函數(shù)401輸入乂=0、 y=0、 z=0,則根據(jù)真值表402, 輸出0,若輸入xi、 y=l、 z=l,則根據(jù)真值表402,輸出1。例如,f—major(0x03,0x03,0x02)對(duì)于Pl=0x03、P2=0x03、P3=0x02, 將以Pl的比特0的值l為x、以P2的比特0的值l為y、以P3的比 特0的值0為z的f(l,l,0)=l,設(shè)為f—majorO的返回值的比特0。同樣,將以Pl的比特1的值1為x、以P2的比特1的值1為y、 以P3的比特1的值1為z的f(l,l,l)=l,設(shè)為f一major()的返回值的比 特l,對(duì)比特2 比特7也同樣處理,計(jì)算8比特的返回值,返回返 回值。Lmajor(Pl,P2,P3)也與上述f—xor(A,B)—樣,對(duì)P1、 P2、 P3的各 位置獨(dú)立地進(jìn)行多數(shù)決定運(yùn)算處理,所以P1、 P2、 P3也可以是8比 特以外的、例如1024比特、2048比特等,此時(shí),也只要連結(jié)對(duì)1024 比特、2048比特等各位置的多數(shù)決定運(yùn)算的算出結(jié)果即可。另外, 自變量Pl、 P2、 P3為1比特長(zhǎng)的情況下,Mata2= f_major(Pl,P2,P3), 與<data2=f(Pl,P2,P3),相同。結(jié)合函數(shù)保持部105還保持函數(shù)^major0以外的函數(shù),作為結(jié)合 函數(shù)。例如,與f一major()一樣,有對(duì)輸入的自變量的各位置適用圖4
所示的函數(shù)421的函數(shù)、或?qū)斎氲淖宰兞康母魑恢眠m用圖5所示的 函數(shù)441的函數(shù)等。這里,函數(shù)401、函數(shù)421、函數(shù)441中的記號(hào)Y表示邏輯或, 記號(hào)'&,表示邏輯與。圖4中示出作為函數(shù)f一例的函數(shù)421與其真值表422,圖5示 出作為函數(shù)f—例的函數(shù)441與其真值表441。函數(shù)421、函數(shù)441中的記號(hào)<~,表示否定的邏輯運(yùn)算。圖4、圖5與圖3的說(shuō)明重復(fù),所以省略詳細(xì)說(shuō)明。(結(jié)合函數(shù)生成部107)結(jié)合函數(shù)生成部107若從分割數(shù)指定部104接收所述分割數(shù),則 從結(jié)合函數(shù)保持部105中保持的結(jié)合函數(shù)中,隨機(jī)選擇一個(gè)適于所述 分割數(shù)的結(jié)合函數(shù)中的一個(gè)。在分割數(shù)為3個(gè)的情況下,選擇結(jié)合函數(shù)保持部105中保持的結(jié) 合函數(shù)中、具備3輸入的函數(shù),作為一例,選擇結(jié)合函數(shù)f一major()。結(jié)合函數(shù)生成部107在執(zhí)行所述選擇之后,將涉及選擇到的函數(shù) 的信息、即確定密鑰分割方法的信息、例如作為表示 <多數(shù)決定'的 信息的分割方法信息,以及所述分割數(shù),輸出到分割秘密信息生成部 102,將選擇到的結(jié)合函數(shù)通知給程序變換部106。在本實(shí)施方式中,結(jié)合函數(shù)生成部107從結(jié)合函數(shù)保持部105中 存儲(chǔ)的結(jié)合函數(shù)中隨機(jī)選擇結(jié)合函數(shù),但也可生成結(jié)合函數(shù)。結(jié)合函數(shù)生成部107保持或生成的結(jié)合函數(shù)未必是執(zhí)行多數(shù)決 定運(yùn)算的函數(shù),但均必需滿足規(guī)定的性質(zhì)。該物質(zhì)在后面詳細(xì)表述, 所以這里省略說(shuō)明。(分割秘密信息生成部102)分割秘密信息生成部102從秘密運(yùn)算指定部101接收秘密確定信 息,從結(jié)合函數(shù)生成部107接收分割方法信息與分割數(shù),根據(jù)所述分 割方法信息表示的分割方法,將秘密信息按分割數(shù)進(jìn)行分割。在本實(shí)施方式中,設(shè)分割數(shù)M為3,分割方法信息表示^多數(shù)決 定,。另外,由于必需執(zhí)行多數(shù)決定,所以分割數(shù)M設(shè)定奇數(shù)。分割秘密信息生成部102根據(jù)接收到的秘密確定信息中包含的
秘密信息^KEY',生成多數(shù)決定的結(jié)果為'KEY'的3個(gè)分割秘密 信息K1、 K2、 K3。用圖6的流程圖來(lái)說(shuō)明分割秘密信息生成部102執(zhí)行的分割秘密 信息的生成處理。這里,該流程圖表示KEY、 Kl-K3的每個(gè)為1比 特時(shí)的處理,在KEY、 Kl-K3的每個(gè)由多個(gè)比特構(gòu)成的情況下,若 對(duì)多個(gè)比特的各位置適用該流程圖所示的處理,則期望比特長(zhǎng)度的 KEY可得到期望比特長(zhǎng)度的Kl-K3。圖6中的變量i用于表示構(gòu)成值的設(shè)定對(duì)象的分割秘密信息Ki。變量j用于對(duì)值己設(shè)定的分割秘密信息Kl-Ki中、設(shè)定與<KEY' 相同值的分割秘密信息的數(shù)量進(jìn)行計(jì)數(shù)。分割秘密信息生成部102首先用1初始化變量i,用0初始化變 量j(步驟S101)。接著,對(duì)M算出多數(shù)決定中構(gòu)成多數(shù)的最低數(shù)m(步驟S102)。 m使用公式Int(M/2)+l來(lái)算出。這里,Int(x)表示x的整數(shù)部。之后,分割秘密信息生成部102判定j是否為m以上(步驟S103)。在j為m以上的情況下(步驟S103:是),若取K1-KM的多數(shù)決 定,則確定變?yōu)?lt;KEY,,所以對(duì)Ki設(shè)定函數(shù)rand()的返回值(步驟 S105)。這里,函數(shù)rand()是隨機(jī)返回0或1之一作為返回值的函數(shù)。在j小于m的情況下(步驟S103:否),判定應(yīng)設(shè)定與KEY相同 值的分割秘密信息的最低數(shù)、即(m-j)是否為值未設(shè)定的分割秘密信息 的數(shù)(M+l-i)以下(步驟S104)。在(m-j)為(M+l-i)以下的情況下(步驟S104:是),由于必需對(duì)值 未設(shè)定的分割秘密信息全部設(shè)定值KEY,所以對(duì)Ki設(shè)定KEY(步驟 S107),移動(dòng)到步驟S108。在(m-j)不為(M+l-i)以下的情況下(步驟S104:否),由于不必對(duì) 值未設(shè)定的分割秘密信息全部設(shè)定與KEY相同的值,戶萬(wàn)以移動(dòng)到步 驟S105,將隨機(jī)值設(shè)定給分割秘密信息。在步驟S105結(jié)束之后,分割秘密信息生成部102判定Ki是否與 KEY —致(步驟S106),在不一致的情況下(步驟S106:否),移動(dòng)到
步驟S109,在一致的情況下(步驟S106:是),將j加1(步驟S108), 移動(dòng)到步驟S109。接著,分割秘密信息生成部102判定(i+l)是否為M以上(步驟 S109),在不是M以上的情況下(步驟S109:否),將i加l(步驟SllO), 移動(dòng)到步驟S103,在為M以上的情況下(步驟S109:是),結(jié)束處理。分割秘密信息生成部102按照上述說(shuō)明的步驟,根據(jù)秘密信息 KEY,生成分割秘密信息K1-KM的多數(shù)決定的結(jié)果變?yōu)镵EY的 K1-KM之后,將生成的Kl-K3與所述秘密確定信息輸出到程序變換 部106。(程序變換部106)程序變換部106從分割秘密信息生成部102取得所述秘密確定信 息與所述分割數(shù)個(gè)數(shù)的所述分割秘密信息,從結(jié)合函數(shù)生成部107取 得結(jié)合函數(shù)的通知,從程序取得部103取得程序,對(duì)取得的程序執(zhí)行 (a)運(yùn)算分割處理、(b)交織處理、(c)偽追加處理、(d)結(jié)合函數(shù)追加處 理。下面,再次參照?qǐng)D1來(lái)順序說(shuō)明(a)-(d)。(a) 運(yùn)算分割處理運(yùn)算分割處理是將程序中包含的秘密運(yùn)算分割成M個(gè)分割秘密 運(yùn)算的處理。運(yùn)算變換部106對(duì)程序601中的秘密確定信息中包含的行序號(hào)的 代碼611 'data2-f一xor(datal,KEY);',生成將基于秘密信息的運(yùn)算置 換為基于分割秘密信息的運(yùn)算的M個(gè)運(yùn)算、即代碼612 (Pl=f—xor(datal,Kl);,、代碼613 (P2=f_xor(datal,K2);,、代碼614 'P3=f—xor(datal,K3);',并將代碼611置換為代碼612、 613、 614。另夕卜,將定義KEY的值的代碼631 'KEY=0x03;'置換為定義 Kl、 K2、 K3的值的代碼632 'Kl=0x05;,、代碼633 'K2=0x03;,、 代碼634 <K3=0x02;,。將代碼611置換為代碼612、 613、 614、將代碼631置換為代碼 632、 633、 634的程序是程序602。(b) 交織處理
程序變換部108不改變程序的處理結(jié)果,而置換程序602中的代 碼的排列順序。圖1中的程序603是交織處理了程序602之后的程序。具體而言,程序變換部108進(jìn)行配置,以使得程序602中,作為 從程序601置換的代碼的代碼612、 613、 614這3個(gè),被程序中的其 它代碼插入(交織)。作為一例,將程序開(kāi)頭的代碼<c=100;'插入代碼613與代碼614 之間,將代碼'a-b+c;, 、 'b-b+l;,插入代碼614與代碼612之間。由于代碼612、 613、 614是分別獨(dú)立的代碼,所以即便變更排列 順序,結(jié)果也不變化,所以程序變換部108變更這些代碼的排列順序。但是,若代碼'datal-datal《2;'配置于代碼612、 613、 614之 前,則代碼612、 613、 614的處理結(jié)果會(huì)改變,所以仍配置在代碼 612、 613、 614之后。利用該交織處理,使用各分割秘密信息的運(yùn)算處理的位置不固定 在一個(gè)部位,而擴(kuò)散到不同的部位,所以具有更難非法解析的效果。(c)偽追加處理程序變換部106對(duì)交織處理過(guò)的程序603追加表示不影響程序執(zhí) 行結(jié)果的偽處理的代碼。程序變換部106作為一例,如圖1的程序604所示,對(duì)程序603追加代碼621 'Templ=0;,代碼622 'Temp2=10;,代碼623 'Templ=Templ+Temp2;,代碼624 ' Temp2=data2+Temp 1;,等4個(gè)偽代碼。Templ、 Temp2是不包含于原始程序603中的偽變量,是不影響 該程序的執(zhí)行結(jié)果的變量。另外,代碼621-624是不存在于原始程序 603中的新代碼。代碼624以盡管使用存在于程序603中的data2,但不影響程序 的執(zhí)行結(jié)果的方式被使用。(d)結(jié)合函數(shù)追加處理程序變換部106通過(guò)向程序604追加向從結(jié)合函數(shù)生成部107取 得的結(jié)合函數(shù)fO的自變量提供作為代碼612-614的運(yùn)算結(jié)果的Pl-P3 的代碼615 'data2=f—major(Pl,P2,P3);,,生成程序605。利用上述說(shuō)明的處理,程序變換部106將程序601變換為作為變 換程序的程序605,將所述變換程序輸出到執(zhí)行程序生成部14。<動(dòng)作>用圖7所示的流程圖來(lái)說(shuō)明執(zhí)行程序生成裝置10的動(dòng)作。 用戶通過(guò)用戶操作,制作包含秘密信息的程序601,將程序601 作為電子文件,保持在程序保持部12中。用戶通過(guò)對(duì)鍵盤(pán)等的用戶操作,請(qǐng)求顯示包含程序601的電子文件。輸入部ll根據(jù)所述請(qǐng)求,將包含所述電子文件名的取得指示發(fā) 送到程序取得部103(步驟S301)。程序取得部103從程序保持部12取得由電子文件名識(shí)別的電子 文件,使程序601顯示于所述顯示器(未圖示)中。用戶一邊參照顯示于顯示器中的程序601, —邊通過(guò)用戶操作, 向輸入部11輸入涉及程序601中包含的秘密信息的秘密確定信息。所述秘密確定信息包含代碼611的程序601中的行序號(hào)、秘密運(yùn) 算中使用的運(yùn)算符"'、秘密信息'KEY,。秘密運(yùn)算指定部101經(jīng)輸入部11取得所述秘密確定信息,將所 述秘密確定信息發(fā)送到分割秘密信息生成部102(步驟S302)。接著,用戶利用用戶操作,向輸入部11輸入分割數(shù)。這里,分 割數(shù)為3。分割數(shù)指定部104從輸入部11取得所述分割數(shù)(步驟S303),將 所述分割數(shù)發(fā)送到結(jié)合函數(shù)生成部107。結(jié)合函數(shù)生成部107接收所述分割數(shù),根據(jù)所述分割數(shù),選出結(jié) 合函數(shù)保持部105中保持的結(jié)合函數(shù)中的一個(gè)(步驟S304),將涉及選 出的結(jié)合函數(shù)的信息、即確定密鑰分割方法的信息、例如作為表示^多 數(shù)決定'的信息的分割方法信息與所述分割數(shù),輸出到分割秘密信息
生成部102,將選擇到的結(jié)合函數(shù)通知程序變換部106。分割秘密信息生成部102接收所述分割方法信息與所述分割數(shù), 根據(jù)從秘密運(yùn)算指定部101接收到的秘密確定信息中包含的秘密信 息'KEY',生成多數(shù)決定結(jié)果為秘密信息^KEY'的所述分割數(shù)、 即3個(gè)的分割秘密信息Kl-K3(步驟S105),將生成的3個(gè)分割秘密信 息、即Kl-K3輸出到程序變換部106(步驟S305)。程序變換部106從分割秘密信息生成部102取得所述秘密確定信 息,從結(jié)合函數(shù)生成部107取得結(jié)合函數(shù)的通知,從程序取得部103 取得程序601,對(duì)取得的程序601執(zhí)行運(yùn)算分割處理,生成程序602(步 驟S306),執(zhí)行交織處理,生成程序603(步驟S307),執(zhí)行偽追加處 理生成程序604(步驟S308),執(zhí)行結(jié)合函數(shù)追加處理,生成程序605(步 驟S309),將程序605輸出到執(zhí)行程序生成部14。執(zhí)行程序生成部14從程序變換部106取得作為變換程序的程序 605,編譯,并生成執(zhí)行程序。<第2實(shí)施方式>在上述第l實(shí)施方式中,涉及秘密信息的處理為,例如代碼611 Mata2-f_xor(datal,KEY);,對(duì)輸入的自變量的各比特執(zhí)行邏輯運(yùn)算。 所謂邏輯運(yùn)算是AND(邏輯與)或OR(邏輯或)、NOT(否)、XOR(異或)、 移位運(yùn)算等。由于邏輯運(yùn)算是加密算法等程序中較常使用的運(yùn)算,所以程序中 的這種邏輯運(yùn)算符對(duì)解析者來(lái)說(shuō),成為非法取得加密密鑰這樣的秘密 信息的線索是容易的。涉及秘密信息的處理中的運(yùn)算在邏輯運(yùn)算的情況下可用第1實(shí) 施方式中說(shuō)明的手法處理,但在運(yùn)算是算術(shù)運(yùn)算的情況下,不能利用 置換到使用己述的分割秘密信息的運(yùn)算、來(lái)得到與變換前相同的運(yùn)算 結(jié)果,必需變換為考慮了算術(shù)運(yùn)算時(shí)生成的每個(gè)比特的進(jìn)位或借位的 運(yùn)算處理。這里,所謂算術(shù)運(yùn)算指+(加法)、-(減法)、x(乘法)、+(除法),在 加密算法中較少使用,但在使用的情況下,其成為特征,與邏輯運(yùn)算 符一樣,可以成為解析的線索。第2實(shí)施方式中,將包含含有算術(shù)運(yùn)算符的秘密運(yùn)算的程序變換 為考慮了算術(shù)運(yùn)算時(shí)生成的每個(gè)比特的進(jìn)位或借位的變換程序。下面,參照附圖僅說(shuō)明第2實(shí)施方式中與第1實(shí)施方式不同的部分。第2實(shí)施方式的執(zhí)行程序生成裝置如圖8所示,將用戶生成的程 序701變換為程序702。程序701將對(duì)程序601的各比特值進(jìn)行邏輯運(yùn)算的代碼611 'data2=f_xor(datal,KEY);'置換為包含算術(shù)運(yùn)算的代碼711 <data2=datal+KEY;,。程序702包含根據(jù)代碼711生成的代碼712 'K [] ={dummy,Kl,K2,K3};,與代碼713 'data2-fUnc(datal,K);,。代碼712中的Kl、 K2、 K3與第1實(shí)施方式一樣,是根據(jù)秘密 信息KEY生成的分割秘密信息。函數(shù)fimc(datal,K)是使用作為自變量受理的秘密運(yùn)算datal與分 割秘密信息的存儲(chǔ)地址K、生成data2的函數(shù)。fbnc()的細(xì)節(jié)如后所述。第2實(shí)施方式中處理的算術(shù)運(yùn)算由于產(chǎn)生進(jìn)位(carry),所以僅通過(guò)如第1實(shí)施方式所示單純適用結(jié)合函數(shù)fO,得不到適當(dāng)?shù)倪\(yùn)算結(jié) 果。因此,在第2實(shí)施方式中,采用使用結(jié)合函數(shù)f0算出data2的函第2實(shí)施方式中的執(zhí)行程序生成裝置1100作為一例,如圖9所 示,包含輸入部ll、程序保持部12、變換程序生成部1300、和執(zhí)行 程序生成部14來(lái)構(gòu)成。執(zhí)行程序生成裝置1100具體而言,是由微處理器、ROM、 RAM、 硬盤(pán)單元、顯示器單元、鍵盤(pán)、鼠標(biāo)等構(gòu)成的計(jì)算機(jī)系統(tǒng)。所述RAM 或所述硬盤(pán)單元中存儲(chǔ)計(jì)算機(jī)程序。通過(guò)所述微處理器根據(jù)所述計(jì)算 機(jī)程序動(dòng)作,執(zhí)行程序生成裝置1100實(shí)現(xiàn)其功能。輸入部11、程序保持部12、執(zhí)行程序生成部14已在第1實(shí)施方 式中說(shuō)明。變換程序生成部1300將用戶制作的程序變換為變換程序。 變換程序生成部1300如圖9所示,包含秘密運(yùn)算指定部1101、分割秘密信息生成部102、程序取得部103、分割數(shù)指定部104、結(jié) 合函數(shù)保持部105、程序變換部1106和結(jié)合函數(shù)生成部1107來(lái)構(gòu)成。 變換程序生成部1300中與變換程序生成部13 —樣的構(gòu)成要素附加與 第1實(shí)施方式一樣的符號(hào),省略說(shuō)明。秘密運(yùn)算指定部1101不僅將生成的秘密確定信息輸出到分割秘 密信息生成部102,還輸出到結(jié)合函數(shù)生成部1107,此外與秘密運(yùn)算 指定部101 —樣。結(jié)合函數(shù)保持部105對(duì)應(yīng)于表示運(yùn)算符的運(yùn)算符信息,除結(jié)合函 數(shù)401、 421、 441外,還保持函數(shù)fimc()。例如,結(jié)合函數(shù)保持部105將運(yùn)算符<+'與函數(shù)fiinc0相對(duì)應(yīng) 地加以保持,將運(yùn)算符"'與結(jié)合函數(shù)401相對(duì)應(yīng)地加以保持,將 運(yùn)算符 與結(jié)合函數(shù)421相對(duì)應(yīng)地加以保持,將運(yùn)算符"'與結(jié) 合函數(shù)441相對(duì)應(yīng)地加以保持。結(jié)合函數(shù)401、 421、 441、函數(shù)fUnc0的每個(gè),與表示運(yùn)算符的 運(yùn)算符信息相對(duì)應(yīng)來(lái)存儲(chǔ)。結(jié)合函數(shù)生成部1107從分割數(shù)指定部104接收分割數(shù),從秘密 運(yùn)算指定部1101取得秘密確定信息。接著,結(jié)合函數(shù)生成部1107判定取得的秘密確定信息中包含的 運(yùn)算符信息是否表示算術(shù)運(yùn)算,在表示算術(shù)運(yùn)算(尤其是'+')的情 況下,從結(jié)合函數(shù)保持部105中選出對(duì)應(yīng)于所述算術(shù)運(yùn)算及所述分割 數(shù)的函數(shù)fiincO,在表示邏輯運(yùn)算(尤其是"')的情況下,隨機(jī)選出 對(duì)應(yīng)于所述邏輯運(yùn)算及所述分割數(shù)的結(jié)合函數(shù)401、 421、 441之一。作為邏輯運(yùn)算的情況已在第1實(shí)施方式中說(shuō)明,所以下面說(shuō)明運(yùn)算符 信息表示算術(shù)運(yùn)算(尤其是<+')、選出函數(shù)fimc0的情況。結(jié)合函數(shù)生成部1107向程序變換部1106通知fimcO,作為結(jié)合 函數(shù),向分割秘密信息生成部102通知所述秘密確定信息、與表示秘 密信息分割方法的分割方法信息。秘密信息與第1實(shí)施方式一樣,以若適用結(jié)合函數(shù)f0則得到原 始的秘密信息的形式被分割。在下面的說(shuō)明中,與第1實(shí)施方式一樣,說(shuō)明為結(jié)合函數(shù)f()是進(jìn)行多數(shù)決定運(yùn)算的函數(shù),所以設(shè)分割方法信息表示 <多數(shù)決定'。結(jié)合函數(shù)f0與第l實(shí)施方式一樣,若滿足規(guī)定的性質(zhì),則不限于多數(shù)決定運(yùn)算,但該性質(zhì)如后所述,所以這里省略說(shuō)明。分割秘密信息生成部102若從結(jié)合函數(shù)生成部1107接收所述秘 密確定信息與所述分割方法信息,則如第1實(shí)施方式所示,根據(jù)所述 分割方法信息,按所述分割數(shù)對(duì)所述秘密確定信息中包含的秘密信息 進(jìn)行分割。接著,分割秘密信息生成部102將所述秘密確定信息與由 所述分割生成的分割秘密信息輸出到程序變換部1106。程序變換部1106從分割秘密信息生成部102取得所述秘密確定 信息與所述分割數(shù)個(gè)數(shù)的所述分割秘密信息,從結(jié)合函數(shù)生成部1107 取得結(jié)合函數(shù)的通知,從程序取得部103取得程序,向取得的程序追 加分割秘密信息與結(jié)合函數(shù)。作為具體例,程序變換部1106從程序取得部103取得程序701 , 向程序701追加定義分割秘密信息的代碼712 'K [] ={dummy,Kl,K2,K3};,與代碼713 'data2-fiinc(datal,K);,。因fonc()為了簡(jiǎn)化說(shuō)明而不使用排列K []的開(kāi)頭,故插入代碼 712中的dummy,除是偽字符外,不具有特別的含義。(對(duì)函數(shù)fiincO的說(shuō)明)fiinc()受理datal和排列K [] ={(11111111^,10,1^2,13}的開(kāi)頭地址, 作為自變量。用圖lO來(lái)說(shuō)明函數(shù)fimcO的處理。首先,用0初始化構(gòu)成最終輸出的返回值的P,用0初始化表示 各位的進(jìn)位的Cl Cn(步驟S501)。接著,以解密密鑰的比特長(zhǎng)來(lái)初始化變量m(步驟S502)。在本實(shí) 施方式中,解密密鑰KEY的比特長(zhǎng)度為3。接著,用O初始化變量j、 tmp的每個(gè)(步驟S503)。之后,用1初始化變量i(步驟S504)。之后,判定i是否比分割數(shù)大(步驟S505),在大的情況下(步驟 S505:是),移動(dòng)到后述的步驟S509,在不大的情況下(步驟S505: 否),向tmp代入datal:fKi:j(步驟S506)。
這里,X:j的記載表示數(shù)據(jù)X的第j比特。datal:0是datal的第0 比特,在i-l、 j-0的情況下,Ki:j是Kl的第0比特。接著,將f(tmpXl,tmpX:2,…tmp'Cn)的計(jì)算結(jié)果代入Pi(步驟 S507),將i加l(步驟S508),返回步驟S505。在步驟8505中判定為1比分割數(shù)大的情況下,計(jì)算^1^2,...!>11), 代入Ptmp(步驟S509),用((Ptmp《j)IP)更新P(步驟S510)。接著,判定j+l是否比m大(步驟S511),在大的情況下(步驟S511 : 是),處理結(jié)束,在不大的情況下(步驟S511:否),更新進(jìn)位Cl、 C2、 ...Cn(步驟S512)。在進(jìn)位的更新中,使用函數(shù)carryO,利用下式進(jìn)行。 Cl — carry (datal: j, Kl: j, Cl) C2 <~ cany (datal: j, K2 : j, C2)Cn — cany (datal : j, Kn: j, Cn)這里,函數(shù)cany(A,B,C)是運(yùn)算將自變量A、 B、 C相加時(shí)產(chǎn)生的 進(jìn)位的函數(shù)。具體而言,函數(shù)carry(A,B,C)在A、 B、 C中兩個(gè)為值<1,的情 況下,返回進(jìn)位<1',作為返回值,在其它情況下,返回值<0'。 也可用上述進(jìn)行多數(shù)決定運(yùn)算的函數(shù)fO來(lái)代替。 接著,將j加1(步驟S513),移動(dòng)到步驟S505。 以上是對(duì)函數(shù)fimcO的說(shuō)明,但進(jìn)一步以代入具體數(shù)字的實(shí)例來(lái) 說(shuō)明。(對(duì)函數(shù)fimcO的動(dòng)作的、基于具體數(shù)字實(shí)例的補(bǔ)充說(shuō)明) fiincO受理datal和排列K [] ={(1111111^,〖1,1^,10}的開(kāi)頭地址, 作為自變量。下面,舉例datal=0x03、KEY=0x03、Kl=0x05、K2=0x03、K3=0x02的情況。若根據(jù)代碼711 ' data2=datal+KEY;',貝ij data2應(yīng)為 0x03+0x03=0x06,所以fiinc()的返回值必需是0x06。下面,向圖IO的流程圖中代入具體數(shù)字來(lái)說(shuō)明。其中,省略說(shuō)
明Kl、 K2、 K3中的比特值全部為0的高位5比特。首先,通過(guò)步驟S501,得到P^、 C1=C2=C3=0。通過(guò)步驟S502,得到m-3。通過(guò)步驟S503,得到j(luò)-O、 tmp=0。(a)j=0的循環(huán)(對(duì)于i=l的循環(huán))通過(guò)步驟S504,得到i-l。i比分割數(shù)3小,所以步驟S505中分支到否。通過(guò)步驟S506, tmp是datal的比特0即1、與Kl的比特0即1 的異或,即0。通過(guò)步驟 S507 ,Pl為 f(tmpX:i,tmpT2,tmp'C3,)=f((ro,(ro,(TO)-o。通過(guò)步驟S508,得到i為2。 (對(duì)于i=2的循環(huán))i比分割數(shù)3小,所以步驟S505中分支到否。 通過(guò)步驟S506, tmp是datal的比特0即1、與K2的比特0即1 的異或,即0。通過(guò)步驟 S507 , P2 為 f(tmpX;i,tmpT2,tmpX:3,)-f((TO,(TO,(rO)=0。通過(guò)步驟S508,得到i為3。 (對(duì)于i-3的循環(huán))i為與分割數(shù)3相同的值,所以步驟S505中分支到否。 通過(guò)步驟S506, tmp是datal的比特0即1、與K3的比特0即0 的異或,即l。通過(guò)步驟 S507 ,P3 為 f(tmp'Cl,tmpAC2,tmpT3,)-f(ro,ro,ro)=i。通過(guò)步驟S508,得到i為4,在步驟S505中判定為是,移動(dòng)到 步驟S509。 (P的計(jì)算)通過(guò)步驟S509,得到Ptmp為f(O,O,l)-O。 通過(guò)步驟S510, P為OOO。 (C1 C3的計(jì)算)通過(guò)步驟S512, Cl變?yōu)閑arry(l,l,O"l, C2變?yōu)閏arry(l,l,O)-l , C3變?yōu)閏any(l,0,0)=0。(b)j=l的循環(huán)(對(duì)于i-l的循環(huán))通過(guò)步驟S504,得到i-l。i比分割數(shù)3小,所以步驟S505中分支到否。通過(guò)步驟S506, tmp是datal的比特1即1、與Kl的比特1即0 的異或,即l。通過(guò)步驟 S507 , Pl為 f(tmpTl,tmpX:2,tmpT3,)=f(ri,ri,:ro)=o。通過(guò)步驟S508,得到i為2。 (對(duì)于i-2的循環(huán))i比分割數(shù)3小,所以步驟S505中分支到否。 通過(guò)步驟S506, tmp是datal的比特1即1、與K2的比特1即1 的異或,即0。通過(guò)步驟 S507 , P2 為《111^(:1,111^02,加 ^3,)= f((Tl,(Tl,(r0)=lo通過(guò)步驟S508,得到i為3。 (對(duì)于i-3的循環(huán))i為與分割數(shù)3相同的值,所以步驟S505中分支到否。 通過(guò)步驟S506, tmp是datal的比特1即1、與K3的比特1即1 的異或,即0。通過(guò)步驟S507,P3為f(tmp'Cl,tmp'C2,tmpT3)= f(0Al,(Tl,(rO)=l 。 通過(guò)步驟S508,得到i為4,在步驟S505中判定為是,移動(dòng)到 步驟S509。 (P的計(jì)算)通過(guò)步驟S509,得到Ptmp為f(0,l,l)=l 。 通過(guò)步驟S510, P為OIO。 200680009713.8說(shuō)明書(shū)第25/32頁(yè)(C1 C3的計(jì)算)通過(guò)步驟S512, Cl變?yōu)閏arry(l,0,l)-1, C2變?yōu)閏arry(l,l,l)-l, C3變?yōu)閏any(l,l,0)-l。(c) j=2的循環(huán)(對(duì)于i=l的循環(huán))通過(guò)步驟S504,得到i-l。i比分割數(shù)3小,所以步驟S505中分支到否。通過(guò)步驟S506, tmp是datal的比特2即0與Kl的比特2即1 的異或,即l。通過(guò)步驟 S507 , Pl 為 f(tmp'Cl,tmp'C2,tmp'C3,)= f(l'l,ri,l"l)=0。通過(guò)步驟S508,得到i為2。 (對(duì)于i=2的循環(huán))i比分割數(shù)3小,所以步驟S505中分支到否。 通過(guò)步驟S506, tmp是datal的比特2即0與K2的比特2即0 的異或,即0。通過(guò)步驟 S507 ,P2 為 f(tmpTl,tmp'C2,tmpX:3,)=f((n,(ri,(ri)=i。通過(guò)步驟S508,得到i為3。 (對(duì)于i=3的循環(huán))i為與分割數(shù)3相同的值,所以步驟S505中分支到否。 通過(guò)步驟S506, tmp是datal的比特2即0與K3的比特2即0 的異或,即0。通過(guò)步驟 S507 , P3 為 flttmp'CLtmpTS'tmp'CS,)- 1,0一1)=10通過(guò)步驟S508,得到i為4,在步驟S505中判定為是,移動(dòng)到 步驟S509。(P的計(jì)算)通過(guò)步驟S509,得到Ptmp為f(O,l,l)-l 。 通過(guò)步驟S510, P為0x06。
根據(jù)步驟S511的判定,結(jié)束處理。 <結(jié)合函數(shù)幻應(yīng)滿足的必要充分條件>在第1和第2實(shí)施方式所述的方法中,為了使用分割秘密信息和 結(jié)合函數(shù)fO得到與使用秘密信息的運(yùn)算結(jié)果相同的運(yùn)算結(jié)果,結(jié)合 函數(shù)f0必需滿足以下3個(gè)條件。(條件1) f(0,0,...,0)=0(條件2)f(l,l,…,l)-l(條件3) f(xl,x2,...,xn)= f( xl, x2,…, xn)(其中, 是表示否定的邏輯運(yùn)算。)進(jìn)一步詳細(xì)說(shuō)明上述函數(shù)fO應(yīng)滿足的條件。(條件l)與(條件2)如公式所示,在全部輸入值為0的情況下,f0 的輸出值也為0,在全部輸入值為1的情況下,fD的輸出值也為1。另外,(條件3)是通常稱為自雙反函數(shù)的函數(shù)條件,表示基于將 提供給f()函數(shù)的各輸入值全部否定(NOT)之后的輸入值的f0的結(jié)果, 是基于原始輸入值的fO的輸出值的否定(NOT)。滿足這種條件的函數(shù)f0的確定方法除圖4、圖5的函數(shù)外,也可 以是2的x次冪(其中,x是2的(n-l)次冪-l)那樣(n為分割數(shù))。結(jié)合函數(shù)保持部105中保持多個(gè)滿足這些條件的函數(shù),通過(guò)對(duì)每 個(gè)秘密信息改變結(jié)合函數(shù),可更難以解析。并且,在本實(shí)施方式中,采用結(jié)合函數(shù)保持部105事先保持多個(gè) 函數(shù)、結(jié)合函數(shù)生成部107從中指定結(jié)合函數(shù)的方法,但也可通過(guò)結(jié) 合函數(shù)生成部107每次制作滿足(條件1) (條件3)的函數(shù)f0,生成對(duì) 輸入自變量的各位置適用該函數(shù)fO的結(jié)合函數(shù),從而不在結(jié)合函數(shù) 保持部105中事先保持結(jié)合函數(shù),來(lái)變化程序。例如,滿足(條件l) (條件3)的函數(shù)fO可如下生成。準(zhǔn)備具有函數(shù)fO可取的自變量的值的全部圖案的項(xiàng)目的真值表, 首先,為了滿足條件1和條件2,向自變量全部為O的項(xiàng)目代入O,向自變量全部為l的項(xiàng)目代入l。之后,對(duì)其它項(xiàng)目隨機(jī)代入0或1的值,同時(shí),向否定了該項(xiàng)目 各自變量之后的自變量的項(xiàng)目,代入否定所代入的值的值。
作為具體實(shí)例,在自變量為3個(gè)的情況下,若向'o,i,r的項(xiàng)目 代入<r ,則向",o,o,的項(xiàng)目代入<o,。
若重復(fù)上述處理直到向全部項(xiàng)目代入值,則完成滿足(條件i)
(條件3)的函數(shù)的真值表。
之后,使用公知的方法、根據(jù)真值表生成邏輯式、再生成執(zhí)行該 邏輯式表示的運(yùn)算的函數(shù),或生成參照生成的真值表的函數(shù),得到函 數(shù)fO。
這些函數(shù)fO通過(guò)安裝成在耐篡改的環(huán)境下執(zhí)行,可更難以解析。 具體而言,可考慮使用特殊的硬件來(lái)執(zhí)行函數(shù)f的方法、或在與通常 的程序隔離的環(huán)境下使之動(dòng)作等各種方法。并且,即便在以軟件安裝 的情況下,也可追加用于難以讀取通常知道函數(shù)f的程序的使用偽變 量的偽處理,或向程序中追加分支處理等,利用難以讀取的難讀取方 法使解析變得不容易。
另夕卜,在上述第2實(shí)施方式中,使用函數(shù)fbncO統(tǒng)一執(zhí)行向datal 加K1 K3的處理以及將加法結(jié)果結(jié)合的處理,但不限于此。
艮卩,也與第l實(shí)施方式一樣,首先,算出datal+Kl、 datal+K2、 datal+K3的運(yùn)算結(jié)果,并使用在反映的同時(shí)結(jié)合進(jìn)位的函數(shù)fUnc2() 來(lái)結(jié)合該結(jié)果。
<附記>
雖然根據(jù)上述實(shí)施方式說(shuō)明了本發(fā)明,但本發(fā)明當(dāng)然不限于上述 實(shí)施方式。以下的情況也包含于本發(fā)明中。
(l)作為邏輯運(yùn)算符,使用"'進(jìn)行說(shuō)明,但不限于此,也可以 是進(jìn)行邏輯運(yùn)算的其它運(yùn)算符。
例如,在邏輯運(yùn)算符中,有AND(邏輯與)或OR(邏輯或)、 NOT(否)、XOR(異或)、移位運(yùn)算等。由于是包含加密密鑰的加密算 法等程序中較常使用的運(yùn)算,所以程序中的這種邏輯運(yùn)算符對(duì)于解析 者來(lái)說(shuō)成為非法取得加密密鑰等秘密信息的線索是容易的。
另外,作為算術(shù)運(yùn)算符,使用'+'進(jìn)行說(shuō)明,但不限于此,也 可以是其它算術(shù)運(yùn)算符。
所謂算術(shù)運(yùn)算符除+(加法)外,還指-(減法)、x(乘法)、+(除法),
在加密算法中較少使用,但在使用的情況下,其成為特征,與邏輯運(yùn) 算符一樣,可成為解析的線索。
在不是加法而是減法的情況下,由于產(chǎn)生借位代替進(jìn)位,所以必
需與第2實(shí)施方式中使進(jìn)位反映到計(jì)算結(jié)果中的處理一樣、使借位反 映到計(jì)算結(jié)果中的處理。
(2) 分割數(shù)指定部104經(jīng)輸入部11取得由用戶操作輸入的分割 數(shù),但也可由其它方法取得分割數(shù)。例如,也可將分割數(shù)事先保持在 非易失性存儲(chǔ)器等中,讀出并使用保持的分割數(shù)。
(3) 分割秘密信息生成部102也可不生成分割秘密信息,而利用 其它方法生成分割秘密信息。
例如,事先準(zhǔn)備真值表402,從真值表(例如真值表402)中隨機(jī) 找出對(duì)應(yīng)于分割前的秘密信息的項(xiàng)目,輸出對(duì)應(yīng)于項(xiàng)目的x、 y、 z, 作為分割秘密信息。
(4) 交織處理不是必需的,也可省略。另外,也可向第2實(shí)施方 式追加交織處理。
(5) 偽追加處理中的偽代碼若是不影響程序結(jié)果的處理,則也可 新追加變量來(lái)制作,或使用存在于原程序中的變量來(lái)制作。另外,也 可通過(guò)與已說(shuō)明的交織處理組合,追加偽運(yùn)算處理以使分割秘密信息 的位置進(jìn)一步擴(kuò)散,從而提高交織處理的效果。
這樣,通過(guò)追加不影響程序執(zhí)行結(jié)果的偽運(yùn)算處理,更難以解析 分割秘密信息的運(yùn)算。但,這些偽運(yùn)算處理的追加不是必需的。
(6) 秘密信息向分割秘密信息的分割方法,不限于通過(guò)分割秘密 信息的多數(shù)決定來(lái)得到作為復(fù)原結(jié)果的秘密信息的分割方法。
若使用分割前的秘密信息的運(yùn)算與使用分割秘密信息的運(yùn)算得 到相同的結(jié)果,則也可以是其它分割方法。
(7) 在第2實(shí)施方式中,將代碼711 ^data2ital+KEY;,置換成 代碼713 'data2-fimc(datal,K);',但不限于此。
如上所述,函數(shù)fiincO由多個(gè)步驟構(gòu)成,所以只要維持運(yùn)算結(jié)果 不會(huì)不同,貝'J函數(shù)fimcO內(nèi)的各步驟也可執(zhí)行第1實(shí)施方式中所述的 交織處理、或偽追加處理、或結(jié)合函數(shù)追加處理。(8) 作為結(jié)合多個(gè)分割秘密信息的結(jié)合函數(shù),以使用已選擇的一 個(gè)結(jié)合函數(shù)的實(shí)例進(jìn)行說(shuō)明,但不限于此。
例如,也可對(duì)多個(gè)分割秘密信息的每個(gè)比特位置變更使用的結(jié)合 函數(shù),或?qū)Χ鄠€(gè)位置的每個(gè)變更使用的結(jié)合函數(shù)。
另外,在第1和第2實(shí)施方式中,采取1個(gè)比特1個(gè)比特地確定 分割秘密信息的值的方法,但不限于此。
例如,也可通過(guò)參照結(jié)合函數(shù)fO的運(yùn)算結(jié)果逆引用真值表來(lái)確 定各自變量的值。具體而言,在KEY為'l'的情況下,隨機(jī)選擇真 值表402的f(x,y,z)的值為1的行,將對(duì)應(yīng)于選擇的行的x、 y、 z的值 分配給分散秘密信息每個(gè)。KEY的值為'0'的情況也一樣。
(9) 在第1和第2實(shí)施方式中,說(shuō)明執(zhí)行程序生成裝置,但由這 些裝置生成的特征性的程序自身、或用硬件實(shí)現(xiàn)該程序各部的信息處 理執(zhí)行裝置等也包含于本發(fā)明中。
例如,用硬件實(shí)現(xiàn)將圖1所示的程序605變換為執(zhí)行形式的所述 執(zhí)行程序的信息處理執(zhí)行裝置1300如圖11所示,由被運(yùn)算信息存儲(chǔ) 部1301、分割秘密信息存儲(chǔ)部1302、分割運(yùn)算執(zhí)行部1303 1305與 結(jié)合運(yùn)算執(zhí)行部1306構(gòu)成。
被運(yùn)算信息存儲(chǔ)部1301存儲(chǔ)datal(1351),作為被運(yùn)算信息。這 里,所謂被運(yùn)算信息也可從信息處理執(zhí)行裝置1300的外部取得。
分割秘密信息存儲(chǔ)部1302存儲(chǔ)K1 (1352)、 K2(1353)、 K3(1354), 作為將秘密信息按分割數(shù)分割后的分割秘密信息。Kl、 K2、 K3相當(dāng) 于程序605中的Kl(632)、 K2(633)與K3(634)。
分割運(yùn)算執(zhí)行部1303從被運(yùn)算信息存儲(chǔ)部1301取得 datal(1351),從分割秘密信息存儲(chǔ)部1302取得Kl(1352),執(zhí)行 Pl-f一xor(datal,Kl),將P1輸出到結(jié)合運(yùn)算執(zhí)行部1306。
與分割運(yùn)算執(zhí)行部1303 —樣,分割運(yùn)算執(zhí)行部1304從被運(yùn)算信 息存儲(chǔ)部1301取得datal(1351),從分割秘密信息存儲(chǔ)部1302取得 K2(1353),執(zhí)行P2-f一xor(datal,K2),將P2輸出到結(jié)合運(yùn)算執(zhí)行部 1306。
分割運(yùn)算執(zhí)行部1305從被運(yùn)算信息存儲(chǔ)部1301取得datal(1351),從分割秘密信息存儲(chǔ)部1302取得K3(1354),執(zhí)行
P3=f—xor(datal,K3),將P3輸出到結(jié)合運(yùn)算執(zhí)行部1306。
分割運(yùn)算執(zhí)行部的數(shù)目為與秘密信息的分割數(shù)相同的數(shù)。 在本變形例中,與上述實(shí)施方式一樣,秘密信息KEY被分割成
分割數(shù)、即3個(gè)分割秘密信息K1、 K2、 K3,所以信息處理執(zhí)行裝置
1300包含3個(gè)分割運(yùn)算執(zhí)行部1302 1305。
結(jié)合運(yùn)算執(zhí)行部1306從分割運(yùn)算執(zhí)行部1303取得Pl,從分割
運(yùn)算執(zhí)行部1304取得P2,從分割運(yùn)算執(zhí)行部1305取得P3,執(zhí)行
data2=f_major(Pl,P2,P3),輸出data2。
(10) 在第2實(shí)施方式中,函數(shù)fimcO保持在結(jié)合函數(shù)保持部105 中,但不限于此。也可在結(jié)合函數(shù)保持部105中保持結(jié)合函數(shù)fO, 使用從結(jié)合函數(shù)保持部105得到的結(jié)合函數(shù)f0,由結(jié)合函數(shù)生成部 1107使用結(jié)合函數(shù)f0生成結(jié)合函數(shù)fimc()。
此時(shí),結(jié)合函數(shù)f0只要滿足上述3個(gè)性質(zhì),則也可從結(jié)合函數(shù) 401、 421、 441等中選擇。
(11) 在第1和第2實(shí)施方式中,分割秘密信息隨機(jī)生成,但不限 于此。例如,由于若在去除與分割前的秘密信息相同值的范圍內(nèi)隨機(jī) 選擇等,則秘密信息本身不會(huì)出現(xiàn)在存儲(chǔ)器上,所以可更安全地保護(hù) 秘密信息。
(12) 在上述實(shí)施方式中,說(shuō)明將原程序變換為得到相同結(jié)果的程 序,將變換后的程序編譯成執(zhí)行程序后執(zhí)行的實(shí)例,但不限于此,只 要可在計(jì)算機(jī)上執(zhí)行程序,則也可以其它方法執(zhí)行。例如,也可將原 程序變換為得到相同結(jié)果的其它程序,將變換后的程序變換為解釋程 序可解釋的中間代碼。所述中間代碼在解釋程序上執(zhí)行。
(13) 上述各裝置具體而言,是由微處理器、ROM、 RAM、硬盤(pán) 單元、顯示器單元、鍵盤(pán)、鼠標(biāo)等構(gòu)成的計(jì)算機(jī)系統(tǒng)。所述RAM或 所述硬盤(pán)單元中存儲(chǔ)計(jì)算機(jī)程序。通過(guò)所述微處理器根據(jù)所述計(jì)算機(jī) 程序動(dòng)作,各裝置實(shí)現(xiàn)其功能。這里,計(jì)算機(jī)程序?yàn)榱藢?shí)現(xiàn)規(guī)定功能, 組合多個(gè)表示對(duì)計(jì)算機(jī)的指令的命令代碼來(lái)構(gòu)成。
(14) 構(gòu)成上述各裝置的構(gòu)成要素的一部分或全部也可由一個(gè)系統(tǒng)LSI(Large Scale Integration:大規(guī)模集成電路)構(gòu)成。系統(tǒng)LSI是在 一個(gè)芯片上集成多個(gè)構(gòu)成部制造的超多功能LSI,具體而言,是包含 微處理器、ROM、 RAM等構(gòu)成的計(jì)算機(jī)系統(tǒng)。在所述RAM中存儲(chǔ) 計(jì)算機(jī)程序。通過(guò)所述微處理器根據(jù)所述計(jì)算機(jī)程序動(dòng)作,系統(tǒng)LSI 實(shí)現(xiàn)其功能。這些部件既可單獨(dú)單芯片化,也可包含局部或全部地單 芯片化。這里為L(zhǎng)SI,但也可根據(jù)集成度的不同稱為IC、系統(tǒng)LSI、超LSI、 甚LSI。另外,集成電路化的方法不限于LSI,也可由專用電路或通用處 理器來(lái)實(shí)現(xiàn)。也可利用在LSI制造后可編程的FPGA(Field Programmable Gate Array:現(xiàn)場(chǎng)可編程門(mén)陣列)或可再構(gòu)成LSI內(nèi)部的 電路單元連接或設(shè)定的可重構(gòu)處理器。并且,如果因半導(dǎo)體技術(shù)的進(jìn)步或派生的其它技術(shù)而出現(xiàn)置換 LSI的集成電路化技術(shù),則當(dāng)然也可使用該技術(shù)來(lái)進(jìn)行功能塊的集成 化??蛇m應(yīng)于生物技術(shù)等。(15) 構(gòu)成上述各裝置的構(gòu)成要素的一部分或全部也可由可拆裝 于各裝置上的IC卡或單體模塊構(gòu)成。所述IC卡或所述模塊是由微處 理器、ROM、 RAM等構(gòu)成的計(jì)算機(jī)系統(tǒng)。所述IC卡或所述模塊也 可包含上述超多功能LSI。通過(guò)微處理器根據(jù)計(jì)算機(jī)程序動(dòng)作,所述 IC卡或所述模塊實(shí)現(xiàn)其功能。該IC卡或該模塊也可具有耐篡改性。(16) 本發(fā)明也可以是上述所示的方法。另外,也可是由計(jì)算機(jī)來(lái) 實(shí)現(xiàn)這些方法的計(jì)算機(jī)程序,或是由所述計(jì)算機(jī)程序構(gòu)成的數(shù)字信 號(hào)。另外,本發(fā)明也可將所述計(jì)算機(jī)程序或所述數(shù)字信號(hào)記錄在計(jì)算 機(jī)可讀的記錄媒體中,例如軟盤(pán)、硬盤(pán)、CD-ROM、 MO、 DVD、 DVD-ROM、 DVD-RAM、 BD(Blu-ray Disc:藍(lán)光光盤(pán))、半導(dǎo)體存儲(chǔ) 器等中。另外,也可以是記錄在這些記錄媒體中的所述計(jì)算機(jī)程序或 所述數(shù)字信號(hào)。另外,本發(fā)明也可經(jīng)由電氣通信線路、無(wú)線或有線通信線路、以 因特網(wǎng)為代表的網(wǎng)絡(luò)、數(shù)據(jù)廣播等來(lái)傳輸所述計(jì)算機(jī)程序或所述數(shù)字信號(hào)。另外,本發(fā)明也可以是具備微處理器與存儲(chǔ)器的計(jì)算機(jī)系統(tǒng),所 述存儲(chǔ)器存儲(chǔ)上述計(jì)算機(jī)程序,所述微處理器根據(jù)所述計(jì)算機(jī)程序動(dòng) 作。另外,也可通過(guò)將所述程序或所述數(shù)字信號(hào)記錄在所述記錄媒體 中移送,或經(jīng)由所述網(wǎng)絡(luò)等移送所述程序或所述數(shù)字信號(hào),由獨(dú)立的 其它計(jì)算機(jī)系統(tǒng)來(lái)實(shí)施。(17)也可分別組合上述實(shí)施方式及上述變形例。 產(chǎn)業(yè)上的可利用性本發(fā)明的程序變換裝置生成對(duì)加密化的內(nèi)容進(jìn)行解密并且再現(xiàn) 的播放器等程序,在進(jìn)行內(nèi)容的制作、分發(fā)等的內(nèi)容產(chǎn)業(yè)中可以使用。
權(quán)利要求
1、 一種程序變換裝置,其特征在于,具備程序存儲(chǔ)部件,存儲(chǔ)原程序,該原程序包含對(duì)被運(yùn)算信息執(zhí)行使 用秘密信息的運(yùn)算的秘密運(yùn)算命令;分割秘密信息生成部件,使用所述秘密信息與規(guī)定的結(jié)合運(yùn)算,生成若實(shí)施所述結(jié)合運(yùn)算則得到所述秘密信息的多個(gè)分割秘密信息; 分割運(yùn)算命令生成部件,對(duì)各個(gè)所述分割秘密信息,生成用于執(zhí) 行使用所述被運(yùn)算信息與該分割秘密信息的分割運(yùn)算的分割運(yùn)算命 令;結(jié)合命令生成部件,生成結(jié)合命令,該結(jié)合命令通過(guò)使用所述結(jié) 合運(yùn)算結(jié)合所述分割運(yùn)算命令的處理結(jié)果,從而算出與所述秘密運(yùn)算 命令相同的結(jié)果;和置換部件,將所述原程序中的所述秘密運(yùn)算命令置換為所述分割 運(yùn)算命令與所述結(jié)合命令。
2、 根據(jù)權(quán)利要求1所述的程序變換裝置,其特征在于 所述結(jié)合運(yùn)算是基于每比特的自雙反函數(shù)的運(yùn)算。
3、 根據(jù)權(quán)利要求2所述的程序變換裝置,其特征在于 所述結(jié)合運(yùn)算是在輸入比特值全部為0時(shí)輸出0、輸入比特值全部為1時(shí)輸出1的運(yùn)算。
4、 根據(jù)權(quán)利要求3所述的程序變換裝置,其特征在于 所述秘密運(yùn)算命令執(zhí)行的運(yùn)算是每個(gè)比特的邏輯運(yùn)算, 所述分割運(yùn)算是與所述秘密運(yùn)算命令執(zhí)行的運(yùn)算相同的運(yùn)算, 所述結(jié)合命令是執(zhí)行與所述結(jié)合運(yùn)算相同的運(yùn)算的命令。
5、 根據(jù)權(quán)利要求3所述的程序變換裝置,其特征在于所述秘密運(yùn)算命令執(zhí)行的運(yùn)算,是所述被運(yùn)算信息與所述秘密信 息之間的按每個(gè)相同比特位置的運(yùn)算,所述分割秘密信息生成部件,對(duì)所述秘密信息的每個(gè)比特位置, 生成作為對(duì)該比特位置的自雙反函數(shù)逆運(yùn)算結(jié)果的多個(gè)比特值,并將 生成的多個(gè)比特值的每個(gè)分配給多個(gè)分割秘密信息的該比特位置,所述分割運(yùn)算命令,是對(duì)所述被運(yùn)算信息與所述分割秘密信息的 每個(gè)相同比特位置執(zhí)行所述運(yùn)算的命令,所述結(jié)合命令是如下命令,即對(duì)于所述分割運(yùn)算分別算出的多 個(gè)結(jié)果,對(duì)相同比特位置的比特值實(shí)施所述自雙反函數(shù),并將其結(jié)果 設(shè)為該比特位置的比特值,由此執(zhí)行所述結(jié)合。
6、 根據(jù)權(quán)利要求3所述的程序變換裝置,其特征在于 所述自雙反函數(shù)是將多個(gè)輸入值中的、占過(guò)半數(shù)的輸入值輸出的多數(shù)決定函數(shù),所述分割秘密信息生成部件,預(yù)先保持與自雙反函數(shù)相關(guān)的多個(gè)輸入值與對(duì)應(yīng)的輸出值之間 的對(duì)應(yīng)表,對(duì)于所述秘密信息的各個(gè)比特位置,從所述對(duì)應(yīng)表中讀出和與該 比特位置的比特值同值的輸出值相對(duì)應(yīng)的多個(gè)輸入值,將所述多個(gè)輸 入值設(shè)為所述多個(gè)分割秘密信息的每個(gè)的該比特位置的比特值。
7、 根據(jù)權(quán)利要求3所述的程序變換裝置,其特征在于 所述程序變換裝置還包含存儲(chǔ)不同的多個(gè)自雙反函數(shù)的運(yùn)算存儲(chǔ)部件,所述分割秘密信息生成部件從存儲(chǔ)在所述運(yùn)算存儲(chǔ)部件中的自 雙反函數(shù)中隨機(jī)選出自雙反函數(shù),作為所述結(jié)合運(yùn)算。
8、 根據(jù)權(quán)利要求3所述的程序變換裝置,其特征在于-所述置換部件還在不影響程序的執(zhí)行結(jié)果的范圍內(nèi),重新排列各個(gè)所述分割運(yùn)算命令與所述結(jié)合運(yùn)算命令。
9、 根據(jù)權(quán)利要求8所述的程序變換裝置,其特征在于 所述置換部件還在不影響程序執(zhí)行結(jié)果的范圍內(nèi),使重新排列后的各運(yùn)算命令的配置分散。
10、 根據(jù)權(quán)利要求9所述的程序變換裝置,其特征在于 所述置換部件還在不影響程序執(zhí)行結(jié)果的范圍內(nèi),追加偽運(yùn)算處理。
11、 一種程序變換方法,對(duì)原程序進(jìn)行變換,該原程序包含對(duì)被 運(yùn)算信息執(zhí)行使用秘密信息的運(yùn)算的秘密運(yùn)算命令,其特征在于,包 含分割秘密信息生成步驟,使用所述秘密信息與規(guī)定的結(jié)合運(yùn)算,生成若實(shí)施所述結(jié)合運(yùn)算則得到所述秘密信息的多個(gè)分割秘密信息; 分割運(yùn)算命令生成步驟,對(duì)各個(gè)所述分割秘密信息,生成用于執(zhí) 行使用所述被運(yùn)算信息與該分割秘密信息的分割運(yùn)算的分割運(yùn)算命 令;結(jié)合命令生成步驟,生成結(jié)合命令,該結(jié)合命令通過(guò)使用所述結(jié) 合運(yùn)算結(jié)合所述分割運(yùn)算命令的處理結(jié)果,從而算出與所述秘密運(yùn)算 命令相同的結(jié)果;和置換步驟,將所述原程序中的所述秘密運(yùn)算命令置換為所述分割 運(yùn)算命令與所述結(jié)合命令。
12、 一種計(jì)算機(jī)程序,在程序變換裝置中使用,該程序變換裝置 對(duì)原程序進(jìn)行變換,該原程序包含對(duì)被運(yùn)算信息執(zhí)行使用秘密信息的 運(yùn)算的秘密運(yùn)算命令,其特征在于,該計(jì)算機(jī)程序包含分割秘密信息生成步驟,使用所述秘密信息與規(guī)定的結(jié)合運(yùn)算, 生成若實(shí)施所述結(jié)合運(yùn)算則得到所述秘密信息的多個(gè)分割秘密信息;分割運(yùn)算命令生成步驟,對(duì)各個(gè)所述分割秘密信息,生成用于執(zhí) 行使用所述被運(yùn)算信息與該分割秘密信息的分割運(yùn)算的分割運(yùn)算命 令;結(jié)合命令生成步驟,生成結(jié)合命令,該結(jié)合命令通過(guò)使用所述結(jié) 合運(yùn)算結(jié)合所述分割運(yùn)算命令的處理結(jié)果,從而算出與所述秘密運(yùn)算 命令相同的結(jié)果;和置換步驟,將所述原程序中的所述秘密運(yùn)算命令置換為所述分割 運(yùn)算命令與所述結(jié)合命令。
13、 一種集成電路,在程序變換裝置中使用,該程序變換裝置對(duì) 原程序進(jìn)行變換,該原程序包含對(duì)被運(yùn)算信息執(zhí)行使用秘密信息的運(yùn) 算的秘密運(yùn)算命令,其特征在于,該集成電路具備分割秘密信息生成部件,使用所述秘密信息與規(guī)定的結(jié)合運(yùn)算, 生成若實(shí)施所述結(jié)合運(yùn)算則得到所述秘密信息的多個(gè)分割秘密信息;分割運(yùn)算命令生成部件,對(duì)各個(gè)所述分割秘密信息,生成用于執(zhí) 行使用所述被運(yùn)算信息與該分割秘密信息的分割運(yùn)算的分割運(yùn)算命 令;結(jié)合命令生成部件,生成結(jié)合命令,該結(jié)合命令通過(guò)使用所述結(jié) 合運(yùn)算結(jié)合所述分割運(yùn)算命令的處理結(jié)果,從而算出與所述秘密運(yùn)算 命令相同的結(jié)果;和置換部件,將所述原程序中的所述秘密運(yùn)算命令置換為所述分割 運(yùn)算命令與所述結(jié)合命令。
14、 一種記錄媒體,是存儲(chǔ)了程序變換裝置中使用的計(jì)算機(jī)程序 的計(jì)算機(jī)可讀取記錄媒體,該程序變換裝置對(duì)原程序進(jìn)行變換,該原 程序包含對(duì)被運(yùn)算信息執(zhí)行使用秘密信息的運(yùn)算的秘密運(yùn)算命令,其 特征在于,所述計(jì)算機(jī)程序包含分割秘密信息生成步驟,使用所述秘密信息與規(guī)定的結(jié)合運(yùn)算, 生成若實(shí)施所述結(jié)合運(yùn)算則得到所述秘密信息的多個(gè)分割秘密信息;分割運(yùn)算命令生成步驟,對(duì)各個(gè)所述分割秘密信息,生成用于執(zhí) 行使用所述被運(yùn)算信息與該分割秘密信息的分割運(yùn)算的分割運(yùn)算命 令;結(jié)合命令生成步驟,生成結(jié)合命令,該結(jié)合命令通過(guò)使用所述結(jié) 合運(yùn)算結(jié)合所述分割運(yùn)算命令的處理結(jié)果,從而算出與所述秘密運(yùn)算 命令相同的結(jié)果;和置換步驟,將所述原程序中的所述秘密運(yùn)算命令置換為所述分割 運(yùn)算命令與所述結(jié)合命令。
15、 一種安全處理裝置,其特征在于 具備被運(yùn)算信息保持部件,保持被運(yùn)算信息; 分割秘密信息保持部件,保持多個(gè)分割秘密信息; 結(jié)合運(yùn)算式保持部件,保持表示結(jié)合所述多個(gè)分割秘密信息的結(jié)合運(yùn)算的結(jié)合運(yùn)算式;分割運(yùn)算部件,對(duì)所述多個(gè)分割秘密信息的每個(gè),實(shí)施對(duì)所述被運(yùn)算信息使用該分割秘密信息的第1運(yùn)算、即分割運(yùn)算;和結(jié)合部件,使用所述結(jié)合運(yùn)算,對(duì)所述多個(gè)分割運(yùn)算的結(jié)果進(jìn)行扭A 5口 n 所述結(jié)合部件使用所述結(jié)合運(yùn)算對(duì)所述分割運(yùn)算的結(jié)果進(jìn)行結(jié) 合,以使得結(jié)合的結(jié)果與使用通過(guò)所述結(jié)合運(yùn)算結(jié)合所述多個(gè)分割秘密信息時(shí)得到的秘密信息、對(duì)所述被運(yùn)算信息實(shí)施第2運(yùn)算的結(jié)果相 同。
16、 根據(jù)權(quán)利要求15所述的安全處理裝置,其特征在于 所述第1運(yùn)算與所述第2運(yùn)算為相同運(yùn)算。
17、 一種計(jì)算機(jī)程序,其特征在于具備被運(yùn)算信息、多個(gè)分割秘密信息、和可結(jié)合所述多個(gè)分割秘 密信息的結(jié)合運(yùn)算式,該計(jì)算機(jī)程序具有分割運(yùn)算步驟,對(duì)所述多個(gè)分割秘密信息的每個(gè),實(shí)施對(duì)所述被 運(yùn)算信息使用該分割秘密信息的第1運(yùn)算、即分割運(yùn)算;和結(jié)合步驟,使用所述結(jié)合運(yùn)算,對(duì)所述多個(gè)分割運(yùn)算步驟的結(jié)果 進(jìn)行結(jié)合,所述結(jié)合步驟使用所述結(jié)合運(yùn)算對(duì)所述分割運(yùn)算步驟的結(jié)果進(jìn) 行結(jié)合,以使得結(jié)合的結(jié)果與使用通過(guò)所述結(jié)合運(yùn)算結(jié)合所述多個(gè)分 割秘密信息時(shí)得到的秘密信息、對(duì)所述被運(yùn)算信息實(shí)施第2運(yùn)算的結(jié) 果相同。
18、 根據(jù)權(quán)利要求17所述的計(jì)算機(jī)程序,其特征在于 所述第1運(yùn)算與所述第2運(yùn)算為相同運(yùn)算。
全文摘要
本發(fā)明提供一種程序變換裝置,能不將秘密信息表示在存儲(chǔ)器上地執(zhí)行包含使用該秘密信息對(duì)加密化數(shù)據(jù)進(jìn)行解密的秘密運(yùn)算的程序,使程序執(zhí)行時(shí)的機(jī)密性提高。執(zhí)行程序生成裝置中,對(duì)于包含被運(yùn)算信息與秘密信息的每個(gè)相同比特位置的運(yùn)算、即秘密運(yùn)算處理的原程序,結(jié)合函數(shù)生成部生成對(duì)輸入值按每個(gè)比特位置實(shí)施自雙反函數(shù)的結(jié)合函數(shù)處理,分割秘密信息生成部利用對(duì)所述秘密信息的自雙反函數(shù)的逆運(yùn)算生成多個(gè)分割秘密信息,程序變換部生成對(duì)所述被運(yùn)算信息與該分割秘密信息的每個(gè)相同比特位置執(zhí)行所述運(yùn)算的分割秘密運(yùn)算處理,將所述原程序中的秘密運(yùn)算處理置換為將分割秘密運(yùn)算處理的運(yùn)算結(jié)果設(shè)為輸入的分割秘密運(yùn)算處理、和多個(gè)分割秘密運(yùn)算處理。
文檔編號(hào)G06F21/22GK101147155SQ20068000971
公開(kāi)日2008年3月19日 申請(qǐng)日期2006年3月27日 優(yōu)先權(quán)日2005年3月25日
發(fā)明者中村匡秀, 佐藤太一, 松本健一, 淺井理惠子, 芳賀智之, 門(mén)田曉人 申請(qǐng)人:松下電器產(chǎn)業(yè)株式會(huì)社;國(guó)立大學(xué)法人奈良先端科學(xué)技術(shù)大學(xué)院大學(xué)