説明

演算装置及びプログラム

【課題】kbビットの数Aとbビットの数rとを互いに加算して上位(k−1)bビットの加算結果を得る場合に必要な事前計算テーブルのサイズを縮小する。
【解決手段】kbビットの数Aとbビットの乱数rとの加算について、数Aの下位bビットの数A2の上位b/2ビットの値AHと乱数rの上位b/2ビットの値rHとの和AH+rHと、数A2の下位b/2ビットの値ALと乱数rの下位b/2ビットの値rLとの和AL+rLとに基づいて、A2+rの桁上げの有無を示すように事前計算テーブルC’の要素データを設定したので、上記課題を解決できる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、例えば、サイドチャネル解析への耐性を持たせるように算術的マスクをした被算術マスクデータを、論理的マスクをした被論理マスクデータに変換する場合に、必要な事前計算テーブルのサイズを縮小し得る演算装置及びプログラムに関する。
【背景技術】
【0002】
近年の情報通信技術にとって、暗号技術は欠かせない技術となってきている。この種の暗号化技術には、例えば通信の暗号化技術であるSSL(Secure Socket Layer)や、メッセージの改ざんの有無を検出可能な電子署名などがある。これらはPKI(Public Key Infrastructure:公開鍵基盤)の一部として、社会の電子化を支えている。
【0003】
しかしながら、暗号技術に対する攻撃手法も高度化してきている。その中でも、暗号プロセッサの処理時間や消費電力を測定し、測定結果から暗号プロセッサ内部の秘密情報を解析するというサイドチャネル解析が現実的な脅威となってきている。代表的なサイドチャネル解析としては、タイミング解析及び電力解析が知られている。
【0004】
電力解析の例として、非特許文献1に記載のDES(Data Encryption Standard)に対する解析方法を図面を用いて説明する。
【0005】
図7はDES暗号装置における最終16段目のデータ変換部を示す模式図である。
【0006】
16段目のデータ変換部においては、2つの32ビットの入力データL15、R15及び48ビットの鍵データK16が入力されると、データ変換処理が実行され、2つの32ビットの出力データL16、R16が出力される。
【0007】
この出力データL16、R16をビット転置IP-1した結果がDES暗号装置から出力される暗号文となる。ここで、暗号文及びビット転置IP-1は、それぞれ攻撃者に既知であるため、出力データL16、R16も攻撃者に既知となる。
【0008】
16段目のデータ変換部では、32ビットの入力データR15をE転置により48ビットのデータに拡大する。拡大後のデータは48ビットの鍵データK16との排他的論理和が取られる。排他的論理和後の48ビットのデータは6ビットの8個の分割データに分割され、各分割データがそれぞれSボックス(S-box)S1,S2,…,S8に入力される。
【0009】
各Sボックスは6ビット入力4ビット出力であり、全部で32ビットの出力データが得られる。この32ビットの出力データは、P転置により別の32ビットのデータに変換された後、入力データL15との排他的論理和が取られて一方の出力データL16となる。他方の出力データR16は、入力データR15がそのまま出力されたものである。
【0010】
このようなデータ変換処理において、攻撃者に未知のデータは48ビットの鍵データK16のみである。攻撃者は、この48ビットの値を、16段目のデータ変換処理を実行中のDES暗号装置の消費電力を解析して求める。
【0011】
具体的には、攻撃者は入力平文Miを取り替えながら1,000サンプルのDES処理に対する消費電力波形vi(t)を収集する。ここで、tは離散的な時刻を表し、iはサンプル番号(但し、0≦ i ≦999)を表す。
【0012】
16段目のある1つのSボックスsの出力1ビットをターゲットビットとする。このSボックスsの6ビットの入力データcは、出力データL16から逆にたどることで導出可能である。Sボックスの入力データcとしては、入力データc以外に、入力データcと排他的論理和される6ビットの部分鍵kjがある。この部分鍵kjを未知変数として、ターゲットとなるSボックス出力1ビットをsi(kj,ci)と書く。
【0013】
収集した消費電力波形を基に、差分平均トレースTj(t)を次の式により計算する。
【数1】

