(57)【特許請求の範囲】
【請求項１】
演算装置と、
データ格納装置と、
前記演算装置と前記データ格納装置とを結ぶバスラインとを有し、
前記演算装置は、前記バスラインを介して前記データ格納装置から第１鍵データとの排他的論理輪演算により暗号化された入力データを受け取り、
前記演算装置は、前記入力データを第２鍵データとの排他的論理和演算により再暗号化し、その再暗号化したデータを前記バスラインを介して前記第２のデータ格納装置へ格納し、
前記演算装置は、前記暗号化したデータを直接復号化するための第３鍵データを前記第
１鍵データと前記第２鍵データとの排他的論理和演算から作成することを特徴とする情報処理装置。
【請求項２】
前記第１鍵データは内部レジスタに格納されることを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記データ格納装置はＲＡＭであることを特徴とする請求項１記載の情報処理装置。
【請求項４】
前記第１鍵データまたは第２鍵データに使用される鍵データは、乱数的に生成されるか、又は、予め複数個の鍵データを備えておりそれらのうちの一を鍵データとして使用することを特徴とする請求項１記載の情報処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、情報処理装置における取り扱いデータの暗号化・復号方法に関し、特に情報処理装置内部で使用するデータの暗号化および復号を行なう情報処理装置における暗号化・復号方法に関する。
【０００２】
【従来の技術】
ＩＣカードや情報家電は、図1に示したような一般的な構成を基本とした情報処理装置を搭載しており、この情報処理装置は8ビットの演算装置(CPU)(E101)や10kB程度の揮発性記憶装置（RAM）(E102)と100kB程度の不揮発性記憶装置（EEPROMやROM）(E103, E104)といった、小規模の計算能力と記憶装置しか持たない。一方、暗号処理が主に使用されているワークステーションやネットワークルーターなどの装置は、32ビットのCPUや数百MBの揮発性記憶装置(RAM)といった大規模な計算能力と記憶装置を有している。さらに、後者は本体サイズや最大消費電力などの制限が前者に比べて少ないため、演算装置の高クロック周波数動作や専用ハードウェアの追加による高速化が可能である。
各種情報の蓄積利用や、処理装置間の情報交換が頻繁に行なわれる、各種機器の情報化が広まっており、それに従い、電子マネーや、課金情報、個人情報など、機器間のやりとりの間に外部へ取り扱いデータの情報が漏洩することが望ましくないデータ処理が求められる場面が増えている。これらの情報を秘密に処理するために、暗号は欠くことのできない技術となっている。
現在、主要な暗号方式としてDES(Data Encryption Standard：データ暗号化標準)(National Bureau of Standards, Data Encryption Standard, U.S. Department of Commerce, FIPS pub. 46, January 1977) とRSA（Rivest, Shamir, Adleman：人名に因む）(R.L. Rivest, A. Shamir, and L.M. Adleman, A method for obtaining digital signatures and public-key cryptosystems, Communications of the ACM (2) 21 (1978), 120-126) が用いられている。前者は秘密鍵暗号方式であり、後者は公開鍵暗号方式である。秘密鍵暗号方式とは、暗号化と復号で同一の鍵を用いるため共通鍵暗号方式や対象鍵暗号方式とも呼ばれ、公開鍵暗号方式では暗号化と復号で異なる鍵を用いるため非対称鍵暗号方式とも呼ばれる。一般に、秘密鍵暗号は64ビットから128ビット程度の入力データと、同じく64ビットから128ビット程度の鍵ビットを混ぜ合わせながら、ビットの対応関係の差し替え(Substitution)やビット位置の入れ替え(Permutation)を複数回行なうことで構成することが多い。秘密鍵暗号方式はビット操作と比較的小規模のテーブルの参照のみで計算が可能なため、小規模の情報処理装置でも数msといった時間で処理を完了することができる。公開鍵暗号は暗号化鍵と復号鍵に数学的な関係を設定するために鍵として使用できるものが限定されるため、鍵長が1024ビットのように大きくなりがちである。また算術演算を大量に行なうため、小規模の情報処理装置では、コプロセッサを用いても計算には数百msを要する。秘密鍵暗号では事前に鍵を送信者と受信者で共有する必要があるが高速で処理できるのに対して、公開鍵暗号では一方の暗号化用の鍵を公開してデータを暗号化しても、他方で秘密に保持している復号用の鍵でしか復号できないが計算に秘密鍵暗号より多くの時間を要する。そのため、情報処理装置独自に使用するデータの暗号化には秘密鍵暗号を用い、鍵を事前に共有していない情報処理装置間でやりとりするデータの暗号化には公開鍵暗号を用いることが多い。
情報処理装置が不揮発性記憶装置に秘密情報を格納する場合、電源遮断時などに記憶装置が取り出され、物理的に解析されることを避けるために、秘密鍵暗号方式を用いて情報を暗号化して保存しておく手段が用いられる。この手段に従えば、暗号化鍵をユーザーが記憶する、もしくは第3者に容易に判明しない方法で保存することで、秘密情報を安全に保持することができる。
外部記憶装置に記憶するデータの暗号化方法として、DESなどの秘密鍵暗号を利用した方法は例えばPGP(Pretty Good Privacy)といった一般に公開されたソフトウェアでも実現されている。
【０００３】
【発明が解決しようとする課題】
しかし、外部記憶装置に記憶するデータを暗号化するだけでは不十分であり、暗号化・復号を行なう情報処理装置内部においても取り扱いデータの秘匿を行なう必要がある。この点について、本発明は鍵データ保持用の少数のレジスタと演算装置いう小規模なハードウェアと、また小規模ゆえの高速処理を可能とする情報処理装置を提案する。本発明の装置を使用すれば、情報処理装置内部でも情報漏洩に対して安全な処理を行なうことが可能である。本課題は、1998年にP.Kocher氏が発表した暗号解析手法DPA(Differential Power Analysis)（P. Kocher, J. Jaffe, andB.Junn, Differential Power Analysis, Advances in Cryptology CRYPTO'99, Lecture Note in Computer Science 1666, Springer-Verlag, pp388-397, 1999）により喚起されたといえる。同手法の発表により、外部記憶装置に格納するデータだけではなく、演算装置の中で演算中のデータも保護する必要があることが明らかになった。DPAは、演算中のデータに依存する消費電流を観察することで、ある特定ビットの状態を特定する解析技術である。この解析技術の本質は、情報処理装置が処理するデータと消費電流の間にある相関を利用することである。
情報処理装置の消費電流は、取り扱うデータに依存している。取り扱うデータは、データの表現形式と設置場所の2つのパラメータを持っている。データの表現形式とは，例えばコンピュータにおける2進数表現であり，設置場所とはCPUのアドレス空間におけるデータの設置アドレスである。現在の情報処理装置は、取り扱いデータを1/0の組み合わせで表現する。回路を構成するCMOSの性質から1を取り扱う場合と0を取り扱う場合で消費電流が異なる。
今、アドレスaに設置したデータxを取り扱う際の消費電流をc(x,a)と表記する。あるデータxの2進数表現における1の個数をハミングウェイトと呼び，H(x)と表記する。情報処理装置のバス幅がwビットであるならば，明らかに0≦H(x)≦wである。アドレスaにアクセスする際にも，情報処理装置内部でaの2進数表現を使用することに注意する。1を取り扱う場合の消費電流をｄ1とあらわし，0を取り扱う場合の消費電流をｄ0であらわす。例として、情報処理装置のデータバス、アドレスバスの幅を8ビットであるとすると、
c(x,a)=(H(x)+H(a))d1+((8-H(x))+(8-H(a))d0+α+β
である。ここで，αは情報処理装置の特定部分が動作することによる追加の消費電力であり、βは測定環境によるノイズなどである。
まず、データ自身に関係しない成分であるα，βを取り除くことを考える。同一の状態にある情報処理装置において，取り扱うデータのみが異なる場合、2つのデータx0とx1を取り扱う際の消費電流
c(x0,a0)=(H(x0)+H(a0))d1+((8-H(x0))+(8-H(a0))d0+α0+β0
と
c(x1,a1) =(H(x1)+H(a1))d1+((8-H(x1))+(8-H(a1))d0+α1+β1
における成分α0とα1は等しい。つまり，ノイズ成分であるβ0とβ1を取り除くことができれば，c(x0,a0)とc(x1,a1)の比較から，データx0, x1の比較を行なうことができる。βはノイズであるから、平均値は0である。よって，十分に多いn回の消費電流測定データc[0]〜c[n-1]を平均化することで，βを取り除くことができる。このようにして，β0, β1を取り除けば，
c(x0,a0)-c(x1,a1)=((H(x0)+H(a0))(H(x1)+H(a1)))d1+((H(x1)+H(a1))-(H(x0)+H(a0)))d0
であり，データが同じアドレスに設置されている場合(つまりa0=a1)，
c(x0,a0)-c(x1,a1)=(H(x0)-H(x1))d1-(H(x0)-H(x1))d0
である。さらに，d=d1-d0と表記すれば，
c(x0,a0)-c(x1,a1)=(H(x0)-H(x1))d
と書くことができる。ある時点において，情報処理装置のどの部分が動作しているかを正確に追跡することは困難であるため，αを知ることは困難である。しかし，取り扱いデータのみを変更して差分をとることにより，αを相殺し，d1,d0の絶対値を知る代わりに，差分値dを知ることは容易である。結果的に，この情報を元にして，c(x0,a0)-c(x1,a1)からデータx0,x1のハミングウェイトがどれだけ異なっているかを知ることができる。実際に，取り扱いデータを推定するためには，基礎実験として，8ビットバスならばハミングウェイト0から8までの9通りのデータについて消費電力を調べておくことが有効である。9通りとしては例えば，0,1,3,7,15,31,63,127,255とする。(これを2進数表現すれば、それぞれb'0, b'1, b'11, b'111, b'1111, b'11111, b'111111, b'1111111, b'11111111であり、ハミングウェイトは0, 1, 2, 3, 4, 5, 6, 7, 8である。) 基礎実験データと，取得データとの差分を計算することで，取り扱いデータとのハミングウェイト差が0であるデータを知ることができる。例えば，取り扱いデータと基礎実験で取得したデータ1演算時の消費電流が一致したとする。これは，取り扱いデータのハミングウェイトが1であることを意味する。8ビットの数値でハミングウェイトが1となるのは，1,2,4,8,16,32,64,128であるので，取り扱いデータはこれらのうちいずれかであることがわかる。情報処理装置の設計によっては，8ビットバスのビット位置0〜７に依存して消費電流が異なる場合がある。この場合は、28=256通りすべての基礎実験データを取得しておき，逐次比較することで，取り扱いデータを一意に決めることが可能である。暗号処理装置における鍵取り扱い部分でこのようなデータ推定が可能であれば、暗号を容易に解読することができる。
ここで，如何にして上記のノイズβを除去するかが問題となる。一般的に，十分に多い数をnとして、同じデータに対してn回情報処理装置を動作させ，消費電流パターンc[0]〜c[n-1]を取得し，これらの平均値を計算する。ノイズβの平均値は0であるため，このようにしてβを除去することができることは明らかである。個人情報など、変化しにくい情報の場合は特に、複数回測定データの平均化によってノイズを除去されると、情報が漏洩する可能性が高まることに注意する必要がある。nの大きさは、情報処理装置のノイズ源や測定精度に依存するため，単純に決めることはできない。しかし、具体的にnを知らずとも、ノイズが除去されるまで測定を繰り返せば十分である。このようなデータ解析への対策として平均化によるノイズ除去に十分なだけの回数の演算を許さないようにすることが考えられる。
情報処理装置が電気で動作している以上、処理する情報と消費電流の間の相関を完全になくすことは困難である。そこで、取り扱いデータを暗号化することで解析者が内容を予測できないようにする。暗号化方法として、上記したDESなどを用いることができるが、暗号化に時間が掛かり、また暗号化に際してレジスタや揮発性記憶装置などの多くのハードウェア資源を使用するため、小規模の装置において処理データを随時暗号化・復号する目的で使用するのには適していない。必要なハードウェア資源が少なく、処理時間が短い暗号化・復号装置が必要である。本発明は、本課題を解決するための暗号化・復号装置を与えることを目的としている。
【０００４】
【課題を解決するための手段】
情報処理装置が記憶装置や演算装置などとやり取りするデータの内容を暗号化する。これにより，処理装置で処理するデータと消費電流との相関をなくすことができる。つまり，解析者がデータ処理時の消費電流を見ても、処理データについての情報を得られない。また，情報処理装置は，ユーザーの関知しない部分で自動的にデータを暗号化し復号化することができる。そのため，ユーザーの装置利用方法によらず消費電流解析などに対して安全な処理を提供することができる。(1)  情報処理装置は，データ格納装置に記憶されている，もしくは新たに生成したデータを暗号化してデータ格納装置に記憶する。その際，演算装置から出力されたデータは，アタッカーが予想することのできない形式となっており，アタッカーは同データを手がかりにした解析を行なうことができない。特に暗号化に使用する鍵データを定期的もしくは不定期に変更することで，ある時点までにアタッカーが蓄積した，鍵に関する情報を無意味なものにすることができる。鍵を変更する際には，すでに暗号化され記憶されているデータの再暗号化を行なう。再暗号化は，変更前の鍵で一度復号化し，変更後の鍵で新たに暗号化することで実現可能であるが，復号化を行なわず，暗号化データを更に変更後の鍵で暗号化し，変更前の鍵と変更後の鍵から新たな暗号化データを復号化することのできる新たな鍵を生成し，その新たな鍵を保存すれば，復号化したデータは一度もアタッカーにさらされることが無く，安全性が向上する。
(2)  同一の入力データを情報処理装置内部で複数回処理していることをアタッカーが知りうる場合がある。（１）で述べたように処理データは暗号化されており，処理ごとにデータ形式が異なる。しかし，同一データを同一順序で処理すれば，消費電流などの解析時に見られる測定ノイズの除去が可能となる場合がある。複数ブロックにわたる処理データは，一般的に先頭から順番に処理するため，アタッカーはその知識を利用してデータの解析を行なおうとする。本発明では，アタッカーが知りえないランダムな順序でデータブロックの処理を行ない，解析を困難なものにしている。処理順序を変更する際に一度，定められた順序もしくはランダムな順序にデータを再配置した上で先頭から順番に処理を行なっても良いし，再配置を行なうことなくデータ記憶位置から直接取り出しても良い。再配置を行ないながらデータの暗号化を行なうことで，さらに解析を困難にすることができる。
(3)  また、データの記憶位置を物理的，もしくは論理的に変化させることにより、同一データを繰り返し使用しても、データ記憶位置を指定するためのアドレス情報や記憶位置の物理的特性に依存した情報漏洩が起こらず、より安全な情報処理が可能となる。データの記憶位置は，データの内容に依存したものを使用しても良いし，データ記憶位置決定用の定められた，もしくはランダムなデータを用いることもできる。
情報処理装置のデータ入力もしくは出力のうち一方もしくは両方が，I/Oポートなどの外部インターフェースである場合にも適用することができることは明らかである。
【０００５】
【発明の実施の形態】
暗号化・復号を秘密鍵暗号方式で行なうものとして本発明の実施の形態について述べる。
(実施例１)
本実施例は処理データの暗号化に関するものである。
図2に示すように情報処理装置（E201）のデータ処理は、基本的に、(a)記憶装置からのデータ読み出し（S201）、(b)演算装置による演算（S202）、(c)記憶装置へのデータ書き込み（S203）で構成される。この時、記憶装置（E202）から読み出すデータは、装置の目的や状態により様々であるが、例えば情報処理装置のID番号や所有者の個人情報、暗号化鍵などの固定値である場合を考える。本発明による対策を施していない情報処理装置で固定値を読み出せば、上で述べた手法を用いて、解析者が当該情報を知ることができる。
図3に示す本実施例の情報処理装置(E301)は、初めて記憶装置(E302)にデータd[0]を格納する際に、データ格納装置(E304)に保存されたある鍵データk[0]で前記データd[0]を暗号化して(S301)暗号化済みデータd'[0]を得て、d'[0]を記憶装置に格納する(S302)。上記 (a)において記憶装置からデータd'[0]を読み出した(S303)後、演算装置(E303)は前記鍵データk[0]を用いてd'[0]を復号してデータd[0]を得る(S304)ことができる。次に、演算装置はデータ格納装置に保存されている新しい鍵データk[1]を用いて再度前記データd[0]を暗号化してデータd''[0]を得て(S305)記憶装置に記憶する(S306)。そのため、(a)での読み出しごとにデータが変化する。ここで、k[1]を用いて再度暗号化する際にd[0]を用いたが、d[0]を暗号化するのではなく、d'[0]を暗号化してd'''[0]を得ても良い。その場合、データd'''[0]を復号する際にk[1]およびk[0]で順次復号する。もしくは、k[1]およびk[0]からd'''[0]をd[0]に直接復号するための新しい1つの鍵k'[0]を作成してもよい。特に、暗号化・復号方法として排他的論理和を使用すれば、d''[0] = d'[0] EXOR k[1] = (d[0] EXOR k[0]) EXOR k[1] = d[0] EXOR (k[0] EXOR k[1])の関係が成り立つため、k'[0] = k[0] EXOR k[1]を用いれば、d''[0] EXOR k'[0] = d[0] EXOR (k[0] EXOR k[1]) EXOR (k[0] EXOR k[1]) = d[0]となり、復号することができる。EXORの代わりに有限体における加算、乗算を使用しても同様の関係を成立させることが可能である。使用者が用意するか、装置が用意した乱数ではないデータをデータ格納装置に格納して鍵データとしても良いし、図4に示すように乱数生成装置(E405)からの出力をデータ格納装置に格納して鍵データとしても良い。
暗号化に使用する鍵は、図5に示すように、あるデータ長ごとに複数用意しても良いし、図6に示すように記憶装置全体で同一のものを使用しても良い。図5に示したデータ格納装置E501,E504は2つの独立したデータ格納装置である場合もあるし、１つのデータ格納装置から読み出し、同じデータ格納装置へ書き戻す場合もある。また、鍵データを格納する複数のデータ格納装置E502, E505, E506をもってもよいし、鍵データを順次更新するためにE502, E505, E506が同一のデータ格納装置である場合もある。鍵データk[0]をk[1]に更新する時には、同一鍵で暗号化されている領域に記憶されているデータを再度、鍵データk[1]を用いて暗号化する。同領域のサイズを小さくすることで、鍵データ更新に伴う再暗号化の回数が少なくなるため処理の負荷は小さくなるが、鍵データを複数保持するための新たな記憶装置もしくは鍵データを更新するための処理が必要となる。暗号化鍵の更新と記憶装置に保持しているデータの再暗号化は、ユーザーが独自に行なうことができるが、暗号化・復号装置が自動的に更新を行なうようにすることもできる。
暗号化・復号方法としてDESを用いる場合を考える。DESは鍵データが56ビットであり、64ビット入力、64ビット出力の暗号化方法である。今、ある56ビットの鍵データk[0]で暗号化され記憶装置に格納されている64ビットのデータd'[0]を読み出す。次に乱数生成装置により新しい56ビットの鍵データk[1]を生成する。鍵データk[0]で暗号化されている領域の64ビットブロック数をnとすると、記憶装置の先頭から順に、または任意の順序で64ビットずつ格納データd[i]を読み出し、鍵データk[0]を用い復号してd[0]...d[n-1]を得て、同時にもしくは続けて暗号化鍵k[1]を用いてd0...dn-1を再度暗号化して記憶装置にd''[0]...d''[n-1]を格納する。d'[0]...d'[n-1]に対して鍵データk1を用いてd''[0]...d''[n-1]を得ても良い。復号の方法は上に述べたとおりである。
本発明において，暗号化したデータは情報処理装置内部の記憶装置に格納されるのみで、情報処理装置外部への出力は行なわれない。更に、取り扱いデータの安全性を重視する情報処理装置では、内部に保持している装置へのアクセスを困難にする耐タンパー設計が行なわれており、内部保存データを知ることはできない。そのため、解析者は暗号鍵の解析に必要な入力文と出力文のペアを知ることが困難であり、装置で使用されている前記鍵データを特定することは困難である。よって、鍵データを処理データ読み出しごとに更新せず、ある一定の期間同じ鍵データを使用することも可能である。DES以外の秘密鍵暗号方式を用いることができることは明らかである。公開鍵暗号方式を用いることも可能であるが、一般に処理速度は遅くなる。
公開鍵暗号方式を用いる場合は、まず鍵ペアe[0], d[0]を生成する。e[0]は暗号化鍵であり、d[0]は復号鍵であるとする。記憶装置にはe[0]で暗号化されたデータxが記録されている。記憶装置からデータxを読み出し、d[0]で復号し、復号データx'を得る。新しい鍵ペアe[1], d[1]を生成し、暗号化鍵e[1]を用いてx'を暗号化した結果x''を記憶装置に格納する。
秘密鍵暗号方式を用いる場合、暗号化時と復号時の少なくとも2回、同一の鍵を扱う必要があるが、公開鍵暗号方式では暗号化時と復号時で異なる鍵を使用するため、暗号化鍵と復号鍵それぞれを1回の使用にとどめることができる。暗号化鍵が判明しても復号鍵を推定することは困難であり、逆も同様である。一般に、データ観測の機会が少ないほど解析は難しいため、強固な安全性を要求する用途においては、公開鍵暗号方式を用いることが望ましい。
特に断らない限り、秘密鍵暗号方式を使用した暗号化・復号例を示すが、公開鍵暗号方式を用いても同様に実現することが可能である。
(実施例2)
本実施例は処理順序のランダム化およびデータ記憶位置のランダム化に関するものである。
(2-1) データ記憶位置情報を利用した暗号解読法
べき乗剰余計算yx mod Nを行なう場合を考える。べき乗剰余計算は、公開鍵暗号であるRSAにおける主要な演算である。RSAにおいて、Nは公開鍵であり既知情報、yは入力データであり、xは秘密指数である。秘密指数xが漏洩しないように、べき乗剰余計算を行なう必要がある。
べき乗剰余計算を高速に行なう方法として、アディションチェイン方式が知られている。ここでは、2ビットアディションチェイン方式を用いる例を示す。xを2048ビットとし、x[i]でi番目の2ビットブロックを表すとする。つまり、0≦x[i]≦3である。処理は以下のようになる。
0004045777.tif 000002
秘密指数xの値に依存して、(b-1)から(b-4)に処理が分岐する。ループ処理は1024回行なわれる。xを乱数であると仮定すると、(b-1)から(b-4)がそれぞれ平均256回処理される。(b-1)から(b-4)を処理する際に，剰余乗算を行なうために，記憶装置に記憶しているy0 mod N, y1 mod N, y2 mod N, y3 mod Nを読み出す必要がある。剰余乗算計算時に転送され、使用されているデータを観測すれば、(b-1)から(b-4)のいずれが行なわれているかを知ることができ、対応するx[i]を知ることができる。結果的に秘密指数xが判明する。
本実施例の情報処理装置は、初期計算として、入力yからy0 mod N, y1 mod N, y2 mod N, y3 mod Nを生成し、図7に示すように，暗号化・復号装置E702上で，それぞれ鍵データk[0](E707), k[1](E708), k[2](E709), k[3](E710)を用いて暗号化した上で記憶装置(E703, E704, E705, E706)に，後にテーブルとして参照できるように記憶する。アディションチェインの1回のループ処理で(b-1)から(b-4)のいずれかに分岐し，図8に示すようにテーブルデータが読み出される(S801, S802, S803, S804)。読み出されたデータは暗号化・復号装置E802において，対応する鍵データ(E807, E808, E809, E810)を用いて復号され，演算装置もしくは記憶装置もしくは情報処理装置外部への出力(E801)に送られる。記憶装置に格納しているy0 mod Nからy3 mod Nは図9に示すようにすべて新しい暗号化鍵k'[0](E907), k'[1](E908), k'[2](E909), k'[3](E910)で再度暗号化して記憶装置に格納する(S901, S902, S903, S904)。これにより、あるループでy0 mod Nが使用された後に再度y0 mod Nが使用されても、読み出される値は異なるため、解析者は(b-1)から(b-4)のいずれが処理されたかを知ることができない。ここで、k[0]からk[3]およびk'[0]からk'[3]は異なるように記載したが、k[0]=k[1]=k[2]=k[3]およびk'[0]=k'[1]=k'[2]=k'[3]として鍵データ格納に使用するデータ格納装置を小規模化することができる。また、k[0]とk'[0]で異なるデータ格納装置を使用しても良いし、データを書き換えることで、同一のデータ格納装置を使用し、装置を小規模化することもできる。処理時間の増加を最小限に抑えるために、使用したデータのみ新しい暗号化鍵で再度暗号化し格納することもできる。この場合は、図7，8，9に示すように各データに対応させて暗号化鍵を保持する。
本実施例は、2ビットアディションチェイン方式について述べたが、一般のnビットアディションチェイン方式や、スライディングウィンドウ方式などのほか、べき乗剰余計算に限らず、同一データを繰り返し読み出す必要がある場合について同様に適用できることは言うまでもない。
(2-2) データ処理順序のランダム化
図10に任意の順序で暗号化・復号処理を行なう暗号化装置を，図11に同復号装置の例を示した。情報処理装置において、演算順序制御部E1002は、E1004に格納されている演算順序制御データs[0]を用いてデータ格納装置E1001からデータを読み出し、記憶位置順序を変更したデータをデータ格納装置E1003に格納する。暗号化・復号装置演算部E1006は、E1005に格納されている鍵データk[0]を用いてE1003に格納されている前記データを順次暗号化し、データ格納装置E1007に格納する。演算順序制御部E1008は、演算順序制御データs[0]を用いてE1002における順序変換の逆変換を行い、暗号化されかつE1001に格納されているデータと同一順序のデータをE1009に格納する。E1004に格納された演算順序制御データは、ユーザーが自由に設定しても、乱数生成装置からの出力を設定しても良い。特に，暗号化時と復号時で使用する演算順序制御データs[0](E1004)とs[1](E1104)は同一である必要は無い。
本実施例ではE1001, E1003およびE1007, E1009，またE1101, E1103およびE1107, E1109を異なるデータ格納装置のように記載したが、格納データを書き換えることでそれぞれ同一のデータ格納装置としてもよく、更にE1001, E1003, E1007, E1009，またE1101, E1103, E1107, E1109を1つのデータ格納装置で実現することも可能であることは明らかである。
さらに、図12に示すように、データ格納装置から読み出したデータを演算順序制御部により，データの設置順序を変更してデータ格納装置に再保存した後に暗号化・復号演算を開始する手順ではなく、処理S1201, S1202, S1203, S1204, S1205, S1206, S1207の順序のみを変更することで、より高速に暗号化・復号を行なうことができる。つまり，通常はd[0]からd[6]へ順番に処理を行なうが，この処理順序が常に一定にならないようにする。演算順序を決定するために、前実施例と同様に処理順序制御データを保持し、処理順序をユーザーが設定できるようにしても、乱数生成装置により処理順序制御データを生成し解析者が予測できない順序で処理しても良い。図12において，鍵データE1204からE1210をそれぞれ異なるように記載したが，1つの鍵データとして，k[0]=k[1]=k[2]=k[3]=k[4]=k[5]=k[6]としてもよい。
(2-3) データ記憶位置のランダム化
既に述べたように、情報処理装置が取り扱うデータは、データの表現形式と設置場所の2つのパラメータを持っている。データの表現形式とは，例えばコンピュータにおける2進数表現であり，設置場所とはCPUのアドレス空間におけるデータの設置アドレスである。表現形式に依存するデータ解析の手法と対策については既に述べた。次に、データの設置アドレスを用いた解析に対する対策の実施例について述べる。
本実施例では、べき乗剰余計算を考える。2ビットアディションチェイン方式についてはすでに述べたとおりである。(b-1)から(b-4)のいずれが計算に使用されたかを隠蔽するために、y0 mod Nからy3 mod Nのデータ表現形式を暗号化により隠蔽しデータ格納装置に格納する。本実施例ではさらに、各データの格納位置を変化させる。一例として，格納位置の入れ替えについて述べる。図13に示すように，情報処理装置は、y0 mod N, y1 mod N, y2 mod N, y3 mod Nを格納するために記憶装置に4つのブロックb[0]〜b[3] (E1304, E1305, E1306, E1307)を用意する。初期計算として、入力yからy0 mod N〜y3 mod Nを生成し、暗号化鍵k[0]を用いて暗号化した上で前記ブロックにそれぞれ記憶するが、この際、暗号化鍵k[0]を用いて暗号化したy0 mod N〜y3 mod Nをランダムな順序でb[0]〜b[3]に格納する(S1301, S1302, S1303, S1304)。本実施例では、1回のループ処理ごとに、記憶装置に格納しているb[0]〜b[3]をランダムな順序で入れ替え、b[0]〜b[3]に順序不定で格納されているy0 mod Nからy3 mod Nをすべて新しい暗号化鍵k[1]で再度暗号化して格納する(図14 S1401からS1404)。毎回b[0]〜b[3]のすべてを入れ替える必要はない。例えば、今、b[0]に格納された値を読み出したとする。乱数生成装置からの出力を使用して、3/4の確率でb[0]とb[1]〜b[3]のいずれかを格納位置交換する。乱数生成装置からの出力を使用して、格納位置入れ替えの対象としてb[1]〜b[3]が選択される確率はそれぞれ1/3となるようにする。例えば図15のE1501の状態からE1503に示すように、b[0]とb[1]が入れ替えられた場合、さらにb[2]とb[3]も入れ替える。同様にしてb[0]とb[2]が入れ替えられた場合、b[1]とb[3]を入れ替え(E1504)、b[0]とb[3]が入れ替えられた場合、b[1]とb[2]を入れ替える(E1505)。この手順に従うことで、b[0]に再度アクセスした場合に、それが先と同じデータである確率は1/4となる。また図15から明らかなように、先と同じデータがb[1], b[2], b[3]に格納されている確率も1/4となる。図15のE1502, E1503, E1504, E1505はそれぞれ1/4の確率で起こるため、解析者は取り扱いデータについての情報をアクセス場所から得ることができない。
ところで、入れ替えの際のアクセス先の違いから、入れ替え先が判明する可能性がある。例えば、b[0]とb[1]の入れ替えと、b[0]とb[2]の入れ替えと、b[0]とb[3]の入れ替えでは、アクセス先の違いによる差異が観測される。そのため、入れ替えをしなかったことが観測されないように全ブロックへのアクセスを行なうことが望ましい。
本例では、記憶装置に余分の空間を必要としないように処理するために、格納位置の入れ替えを行なった。格納するべきデータサイズよりも大きい格納領域を用意して、その中で任意に配置を変化させることでも同様の効果を得ることができる。また、格納位置変更処理時の処理順序のランダム化をすでに述べた方法を用いて行なえば、更に解析を困難にすることができる。
【０００６】
【発明の効果】
情報処理装置の消費電流や電磁放射などの測定データに含まれるノイズを、一度の測定データで取り除くことは困難である。複数回測定データの平均化によりノイズを除去する必要があるが、データが取り扱いごともしくはノイズ除去に必要な測定サンプル数を得る前に変化するため、平均化を行なっても演算データによる信号成分が撹乱される。そのため、解析者は消費電流を観測することによっても当該情報の内容を推測することができない。
本発明の実施例に従えば、小規模なハードウェアと演算時間のオーバーヘッドで、情報処理装置の消費電流や電磁放射などと処理データの間の相関を減少させる、解析者による情報取得を困難もしくは不可能にすることができる。
【図面の簡単な説明】
【図１】情報処理装置の基本的な構成。
【図２】情報処理装置の基本的な動作フロー。
【図３】演算装置による記憶装置内データの暗号化・復号装置。
【図４】乱数生成装置を用いた演算装置による記憶装置内データの暗号化・復号装置。
【図５】複数の鍵データを用いた不定長データの暗号化・復号装置。
【図６】  1つの鍵データを用いたデータ暗号化・復号装置。
【図７】鍵データを用いて記憶装置からのデータ暗号化・復号読み出しを行い、新しい鍵データによる暗号化・復号書き戻しを行なう情報処理装置（初期データ格納時）。
【図８】鍵データを用いて記憶装置からのデータ暗号化・復号読み出しを行い、新しい鍵データによる暗号化・復号書き戻しを行なう情報処理装置（データ読み出し時）。
【図９】鍵データを用いて記憶装置からのデータ暗号化・復号読み出しを行い、新しい鍵データによる暗号化・復号書き戻しを行なう情報処理装置（データ再暗号化時）。
【図１０】処理順序決定用のデータを用いてデータ格納装置内のデータの処理順序を変更した上で鍵データを用いて暗号化・復号を行い、前記データを用いて、暗号化・復号済みデータを入力時データ順序に戻す情報処理装置（暗号化時）。
【図１１】処理順序決定用のデータを用いてデータ格納装置内のデータの処理順序を変更した上で鍵データを用いて暗号化・復号を行い、前記データを用いて、暗号化・復号済みデータを入力時データ順序に戻す情報処理装置(復号時)。
【図１２】処理順序を変更して暗号化・復号を行なう情報処理装置。
【図１３】データの格納位置を変化させ、さらにデータを暗号化・復号して保存する情報処理装置。
【図１４】データの格納位置を変化させ、さらにデータを暗号化・復号して保存する情報処理装置。
【図１５】データ格納位置を入れ替え、入れ替え前の格納位置から入れ替え後の格納位置が予測できないようにするデータ格納位置入れ替え方法。
【図１】
0004045777.tif 000003
【図２】
0004045777.tif 000004
【図３】
0004045777.tif 000005
【図４】
0004045777.tif 000006
【図５】
0004045777.tif 000007
【図６】
0004045777.tif 000008
【図７】
0004045777.tif 000009
【図８】
0004045777.tif 000010
【図９】
0004045777.tif 000011
【図１０】
0004045777.tif 000012
【図１１】
0004045777.tif 000013
【図１２】
0004045777.tif 000014
【図１３】
0004045777.tif 000015
【図１４】
0004045777.tif 000016
【図１５】
0004045777.tif 000017