JP2013255157A - データ処理装置及び検証処理プログラム - Google Patents

データ処理装置及び検証処理プログラム Download PDF

Info

Publication number
JP2013255157A
JP2013255157A JP2012130619A JP2012130619A JP2013255157A JP 2013255157 A JP2013255157 A JP 2013255157A JP 2012130619 A JP2012130619 A JP 2012130619A JP 2012130619 A JP2012130619 A JP 2012130619A JP 2013255157 A JP2013255157 A JP 2013255157A
Authority
JP
Japan
Prior art keywords
comparison
bytes
result
information
divided
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.)
Pending
Application number
JP2012130619A
Other languages
English (en)
Inventor
Junko Nakajima
純子 中嶋
Vuillaume Camille
カミーユ ヴィオム
Yuji Asano
勇二 浅野
Takashi Endo
隆 遠藤
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.)
Renesas Electronics Corp
Original Assignee
Renesas Electronics 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 Renesas Electronics Corp filed Critical Renesas Electronics Corp
Priority to JP2012130619A priority Critical patent/JP2013255157A/ja
Publication of JP2013255157A publication Critical patent/JP2013255157A/ja
Pending legal-status Critical Current

Links

Images

Abstract

【課題】情報が改竄されたことをその情報の秘匿性を保つように元の情報と比較する技術において、比較対象の一致又は不一致に拘わらずハミングウェイトの相違や処理ステップ数の違いが顕著になり難いものとする。
【解決手段】暗号化処理部にロードされた暗号化処理情報が改竄されたか否かを前記記憶部に格納されている暗号化処理情報との比較によって判別する検証処理部を有する。前記検証処理部は、比較対象とされる夫々の暗号化処理情報を所定バイト数単位に分割し、分割部分の前記所定バイト数単位の比較順序を可変にして対応する分割部分同士の比較を全部行い、その比較結果を用いて前記比較対象が一致するか否かを判別する。
【選択図】図1

Description