【0014】
部分鍵kjとして6ビット64通りの全ての場合について差分平均トレースTj(t)を計算すると、64通りの内の一つの部分鍵kjは、実際に使われている部分鍵kjと一致しており、その時の差分平均トレースTj(t)は値の偏りを示す。それ以外の63通りの部分鍵の場合には部分平均トレースTj(t)は偏らない。この偏り特性により、6ビットの部分鍵kjを特定可能となっている。
【0015】
この操作を他の7つのSボックスsにも適用することで48ビットの部分鍵K16を見出すことが可能である。
【0016】
このような電力解析においては、攻撃者が予想した未知変数kjの値と消費電力vi(t)に相関があることが効いている。このことは未知変数の値と測定時間との相関を見るタイミング解析でも同様である。
【0017】
従って、逆にこのような相関をなくせば、サイドチャネル解析から秘密情報の漏洩を阻止可能である。そこで、暗号装置が処理するデータと攻撃者が予想したデータとの相関を無くすため、暗号装置が処理するデータに乱数をマスクする手法が知られている。
【0018】
マスク方法としては、主に論理的マスクと算術的マスクの2種類があり、暗号アルゴリズムを構成する演算を基に、いずれのマスクを使用するかを決定する。例えば、論理演算から構成される暗号アルゴリズムには論理的マスクを使用し、算術演算から構成される暗号アルゴリズムには算術マスクを使用する。マスクの際に用いる演算と暗号アルゴリズムの演算は、可換とすることが効率的に良い。すなわち、マスクされたデータに暗号アルゴリズムの演算を施す場合には、最後にマスクを外した後の演算結果が、最初からマスクをしなかった場合の演算結果と同じになるように、マスクの際に用いる演算を定める。一般に、共通鍵暗号方式は論理的マスクを使用し、公開鍵暗号方式は算術的マスクを使用することが多い。
【0019】
共通鍵暗号方式やハッシュ関数の中には、1つのアルゴリズムの中で論理演算と算術演算の両方を用いるアルゴリズムが存在する。例えば共通鍵暗号方式ではIDEA(International Data Encryption Algorithm)、SEED、ハッシュ関数ではSHA−1(Secure Hash Algorithm - 1)などがある。これらのアルゴリズムにおいてデータをマスクするには、暗号アルゴリズムで論理演算を用いる部分では論理的マスクをする一方、算術演算を用いる部分では算術的マスクをする必要がある。
【0020】
これらのアルゴリズムでは、処理単位(ワード)をwビットとしたとき、wビットのデータxをwビットの数Rでマスクするには、論理的マスクの場合は排他的論理和を用いて、次式の演算を実行する。
【0021】
x’=x^R (但し、^は排他的論理和を表す記号)
算術的マスクの場合は剰余付き減算を用いて、次式の演算を実行する。
A=x−R mod 2
上の暗号アルゴリズムの例ではw=32ビットである。
【0022】
従って、暗号アルゴリズムにおける演算列において論理演算から算術演算に変わる場面では、論理的マスクが施されたデータ(以下、被論理マスクデータという)x’から算術的マスクが施されたデータ(以下、被算術マスクデータという)Aへデータを変換する必要がある。同様に、算術演算から論理演算に変わる場面では、被算術マスクデータAから被論理マスクデータx’へ、データを変換する必要がある。
【0023】
例えば被論理マスクデータx’から被算術マスクデータAに変換する最も簡単な方法は、(x’^R)−R mod 2 を演算する方式である。但し、この方式は、x’^R=xであるから、マスクされていない状態のデータxが演算中に出現するので、望ましくない。
【0024】
データに常にマスクをつけた状態で被論理マスクデータx’と被算術マスクデータAを変換する方法として、非特許文献2,3が知られている。非特許文献2では、被論理マスクデータx’から被算術マスクデータAへ変換する方法と、被算術マスクデータAから被論理マスクデータx’へ変換する方法が提案されている。後者の方法は効率が低いため、事前計算テーブルを用いて高速化を図る方法が非特許文献3で提案されている。
【0025】
図8乃至図10を用いて、非特許文献3での被算術マスクデータAから被論理マスクデータx’への変換方法を説明する。演算を行う単位をbビットとする。簡単のため、bはwの約数であるとし、ある整数kにより、w=k×bとかけるものとする。
【0026】
始めに、論理的マスク及び算術的マスクがbビットの場合(すなわちw=b、k=1)の事前計算テーブルGを構成する。0から2b−1までの各整数Iに対して、事前計算テーブルを次式で定義する。
【0027】
G[I]=((I+r) mod 2b)^r
ここで、便宜上、bビットの乱数をrと記載している。w=bの場合、上記数Rとの関係はR=rである。事前計算テーブルGは、2b個の要素データからなるテーブルであり、各要素データがbビットである。被算術マスクデータAは、事前計算テーブルGの要素データG[A]を求めることで被論理的マスクx’に変換可能となっている。その理由は以下の通りである。
【0028】
G[A]=((A+r) mod 2b)^r
=((x−r)+r mod 2)^r
=(x mod 2)^r
=x^r
=x’
図8に、w=b=4、r=3の場合の事前計算テーブルGを示す。図の配列は、左側から順にG[0],G[1],…,G[15]の値を16進数表記で示している。例えばG[9]=0xFである。
【0029】
図9にk>1(すなわちw>b)の場合に、非特許文献3による被算術マスクデータAから被論理マスクデータx’に変換するアルゴリズムを示す。このアルゴリズムはw=k×bビットの被算術マスクデータAと数Rを入力したとき、wビットの被論理マスクデータx’を出力するアルゴリズムである。
【0030】
始めに、整数m及び被論理マスクデータx’をそれぞれm=k、x’=0とする(ステップS110、S120)。
【0031】
次に、被算術マスクデータAから乱数rをmod 2mb の下で減算する(ステップS130)。
【0032】
数RをLSB(Least Significant Bit:最下位ビット)からbビット目の値で上位の数R1と下位の数R2に分割する(ステップS140)。すなわち上位の数R1は数Rの上位(m−1)bビットであり、下位の数R2は下位bビットである。
【0033】
被算術マスクデータAに下位の数R2をmod 2mb の下で加算する(ステップS150)。
【0034】
次に、整数mについて、m=1か否かを判断する(ステップS160)。m=1の場合は上位の被論理マスクデータx’1を次式の通り計算する(ステップS170、S180)。
【0035】
x’1=(G[A]^R2)^r
しかる後、得られた上位の被論理マスクデータx’1を被論理マスクデータx’の最上位bビットに配置して(ステップS190)アルゴリズムを終了する。
【0036】
m>1の場合は、以下の処理を行う。
【0037】
被算術マスクデータAを数Rと同様に上位の被算術マスクデータA1と、下位の被算術マスクデータA2とに分割する(ステップS161)。
【0038】
ステップS130とステップS150による桁上げ(A2+rにより生じるb+1ビット目の値)を上位の被算術マスクデータA1に対応させるため、次式を計算する(ステップS162、S163)。なお、本明細書中、「桁上げ」は「キャリー」に読み替えてもよい。
【0039】
1=(A1+C[A2])−γ mod 2(m-1)b
続いて、下位の被論理マスクデータx’2を次式に示すように計算する(ステップS164、S165)。
【0040】
x’2=(G[A2]^R2)^r
しかる後、下位の被論理マスクデータx’2を、被論理マスクデータx’の下位(k−m)bビット目に、当該下位の被論理マスクデータx’2の最下位ビットLSBが合うように配置する(ステップS166)。
【0041】
しかる後、整数mを、m=m−1と更新し(ステップS167)、ステップS130からくり返す。
【0042】
上記アルゴリズムにおいて、ステップS130とステップS150における下位桁からの桁上げ(キャリー)を調整する際に、桁上げ情報をマスクするために事前計算テーブルC及びbビットの乱数γを利用している。事前計算テーブルCは、0から2b−1までの各整数Iに対し、次のように定義される。
【0043】
C[I]=γ (I+r<2bのとき)
C[I]=γ+1(I+r≧2bのとき)
ここで、事前計算テーブルCは、2b個の要素データからなるテーブルであり、各要素データがbビットである。
【0044】
図10に、b=4、r=3、γ=9の場合の事前計算テーブルCを示す。図の配列は、左側から順にC[0],C[1],…,C[15]の値を16進数表記で示している。例えばC[0xE]=0xAである。
【先行技術文献】
【非特許文献】
【0045】
【非特許文献1】L. Goubin, J. Patarin, “DES and Differential Power Analysis - The Duplication Method”, CHES ’99, LNCS 1717, pp.158-172, 1999
【非特許文献2】L. Goubin, “A Sound Method for Switching between Boolean and Arithmetic Masking”, CHES 2001, LNCS 2162, pp.3-15, 2001
【非特許文献3】J-S, Coron, A. Tchulkine, “A New Algorithm for Switching from Arithmetic to Boolean Masking”, CHES 2003, LNCS 2779, pp.89-97, 2003
【発明の概要】
【発明が解決しようとする課題】
【0046】
しかしながら、以上のような非特許文献3における被算術マスクデータAから被論理マスクデータx’への変換方法では、事前計算テーブルG,Cを格納する領域として、2つのb×2bビットの格納領域が必要となる。例えばb=4の場合には128ビット(=16バイト)の格納領域、b=8の場合には4,096ビット(=512バイト)の格納領域でよいが、b=16の場合には2,097,152ビット(=262,144バイト)の格納領域が必要となり、非現実的である。
【0047】
従って、実際にはb=8程度の場合の格納領域が妥当な大きさではあるが、それでもICカードのような記憶容量の小さい装置に実装する際には、512バイトの事前計算テーブルG,Cでも、リソースを圧迫するか、あるいは実装できないという問題がある。
【0048】
本発明者の検討によれば、この問題は、kbビットの数Aとbビットの数rとを互いに加算して上位(k−1)bビットの加算結果を得る場合に必要な事前計算テーブルのサイズを縮小できれば、解消できると考えられる。すなわち、ステップS130とステップS150による桁上げ(A2+rにより生じるb+1ビット目の値)を上位の被算術マスクデータA1に対応させる場合に必要な事前計算テーブルCのサイズを縮小できれば、この問題を解消できると考えられる。
【0049】
本発明は上記実情を考慮してなされたもので、kbビットの数Aとbビットの数rとを互いに加算して上位(k−1)bビットの加算結果を得る場合に必要な事前計算テーブルのサイズを縮小し得る演算装置及びプログラムを提供することにある。
【課題を解決するための手段】
【0050】
本発明の一つの局面は、上位(k−1)bビットの数A1及び下位bビットの数A2からなるkbビットの数A(但し、b>4)と、bビットの数rとを加算して上位(k−1)bビットの加算結果を得る処理の前に、(4×2b/2)個のインデックスy(但し、0≦y<4×2b/2)の各々により個別に読出可能な(4×2b/2)個のbビットの要素データC’[y]を備えた事前計算テーブルC’を生成し、前記加算する処理中に、前記数A2と前記数rとの加算結果から前記数A1への桁上げを前記事前計算テーブルC’に基づいて伝播可能な演算装置であって、前記bビットの乱数γを生成する手段と、前記各インデックスyと、当該各インデックスyに関連付けた各要素データC’[y]とを備えた事前計算テーブルC’を記憶するための記憶手段と、前記記憶手段内の事前計算テーブルC’の1個目から2b/2個目までの要素データC’[y]を、前記インデックスyと前記数rの上位b/2ビットの数rHとに基づいて、C’[y]=2b/2 (但し、0≦y<2b/2−rH−1 )、C’[y]=2×2b/2 (但し、y=2b/2−rH−1 )、C’[y]=3×2b/2 (但し、2b/2−rH≦y<2b/2 )、の値に設定する手段と、前記記憶手段内の事前計算テーブルC’の(2b/2+1)個目から(2×2b/2)個目までの要素データC’[y]を、前記インデックスyと前記乱数γとに基づいて、C’[y]=γ (但し、2b/2≦y<2×2b/2)、の値に設定する手段と、前記記憶手段内の事前計算テーブルC’の(2×2b/2+1)個目から(3×2b/2)個目までの要素データC’[y]を、前記インデックスyと前記乱数γと前記数rの下位b/2ビットの数rLとに基づいて、C’[y]=γ (但し、2×2b/2≦y<3×2b/2−rL)、C’[y]=γ+1 (但し、3×2b/2−rL≦y<3×2b/2)、の値に設定する手段と、前記記憶手段内の事前計算テーブルC’の(3×2b/2+1)個目から(4×2b/2)個目までの要素データC’[y]を、前記インデックスyと前記乱数γとに基づいて、C’[y]=γ+1 (但し、3×2b/2≦y<4×2b/2)の値に設定する手段と、前記数Aから前記数A1及び前記数A2を抽出する第1抽出手段と、前記数A2の上位b/2ビットの数AH及び下位b/2ビットの数ALを当該数A2から抽出する第2抽出手段と、前記(4×2b/2)個の要素データC’[y]の値を設定した後、前記抽出した数AHをインデックスyとして前記記憶手段内の事前計算テーブルC’から第1の要素データC’[AH]を読み出す第1読出手段と、前記第1の要素データC’[AH]と前記抽出した数ALとの和をインデックスyとして前記記憶手段内の事前計算テーブルC’から第2の要素データC’[C’[AH]+AL]を読み出す第2読出手段と、前記第2の要素データC’[C’[AH]+AL]、前記乱数γ、前記数A1及び当該数A1のビット数(k−1)bに基づいて、A1+C’[C’[AH]+AL]−γ mod 2(k-1)b を計算することにより、前記数A1への桁上げを伝播する桁上げ伝播手段と、を備えた演算装置である。
【0051】
なお、本発明の一つの局面は、装置として表現したが、装置に限らず、方法、プログラム、プログラムを記憶したコンピュータ読み取り可能な記憶媒体として表現してもよい。
【0052】
(作用)
本発明の一つの局面においては、kbビットの数Aとbビットの乱数rとの加算について、数Aの下位bビットの数A2の上位b/2ビットの値AHと乱数rの上位b/2ビットの値rHとの和AH+rHと、数A2の下位b/2ビットの値ALと乱数rの下位b/2ビットの値rLとの和AL+rLとに基づいて、A2+rの桁上げの有無を示すように事前計算テーブルC’の要素データを設定したので、非特許文献3に記載の方法に比べ、kbビットの数Aとbビットの数rとを互いに加算して上位(k−1)bビットの加算結果を得る場合に必要な事前計算テーブルのサイズを縮小することができる。
【発明の効果】
【0053】
以上説明したように本発明によれば、kbビットの数Aとbビットの数rとを互いに加算して上位(k−1)bビットの加算結果を得る場合に必要な事前計算テーブルのサイズを縮小できる。
【図面の簡単な説明】
【0054】
【図1】本発明の第1の実施形態に係る演算装置の概略図である。
【図2】同実施形態における事前計算テーブルCの生成手順を示すフローチャートである。
【図3】同実施形態における事前計算テーブルCの一例を示す図である。
【図4】同実施形態における加算手順を示すフローチャートである。
【図5】本発明の第2の実施形態に係る演算装置に適用された算術的マスクから論理的マスクへの変換手順を示すフローチャートである。
【図6】本発明の概要を説明するためのフローチャートである。
【図7】一般的なDESのデータ変換部の16段目を示す図である。
【図8】従来の事前計算テーブルGの一例を示す図である。
【図9】従来の算術的マスクから論理的マスクへの変換手順を示すフローチャートである。
【図10】従来の事前計算テーブルCの一例を示す図である。
【発明を実施するための形態】
【0055】
以下、本発明の各実施形態について図面を用いて説明するが、その前に本発明の概要を図6を参照して述べる。
事前計算テーブルC’を生成するときに、0から2b−1までの範囲内の整数Aに対して、整数rでマスクした値A+rが2bより小さいか否かの判断(桁上げの有無の判断)を、上位b/2ビットと下位b/2ビットに分けて行う。
【0056】
ここで、整数Aの上位b/2ビットの数をAH、下位b/2ビットの数をALと表すことにする。整数rについても同様に、上位b/2ビットの数をrH、下位b/2の数をrLと表す(例、r=0x19の場合、rH=1、rL=9)。
【0057】
例えば、上位b/2ビット同士AH,rHの加算結果がAH+rH<2b/2−1であれば、AL,rLの値によらず、A+r<2bである(即ち、桁上げ無し)と判断できる。そのため、この桁上げ無しの場合には事前計算テーブルC’を参照したときに値γ(乱数)が読み出されるように事前計算テーブルC’を生成する。この場合は、具体的には、数AHをインデックスyとしてbビットの値C’[AH]を得る場合(但し、0≦y<2b/2−rH−1)の(2b/2−rH−1)個×bビットのサイズ(例、図3の0行目の14個の値C’[0x00],…,C’[0x1D]=0x10,…,0x10のサイズ)と、このインデックスyにより得られた値C’[AH]に数ALを加算した値(0x10+AL)をインデックスyとしてbビットの値γを得る場合(但し、2b/2≦y<2×2b/2)の2b/2個×bビットのサイズ(例、図3の1行目の16個の値C’[0x10]〜C’[0x1F]=0x56,…,0x56のサイズ)とを必要とする。
【0058】
次に、上位b/2ビット同士AH,rHの加算結果がAH+rH≧2b/2 であれば、AL,rLの値によらず、A+r≧2bである(即ち、桁上げ有り)と判断できる。そのため、この桁上げ有りの場合には事前計算テーブルC’を参照したときに値γ+1(乱数付き桁上げ情報)が読み出されるように事前計算テーブルC’を生成する。この場合は、具体的には、数AHをインデックスyとしてbビットの値C’[AH]を得る場合(但し、2b/2−rH≦y<2b/2 )のrH個×bビットのサイズ(例、図3の0行目の1個の値C’[0x0F]=0x30のサイズ)と、このインデックスyにより得られた値C’[AH]に数ALを加算した値(0x30+AL)をインデックスyとしてbビットの値γを得る場合(但し、3×2b/2≦y<4×2b/2)の2b/2個×bビットのサイズ(例、図3の3行目の16個の値C’[0x30],…,C’[0x3F]=0x57,…,0x57のサイズ)とを必要とする。
【0059】
最後に、上位b/2ビット同士AH,rHの加算結果がAH+rH=2b/2−1のときには、下位b/2ビット同士AL,rLの加算結果がAL+rL<2b/2であればA+r<2bである(即ち、桁上げ無し)と判断でき、そうでなければA+r≧2bである(即ち、桁上げ有り)と判断できる。そのため、事前計算テーブルC’を参照したときに、桁上げ無しの場合には値γが読み出され、桁上げ有りの場合には値γ+1が読み出されるように事前計算テーブルC’を生成する。これらの場合には、具体的には、数AHをインデックスyとしてbビットの値C’[AH]を得る場合(但し、y=2b/2−rH−1)の1個×bビットのサイズ(例、図3の0行目の1個の値C’[0x0E]=0x20のサイズ)と、このインデックスyにより得られた値C’[AH]に数ALを加算した値(0x20+AL)をインデックスyとしてbビットの値γを得る場合(但し、2×2b/2≦y<3×2b/2−rL)の(2b/2−rL)個×bビットのサイズ(例、図3の2行目の7個の値C’[0x20],…,C’[0x26]=0x56,…,0x56のサイズ)と、値C’[AH]に数ALを加算した値(0x20+AL)をインデックスyとしてbビットの値γ+1を得る場合(但し、3×2b/2−rL≦y<3×2b/2)のrL個×bビットのサイズ(例、図3の2行目の9個の値C’[0x27],…,C’[0x2F]=0x57,…,0x57のサイズ)とを必要とする。
【0060】
このような事前計算テーブルC’のサイズは、これら全てのサイズを足し合わせた値となり、具体的には、(2b/2−rH−1)個×bビットのサイズと、2b/2個×bビットのサイズと、rH個×bビットのサイズと、2b/2個×bビットのサイズと、1個×bビットのサイズと、2b/2−rL個×bビットのサイズと、rL個×bビットのサイズとを足し合わせた値となる。すなわち、事前計算テーブルC’のサイズは、4×2b/2×bビット、即ち、4b×2b/2ビットとなる。
【0061】
このサイズを、従来の事前計算テーブルCのサイズb×2bビットと比較すると縮小された割合は(4b×2b/2)/(b×2b)=4/2b/2 である。この割合は、例えばb=4の場合には1であるが、b>4であればbの値に応じて1より縮小される。例えば、b=8の場合には1/4に縮小され、b=16の場合には1/64と顕著に縮小される。
【0062】
以上により、非特許文献3の方法において、事前計算テーブルのサイズを縮小できる。このため、ICカードのようなリソースに厳しい制約のある装置上へ実装することがより容易となる。
【0063】
(第1の実施形態)
図1は本発明の第1の実施形態に係る演算装置の構成を示す概略図である。この演算装置101は、ICカードなどの計算機の暗号処理部として構成されていて、ハードウェア又はソフトウェアによって暗号処理を行うものである。具体的にはCPU(中央演算装置)102、入出力部103、プログラム記憶部104、乱数生成部105、揮発性メモリ106及びバス107からなる。この演算装置101は、ハードウェア構成、又はハードウェア資源とソフトウェアとの組合せ構成のいずれでも実施可能となっている。組合せ構成のソフトウェアとしては、予めネットワーク又は記憶媒体から演算装置となるコンピュータにインストールされ、演算装置101の機能を実現させるためのプログラムが用いられる。ここでは、プログラム記憶部104に格納されたプログラムをCPU102で実行する形で、各機能を実現するものとしている。このプログラムは、データ加算のためのサブプログラムを少なくとも含んでいる。
【0064】
ここで、CPU102は、プログラム記憶部104に格納されたプログラムを実行することにより、図2、図4及び図5に示す処理を実行する機能をもっている。
【0065】
入出力部103は、演算装置101内と外部との間のインターフェースであり、例えば、演算対象の数A,rを演算装置101内に入力する機能と、CPU102により得られた演算結果を演算装置101の外部に出力する機能とをもっている。
【0066】
プログラム記憶部104は、CPU102から読出可能な記憶装置であり、例えばROM(リードオンリーメモリ)又はEEPROM(電気的に書換え可能なROM)であって、図2、図4及び図5に示す処理のプログラムが記憶されている。なお、プログラム記憶部104は、プログラムを外部からインストールして保持する構成でもよい。
【0067】
乱数生成部105は、CPU102に制御されて乱数を生成するものであり、例えば、bビットの乱数γを生成する機能をもっている。なお、乱数生成部105は、独立のハードウェアで実現してもよいし、CPU102とプログラムで実現してもよい。あるいは、乱数生成部105を演算装置101から省略し、外部で生成した乱数を入出力部103から入力する構成としてもよい。
【0068】
揮発性メモリ106は、CPU102から読出/書込可能な記憶装置であり、例えばRAM(ランダムアクセスメモリ)であって、例えば、事前計算テーブルC’、数A、数r、乱数γ及び加算結果のように、計算に必要なデータ、計算途中のデータ及び計算結果などを格納する。
【0069】
次に、以上のように構成された演算装置の動作を図2乃至図4を用いて説明する。なお、この動作は、事前計算テーブルの生成処理、及び加算処理(桁上げ伝播処理)の順に説明する。
【0070】
(事前計算テーブルC’の生成処理:図2)
入出力部103は、上位(k−1)bビットの数A1及び下位bビットの数A2からなるkbビットの数A(但し、b>4)と、bビットの数rと、これらの数A,rに対する加算指令とを例えば図示しない暗号処理部から受けると、これらの数A,r及び加算指令をCPU102に入力する。なお、数A,A1,A2は、それぞれ「被算術マスクデータ」とも呼ぶ。
【0071】
CPU102は、これらの数A,r及び加算指令を受けると、これらの数A,rを加算して上位(k−1)bビットの加算結果を得る処理の前に、図3に示す如き、事前計算テーブルC’を生成するため、乱数生成部105を起動する。
【0072】
乱数生成部105は、CPU102に起動されると、bビットの乱数γを生成する(ステップS210)。この乱数γはCPU102に送出され、CPU102から揮発性メモリ106に格納される。なお、ステップS210は、最初に実行する場合を例に挙げて説明したが、これに限らず、乱数γを用いるステップS250、S260、S270及びS280よりも前であれば、任意のタイミングで実行可能である。また、以下の各ステップS220〜S280は、任意の順序で実行可能である。
【0073】
次に、CPU102は、(4×2b/2)個のインデックスy(但し、0≦y<4×2b/2)と、当該各インデックスyに関連付けた各要素データC’[y]とを備えた事前計算テーブルC’を揮発性メモリ106に書き込む。各要素データC’[y]は(4×2b/2)個あり、インデックスyの各々により個別に読出可能なbビットの値である。但し、この段階では、各要素データC’[y]の値は設定されていない。また、インデックスyは整数である。
【0074】
CPU102は、揮発性メモリ106内の事前計算テーブルC’の1個目から2b/2個目までの要素データC’[y]を、0≦y<2b/2 のインデックスyと数rの上位b/2ビットの数rHとに基づいて、以下の値に設定する(ステップS220〜S240)。
【0075】
C’[y]=2b/2 (0≦y<2b/2−rH−1 :即ちy+rH<2b/2−1)
C’[y]=2×2b/2 (y=2b/2−rH−1 :即ちy+rH=2b/2−1)
C’[y]=3×2b/2 (2b/2−rH≦y<2b/2 :即ちy+rH>2b/2−1)
ここで、インデックスyには、後述する上位の被算出マスクデータAHの値が入力されることを想定しており、上の3通りの要素データC’[y]は、それぞれAH+rH<2b/2−1、AH+rH=2b/2−1、AH+rH≧2b/2の場合に対応している。
【0076】
上の要素データC’[y]の値は、上位の被算出マスクデータAHの値に応じて次に事前計算テーブルのどの要素データC’[ ]を見ればよいのかを示しており、一番上の場合はC’[2b/2]、2番目の場合はC’[2×2b/2]、3番目の場合はC’[3×2b/2]を参照することを表している。
【0077】
次に、CPU102は、揮発性メモリ106内の事前計算テーブルC’の(2b/2+1)個目から(2×2b/2)個目までの要素データC’[y]を、2b/2≦y<2×2b/2 のインデックスyと乱数γとに基づいて、以下の値に設定する(ステップS250)。
【0078】
C’[y]=γ
ここで、y−2b/2には、後述する下位の被算術マスクデータALの値が入力されることを想定しており、これはAH+rH<2b/2−1の場合に、下位の被算術マスクデータALの値に関わらず、乱数γを返すことを示している。
【0079】
次に、CPU102は、揮発性メモリ106内の事前計算テーブルC’の(2×2b/2+1)個目から(3×2b/2)個目までの要素データC’[y]を、2×2b/2≦y<3×2b/2 のインデックスyと乱数γと数rの下位b/2ビットの数rLとに基づいて、以下の値に設定する(ステップS260、S270)。
C’[y]=γ (2×2b/2≦y<3×2b/2−rL:即ちy+rL<2b/2)、
C’[y]=γ+1 (3×2b/2−rL≦y<3×2b/2:即ちy+rL≧2b/2)、
ここで、y−2×2b/2には、下位の被算術マスクデータALの値が入力されることを想定しており、上の2通りはそれぞれAL+rL<2b/2、AL+rL≧2b/2の場合に対応している。
【0080】
最後に、CPU102は、揮発性メモリ106内の事前計算テーブルC’の(3×2b/2+1)個目から(4×2b/2)個目までの要素データC’[y]を、3×2b/2≦y<4×2b/2 のインデックスyと乱数γとに基づいて、以下の値に設定する(ステップS280)。
C’[y]=γ+1
ここで、y−3×2b/2には、下位の被算術マスクデータALの値が入力されることを想定しており、これはAH−rH≧2b/2の場合に、下位の被算術マスクデータALの値に関わらず、乱数付き桁上げ情報γ+1を返すことを示している。
【0081】
このように構成した事前計算テーブルC’のサイズは4b×2b/2ビットとなる。
【0082】
図3に、b=8、r=0x19、γ=0x56の場合の事前計算テーブルC’を示す。事前計算テーブルC’は16進数表記である。図3の配列は、縦の列がインデックスの2b/2の倍数を、横の行が2b/2未満のインデックスを表している。例えば縦のインデックスが1で横のインデックスが5の場合は、事前計算テーブルC’の1×2b/2+5(=21)番目の要素を指しており、C’[21]=0x56となる。
【0083】
縦のインデックス0の行は、rH=1であるため、2b/2−rH−1=14である。従って横のインデックスが13(=0x0D)以下のものは事前計算テーブルC’の要素は2b/2=0x10、14(=0x0E)のものは2×2b/2=0x20、15以上(=0x0F)のもの(15のみ)は3×2b/2=0x30となる。
【0084】
縦のインデックス1の行は、全ての要素データが乱数γ=0x56となる。
【0085】
縦のインデックス3の行は、全ての要素データが乱数付き桁上げ情報γ+1=0x57となる。
【0086】
縦のインデックス2の行は、rL=9であるため、2b/2−rL=7である。従って、横のインデックスが6以下のものは事前計算テーブルC’の要素データが乱数γ=0x56となり、横のインデックスが7以上のものは要素データが乱数付き桁上げ情報γ+1=0x57となる。
【0087】
(加算処理:図4)
始めに、CPU102は、入力された数Aから数A1,A2を抽出する。具体的には、被算術マスクデータAの上位(k−1)bビットを上位の被算術マスクデータA1とし、下位bビットを下位の被算術マスクデータA2とする(ステップS310)。
【0088】
加算結果A+rを求めるためには、加算結果の下位の被算術マスクデータA2←A2+rにおける桁上げ情報(b+1ビット目)を、加算結果の上位の被算術マスクデータA1に伝える必要がある。すなわち加算結果の下位の被算術マスクデータA2+rの桁上げ情報がない場合には桁上げ情報“0”の加算A1←A1+0を、桁上げ情報がある場合には桁上げ情報“1”の加算A1←A1+1を行う必要がある。但し、桁上げ情報の有無によって加算が異なるため、サイドチャネル解析を阻止する観点から好ましくない。
【0089】
そのため、bビットの乱数γを用い、それぞれ桁上げ情報がない場合には桁上げ情報“0”の加算A1←(A1+γ)−γを、桁上げ情報がある場合には桁上げ情報“1”の加算A1←(A1+γ+1)−γを行う。
【0090】
ここで、乱数γ又は乱数付き桁上げ情報γ+1のいずれを加えるかはA2+r<2b/2であるか否かに対応しており、これは事前計算テーブルC’を参照することで判定できる。
【0091】
そこで、CPU102は、数A2の上位b/2ビットの数AH及び下位b/2ビットの数ALを当該数A2から抽出する。すなわち、下位の被算術マスクデータA2の上位b/2ビットを上位の被算術マスクデータAHとし、下位b/2ビットを下位の被算術マスクデータALとする(ステップS320)。なお、これらステップS310、S320は、説明の便宜上、前述したステップS280の後に実行したが、これに限らず、ステップS210〜S280の間の任意のタイミングで実行可能となっている。
【0092】
次に、CPU102は、抽出した数AHをインデックスyとして揮発性メモリ106内の事前計算テーブルC’から第1の要素データC’[AH]を読み出す。なお、この第1の要素データC’[AH]を読み出す処理は、前述したステップS280よりも後に実行される。
【0093】
CPU102は、第1の要素データC’[AH]及び抽出した数ALの和をインデックスyとして揮発性メモリ106内の事前計算テーブルC’から第2の要素データC’[C’[AH]+AL]を読み出す。
【0094】
CPU102は、第2の要素データC’[C’[AH]+AL]、乱数γ、数A1及び当該数A1のビット数(k−1)bに基づいて、
1+C’[C’[AH]+AL]−γ mod 2(k-1)b
を計算することにより、数A1への桁上げを伝播する(ステップS330、S340)。
【0095】
上述したように第1の実施形態によれば、kbビットの数Aとbビットの数rとを互いに加算して上位(k−1)bビットの加算結果を得る場合に必要な事前計算テーブルのサイズを縮小することができる。
【0096】
補足すると、ステップS340により生成された上位の被算術マスクデータA1は、加算結果A+rの上位(k−1)bビットとなっており、下位bビットからの桁上げ伝播を事前計算テーブルC’に基づいて乱数γでマスクしながら実行したため、サイドチャネル解析に対して耐性を有している。さらに事前計算テーブルC’のサイズが4b×2b/2ビットであるので、従来の事前計算テーブルCのサイズb×2bビットと比較すると縮小された割合は(4b×2b/2)/(b×2b)=4/2b/2である。この割合は、例えばb=4の場合には1であるが、b=8の場合には1/4、b=16の場合には1/64と顕著になる。
【0097】
また、第1の実施形態においては、非特許文献3の手法を踏襲しているため、サイドチャネル解析に対して耐性を有しつつ、事前計算テーブルサイズを縮小できるため、ICカードのようなリソースに厳しい制約のある装置上へ実装することがより容易となる。
【0098】
(第2の実施形態)
次に、本発明の第2の実施形態に係る演算装置について説明するが、図9と同一部分には同一符号を付してその詳しい説明を省略し、ここでは異なる部分について主に述べる。
【0099】
本実施形態は、従来の算術的マスクから論理的マスクへの変換方法に第1の実施形態を適用したものである。演算装置101の構成のうち、ハードウェア構成は、図1に示した構成と同一であり、ソフトウェア構成は、プログラム記憶部104内に図5に示す処理を実行するためのプログラムが付加された構成となっている。
【0100】
当該付加されたプログラムは、算術的マスクから論理的マスクへの変換処理を実行するためのプログラムであり、従来の図9に示したステップS162に代えて、後述するステップS162a(第1の実施形態の事前計算テーブルC’を用いる処理)を実行する内容となっている(なお、ステップS162a以外のステップは、従来の図9に示した各ステップと同様に実行される。)。
【0101】
補足すると、図5に示すステップS161〜S163は、第1の実施形態のステップS310〜S340に相当し、遅くともステップS162aを実行する前に、第1の実施形態のステップS210〜S280(事前計算テーブルC’の生成処理)が予め実行される。なお、通常は、図5に示す最初のステップS110よりも前に、予めステップS210〜S280が実行される。
【0102】
いずれにしても図5に示す処理の実行に伴い、揮発性メモリ106は、第1の実施形態の記憶内容に加え、第2の事前計算テーブルG、整数m及び被論理マスクデータx’を記憶するように用いられる。ここで、第2の事前計算テーブルGは、図8に示したように、0から2b−1までの2b個のインデックスIと、当該各インデックスIにより個別に読出可能な2b個の要素データG[I]=((I+r) mod 2b)^r とを備えている。
【0103】
次に、以上のように構成された演算装置の動作を図5を用いて説明する。
【0104】
なお、CPU102は、前述したステップS210〜S280の処理により、第1の実施形態に述べた事前計算テーブルC’を予め生成して揮発性メモリ106に書き込んでいるとする。また同様に、CPU102は、0から2b−1までの2b個のインデックスI、乱数r及びビット数bに基づいて第2の事前計算テーブルGを生成し、当該第2の事前計算テーブルGを揮発性メモリ106に書き込む。
【0105】
入出力部103においては、上位(k−1)bビットの数A1及び下位bビットの数A2からなるkbビットの数Aと、上位(m−1)bビットの数R1及び下位bビットの数R2からなるmbビットの数Rとを演算装置101内に入力して揮発性メモリ106に書き込む。
【0106】
続いて、CPU102は、整数m及び被論理マスクデータx’をそれぞれm=k、x’=0に設定し、これら整数m及び被論理マスクデータx’を揮発性メモリ106に書き込む(ステップS110〜S120)。
【0107】
CPU102は、被算術マスクデータとしての数Aから乱数rをmod 2mb の下で減算する(ステップS130)。この減算により、減算結果A←A−r mod 2mbが得られる。
【0108】
この減算の後、CPU102は、入力された数Rから上位(m−1)bビットの数R1及び下位bビットの数R2を抽出する(ステップS140)。
【0109】
この抽出の後、CPU102は、数Aに数R2をmod 2mb の下で加算する(ステップS150)。この加算により、加算結果A←A−R2 mod 2mbが得られる。
【0110】
この加算の後、CPU102は、揮発性メモリ106内の整数mについて、m=1か否かを判定する。
【0111】
CPU102は、判定の結果、m=1の場合には加算後の数AをインデックスIとして、揮発性メモリ106内の事前計算テーブルGから要素データG[A]を読み出す。しかる後、CPU102は、この要素データG[A]、数R2及び乱数rに基づいて、上位の被論理マスクデータx’1を、x’1=(G[A]^R2)^r の値に計算する手段(ステップS170〜S180)。
【0112】
CPU102は、この計算により得られた上位の被論理マスクデータx’1を、揮発性メモリ106内の被論理マスクデータx’の最上位bビットに配置する(ステップS190)。
【0113】
一方、ステップS160による判定の結果、m>1の場合には、前述したステップS310〜S340と同様の処理として、ステップS161、S162a及びS163を順次実行する。
【0114】
詳しくは、CPU102は、ステップS150による加算後の数Aから数A1,A2を抽出する。具体的には、被算術マスクデータAの上位(k−1)bビットを上位の被算術マスクデータA1とし、下位bビットを下位の被算術マスクデータA2とする(ステップS161)。
【0115】
次に、CPU102は、従来のステップS162とは異なり、以下のステップS162aを実行する。
【0116】
すなわち、CPU102は、前述同様に、数A2の上位b/2ビットの数AH及び下位b/2ビットの数ALを当該数A2から抽出する。
【0117】
次に、CPU102は、抽出した数AHをインデックスyとして揮発性メモリ106内の事前計算テーブルC’から第1の要素データC’[AH]を読み出す。
【0118】
また、CPU102は、第1の要素データC’[AH]と抽出した数ALとの和をインデックスyとして揮発性メモリ106内の事前計算テーブルC’から第2の要素データC’[C’[AH]+AL]を読み出す。
【0119】
CPU102は、第2の要素データC’[C’[AH]+AL]、乱数γ、数A1及び当該数A1のビット数(m−1)bに基づいて、
1←A1+C’[C’[AH]+AL]−γ mod 2(m-1)b
の計算により、数A1への桁上げを伝播する(ステップS162a、S163)。
【0120】
次に、CPU102は、ステップS161で抽出した数A2をインデックスIとして、揮発性メモリ106内の事前計算テーブルGから要素データG[A2]を読み出す。しかる後、CPU102は、この要素データG[A2]、数R2及び乱数rに基づいて、下位の被論理マスクデータx’2を、x’2=(G[A2]^R2)^r の値に計算する(ステップS164、S165)。
【0121】
CPU102は、この計算により得られた下位の被論理マスクデータx’2を、揮発性メモリ106内の被論理マスクデータx’の下位(k−m)bビット目に、当該下位の被論理マスクデータx’2の最下位ビットが合うように配置する(ステップS166)。
【0122】
この配置の後、CPU102は、揮発性メモリ106内の整数mを、m=m−1と更新してステップS130の処理に戻る(ステップS167)。
以下、CPU102は、ステップS130以降の処理を再実行する。
【0123】
上述したように第2の実施形態によれば、従来の算術的マスクから論理的マスクへの変換方法に第1の実施形態を適用した構成により、被算術マスクデータを被論理マスクデータに変換する場合に必要な事前計算テーブルのサイズを縮小することができる。
【0124】
補足すると、第2の実施形態においては、第1の実施形態と同様に、非特許文献3の手法を踏襲しているためサイドチャネル解析に対して耐性を有しつつ、事前計算テーブルサイズをより小さくできるため、ICカードのようなリソースに厳しい制約のある装置上へ実装することがより容易となる。
【0125】
なお、上記実施形態に記載した手法は、コンピュータに実行させることのできるプログラムとして、磁気ディスク(フロッピー(登録商標)ディスク、ハードディスクなど)、光ディスク(CD−ROM、DVDなど)、光磁気ディスク(MO)、半導体メモリなどの記憶媒体に格納して頒布することもできる。
【0126】
また、この記憶媒体としては、プログラムを記憶でき、かつコンピュータが読み取り可能な記憶媒体であれば、その記憶形式は何れの形態であっても良い。
【0127】
また、記憶媒体からコンピュータにインストールされたプログラムの指示に基づきコンピュータ上で稼働しているOS(オペレーティングシステム)や、データベース管理ソフト、ネットワークソフト等のMW(ミドルウェア)等が上記実施形態を実現するための各処理の一部を実行しても良い。
【0128】
さらに、本発明における記憶媒体は、コンピュータと独立した媒体に限らず、LANやインターネット等により伝送されたプログラムをダウンロードして記憶または一時記憶した記憶媒体も含まれる。
【0129】
また、記憶媒体は1つに限らず、複数の媒体から上記実施形態における処理が実行される場合も本発明における記憶媒体に含まれ、媒体構成は何れの構成であっても良い。
【0130】
尚、本発明におけるコンピュータは、記憶媒体に記憶されたプログラムに基づき、上記実施形態における各処理を実行するものであって、パソコン等の1つからなる装置、複数の装置がネットワーク接続されたシステム等の何れの構成であっても良い。
【0131】
また、本発明におけるコンピュータとは、パソコンに限らず、情報処理機器に含まれる演算処理装置、マイコン等も含み、プログラムによって本発明の機能を実現することが可能な機器、装置を総称している。
【0132】
なお、本願発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態に亘る構成要素を適宜組合せてもよい。
【符号の説明】
【0133】
101…演算装置、102…CPU、103…入出力部、104…プログラム記憶部、105…乱数生成部、106…揮発性メモリ、107…バス。

