專利名稱::密碼運算裝置、密碼運算程序以及記錄介質(zhì)的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及對明文進行加密的密碼運算裝置以及密碼運算程序。
背景技術(shù):
:在以往的“密碼處理裝置以及認證應用程序”中,使用掩碼運算方法來進行DES(DataEncryptionStandard,數(shù)據(jù)力口密標準)、AES(AdvancedEncryptionStandard,高級加密標準)的運算。僅在輸入了參數(shù)改寫命令的情況下,生成運算所需的轉(zhuǎn)換字符換算表(transformationalcharacterconversiontable)、_石馬的—i(歹口,I禾1Jt獻1)。由此,針對旁路(sidechannel)攻擊的安全性提高,并且制造成本被抑制得較低。在以往的“密碼處理裝置以及認證應用程序”中,通過掩碼運算方法來進行運算,所以每當掩碼改變時,需要更新字符換算表,此時需要更新所需的時間,整體的運算速度變慢。另外,在使掩碼固定時,在弄清了該掩碼的情況下,產(chǎn)生通過旁路攻擊非法地取得其密鑰這樣的安全上的問題。進而,還產(chǎn)生更新字符換算表的處理過程有可能被攻擊這樣的課題。專利文獻1日本特開2007-6184號公報、第18頁、圖6以及第19頁、圖7
發(fā)明內(nèi)容本發(fā)明提供一種編程技術(shù)以及使用了該編程技術(shù)的密碼運算裝置,降低密碼運算裝置被暴露于電力解析等旁路攻擊而泄漏的“秘密信息”的量,提高針對旁路攻擊的抗性。本發(fā)明的密碼運算裝置,反復執(zhí)行輸入變換處理,其中,該輸入變換處理包括輸入成為密碼運算中的數(shù)據(jù)變換的對象的變換對象數(shù)據(jù)的處理、和通過執(zhí)行密碼運算對所輸入的所述變換對象數(shù)據(jù)進行數(shù)據(jù)變換的處理,所述密碼運算裝置的特征在于,具備數(shù)據(jù)寫入部,通過使用CPU(CentralProcessingUnit,中央處理單元),在各個所述輸入變換處理中的所述密碼運算的執(zhí)行之前,向所述密碼運算中使用的規(guī)定的存儲區(qū)域,寫入針對每個所述輸入變換處理而發(fā)生變化的數(shù)據(jù)即變化數(shù)據(jù);以及密碼運算執(zhí)行部,通過使用CPU,在通過所述數(shù)據(jù)寫入部向所述存儲區(qū)域?qū)懭肓怂鲎兓瘮?shù)據(jù)之后,使用寫入了所述變化數(shù)據(jù)的所述存儲區(qū)域來執(zhí)行所述密碼運算。所述密碼運算使用變量,所述數(shù)據(jù)寫入部通過使用CPU,在各個所述輸入變換處理中的所述密碼運算中的所述變量的使用之前,向保存所述變量的數(shù)據(jù)的存儲區(qū)域,寫入針對每個所述輸入變換處理而發(fā)生變化的變化數(shù)據(jù),所述密碼運算執(zhí)行部通過使用CPU,在通過所述數(shù)據(jù)寫入部向所述變量寫入了所述變化數(shù)據(jù)之后,執(zhí)行使用所述變量的所述密碼運算。所述密碼運算利用使用所述變量的函數(shù),所述數(shù)據(jù)寫入部向所述函數(shù)中使用的所述變量的所述存儲區(qū)域?qū)懭胨鲎兓瘮?shù)據(jù),所述密碼運算執(zhí)行部通過將寫入了所述變化數(shù)據(jù)的所述變量應用于所述函數(shù),執(zhí)行所述密碼運算。所述數(shù)據(jù)寫入部生成所述變量,在生成所述變量之后向所述變量的所述存儲區(qū)域?qū)懭胨鲎兓瘮?shù)據(jù)并且調(diào)用所述函數(shù),向所述函數(shù)傳遞寫入了所述變化數(shù)據(jù)的所述變量,所述密碼運算執(zhí)行部通過將所傳遞的所述變量應用于所述函數(shù),執(zhí)行所述密碼運笪弁。所述數(shù)據(jù)寫入部調(diào)用所述函數(shù),在調(diào)用了所述函數(shù)之后執(zhí)行所述函數(shù)的內(nèi)部處理而生成所述變量,并向所生成的所述變量的所述存儲區(qū)域?qū)懭胨鲎兓瘮?shù)據(jù),所述密碼運算執(zhí)行部將通過所述數(shù)據(jù)寫入部執(zhí)行所述函數(shù)的內(nèi)部處理而寫入了所述變化數(shù)據(jù)的所述變量應用于所述函數(shù),從而執(zhí)行所述密碼運算。所述變化數(shù)據(jù)是以下中的某一個(a)明文;(b)密文;(c)由所述CPU針對每個所述輸入變換處理在所述密碼運算之前生成的進程ID(Identification,標識);(d)由所述CPU生成的表示當前的時刻的時刻數(shù)據(jù);(e)經(jīng)由所述CPU的處理而生成的隨機數(shù)。本發(fā)明的密碼運算程序,反復執(zhí)行輸入變換處理,其中,該輸入變換處理包括輸入成為密碼運算中的數(shù)據(jù)變換的對象的變換對象數(shù)據(jù)的處理、和通過執(zhí)行密碼運算對所輸入的所述變換對象數(shù)據(jù)進行數(shù)據(jù)變換的處理,所述密碼運算程序的特征在于,使計算機執(zhí)行如下處理在各個所述輸入變換處理中的所述密碼運算的執(zhí)行之前,向所述密碼運算中使用的規(guī)定的存儲區(qū)域,寫入針對每個所述輸入變換處理而發(fā)生變化的數(shù)據(jù)即變化數(shù)據(jù)的處理;以及在向所述存儲區(qū)域?qū)懭肓怂鲎兓瘮?shù)據(jù)之后,使用寫入了所述變化數(shù)據(jù)的所述存儲區(qū)域來執(zhí)行所述密碼運算的處理。本發(fā)明的密碼運算程序,反復執(zhí)行輸入變換處理,其中,該輸入變換處理包括輸入成為密碼運算中的數(shù)據(jù)變換的對象的變換對象數(shù)據(jù)的處理、和通過執(zhí)行使用了變量的密碼運算對所輸入的所述變換對象數(shù)據(jù)進行數(shù)據(jù)變換的處理,所述密碼運算程序的特征在于,使計算機執(zhí)行如下處理在各個所述輸入變換處理中的所述密碼運算中的所述變量的使用之前,向保存所述變量的數(shù)據(jù)的存儲區(qū)域,寫入針對每個所述輸入變換處理而發(fā)生變化的變化數(shù)據(jù)的處理;以及在向所述變量的所述存儲區(qū)域?qū)懭肓怂鲎兓瘮?shù)據(jù)之后,執(zhí)行使用所述變量的所述密碼運算的處理。本發(fā)明的記錄介質(zhì)的特征在于記錄了任意一個所述加密運算程序。通過本發(fā)明,可以提供一種提高密碼運算裝置針對旁路攻擊的抗性的編程技術(shù)以及提高了針對旁路攻擊的抗性的密碼運算裝置。圖1是示出實施方式1的密碼運算裝置的硬件資源的例子的圖。圖2是實施方式1的密碼運算裝置的框圖。圖3是實施方式1的密碼運算裝置的應用例即IC卡。圖4是示出實施方式1的密碼運算的一般的過程的流程圖。圖5是由實施方式1的密碼運算裝置進行的密碼運算的流程圖。圖6是示出實施方式1的密碼運算裝置的效果的圖。圖7是說明實施方式1的密碼運算裝置的效果的理由的圖。圖8是示出實施方式2的密碼運算裝置的硬件資源的圖。圖9是由實施方式2的密碼運算裝置進行的密碼運算的流程圖。圖10是使用實施方式3的變量的流程圖。圖11是使用實施方式3的函數(shù)的流程圖。圖12是在實施方式3的變量生成后調(diào)用函數(shù)的流程圖。圖13是說明圖12的圖。圖14是在實施方式3的函數(shù)調(diào)用后生成變量的流程圖。圖15是說明圖14的圖。附圖標記說明1=IC卡;11端子;100密碼運算裝置;110數(shù)據(jù)寫入部;120密碼運算執(zhí)行部;140存儲區(qū)域;150=CPU;151寄存器;153總線;160=RAM;170通信部;180=ROM;181密碼運算執(zhí)行程序;182認證處理程序;183應用程序;184數(shù)據(jù)儲存部;185可改寫數(shù)據(jù)儲存部;190:隨機數(shù)發(fā)生器。具體實施例方式實施方式1.參照圖1圖7,對實施方式1中的密碼運算裝置100進行說明。在以下的實施方式中,說明如下情況密碼運算裝置100輸入明文(變換對象數(shù)據(jù)),對所輸入的明文進行加密(數(shù)據(jù)變換)。但是,由于加密和解密是相互相反的處理,所以密碼運算裝置100不限于對明文進行加密的情況,而還可以適用于對密文(變換對象數(shù)據(jù))進行解密(數(shù)據(jù)變換)的情況,這從以下的說明中可明確。在以下的說明中,應從廣義上解釋加密、密碼運算等。加密、密碼運算等在明文是向密文的變換對象的情況下意味著對明文進行“加密”,在密文是向明文的變換對象的情況下意味著對密文進行“解密”、“解密運算”等。圖1是示出通過計算機實現(xiàn)的密碼運算裝置100的硬件資源的一個例子的圖。在圖1中,密碼運算裝置100具備執(zhí)行程序的CPU150(CentralProcessingUnit,中央處理單元)。CPU150具備寄存器151。CPU150經(jīng)由總線153而與RAM(RandomAccessMemory,隨機存取存儲器)160、通信部170以及可以進行存儲的ROM(ReadOnlyMemory,只讀存儲器)180連接。CPU150對這些硬件設(shè)備進行控制。RAM160是易失性存儲器的一個例子。ROM180是非易失性存儲器的一個例子。它們是存儲裝置或者存儲部、保存部的一個例子,具有密碼運算中使用的存儲區(qū)域。通信部6170是輸入部、輸入裝置的一個例子。另外,通信部170是輸出部、輸出裝置的一個例子。在ROM180中,存儲了后述的各種程序。由CPU150讀出并執(zhí)行這些程序。在這些各種程序中,包括執(zhí)行在以下敘述的實施方式的說明中說明為“部”的功能的程序。另外,在以下敘述的實施方式的說明中,數(shù)據(jù)、信號值被記錄在寄存器151、RAM160的存儲器、ROM180的存儲器中。另外,在以下敘述的實施方式的說明中,說明為“部”的部分既可以是“單元”、“電路”、“儀器”,另外也可以是“步驟”、“過程”、“處理”。即,說明為“部”的部分也可以通過存儲在ROM180中的固件(firmware)來實現(xiàn)。或者,也可以僅通過軟件、或者僅通過元件、設(shè)備、基板、布線等硬件、或者通過軟件與硬件的組合、或者進一步與固件的組合來實現(xiàn)。固件和軟件作為程序而被存儲在R0M180中。如上所述,由CPU150讀出程序,并由CPU150執(zhí)行。即,程序使計算機作為以下敘述的“部”而發(fā)揮功能。或者,程序使計算機執(zhí)行以下敘述的“部”的過程、方法。CPU150判斷各種運算、控制代碼。在CPU150的內(nèi)部,有在運算時保存數(shù)據(jù)的寄存器151。RAM160臨時保存未完全進入到寄存器151中的數(shù)據(jù)。ROM180能夠以非易失方式保存程序、數(shù)據(jù)等。通信部170與外部進行通信??偩€153連接這些構(gòu)成要素,進行數(shù)據(jù)傳送。在ROM180中具有密碼運算執(zhí)行程序181、認證處理程序182、應用程序183等程序;儲存不會被刪除的數(shù)據(jù)的數(shù)據(jù)儲存部184;以及可以根據(jù)需要來改寫數(shù)據(jù)的可改寫數(shù)據(jù)儲存部185。另外,有時在密碼運算裝置100中安裝以進行密碼運算為目的的硬件的協(xié)同處理器(co-processor)等,但由于與本實施方式1沒有直接關(guān)聯(lián),所以省略說明。(密碼程序的一般處理)通常,在密碼運算中,CPU150讀取密碼運算執(zhí)行程序181,并且使用寄存器151、RAM160,將經(jīng)由通信部170從外部輸入的明文變換為密文。密碼運算中所需的表格數(shù)據(jù)、密鑰數(shù)據(jù)保存在數(shù)據(jù)儲存部184、可改寫數(shù)據(jù)儲存部185中,所以根據(jù)需要也會使用這些數(shù)據(jù)。如果運算結(jié)束,則作為結(jié)果的密文被取出到外部。(框結(jié)構(gòu))圖2是實施方式2的密碼運算裝置100的框圖。密碼運算裝置100具備數(shù)據(jù)寫入部110、密碼運算執(zhí)行部120、保存明文的明文保存部130、寄存器、密碼運算中使用的存儲區(qū)域140。數(shù)據(jù)寫入部110、密碼運算執(zhí)行部120對應于圖1的密碼運算執(zhí)行程序181。明文保存部130對應于圖1的RAM160。存儲區(qū)域140對應于圖1的寄存器151、RAM160、ROM180等。數(shù)據(jù)寫入部110如后所述通過使用CPU,在密碼運算之前,向存儲區(qū)域140寫入明文。另外,密碼運算執(zhí)行部120通過使用CPU,在由數(shù)據(jù)寫入部110向存儲區(qū)域140寫入了明文之后,使用存儲區(qū)域140來執(zhí)行密碼運算。關(guān)于數(shù)據(jù)寫入部110、密碼運算執(zhí)行部120,在后面的動作的說明中進行敘述。(IC卡)圖3示出作為實施方式1的密碼運算裝置100的典型的實施方式之一的ICdintegratedCircuit,集成電路)卡1。在IC卡1的內(nèi)部嵌入了IC。IC卡1具有擔任與外部的I/FdnterFace,接口)的端子11。在端子11中,有GND端子、供給電力的端子、數(shù)據(jù)通信端子、數(shù)據(jù)寫入端子等。IC卡1具有圖1所示的硬件資源。在以下的說明中,將密碼運算裝置100假設(shè)為IC卡1而進行說明。(一般的加密處理)圖4是一般的處理過程的流程圖。參照圖4,對密碼運算的一般的處理過程進行說明。在SlOO中開始處理。在SlOl中,向端子11供給電源,電源成為接通(ON)。在S102中,讀取密碼運算執(zhí)行程序181,進行存儲器的確保等初始化。在S103中,CPU150等待從端子11輸入明文,如果輸入了明文,則將明文保存在RAM160等中。在S104中,讀取密碼運算執(zhí)行程序181,使用寄存器151、RAM160來進行密碼運算。在S105中,取出作為運算結(jié)果的密文。在S106中,CPU150判斷是否繼續(xù)執(zhí)行密碼運算處理,在繼續(xù)執(zhí)行的情況下,處理返回到S102,以下同樣地進行處理。在中止繼續(xù)執(zhí)行的情況下,處理轉(zhuǎn)移到S107,電源成為關(guān)斷(OFF)。然后,在S108中結(jié)束。(密碼運算裝置100的特征)圖5是示出由IC卡1(密碼運算裝置100)執(zhí)行的密碼處理的特征的流程圖。除了圖中的S200以外,與圖4相同。在實施方式1的IC卡1的密碼處理中,在圖4中的S103(明文輸入處理)與S104(密碼運算)之間,插入了寄存器/存儲器輸入處理(S200)。(S200的內(nèi)容)如圖5所示,IC卡1反復執(zhí)行加密處理(輸入變換處理),其中,該加密處理包括輸入明文(變換對象數(shù)據(jù))的處理(S103)、和通過執(zhí)行密碼運算來對所輸入的明文進行加密(數(shù)據(jù)變換)的處理(S104)(圖5的用虛線包圍的范圍)。(1)在S200中,數(shù)據(jù)寫入部110通過使用CPU150,在各個加密處理中的密碼運算(S104)的執(zhí)行前,向該密碼運算中使用的寄存器151、存儲器(RAM、R0M)等規(guī)定的存儲區(qū)域140,寫入針對每個加密處理(密碼運算)發(fā)生變化的“變化數(shù)據(jù)”。在圖5的情況下,示出了作為“變化數(shù)據(jù)”寫入明文的例子。此處,針對每個加密處理發(fā)生變化的“變化數(shù)據(jù)”是指,針對圖5的虛線部分的每個循環(huán),上次的數(shù)據(jù)寫入(S200)的數(shù)據(jù)與本次的數(shù)據(jù)寫入(S200)的數(shù)據(jù)不同。例如,數(shù)據(jù)寫入部110針對圖5的虛線部的每個循環(huán),在S200中將“不同的數(shù)據(jù)”(變化數(shù)據(jù))寫入到規(guī)定的存儲區(qū)域中。(2)在S104中,密碼運算執(zhí)行部120通過使用CPU150,在由數(shù)據(jù)寫入部110向存儲區(qū)域140寫入了所述規(guī)定的數(shù)據(jù)之后,使用存儲區(qū)域140來執(zhí)行密碼運算。S卩,在S200中,數(shù)據(jù)寫入部110將明文的一部分或者全部作為數(shù)據(jù)(變化數(shù)據(jù))而寫入到在密碼運算(S104)中使用并改寫的寄存器、存儲器中。通過引入這樣的處理,在由密碼運算執(zhí)行部120開始密碼運算之前,密碼運算(S104)中使用的所有的寄存器以及存儲器被每次都改變的明文填滿。即,密碼處理(S104)中使用的寄存器、存儲器的前一狀態(tài)在每次的密碼運算時都不同。由此,可以得到圖6、圖7所示的效果。使用圖6、圖7,對追加了S200的情況下的效果進行說明。另外,由于預先設(shè)定了密碼運算中使用的寄存器、存儲器的存儲區(qū)域,所以數(shù)據(jù)寫入部110能夠確定應寫入的存儲區(qū)域。接下來,對圖4與圖5的流程進行比較,示出進行了作為旁路攻擊的一種的電力解析的一個例子,并敘述其效果。圖6示出了針對圖4的流程和圖5的流程的電力解析的結(jié)果的比較?!?A)無寄存器輸入”的曲線示出了圖4的流程的結(jié)果?!?B)有寄存器輸入”的曲線示出了圖5的流程的結(jié)果。這些曲線是使CPU150執(zhí)行圖4、圖5的動作、并對其消耗電力進行測定而進行了電力解析的結(jié)果。曲線上部的8個軌跡是電力解析的結(jié)果。在“㈧無寄存器輸入”中,在用圓包圍的范圍A中觀測到使形狀變得相同的軌跡。這是與泄漏的“秘密信息”相關(guān)的部分。峰值的高度依賴于所泄漏的“秘密信息”的量而發(fā)生變化。另一方面,如與范圍A對應的范圍B所示,在“(B)有寄存器輸入”的情況下,觀察不到與所泄漏的“秘密信息”相關(guān)的軌跡。即,圖6示出了通過追加圖5的“寄存器/存儲器輸入處理”(S200)的處理從而可以減少所泄漏的“秘密信息”的量的情形。另外,曲線下部的軌跡示出了所觀測到的消耗電力、觸發(fā)信號、時鐘信號。圖7是示意性地示出圖6所示的現(xiàn)象的圖。(a)和(C)是“㈧無寄存器輸入”的示意圖。(b)和(d)是“⑶有寄存器輸入”的示意圖。關(guān)注某個寄存器的1個比特,設(shè)在時刻t0寫入了與“秘密信息”相關(guān)的數(shù)據(jù)。(無寄存器輸入(a)、(C))在“(A)無寄存器輸入”中,在初始化處理SlOl中寄存器的比特值被初始化為0。因此,從初始化后到時刻to之前,信號電平是0。之后,在時刻to,寫入與“秘密信息”相關(guān)的數(shù)據(jù)。由于不知道與“秘密信息”相關(guān)的數(shù)據(jù)是0還是1,所以在(a)中示出了2個信號電平。(c)示出了改變明文而多次測定電力軌跡、并取它們的平均的情況。在(c)中,由于時刻to以前的信號電平是0,所以在平均電力軌跡中信號電平也是0。在時刻to以后,由于在1個信號的電力軌跡中不知道是0還是1,所以其平均在理論上成為0.5。但是,對于實際的設(shè)備的消耗電力,在0和1的狀態(tài)下消耗電力稍微不同。因此,得到相當于0.5+Δ的電力軌跡。(有寄存器輸入(b)、(d))另一方面,在(b)的“⑶有寄存器輸入”的情況下,在初始化處理SlOl之后,有明文輸入處理S102、寄存器/存儲器輸入處理S200,所以在寄存器中保持明文的一部分。因此,如(b)所示,在時刻t0的以前和以后,都不知道信號電平是0還是1。因此,在(b)中,示意性地寫了2個信號電平。(d)示出了針對該電力軌跡,改變明文并進行多次測定而求出了平均的情況。在(d)中,在時刻t0的以前和以后,都不知道在1個信號的電力軌跡中是0還是1,所以其平均在理論上成為0.5。但是,由于在實際的設(shè)備中消耗電力在0和1的狀態(tài)下所消耗的電力稍微不同,所以得到相當于0.5+Δ的電力軌跡。根據(jù)電力解析的方法,用時刻t0以后的期待值對電力軌跡進行分類,求出其差分。在期待值是1的情況下和期待值是0的情況下,在實際的設(shè)備中消耗電力稍微不同。因此,其平均電力軌跡在“0.5+Δ1”和“0.5+Δ0”中稍微不同,其差被觀測為所泄漏的“秘密fn息ο在(c)中,在時刻t0以前被固定為0,所以觀測不到基于期待值的差分,但在時刻to以后觀測到其差分。另一方面,在(d)中,在時刻to以前得到狀態(tài)0和狀態(tài)1混合存在的軌跡的差分,另外,在時刻to以后得到狀態(tài)0和狀態(tài)1完全分離的狀態(tài)下的軌跡的差分。時刻to的前后的電力軌跡之差如(c)、(d)所示,(d)一方遠小于(c)。其結(jié)果,得到圖6那樣的數(shù)據(jù)。9(晶體管遷移的情況)為簡化說明,說明了在狀態(tài)1和狀態(tài)0下消耗電力不同的情況,但對于消耗電力的現(xiàn)象,在狀態(tài)從1變化為0的情況(例如構(gòu)成邏輯電路的晶體管的狀態(tài)遷移)、以及狀態(tài)從0變化為1的情況下,也可以同樣地進行說明。這是因為,此時在狀態(tài)從1變化為0的情況下和狀態(tài)從1變化為0的情況下,由CPU內(nèi)部的晶體管所消耗的電力中存在少量的差異。這樣,通過在密碼運算前向寄存器或者存儲器填滿明文,對于晶體管的狀態(tài)遷移,也可以對抗來自電力解析的攻擊。在本實施方式1中,在密碼運算之前,向密碼運算中應使用的所有的寄存器、存儲器,在密碼運算開始以前輸入了針對每次的密碼運算會發(fā)生變化的明文,所以可以避免寄存器、存儲器的數(shù)據(jù)的狀態(tài)的固定化,能夠在該寄存器、存儲器中重寫包括密碼運算途中的“秘密信息”的數(shù)據(jù)。其結(jié)果,可以將寄存器、存儲器的數(shù)據(jù)的寫入前后的數(shù)據(jù)的狀態(tài)都設(shè)為不定狀態(tài)。因此,可以降低暴露于旁路攻擊而泄漏的“秘密信息”的量,并提高針對旁路攻擊的抗性。另外,由于不使用掩碼,所以還具有如下效果無需交換掩碼,不會對處理時間造成影響。(寫入到寄存器的數(shù)據(jù))在以上的實施方式1中,作為針對每次的密碼運算會發(fā)生變化的數(shù)據(jù),舉出了明文。但是,明文是一個例子。不限于明文,只要是針對每次的密碼運算會發(fā)生變化的數(shù)據(jù)(變化數(shù)據(jù)),寫入到寄存器等的數(shù)據(jù)也可以是進程ID(Identification,標識)、由CPU150生成的當前的時刻等。另外,在對密文進行解密的情況(密碼運算裝置100是解密裝置的情況)下,也可以將作為變換對象數(shù)據(jù)輸入的密文作為“針對每次的密碼運算會發(fā)生變化的數(shù)據(jù)”而寫入到寄存器等中。另外,即使在密碼運算裝置100是加密裝置的情況下,也可以將從明文變換后的密文作為變化數(shù)據(jù)而進行寫入。另外,也可以如實施方式2所述是隨機數(shù)。在本實施方式1中,作為密碼運算裝置100的實現(xiàn)方式,舉出了IC卡1,但僅是一個例子。只要是使用CPU來進行密碼運算的結(jié)構(gòu),就可以降低本實施方式1中敘述的暴露于旁路攻擊而泄漏的“秘密信息”的量。例如,在單片微型機、PC(PersonalComputer,個人電腦)等中使用的CPU中也具有效果。實施方式2.接下來,參照圖8、圖9,對實施方式2的密碼運算裝置進行說明。實施方式2是代替明文而將隨機數(shù)寫入到寄存器等中的實施方式。圖8是示出實施方式2的IC卡1(密碼運算裝置100)的硬件結(jié)構(gòu)的圖。圖8是對圖1的結(jié)構(gòu)追加了隨機數(shù)發(fā)生器190的結(jié)構(gòu)。即,在實施方式2中,將隨機數(shù)發(fā)生器190產(chǎn)生的隨機數(shù)(R)用作“針對每次的密碼運算會發(fā)生變化的數(shù)據(jù)”。(隨機數(shù)的使用)圖9示出實施方式2的密碼運算的流程。在圖9中,將圖5的流程圖的“S200”置換為S201。S201是寄存器/存儲器輸入處理(R)S201。在S201中,數(shù)據(jù)寫入部110將隨機數(shù)發(fā)生器190使用CPU而產(chǎn)生的隨機數(shù)或者其一部分作為數(shù)據(jù),寫入到在密碼運算(S104)中使用的所有應重寫的寄存器、存儲器中。通過引入這樣的處理,與實施方式1同樣地,所使用的所有的寄存器、存儲器被無法預測的隨機數(shù)所填滿。即,密碼運算(S104)中使用的寄存器、存儲器的前一個狀態(tài)針對每次的運算會不同。因此,實施方式2中的效果與圖6的情況相同。而且,由于使用了隨機數(shù),所以無法從外部推測寄存器、存儲器的即將使用之前的狀態(tài),因此還能夠增強針對選擇性的明文攻擊的抗性。另外,由于不使用掩碼,所以無需交換掩碼,不會對處理時間造成影響。實施方式3.接下來,參照圖10圖14,對實施方式3進行說明。實施方式3涉及變量的使用方法。IC卡1(密碼運算裝置100)的結(jié)構(gòu)與實施方式1相同。圖10是示出變量的使用的流程圖。圖10是示出在圖4的密碼運算(S104)的處理內(nèi)部使用變量的情況的流程圖。S104的內(nèi)部處理從S500開始。在S501中生成變量。關(guān)于所生成的變量,在S502中通過數(shù)據(jù)寫入部110輸入了針對每次的密碼運算會發(fā)生變化的數(shù)據(jù)(變化數(shù)據(jù))后,使用于由密碼運算執(zhí)行部120執(zhí)行的密碼運算中(S503)。另外,向變量輸入(寫入)變化數(shù)據(jù)是指,向應寫入該變量的數(shù)據(jù)的存儲區(qū)域?qū)懭胱兓瘮?shù)據(jù)。如果密碼運算結(jié)束,則密碼運算執(zhí)行部120釋放變量中使用的存儲器(S504),并在S505中結(jié)束變量處理?!白兓瘮?shù)據(jù)”如實施方式1、實施方式2所述,是明文、隨機數(shù)、密碼、時刻、進程ID等。如圖10所示,密碼運算裝置100反復執(zhí)行加密處理(輸入變換處理),其中,該加密處理包括輸入明文(變換對象數(shù)據(jù))的處理、以及通過執(zhí)行使用了變量的密碼運算對所輸入的明文(變換對象數(shù)據(jù))進行加密(數(shù)據(jù)變換)的處理。然后,數(shù)據(jù)寫入部110使用CPU150,在各個加密處理中的密碼運算(S503)中的變量的使用之前,向變量寫入針對每個加密處理會發(fā)生變化的明文(變化數(shù)據(jù)的一個例子)。然后,密碼運算執(zhí)行部120通過使用CPU150,在通過數(shù)據(jù)寫入部110向變量寫入了明文之后,執(zhí)行使用變量的密碼運算。艮口,數(shù)據(jù)寫入部110通過使用CPU150,在各個加密處理(數(shù)據(jù)變換處理)中的密碼運算(S104)中的變量的使用之前,向保存變量的數(shù)據(jù)的存儲區(qū)域,寫入針對每個加密處理會發(fā)生變化的變化數(shù)據(jù)。由此,變量的狀態(tài)針對每次的密碼運算會不同,所以得到圖6中敘述的效果。另外,由于不使用掩碼,所以無需交換掩碼,不會對處理時間造成影響。(變量使用的具體的情況)接下來,參照圖11圖14,作為使用變量的具體的情況,對調(diào)用函數(shù)的情況進行說明。即,以下的例子涉及編程中經(jīng)常使用的“函數(shù)調(diào)用”。在密碼運算中,由于反復進行同樣的處理,所以為了設(shè)為效率高的程序而制作函數(shù),并對該函數(shù)提供值來執(zhí)行運算。(函數(shù)調(diào)用的一般的流程)圖11是一般的函數(shù)調(diào)用流程,示出了圖4的S104的內(nèi)部處理。在S300中,開始函數(shù)調(diào)用。在S301中,調(diào)用函數(shù)。此時,函數(shù)中使用的值通過“Callbyvalue(值調(diào)用)”或者“Callbyreference(參照調(diào)用)”被傳遞給函數(shù)。在S302中,生成在函數(shù)內(nèi)部使用的變量。對所生成的變量設(shè)定初始值。在S303中,使用傳遞給函數(shù)的值和所生成的變量來進行密碼運算。如果運算結(jié)束,則在S304中將結(jié)果傳遞給函數(shù)調(diào)用側(cè)而釋放變量,并在S305由社擊(密碼運算裝置100的特征)圖12示出通過實施方式3的密碼運算裝置100進行的函數(shù)調(diào)用的流程。圖12相當于圖10的S104的內(nèi)部處理。另外,圖13是用于說明圖12的概念圖。使用圖12、圖13進行說明。(1)數(shù)據(jù)寫入部110生成函數(shù)中使用的變量a、b、c(S302)。(2)數(shù)據(jù)寫入部110向所生成的變量a、b、c,輸入針對每次的密碼運算會發(fā)生變化的數(shù)據(jù)(明文或者其一部分)(S400)。(3)數(shù)據(jù)寫入部110通過“Callbyreference”來調(diào)用函數(shù)(S401)。在函數(shù)調(diào)用中,數(shù)據(jù)寫入部110將在S400中寫入了明文的變量a、b、C、與函數(shù)中使用的值X、y(自變量)一起,通過“Callbyreference”傳遞給函數(shù)。(4)密碼運算執(zhí)行部120通過使用CPU,使用被傳遞了變量的函數(shù)來執(zhí)行密碼運算。通過S400的處理,在函數(shù)中即將使用之前的在函數(shù)內(nèi)部中使用的值、以及變量的狀態(tài)針對每次的密碼運算會不同,所以得到圖6中敘述的效果。另外,由于不使用掩碼,所以無需交換掩碼,不會對處理時間造成影響。在圖12的情況下,生成變量后調(diào)用了函數(shù),但也可以在數(shù)據(jù)寫入部110通過“Callbyreference”調(diào)用了函數(shù)之后,數(shù)據(jù)寫入部110在函數(shù)內(nèi)部生成變量,進行明文的變量輸入處理,之后進行密碼運算。在該情況下,明文保存在全局變量中,從而可以從函數(shù)內(nèi)部進行參照。圖14是在調(diào)用了函數(shù)之后生成變量并向變量寫入明文的流程圖。另外,圖15是用于說明圖14的概念圖。圖14是將圖12的函數(shù)調(diào)用(S401)設(shè)為最初的流程。(1)數(shù)據(jù)寫入部110通過“Callbyreference”調(diào)用函數(shù)(S401)。(2)接下來,數(shù)據(jù)寫入部110在函數(shù)內(nèi)部生成變量a、b、c(S302)。(3)數(shù)據(jù)寫入部110向所生成的變量a、b、c,輸入針對每次的密碼運算會發(fā)生變化的數(shù)據(jù)(明文或者其一部分)(S400)。(4)密碼運算執(zhí)行部120將寫入了明文的變量應用于函數(shù),使用該函數(shù)來執(zhí)行密碼運算(S303)。通過所述S400的處理,在函數(shù)中即將使用之前的在函數(shù)內(nèi)部中使用的值、以及變量的狀態(tài)針對每次的密碼運算會不同,所以得到圖6中敘述的效果。另外,由于不使用掩碼,所以無需交換掩碼,不會對處理時間造成影響。在以上的實施方式1中說明的密碼運算裝置是CPU使用寄存器、存儲器來進行密碼運算的裝置,其特征在于,在開始密碼運算以前,向運算中使用的寄存器、存儲器,寫入針對每個密碼運算會發(fā)生變化的數(shù)據(jù),進行密碼運算。在以上的實施方式2、3中說明的密碼運算裝置是CPU使用寄存器、存儲器進行利用了函數(shù)的密碼運算的裝置,其特征在于,在調(diào)用函數(shù)之前生成函數(shù)中使用的變量,向該變量寫入針對每個密碼運算會發(fā)生變化的數(shù)據(jù),并通過Callbyreference將該變量以及函數(shù)中使用的值傳遞給函數(shù),進行密碼運算。在以上的實施方式2、3中說明的密碼運算裝置是CPU使用寄存器、存儲器進行利用了函數(shù)的密碼運算的裝置,其特征在于,通過Callbyreference將函數(shù)中使用的值傳遞給函數(shù),之后生成函數(shù)內(nèi)部中使用的變量,向該變量寫入針對每個密碼運算會發(fā)生變化的數(shù)據(jù),并使用該變量以及函數(shù)中使用的值來進行密碼運算。在以上的實施方式2、3中說明的密碼運算裝置是CPU使用寄存器、存儲器進行密碼運算的裝置,其特征在于,生成變量,向該變量寫入針對每個密碼運算會發(fā)生變化的數(shù)據(jù),使用該變量來進行密碼運算。在以上的實施方式13中說明的密碼運算裝置中,針對每個密碼運算會發(fā)生變化的數(shù)據(jù)是明文、密文、進程ID、表示時刻的時刻數(shù)據(jù)、以及隨機數(shù)中的某一個。以上的實施方式13中說明的密碼運算裝置也可以作為密碼運算程序來實現(xiàn),另外還可以作為記錄了密碼運算程序的“可以由計算機執(zhí)行的記錄介質(zhì)”來實現(xiàn)。另外,也可以通過將以上的實施方式中說明的密碼運算裝置的動作視為步驟,從而作為密碼運算方法來實現(xiàn)。權(quán)利要求一種密碼運算裝置,反復執(zhí)行輸入變換處理,其中,該輸入變換處理包括輸入成為密碼運算中的數(shù)據(jù)變換的對象的變換對象數(shù)據(jù)的處理、和通過執(zhí)行密碼運算對所輸入的所述變換對象數(shù)據(jù)進行數(shù)據(jù)變換的處理,所述密碼運算裝置的特征在于,具備數(shù)據(jù)寫入部,通過使用CPU(CentralProcessingUnit),在各個所述輸入變換處理中的所述密碼運算的執(zhí)行之前,向所述密碼運算中使用的規(guī)定的存儲區(qū)域,寫入針對每個所述輸入變換處理而發(fā)生變化的數(shù)據(jù)即變化數(shù)據(jù);以及密碼運算執(zhí)行部,通過使用CPU,在通過所述數(shù)據(jù)寫入部向所述存儲區(qū)域?qū)懭肓怂鲎兓瘮?shù)據(jù)之后,使用寫入了所述變化數(shù)據(jù)的所述存儲區(qū)域來執(zhí)行所述密碼運算。2.根據(jù)權(quán)利要求1所述的密碼運算裝置,其特征在于,所述密碼運算使用變量,所述數(shù)據(jù)寫入部通過使用CPU,在各個所述輸入變換處理中的所述密碼運算中的所述變量的使用之前,向保存所述變量的數(shù)據(jù)的存儲區(qū)域,寫入針對每個所述輸入變換處理而發(fā)生變化的變化數(shù)據(jù),所述密碼運算執(zhí)行部通過使用CPU,在通過所述數(shù)據(jù)寫入部向所述變量寫入了所述變化數(shù)據(jù)之后,執(zhí)行使用所述變量的所述密碼運算。3.根據(jù)權(quán)利要求2所述的密碼運算裝置,其特征在于,所述密碼運算利用使用所述變量的函數(shù),所述數(shù)據(jù)寫入部向所述函數(shù)中使用的所述變量的所述存儲區(qū)域?qū)懭胨鲎兓瘮?shù)據(jù),所述密碼運算執(zhí)行部通過將寫入了所述變化數(shù)據(jù)的所述變量應用于所述函數(shù),執(zhí)行所述密碼運算。4根據(jù)權(quán)利要求3所述的密碼運算裝置,其特征在于,所述數(shù)據(jù)寫入部生成所述變量,在生成所述變量之后向所述變量的所述存儲區(qū)域?qū)懭胨鲎兓瘮?shù)據(jù)并且調(diào)用所述函數(shù),向所述函數(shù)傳遞寫入了所述變化數(shù)據(jù)的所述變量,所述密碼運算執(zhí)行部通過將所傳遞的所述變量應用于所述函數(shù),執(zhí)行所述密碼運算。5.根據(jù)權(quán)利要求3所述的密碼運算裝置,其特征在于,所述數(shù)據(jù)寫入部調(diào)用所述函數(shù),在調(diào)用了所述函數(shù)之后執(zhí)行所述函數(shù)的內(nèi)部處理而生成所述變量,向所生成的所述變量的所述存儲區(qū)域?qū)懭胨鲎兓瘮?shù)據(jù),所述密碼運算執(zhí)行部將通過所述數(shù)據(jù)寫入部執(zhí)行所述函數(shù)的內(nèi)部處理而寫入了所述變化數(shù)據(jù)的所述變量應用于所述函數(shù),從而執(zhí)行所述密碼運算。6.根據(jù)權(quán)利要求15中的任意一項所述的密碼運算裝置,其特征在于,所述變化數(shù)據(jù)是以下中的某一個(a)明文;(b)密文;(c)由所述CPU針對每個所述輸入變換處理在所述密碼運算之前生成的進程ID(IDentification);(d)由所述CPU生成的表示當前的時刻的時刻數(shù)據(jù);(e)經(jīng)由所述CPU的處理而生成的隨機數(shù)。7.—種密碼運算程序,反復執(zhí)行輸入變換處理,其中,該輸入變換處理包括輸入成為密碼運算中的數(shù)據(jù)變換的對象的變換對象數(shù)據(jù)的處理、和通過執(zhí)行密碼運算對所輸入的所述變換對象數(shù)據(jù)進行數(shù)據(jù)變換的處理,所述密碼運算程序的特征在于,使計算機執(zhí)行如下處理在各個所述輸入變換處理中的所述密碼運算的執(zhí)行之前,向所述密碼運算中使用的規(guī)定的存儲區(qū)域,寫入針對每個所述輸入變換處理而發(fā)生變化的數(shù)據(jù)即變化數(shù)據(jù)的處理;以及在向所述存儲區(qū)域?qū)懭肓怂鲎兓瘮?shù)據(jù)之后,使用寫入了所述變化數(shù)據(jù)的所述存儲區(qū)域來執(zhí)行所述密碼運算的處理。8.—種密碼運算程序,反復執(zhí)行輸入變換處理,其中,該輸入變換處理包括輸入成為密碼運算中的數(shù)據(jù)變換的對象的變換對象數(shù)據(jù)的處理、和通過執(zhí)行使用了變量的密碼運算對所輸入的所述變換對象數(shù)據(jù)進行數(shù)據(jù)變換的處理,所述密碼運算程序的特征在于,使計算機執(zhí)行如下處理在各個所述輸入變換處理中的所述密碼運算中的所述變量的使用之前,向保存所述變量的數(shù)據(jù)的存儲區(qū)域,寫入針對每個所述輸入變換處理而發(fā)生變化的變化數(shù)據(jù)的處理;以及在向所述變量的所述存儲區(qū)域?qū)懭肓怂鲎兓瘮?shù)據(jù)之后,執(zhí)行使用所述變量的所述密碼運算的處理。9.一種計算機可讀取的記錄介質(zhì),記錄了權(quán)利要求7或權(quán)利要求8所述的密碼運算程序。全文摘要是由密碼運算裝置(100)執(zhí)行的密碼運算的一般處理過程的流程圖。在S101中電源接通。在S102中讀取密碼運算執(zhí)行程序,進行存儲器確保等初始化。在S103中輸入明文,將明文保存到RAM等中。在S104中讀取密碼運算執(zhí)行程序,使用寄存器、RAM進行密碼運算。在S105中取出密文。在S106中CPU判斷是否繼續(xù)執(zhí)行密碼運算處理,在繼續(xù)執(zhí)行時返回S102。在以上的S102~S106的加密處理中,在S103與S104之間插入了寄存器/存儲器輸入處理(S200)。在S200中,在開始密碼運算(S104)之前向密碼運算中使用的寄存器、存儲器寫入針對每個密碼運算會變化的數(shù)據(jù)(例如明文),進行密碼運算。文檔編號H04L9/10GK101978648SQ20088012814公開日2011年2月16日申請日期2008年3月25日優(yōu)先權(quán)日2008年3月25日發(fā)明者三澤學,佐伯稔,佐藤恒夫申請人:三菱電機株式會社