本発明は、情報が改竄されたことをその情報の秘匿性を保つように元の情報と比較する技術に関し、例えば、平文を秘密鍵などを用いて暗号化復号するセキュアマイクロコンピュータなどのデータ処理装置、さらには、セキュアマイクロコンピュータが実行する比較処理プログラムなどに適用して有効な技術に関する。
現在使用されている暗号方式は、暗号学的な解析手法に対して、計算量的に安全であるとされている。しかし、実際の暗号アルゴリズムを実装する場合、消費電流や処理時間といった、実装に依存したリークが発生する。また暗号アルゴリズムを実行するには、そのロジックへ平文や秘密鍵といった秘密情報を入力するときに、そのデータ入力および出力動作(データの移動つまりコピー)時に発生するリークも存在する。
暗号装置内のそのような動作状況を様々な物理的手段で観察することにより、秘密情報を不正に獲得しようとする攻撃方法があり、サイドチャネル攻撃(サイドチャネル攻撃、side-channel attack)と称される。具体的な攻撃方法としては、消費電力に注目した電力解析攻撃(power analysis attack)、装置から漏洩する電磁波に注目した電磁波解析攻撃(テンペストと呼ばれることもある)などがある。
サイドチャネル攻撃に対する対策の一環として、秘密鍵や平文等の改ざんが行われているかどうかを確認する目的でデータの比較処理を要所々で行うことができる。特にこの場合の比較においても、比較演算やデータ入出力動作をセキュアに行うことが求められる。
一方、1998年にCryptography Research社のPaul Kocherらがこうしたリーク情報を用いて秘密鍵を統計的な手法を用いて推定するDPA(Differential Power Analysis)手法を提案した(非特許文献1)。この手法を用いると、従来は解析に数十年かかっていた暗号解析が、オシロスコープや市販のPCを用いて短い期間でアタックできるようになる。アタックの手順は、既知の入力もしくは出力値に対応する消費電流、電磁放射、実行時間などを多数回測定し、統計的解析をおこなうことで、秘密鍵情報を推定する。この解析手法では、リークのうちの秘密情報に依存する成分と、秘密情報に依存しないノイズとみなせる成分の比率により、アタックに必要な測定回数が変動する。秘密情報に依存する成分の比率が1/nになると、必要な測定回数は、n^2(nの二乗)倍必要となる。この秘密情報に依存する成分の比率を下げる方法のひとつとして、例えば特許文献1のように、入力パラメータを変えて同じ演算を行い、かく乱するダミー演算を混ぜる方式がある。特許文献1では、特に、本物の鍵を使用した処理と、ダミー鍵を使用した処理をランダムな順番で実行することで、サイドチャネルリークと秘密鍵との間の相関を小さくすることを試みている。
特開2007−67942号公報
Paul Kocher, Joshua Jaffe, and Benjamin Jun,"Introduction to Differential Power Analysis and Related Attacks", http://www.fit.vutbr.cz/~cvrcek/cards/dpa.ps, 09 June 1998.
しかしながら、ダミー演算によるリーク対策手法は、ダミーの演算が本当の演算と区別可能であった場合には、ダミー演算による対策効果は著しく低減する。例えば、ハミングウェイトなどの違いによる消費電流の相違に基づいて、処理中の暗号演算がダミー演算であるのか、本当の演算であるのかを判別することができる。そうすると、ダミー演算の測定結果を解析データから取り除いたり、真の処理の波形のみを選択的に取り出したりすることにより、秘密情報に依存する成分とノイズ成分の比率を下げることが可能になってしまう。そのため、上記比較演算やデータ入出力動作においてもハミングウェイトの違いや処理ステップ数の違いが消費電流、電磁放射、実行時間などの観測値の違いに反映されれば、サイドチャネル攻撃に対して比較処理を通じて秘密情報が漏洩されることになってしまう。
このような課題を解決するための手段等を以下に説明するが、その他の課題と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
本願において開示される実施の形態のうち代表的ものの概要を簡単に説明すれば下記の通りである。
すなわち、比較対象の値を所定バイト数単位で分割し、分割部分同士の比較順を可変とし、且つ、分割部分同士の全部の比較結果を用いて、比較対象の一致又は不一致を判別する。
本願において開示される実施の形態のうち代表的なものによって得られる効果を簡単に説明すれば下記のとおりである。
すなわち、比較対象の一致又は不一致に拘わらずハミングウェイトの相違や処理ステップ数の違いが顕著になり難い。
図1にはデータ処理装置において暗合化処理情報を分割部同士で比較する処理が例示される。 図2は分轄部分同士の比較順序を可変とし定数も演算対象としてXOR演算により比較を行う比較演算処理手法を原理的に例示する説明図である。 図3は一実施の形態にかかるデータ処理装置としてのマイクロコンピュータ(MCU)を例示するブロック図である。 図4は秘密鍵を用いて平文を暗号化する場合を想定したとき、暗号化処理に対して比較処理の比較対象を処理系列に従って例示する説明図である。 図5は分割部分の2バイト単位の比較順序を可変にするために用いるリストLSTの生成手法を例示する説明図である。 図6はインデックスされたリストLSTが図5の場合における夫々8バイトの暗号化処理情報Adat,Bdatに対する分割部分の2バイト単位の比較順序を例示する動作説明図である。 図7は演算結果RSLTに基づいて暗号化処理情報AdatとBdatが一致すか否かを判別する演算ロジックを例示する論理構成図である。 図8は8の倍数バイトを有する暗号化処理情報に対して8バイト単位の処理を集計する暗号化処理の処理手順を例示する説明図である。 図9は8バイト単位の処理の結果を集計した8×nバイトの演算結果について関数の戻り値として定義された定数をリターンコードとして出力する処理手順を例示するフローチャートである。 図10は図9の処理手順を考える一つ前に検討した処理手順を示すフローチャートである。 図11は処理ステップ数の相違という点でリークを生ずる虞の高い処理手順を例示するフローチャートである。 図12はランダム比較処理の第2の観点における8+mバイトの比較処理順のランダム化方式について例示するタイミング図である。 図13はフィッシャーイェーツシャッフルアルゴリズムの概念を概略的に示す説明図である。 図14は暗号コプロセッサ104の更に具体的な例を示すブロック図である。 図15はサイドチャネルアタック対策の処理を含んだ暗号化処理を例示する全体的な処理のフローチャートである。
1.実施の形態の概要
先ず、本願において開示される代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
〔1〕<所定バイト数に分割した全部の分割部分の比較と、分割部分の比較順序のランダム化>
代表的な例に係るデータ処理装置(100)は、記憶部(102,103)から暗号化処理部(104)にロードされた暗号化処理情報(秘密鍵、平文)を用いて暗号化処理を行う装置である。これは、前記暗号化処理部にロードされた暗号化処理情報が改竄されたか否かを前記記憶部に格納されている暗号化処理情報との比較によって判別する検証処理部(CPU101とその動作プログラムなど)を有する。前記検証処理部は、比較対象とされる夫々の暗号化処理情報(Adat,Bdat)を所定バイト数単位に分割し、分割部分(A[0],A[1],A[2],A[3]、B[0},B[1],B[2],B[3])の前記所定バイト数単位の比較順序を可変にして対応する分割部分同士の比較を全部行い、その比較結果を用いて前記比較対象が一致するか否かを判別する。
これによれば、分割部分の比較順序を可変とすることによって比較対象の一致又は不一致に拘わらずその比較結果においてハミングウェイトの相違は顕著にならず、また、一致か否かの判別には分割部分同士の比較を全部行うから比較対象の一致又は不一致に拘わらず処理ステップ数も変わらない。したがって、比較処理において比較対象の一致と不一致との間で消費電流、電磁放射、実行時間などの観測値に大きな違いを生じさせず、サイドチャネル攻撃に対して比較処理を通じて秘匿情報が漏洩し難くなる。
〔2〕<分割部分のランダムな比較順序を規定するテーブルエントリを乱数を用いて参照>
項1において、前記検証処理部は、前記比較対象とされる暗号化処理情報における夫々の分割部分の相対位置を示すオフセット情報(LST:L[0],L[1],L[2],L[3])の組み合わせの態様をデータテーブル(RTBL)から乱数を用いて選択し、選択した態様に従った順番で前記分割部分の比較を行う。
これによれば、分割部分の比較順序を容易にランダム化することができる。
〔3〕<MバイトのN倍のデータ長を有する暗号化処理情報>
項1において、前記検証処理部は、前記比較対象とされる暗号化処理情報がMバイトのN倍のデータ長を有するとき(Mは2以上の整数、Nは正の整数)、前記暗号化処理情報をMバイト毎に2バイト単位に分割し、分割部分の2バイト単位の比較順序を可変にしてMバイト毎の比較を行い、Mバイト毎の全部の比較結果を用いて前記比較対象が一致するか否かを判別する(図6、図8参照)。
これによれば、Mバイト毎に同じ処理を繰り返して結果を出すことができるから、MバイトのN倍の任意のデータ長を有する暗号化処理情報に対して容易に対応することができる。
〔4〕<分割部分のランダムな比較順序を規定するテーブルエントリを乱数を用いて参照>
項3において、前記検証処理部は、前記比較対象とされる暗号化処理情報における夫々のMバイト内の2バイト単位の分割部分の相対位置を示す情報の組み合わせの態様をデータテーブルから乱数(R0)を用いて選択し、選択した態様に従った順番で前記分割部分の比較を行う。
これによれば、分割部分の比較順序を容易にランダム化することができる。
〔5〕<任意データ長を有する暗号化処理情報>
項1において、前記検証処理部は、前記比較対象とされる暗号化処理情報がM×N+Lのバイト長(Mは4以上の整数、Nは正の整数であって、Lは2の倍数であってL<M)のデータ長を有するとき、前記暗号化処理情報をN−1個のMバイトとM+Lバイトに分割し、分割部分の2バイト単位の比較順序を可変にしてMバイト毎の比較とM+Lバイトの比較を行い、Mバイト毎の比較とM+Lバイトの比較との全部の比較結果を用いて前記比較対象が一致するか否かを判別する(図12参照)。
これによれば、Mバイトの倍数に対してLバイトの端数がある任意のデータ長を有する暗号化処理情報に対して、Lバイトの端数を含むL+Mバイトの部分を除いてMバイト毎に同じ処理を繰り返して結果を出すことができるから、容易に対応することができる。
〔6〕<分割部分のランダムな比較順序を規定するテーブルエントリを乱数を用いて参照>
項5において、前記検証処理部は、前記比較対処とされる暗号化処理情報における夫々のMバイト内の2バイト単位の分割部分の相対位置を示す情報の組み合わせの態様をデータテーブルから乱数を用いて選択し、選択した態様に従った順番で前記分割部分の比較を行う(図6参照)。
これによれば、夫々のMバイト内の分割部分の比較順序を容易にランダム化することができる。
〔7〕<Mバイト毎の比較とM+Lバイトの比較とのランダム化>
項6において、前記検証処理部は、前記比較対処とされる暗号化処理情報におけるM+Lバイトに分割した部分の2バイト単位の比較順序をシャッフルアルゴリズムを用いて決定する(図13参照)。
これによれば、M+Lバイト内の分割部分の比較順序をLの値に応じて容易にランダム化することができる。
〔8〕<一方の分割部分と1,0混在定数とのXOR結果を他方の分割部分とXOR>
項1において、前記分割部分同士の比較は、一方の分割部分をそれと同じビット数の1,0混在の定数(0x5555,0xAAAA)とビット単位の排他的論理和を採り(310)、その排他的論理和結果を他方の分割部分とビット単位の排他的論理和を採る(311)処理である。
これによれば、定数と2つのデータの排他的論理和をとるために、2回の排他的論理和演算を行う。そのとき1回目は初期値定数とデータのうちの一方、2回目は1回目の結果と残りの一方のデータとで排他的論理和演算を行っている。この初期値との排他的論理和演算を行わず2つの値の単なる排他的論理和演算では2つの値が等しい場合には演算結果が0になり、一致の場合と不一致の場合とでハミングウェイトの違いが顕著に現れてしまう。上記手段であれば、分割部分同士が一致していると、上記2回の排他的論理和結果が前記1,0混在の定数に等しくなり、分割部分同士が不一致の場合との間でのハミングウェイトの相違が顕著になることはない。
〔9〕<夫々の比較対象の上位側に乱数でデータを付加>
項8において、前記分割部分同士の比較は、前記分割部分及び前記定数の上位側にダミーデータ(r1、r2、r3)を付加した状態で行い、前記分割部分の比較結果は前記ダミー部分を除外した部分とする。
これにより、上位側に付加されたダミーデータの作用により、分割部分同士が一致の場合と不一致の場合との間でのハミングウェイトの相違を更に縮小することができる。
〔10〕<乱数のビットローテーション>
項9において、前記ダミーデータ(r2)はレジスタにロードされた乱数であり、一部の乱数はレジスタ上でビットローテンションされる。
これによれば、ダミーデータに単に乱数を用いる場合に比べると、一部の乱数のビットローテーションの作用により、分割部分同士が一致の場合と不一致の場合との間でのハミングウェイトの相違を更に縮小することができる。
〔11〕<分割部分の比較結果に基づく暗号化処理情報の一致判別>
項8において、前記検証処理部は、前記比較対象とされる暗号化処理情報に対して前記分割部分同士の比較によって得られた比較結果(RSLT:R[0],R[1],R[2],R[3])の内の一つを前記定数(0x5555又は0xAAAA)とビット単位で論理和を採り(410)、その論理和結果を次の前記分割部分同士の比較結果と論理和を採る操作を最後の前記分割部分同士の比較結果まで行って(411,412,413)累積的論理和結果(401)を取得すると共に、前記暗号化処理情報に対して前記分割部分同士の比較によって得られた比較結果の内の一つを前記定数とビット単位で論理積(420)を採り、その論理積結果を次の前記分割部分同士の比較結果と論理積を採る操作を最後の前記分割部分同士の比較結果まで行って(421,422,423)累積的論理積結果(402)を取得し、前記累積的論理和結果と前記累積的論理積結果との論理積(430)に基づいて、前記比較対象が一致するか否かの判別結果を生成する。
これによれば、累積的論理和又は累積的論理積だけを行う場合に生ずる、比較一致の誤り判定の虞を解消することができる。
〔12〕<判別のリターンコード>
項11において、前記検証処理部は、前記累積的論理和結果と前記累積的論理積結果との論理積の結果とその期待値との差を演算し(S2)、演算結果に応じたゼロフラグの操作を行い(S3)、ゼロフラグを有するコンディションコードレジスタの値を用いて生成したアドレスによってリードアクセスを行い(S4,S5)、リードしたデータを、前記比較対象が一致するか否かの判別結果として所定のレジスタにロードする。ここで、前記アドレスは、前記コンディションコードレジスタの値に規定値を加算した値であり、前記累積的論理和結果と前記累積的論理積結果との論理積の結果がその期待値に等しい場合と、等しくない場合とで、アドレスビットの1ビットだけが相違するアドレスとされる。また、前記比較対象が一致するか否かの判別結果は、一致の場合と不一致の場合とでデータビットの1ビットだけが相違するデータとされる。
これによれば、前記累積的論理和結果と前記累積的論理積結果との論理積の結果とその期待値との相違、即ち、比較対象の一致または不一致の判別結果、をコンディションコードレジスタのゼロフラグに反映するから、判別結果に応じてその処理ステップ数に変わりはない。コンディションコードレジスタを用いて生成するアドレスは比較対象の一致または不一致に応じてアドレスビットの1ビットだけの相違とされるから、生成される双方のアドレスの点においても、ハミングウェイトの相違を最大限に縮小することができる。更に、当該アドレスで参照される値も一致または不一致に応じてデータビットの1ビットだけの相違とされるから、双方の参照値の点においても、ハミングウェイトの相違を最大限に縮小することができる。
〔13〕<暗号化処理部で暗号化処理される前の鍵、平文を比較対象とする>
項1において、前記比較対象とされる暗号化処理情報の一つである、前記暗号化処理部にロードされた暗号化処理情報は、前記暗号化処理部で暗号化処理の演算が行われる前の情報(CPREG1,CPREG2の情報)であり、暗号化に用いる鍵又は暗号化の対象になる平文の情報である。
これによれば、鍵と平文が暗号化の前に改竄されたか否かの判別をそれら情報の秘匿性を保ったまま判別することができ、その判別結果を用いて割込み処理又はリセット処理などに移行することによってサイドチャネルアタックに効果的に対処することが可能になる。
〔14〕<暗号化処理部で暗号化された後に復号した平文を比較対象とする>
項1において、前記比較対象とされる暗号化処理情報の一つである、前記暗号化処理部にロードされた暗号化処理情報は、前記暗号化処理部で暗号化されたデータを復号することによって得られた情報(CPREG4の情報)であり、暗号化の対象になった平文に対応する情報である。
これによれば、平文が改竄されたか否かの判別をその情報の秘匿性を保ったまま判別することができ、その判別結果を用いて割込み処理又はリセット処理などに移行することによってサイドチャネルアタックに効果的に対処することが可能になる。
〔15〕<所定バイト数に分割した全部の分割部分の比較と、分割部分の比較順序のランダム化>
別の代表的な例に係る検証処理プログラム(103に格納されているプログラム)は、記憶部(102,103)から暗号化処理部(104)にロードされた暗号化処理情報を用いて暗号化処理を行うデータ処理装置(100)のCPU(101)が実行するプログラムである。このプログラムは、前記暗号化処理部にロードされた暗号化処理情報が改竄されたか否かを前記記憶部に格納されている対応する暗号化処理情報との比較によって判別するために、比較対象とされる夫々の暗号化処理情報を所定バイト数単位に分割し、分割部分の前記所定バイト数単位の比較順序を可変にして対応する分割部分同士の比較を全部行い、その比較結果を用いて前記比較対象が一致するか否かを判別する処理を制御する。
このプログラムによれば、分割部分の比較順序を可変とすることによって比較対象の一致又は不一致に拘わらずハミングウェイトの相違は顕著にならず、また、一致か否かの判別には分割部分同士の比較を全部行うから比較対象の一致又は不一致に拘わらず処理ステップ数も変わらない。したがって、このプログラムを採用することによって、比較処理において比較対象の一致と不一致との間で消費電流、電磁放射、実行時間などの観測値に大きな違いを生じさせず、サイドチャネル攻撃に対して比較処理を通じて秘匿情報が漏洩し難くなる構成を、マイクロコンピュータなどで容易に実現できるようになる。
〔16〕<分割部分のランダムな比較順序を規定するテーブルエントリを乱数を用いて参照>
項15において、検証処理プログラムは、前記比較対象とされる暗号化処理情報における夫々の分割部分の相対位置を示す情報の組み合わせの態様をデータテーブルから乱数を用いて選択し、選択した態様に従った順番で前記分割部分を比較する処理を制御する。
これによれば、分割部分の比較順序を容易にランダム化することができる。
〔17〕<MバイトのN倍のデータ長を有する暗号化処理情報>
項15において、前記比較対象とされる暗号化処理情報がMバイトのN倍のデータ長を有するとき(Mは2以上の整数、Nは正の整数)、検証処理プログラムは、前記暗号化処理情報をMバイト毎に2バイト単位に分割し、分割部分の2バイト単位の比較順序を可変にしてMバイト毎の比較を行い、Mバイト毎の全部の比較結果を用いて前記一致するか否かを判別する処理を制御する。
これによれば、Mバイト毎に同じ処理を繰り返して結果を出すことができるから、MバイトのN倍の任意のデータ長を有する暗号化処理情報に対して容易に対応することができる。
〔18〕<分割部分のランダムな比較順序を規定するテーブルエントリを乱数を用いて参照>
項17において、検証処理プログラムは、前記比較対象とされる暗号化処理情報における夫々のMバイト内の2バイト単位の分割部分の相対位置を示す情報の組み合わせの態様をデータテーブルから乱数を用いて選択し、選択した態様に従った順番で前記分割部分を比較する処理を制御する。
これによれば、分割部分の比較順序を容易にランダム化することができる。
〔19〕<任意データ長を有する暗号化処理情報>
項15において、前記比較対象とされる暗号化処理情報がM×N+Lのバイト長(Mは4以上の整数、Nは正の整数であって、Lは2の倍数であってL<M)のデータ長を有するとき、検証処理プログラムは、前記暗号化処理情報をN−1個のMバイトとM+Lバイトに分割し、分割部分の2バイト単位の比較順序を可変にしてMバイト毎の比較とM+Lバイトの比較を行い、Mバイト毎の比較とM+Lバイトの比較との全部の比較結果を用いて前記比較対象が一致するか否かを判別する処理を制御する。
これによれば、Mバイトの倍数に対してLバイトの端数がある任意のデータ長を有する暗号化処理情報に対して、Lバイトの端数を含むL+Mバイトの部分を除いてMバイト毎に同じ処理を繰り返して結果を出すことができるから、容易に対応することができる。
〔20〕<分割部分のランダムな比較順序を規定するテーブルエントリを乱数を用いて参照>
項19において、検証処理プログラムは、前記比較対象とされる暗号化処理情報における夫々のMバイト内の2バイト単位の分割部分の相対位置を示すオフセット情報の組み合わせの態様をデータテーブルから乱数を用いて選択し、選択した態様に従った順番で前記分割部分を比較する処理を制御する。
これによれば、夫々のMバイト内の分割部分の比較順序を容易にランダム化することができる。
〔21〕<Mバイト毎の比較とM+Lバイトの比較とのランダム化>
項20において、検証処理プログラムは、前記検証対象とされる暗号化処理情報におけるM+Lバイトに分割した部分の2バイト単位の比較順序をシャッフルアルゴリズムを用いて決定する動作を制御する。
これによれば、M+Lバイト内の分割部分の比較順序をLの値に応じて容易にランダム化することができる。
〔22〕<一方の分割部分と1,0混在定数とのXOR結果を他方の分割部分とXOR>
項15において、前記分割部分同士を比較する処理の制御は、一方の分割部分をそれと同じビット数の1,0混在の定数とビット単位で排他的論理和を採り、その比較結果を他方の分割部分とビット単位で排他的論理和を採る処理の制御である。
これによれば、1,0を含む定数と2つのデータの排他的論理和をとるために、2回の排他的論理和演算を行っており、初期値との排他的論理和演算を行わず2つの値の単なる排他的論理和演算では2つの値が等しい場合には演算結果が0になり、一致の場合と不一致の場合とでハミングウェイトの違いが顕著に現れてしまう。上記手段であれば、分割部分同士が一致していると、上記2回の排他的論理和結果が前記1,0混在の定数に等しくなり、分割部分同士が不一致の場合との間でのハミングウェイトの相違が顕著になることはない。
〔23〕<夫々の比較対象の上位側に乱数でデータを付加>
項22において、前記分割部分同士を比較する処理の制御は、前記分割部分及び前記定数の上位側にダミーデータを付加した状態で比較し、前記分割部分の比較結果は前記ダミー部分を除外した部分とする制御である。
これにより、上位側に付加されたダミーデータの作用により、分割部分同士が一致の場合と不一致の場合との間でのハミングウェイトの相違を更に縮小することができる。
〔24〕<乱数のビットローテーション>
項23において、前記分割部分同士を比較する処理の制御は、前記ダミーデータとして乱数をレジスタにロードし、ロードした一部の乱数をレジスタ上でビットローテンションさせる処理の制御を含む。
これによれば、ダミーデータに単に乱数を用いる場合に比べると、一部の乱数のビットローテーションの作用により、分割部分同士が一致の場合と不一致の場合との間でのハミングウェイトの相違を更に縮小することができる。
〔25〕<分割部分の比較結果に基づく暗号化処理情報の一致判別>
項22において、検証処理プログラムは、前記比較対象とされる暗号化処理情報に対して前記分割部分同士の比較によって得られた比較結果の内の一つを前記定数とビット単位で論理和を採り、その論理和結果を次の前記分割部分同士の比較結果と論理和を採る操作を最後の前記分割部分同士の比較結果まで行って累積的論理和結果を取得すると共に、前記暗号化処理情報に対して前記分割部分同士の比較によって得られた比較結果の内の一つを前記定数とビット単位で論理積を採り、その論理積結果を次の前記分割部分同士の比較結果と論理積を採る操作を最後の前記分割部分同士の比較結果まで行って累積的論理積結果を取得し、前記累積的論理和結果と前記累積的論理積結果との論理積に基づいて、前記比較対象が一致するか否かの判別結果を生成する処理を制御する。
これによれば、累積的論理和又は累積的論理積だけを行う場合に生ずる、比較一致の誤り判定の虞を容易に解消することができる。
〔26〕<判別のリターンコード>
項25において、検証処理プログラムは、前記比較対象とされる累積的論理和結果と前記累積的論理積結果との論理積の結果とその期待値との差を演算し、演算結果に応じたゼロフラグの操作を行い、ゼロフラグを有するコンディションコードレジスタの値を用いて生成したアドレスによってリードアクセスを行い、リードしたデータを、前記比較対象が一致するか否かの判別結果として所定のレジスタにロードする処理を制御する。ここで、前記アドレスは、前記コンディションコードレジスタの値に規定値を加算した値であり、前記累積的論理和結果と前記累積的論理積結果との論理積の結果がその期待値に等しい場合と、等しくない場合とで、アドレスビットの1ビットだけが相違するアドレスとされる。また、前記比較対象が一致するか否かの判別結果は、一致の場合と不一致の場合とでデータビットの1ビットだけが相違するデータとされる。
これによれば、前記累積的論理和結果と前記累積的論理積結果との論理積の結果とその期待値との相違、即ち、比較対象の一致または不一致の判別結果、をコンディションコードレジスタのゼロフラグに反映するから、判別結果に応じてその処理ステップ数に変わりはない。コンディションコードレジスタを用いて生成するアドレスは比較対象の一致または不一致に応じてアドレスビットの1ビットだけの相違とされるから、生成される双方のアドレスの点においても、ハミングウェイトの相違を最大限に縮小することができる。更に、当該アドレスで参照される値も一致または不一致に応じてデータビットの1ビットだけの相違とされるから、双方の参照値の点においても、ハミングウェイトの相違を最大限に縮小することができる。
〔27〕<一方の分割部分と1,0混在定数とのXOR結果を他方の分割部分とXOR>
別の例に係るデータ処理装置(100)は、記憶部(102,103)からデータ処理部(104)にロードされた演算情報を用いてデータ処理を行う。このデータ処理装置は、前記データ処理部にロードされた演算情報(秘密鍵、平文)が改竄されたか否かを前記記憶部に格納されている対応する演算情報との比較によって判別する検証処理部(CPUとその動作プログラムによって実現)を有する。前記検証処理部は、比較対象とされる夫々の演算情報(Adat,Bdat)を所定バイト数単位に分割して(A[0],A[1],A[2],A[3]、B[0},B[1],B[2],B[3])対応する分割部分同士の比較を行い(300)、その比較結果を用いて前記比較対象が一致するか否かを判別する。ここで、前記分割部分同士の比較は、一方の分割部分をそれと同じビット数の1,0混在の定数(0x5555又は0xAAAAなど)とビット単位の排他的論理和(310)を採り、その排他的論理和結果を他方の分割部分とビット単位の排他的論理和(311)を採る処理である。
これによれば、1,0を含む定数と2つのデータの排他的論理和をとるために、2回の排他的論理和演算を行っている。初期値との排他的論理和演算を行わず2つの値の単なる排他的論理和演算では2つの値が等しい場合には演算結果が0になり、一致の場合と不一致の場合とでハミングウェイトの違いが顕著に現れてしまう。上記手段であれば、分割部分同士が一致していると、上記2回の排他的論理和結果が前記1,0混在の定数に等しくなり、分割部分同士が不一致の場合との間でのハミングウェイトの相違が顕著になることはない。この点で、比較処理において比較対象の一致と不一致との間で消費電流、電磁放射、実行時間などの観測値に大きな違いを生じさせず、サイドチャネル攻撃に対して、比較処理を通じた秘匿情報の漏洩を抑制可能になる。
〔28〕<夫々の比較対象の上位側に乱数でデータを付加>
項27において、前記分割部分同士の比較は、前記分割部分及び前記定数の上位側にダミーデータ(r1、r2、r3)を付加した状態で行い、前記分割部分の比較結果は前記ダミー部分を除外した部分とする。
これにより、上位側に付加されたダミーデータの作用により、分割部分同士が一致の場合と不一致の場合との間でのハミングウェイトの相違を更に縮小することができる。
〔29〕<乱数のビットローテーション>
項28において、前記ダミーデータはレジスタにロードされた乱数であり、一部の乱数(r2)はレジスタ上でビットローテンションされる。
これによれば、ダミーデータに単に乱数を用いる場合に比べると、一部の乱数のビットローテーションの作用により、分割部分同士が一致の場合と不一致の場合との間でのハミングウェイトの相違を更に縮小することができる。
〔30〕<分割部分の比較結果に基づく演算情報の一致判別>
項27において、前記検証処理部は、前記比較対象とされる演算情報に対して前記分割部分同士の比較によって得られた比較結果の内の一つを前記定数とビット単位で論理和(410)を採り、その論理和結果を次の前記分割部分同士の比較結果と論理和を採る操作を最後の前記分割部分同士の比較結果まで行って(411,412,413)累積的論理和結果(401)を取得すると共に、前記演算情報に対して前記分割部分同士の比較によって得られた比較結果の内の一つを前記定数とビット単位で論理積を採り(420)、その論理積結果を次の前記分割部分同士の比較結果と論理積を採る操作を最後の前記分割部分同士の比較結果まで行って(421,422,423)累積的論理積結果(402)を取得し、前記累積的論理和結果と前記累積的論理積結果との論理積に基づいて、前記比較対象が一致するか否かの判別結果を生成する。
これによれば、累積的論理和又は累積的論理積だけを行う場合に生ずる、比較一致の誤り判定の虞を解消することができる。
〔31〕<判別のリターンコード>
項30において、前記検証処理部は、前記累積的論理和結果と前記累積的論理積結果との論理積の結果とその期待値との差を演算し(S2)、演算結果に応じたゼロフラグの操作を行い(S3)、ゼロフラグを有するコンディションコードレジスタの値を用いて生成したアドレスによってリードアクセスを行い(S4,S5)、リードしたデータを、前記比較対象が一致するか否かの判別結果として所定のレジスタにロードする。ここで、前記アドレスは、前記コンディションコードレジスタの値に規定値を加算した値であり、前記累積的論理和結果と前記累積的論理積結果との論理積の結果がその期待値に等しい場合と、等しくない場合とで、アドレスビットの1ビットだけが相違するアドレスとされる。また、前記比較対象が一致するか否かの判別結果は、一致の場合と不一致の場合とでデータビットの1ビットだけが相違するデータとされる。
これによれば、前記累積的論理和結果と前記累積的論理積結果との論理積の結果とその期待値との相違、即ち、比較対象の一致または不一致の判別結果、をコンディションコードレジスタのゼロフラグに反映するから、判別結果に応じてその処理ステップ数に変わりはない。コンディションコードレジスタを用いて生成するアドレスは比較対象の一致または不一致に応じてアドレスビットの1ビットだけの相違とされるから、生成される双方のアドレスの点においても、ハミングウェイトの相違を最大限に縮小することができる。更に、当該アドレスで参照される値も一致または不一致に応じてデータビットの1ビットだけの相違とされるから、双方の参照値の点においても、ハミングウェイトの相違を最大限に縮小することができる。
〔32〕<MバイトのN倍のデータ長を有する演算情報>
項27において、前記検証処理部は、前記比較対象とされる演算情報がMバイトのN倍のデータ長を有するとき(Mは2以上の整数、Nは正の整数)、前記演算情報をMバイト毎に2バイト単位に分割し、分割部分の2バイト単位の比較順序を可変にしてMバイト毎の比較を行い、Mバイト毎の全部の比較結果を用いて前記比較対象が一致するか否かを判別する。
これによれば、Mバイト毎に同じ処理を繰り返して結果を出すことができるから、MバイトのN倍の任意のデータ長を有する暗号化処理情報に対して容易に対応することができる。
〔33〕<任意データ長を有する演算情報>
項27において、前記検証処理部は、前記比較対象とされる演算情報がM×N+Lのバイト長(Mは4以上の整数、Nは正の整数であって、Lは2の倍数であってL<M)のデータ長を有するとき、前記演算情報をN−1個のMバイトとM+Lバイトに分割し、分割部分の2バイト単位の比較順序を可変にしてMバイト毎の比較とM+Lバイトの比較を行い、Mバイト毎の比較とM+Lバイトの比較との全部の比較結果を用いて前記比較対象が一致するか否かを判別する。
これによれば、Mバイトの倍数に対してLバイトの端数がある任意のデータ長を有する暗号化処理情報に対して、Lバイトの端数を含むL+Mバイトの部分を除いてMバイト毎に同じ処理を繰り返して結果を出すことができるから、容易に対応することができる。
〔34〕<一方の分割部分と1,0混在定数とのXOR結果を他方の分割部分とXOR>
別の例に係る検証処理プログラムは、記憶部からデータ処理部にロードされた演算情報を用いてデータ処理を行うデータ処理装置のCPUが実行するプログラムである。このプログラムは、前記データ処理部にロードされた演算情報が改竄されたか否かを前記記憶部に格納されている対応する演算情報との比較によって判別するために、比較対象とされる夫々の演算情報を所定バイト数単位に分割して対応する分割部分同士の比較を行い、その比較結果を用いて前記比較対象が一致するか否かを判別する処理を制御する。ここで、前記分割部分同士を比較する処理の制御は、一方の分割部分をそれと同じビット数の1,0混在の定数とビット単位の排他的論理和を採り、その比較結果を他方の分割部分とビット単位の排他的論理和を採る制御である。
このプログラムを採用すると、分割部分同士が一致していれば、上記2回の排他的論理和結果が前記1,0混在の定数に等しくなり、分割部分同士が不一致の場合との間でのハミングウェイトの相違が顕著になることはない。したがって、このプログラムを採用することによって、比較処理において比較対象の一致と不一致との間で消費電流、電磁放射、実行時間などの観測値に大きな違いを生じさせず、サイドチャネル攻撃に対して、比較処理を通じた秘匿情報の漏洩を抑制可能になる構成を、マイクロコンピュータなどで容易に実現できるようになる。
〔35〕<夫々の比較対象の上位側に乱数でデータを付加>
項34において、前記分割部分同士を比較する制御は、前記分割部分及び前記定数の上位側にダミーデータを付加した状態で比較し、前記分割部分の比較結果は前記ダミー部分を除外した部分とする制御である。
これにより、上位側に付加されたダミーデータの作用により、分割部分同士が一致の場合と不一致の場合との間でのハミングウェイトの相違を更に縮小することができる。
〔36〕<乱数のビットローテーション>
請求項35において、前記分割部分同士を比較する制御は、前記ダミーデータとして乱数をレジスタにロードし、ロードした一部の乱数をレジスタ上でビットローテンションさせる処理の制御を含む、検証処理プログラム。
これにより、上位側に付加されたダミーデータの作用により、分割部分同士が一致の場合と不一致の場合との間でのハミングウェイトの相違を更に縮小することができる。
〔37〕<分割部分の比較結果に基づく演算情報の一致判別>
項34において、検証処理プログラムは、前記比較対象とされる演算情報に対して前記分割部分同士の比較によって得られた比較結果の内の一つを前記定数とビット単位で論理和を採り、その論理和結果を次の前記分割部分同士の比較結果と論理和を採る操作を最後の前記分割部分同士の比較結果まで行って累積的論理和結果を取得すると共に、前記演算情報に対して前記分割部分同士の比較によって得られた比較結果の内の一つを前記定数とビット単位で論理積を採り、その論理積結果を次の前記分割部分同士の比較結果と論理積を採る操作を最後の前記分割部分同士の比較結果まで行って累積的論理積結果を取得し、前記累積的論理和結果と前記累積的論理積結果との論理積に基づいて、前記比較対象が一致するか否かの判別結果を生成する処理を制御する。
これによれば、累積的論理和又は累積的論理積だけを行う場合に生ずる、比較一致の誤り判定の虞を容易に解消することができる。
〔38〕<判別のリターンコード>
項37において、検証処理プログラムは、前記比較対象とされる累積的論理和結果と前記累積的論理積結果との論理積の結果とその期待値との差を演算し、演算結果に応じたゼロフラグの操作を行い、ゼロフラグを有するコンディションコードレジスタの値を用いて生成したアドレスによってリードアクセスを行い、リードしたデータを、前記比較対象が一致するか否かの判別結果として所定のレジスタにロードする処理を制御する。ここで、前記アドレスは、前記コンディションコードレジスタの値に規定値を加算した値であり、前記累積的論理和結果と前記累積的論理積結果との論理積の結果がその期待値に等しい場合と、等しくない場合とで、アドレスビットの1ビットだけが相違するアドレスとされる。また、前記比較対象が一致するか否かの判別結果は、一致の場合と不一致の場合とでデータビットの1ビットだけが相違するデータとされる。
これによれば、前記累積的論理和結果と前記累積的論理積結果との論理積の結果とその期待値との相違、即ち、比較対象の一致または不一致の判別結果、をコンディションコードレジスタのゼロフラグに反映するから、判別結果に応じてその処理ステップ数に変わりはない。コンディションコードレジスタを用いて生成するアドレスは比較対象の一致または不一致に応じてアドレスビットの1ビットだけの相違とされるから、生成される双方のアドレスの点においても、ハミングウェイトの相違を最大限に縮小することができる。更に、当該アドレスで参照される値も一致または不一致に応じてデータビットの1ビットだけの相違とされるから、双方の参照値の点においても、ハミングウェイトの相違を最大限に縮小することができる。
〔39〕<MバイトのN倍のデータ長を有する演算情報>
項34において、検証処理プログラムは、前記比較対象とされる演算情報がMバイトのN倍のデータ長を有するとき(Mは2以上の整数、Nは正の整数)、前記演算情報をMバイト毎に2バイト単位に分割し、分割部分の2バイト単位の比較順序を可変にしてMバイト毎の比較を行い、Mバイト毎の全部の比較結果を用いて前記一致するか否かを判別する処理を制御する。
これによれば、Mバイト毎に同じ処理を繰り返して結果を出すことができるから、MバイトのN倍の任意のデータ長を有する暗号化処理情報に対して容易に対応することができる。
〔40〕<任意データ長を有する演算情報>
項34において、検証処理プログラムは、前記比較対象とされる演算情報がM×N+Lのバイト長(Mは4以上の整数、Nは正の整数であって、Lは2の倍数であってL<M)のデータ長を有するとき、前記演算情報をN−1個のMバイトとM+Lバイトに分割し、分割部分の2バイト単位の比較順序を可変にしてMバイト毎の比較とM+Lバイトの比較を行い、Mバイト毎の比較とM+Lバイトの比較との全部の比較結果を用いて前記比較対象が一致するか否かを判別する処理を制御する。
これによれば、Mバイトの倍数に対してLバイトの端数がある任意のデータ長を有する暗号化処理情報に対して、Lバイトの端数を含むL+Mバイトの部分を除いてMバイト毎に同じ処理を繰り返して結果を出すことができるから、容易に対応することができる。
2.実施の形態の詳細
実施の形態について更に詳述する。
<実施の形態1>
先ず最初に、サイドチャネルアタックによる不所望な情報リークを抑制するための、暗合化処理情報を分割部同士で比較する処理、について原理的に説明する。その後の実施の形態で、その処理について更に具体的な説明を行う。
図1にはデータ処理装置において暗合化処理情報を分割部同士で比較する処理が例示される。同図においてAdat、Bdatは比較対象とされる暗号化処理情報であり、例えば前者は記憶部に格納されている秘密鍵、後者は記憶部から暗号化処理部にロードされた秘密鍵である。暗号化処理情報Adatは例えば2バイト数単位に4分割のデータA[0],A[1],A[2],A[3]として図示され、暗号化処理情報Bdatは例えば2バイト数単位に4分割のデータB[0],B[1],B[2],B[3]として図示される。分割部分の2バイト単位の比較順序を可変にして対応する分割部分同士の比較を行い、2バイト毎の全部の比較結果を用いて前記比較対象が一致するか否かを判別する。分割部分の比較順序の指定は例えば順序データL[0],L[1],L[2],L[3]が配列されたリストLSTに基づいて行われる。
これによれば、分割部分の比較順序を可変とすることによって比較対象の一致又は不一致に拘わらずその結果においてハミングウェイトの相違は顕著にならない。また、一致か否かの判別には分割部分同士の比較を全部行うから比較対象の一致又は不一致に拘わらず処理ステップ数も変わらない。したがって、比較処理において比較対象の一致と不一致との間で消費電流、電磁放射、実行時間などの観測値に大きな違いを生じさせず、サイドチャネル攻撃に対して比較処理を通じて秘匿情報が漏洩し難くなる。
分割部分同士の比較は例えば排他的論理和演算(XOR)を利用して行う。比較の演算結果RSLTは、分割部分同士を順次比較演算した結果R[0],R[1],R[2],R[3]の配列として得られる。XORを用いた分割部分同士の比較演算は、例えば、前記分割部分同士の比較を、一方の分割部分をそれと同じビット数の1,0混在の定数とビット単位の排他的論理和を採り、その排他的論理和結果を他方の分割部分とビット単位の排他的論理和を採る処理を基本とする。単なる排他的論理和では分割部分同士が一致の場合に演算結果が全ビット0になり一致の場合と不一致の場合とでハミングウェイトの相違が顕著になってしまうからである。したがって初期値とのXORを最初に行う。たとえば、初期値を定数0x5555としておくと、2回のXOR演算を行った結果、比較対象が等しい場合の結果として0x5555が得られ、期待する演算結果におけるハミングウェイトの偏りを最小にする事ができる。
不一致の場合には全ビット0又は1になる可能性は否定できないので、極力、排他的論理和演算結果のハミングウェイトの相違を小さくするために下位側2バイトには乱数r1、r2、r3を配置するのがよい。このとき、演算毎に毎回新たな乱数を発生させて汎用レジスタにセットする処理を軽減するために、一つの乱数r2のみ変更対象とし、その変更内容を例えば演算毎に毎回1ビットのビットローテーションを行うようにするとよい。
<実施の形態2>
《マイクロコンピュータ》
図3には一実施の形態にかかるデータ処理装置としてのマイクロコンピュータ(MCU)が例示される。同図に示されるマイクロコンピュータ100は、特に制限されないが、ICカードや携帯端末などに適用されるセキュアマイクロコンピュータとして秘匿データの暗号化及び復号や、認証などの処理に用いられる。この種のマイクロコンピュータにおいては、内部の動作や処理手順が外部に漏れると一般にセキュリティが確保できなくなってしまうため、内部解析(リバース・エンジニアリング)や改変に対する防護機能、即ち耐タンパ性を備える。この耐タンパ性を実現するのに、半導体集積回路としてのマイクロコンピュータの保護層をはがそうとすると内部回路まで破壊されるようにした物理的な手段と共に、サイドチャネルアタックなどによる秘匿情報の漏洩を抑制するためのソフトウェア的な手段が備えられている。ここではサイドチャネルアタックに対する耐性強化のための比較処理に関する手段について詳細な説明を行う。
マイクロコンピュータ100は、特に制限されないが、夫々が内部バス106を共有する、代表的に示された中央処理装置(CPU)101、RAM102、不揮発性メモリ103、暗号コプロセッサ(COPRO)104、乱数生成器105、及び入出力回路107を備える。乱数発生器105は疑似乱数を発生するものであってもよい。
CPU101は、命令を実行するプログラム制御装置であって、命令フェッチと命令実行手順を制御する命令制御ユニット及び命令をデコードして実行する実行ユニットなどによって構成される。RAM102は、CPU101のワーク領域若しくはデータの一時記憶領域として用いられる。不揮発性メモリ103は、CPU101が実行するプログラムやプログラム実行時に参照するテーブルやパラメータなどが格納され、マスクROMや電気的に書き換え可能なフラッシュメモリなどで実現される。暗号コプロセッサ104はCPU101の指示にしたがって暗号化及び復号の処理を行う。乱数生成器105は暗号化復号処などで用いる乱数を生成する。入出力回路107はIOポート、シリアルインタフェース、バスインタフェースなどを備え、マイクロコンピュータの外部インタフェース機能を総称する。
《暗号化処理に付随する比較処理の比較対象》
図4には例えば秘密鍵を用いて平文を暗号化する場合を想定したとき、暗号化処理に対して上記比較処理の比較対象が処理系列に従って例示される。暗号コプロセッサ104が秘密鍵を用いて平文を暗号化する場合、例えば、秘密鍵と平文を外部から入力するものとする。外部からそれらが入出力回路107に供給されると、CPU101が秘密鍵と平文をRAM102にストアする。ADR1は秘密鍵が格納されるメモリアドレス、ADR2は平文が格納されるメモリアドレスである。ここでは、メモリアドレスADR1,ADR2上で直接データが改竄されることは無いものとする。RAM102にストアされた秘密鍵と平文はCPU101の制御によって暗号コプロセッサ104の演算レジスタCPREG1,CPREG2にロードされる。CPU101が暗号コプロセッサ104に暗号化処理を指示することによって、暗号コプロセッサ104は演算レジスタCPREG1の秘密鍵を用いて演算レジスタCPREG2の平文を所定の暗号アルゴリズムECRPTにしたがって暗号化する。演算結果レジスタCPREG3には暗号化された暗号文が格納される。サイドチャネルアタックに対抗するための比較処理は、例えば、演算レジスタCPREG1に格納された秘密鍵がメモリアドレスADR1に格納されている秘密鍵に一致するかを比較する処理CMP1である。別の比較処理は、演算レジスタCPREG2に格納された平文がメモリアドレスADR1に格納されている平文に一致するかを比較する処理CMP2である。更に別の比較処理は、演算レジスタCPREG3の暗号文を復号アルゴリズムDCRPTで復号して演算レジスタCPREG4に取得した平文がメモリアドレスADR1に格納されている平文に一致するかを比較する処理CMP3である。処理CMP1と処理CMP2は演算レジスタCPREG1,CPREG2上でデータが改竄された場合、或いは当該レジスタへの転送途上で改竄された場合を検出しようとするものである。処理CMP3は演算レジスタCPREG3に暗号文が取得されるまでの間、即ち、暗号コプロセッサ104のどこかで秘密鍵、平文が改竄された場合を検出しようとするものである。比較する処理CMP1,CMP1,CMP3は何れもCPU101が行う、この意味において、暗号化処理部としての暗号コプロセッサ104にロードされた秘密鍵及び平文などの暗号化処理情報が改竄されたか否かを記憶部としてのRAM102に格納されている暗号化処理情報との比較によって判別する検証処理部の一例はCPU101及びその動作プログラムなどとされる。CPU101は前記処理CMP1,CMP2,CMP3の結果に基づいて秘密鍵や平文が改竄されたことを検出すると、例えば、リセット処理、その他の例外処理、又は割り込み処理などの例外的な処理に移行して、サイドチャネルアタックを制止することが可能である。尚、特に図示はしないが、秘密鍵が不揮発性メモリ103から演算レジスタCPREG1にセットされる場合も上記同様である。
《比較処理における比較演算処理手法》
図2には図3に代表的に示された比較する処理CMP1,CMP2,CMP3の比較演算処理手法が原理的に例示される。同図においてAdat、Bdatは比較対象とされる暗号化処理情報である。以下の説明では、秘密鍵、平文の一つを単に暗号化処理情報とも称するものとする。暗号化処理情報Adatが例えば演算レジスタCPREG1上のデータであるとき、それに対応する暗号化処理情報BdatはRAM102のメモリアドレスADR1の秘密鍵である。また、暗号化処理情報Adatが例えば演算レジスタCPREG2上のデータ又は演算レジスタCPREG4上のデータであるとき暗号化処理情報BdatはRAM102に格納されているメモリアドレスADR2の平文である。
比較対象とされる夫々の暗号化処理情報Adat,Bdatは、例えばMバイトのN倍のデータ長を有し(Mは2以上の整数、Nは正の整数)、ここではM=2,N=4とする。暗号化処理情報Adatは2バイト数単位に4分割のデータA[0],A[1],A[2],A[3]とし、暗号化処理情報Bdatは2バイト数単位に4分割のデータB[0],B[1],B[2],B[3]とする。このように、暗号化処理情報Adat,Bdatを2バイト数単位に4分割とする。分割部分の2バイト単位の比較順序を可変にして対応する分割部分同士の比較を行い、2バイト毎の全部の比較結果を用いて前記比較対象が一致するか否かを判別する。分割部分の比較順序の指定は例えば順序データL[0],L[1],L[2],L[3]が配列されたリストLSTに基づいて選択ロジック200が制御する。分割部分同士の比較は比較演算ロジック300が排他的論理和演算(XOR)を利用して行う。比較演算ロジック300による演算結果RSLTは、分割部分同士を順次比較演算した結果R[0],R[1],R[2],R[3]の配列として得られる。
前記選択ロジック200及び比較演算ロジック300はCPU101、その動作プログラム及び制御データなどによって実現され、その具体的な構成について次に説明する。
《分割部分の2バイト単位の比較順序を可変にする選択ロジック》
図5には分割部分の2バイト単位の比較順序を可変にするために用いるリストLSTの生成手法が例示される。リストLSTはランダムテーブルRTBLを乱数RNMBを用いて参照される。例えば、リストLSTは8バイトのデータをその先頭から2バイト単位で指定するためのバイトアドレスのオフセット値の配列とすることができる。この場合、8バイトの基点となる先頭アドレスを保持しておく必要があり、次のアドレスは先頭のアドレスにオフセット値を加算していくことで、次々に生成することができる。これに応じてランダムテーブルRTBLは、前記オフセット値の配列を4i=24通り備えたデータテーブルとして不揮発性メモリ103に構成される。例えば、先頭バイトアドレスを基点としたバイトアドレスの差分をアドレスオフセットとし、第1バイト、第3バイト、第5バイト、第7バイトの夫々の先頭を0,2,4,6とすると、テーブル要素は、次の24通りになる。
(0,2,4,6,), (0,2,6,4), (0,4,6,2), (0,4,2,6), (0,6,2,4,), (0,6,4,2),
(2,0,4,6,), (2,0,6,4), (2,4,6,0), (2,4,0,6), (2,6,0,4,), (2,6,4,0),
(4,2,0,6,), (4,2,6,0), (4,0,6,2), (4,0,2,6), (4,6,2,0,), (4,6,0,2),
(6,2,4,0,), (6,2,0,4), (6,4,0,2), (6,4,2,0), (6,0,2,4,), (6,0,4,2).
リストLSTは、上記に限定されず、次に参照する2バイト単位のアドレスへの差分値の配列とすることも可能である。この場合、基点となる先頭アドレスを保持しておく必要がなく、次のアドレスは現在のアドレスに差分(テーブルで参照したリストの要素)を加算していくことで、次々に生成することができる。これに応じてランダムテーブルRTBLは、前記オフセット値の配列を4i=24通り備えたデータテーブルとして不揮発性メモリ103に構成され、テーブル要素は、次の24通りになる。
(0,2,2,2), (0,2,4,-2), (0,4,2,-4), (0,4,-2,4), (0,6,-4,2), (0,6,-2,-2),
(2,-2,4,2), (2,-2,6,-2), (2,2,2,-6), (2,2,-4,6), (2,4,-6,4), (2,4,-2,-4),
(4,-2,-2,6), (4,-2,4,-6), (4,-4,6,-4), (4,-4,2,4), (4,2,-4,-2), (4,2,-6,2),
(6,-4,2,-4), (6,-4,-2,4), (6,-2,-4,2), (6,-2,-2,-2), (6,-6,2,2), (6,-6,4,-2).
ランダムテーブルRTBLからリストLSTを参照するには乱数発生器105で発生した乱数R0に対する24の剰余Rを演算し(R=R0%24)、その剰余RをランダムテーブルRTBLの先頭アドレスに対するオフセットとしてリストRSTをインデックスする。このようにしてランダムテーブルRTBLの24個のエントリの中から1個がインデックスされる。例えば図5においてインデックスされたリストLSTの比較順序データL[0],L[1],L[2],L[3]はオフセットアドレス2,6,0,4とされる。
図6にはインデックスされたリストLSTが図5の場合における夫々8バイトの暗号化処理情報Adat,Bdatに対する分割部分の2バイト単位の比較順序が例示される。選択ロジック200は、リストLSTのデータL[0],L[1],L[2],L[3]の順に夫々のオフセットアドレスにしたがって2バイト単位の分割部分同士を選択する。比較演算ロジック300は選択された順に比較を行っていく。即ち、最初のL[0]=2に対応して8バイトの先頭から2バイトのオフセット位置を先頭とする2バイト分割データA[1]とB[1]が選択されて比較ロジックに供される(Step1)。次に、L[1]=6に対応して8バイトの先頭から6バイトのオフセット位置を先頭とする2バイト分割データA[3]とB[3]が選択されて比較ロジックに供される(Step2)。更にL[2]=0に対応して8バイトの先頭から2バイト分割データA[0]とB[0]が選択されて比較ロジックに供される(Step3)。最後に、L[3]=4に対応して8バイトの先頭から4バイトのオフセット位置を先頭とする2バイト分割データA[2]とB[2]が選択されて比較ロジックに供される(Step4)。比較結果RSLTはRAM102のワークエリアに一時的に格納される。
《XORを用いた分割部分同士の比較演算ロジック》
図2に例示されるように、XORを用いた分割部分同士の比較演算ロジック300、前記分割部分同士の比較を、一方の分割部分をそれと同じビット数の1,0混在の定数とビット単位の排他的論理和を採り、その排他的論理和結果を他方の分割部分とビット単位の排他的論理和を採る処理を基本とする。単なる排他的論理和では分割部分同士が一致の場合に演算結果が全ビット0になり一致の場合と不一致の場合とでハミングウェイトの相違が顕著になってしまうからである。したがって初期値とのXORを最初に行う。特に、初期値を定数0x5555としておくと、2回のXOR演算を行った結果、2数が等しい場合の結果として0x5555が得られ、期待する演算結果におけるハミングウェイトの偏りを最小にする事ができる。
例えば、301,302、303はCPU101の汎用レジスタであり、汎用レジスタ303の上位2バイトには1,0混在の2バイトの定数がセットされる。1,0混在の定数としてはXOR演算結果のハミングウェイトに大きな相違をもたらし難いパターンが望ましく、16進数標記で「0x5555」又は「0xAAAA」が好適である。図2では「0x5555」がセットされるものとする。汎用レジスタ302の上位2バイトには暗号化処理情報Bdatの分割データB[0],B[1],B[2],B[3]が順位セットされる。汎用レジスタ301の上位2バイトには暗号化処理情報Adatの分割データA[0],A[1],A[2],A[3]が順位セットされる。特に夫々の汎用レジスタ3901,302,303の下位2バイトには乱数r1、r2、r3が併せてセットされる。汎用レジスタ303と302のセットされたデータはビット単位で排他的論理(XOR)310が採られ、更に、その結果と汎用レジスタ301にセットされたデータがビット単位で排他的論理(XOR)311が採られる。その結果は汎用レジスタ304に格納される。排他的論理(XOR)演算はCPUの演算回路を用いて行えばよい。
暗号化処理情報の分割データA[i]とB[i](i=0,1,2,3)が一致する場合、2回の排他的論理和によって汎用レジスタ304の上位2バイトに得られる結果は「0x5555」になる。不一致の場合には全ビット0又は1になる可能性は否定できないので、極力、排他的論理和演算結果のハミングウェイトの相違を小さくするために下位側2バイトには乱数r1、r2、r3を配置してある。このとき、演算毎に毎回新たな乱数を発生させて汎用レジスタにセットする処理を軽減するために、一つの乱数r2のみ変更対象とし、その変更内容を例えば演算毎に毎回1ビットのビットローテーションを行うようにする。即ち、レジスタ302の下位側2バイトの乱数部を1ビット左巡回シフトして保存する。
比較演算ロジック300による一組に暗号化処理情報AdatとBdatに対する演算結果RSLTは例えばRAM102のワーク領域にストアされる。
《暗号化処理情報AdatとBdatとの一致判別演算ロジック》
図7には演算結果RSLTに基づいて暗号化処理情報AdatとBdatが一致すか否かを判別する演算ロジックが例示される。暗号化処理情報AdatとBdatが一致する場合には8バイトの演算結果RSLTは0,1の定数になる。一致判別演算ロジック400は、比較演算ロジック300による演算結果RSLTに対して、一部の2バイトデータR[3]を定数0x5555と論理和(OR)410を採る。その結果を次の下位データR[2]と論理和(OR)411を採り、この論理和結果をその次に下位データR[1]と論理和(OR)412を採り、最後にこの論理和結果をデータR[0]と論理和(OR)413を採り、その演算結果をOR演算結果(2バイト)401とする。更に、比較演算ロジック300による演算結果RSLTに対して、一部の2バイトデータR[3]を定数0x5555と論理積(AND)420を採る。その結果を次に下位データR[2]と論理積(AND)421を採り、この論理和結果をその次の下位データR[1]と論理積(AND)422を採り、最後にこの論理積結果をデータR[0]と論理積(AND)423を採り、その演算結果をAND演算結果(2バイト)402とする。OR演算結果401とAND演算結果402との論理積(AND)430の結果は2バイトで与えられ、これが最終的な8バイトの暗号化処理情報AdatとBdatとの比較結果403となる。論理積(AND)430の結果403が0x5555である場合には2つの数AdatとBdatの値が等しく、それ以外の値のときには等しくないことを意味する。
ここで、OR演算結果401とAND演算結果402の双方を求めて論理積と採るのは以下の理由による。即ち、実際には稀ながら、以下のような場合があるため両方の演算が必要となる。例えば、演算対象が(0xFFFF、0x5555)のとき双方の論理積結果はAND=0x5555、論理和結果はOR=0xFFFFになる。これは2値が違うのに、論理積結果は2値が同じであることを意味する0x5555となって、誤りを生ずることになる。一方、演算対象が(0x0000,0x5555)のとき双方の論理積結果はAND=0x0000、論理和結果はOR=0x5555となる。これは2値が違うのに、論理和結果は2値が同じであることを意味する0x5555となって、誤りを生ずることになる。従って、AND=OR=0x5555であるときに、結果が正しい(2値が等しい)と判定することによって誤りを生ずる虞を未然に防止することができる。
《8の倍数バイトを有する暗号化処理情報に対する比較処理》
図8には8の倍数バイトを有する暗号化処理情報に対して8バイト単位の処理を集計する暗号化処理の処理手順が例示される。ここでは8×n(例えばn=3)バイトの暗号化処理情報Adat,Bdatを処理対象とする。n個の8バイトデータの結果を集計することによって、8×nバイトデータについては、上述した8バイトの暗号化処理情報に対する比較処理をn回繰り返すことによって、8×nバイト長の暗号化処理情報Adat,Bdatの比較を行うことができる。例えば、トリプルDESの暗号鍵の長さは192バイトであるため、n=3である。
n回の8バイトを処理する順番についてもやはりサイドチャネルアタックに対するリーク対策の観点から、ランダムであることが望ましい。そこで、nが固定である場合には、図5で説明したランダムテーブルRTBLと同様の考え方に基づいて分割部分同士の比較順序を可変に設定するためのランダムテーブルを用意しておくことが望ましい。
処理手順を示す図8において、8バイト比較処理500_1,500_2,500_3の夫々は図2及び図6で説明した選択ロジック200及び比較演算ロジック300による処理である。8バイト比較結果RSLT_1,RSLT_2,RSLT_3は夫々の8バイト比較処理500_1,500_2,500_3の結果であり、図2及び図6で説明した演算結果RSLTに相当する。
図8の8バイト比較結果RSLT_1と定数0x5555との論理和演算処理510は、図7において演算結果RSLTからOR演算結果401を得る処理に相当する。論理和演算処理510の結果と8バイト比較結果RSLT_2との論理和演算処理511についてもその論理和演算処理手法は510と同様である。論理和演算処理512についても同様であり、その演算結果が2バイトのOR演算結果(R_OR)530となる。図8の8バイト比較結果RSLT_1と定数0x5555との論理積演算処理520は、図7において演算結果RSLTからAND演算結果402を得る処理に相当する。論理積演算処理520の結果と8バイト比較結果RSLT_2との論理積演算処理521についてもその論理和演算処理手法は520と同様である。論理積演算処理522についても同様であり、その演算結果が2バイトのAND演算結果(R_AND)531となる。
ここでは、8×nバイトの演算結果530は、32ビットのレジスタの上位にAND演算結果(R_AND)531を、下位にOR演算結果(R_OR)530を格納して取得するものとする。以下に説明するリターンコードの生成処理にて論理積と採るのと同様の処理を行うため、省略した。図7のようにAND演算結果531とOR演算結果530との論理積を採ることを妨げるものではない。
《リターンコード生成処理》
図9には8バイト単位の処理の結果を集計した8×nバイトの演算結果530について関数の戻り値として定義された定数をリターンコードとして出力する処理手順が例示される。
比較対象とされる暗号化処理情報AdatとBdatが一致する場合のリターンコードを0x55、不一致の場合のリターンコードを0xAAとする。双方のリターンコードは共にビット1と0の個数が同じであり、リターンコードの種類はハミングウェイトに差をもたらさない。
先ず、CPU101はレジスタR0Lに初期値0x55をセットする(S1)。
次に、図8で説明したOR演算結果(R_OR)530とAND演算結果(R_AND)531が配列された32ビットのデータと定数0x55555555との差分を演算して、その演算結果に応じたコンディションコードレジスタのゼロフラグ(Z−flag)の操作を行う(S2)。OR演算結果(R_OR)530とAND演算結果(R_AND)531とが夫々0x5555であれば差はゼロである。ゼロであればゼロフラグを1にセットし、コンディションコードレジスタのゼロフラグの値をレジスタER0に反映する(S3)。
次にラベル#LAVELで示されるアドレスに保有されているデータにレジスタER0の値を加算してレジスタER0にアドレスを生成する(S4)。生成されたアドレスは、一致の場合には0x04、不一致の場合には0x00にされ、相違は1ビットのみとされる。そのアドレスによってルックアップテーブルが参照される(S5)。参照アドレスが0x04の場合には参照値は0x55、参照アドレスが0x00の場合には参照値は0xAAとされ、その値がリターンコードとしてレジスタR0Lにセットされる。
これによれば、比較対象の一致または不一致の判別結果、をコンディションコードレジスタのゼロフラグに反映するから、判別結果に応じてその処理ステップ数に変わりはない。コンディションコードレジスタを用いて生成するアドレスは比較対象の一致または不一致に応じてアドレスビットの1ビットだけの相違とされるから、生成される双方のアドレスの点においても、ハミングウェイトの相違を最大限に縮小することができる。更に、当該アドレスで参照される値0x55,0xAAも一致または不一致に応じてデータビットの1ビットだけの相違とされるから、双方の参照値の点においても、ハミングウェイトの相違を最大限に縮小することができる。
図10は図9の処理手順を考える一つ前に検討した処理手順を示す。
先ず、CPU101はレジスタR0Lに初期値0x55をセットし、レジスタR2Lに0x00をセットする(S11)。
次に、図8で説明したOR演算結果(R_OR)530とAND演算結果(R_AND)531が配列された32ビットのデータと定数0x55555555との差分を演算し(S12)、その演算結果に応じたコンディションコードレジスタのゼロフラグ(Z−flag)の操作を行う(S13)。OR演算結果(R_OR)530とAND演算結果(R_AND)531とが夫々0x5555であれば差はゼロである。ゼロであればゼロフラグを1にセットする。
次にゼロフラグの反転ビットを用いてキャリーフラグ(Carry−flag)をセットする(S14)。ゼロフラグがゼロであればキャリーフラグがセットされる。そしてレジスタR2Lの値0x00からキャリーフラグの値を減算して、その減算結果をレジスタR2Lに書き戻す(S15)。R_ORとR_ANDが夫々0x5555で一致のときはレジスタR2Lの値は0x00、不一致のときは0xFFとされる。リターンコードはレジスタR0Lの値0x00とレジスタR2Lとの排他的論理和の結果とされ、上記一致の場合は0x55、不一致の場合は0xAAとなる(S16)。しかしながら、この処理手順の場合は、ステップS15でレジスタR2Lに得られる値が0x00又は0xFFとなり、双方の間でハミングウェイトの相違が最大になり、この点で、サイドチャネルアタックに際してリークを生ずる虞が高くなる。
図11は処理ステップ数の相違という点でリークを生ずる虞の高い処理手順を例示する。
先ず、CPU101はレジスタR0Lに初期値0x55をセットする(S21)。
次に、図8で説明したOR演算結果(R_OR)530とAND演算結果(R_AND)531fが夫々定数0x5555に一致するか否かを判決する(S22)。不一致であればレジスタR0Lの値を反転させ、一致であればその処理をスキップする。これによってレジスタR0Lにリターンコードを得る。
この処理手順は判定の結果によりジャンプ命令を用いて条件分岐を行うから、等しいか等しくないかで処理時間に差が生じることになる。このような時間差はリークを発生させる大きな要因となる。図9及び図10の処理手順はタイミング的な要因によるリークは抑止される。図10による処理手順は前述の如くハミングウェイトの相違によるリークの虞が残っている。図9による処理手順はハミングウェイトの相違によるリークの虞も解消されている。
上記実施の形態2による以下の作用効果を以下にまとめる。ポイントはハミングウェイトの偏りを減らす効果がある。鍵の値を処理する際の消費電流などに代表されるサイドチャネルアタックにおいて特定波形を選別することが難しくなり、サイドチャネル解析を難しくする。具体的には以下の作用効果による。
(1)分割部分の比較順序を可変とすることによって比較対象の一致又は不一致に拘わらずハミングウェイトの相違は顕著にならず、また、一致か否かの判別には分割部分同士の比較を全部行うから比較対象の一致又は不一致に拘わらず処理ステップ数も変わらない。
(2)定数と2つのデータの排他的論理和をとるために、2回の排他的論理和演算を行うから、2つの値の単なる排他的論理和演算の場合のように一致の演算結果が0になって一致の場合と不一致の場合とでハミングウェイトの違いが顕著に現れてしまうことを阻止できる。分割部分同士が不一致の場合との間でのハミングウェイトの相違が顕著になることはない。
(3)分割部分同士の排他的論理和演算に際してダミーデータ(乱数)を付加するので、分割部分同士が一致の場合と不一致の場合との間でのハミングウェイトの相違を更に縮小することができる。
(4)乱数のダミーデータに対してビットローテーションを行うので、ダミーデータ部分のハミングウェイトの偏りを簡単に低減させることができる。
(5)CPUが実行して上記比較処理を実現する検証処理プログラムを提供することにより、セキュアマイクロコンピュータなどにおいて暗号化処理情報が改竄されたか否かを判別する検証処理部を容易に実現できるようになる。
<実施の形態3>
《任意データ長を有する暗号化処理情報》
実施の形態2では暗号化処理情報Adat,Bdatは、例えばMバイトのN倍のデータ長、例えば8×3バイトのような、8の倍数バイトを有するものとして説明した。しかしながらこれに限定されるものではなく、任意バイト長のデータに対してもほぼ同様に処理する事ができる。実施の形態3ではそのときの処理との相違点について説明する。
例えば前記比較対象とされる暗号化処理情報がM×N+Lのバイト長(Mは4以上の整数、Nは正の整数であって、Lは2の倍数であってL<M)のデータ長を有するとき、前記暗号化処理情報をN−1個のMバイトとM+Lバイトに分割する。分割部分の2バイト単位の比較順序を可変にしてMバイト毎の比較とM+Lバイトの比較を行い、Mバイト毎の比較とM+Lバイトの比較との全部の比較結果を用いて前記比較対象が一致するか否かを判別すればよい。
例えばM=8、N=n、L=m(=0,2,4,6)とする。この場合、実施の形態2と同様の8バイト単位の比較処理をn−1回行うと共に、8+mバイトの比較処理を1回行って、それらを集計すればよい。このときハミングウェイトの偏りを減らすためにランダム化の観点は、第1には実施の形態2と同様に、8バイト単位の比較処理におけるnバイト(例えば2バイト)単位の分割部分同士の比較演算の処理順と、8+mバイトの比較処理におけるnバイト(例えば2バイト)単位の分割部分同士の比較演算の処理順である。第2には8バイト単位の比較処理系列に対して8+mバイトの比較処理をどこで行うかの順番である。
図12にはランダム比較処理の第2の観点における8+mバイトの比較処理順のランダム化方式について例示される。暗号化処理情報が格納されているメモリエリアの先頭アドレスをADRS、エンドアドレスをADREとする。処理先頭ポインタSPには暗号化処理情報が変化される毎に0からnの間の任意の値がセットされる(0≦SP<n)。SPにセットされる値は乱数に対する値nの剰余などとすればよい。例えばSP=3とすると、先頭から24バイト目のアドレスを処理スタートアドレスとし、最初に、8+mバイトの比較処理を行い、その後は順位8バイトごとに暗号化処理情報を一巡するように比較処理を行っていけばよい。
ランダム比較処理の第1の観点におけるnバイト(例えば2バイト)単位の分割部分同士の比較処理順のランダム化については実施の形態2で説明したランダムテーブルRTBLをから選択してリストRSTを用いるようにすればよい。分割部分のバイト数が2バイト程度であればランダムテーブルRTBLのエントリ数は少なくて済むが、M=16で、nが8の場合には、テーブルエントリ数が激増し、ランダムテーブルRTBLの記憶容量が大きくなり過ぎる。そのような場合を想定すると、シャッフルアルゴリズムを用いてランダム化することも得策となる。尚、Mは8の倍数に限定されない。
ランダム比較処理の第1の観点における8+mバイトの比較処理におけるnバイト(例えば2バイト)単位の分割部分同士の比較演算の処理順のランダム化については、mの値が固定でなければm=0,2,4,6の場合のランダムテーブルを用意しなければならず不経済であるから、この場合にはランダムテーブルを使わずにシャッフルアルゴリズムを用いるのが得策である。
前述に通り、任意バイト長L(Lは8の倍数とは限らない。ただし偶数とする)のデータを処理する場合には、L=8×n+m(n,mは整数、m=L%8で偶数であることから0,2,4,6のいずれかの値)とすると、例えば、実施の形態2の比較処理をn−1回行うほかに、8+mのデータに対する比較処理を行わなければならない。8+mはmの取り得る値により、8+mの値は8,10,12,14バイトのいずれかの値となるので、その値によって、2バイト比較の順番を決定するリストを生成するために、データシャッフルを行うことが得策である。シャッフルを行うアルゴリズムは、シャッフル結果に偏りがないものであれば何でもよい。例えば、フィッシャーイェーツシャッフル(Fisher-Yates shuffle)アルゴリズムを使用する。図13にはフィッシャーイェーツシャッフルアルゴリズムの概念が概略的に示される。フィッシャーイェーツシャッフルアルゴリズムは、注目する配列インデックスをiとし、iに配列終端のインデックスを代入する。配列の先頭からインデックスiまでの間から1つのインデックスを選びjとする。配列のインデックスiとインデックスjの位置の値を交換する。インデックスiから1を引き、新たなインデックスiとし、ふたたびインデックスjをランダムに選び中身を交換する処理に戻る。これを、インデックスiの値が配列の先頭に達するまで繰り返す。シャッフルされたリストの値は、常に一定になるということはない。
フィッシャーイェーツシャッフルアルゴリズムについては、文献「Paul E. Black, "Fisher-Yates shuffle", in Dictionary of Algorithms and Data Structures [online], Paul E. Black, ed., U.S. National Institute of Standards and Technology. 23 May 2011. (accessed TODAY) Available from: http://www.nist.gov/dads/HTML/fisherYatesShuffle.html」がある。
8+mのデータに対する比較処理用のリストを生成後、まずそのリストを参照して8+mのデータに対する比較処理を行う。その開始位置SPは、0以上n未満の整数であり、前述の通り乱数で決められる。8+mのデータに対する比較処理が終わると、続けて8バイト単位の比較処理を行う。以降はサイクリックに処理を行うため、データの終りに達すると先頭に戻り、開始した位置に戻るまで合計n−1回の処理を繰り返す。個々の比較結果を用いて最終結果のための集計処理は、図7及び図8に基づいて説明した処理手順を採用すればよい。
実施の形態3によれば以下の作用効果がある。
一般的な演算対象は常に8バイトの倍数あるいは固定バイト長とは限らないので、任意バイト長をサポートする実施の形態2によれば、比較処理に対して汎用的な機能を提供することができる。
<実施の形態4>
図14には暗号コプロセッサ104の更に具体的な例が示される。適用可能な暗号化復号アルゴリズムはDES(Data Encryption Standard)に準拠する場合に限らず、AES (Advanced Encryption Standard)などに準拠するものであってもよい。例えばAESに準拠する場合は図14に例示されるように、暗号コプロセッサ104は、AES鍵レジスタ(ACKR)600、AESコントロールレジスタ(ACCR)601、AES入出力データ暗号化レジスタ602、AES平文/暗号文レジスタ(ACMR)603、及びAES初期化ベクトルレジスタ(ACVR)604を有する。更に、セレクタ605及びAESコプロセッシングユニット606を有する。
AES鍵レジスタ600にはCPU101から秘密鍵が転送される。鍵長は128ビット、196ビット、又は256ビットとされる。AESコントロールレジスタ601はCPUから制御データ予備制御コマンドがセットされる。AES平文/暗号文レジスタ603は暗号化対象とされる平文、暗号化された暗号文がセットされる。AES入出力データ暗号化レジスタ602は603の入出力データを暗号化するための鍵が設定される。AES初期化ベクトルレジスタ604はCBC(block cipher mode)モードおよびOFB(output feedback mod)モードで使用する初期化ベクトルがセットされる。AESコプロセッシングユニット606は暗号鍵のデータや平分を受けとり、コマンドにしたがって暗号化演算とそのシーケンス制御を行い、必要に応じて復号演算を行う。AESコプロセッシングユニット606は暗号演算に際して前記比較処理を行う。
図15にはサイドチャネルアタック対策の処理を含んだ暗号化処理の全体的な処理フローが例示される。図15の処理については便宜上図4と整合させて説明する。
秘密鍵(K)を演算レジスタCPREG1にロードする(S100)。入力データとしての平文(M)を演算レジスタCPREG2にロードする(S101)。暗号化ロジックECRPTで暗号処理を実行する(S102)。暗号文(C)を演算レジスタCPREG3に出力する(S103)。この後検算1を実行するかを判別する(S104)。
検算1を実行する場合には、暗号文(C)を復号ロジックDCRPTで復号し、復号された平文(M’)を演算レジスタCPREG4に格納する(S105)。CPU101は演算レジスタCPREG4から復号された平文(M’)を読み込む(S106)。CPU101は読み込んだ平文(M’)と元の平文(M)との比較処理を行う(S107)。CPU101は比較処理結果に対して、MとM’が等しいか否かを判別する(S108)。両者が等しければ途中で暗号鍵又は平文の改竄が行われておらず、暗号化計算が正しく行われていることが確認できる。ステップS108の判別によって一致であったときは更に検算2を実行するか否かが判別される(S109)。
検算2を実行する場合、CPU101が演算レジスタCPREG1から秘密鍵(K’)を読み込む(S110)。CPU101は読み込んだ秘密鍵K’と元の鍵Kとの比較処理を行う(S111)。CPU101は比較処理結果に対して、KとK’が等しいか否かを判別する(S112)。両者が等しければ途中で暗号鍵の改竄が行われておらず、暗号化計算が正しく行われていることが確認できる。ステップS112の判別によって一致であったときは更に検算2を実行するか否かが判別される(S109)。
その判別結果が一致のときは演算レジスタCPREG3の暗号文を外部に出力して正常終了する。
ステップS108又はS112で不一致を判別したときは、リセットなどによってCPUの動作を停止させ、或いは他の例外処理や割込み処理によって、上記不一致に係る別のエラー処理行う。
本発明は上記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
例えば秘密鍵はDES又はAESに準拠するものに限定されない。データ処理装置はICカードマイクロコンピュータ若しくはセキュアマイコンと称されるシングルチップのマイクロコンピュータに限定されない。マルチチップで単一パッケージに収容されたモジュール構成のマイクロコンピュータ、更にはその他のシングルチップ形態の半導体集積回路に広く適用する事が可能である。
検証処理部はCPUとその動作プログラムで構成されたプログラム処理部に限定されず、全部又は一部をハードロジックに置き換えて構成することも可能である。暗号化処理部は暗号コプロセッサに限定されない。これについても一部または全部をハードロジックに置き換えて構成することも可能である。
1,0混在の定数は0x5555又は0xAAAAに限定されず、その他任意の1,0を含むパターンであればよい。但し、ハミングウェイトの偏りという観点からすれば、上記が好適である。
分割部分同士のXOR演算ではその上位又は下位に連数を付加したが、ハミングウェイトの偏りという観点をある程度犠牲にする場合には、その付加を要しない。一つの乱数に対するビットローテーションにつても同様である。また、判別のリターンコードの返し方についても図11のような判別結果に応じて処理ステップを変更する場合においても、ダミーステップを採用してタイミング的なリークの虞を抑制するようにしてもよい。
また、検証処理は復号やその他のデータ処理に際しても適用することが可能である。暗号化処理への適用が好適であるが、其れに限定されることはない。
検証処理プログラムにおける制御手順は実施の形態2で説明した手順に限定されず、実施の形態3で説明した手順も当然採用可能である。検証処理プログラムはフラッシュメモリなどの不揮発性記憶装置に格納して提供するだけでなく、磁気記憶装置、光ディスクなどから読み込み、或いは、外部のネットワークからダウンロードするように、提供することも可能である。
100 マイクロコンピュータ(MCU)
106 内部バス106
101 中央処理装置(CPU)
102 RAM102
103 不揮発性メモリ
104 暗号コプロセッサ(COPRO)
105乱数生成器
107 入出力回路
ADR1,ADR2 メモリアドレス
CPREG1,CPREG2 演算レジスタ
CPREG3 演算結果レジスタ
CMP1、CMP2,CMP3 比較する処理
Adat、Bdat 比較対象とされる暗号化処理情報
A[0],A[1],A[2],A[3] 暗号化処理情報Adatの4分割のデータ
B[0],B[1],B[2],B[3] 暗号化処理情報Bdatの4分割のデータ
LST リストLST
200 選択ロジック
300 比較演算ロジック
RTBL ランダムテーブル
L[0],L[1],L[2],L[3] リストLSTの比較順序データ
301,302、303 CPU101の汎用レジスタ
r1、r2、r3 乱数
310、311 排他的論理(XOR)
304 汎用レジスタ
RSLT 演算結果
R[0],R[1],R[2],R[3] 演算結果のデータ
401 OR演算結果
402 AND演算結果
403 8バイトの比較演算結果
410,411,412,413 論理和(OR)
420,421,422,423 論理積(AND)
430 論理積(AND)
500_1,500_2,500_3 8バイト比較処理
RSLT_1,RSLT_2,RSLT_3 8バイト比較結果
510,511,512 論理和演算処理
530 OR演算結果(R_OR)
520,521,522 論理積演算処理
531 AND演算結果(R_AND)
600 リターンコード生成処理
ADRS 先頭アドレス
ADRE エンドアドレス
SP 処理先頭ポインタ
600 AES鍵レジスタ(ACKR)
601 AESコントロールレジスタ(ACCR)
602 AES入出力データ暗号化レジスタ
603 AES平文/暗号文レジスタ(ACMR)
604 AES初期化ベクトルレジスタ(ACVR)
605 セレクタ
606 AESコプロセッシングユニット

