説明

暗号演算回路装置

【課題】
従来、マスク化に伴う複雑な回路の追加が必要で、ゲート規模や演算量が増大し、回路の消費電力が増加するという問題があった。
【解決手段】
本発明では、入力データに所定の関数処理を施して出力データを生成する関数処理部を有し、初回の処理では外部からの入力データに前記関数処理を実行し、以降の処理では生成された出力データを次回の入力データとして前記関数処理行う一連の処理を所定回数繰り返して得られた出力データを暗号データとして外部に出力する暗号演算回路装置において、前記関数処理部の出力データに等しいビット幅の乱数データを生成する乱数生成部と、前記関数処理部の出力データまたは前記乱数データを一時的に格納する2つのデータ保持部と、前記乱数生成部と前記関数処理部と前記データ保持部の処理タイミングを制御する制御部とを設けたことを特徴とする。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、暗号アルゴリズムの処理を行う暗号演算回路装置に関する。特に暗号演算回路での演算中間値の物理的変化量を解析して暗号を解読する暗号解析攻撃を回避する技術に関する。
【背景技術】
【0002】
近年、セキュリティ機能を備えたICカードや携帯端末が広く利用されている。このようなセキュリティを要する装置は何らかの暗号アルゴリズムが用いられており、第三者に情報が漏洩しないような仕組みになっている。ところが最近では、このようなICカードや携帯端末などに実装された暗号アルゴリズムに対するサイドチャネル攻撃が大きな脅威となっている。サイドチャネル攻撃とは、本来、第三者が取得することを想定しない暗号演算回路が動作する際の消費電力や漏洩電磁波或いは演算時間などの漏洩情報を手掛りにして、秘密情報を不正に入手しようとする攻撃のことである。このようなサイドチャネル攻撃の中でも、暗号演算中に得られる消費電力の変化量を統計処理して秘密情報を解読する手法は、差分電力解析(DPA:Differential Power Analysis)攻撃と呼ばれ大きな脅威となっている。
【0003】
このようなセキュリティ装置への暗号アルゴリズムの実装方法には、CPU(中央演算ユニット)によるソフトウェア実装とワイヤードロジックなどによるハードウェア実装の2つの方法がある。ICカードや簡易な携帯端末などへの暗号アルゴリズムの実装は、処理速度の問題や低消費電力の要求などからハードウェア実装が採用される場合が多い。
【0004】
ここで、AES(Advanced Encryption Standard)に代表されるブロック暗号アルゴリズムをハードウェア実装する場合の例について説明する。図6はラウンド関数を演算する暗号演算回路装置900の構成を示した図で、攪拌部901と鍵スケジューリング部902とに分けて描いてある。
【0005】
図6において、攪拌部901は、外部から入力する平文(または暗号文)とラウンド処理後のデータとを選択するセレクタ903と、所定の処理関数でラウンド処理を行う組合せ回路904と、組合せ回路904の出力データを一時的に保持するレジスタ905と、レジスタ905の出力データまたはAll=0(全て0のデータ)を選択して外部に出力するセレクタ906とで構成される。攪拌部901は、平文(または暗号文)を処理対象データとして入力し、鍵スケジューリング部902が秘密鍵から作成する副鍵(ラウンド鍵)を用いて所定回数のラウンド処理を行って暗号化し、暗号文(または平文)を処理済データとして出力する。
【0006】
攪拌部901において、1ラウンド処理は1クロックで行われ、セレクタ903,組合せ回路904およびレジスタ905の一巡するラウンド処理をクロックに同期して所定回数繰り返す。つまり、組合せ回路904のラウンド処理を基本とする攪拌部901では、鍵スケジューリング部902が出力する副鍵の値と1クロック前のラウンド処理の中間値とを用いて新たなラウンド処理を行い、その演算結果を新たな中間値としてレジスタに格納する処理を繰り返す。そして、クロック毎にラウンド処理関数の演算結果が中間値としてレジスタ905に保持され、必要なラウンド回数分だけクロックが進んだ後、レジスタ905に現れた値が最終演算結果となり、この値を暗号文(暗号化の場合)または平文(復号化の場合)として暗号演算回路装置900の外部に出力する。このように、途中のラウンド処理の演算中間値など不必要な情報を外部に出力することを回避するため、全ラウンド処理を終了した最終結果のみが出力されるようになっている。
【0007】
一方、鍵スケジューリング部902は、外部から入力する秘密鍵と鍵スケジューリング処理後のデータとを選択するセレクタ907と、セレクタ907の出力データを一時的に保持するレジスタ908と、所定の処理関数で鍵スケジューリング処理を行う組合せ回路909とで構成される。鍵スケジューリング部902は、暗号演算回路装置900の外部から与えられる秘密鍵から各ラウンド処理に必要な副鍵を生成する。
【0008】
また、制御部950は、セレクタ903,レジスタ905,セレクタ906,セレクタ907およびレジスタ908にクロック,制御信号a,制御信号bおよび制御信号cを出力して各部の処理タイミングを制御する。
【0009】
ここで、秘密鍵の値は第三者に知られないように安全に管理する必要があるが、何らかの方法により各ラウンド処理で使用する副鍵の値が暴かれると、鍵スケジューリング部902の処理を逆算することにより秘密鍵の値が第三者に知られてしまうという問題がある。従って、暗号演算回路の設計においては、差分電力解析攻撃などにより副鍵を推定されないように考慮する必要がある。
【0010】
差分電力解析攻撃の中でも、非特許文献1に示すCPA(Correlation Power Analysis)攻撃は、演算中間値を保持するレジスタ値の変化に着目した攻撃法であり、特にハードウェア実装されたブロック暗号アルゴリズムに対して非常に有効な攻撃法として知られている。以下、AESアルゴリズムに対するCPA攻撃の概要について述べる(非特許文献1参照)。
【0011】
先に説明した図6のブロック暗号アルゴリズムのハードウェア構成を示す暗号演算回路装置900の攪拌部901において、1クロック後のレジスタ905の値の変化量(ハミング距離)が大きければ、その時点での消費電力量も大きい筈であると考えることができる。また、レジスタ905の値が変化すれば、それに応じてラウンド処理を行う組合せ回路904を構成する論理ゲートの入力値も変化するので論理ゲートの状態遷移が行われる。この結果、レジスタ905のハミング距離とその時点での消費電力量には相関が見られる筈である。ここで、ラウンド処理の途中でレジスタ905の中間値が外部に出力されないように制御されている場合、レジスタ905のハミング距離を計算できる可能性があるのは、外部からの入力を伴う初期ラウンドと外部への出力を伴う最終ラウンドの2箇所である。ここでは、最終ラウンドが攻撃ポイントとなるケースについて説明する(非特許文献1参照)。
【0012】
最終ラウンドの1クロック前のレジスタ値は最終ラウンドへの副鍵値を仮定すれば、AESの最終ラウンド処理を逆に辿って計算することが可能である。例えば図7に示すように、最終ラウンド処理はSubBytes−>ShiftRow−>AddKeyの処理で、1byte単位の処理に閉じているので、副鍵の推定対象としてbyte値を0x00から0xffの256通りの値のいずれか1つに決めれば、1クロック前の処理byte値を計算できる。図7において、1クロック前のレジスタ値をsi,j、暗号文出力をci,j、副鍵をki,jとした場合(尚、i,jは整数で4×4の16byteの座標位置を示す)、例えば図7に示すように、1クロック前の処理byte値s2,0は、s2,0=c2,2(+)k2,2のように計算できる(ここで(+)はEXOR演算を示す)。従って、座標(2,0)位置の1byteの成分に関する最終ラウンドの1クロック前後のハミング距離はs2,0(+)c2,0となり、逆算するとc2,0(+)c2,2(+)k2,2のように計算できる。ここで、先に説明したように、k2,2は0x00から0xffのいずれかの値を取り得るが、256通りの値のいずれか1つに決めるだけで、1クロック前の処理byte値を計算できる。尚、残りの座標位置の15byteの成分についても同様である。
【0013】
ここで、1≦i≦N(Nは自然数)なる異なるN個の平文(c)について演算を行い、副鍵kの値から定まるハミング距離をh(k)とし、消費電力との相関をピアソンの相関係数として求める。また、cに対する消費電力をp(t)とすると、
(k)とp(t)のピアソン相関係数Corr(h(k),p(t))は、
【0014】
【数1】