【特許請求の範囲】
【請求項1】
上位(k−1)bビットの数A1及び下位bビットの数A2からなるkbビットの数A(但し、b>4)と、bビットの数rとを加算して上位(k−1)bビットの加算結果を得る処理の前に、(4×2b/2)個のインデックスy(但し、0≦y<4×2b/2)の各々により個別に読出可能な(4×2b/2)個のbビットの要素データC’[y]を備えた事前計算テーブルC’を生成し、前記加算する処理中に、前記数A2と前記数rとの加算結果から前記数A1への桁上げを前記事前計算テーブルC’に基づいて伝播可能な演算装置であって、
前記bビットの乱数γを生成する手段と、
前記各インデックスyと、当該各インデックスyに関連付けた各要素データC’[y]とを備えた事前計算テーブルC’を記憶するための記憶手段と、
前記記憶手段内の事前計算テーブルC’の1個目から2b/2個目までの要素データC’[y]を、前記インデックスyと前記数rの上位b/2ビットの数rHとに基づいて、
C’[y]=2b/2 (但し、0≦y<2b/2−rH−1 )、
C’[y]=2×2b/2 (但し、y=2b/2−rH−1 )、
C’[y]=3×2b/2 (但し、2b/2−rH≦y<2b/2 )、
の値に設定する手段と、
前記記憶手段内の事前計算テーブルC’の(2b/2+1)個目から(2×2b/2)個目までの要素データC’[y]を、前記インデックスyと前記乱数γとに基づいて、
C’[y]=γ (但し、2b/2≦y<2×2b/2)、
の値に設定する手段と、
前記記憶手段内の事前計算テーブルC’の(2×2b/2+1)個目から(3×2b/2)個目までの要素データC’[y]を、前記インデックスyと前記乱数γと前記数rの下位b/2ビットの数rLとに基づいて、
C’[y]=γ (但し、2×2b/2≦y<3×2b/2−rL)、
C’[y]=γ+1 (但し、3×2b/2−rL≦y<3×2b/2)、
の値に設定する手段と、
前記記憶手段内の事前計算テーブルC’の(3×2b/2+1)個目から(4×2b/2)個目までの要素データC’[y]を、前記インデックスyと前記乱数γとに基づいて、
C’[y]=γ+1 (但し、3×2b/2≦y<4×2b/2
の値に設定する手段と、
前記数Aから前記数A1及び前記数A2を抽出する第1抽出手段と、
前記数A2の上位b/2ビットの数AH及び下位b/2ビットの数ALを当該数A2から抽出する第2抽出手段と、
前記(4×2b/2)個の要素データC’[y]の値を設定した後、前記抽出した数AHをインデックスyとして前記記憶手段内の事前計算テーブルC’から第1の要素データC’[AH]を読み出す第1読出手段と、
前記第1の要素データC’[AH]と前記抽出した数ALとの和をインデックスyとして前記記憶手段内の事前計算テーブルC’から第2の要素データC’[C’[AH]+AL]を読み出す第2読出手段と、
前記第2の要素データC’[C’[AH]+AL]、前記乱数γ、前記数A1及び当該数A1のビット数(k−1)bに基づいて、A1+C’[C’[AH]+AL]−γ mod 2(k-1)b を計算することにより、前記数A1への桁上げを伝播する桁上げ伝播手段と、
を備えたことを特徴とする演算装置。
【請求項2】
請求項1に記載の演算装置において、
0から2b−1までの2b個のインデックスIと、当該各インデックスIにより個別に読出可能な2b個の要素データG[I]=((I+r) mod 2b)^r とを備えた第2の事前計算テーブルGを記憶するための第2の記憶手段(但し、^は排他的論理和を表す記号)と、
前記インデックスI、前記乱数r及びビット数bに基づいて前記第2の事前計算テーブルGを生成し、当該第2の事前計算テーブルGを前記第2の記憶手段に書き込む手段と、
整数m及び被論理マスクデータx’を記憶するための第3の記憶手段と、
整数m及び被論理マスクデータx’をそれぞれm=k、x’=0に設定し、これら整数m及び被論理マスクデータx’を前記第3の記憶手段に書き込む手段と、
上位(m−1)bビットの数R1及び下位bビットの数R2からなるmbビットの数Rを入力するための手段と、
被算術マスクデータとしての前記数Aから前記乱数rをmod 2mb の下で減算する減算手段と、
この減算の後、前記入力された数Rから前記数R1,R2を抽出する手段と、
この抽出の後、前記Aに前記数R2をmod 2mb の下で加算する手段と、
この加算の後、前記第3の記憶手段内の整数mについて、m=1か否かを判定する手段と、
前記判定の結果、m=1の場合には前記加算後の数AをインデックスIとして、前記第2の記憶手段内の事前計算テーブルGから要素データG[A]を読み出す手段と、
この要素データG[A]、前記数R2及び前記乱数rに基づいて、上位の被論理マスクデータx’1を、x’1=(G[A]^R2)^r の値に計算する手段と、
この計算により得られた上位の被論理マスクデータx’1を、前記第3の記憶手段内の被論理マスクデータx’の最上位bビットに配置する手段と、
前記判定の結果、m>1の場合には、前記第1抽出手段、前記第2抽出手段、前記第1読出手段、前記第2読出手段及び前記桁上げ伝播手段による処理を順次実行する手段と、
この桁上げ伝播手段による処理の実行後、前記加算後の数Aの下位bビットの数A2をインデックスIとして、前記第2の記憶手段内の事前計算テーブルGから要素データG[A2]を読み出す手段と、
この要素データG[A2]、前記数R2及び前記乱数rに基づいて、下位の被論理マスクデータx’2を、x’2=(G[A2]^R2)^r の値に計算する手段と、
この計算により得られた下位の被論理マスクデータx’2を、前記第3の記憶手段内の被論理マスクデータx’の下位(k−m)bビット目に、当該下位の被論理マスクデータx’2の最下位ビットが合うように配置する手段と、
この配置の後、前記第3の記憶手段内の整数mを、m=m−1と更新し、前記減算手段の処理に戻る手段と、
を更に備えたことを特徴とする演算装置。
【請求項3】
上位(k−1)bビットの数A1及び下位bビットの数A2からなるkbビットの数A(但し、b>4)と、bビットの数rとを加算して上位(k−1)bビットの加算結果を得る処理の前に、(4×2b/2)個のインデックスy(但し、0≦y<4×2b/2)の各々により個別に読出可能な(4×2b/2)個のbビットの要素データC’[y]を備えた事前計算テーブルC’を生成し、前記加算する処理中に、前記数A2と前記数rとの加算結果から前記数A1への桁上げを前記事前計算テーブルC’に基づいて伝播可能な演算装置のプログラムであって、
前記演算装置を、
前記bビットの乱数γを生成する手段、
前記各インデックスyと、当該各インデックスyに関連付けた各要素データC’[y]とを備えた事前計算テーブルC’を前記演算装置の記憶手段に書き込む手段、
前記記憶手段内の事前計算テーブルC’の1個目から2b/2個目までの要素データC’[y]を、前記インデックスyと前記数rの上位b/2ビットの数rHとに基づいて、
C’[y]=2b/2 (但し、0≦y<2b/2−rH−1 )、
C’[y]=2×2b/2 (但し、y=2b/2−rH−1 )、
C’[y]=3×2b/2 (但し、2b/2−rH≦y<2b/2 )、
の値に設定する手段、
前記記憶手段内の事前計算テーブルC’の(2b/2+1)個目から(2×2b/2)個目までの要素データC’[y]を、前記インデックスyと前記乱数γとに基づいて、
C’[y]=γ (但し、2b/2≦y<2×2b/2)、
の値に設定する手段、
前記記憶手段内の事前計算テーブルC’の(2×2b/2+1)個目から(3×2b/2)個目までの要素データC’[y]を、前記インデックスyと前記乱数γと前記数rの下位b/2ビットの数rLとに基づいて、
C’[y]=γ (但し、2×2b/2≦y<3×2b/2−rL)、
C’[y]=γ+1 (但し、3×2b/2−rL≦y<3×2b/2)、
の値に設定する手段、
前記記憶手段内の事前計算テーブルC’の(3×2b/2+1)個目から(4×2b/2)個目までの要素データC’[y]を、前記インデックスyと前記乱数γとに基づいて、
C’[y]=γ+1 (但し、3×2b/2≦y<4×2b/2
の値に設定する手段、
前記数Aから前記数A1及び前記数A2を抽出する手段、
前記数A2の上位b/2ビットの数AH及び下位b/2ビットの数ALを当該数A2から抽出する手段、
前記(4×2b/2)個の要素データC’[y]の値を設定した後、前記抽出した数AHをインデックスyとして前記記憶手段内の事前計算テーブルC’から第1の要素データC’[AH]を読み出す手段、
前記第1の要素データC’[AH]と前記抽出した数ALとの和をインデックスyとして前記記憶手段内の事前計算テーブルC’から第2の要素データC’[C’[AH]+AL]を読み出す手段、
前記第2の要素データC’[C’[AH]+AL]、前記乱数γ、前記数A1及び当該数A1のビット数(k−1)bに基づいて、A1+C’[C’[AH]+AL]−γ mod 2(k-1)b を計算することにより、前記数A1への桁上げを伝播する手段、
として機能させるためのプログラム。
【請求項4】
請求項3に記載のプログラムにおいて、
前記演算装置を、
0から2b−1までの2b個のインデックスIと、当該各インデックスIにより個別に読出可能な2b個の要素データG[I]=((I+r) mod 2b)^r とを備えた第2の事前計算テーブルG(但し、^は排他的論理和を表す記号)を、前記インデックスI、前記乱数r及びビット数bに基づいて生成し、当該生成した第2の事前計算テーブルGを前記演算装置の第2の記憶手段に書き込む手段、
整数m及び被論理マスクデータx’をそれぞれm=k、x’=0に設定し、これら整数m及び被論理マスクデータx’を前記演算装置の第3の記憶手段に書き込む手段、
上位(m−1)bビットの数R1及び下位bビットの数R2からなるmbビットの数Rを入力するための手段、
被算術マスクデータとしての前記数Aから前記乱数rをmod 2mb の下で減算する減算手段、
この減算の後、前記入力された数Rから前記数R1,R2を抽出する手段、
この抽出の後、前記Aに前記数R2をmod 2mb の下で加算する手段、
この加算の後、前記第3の記憶手段内の整数mについて、m=1か否かを判定する手段、
前記判定の結果、m=1の場合には前記加算後の数AをインデックスIとして、前記第2の記憶手段内の事前計算テーブルGから要素データG[A]を読み出す手段、
この要素データG[A]、前記数R2及び前記乱数rに基づいて、上位の被論理マスクデータx’1を、x’1=(G[A]^R2)^r の値に計算する手段、
この計算により得られた上位の被論理マスクデータx’1を、前記第3の記憶手段内の被論理マスクデータx’の最上位bビットに配置する手段、
前記判定の結果、m>1の場合には、前記第1抽出手段、前記第2抽出手段、前記第1読出手段、前記第2読出手段及び前記桁上げ伝播手段による処理を順次実行する手段、
この桁上げ伝播手段による処理の実行後、前記加算後の数Aの下位bビットの数A2をインデックスIとして、前記第2の記憶手段内の事前計算テーブルGから要素データG[A2]を読み出す手段、
この要素データG[A2]、前記数R2及び前記乱数rに基づいて、下位の被論理マスクデータx’2を、x’2=(G[A2]^R2)^r の値に計算する手段、
この計算により得られた下位の被論理マスクデータx’2を、前記第3の記憶手段内の被論理マスクデータx’の下位(k−m)bビット目に、当該下位の被論理マスクデータx’2の最下位ビットが合うように配置する手段、
この配置の後、前記第3の記憶手段内の整数mを、m=m−1と更新し、前記減算手段の処理に戻る手段、
として更に機能させるためのプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate


【公開番号】特開2010−210940(P2010−210940A)
【公開日】平成22年9月24日(2010.9.24)
【国際特許分類】
【出願番号】特願2009−56873(P2009−56873)
【出願日】平成21年3月10日(2009.3.10)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.EEPROM
【出願人】(000003078)株式会社東芝 (54,554)
【出願人】(301063496)東芝ソリューション株式会社 (1,478)
【Fターム(参考)】