Claims (20)

  1. 記憶部から暗号化処理部にロードされた暗号化処理情報を用いて暗号化処理を行うデータ処理装置であって、前記暗号化処理部にロードされた暗号化処理情報が改竄されたか否かを前記記憶部に格納されている暗号化処理情報との比較によって判別する検証処理部を有し、
    前記検証処理部は、比較対象とされる夫々の暗号化処理情報を所定バイト数単位に分割し、分割部分の前記所定バイト数単位の比較順序を可変にして対応する分割部分同士の比較を全部行い、その比較結果を用いて前記比較対象が一致するか否かを判別する、データ処理装置。
  2. 請求項1において、前記検証処理部は、前記比較対象とされる暗号化処理情報における夫々の分割部分の相対位置を示すオフセット情報の組み合わせの態様をデータテーブルから乱数を用いて選択し、選択した態様に従った順番で前記分割部分の比較を行う、データ処理装置。
  3. 請求項1において、前記検証処理部は、前記比較対象とされる暗号化処理情報がMバイトのN倍のデータ長を有するとき(Mは2以上の整数、Nは正の整数)、前記暗号化処理情報をMバイト毎に2バイト単位に分割し、分割部分の2バイト単位の比較順序を可変にしてMバイト毎の比較を行い、Mバイト毎の全部の比較結果を用いて前記比較対象が一致するか否かを判別する、データ処理装置。
  4. 請求項3において、前記検証処理部は、前記比較対象とされる暗号化処理情報における夫々のMバイト内の2バイト単位の分割部分の相対位置を示す情報の組み合わせの態様をデータテーブルから乱数を用いて選択し、選択した態様に従った順番で前記分割部分の比較を行う、データ処理装置。
  5. 請求項1において、前記検証処理部は、前記比較対象とされる暗号化処理情報がM×N+Lのバイト長(Mは4以上の整数、Nは正の整数であって、Lは2の倍数であってL<M)のデータ長を有するとき、前記暗号化処理情報をN−1個のMバイトとM+Lバイトに分割し、分割部分の2バイト単位の比較順序を可変にしてMバイト毎の比較とM+Lバイトの比較を行い、Mバイト毎の比較とM+Lバイトの比較との全部の比較結果を用いて前記比較対象が一致するか否かを判別する、データ処理装置。
  6. 請求項5において、前記検証処理部は、前記比較対処とされる暗号化処理情報における夫々のMバイト内の2バイト単位の分割部分の相対位置を示す情報の組み合わせの態様をデータテーブルから乱数を用いて選択し、選択した態様に従った順番で前記分割部分の比較を行う、データ処理装置。
  7. 請求項6において、前記検証処理部は、前記比較対処とされる暗号化処理情報におけるM+Lバイトに分割した部分の2バイト単位の比較順序をシャッフルアルゴリズムを用いて決定する、データ処理装置。
  8. 請求項1において、前記分割部分同士の比較は、一方の分割部分をそれと同じビット数の1,0混在の定数とビット単位の排他的論理和を採り、その排他的論理和結果を他方の分割部分とビット単位の排他的論理和を採る処理である、データ処理装置。
  9. 請求項8において、前記分割部分同士の比較は、前記分割部分及び前記定数の上位側にダミーデータを付加した状態で行い、前記分割部分の比較結果は前記ダミー部分を除外した部分とする、データ処理装置。
  10. 請求項9において、前記ダミーデータはレジスタにロードされた乱数であり、一部の乱数はレジスタ上でビットローテンションされる、データ処理装置。
  11. 請求項8において、前記検証処理部は、前記比較対象とされる暗号化処理情報に対して前記分割部分同士の比較によって得られた比較結果の内の一つを前記定数とビット単位で論理和を採り、その論理和結果を次の前記分割部分同士の比較結果と論理和を採る操作を最後の前記分割部分同士の比較結果まで行って累積的論理和結果を取得すると共に、前記暗号化処理情報に対して前記分割部分同士の比較によって得られた比較結果の内の一つを前記定数とビット単位で論理積を採り、その論理積結果を次の前記分割部分同士の比較結果と論理積を採る操作を最後の前記分割部分同士の比較結果まで行って累積的論理積結果を取得し、前記累積的論理和結果と前記累積的論理積結果との論理積に基づいて、前記比較対象が一致するか否かの判別結果を生成する、データ処理装置。
  12. 請求項11において、前記検証処理部は、前記累積的論理和結果と前記累積的論理積結果との論理積の結果とその期待値との差を演算し、演算結果に応じたゼロフラグの操作を行い、ゼロフラグを有するコンディションコードレジスタの値を用いて生成したアドレスによってリードアクセスを行い、リードしたデータを、前記比較対象が一致するか否かの判別結果として所定のレジスタにロードし、
    前記アドレスは、前記コンディションコードレジスタの値に規定値を加算した値であり、前記累積的論理和結果と前記累積的論理積結果との論理積の結果がその期待値に等しい場合と、等しくない場合とで、アドレスビットの1ビットだけが相違するアドレスとされ、
    前記比較対象が一致するか否かの判別結果は、一致の場合と不一致の場合とでデータビットの1ビットだけが相違するデータとされる、データ処理装置。
  13. 請求項1において、前記比較対象とされる暗号化処理情報の一つである、前記暗号化処理部にロードされた暗号化処理情報は、前記暗号化処理部で暗号化処理の演算が行われる前の情報であり、暗号化に用いる鍵又は暗号化の対象になる平文の情報である、データ処理装置。
  14. 請求項1において、前記比較対象とされる暗号化処理情報の一つである、前記暗号化処理部にロードされた暗号化処理情報は、前記暗号化処理部で暗号化されたデータを復号することによって得られた情報であり、暗号化の対象になった平文に対応する情報である、データ処理装置。
  15. 記憶部から暗号化処理部にロードされた暗号化処理情報を用いて暗号化処理を行うデータ処理装置のCPUが実行する検証処理プログラムであって、
    前記暗号化処理部にロードされた暗号化処理情報が改竄されたか否かを前記記憶部に格納されている対応する暗号化処理情報との比較によって判別するために、比較対象とされる夫々の暗号化処理情報を所定バイト数単位に分割し、分割部分の前記所定バイト数単位の比較順序を可変にして対応する分割部分同士の比較を全部行い、その比較結果を用いて前記比較対象が一致するか否かを判別する処理を制御する、検証処理プログラム。
  16. 請求項15において、前記比較対象とされる暗号化処理情報における夫々の分割部分の相対位置を示す情報の組み合わせの態様をデータテーブルから乱数を用いて選択し、選択した態様に従った順番で前記分割部分を比較する処理を制御する、検証処理プログラム。
  17. 請求項15において、前記比較対象とされる暗号化処理情報がMバイトのN倍のデータ長を有するとき(Mは2以上の整数、Nは正の整数)、前記暗号化処理情報をMバイト毎に2バイト単位に分割し、分割部分の2バイト単位の比較順序を可変にしてMバイト毎の比較を行い、Mバイト毎の全部の比較結果を用いて前記一致するか否かを判別する処理を制御する、検証処理プログラム。
  18. 請求項17において、前記比較対象とされる暗号化処理情報における夫々のMバイト内の2バイト単位の分割部分の相対位置を示す情報の組み合わせの態様をデータテーブルから乱数を用いて選択し、選択した態様に従った順番で前記分割部分を比較する処理を制御する、検証処理プログラム。
  19. 請求項15において、前記比較対象とされる暗号化処理情報がM×N+Lのバイト長(Mは4以上の整数、Nは正の整数であって、Lは2の倍数であってL<M)のデータ長を有するとき、前記暗号化処理情報をN−1個のMバイトとM+Lバイトに分割し、分割部分の2バイト単位の比較順序を可変にしてMバイト毎の比較とM+Lバイトの比較を行い、Mバイト毎の比較とM+Lバイトの比較との全部の比較結果を用いて前記比較対象が一致するか否かを判別する処理を制御する、検証処理プログラム。
  20. 請求項19において、前記比較対象とされる暗号化処理情報における夫々のMバイト内の2バイト単位の分割部分の相対位置を示すオフセット情報の組み合わせの態様をデータテーブルから乱数を用いて選択し、選択した態様に従った順番で前記分割部分を比較する処理を制御する、検証処理プログラム。