【0015】
【数2】

【0016】
このような相関係数を副鍵が取り得る0x00から0xffの全ての値について計算する。
【0017】
上記で説明したように、ハミング距離と消費電力は正の相関を持つので、相関係数が最大となる副鍵の値が真の副鍵となる。このようにして16byte全ての副鍵の値を推定すれば、鍵スケジューリング処理部902の処理を逆算することにより秘密鍵の値を不正に取得することができる。
【0018】
このようなCPA攻撃に代表される差分電力解析攻撃に対する従来の対策は、乱数を用いて演算の中間値をマスク化する方法が知られている(例えば非特許文献2参照)。同文献では、AESアルゴリズムのキー関数であるSubBytes関数のマスク化について述べられているが、MixColumn関数などの他関数についてもマスク化を施し、ラウンド処理途中のレジスタに格納される中間値を含めて、演算最終結果である暗号文を除く全ての中間値が乱数によってマスク化できるので、本来のラウンド処理結果をマスク化した値がレジスタに格納される。
【0019】
図8は、AESのラウンド処理関数(SubBytes−>ShiftRows−>MixColumns−>AddRoundKey)を乱数によりマスク処理する場合の構成を示す(例えば非特許文献2参照)。図8において、fは同型写像、gは同型写像の逆写像とAESアフィン変換の線形変換部との合成写像をそれぞれ示す。SubBytesの中のガロア体逆元算x−1は、非特許文献2のFig.8に記載の回路を示し、r,rtmp1,rtmp2,rはそれぞれM,Z,W,Fに対応するマスク用乱数である。ここで、ShiftRowsは単なるByteシフト演算であり、またAddRoundKeyはEXOR演算であるため、一般的な関数をそのまま用いることができる。また、MixColumnは線形関数であり、MixColumn(1)で処理結果に対してMixColumn関数処理した値とMixColumn(2)で乱数に対して同様のMixColumn関数処理した値とのEXOR演算を行うことによってMixColumn(1)の入力の乱数成分をキャンセルできる。ここで、図6で説明したようなマスク処理を行わない通常のラウンド処理関数と比較すると、乱数とのEXOR演算の他に乱数値の変換のためのf,gの関数やMixColumn関数などが追加されている。この結果、通常のラウンド処理の演算結果の値と乱数値とがEXOR演算された値がレジスタに格納されるので、乱数のマスク効果によってラウンド処理前後の値の差分量からハミング距離を計算することができない。このため、差分量と正しい副鍵値との相関が小さくなって相関係数のピークが出現しなくなり、CPA攻撃に代表される差分電力解析攻撃を防御することができる。
【0020】
このようにして、従来技術では、図8に示すような複雑な暗号演算回路によって差分電力解析攻撃を防御することが行われていた。
【先行技術文献】
【非特許文献】
【0021】
【非特許文献1】菅原,本間,青木,佐藤,“サイドチャネル攻撃標準評価FPGAボードを用いた暗号ハードウェアに対する電力解析実験,”マルチメディア,分散,協調とモバイル(DICOMO2007)シンポジウム,7D−5,2007.
【非特許文献2】E.Trichina,“Small Size,Low Power Side Channel−Immune AES Co−processor Design and Synthesis Results”,AES2004.
【発明の概要】
【発明が解決しようとする課題】
【0022】
先に説明したように、従来技術によるCPA攻撃の防御対策は、暗号演算回路の構成が複雑で処理量が多く、回路規模やコスト的な問題があった。例えば、非特許文献2に示された防御対策は、SubBytes部のガロア体逆元演算途中の中間値をすべてマスク化するCPA攻撃対策を行っている。このため、SubBytes部だけでなく、MixColumn部,AddKey部などラウンド処理全体の組合せ回路をマスク化する必要があるので、マスク化に必要な乱数をラウンド処理関数を構成する論理ゲート毎に用意しなければならない。この結果、マスク化に伴うEXOR回路や予備回路の追加などが必要となり、ラウンド処理関数の回路が複雑化してゲート規模が増大し、さらに演算量も増加するため回路の消費電力が増大するという問題が生じる。
【0023】
上記課題に鑑み、本発明の目的は、マスク化を施さない暗号化処理関数のブロックをそのまま流用して、EXORゲートや予備回路の新規実装を行わずにゲート回路規模の増大や消費電力の増加を抑えながらCPA攻撃を回避することが可能な暗号演算回路装置を提供することである。
【課題を解決するための手段】
【0024】
本発明の請求項1に係る暗号演算回路装置は、入力データに所定の関数処理を施して出力データを生成する関数処理部を有し、初回の処理では外部からの入力データに前記関数処理を実行し、以降の処理では生成された出力データを次回の入力データとして前記関数処理行う一連の処理を所定回数繰り返して得られた出力データを暗号データとして外部に出力する暗号演算回路装置において、前記関数処理部の出力データに等しいビット幅の乱数データを生成する乱数生成部と、前記関数処理部の出力データまたは前記乱数データを一時的に格納する2つのデータ保持部と、前記乱数生成部と前記関数処理部と前記データ保持部の処理タイミングを制御する制御部とを設けたことを特徴とする。
【0025】
請求項1では、例えば処理タイミング(制御部)の1クロック毎に暗号演算の処理を繰り返し実行する組合せ回路からなる処理関数(関数処理部)の演算結果を演算中間値として2つのレジスタ(2つのデータ保持部)のいずれか一方に格納してクロック信号の進行により所定回数分の処理演算を繰り返し実行する暗号演算回路装置で、処理単位であるデータサイズに等しいビット幅の乱数データを処理対象データ毎に新規に生成する(乱数生成部)。乱数データを生成することにより、消費電力量と演算結果との相関がなくなり、暗号演算中に得られる消費電力の変化量を統計処理して秘密情報を解読するCPA攻撃から防御することができる。
【0026】
また、本発明の請求項2に係る暗号演算回路装置は、請求項1に記載の暗号演算回路装置において、前記制御部は、前記関数処理部が初回の処理を行う1回前の処理で前記乱数生成部が生成した乱数データを前記2つのデータ保持部のいずれかに格納し、前記乱数データが格納された同一の前記データ保持部に前記関数処理部が初回の処理で生成した出力データを格納するように制御することを特徴とする。
【0027】
請求項2では、例えば一番最初のタイミングで関数処理部が生成する出力データを演算中間値としてレジスタ1またはレジスタ2の2つのレジスタ(2つのデータ保持部)のいずれかに格納するクロックタイミングの1クロック前のタイミングにおいて、レジスタ1またはレジスタ2のいずれかに乱数生成部により生成した乱数を格納するので、CPA攻撃を受けやすい初期ラウンドでの防御が可能になる。
【0028】
また、本発明の請求項3に係る暗号演算回路装置は、請求項1に記載の暗号演算回路装置において、前記制御部は、前記関数処理部が最終回の処理を行う1回前の処理で前記乱数生成部が生成した乱数データを前記2つのデータ保持部のいずれかに格納し、前記乱数データが格納された同一の前記データ保持部に前記関数処理部が最終回の処理で生成した出力データを格納するように制御することを特徴とする。
【0029】
請求項3では、例えば一番最後のタイミングで関数処理部が生成する出力データを演算中間値としてレジスタ1またはレジスタ2の2つのレジスタ(2つのデータ保持部)のいずれかに格納するクロックタイミングの1クロック前のタイミングにおいて、レジスタ1またはレジスタ2のいずれかに乱数生成部により生成した乱数を格納するので、CPA攻撃を受けやすい最終ラウンドでの防御が可能になる。
【0030】
また、本発明の請求項4に係る暗号演算回路装置は、請求項1に記載の暗号演算回路装置において、前記制御部は、前記関数処理部が初回および最終回のそれぞれの処理を行う1回前の処理で前記乱数生成部が生成した乱数データを前記2つのデータ保持部のいずれかに格納し、前記乱数データが格納された同一の前記データ保持部に前記関数処理部が初回および最終回の処理で生成した出力データを格納するように制御することを特徴とする。
【0031】
請求項4では、一番最初と一番最後のタイミングで処理が行われる関数の結果を演算中間値としてレジスタ1またはレジスタ2の2つのレジスタ(2つのデータ保持部)のいずれかに格納するクロックタイミングの1クロック前のタイミングにおいて、レジスタ1またはレジスタ2のいずれかに乱数生成部により生成した乱数を格納するので、CPA攻撃を受けやすい初期ラウンドと最終ラウンドでの防御が可能になる。
【0032】
また、本発明の請求項5に係る暗号演算回路装置は、請求項1から4のいずれか一項に記載の暗号演算回路装置において、前記制御部は、前記関数処理部の関数処理毎に前記2つのデータ保持部の少なくとも一方に前記乱数データを格納するように制御することを特徴とする。
【0033】
請求項5では、クロック毎に処理される関数の結果を演算中間値としてレジスタ1またはレジスタ2にクロックに同期して格納する際に、演算中間値を格納するレジスタとは異なる他方のレジスタに乱数生成部により生成した乱数を格納する。この結果、初期ラウンドと最終ラウンドだけでなく、全てのラウンドで消費電力量と演算結果との相関がなくなり、CPA攻撃から防御することができる。
【0034】
また、本発明の請求項6に係る暗号演算回路装置は、請求項1から4のいずれか一項に記載の暗号演算回路装置において、前記制御部は、前記関数処理部の関数処理毎に、前記関数処理部の出力データまたは前記乱数データを前記2つのデータ保持部に交互に格納するように制御することを特徴とする。
【0035】
請求項6では、クロック毎に処理される関数の結果を演算中間値としてレジスタ1またはレジスタ2にクロックに同期して交互に格納する。そして、当該クロックタイミングにおいて演算中間値を格納するレジスタとは異なる他方のレジスタに乱数生成部により生成した乱数を格納する。この結果、初期ラウンドと最終ラウンドだけでなく、全てのラウンドで消費電力量と演算結果との相関がなくなり、CPA攻撃から防御することができる。
【0036】
また、本発明の請求項7に係る暗号演算回路装置は、請求項1から6のいずれか一項に記載の暗号演算回路装置において、前記関数処理部が行う関数処理はブロック暗号アルゴリズムにおける暗号化または復号化のラウンド演算の基本処理であることを特徴とする。この結果、AESなどブロック暗号アルゴリズムを用いる暗号演算回路装置にも適用することができる。
【0037】
また、本発明の請求項8に係る暗号演算回路装置は、請求項1から6のいずれか一項に記載の暗号演算回路装置において、前記関数処理部が行う関数処理は公開鍵暗号アルゴリズムで利用されるべき乗剰余演算または楕円スカラー倍演算を実行するための繰り返し演算の基本処理であることを特徴とする。この結果、冪乗剰余演算や楕円スカラー倍演算などの公開鍵暗号アルゴリズムを用いる暗号演算回路装置にも適用することができる。
【発明の効果】
【0038】
本発明に係る暗号演算回路装置は、関数処理部の出力データに等しいビット幅の乱数データを生成して、関数処理部の出力データまたは乱数データを2つのデータ保持部に格納することにより、消費電力量と演算結果との相関がなくなり、暗号演算中に得られる消費電力の変化量を統計処理して秘密情報を解読するCPA攻撃から防御することができる。特に、マスク化を施さない暗号化処理関数(関数処理部)のブロックをそのまま流用して、EXORゲートや予備回路の新規実装を行わずにゲート回路規模の増大や消費電力の増加を抑えながらCPA攻撃を回避することができる。
【図面の簡単な説明】
【0039】
【図1】第1の実施形態に係る暗号演算回路装置100の構成例を示す説明図である。
【図2】第1の実施形態に係る暗号演算回路装置100のタイミングチャートである。
【図3】第2の実施形態に係る暗号演算回路装置200の構成例を示す説明図である。
【図4】第2の実施形態に係る暗号演算回路装置200のタイミングチャートである。
【図5】第3の実施形態に係る暗号演算回路装置300の構成例を示す説明図である。
【図6】従来のブロック暗号アルゴリズムを処理する暗号演算回路装置900の構成例を示す説明図である。
【図7】一般的なAESラウンド処理関数の最終ラウンド処理の説明図である。
【図8】従来のマスク化対策を行ったAESラウンド処理の例を示す説明図である。
【発明を実施するための形態】
【0040】
以下、図面を参照して本発明に係る暗号演算回路装置の各実施形態について詳しく説明する。
【0041】
(第1の実施形態)
図1は本実施形態に係る暗号演算回路装置100の構成例を示している。図1に示した暗号演算回路装置100は、従来技術で説明した図6の暗号演算回路装置900に対応し、AESに代表されるブロック暗号アルゴリズムについて、1クロックで1ラウンド処理を行う構成になっている。尚、図1の暗号演算回路装置100は、図6の鍵スケジューリング部902に相当する部分を含めずに攪拌部101と制御部150とで構成され、副鍵は外部から入力する構成になっているが、鍵スケジューリング部902と同じブロックを含めて暗号演算回路装置100としても構わない。
【0042】
図1において、攪拌部101は、外部から入力する平文(または暗号文)またはラウンド処理後のデータとを選択するセレクタ103と、所定の処理関数でラウンド処理を行う組合せ回路104と、乱数生成部105と、組合せ回路104の出力データまたは乱数生成部105が生成する乱数データとを選択するセレクタ106と、セレクタ106の出力データを一時的に保持するレジスタ107と、組合せ回路104の出力データまたは乱数生成部105が生成する乱数データとを選択するセレクタ108と、セレクタ108の出力データを一時的に保持するレジスタ109と、レジスタ109の出力データまたはAll=0(全て0のデータ)を選択して外部に出力するセレクタ110とで構成される。
【0043】
また、制御部150は、乱数生成部105,レジスタ107およびレジスタ109にクロックを供給し、セレクタ103に制御信号1,セレクタ106に制御信号2,セレクタ108に制御信号3,セレクタ110に制御信号4をそれぞれ出力して攪拌部101の処理タイミングを制御する。尚、制御部150は、暗号演算回路装置100全体の動作を制御し、図6の鍵スケジューリング部902を含む場合は、図6の制御部905と同様に鍵スケジューリング部902に対してもクロックや制御信号を出力する。この場合、制御部150は鍵スケジューリング部902のセレクタ907に制御信号cを出力し、レジスタ908にクロックを供給する。
【0044】
図1の攪拌部101は、従来技術の図6の攪拌部901と同様に、平文(または暗号文)を処理対象データとして入力し、鍵スケジューリング部902などで秘密鍵から作成する副鍵(ラウンド鍵)を用いて所定回数のラウンド処理を行って暗号化し、暗号文(または平文)を処理済データとして出力する。
【0045】
攪拌部101において、1ラウンド処理は1クロックで行われ、セレクタ103,組合せ回路104,セレクタ106およびレジスタ107を一巡する一連のラウンド処理をクロックに同期して所定回数だけ繰り返す。つまり、組合せ回路104のラウンド処理を基本とする攪拌部101では、鍵スケジューリング部102が出力する副鍵の値と1クロック前のラウンド処理の中間値とを用いて新たなラウンド処理を行い、その演算結果を新たな中間値としてレジスタ107に格納する処理を繰り返す。そして、クロック毎にラウンド処理関数の演算結果が中間値としてレジスタ107に保持され、必要なラウンド回数分だけクロックが進んだ後、最終ラウンドで組合せ回路104が出力するデータが最終演算結果となり、この値を暗号文(暗号化の場合)または平文(復号化の場合)としてセレクタ108を介してレジスタ109に保持され、セレクタ110を介して暗号演算回路装置100の外部に出力する。
【0046】
このように、途中のラウンド処理の演算中間値などはレジスタ107に格納され、最終ラウンドの最終結果のみレジスタ109に格納されて外部に出力される。
【0047】
ここで、図1において、外部からの入力データ(平文or暗号文)またはラウンド処理関数の中間値を保持したレジスタ107の出力データを選択するセレクタ103の制御信号1と、レジスタ109に保持された出力データまたは固定値(本実施例ではall=0)をセレクタ110の制御信号4とは、図6の攪拌部901のセレクタ903の制御信号aおよびセレクタ906の制御信号bにそれぞれ対応する。
【0048】
尚、本実施形態では、ラウンド処理の演算結果(出力データ)または乱数生成部105が生成する乱数値(乱数データ)を保持するためのレジスタとして、ラウンド処理の中間値を保持するレジスタ107および演算最終結果の最終値を保持するレジスタ109の2系統のレジスタを備えている。ここで、制御信号2はラウンド処理関数の演算結果と乱数生成部105で生成された乱数値のどちらをレジスタ107に格納するかを選択する制御信号であり、制御信号3はラウンド処理関数の演算結果と乱数生成部105で生成された乱数値のどちらをレジスタ109に格納するか選択する制御信号である。
【0049】
次に、図1の暗号演算回路装置100の動作について図2のタイミングチャートを用いて詳しく説明する。図2は、制御部150が出力するクロックと、制御信号1と、制御信号2と、制御信号3と、制御信号4と、レジスタ107と、レジスタ109との処理タイミングの関係を描いたタイミングチャートである。尚、図2において、初期ラウンドから最終ラウンドまでの(n+1)回の全ラウンドを1ブロック演算とし、1ブロック演算毎に処理結果の暗号文(or平文)が外部に出力される。また、図1の組合せ回路104によるラウンド処理関数は1クロック周期毎に実行され、レジスタ107およびレジスタ109は1クロック周期で各レジスタへの入力データを保持する。
【0050】
図2において、タイミングtからtn+2はクロック周期毎のタイミングを示し、dからdは組合せ回路104によるラウンド処理関数の各ラウンド毎の出力データを示している。例えばdは初期ラウンド処理関数の結果の値、dは第1ラウンド処理関数の結果の値、dは最終ラウンド処理関数の結果の値をそれぞれ示している。また、rおよびr’は乱数生成部105が1ブロック演算周期毎の更新頻度で生成する乱数を示しており、乱数rと乱数r’は異なる乱数値である。尚、図1において、乱数発生部105にも制御部150からクロックが入力されているが、図2のフローチャートでは、乱数発生部105は最終ラウンド毎に新たな乱数を発生するものとして説明する。この場合は、乱数発生部105の内部に1ブロック分のクロックをカウントするカウンタを設けることで実現できる。或いは、乱数発生部105の消費電力は少し大きくなるが、単純にクロック周期毎に乱数を発生するようにしても構わない。この場合は、各ラウンド毎に乱数発生部105が発生する乱数rの値が異なるだけで、本実施形態の効果は変わらない。
【0051】
図2において、先ずタイミングtで1ブロック周期の暗号演算に先立って制御信号2がHighに制御され、乱数生成部105で生成された例えば128ビットの乱数rがレジスタ107に格納される。この間、制御信号1はLowに制御され、タイミングtで制御信号2がLowに制御され、外部から入力された平文(or暗号文)が初期ラウンド処理されてレジスタ107に格納される。タイミングtから最終ラウンドを処理するタイミングtn+1まで制御信号1はHighに制御され、各ラウンド処理毎に組合せ回路104の出力データが更新されてレジスタ107に保持される。この間、第(n−1)ラウンドを処理するタイミングtまでの間、制御信号3はHighに制御されて128ビットの乱数がレジスタ109に格納される。最終ラウンドを処理するタイミングtn+1では、制御信号2がHighに制御されて128ビットの乱数がレジスタ107に格納される。これと同時に、制御信号3がLowに制御されて最終ラウンドの処理結果がレジスタ109に格納される。制御信号4は最終ラウンド処理の確定時のみLowに制御されて演算結果がセレクタ110を介して外部に出力される。制御信号4は、最終ラウンド処理の確定時以外のタイミングではHighに制御されて固定値(例えばall=0)がセレクタ110を介して外部に出力される。タイミングtn+2では制御信号1が再びLowに制御され、先のタイミングtと同様に、次に外部から入力されるブロックの平文(or暗号文)に対して初期ラウンドの処理から最終ラウンドの処理までの1ブロックの暗号化演算が繰り返される。
【0052】
ここで、本実施形態に係る暗号演算回路装置100において、CPA攻撃のターゲットとなる初期ラウンドおよび最終ラウンドの処理に着目する。先ず、タイミングtの初期ラウンド処理においては、レジスタ107の値が乱数rからラウンド処理関数の出力データdに変化する。この時、乱数rの値はブロック演算毎に異なるので、レジスタ107の値の変化量(ハミング距離)を推定することはできない。次に、タイミングtn+1の最終ラウンドにおいては、レジスタ107の値が出力データdn−1から乱数r’に変化し、同時にレジスタ109の値が乱数rから出力データdに変化する。ここで、r’は更新された乱数値である。最終ラウンドにおいても、乱数rの影響によりレジスタ109の値の変化量(ハミング距離)を推定することができない。
【0053】
このように、本実施形態に係る暗号演算回路装置100は、副鍵を仮定して各レジスタにおけるハミング距離を逆算することができなくなり、副鍵と消費電力との相関を無くすことができる。この結果、マスク化処理などを施していない従来のラウンド処理関数をそのまま利用することができ、従来技術のようにラウンド処理関数全体を乱数によってマスク化するためのEXOR回路や予備回路の追加が不要となる。特に図1に示した本実施形態に係る暗号演算回路装置100の場合は、乱数生成部(従来のマスク化にも必要)に加え、1つのレジスタおよび2つのセレクタを追加するだけでハミング距離の計算を困難にすることができ、ゲート規模の増大と消費電力の増大を回避しつつCPA攻撃を防御することが可能となる。
【0054】
(第2の実施形態)
次に、第2の実施形態に係る暗号演算回路装置200について説明する。図3は暗号演算回路装置200の構成例を示している。図3に示した暗号演算回路装置200は、従来技術で説明した暗号演算回路装置900および第1の実施形態に係る暗号演算回路装置100と同様にAESに代表されるブロック暗号アルゴリズムに対応し、1クロックで1ラウンド処理を行う構成になっている。尚、図3の暗号演算回路装置200は、図6の鍵スケジューリング部902に相当する部分を含めずに攪拌部201と制御部250とで構成され、副鍵は外部から入力する構成になっているが、鍵スケジューリング部902と同じブロックを含めて暗号演算回路装置200としても構わない。
【0055】
第1の実施形態では乱数によるレジスタ値の変化量(ハミング距離)の算出を回避する対策を初期ラウンドと最終ラウンドに限定して行うようにしたが、第2の実施形態では初期ラウンドと最終ラウンドだけでなく中間ラウンドを含む全てのラウンドにおいてレジスタ値の変化量(ハミング距離)の算出を回避することを目的としている。
【0056】
以下、図3を用いて第2の実施形態に係る暗号演算回路装置200について詳しく説明する。図3において、攪拌部201は、外部から入力する平文(または暗号文)またはラウンド処理後のデータとを選択するセレクタ203と、所定の処理関数でラウンド処理を行う組合せ回路204と、乱数生成部205と、組合せ回路204の出力データまたは乱数生成部205が生成する乱数データとを選択するセレクタ206と、セレクタ206の出力データを一時的に保持するレジスタ207と、組合せ回路204の出力データまたは乱数生成部205が生成する乱数データとを選択するセレクタ208と、セレクタ208の出力データを一時的に保持するレジスタ209と、レジスタ207の出力データまたはレジスタ209の出力データを選択するセレクタ211と、セレクタ211の出力データまたはAll=0(全て0のデータ)を選択して外部に出力するセレクタ210とで構成される。ここで、第1の実施形態の図1の攪拌部101は組合せ回路104および乱数生成部105以外に2つのレジスタと4つのセレクタで構成されていたのに対して、第2の実施形態の図3の攪拌部201は組合せ回路204および乱数生成部205以外に2つのレジスタと5つのセレクタで構成される点が異なる。特にレジスタ207とレジスタ209の出力データを交互に選択するセレクタ211を設けた点に特徴がある。
【0057】
また、制御部250は、第1の実施形態の制御部150と同様に、乱数生成部205,レジスタ207およびレジスタ209にクロックを供給し、セレクタ203に制御信号21,セレクタ206に制御信号22,セレクタ208に制御信号23,セレクタ210に制御信号24,セレクタ210に制御信号25をそれぞれ出力して攪拌部201の処理タイミングを制御する。ここで、図1の制御信号1と図2の制御信号21および図1の制御信号4と図2の制御信号24はそれぞれ同じ処理タイミングで動作するが、その他の制御信号の処理タイミングは異なる。尚、各処理タイミングについては後で詳しく説明する。さらに、制御部250は、暗号演算回路装置200全体の動作を制御し、図6の鍵スケジューリング部902を含む場合は、図6の制御部905と同様に鍵スケジューリング部902に対してもクロックや制御信号を出力する。この場合、制御部250は鍵スケジューリング部902のセレクタ907に制御信号cを出力し、レジスタ908にクロックを供給する。
【0058】
図3の攪拌部201は、従来技術の図6の攪拌部901と同様に、平文(または暗号文)を処理対象データとして入力し、鍵スケジューリング部902などで秘密鍵から作成する副鍵(ラウンド鍵)を用いて所定回数のラウンド処理を行って暗号化し、暗号文(または平文)を処理済データとして出力する。
【0059】
攪拌部201において、1ラウンド処理は1クロックで行われ、セレクタ203から組合せ回路204,セレクタ206またはセレクタ208,レジスタ207またはレジスタ209,セレクタ211までを一巡する一連のラウンド処理をクロックに同期して所定回数だけ繰り返す。つまり、組合せ回路204のラウンド処理を基本とする攪拌部201では、鍵スケジューリング部902などから入力する副鍵の値と1クロック前のラウンド処理の中間値とを用いて新たなラウンド処理を行い、その演算結果を新たな中間値としてレジスタ207またはレジスタ209に格納する処理を繰り返す。そして、必要なラウンド回数分だけクロックが進んだ後、最終ラウンドで組合せ回路204が出力するデータを格納するレジスタ207またはレジスタ209の値がセレクタ211で最終演算結果として選択され、この値を暗号文(暗号化の場合)または平文(復号化の場合)としてセレクタ210を介して暗号演算回路装置200の外部に出力される。
【0060】
ここで、本実施形態では、ラウンド処理の演算結果(出力データ)または乱数生成部205が生成する乱数値(乱数データ)を保持するためのレジスタとして、ラウンド処理の中間値を保持するレジスタ207およびレジスタ209の2系統のレジスタを備えている。制御信号22および制御信号23はラウンド処理関数の演算結果と乱数生成部205で生成された乱数値のいずれかを交互にレジスタ207またはレジスタ209に格納するための制御信号であり、制御信号25はレジスタ207またはレジスタ209のいずれかに格納されたラウンド処理関数の演算結果を選択する制御信号である。
【0061】
次に、図3の暗号演算回路装置200の動作について図4のタイミングチャートを用いて詳しく説明する。図3は、制御部250が出力するクロックと、制御信号21と、制御信号22と、制御信号23と、制御信号24と、制御信号25と、レジスタ207と、レジスタ209との処理タイミングの関係を描いたタイミングチャートである。尚、図4において、初期ラウンドから最終ラウンドまでの(n+1)回の全ラウンドを1ブロック演算とし、1ブロック演算毎に処理結果の暗号文(or平文)が外部に出力される。また、図3の組合せ回路204によるラウンド処理関数は1クロック周期毎に実行され、レジスタ207およびレジスタ209は1クロック周期で各レジスタへの入力データを保持する。
【0062】
図4において、第1の実施形態の図2と同様に、タイミングtからtn+2はクロック周期毎のタイミングを示し、dからdは組合せ回路204によるラウンド処理関数の各ラウンド毎の出力データを示している。例えばdは初期ラウンド処理関数の結果の値、dは第1ラウンド処理関数の結果の値、dは最終ラウンド処理関数の結果の値をそれぞれ示している。また、rおよびr’は乱数生成部105が1ブロック演算周期毎の更新頻度で生成する乱数を示しており、乱数rと乱数r’は異なる乱数値である。尚、図3の乱数発生部205は、第1の実施形態の図1の乱数発生部105と同様に、制御部250からクロックが入力されているが、図4のフローチャートでは乱数発生部205は最終ラウンドの処理タイミング毎に新たな乱数を発生するものとして説明する。但し、乱数発生部105で説明したように、乱数発生部205は単純にクロック周期毎に乱数を発生するようにしても構わない。この場合は、各ラウンド毎にレジスタ207またはレジスタ209に格納される乱数rの値が異なるだけで、本実施形態の効果は変わらない。
【0063】
図4において、先ずタイミングtで1ブロック周期の暗号演算に先立って制御信号22がHighに制御され、乱数生成部205で生成された例えば128ビットの乱数rがレジスタ207に格納される。この間、制御信号21はLowに制御され、タイミングtで制御信号2がLowに制御され、外部から入力された平文(or暗号文)が初期ラウンド処理されてレジスタ207に格納される。
【0064】
一方、タイミングtで制御信号23はHighに制御され128ビットの乱数rがレジスタ209に格納される。制御信号25は、タイミングtまでLowに制御され、レジスタ207に格納された初期ラウンドの演算結果dが第1ラウンドの入力データとしてラウンド処理関数(組合せ回路204)に入力される。
【0065】
次のタイミングtでは制御信号22がHigh,制御信号23がLowにそれぞれ制御され、レジスタ207には128ビット乱数rが、またレジスタ209には第1ラウンドの演算結果dが格納され、タイミングtでは制御信号25がHighに制御され、レジスタ209に格納されたラウンド処理関数の演算結果dが第2ラウンドの入力データとしてラウンド処理関数に入力される。
【0066】
タイミングtでは、制御信号22および制御信号23が1つ前のクロック周期(3クロック目)とはそれぞれ逆相に制御され、レジスタ207には第1ラウンドの演算結果dが、またレジスタ209には128ビット乱数rが格納される。タイミングtでは、制御信号25がLowに制御されレジスタ207に格納されたラウンド処理関数の演算結果dが第3ラウンドの入力データとしてラウンド処理関数に入力される。同様の動作を最終ラウンドまで繰り返す。
【0067】
最終ラウンドでは、ラウンド処理の総数に応じてレジスタ207またはレジスタ209のいずれかにラウンド処理関数の最終演算結果(暗号文または平文)が格納されており、制御信号24をLowに制御することにより最終演算結果の値が暗号演算回路装置200の外部に出力される。
【0068】
そして、次のブロック演算では、前のブロックの最終演算結果が格納されたレジスタ207またはレジスタ209のいずれかのレジスタとは異なる他方のレジスタへ初期ラウンドの演算結果が格納される。図4の場合はレジスタ209に次のブロック演算の初期ラウンドの演算結果d’が格納され、レジスタ207には乱数発生部205が制御信号24のタイミングで新たに発生した乱数r’が格納される。
【0069】
このように1クロック毎に制御信号22および制御信号23を交互に反転することにより、またレジスタ207またはレジスタ209に交互に格納されるラウンド処理関数の演算結果を制御信号25によって交互に選択することにより、レジスタ207またはレジスタ209にはラウンド処理関数の演算結果d(iは整数)と乱数発生部205が発生する乱数rとが交互に格納される。
【0070】
ここで、レジスタ207またはレジスタ209において、各々のレジスタに格納される値が乱数−>ラウンド処理関数の演算結果−>乱数−>ラウンド処理関数の演算結果−>乱数−>・・・というように、乱数が必ず隔クロック毎に格納されるので、どのクロックタイミングにおいても各レジスタの値の変化量(ハミング距離)をランダム化することができる。この結果、全てのクロック(全てのラウンド処理)において、クロック前後のレジスタ207およびレジスタ209に格納される値のハミング距離がr(+)dとなる(ここで(+)はEXOR演算を示す)ので、副鍵を仮定して各レジスタに格納される値のハミング距離を逆算することができなくなる。さらに、乱数は暗号化対象であるデータ単位を処理するブロック演算周期で新しい値に更新されるため、副鍵と消費電力との相関を無くすことができる。尚、先に説明したように、乱数をクロック周期または複数のクロック単位で発生させても構わないが、少なくともブロック演算周期毎に乱数を更新する必要がある。
【0071】
このように、本実施形態に係る暗号演算回路装置200は、マスク化処理などを施していない従来のラウンド処理関数をそのまま利用することができ、従来技術のようにラウンド処理関数全体を乱数によってマスク化するためのEXOR回路や予備回路の追加が不要となる。特に図3に示した本実施形態に係る暗号演算回路装置200の場合は、乱数生成部(従来のマスク化にも必要)に加え、1つのレジスタおよび3つのセレクタを追加するだけでハミング距離の計算を困難にすることができ、ゲート規模の増大と消費電力の増大を回避しつつCPA攻撃を防御することが可能となる。
【0072】
(第3の実施形態)
次に、第3の実施形態に係る暗号演算回路装置300について説明する。第1の実施形態に係る暗号演算回路装置100および第2の実施形態に係る暗号演算回路装置200では、AESに代表されるブロック暗号アルゴリズムに適用した場合の例を示したが、公開鍵暗号アルゴリズムにおいて冪乗剰余演算や楕円スカラー倍演算を実行する暗号モジュールに対しても、レジスタがパイプライン構成を取るハードウェア実装を行う場合には、先に示したブロック暗号アルゴリズムの場合と同様に本発明を適用することができる。以下、本実施形態では、このような公開鍵暗号アルゴリズムの演算で利用される冪乗剰余演算や楕円スカラー倍演算に本発明を適用した場合の例を示す。
【0073】
図5は、第3の実施形態に係る暗号演算回路装置300の構成図である。図5において、暗号演算回路装置300は、攪拌部301と、制御部350とで構成される。尚、図5の暗号演算回路装置300の攪拌部301の基本構成は、組合せ回路304を除いて、第2の実施形態で示した図3の攪拌部201と同じである。図3の攪拌部201では、組合せ回路204は鍵スケジューリング部902が生成する副鍵に基づいてブロック暗号アルゴリズムのラウンド処理関数を実行する回路であったが、本実施形態の図5の組合せ回路304は指数展開部302の出力値に基づいて冪乗剰余演算または楕円スカラー倍演算を行う回路で構成される。尚、冪乗剰余演算または楕円スカラー倍演算については周知の演算であるので詳細な説明は省略する。また、攪拌部301の処理タイミングについても第2の実施形態で説明した図4のタイミングチャートと全く同じなので重複する説明は省略する。
【0074】
図5において、指数展開部302では、秘密鍵である指数の値を例えばバイナリ値に展開し、展開したバイナリ値の上位ビットまたは下位ビットから順に、冪乗剰余演算の場合は乗算または自乗算を、楕円スカラー倍演算の場合は楕円加算または楕円2倍算を実行する。そして、図3の攪拌部201と同様に、組合せ回路304での処理関数の演算結果は中間値としてレジスタ207またはレジスタ209に交互に格納される。この時、演算結果が格納されない他方のレジスタには乱数発生部205が生成する乱数が格納される。
【0075】
図5の第3の実施形態に係る暗号演算回路装置300のタイミングチャートは図4で説明した第2の実施形態の場合と同様であるが、例えば左バイナリ法の場合、図4において第1ラウンド,第2ラウンド,・・・,初期ラウンドの各処理は、バイナリ展開した指数の最上位ビット,(最上位−1)ビット,・・・,最下位ビットの各処理にそれぞれ対応する。また、乱数生成部205が生成する乱数は、冪乗剰余演算または楕円スカラ一倍演算のトリガーがかかる度に新しい値に更新される。
【0076】
ここで、冪乗剰余演算や楕円スカラー倍演算に対するCPA攻撃は、最上位ビットから最下位ビットに至る各処理において、順番にビット単位で解析を行う攻撃法が用いられるため、本実施形態のようにビット単位で交互にレジスタ207またはレジスタ209に乱数を格納する方法は、ハミング距離の計算を回避する上で非常に有効である。
【0077】
このように、本実施形態に係る暗号演算回路装置300は、公開鍵暗号アルゴリズムにおいて冪乗剰余演算や楕円スカラー倍演算を実行する暗号モジュールに対しても適用することができ、ビット単位で解析を行うCPA攻撃を防御することが可能となる。
【0078】
以上、第1の実施形態に係る暗号演算回路装置100および第2の実施形態に係る暗号演算回路装置200ではAESに代表されるブロック暗号アルゴリズムに適用した場合の例を示し、第3の実施形態に係る暗号演算回路装置300では公開鍵暗号アルゴリズムに適用した場合の例を示した。これらの実施形態以外にも、例えばストリーム暗号を用いる場合においても同様のパイプライン方式のレジスタ構成を取るハードウェア実装で暗号演算回路を実現する場合には本発明を適用することが可能である。
【0079】
このように、暗号化処理関数の演算結果を格納するレジスタを2系統設けることにより、レジスタ値の変化量からハミング距離を計算するCPA攻撃を防御することができる。特に、マスク化を施していない従来の暗号化処理関数をそのまま流用できるので、EXORゲートや予備回路を新規に実装する必要がなく、ゲート回路規模の増大と消費電力の増加を抑えながら、効果的にCPA攻撃を回避することができる。
【0080】
以上、本発明に係る暗号演算回路装置の各実施形態について説明してきたが、その精神またはその主要な特徴から逸脱することなく他の多様な形で実施することができる。そのため、上述した実施形態はあらゆる点で単なる例示に過ぎず、限定的に解釈してはならない。本発明は、特許請求の範囲によって示されるものであって、本発明は明細書本文にはなんら拘束されない。さらに、特許請求の範囲の均など範囲に属する変形や変更は、全て本発明の範囲内である。
【符号の説明】
【0081】
1,2,3,4,21,22,23,24,25,a,b,c・・・制御信号
100,200,300,900・・・暗号演算回路装置
101,201,301,901・・・攪拌部
103,106,108,110,203,206,208,210,211,903,906,907・・・セレクタ
104,204,304,904,909・・・組合せ回路
105,205・・・乱数生成部
107,109,207,209,905,908・・・レジスタ
150,250,350,950・・・制御部
201・・・攪拌部
250・・・制御部
302・・・指数展開部
902・・・鍵スケジューリング部

