JP6089664B2 - 暗号処理装置と方法並びに暗号処理プログラム - Google Patents

暗号処理装置と方法並びに暗号処理プログラム Download PDF

Info

Publication number
JP6089664B2
JP6089664B2 JP2012271543A JP2012271543A JP6089664B2 JP 6089664 B2 JP6089664 B2 JP 6089664B2 JP 2012271543 A JP2012271543 A JP 2012271543A JP 2012271543 A JP2012271543 A JP 2012271543A JP 6089664 B2 JP6089664 B2 JP 6089664B2
Authority
JP
Japan
Prior art keywords
random number
bits
bit
value
encryption
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2012271543A
Other languages
English (en)
Other versions
JP2014115579A (ja
Inventor
智保 洲崎
智保 洲崎
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP2012271543A priority Critical patent/JP6089664B2/ja
Publication of JP2014115579A publication Critical patent/JP2014115579A/ja
Application granted granted Critical
Publication of JP6089664B2 publication Critical patent/JP6089664B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

本発明は、暗号処理装置と方法並びに暗号処理プログラムに関する。
記録媒体に蓄積されたデータや通信路上を流れるデータを盗聴などの脅威から保護するための技術として暗号化がある。暗号化されたデータは、暗号化に用いた鍵を知るもののみが正しく復号することができる。
代表的な暗号アルゴリズムとして、例えばSPN(substitution permutation network)構造のブロック暗号(block cipher)方式のAES(Advanced Encryption Standard)がある。AESは、代表的な暗号解読法(例えば、差分解読法(Differential cryptanalysis)や線形解読法(Linear cryptanalysis))に対して安全である。秘密鍵の全数探索(brute force attack)よりも効率的に鍵を求める方法は知られていない。そして、秘密鍵の全数探索には膨大な時間を要することから、AESは安全である。
近年、暗号が実装された機器(暗号モジュール)において、暗号化機能が動作する際に暗号モジュールが消費する電力や、それに伴う電磁波を利用して暗号化鍵を搾取する攻撃法の脅威が指摘されている。これら副次的に得られる消費電力や電磁波に関する情報を「サイドチャネル情報」、それらを利用した攻撃は「サイドチャネル攻撃」と呼ばれる。
サイドチャネル攻撃の原理を説明する。
nビットデータdのハミングウェイトh(d)は、
h(d)∈{0,1,2,... ,n}
である。ハミングウェイトとは、データを2進数表現したときの1の数である。例えば、n=8の場合、
h(00000000) = 0、
h(00001000) = 1、
h(00100011) = 3、
h(11111111) = 8
となる。
解析対象の暗号モジュールがハミングウェイトモデルに基づくならば、データのハミングウェイトと消費電力、漏洩電磁波は正比例すると仮定する。ハミングウェイトモデルに基づく、暗号アルゴリズムの解析手順(関連技術)について以下に説明する。図1は、ブロック長が2nビットのrラウンドFeistel型暗号(関連技術)を説明する図である。
2nビットの平文Pはnビットのデータx 、x に分割される。第iラウンド(i=1,2,...,r-1)の処理は式(1)及び式(2)のとおりである。
=xi−1 ・・・(1)
Figure 0006089664
なお、
Figure 0006089664
はビット毎の排他的論理和(bitwise XOR)の演算子である。
最終のラウンド(第rラウンド)ではデータの左右のクロスを行わない。x 、x Rは式(3)及び式(4)のとおりである。
=xr−1 ・・・(3)
Figure 0006089664
とx を連結した2nビットデータx ||x が暗号文Cとなる。なお、||は連結(concatenation)演算子である。
図2は、図1のF関数10の構成例(関連技術)を例示した図である。図2を参照すると、データx と鍵Kを排他的論理和演算した結果を、非線形処理11で演算Sを施し、出力データzが生成される。つまり、
=S(x ^K) ・・・(5)
である。なお、^はC言語等で用いられる、ビット毎の排他的論理和(bitwise XOR)の演算子である(以下、排他的論理和演算子として^を用いる)。
次に、サイドチャネル情報を用いて最終ラウンドの鍵Kr−1を求める手順を示す。解析はデータ収集フェーズと解析フェーズから成る。
データ収集フェーズでは、m個の平文P(j=0, 1, ..., m-1)を暗号化し、m個の暗号文Cを得る。このとき、オシロスコープやスペクトラムアナライザ等などの測定器(波形解析装置)を用いて暗号化処理中の消費電力を測定する。ここで、平文Pを暗号化するときに測定した電力波形をwとする。
解析フェーズとして差分電力解析(Differential Power Analysis:DPA)を例に説明する。
鍵Kr−1の候補は2通りあるので、nビットが全て0から順に仮定していく。
r−1 (=x )は暗号文Cより既知であるから、鍵Kr−1を仮定することによりF関数の出力データzを計算することができる。
ここで、zの特定の1ビットに注目し、当該ビットが0になった暗号文に対応する波形データと、当該ビットが1になった暗号文に対応する波形データとに分類する。当該ビットの値が0として分類された波形の集合をW、当該ビットの値が1として分類された波形の集合をWとする。
次にWとWのそれぞれについて消費電力値の平均W0avg、W1avgを計算する。
ハミングウェイトモデルに基づくならば、zの計算が実行された時刻のWよりもWの消費電力が大きくなる(残りのn−1ビットはノイズ成分となるが、多数の波形の平均をとることで平準化されると考える)。このため、zの特定の1ビットが0、1となった暗号文の波形集合への分類が正しく行われていれば、W1avgからW0avgを引くと顕著に差が現れる(図9(B)参照)。
しかし、鍵Kr−1の仮定が誤っている場合、正しく分類されない(W(W)にはビット値が1(0)となる波形が混在する)。このため、W0avgとW1avgの間に差が見られなくなる(図9(A)参照)。
よって、平均波形のピーク値を調べることにより、鍵の仮定が正しいか否かを区別することができる。
一方、サイドチャネル攻撃に対する耐タンパ(tamper resistant)技術の一つとしてマスキング手法が挙げられる。図1の暗号化処理にマスキング手法を施した場合の動作の参考例を、図3を用いて説明する。なお、この参考例では、ソフトウェアで実装された暗号化処理を前提とする。
図3において、α、α、αは、それぞれnビットの乱数データであり、
α=α^α ・・・(6)
である。
そして、図2の非線形処理11の代わりに、非線形処理30を用いる。図3(B)に示すように、非線形処理30では、入力データとαとの排他的論理和演算結果に対して非線形処理11を行う。そして、非線形処理11の出力データとαとの排他的論理和演算結果を非線形処理30の出力データとする。
一般に、ソフトウェアによる実装の場合、非線形処理は例えば表(ルックアップテーブル)で実装される。非線形処理の入力データをnビットとすると、表は、2個のエントリを持つ。入力データが表のインデックスとなり、表の各エントリに、入力データに対する演算結果を保持する。非線形処理時には、1回の表参照で演算結果(非線形処理結果)を得ることができる。
マスキング手法では、α、αを決定するごとに、表Sを基に、新たな表S’を生成する。
暗号化処理を行う場合、まず分割された平文x 、x に対してそれぞれα、αとの排他的論理和をとる。
そして、x とαとの排他的論理和(x ^α)に対して鍵Kとの排他的論理和をとり、非線形処理30に入力する。非線形処理30の入力データは、
((x ^α)^K)=(x ^α^K) ・・・(7)
である。
図3(A)において、非線形処理30では、入力データとαとの排他的論理和をとるため、αがキャンセルされ、非線形処理11に入力されるデータは、等価的に、
(x ^K) ・・・(8)
となる。
図3(A)において、非線形処理30の出力データzは、図3(B)において、非線形処理11の出力S(x ^K)に対してαとの排他的論理和をとったものである。
=(S(x ^K)^α) ・・・(9)
図3(A)において、排他的論理和31では、
^(x ^α) ・・・(10)
が行われる。このため、αとαの排他的論理和によりαが生成される。すなわち、
(S(x ^K)^α)^(x ^α
=S(x ^K)^(α^α)^(x ^α
=S(x ^K)^α^α^α^x
=S(x ^K)^α^x ・・・(11)
式(11)のS(x ^K)^x は、図1のx に対応するため、式(11)は、
^α
と表される。
よって、第1ラウンドの出力データx は、αでマスクされた状態で生成される。
一方、
=x ^α^α=x ^α ・・・(12)
である。
式(12)のx は、図1のx Rに対応するため、式(12)は、
R^α
と表される。
このように、第(i+1)ラウンドの入力データ
はαでマスクされ、
はαでマスクされた状態となる。
最終ラウンドでのデータx 、x は、それぞれ、
r−1 ^α ・・・(13)
S(xr−1 ^Kr−1)^α^xr−1 ・・・(14)
となり、いずれもαでマスクされる。
このため、(13)、(14)のそれぞれにαと排他的論理和をとることで、x 、x は、式(15)、(16)となる。
=(xr−1 ^α)^α=xr−1 ・・・(15)
=(S(xr−1 ^Kr−1)^α^xr−1 )^α
=(S(xr−1 ^Kr−1)^xr−1 ) ・・・(16)
、x のいずれもマスクが解除され、暗号文C(=xr−1 ||x )が得られる。
このように、マスキング手法では、常に、乱数でマスクされているため、差分電力解析を適用しても、電力波形は乱数でマスクされたものになる。よって、乱数値が不明であれば、鍵仮定を行って計算した中間値と、実際の消費電力の相関が崩れるため、差分電力解析が困難になる。しかしながら、乱数値も同時に仮定すれば、差分電力解析による解析は可能となることから、乱数値を暗号化処理毎に変化させる必要がある。
なお、本件に関連して出願人が行った先行技術文献検索でサーチされた特許文献1には、暗号処理を実行する際の電力消費量を計測することで、暗号モジュールに埋め込まれている暗号鍵を解析する攻撃方法に対して安全な暗号化装置として前記鍵によって予め定められた処理がされた入力データに対して、乱数に依存して決まる予め定められた入力マスク値が加算されたランダム化入力データと前記入力マスク値とを受け付けて、前記入力マスク値の逆元である出力マスク値が、前記入力データの逆元に対して加算されたランダム化出力データを生成するランダム化8ビット逆元計算部を備えており、生成された当該ランダム化出力データから暗号文を生成する構成が開示されている。また差分電力解析(DPA)に対して安全な暗号化装置として特許文献2には暗号化装置は、乱数を発生する乱数発生器手段と、乱数に従ってq個の固定値の中の1つを選択する第1の選択器と、乱数に従ってq組の固定テーブルの中の1組を選択する選択器と、を備え、排他的論理和手段は、固定値と鍵の排他的論理和と入力の排他的論理和をとり、非線形変換手段は、1組の固定テーブルに従って非線形変換を行う構成が開示されている。特許文献3には、DPAまたはEMA(Electro-Magnetic Analysis)タイプの攻撃に対抗するための暗号回路として特許文献3には、暗号アルゴリズムを実行するための関数鍵kcを含む暗号回路であって、前記回路はkcとは別の前記回路のそれぞれの例に特有の、回路のサイドチャネルを利用した攻撃から回路を保護することを可能とする第2の鍵kiを含む構成が開示されている。
特再公表WO2008−146482号公報 特開2002−366029号公報 特表2002−516094号公報
以下に関連技術の分析を与える。
上記したように、ソフトウェア実装された暗号モジュールをサイドチャネル攻撃の脅威から保護するためには、マスキング手法が有効である。しかしながら、マスクに用いる乱数値を暗号化処理毎に変更しなければならない。乱数値を変更すると、非線形処理結果を保持している表を乱数に応じて生成する必要がある。この表の生成時間が、暗号化処理時間の増加原因となり、パフォーマンスの低下に繋がる。
なお、単一の表を用いる暗号アルゴリズムであっても、表参照毎に、マスク値が変わる場合、マスク値毎に、表を持つ必要がある。このため、メモリ領域が増加する。
本発明は、上記課題を解決するために創案されたものであって、その目的は、暗号化処理の演算時間、演算コストの増大を抑制し、且つサイドチャネル攻撃等に対する耐性を向上させる装置、方法、プログラムを提供することにある。
本発明によれば、参照される要素の値を出力する表の各要素に、共通鍵暗号方式の暗号化処理に関わる第1のビット数の値に、乱数生成手段で生成された第2のビット数の乱数を連結した値を設定する表生成手段と、
第2のビット数の乱数を生成する前記乱数生成手段と、
第1のビット数の平文データに、前記乱数生成手段で生成された第2のビット数の乱数を連結した値を生成する乱数連結手段と、
前記表の基準アドレスを指すポインタを更新するポインタ更新手段と、
前記更新されたポインタを基準とし、前記第1のビット数のデータと第2のビット数の乱数との連結値から計算されるアドレスにて前記表を参照する処理を含む暗号化処理を行う暗号化手段と、
前記暗号化手段の出力から乱数を除去する乱数削除手段と、
を備える暗号処理装置が提供される。
本発明によれば、参照される要素の値を出力する表を記憶する記憶装置を備えたデータ処理装置による暗号処理方法であって、
表作成処理では、前記表の各要素に、共通鍵暗号方式の暗号化処理に関わる第1のビット数の値に、乱数生成処理で生成された第2のビット数の前記乱数を連結した値を設定し、
乱数連結処理では、第1のビット数の平文データに、前記乱数生成処理で生成された第2のビット数の乱数を連結した値を生成し、
ポインタ更新処理では、前記表の基準アドレスを指すポインタを更新し、
暗号化処理では、前記更新されたポインタを基準とし、第1のビット数のデータと第2のビット数の乱数との連結値から求まるアドレスで前記表を参照する処理を含む暗号化処理を行い、
乱数削除処理では、前記暗号化処理の出力から乱数を除去する、暗号処理方法が提供される。
本発明によれば、参照される要素の値を出力する表を記憶する記憶装置を備えたコンピュータに、
前記表の各要素に、共通鍵暗号方式の暗号化処理に関わる第1のビット数の値に、乱数生成処理で生成された第2のビット数の前記乱数を連結した値を設定する表生成処理と、
前記第2のビット数の前記乱数を生成する前記乱数生成処理と、
第1のビット数の平文データに、前記乱数生成処理で生成された第2のビット数の乱数を連結した値を生成する乱数連結処理と、
前記表の基準アドレスを指すポインタを更新するポインタ更新処理と、
前記更新されたポインタを基準とし、第1のビット数のデータと第2のビット数の乱数との連結値から求まるアドレスで前記表を参照する処理を含む暗号化処理を行う暗号化処理と、
前記暗号化処理の出力から乱数を除去する乱数削除処理と、
を実行させるプログラムが提供される。本発明によれば、該プログラムを記録した記録媒体(半導体メモリ、あるいは磁気/光ディスク等)が提供される。
本発明によれば、暗号化の演算時間、演算コストの増大を抑制し、サイドチャネル攻撃等に対する耐性を向上させることができる。
Feistel型暗号の一例を示す図である。 図1のF関数の構造を説明する図である。 図1に対するマスキング手法の適用例を説明する図である。 本発明の一実施形態の暗号処理装置の構成例を示す図である。 暗号化手段の構成例を示す図である。 図1に対する本発明の適用例を説明する図である。 暗号オリジナルの表と乱数を付与した表の例を示した図である。 本発明の一実施形態の処理手順をフローチャートにて示す図である。 (A)は、差分電力解析を行った際の鍵の推定が誤っている場合、(B)は正しい場合の平均波形の例を説明する図である。
以下、本発明の実施形態について図面を参照して詳細に説明する。本発明によれば、乱数生成手段で生成した乱数と平文を連結したデータに暗号化処理を施し、その後乱数を削除する構成としたものである。
本発明は、以下に説明するように、データの通信や蓄積の際にデータを秘匿するための共通鍵ブロック暗号のサイドチャネル攻撃の耐タンパに適用して好適とされる。
本発明の形態によれば、参照される要素の値を出力する表(S’)の各要素に、共通鍵暗号方式の暗号化処理に関わる第1のビット数(nビット)の値に、乱数生成手段で生成された第2のビット数(sビット)の前記乱数を連結した値を設定する表生成手段(図5の71)と、
第2のビット数の乱数を生成する前記乱数生成手段(図5の70)と、
第1のビット数の平文データに、前記乱数生成手段(図5の70)で生成された第2のビット数の乱数を連結した値を生成する乱数連結手段(図5の72)と、
第1のビット数の暗号データと第2のビット数の前記乱数との連結値をインデックスとして前記表(S’)の参照が行えるように、前記表(S’)の基準アドレス(例えば先頭アドレス)を指すポインタ(S'addr)を更新するポインタ更新手段(図5の74)と、
前記更新されたポインタ(S'addr)を基準とし、前記第1のビット数の暗号データと第2のビット数の乱数との連結値をインデックスとして計算されるアドレスにて前記表を参照する処理を含む暗号化処理を行う暗号化手段(図5の73)と、
前記暗号化手段の出力から乱数を除去する乱数削除手段(図5の75)と、を備える。
前記第1のビット数をnとし、前記表(S’)は、ビット幅m(ただし、1≦n<m)の要素を2個備え、第2のビット数をs(ただし、1≦s<(m−n))とする。前記表生成手段(図5の71)は、前記表(S’)のmビットの各要素において、下位nビットに、暗号化処理に関わる値を設定し、前記下位nビットよりも上位ビットにsビットの乱数(図7(B)のα,i=0〜2−1)を設定する。前記乱数連結手段(図5の72)は、nビットの平文データの上位ビットに、sビットの乱数を連結した値を生成する。前記ポインタ更新手段(図5の74)は、例えば、下位nビットのデータと上位sビットの乱数との連結値(y)の下位nビット0とする演算結果(y∩1(m−n)||0(n))を、前記表(S’)の要素のアドレスに換算した値(y<<t;<<tはtビット左シフト演算、tは表1要素当りのバイト数)を、前記表の先頭アドレスを指すポインタから減算した値を、更新後のポインタ(S’addr)とする。前記暗号化手段(図5の73)は、前記更新後のポインタ(S’addr)に、下位nビットのデータと上位sビットの乱数との連結値(y)からなるインデックスをアドレスに換算した値(y<<t)を加算したアドレスにて、前記表(S’)の要素を参照し、前記表から出力されたmビットの要素から、暗号化処理に関わるnビットの値とsビットの乱数とを連結した値を取得する。前記暗号化処理で扱う暗号は、共通鍵方式のブロック暗号である。
前記暗号化手段(図5の73)は、前記表を参照する処理を含むラウンド処理を予め定められた回数行い、前記乱数削除手段(図5の75)は、最終のラウンド処理の出力から乱数を削除する。前記乱数連結手段(図5の72)は、入力された平文から、nビットの第1、第2の平文データ(x 、x )の上位ビットにsビットの第1、第2の乱数(β、β)を連結したmビットの第1、第2のデータ(β||x 、β||x R)をそれぞれ生成する。特に制限されないが、暗号化手段(図5の73)においては、前記第1のデータ(β||x )を、下位nビットのラウンド鍵(K)と、上位(m−n)ビット0とを連結した値(0(m-n)||K)で排他的論理和演算を施す第1の排他的論理和演算部と、前記排他的論理和演算結果を、前記インデックスとし、前記更新ポインタ(S’addr)を用いて、前記表(S’)を参照する非線形処理部(301)と、前記非線形処理部(301)のmビットの出力(z)と、前記第2のデータ(β||x R)との排他的論理和演算をとる第2の排他的論理和演算部を備え、前記第1データと、前記第2の排他的論理和演算部の出力をクロスさせて、次のラウンドの第1、第2のデータとする構成としてもよい。前記乱数削除手段(図5の75)は、最終段のラウンドから出力されるβ||x の乱数β、βr+1||x Rの乱数βr+1を削除する。なお、前記表(S’)を参照するインデックスは、データとラウンド鍵との排他的論理和(鍵加算:Add-Round-Key)に制限されるものでないことは勿論である。例えばAESの各ラウンドのミックスカラム(Mix-Columns)等の処理において事前計算結果を表に実装する構成等にも適用可能である。
なお、上記特許文献1−3等には、乱数生成手段で生成した乱数と平文を連結したデータに暗号化処理を施し、その後乱数を削除することで、暗号化処理の演算コストの増大を抑制する構成は開示されていない。
図4を参照すると、一実施形態の暗号化装置1は、入出力装置2、CPU(Central Processing Unit)3、RAM(Random Access Memory)4、ROM(Read Only Memory)5がバス6で接続された構成をとる。ROM5には、暗号化処理プログラム7が格納されている。暗号化処理プログラムが実行される際には、ROM5から暗号化処理プログラムが読み出されてRAM4にロードされる。CPU3は、RAM4からプログラムを読み込み(フェッチ)し、解釈、実行することで、暗号化処理が実行される。ただし、暗号化処理プログラムは、入出力装置2を介して外部からロードされ、RAM4に展開される構成としてもよい。暗号化鍵は、ROM5に格納しておく形態としてもよいし、あるいは入出力装置2より外部から入力する構成としてもよい。ROM5は、電気的に書き換え消去可能な不揮発性メモリ(ROM)であってもよい。あるいは、暗号化処理プログラム7はHDD(Hard Disk Drive)等の不揮発性の補助記憶装置等に記憶してもよいことは勿論である。
耐タンパ機能を施した暗号化処理プログラムの動作について以下に説明する。図5を参照すると、暗号化処理プログラム7は、乱数生成手段70、表生成手段71、乱数連結手段72、暗号化手段73、ポインタ更新手段74、乱数削除手段75にモジュール分割(あるいは機能分割)される。各手段の機能・動作について説明する。
乱数生成手段70はsビット(1≦s<m−n)の乱数を生成する。
表生成手段71は、乱数生成手段70で生成したsビット(例えばs=22)の乱数を用いて、暗号化手段73で参照する表の更新を行い、表S’を作成する。表S’は、暗号化装置1のRAM4に格納される。
具体例として、図7(A)の表Sを用いて説明する。図7(A)では、m=32、n=8として説明を行う。表Sは、256(=2)個の要素で構成され、1つの要素は、32ビットである。各要素の下位8ビットには、暗号化処理に関する値(図7は、16進数表記(1ヘキサデジット=4ビット:0〜F)が設定されており、上位24ビットはオール0である。なお、下位8ビットと上位24ビットの間の記号||は連結(concatenation)を表しており、上位24ビットと下位8ビットとを連結して32ビットとなる。
多くの暗号アルゴリズムでは、何がしかの演算処理について事前計算を行い演算結果を表形式で保持する形態(ルックアップテーブル(Look Up Table: LUT)方式)がとられる。暗号化処理時に、演算前データを、表のインデックスとして、表参照を行うことで、演算結果を得る。
表生成手段71は、乱数生成手段70で生成したsビットの乱数を、表の各要素の0が設定されている位置(下位nビットよりも上位の(m−n)の領域)に設定する。なお、設定する乱数は、表の要素ごとに異なっていてもよいし、全て同一であってもよい。図7(B)の表S’は、図7(A)の表Sに対して、乱数生成手段70で生成された乱数α(i∈{0, 1, 2, ..., 255})を設定した後の表である。
乱数連結手段72には、暗号化する平文データと、乱数生成手段70で生成した乱数の2つが入力される。b×nビットの平文は、b個のnビット平文データに分割され、各々が、mビット変数(m>n、m=24、n=8)に保持される。mビット変数の下位nビットに平文が設定され、上位ビット(m−n)の領域にsビットの乱数が設定される。
暗号化手段73とポインタ更新手段74の処理について、図6を参照して説明する。図6は、図1と図2に示した暗号化処理を耐タンパ化したものに相当する。
図6において、β||x 、β||x は、乱数連結手段72によって分割されたnビット平文x 、x の上位ビットに、それぞれ、sビットの乱数β、βが連結されたデータである。
β||x は、mビットの鍵0(m−n)||Kと排他的論理和演算され、演算結果が、非線形変換処理301によって変換される。なお、鍵0(m−n)||Kの上位(m−n)ビットは0、下位nビットがKとなる。
非線形変換処理301は、表生成手段71で生成された表S’を参照することにより、ルックアップテーブル(LUT)方式で、非線形処理を実行する。
一般的な表参照の手順を示す。表は、メモリ上に連続的に配置されたデータであり、表の先頭アドレスのデータをポイントするポインタ(アドレスポインタ)Saddrとして保持する。表のインデックスxは、先頭アドレスからの変位となるため、ポインタにインデックスを加算し、当該データが保存されているメモリアドレスを得る。より正確には、表の要素が2バイトのとき、先頭アドレスからの変位xは(x<<t)バイトとなる。<<は左シフト演算子(bit-wise left shift operator)である。例えば図7において要素は、32ビット=4バイト=22=2バイトから、t=2となる、インデクスx=2("00000010")に対して左2ビットシフトした(2<<2)は、8(="00001000")となる。インデクスx=2に対して表の先頭アドレスから8バイト目の4バイト(1要素)がアクセスされる。したがって、インデックスxで参照される表の要素のアクセスアドレスXaddrは、式(17)で計算される。
addr=Saddr+(x<<t) ・・・(17)
ここで、表のエントリ数(要素の総数)が2個であれば、インデックスxは0≦x≦2−1である。図7のm=32、n=8、t=2の場合、XaddrはSaddr〜Saddr+1020となる。なお、表アクセスの基準となるアドレスを表の先頭アドレスでなく、表の最終要素(インデックス=2−1)をポイントするアドレス(Saddr)とした場合、インデックスx(0≦x≦2−1)に対してアドレスXaddrは、
addr=Saddr−{(2−1−x)<<t)} ・・・(17)’
で与えられる。
しかしながら、本実施形態のように、インデックスの上位ビットに0以外の値が設定されている場合には、上記手順では、正しく要素のアドレスを計算することができない。
図6において、β||x と鍵0(m−n)||Kとの排他的論理和演算結果β||(x ^K)の上位(m−n)ビットには、sビットの乱数β(0以外の値)が設定されている。β||(x ^K)の下位nビットは、暗号化データx ^Kである。このβ||(x ^K)が、非線形変換処理301に入力される。
そこで、ポインタ更新手段74は、(乱数||暗号化データ)、例えば(β||(x ^K))から、表S’の先頭アドレスのポインタを変更(更新)する。
ポインタ更新手段74は、表参照を行う際のインデックスとなる変数y(上記β||(x ^K)のように、上位ビットに乱数、下位nビットは暗号化データ)を用いて、表参照が行えるように、上位ビットの乱数を残し下位nビットを0とした値を、tビット(ただし、tは表1要素のバイト数)左シフトしたデータを生成し、これを表の先頭アドレスを示すポインタSaddrから減算した値を新たな先頭アドレスポインタとすることで、変数y(上記β||(x ^K)を用いて、暗号化データx ^Kに対応する表の各要素(0≦インデックス≦(2−1))がアクセスされる。
すなわち、式(18)によってSaddrを更新し、ポインタS’addrを生成する。
S’addr=Saddr−((y∩1(m−n)||0(n))<<t) ・・・(18)
式(18)において、∩はビット毎のAND演算を行う演算子である。1(m−n)||0(n)の0(n)は下位nビットの0データ、1(m−n)は上位(m−n)ビットの1データである。インデックスとなるmビットの変数y(上位(m−n)ビットの領域に配置されたsビットの乱数と下位nビットの暗号化データの連結)と、mビット情報1(m−n)||0(n)とのビット毎のAND演算をとった結果(上位(m−n)ビットの領域にはsビットの乱数、下位nビットは0)を、tビット左シフトした値をポインタSaddrから減算することで、ポインタS’addrを求める。
非線形変換処理301において、y=β||(x ^K)で表S’をアクセスする場合、インデックスyで、参照される表の要素のアクセスアドレスXaddrは以下で計算される。
addr=S’addr+(y<<t) ・・・(19)
暗号化手段73において、表参照を行うたびに、ポインタ更新手段74を呼び出し、変数に応じたポインタS’addrを生成する。S’addrを用いて表S’(図7(B)参照)の参照を行い、当該要素(α||暗号化処理の値)がzとなる。
よって、第1ラウンドの出力β||x は、
^(β||x ) ・・・(20)
で計算される。
このとき、zの上位(m−n)ビットの乱数αと、(β||x )の上位(m−n)ビットの乱数βとの排他的論理和がβとなる。
β=β^α (0≦i≦255) ・・・(21)
以上の処理を、所定ラウンド数、繰り返す。
乱数削除手段75は、最終ラウンド(第rラウンド)の出力データ:
β||x
βr+1||x
からそれぞれ乱数βr、βr+1を除去し(下位nビット:x 、x を抽出)、暗号文C=x ||x を生成する。
図8は、本実施の形態の処理手順を表したものである。
乱数生成手段70は、表に埋め込むための乱数を生成する(ステップS1)。
表生成手段71は、乱数生成手段70で生成された乱数を用いて表に乱数を埋め込む(ステップS2)。
乱数生成手段70は、暗号化データ用の乱数を生成する(ステップS3)。
乱数連結手段72は、平文を分割し、分割した各々に対して乱数を連結する(ステップS4)。
これより、暗号化手段73によりラウンド処理が行われる。
なお、暗号化手段73は、暗号アルゴリズム固有の処理であるため、説明は省略する。
暗号固有処理1は、例えば鍵データと暗号化データの排他的論理和演算等である(ステップS5)。
表参照処理(ステップS7)の前に、ポインタ更新処理(ステップS6)を行う。これは、表参照を行う回数分実施する。
暗号固有処理2(ステップS8)は、例えば、複数の表参照の結果どうしを混ぜ合わせる線形変換処理(具体的には、AESのMixColumns処理)等である。
暗号アルゴリズムで決定されるラウンド数(所定回数)、ラウンド処理が繰り返されていなければ、S5へ戻り、ラウンド処理を繰り返す。所定回数の繰り返しが行われていれば、S10へ分岐する。
乱数削除手段75は、データから乱数を取り除き、データを結合したものを暗号文とする(ステップS10)。
関連技術のマスキング手法では、表の再構成の演算コストが大きい。図3の対策済非線形処理30を生成するためには、式(22)の演算を行う必要がある。なお、for文は、C言語の書法によるfor-loopであり、i=0からi=2−1まで処理S’[i]=S[i^α]^αを繰り返す。なお、^はC言語における排他的論理和演算子、powは累乗関数であり、pow(2,n)は2nである。i++は、iを1つ増加(increment)を意味する。
for(i=0;i<pow(2,n);i++) S’[i]=S[i^α1]^α3 ・・・(22)
この一連の処理では、
排他的論理和を2回、
S[]のロードを1回、
S’[]へのストアを1回実行する。
一方、本実施形態による表生成処理(図7)では、
S’[]へのストアの1回で済む(乱数αをストア命令のサイズに一致させた場合)。
表生成処理は、1ブロック分の暗号化処理毎に実施する必要があるため、処理コストが少ないほど耐タンパ機能がないものからの処理性能の低下が少ない、つまり高速な処理が行えるというメリットがある。
また、関連技術では、αが異なると、異なる表S’になってしまう。表Sが1種類であっても、複数回参照を行う暗号アルゴリズムであれば、その数分の表S’を持たねばならず、使用メモリ領域が増加するという問題もある。例えば、AESのSubBytes処理では、16回の表参照を行うため、最大16倍の表を持つことになる。
一方、実施形態の表S’は、連結する乱数の制限はないため、表S’の増加はない。このため、メモリコストの面でもメリットがある。
なお、上記の特許文献の各開示を、本書に引用をもって繰り込むものとする。本発明の全開示(請求の範囲を含む)の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の請求の範囲の枠内において種々の開示要素(各請求項の各要素、各実施例の各要素、各図面の各要素等を含む)の多様な組み合わせないし選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
1 暗号化装置
2 入出力装置
3 CPU
4 RAM
5 ROM
6 バス
7 暗号処理プログラム
10 F関数
11 非線形処理S
30 乱数マスクをかけた非線形処理S
31 排他的論理和
70 乱数生成手段
71 表生成手段
72 乱数連結手段
73 暗号化手段
74 ポインタ更新手段
75 乱数削除手段
301 非線形変換処理

Claims (9)

  1. 参照される要素の値を出力する表の各要素に、共通鍵暗号方式の暗号化処理に関わる第1のビット数の値に、乱数生成手段で生成された第2のビット数の乱数を連結した値を設定する表生成手段と、
    第2のビット数の乱数を生成する前記乱数生成手段と、
    第1のビット数の平文データに、前記乱数生成手段で生成された第2のビット数の乱数を連結した値を生成する乱数連結手段と、
    前記表参照用の基準アドレスを指すポインタを更新するポインタ更新手段と、
    前記更新されたポインタを基準とし、第1のビット数のデータと第2のビット数の乱数との連結値から計算されるアドレスにて前記表を参照する処理を含む暗号化手段と、
    前記暗号化手段の出力から乱数を除去する乱数削除手段と、
    を備える、ことを特徴とする暗号処理装置。
  2. 前記第1のビット数をnとし、
    前記表は、ビット幅m(ただし、1≦n<m)の要素を2個備え、
    前記第2のビット数をs(ただし、1≦s<(m−n))とし、
    前記表生成手段は、前記表のmビットの各要素において、下位nビットに、前記暗号化処理に関わる値を設定し、前記下位nビットよりも上位ビットに前記乱数生成手段で生成されたsビットの乱数を設定し、
    前記乱数連結手段は、nビットの平文データを下位nビットとし、その上位ビットに前記乱数生成手段で生成されたsビットの乱数を連結した値を生成し、
    前記ポインタ更新手段は、下位nビットのデータと上位sビットの前記乱数との連結値からなるインデックスの前記下位nビットを0とした値を、前記表の要素のアドレスに換算した値を、前記表の先頭アドレスを指すポインタから減算した値を、更新後のポインタとし、
    前記暗号化手段は、前記更新後のポインタに、下位nビットのデータと上位sビットの乱数との連結値からなる前記インデックスのアドレス換算値を加算したアドレスにて、前記表の要素を参照し、前記表から出力されるmビットの要素から、暗号化処理に関わるnビットの値とsビットの前記乱数とを連結した値を取得する、ことを特徴とする請求項1記載の暗号処理装置。
  3. 前記暗号化手段は、前記表を参照する処理を含むラウンド処理を予め定められた回数行い、
    前記乱数削除手段は、最終のラウンド処理の出力から乱数を削除する、ことを特徴とする請求項1又は2記載の暗号処理装置。
  4. 参照される要素の値を出力する表を少なくとも記憶する記憶装置とプロセッサを備えたデータ処理装置による暗号処理方法であって、
    前記プロセッサによる表作成処理では、前記記憶装置にアクセスし、前記表の各要素に、共通鍵暗号方式の暗号化処理に関わる第1のビット数の値に、前記プロセッサによる乱数生成処理で生成された第2のビット数の乱数を連結した値を設定して前記記憶装置に記憶された前記表を更新し
    前記プロセッサによる乱数連結処理では、第1のビット数の平文データと、前記乱数生成処理で生成された第2のビット数の乱数を入力し、前記第1のビット数の平文データに、前記乱数生成処理で生成された第2のビット数の乱数を連結した値を生成して前記記憶装置に保持し
    前記プロセッサによるポインタ更新処理では、前記記憶装置に記憶される前記表参照用の基準アドレスを指すポインタを更新し、
    前記プロセッサによる暗号化処理では、前記更新されたポインタを基準とし、前記第1のビット数のデータと第2のビット数の乱数との連結値から求まるアドレスにて前記記憶装置に記憶された前記表を参照する処理を行い、
    前記プロセッサによる乱数削除処理では、前記暗号化処理の出力を受け、前記暗号化処理の出力から乱数を除去する、
    ことを特徴とする暗号処理方法。
  5. 前記第1のビット数をnとし、
    前記記憶装置に記憶された前記表は、ビット幅m(ただし、1≦n<m)の要素を2個備え、
    前記第2のビット数をs(ただし、1≦s<(m−n))とし、
    前記表生成処理では、前記記憶装置に記憶された前記表のmビットの各要素において、下位nビットに、前記暗号化処理に関わる値を設定し、前記下位nビットよりも上位ビットにsビットの乱数を設定し、
    前記乱数連結処理では、入力されたnビットの平文データを下位nビットとし、その上位ビットにsビットの乱数を連結した値を生成して前記記憶装置に保持し
    前記ポインタ更新処理では、下位nビットのデータと上位sビットの前記乱数との連結値からなるインデックスの前記下位nビット0とした値を、前記記憶装置に記憶された前記表の要素のアドレスに換算した値を、前記表の先頭アドレスを指すポインタから減算した値を、更新後のポインタとし、
    前記暗号化処理では、前記更新後のポインタに、下位nビットのデータと上位sビットの乱数との連結値からなるインデックスのアドレス換算値を加算したアドレスにて、前記記憶装置に記憶された前記表の要素を参照し、前記表から出力されるmビットの要素から、暗号化処理に関わるnビットの値とsビットの前記乱数とを連結した値を取得する、ことを特徴とする請求項4記載の暗号処理方法。
  6. 前記暗号化処理では、前記記憶装置に記憶された前記表を参照する処理を含むラウンド処理を予め定められた回数行い、
    前記乱数削除処理では、前記暗号化処理による最終のラウンドの出力を受け、前記暗号化処理による最終のラウンドの出力から乱数を削除する、ことを特徴とする請求項5記載の暗号処理方法。
  7. 参照される要素の値を出力する表を少なくとも記憶する記憶装置を備えたコンピュータに、
    前記記憶装置にアクセスし、前記表の各要素に、共通鍵暗号方式の暗号化処理に関わる第1のビット数の値に、乱数生成処理で生成された第2のビット数の前記乱数を連結した値を設定し前記記憶装置に記憶された前記表を更新する表生成処理と、
    第2のビット数の前記乱数を生成し前記記憶装置に保持する前記乱数生成処理と、
    第1のビット数の平文データに、前記乱数生成処理で生成された第2のビット数の乱数を入力し、前記第1のビット数の平文データに、前記乱数生成処理で生成された第2のビット数の乱数を連結した値を生成して前記記憶装置に保持する乱数連結処理と、
    前記記憶装置に記憶された前記表の基準アドレスを指すポインタを更新するポインタ更新処理と、
    前記更新されたポインタを基準とし、第1のビット数のデータと第2のビット数の乱数との連結値から求まるアドレスで、前記記憶装置に記憶された前記表を参照する処理を含む暗号化処理と、
    前記暗号化処理の出力を受け、前記暗号化処理の出力から乱数を除去する乱数削除処理と、
    を実行させるプログラム。
  8. 前記第1のビット数をnとし、
    前記表は、ビット幅m(ただし、1≦n<m)の要素を2個備え、
    前記第2のビット数をs(ただし、1≦s<(m−n))とし、
    前記表生成処理では、前記記憶装置に記憶された前記表のmビットの各要素において、下位nビットに、前記暗号化処理に関わる値を設定し、前記下位nビットよりも上位ビットにsビットの乱数を設定し、
    前記乱数連結処理では、入力されたnビットの平文データを下位nビットとし、その上位ビットにsビットの乱数を連結した値を生成して前記記憶装置に保持し
    前記ポインタ更新処理では、下位nビットのデータと上位sビットの前記乱数との連結値からなるインデックスの前記下位nビット0とした値を、前記記憶装置に記憶された前記表の要素のアドレスに換算した値を、前記表の先頭アドレスを指すポインタから減算した値を、更新後のポインタとし、
    前記暗号化処理では、前記更新後のポインタに、下位nビットのデータと上位sビットの乱数との連結値からなるインデックスのアドレス換算値を加算したアドレスにて、前記記憶装置に記憶された前記表の要素を参照し、前記表から出力されるmビットの要素から、暗号化処理に関わるnビットの値とsビットの前記乱数とを連結した値を取得する、ことを特徴とする請求項7記載のプログラム。
  9. 前記暗号化処理では、前記記憶装置に記憶された前記表を参照する処理を含むラウンド処理を予め定められた回数行い、
    前記乱数削除処理では、前記暗号化処理から最終のラウンドの出力を受け、前記最終のラウンドの出力から乱数を削除する、ことを特徴とする請求項8記載のプログラム。
JP2012271543A 2012-12-12 2012-12-12 暗号処理装置と方法並びに暗号処理プログラム Active JP6089664B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012271543A JP6089664B2 (ja) 2012-12-12 2012-12-12 暗号処理装置と方法並びに暗号処理プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012271543A JP6089664B2 (ja) 2012-12-12 2012-12-12 暗号処理装置と方法並びに暗号処理プログラム

Publications (2)

Publication Number Publication Date
JP2014115579A JP2014115579A (ja) 2014-06-26
JP6089664B2 true JP6089664B2 (ja) 2017-03-08

Family

ID=51171595

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012271543A Active JP6089664B2 (ja) 2012-12-12 2012-12-12 暗号処理装置と方法並びに暗号処理プログラム

Country Status (1)

Country Link
JP (1) JP6089664B2 (ja)

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7142670B2 (en) * 2001-08-14 2006-11-28 International Business Machines Corporation Space-efficient, side-channel attack resistant table lookups
GB0211812D0 (en) * 2002-05-23 2002-07-03 Koninkl Philips Electronics Nv S-box encryption in block cipher implementations
US7720225B2 (en) * 2006-03-07 2010-05-18 Research In Motion Limited Table splitting for cryptographic processes
CN102484581B (zh) * 2009-06-19 2015-07-01 耶德托公司 使用中间数据更改的具有可配置密钥的白盒密码***

Also Published As

Publication number Publication date
JP2014115579A (ja) 2014-06-26

Similar Documents

Publication Publication Date Title
JP5229315B2 (ja) 共通鍵暗号機能を搭載した暗号化装置及び組込装置
JP5055993B2 (ja) 暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラム
JP5242560B2 (ja) 暗号化装置、復号化装置、暗号化方法及び集積回路
Benvenuto Galois field in cryptography
JP5402632B2 (ja) 共通鍵ブロック暗号化装置、共通鍵ブロック暗号化方法及びプログラム
JP4905000B2 (ja) 暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラム
JP4828526B2 (ja) 暗号計算を実行するための方法及び装置
Jaffe A first-order DPA attack against AES in counter mode with unknown initial counter
EP1833190A1 (en) Table splitting for cryptographic processes
JP2008058830A (ja) データ変換装置、およびデータ変換方法、並びにコンピュータ・プログラム
JP5612007B2 (ja) 暗号化鍵生成装置
Waqas et al. Generation of AES-like S-boxes by replacing affine matrix
JP2004258667A (ja) N個のデジットを含むワードの擬似ランダム置換の生成方法
US9391770B2 (en) Method of cryption
KR101506499B1 (ko) 마스킹이 적용된 seed를 이용한 암호화 방법
JP5202350B2 (ja) 暗号処理装置及び暗号処理方法及び暗号処理プログラム
CN106656500A (zh) 加密装置及方法
JP2010044251A (ja) ハッシュ値生成装置、プログラム及びハッシュ値生成方法
JP6136325B2 (ja) 暗号処理装置、暗号処理方法およびプログラム
CN107493164B (zh) 一种基于混沌***的des加密方法和***
JP6089664B2 (ja) 暗号処理装置と方法並びに暗号処理プログラム
CN110417540B (zh) 一种抗差分功耗分析的信息加密方法
RU2188513C2 (ru) Способ криптографического преобразования l-битовых входных блоков цифровых данных в l-битовые выходные блоки
US20100128870A1 (en) Pseudo-random number generation device, program, and method for stream encoding
JP2006054568A (ja) 暗号化装置、復号化装置、および方法、並びにコンピュータ・プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20151106

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160926

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20161004

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20161205

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20170110

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170123

R150 Certificate of patent or registration of utility model

Ref document number: 6089664

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150