JP2012130619A 2012-06-08 2012-06-08 データ処理装置及び検証処理プログラム Pending JP2013255157A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012130619A JP2013255157A (ja) 2012-06-08 2012-06-08 データ処理装置及び検証処理プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012130619A JP2013255157A (ja) 2012-06-08 2012-06-08 データ処理装置及び検証処理プログラム

Publications (1)

Publication Number Publication Date
JP2013255157A true JP2013255157A (ja) 2013-12-19

Family

ID=49952314

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012130619A Pending JP2013255157A (ja) 2012-06-08 2012-06-08 データ処理装置及び検証処理プログラム

Country Status (1)

Country Link
JP (1) JP2013255157A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106549757A (zh) * 2015-09-21 2017-03-29 北大方正集团有限公司 Web服务的数据真伪识别方法、服务端和客户端
CN112464258A (zh) * 2020-11-02 2021-03-09 中国银联股份有限公司 数据加、解密方法、装置、设备及存储介质

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106549757A (zh) * 2015-09-21 2017-03-29 北大方正集团有限公司 Web服务的数据真伪识别方法、服务端和客户端
CN106549757B (zh) * 2015-09-21 2020-03-06 北大方正集团有限公司 Web服务的数据真伪识别方法、服务端和客户端
CN112464258A (zh) * 2020-11-02 2021-03-09 中国银联股份有限公司 数据加、解密方法、装置、设备及存储介质
CN112464258B (zh) * 2020-11-02 2024-03-19 中国银联股份有限公司 数据加、解密方法、装置、设备及存储介质