【特許請求の範囲】
【請求項1】
入力データに所定の関数処理を施して出力データを生成する関数処理部を有し、初回の処理では外部からの入力データに前記関数処理を実行し、以降の処理では生成された出力データを次回の入力データとして前記関数処理行う一連の処理を所定回数繰り返して得られた出力データを暗号データとして外部に出力する暗号演算回路装置において、
前記関数処理部の出力データに等しいビット幅の乱数データを生成する乱数生成部と、
前記関数処理部の出力データまたは前記乱数データを一時的に格納する2つのデータ保持部と、
前記乱数生成部と前記関数処理部と前記データ保持部の処理タイミングを制御する制御部と
を設けたことを特徴とする暗号演算回路装置。
【請求項2】
請求項1に記載の暗号演算回路装置において、
前記制御部は、前記関数処理部が初回の処理を行う1回前の処理で前記乱数生成部が生成した乱数データを前記2つのデータ保持部のいずれかに格納し、前記乱数データが格納された同一の前記データ保持部に前記関数処理部が初回の処理で生成した出力データを格納するように制御することを特徴とする暗号演算回路装置。
【請求項3】
請求項1に記載の暗号演算回路装置において、
前記制御部は、前記関数処理部が最終回の処理を行う1回前の処理で前記乱数生成部が生成した乱数データを前記2つのデータ保持部のいずれかに格納し、前記乱数データが格納された同一の前記データ保持部に前記関数処理部が最終回の処理で生成した出力データを格納するように制御することを特徴とする暗号演算回路装置。
【請求項4】
請求項1に記載の暗号演算回路装置において、
前記制御部は、前記関数処理部が初回および最終回のそれぞれの処理を行う1回前の処理で前記乱数生成部が生成した乱数データを前記2つのデータ保持部のいずれかに格納し、前記乱数データが格納された同一の前記データ保持部に前記関数処理部が初回および最終回の処理で生成した出力データを格納するように制御することを特徴とする暗号演算回路装置。
【請求項5】
請求項1から4のいずれか一項に記載の暗号演算回路装置において、
前記制御部は、前記関数処理部の関数処理毎に前記2つのデータ保持部の少なくとも一方に前記乱数データを格納するように制御することを特徴とする暗号演算回路装置。
【請求項6】
請求項1から4のいずれか一項に記載の暗号演算回路装置において、
前記制御部は、前記関数処理部の関数処理毎に、前記関数処理部の出力データまたは前記乱数データを前記2つのデータ保持部に交互に格納するように制御することを特徴とする暗号演算回路装置。
【請求項7】
請求項1から6のいずれか一項に記載の暗号演算回路装置において、
前記関数処理部が行う関数処理はブロック暗号アルゴリズムにおける暗号化または復号化のラウンド演算の基本処理であることを特徴とする暗号演算回路装置。
【請求項8】
請求項1から6のいずれか一項に記載の暗号演算回路装置において、
前記関数処理部が行う関数処理は公開鍵暗号アルゴリズムで利用されるべき乗剰余演算または楕円スカラー倍演算を実行するための繰り返し演算の基本処理であることを特徴とする暗号演算回路装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate


【公開番号】特開2010−232709(P2010−232709A)
【公開日】平成22年10月14日(2010.10.14)
【国際特許分類】
【出願番号】特願2009−74812(P2009−74812)
【出願日】平成21年3月25日(2009.3.25)
【出願人】(000004226)日本電信電話株式会社 (13,992)
【Fターム(参考)】