(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0010】
以下、図面に基づいて本発明の実施の形態を説明する。なお、情報処理装置1が、逆数を算出する処理を実行するものとする。
【0011】
<概略>
本発明では、2の冪乗を法とする剰余体上での逆数が存在する条件を満たすため、積算値を奇数に限定する。対象の奇数を、1倍、2倍、4倍、・・・と2の冪乗倍したものを加算するまたは加算しないを、加算した値の下位側のビットから0(ゼロ)となるように選択していき、加算する(1)または加算しない(0)をビット列としたものを逆数とする。
【0012】
積算値を奇数に限定した2の冪乗を法とする剰余体上の積算により以下が成り立つため、積算後の値は積算前の値と同じビット数で表現できる。
x×a=y
y×b=x (x,y,a,bは全てnビット。a,bは奇数)
【0013】
nビットの値xに対し、nビットの奇数aを積算し、元の値と同じnビットの値yに写像する。積算したnビットの奇数aの逆数bも同様にnビットであり、積算後の値yにさらにこの逆数bを積算することで、元のnビットの値xに逆変換される。積算値の逆数算出の計算量はO(n)と小さく(ユークリッドの互除法の計算量は、0(Log(2
n)
2)である)、ブロック暗号で一般的に使われる128ビットのデータであったとしても、組込機器でも少ない計算負荷で逆数を算出できる。
【0014】
<方法>
図1は、本発明の一実施形態に係る逆数を算出する処理のフローチャートである。
【0015】
値aの逆数bとの積をmとする。a、bはnビットの奇数であるとする(2の冪乗を法とする剰余体上で逆数が存在するためには、a、bは奇数である)。
【0016】
a*a
−1mod2
n=1(=m)
b=a
−1=2
0b
0+2
1b
1+2
2b
2+・・・ (bを2進数で表したものである)
b
0=1 (固定(bは奇数であるので、b
0=1である))
m=a*b=a*b
0+2*a*b
1+4*a*b
2+8*a*b
3・・・
【0017】
b
0以外の係数(上記のb
1の係数"2*a"、b
2の係数"4*a"、b
3の係数"8*a"、・・・)は最下位ビットが0(ゼロ)のため、m
0はb
0以外とは独立している。つまり、a
0=b
0=m
0=1(固定)である。b
0確定下で、b
0、b
1以外の係数は下位2ビットが0(ゼロ)のため、m
1=0となるb
1は一意に算出可能である。そのため、b
0〜b
1確定下では、m
i+1=0となるb
i+1は一意に算出可能である。
【0018】
情報処理装置1は、mが最終的に"1d・・・d0・・・01"と下位nビットが最下位ビットを除いて0となるように、bの下位ビットから決定していく。なお、dは任意の値(0または1)であってよい。
【0019】
ステップ1(S1)において、情報処理装置1は、m=a,b
0=1とする。
【0020】
ステップ2(S2)〜ステップ5(S5)において、情報処理装置1は、m
iについて、i=1からn−1まで順番に、
m
i=0の場合 b
i=0
m
i=1の場合 b
i=1,m=m+2
i*a
とmを更新しながらbを決めていく。なお、aが奇数であるので、m
0=1である。
【0021】
例えば、m
1=0の場合、m
1を0にする値を加算する必要はなく、b
1=0と決定することができる。m
1=1の場合、m
1を0にする値(aを2倍した値)を加算する必要があり、b
1=1と決定することができる。
【0022】
<算出例>
図2は、本発明の一実施形態に係る逆数の算出の一例である。
【0023】
図2では、19(00010011)×27(00011011)=1mod256(8ビットデータ),a=19,b=27=a
−1の例を説明する。
図2の各行は、i=0〜7のときの、乗算結果の計算過程、2
i×a、b
iを示す。逆数bの上位ビットは、乗算結果の下位ビットには影響を与えないので、最終の乗算結果が1となるよう、逆数の下位ビットから順に確定していく。
【0024】
[i=0のとき]
図2の(1)において、b
i(最下位)は、1で固定である。
図2の(2)において乗算の結果が1となるために、逆数の最下位ビットは1であることが必須である。そのため、a×1の加算が行われる。
【0025】
図2の(3)は、乗算結果の計算過程のiビット目(太字)と一致している。
【0026】
[i=1のとき]
図2の(4)において、乗算結果の1ビット目が0(ゼロ)となるよう、逆数の1ビット目は1を選択する。そのため、a×2の加算が行われる。
【0027】
[i=2のとき]
図2の(5)において、2ビット目は既に0(ゼロ)なので、逆数の2ビット目は0を選択する。そのため、a×4の加算は行われない。
【0029】
[i=3のとき]
乗算結果の3ビット目が0(ゼロ)となるよう、逆数の3ビット目は1を選択する。そのため、a×8の加算が行われる。
【0030】
[i=4のとき]
乗算結果の4ビット目が0(ゼロ)となるよう、逆数の4ビット目は1を選択する。そのため、a×16の加算が行われる。
【0031】
[i=5のとき]
5ビット目は既に0(ゼロ)なので、逆数の5ビット目は0を選択する。そのため、a×32の加算が行われない。
【0032】
[i=6のとき]
6ビット目は既に0(ゼロ)なので、逆数の6ビット目は0を選択する。そのため、a×64の加算が行われない。
【0033】
[i=7のとき]
7ビット目は既に0(ゼロ)なので、逆数の7ビット目は0を選択する。そのため、a×128の加算が行われない。
図2の(6)において、下位8ビットの10進数は1である。
【0034】
<レジスタでの演算>
図3は、本発明の一実施形態に係る逆数を算出する処理のフローチャートである。なお、
図1では本発明の概念を説明するために2のi乗を加算する形をとっているが、
図3では実際の処理を想定し、都度2の冪乗を計算する処理やそれを格納するメモリを削減する形をとっている。
【0035】
図1と同様に、値aの逆数bとの積をmとする。a、bは奇数であるとする。
図3では、レジスタが32ビット、値(a,b,m)が128ビットの場合を説明する。
図3では、a,b,mを32ビットの4つの配列として扱う。
【0036】
a=a[3](=a
127,a
126,・・・,a
96),a[2](=a
95,・・・,a
64),a[1](=a
63,・・・,a
32),a[0](=a
31,・・・,a
0) なお、b,mも同様である。
【0037】
ステップ11(S11)において、情報処理装置1は、m=a,b
0=1とする。
【0038】
ステップ12(S12)〜ステップ16(S16)において、情報処理装置1は、m
iについて、i=1からn−1まで順番に、
a=a×2
m
i=0の場合 b
i=0
m
i=1の場合 b
i=1,m=m+a
とaおよびmを更新しながらbを決めていく。なお、aの初期値が奇数であるので、m
0=1である。
【0039】
mに2の冪乗倍して加算するaについては、iの繰り返しにおいて都度2倍した値に更新しながらmに加算する。
【0040】
ステップ13(S13)において、以下のとおりである。
a=a*2:
a[3]=a[3]<<1 OR a[2]>>31
a[2]=a[2]<<1 OR a[1]>>31
a[1]=a[1]<<1 OR a[0]>>31
a[0]=a[0]<<1
【0041】
ステップ15(S15)において、レジスタ単位での加算時の桁溢れはキャリーフラグを用いる。
m=m+a:
cf=0
i=0〜3で以下繰り返し。
cfn=(m[i]>>1+a[i]>>1+(m[i]ANDa[i]AND1))>>31
m[i]+=a[i]+cf
cf=cfn
【0042】
<逆変換の証明>
ここで、逆変換の証明について説明する。
【0043】
nビットの任意の値xに値aを積算し、その値にさらにaの逆数bを積算すると値xに戻ることを証明する。
【0044】
前提:
a*b=2
n*D0+1
aにその逆数bを積算した値は、2の冪乗の剰余を計算すると1(Dは剰余計算で消える係数)となる。
【0045】
x*a=2
n*D1+y
xにaを積算した値は、2の冪乗の剰余を計算するとyとなる。
【0046】
y*b=2
n*D2+z
yに逆数bを積算した値は、2の冪乗の剰余を計算するとz(=x)となる。
【0047】
計算プロセス比較:
x*(a*b)=2
n*D0*x+x
(x*a)*b=2
n*D1*b+y*b
=2
n*D1*b+2
n*D2+z
=2
n*(D1*b+D2)+z
xに(a*b)を乗算したものと、(x*a)にbを乗算したものは同じである。つまり、x=zである。
((x*a)mod2
n)*b=y*b
=2
n*D2+z
【0048】
(x*a)をnビットの変数に格納(=2の冪乗で剰余計算)した後でも、逆数bを積算した値に2の冪乗で剰余計算した値はzである。
【0049】
結論:計算過程で桁溢れが発生しても、積算・逆数積算の関係は成り立つ。
【0050】
<White−box AESへの適用>
図4は、本発明の一実施形態に係るWhite−box AESへの適用例である。
【0051】
図4に示されるように、本発明は、White−box AES(Advanced Encryption Standard)の変換gと逆変換g
−1へ適用することができる。
【0052】
図4の(A)は、入力値に逆数g
−1(難読化成分)を積算した値にMixColumns処理を行い、次の演算と対となる難読化成分を合成したルックアップテーブルである。
【0053】
図4の(B)は、AddRoundKey処理とSubBytes処理を行った後に積算値g(難読化成分)を積算した値を出力するルックアップテーブルである。
【0054】
<効果>
このように、従来の手法では、有効な逆数算出手段がない場合には逆数を全探索で求めていたが、本発明では、2の冪乗を法とする剰余体上で逆数を高速に算出可能である。また、本発明は暗号演算に適用可能であり、nビットのブロックデータにおいて、n−1ビットのデータ量(上記の値aの組み合わせ)の演算後のデータはnビットであり、ビット数が増えない。
【0055】
<ハードウェア構成>
図5は、本発明の一実施形態に係る情報処理装置1のハードウェア構成の一例を示すブロック図である。情報処理装置1は、CPU(Central Processing Unit)1001、ROM(Read Only Memory)1002、RAM(Random Access Memory)1003を有する。CPU1001、ROM1002、RAM1003は、いわゆるコンピュータを形成する。
【0056】
また、情報処理装置1は、補助記憶装置1004、表示装置1005、操作装置1006、I/F(Interface)装置1007、ドライブ装置1008を有することができる。なお、情報処理装置1の各ハードウェアは、バスBを介して相互に接続されている。
【0057】
CPU1001は、補助記憶装置1004にインストールされている各種プログラムを実行する演算デバイスである。
【0058】
ROM1002は、不揮発性メモリである。ROM1002は、補助記憶装置1004にインストールされている各種プログラムをCPU1001が実行するために必要な各種プログラム、データ等を格納する主記憶デバイスとして機能する。具体的には、ROM1002はBIOS(Basic Input/Output System)やEFI(Extensible Firmware Interface)等のブートプログラム等を格納する、主記憶デバイスとして機能する。
【0059】
RAM1003は、DRAM(Dynamic Random Access Memory)やSRAM(Static Random Access Memory)等の揮発性メモリである。RAM1003は、補助記憶装置1004にインストールされている各種プログラムがCPU1001によって実行される際に展開される作業領域を提供する、主記憶デバイスとして機能する。
【0060】
補助記憶装置1004は、各種プログラムや、各種プログラムが実行される際に用いられる情報を格納する補助記憶デバイスである。
【0061】
表示装置1005は、情報処理装置1の内部状態等を表示する表示デバイスである。
【0062】
操作装置1006は、情報処理装置1の管理者が情報処理装置1に対して各種指示を入力する入力デバイスである。
【0063】
I/F装置1007は、ネットワークに接続し、他の装置と通信を行うための通信デバイスである。
【0064】
ドライブ装置1008は記憶媒体1009をセットするためのデバイスである。ここでいう記憶媒体1009には、CD−ROM、フレキシブルディスク、光磁気ディスク等のように情報を光学的、電気的あるいは磁気的に記録する媒体が含まれる。また、記憶媒体1009には、EPROM (Erasable Programmable Read Only Memory)、フラッシュメモリ等のように情報を電気的に記録する半導体メモリ等が含まれていてもよい。
【0065】
なお、補助記憶装置1004にインストールされる各種プログラムは、例えば、配布された記憶媒体1009がドライブ装置1008にセットされ、該記憶媒体1009に記録された各種プログラムがドライブ装置1008により読み出されることでインストールされる。あるいは、補助記憶装置1004にインストールされる各種プログラムは、I/F装置1007を介して、ネットワークよりダウンロードされることでインストールされてもよい。
【0066】
以上、本発明の実施例について詳述したが、本発明は上述した特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。