Similar Documents

Publication Publication Date Title
EP3682362B1 (en) Call path dependent authentication
US20210050313A1 (en) Cryptographic device arranged to compute a target block cipher
US9053300B2 (en) Device and a method for generating software code
RU2586020C2 (ru) Способ применения контрмер против атак по сторонним каналам
US10678707B2 (en) Data processing device and method for cryptographic processing of data
US8200727B2 (en) Method and apparatus for verifying and diversifying randomness
US8688995B2 (en) Method and apparatus for detection of a fault attack
US20170063524A1 (en) Protection of a rijndael algorithm
Šišejković et al. Control-lock: Securing processor cores against software-controlled hardware trojans
CN107798248B (zh) 防止差分故障分析的软件保护
US8720600B2 (en) Method of detecting a fault attack
JP2013255157A (ja) データ処理装置及び検証処理プログラム
JP2005045760A (ja) 暗号処理方法及び装置
US20210143978A1 (en) Method to secure a software code performing accesses to look-up tables
WO2023001624A1 (en) Securely executing software based on cryptographically verified instructions
CN100470438C (zh) 具有微处理器的电子模块中逻辑或数学操作符的保护方法
Hossain et al. Hexon: Protecting firmware using hardware-assisted execution-level obfuscation
Yavarzadeh et al. Pathfinder: High-Resolution Control-Flow Attacks Exploiting the Conditional Branch Predictor
KR101889243B1 (ko) 다수의 상이하고 독립적인 분기를 사용하여 민감한 계산을 실행하는 방법
US20230195907A1 (en) Apparatus And Method For Defending Against Control Flow Attack, And Processor
EP4195579A1 (en) Asynchronous code execution for enhanced performance and security measures protecting digital security devices
US20200382271A1 (en) Methods for implementing and obfuscating a cryptographic algorithm having a given secret key
US20240235808A1 (en) Method of protecting a cryptographic device against side-channel attacks
EP4398511A1 (en) Method of protecting a cryptographic device against side-channel attacks
WO2022000223A1 (zh) 一种基于定制硬件安全属性的内核敏感数据保护方法