説明

不正操作検知回路、不正操作検知回路を備えた装置、及び不正操作検知方法

【課題】アルゴリズムの実行状態を状態値により管理する装置への不正操作を高精度に検知し、セキュリティの強化が可能な不正操作検知回路、不正操作検知回路を備えた装置、及び不正操作検知方法を提供することを目的とする。
【解決手段】不正操作検知回路10であって、状態値の変化条件ルールを出力する変化条件ルール出力手段13と、変化条件ルールに基づき、状態値を順次生成する状態値生成手段11と、状態値を格納する状態値格納手段12と、遷移前の状態値、遷移後の状態値を比較し、状態値の遷移が変化条件ルールに従っていなければ異常な処理であると判定する状態値比較判定手段14とを有することにより上記課題を解決する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、不正操作検知回路、不正操作検知回路を備えた装置、及び不正操作検知方法に係り、特にアルゴリズムの実行状態を状態(ステート)値により管理する装置への不正操作を検知する不正操作検知回路、不正操作検知回路を備えた装置、及び不正操作検知方法に関する。
【背景技術】
【0002】
例えばアルゴリズムの実行状態を状態(ステート)値により管理する装置の一例としては任意の暗号機能を搭載したスマートカード(ICカード)がある。従来の暗号機能を搭載したスマートカードには、暗号プロセッサ内部の秘密鍵に対するフォールト攻撃と呼ばれる攻撃を防ぐための耐タンパ技術が用いられているものがある。
【0003】
暗号方式は共通鍵暗号方式と公開鍵暗号方式とに大別される。共通鍵暗号方式は暗号化と復号とで同一の鍵(秘密鍵)を用いる方式であり、この秘密鍵を送信者及び受信者以外の第三者にわからない情報とすることで安全性を保つものである。公開鍵暗号方式は暗号化と復号とで異なる鍵を用いる方式であり、暗号化を行うための鍵(公開鍵)を一般に公開する代わりに、暗号文を復号するための鍵(秘密鍵)を受信者のみの秘密情報とすることで安全性を保つものである。
【0004】
暗号の分野における技術の一つには、攻撃技術とよばれるものがある。攻撃技術とは秘密鍵を暗号文等の入手可能な情報から推定する技術のことであり、様々な手法が存在している。これらの攻撃技術は2種類に大別される。
【0005】
一つの攻撃技術は、理論攻撃と呼ばれるものであり、暗号アルゴリズムの入力データと出力データとの関係から秘密鍵を求める攻撃法である。この攻撃法は、攻撃対象となる暗号アルゴリズムの実装の形態に依存せず、成功することが特徴である。
【0006】
もう一つの攻撃技術は、実装攻撃と呼ばれるものであり、暗号アルゴリズムを実装した装置に対して、入力データ、出力データの関係のみならず、装置に対して物理的なストレスを加えることで得られるエラー情報や、入出力データ以外に装置から観測される情報を利用することで秘密鍵を推定する技術のことである。この攻撃法の成功の可否は、暗号アルゴリズムの実装形態に依存する。
【0007】
暗号アルゴリズムが理論攻撃に安全であっても、実装攻撃に対して脆弱である事例が多数知られており、実装攻撃に対して安全性を実現する対策技術は大きな課題である。実装攻撃への対策技術は、耐タンパ(Tamper-proof)技術と呼ばれる。
【0008】
実装攻撃は、フォールト攻撃とサイドチャネル攻撃との2種類に大別される。フォールト攻撃とは、スマートカードなどに搭載された暗号プロセッサ(暗号装置)の回路の内部データ値に対して、意図的に異常を発生させた場合の暗号処理の出力結果と、正常な暗号処理の出力結果との差分情報を用いて回路の内部に格納されている秘密鍵を推定する方法である。
【0009】
サイドチャネル攻撃とは、消費電力、電磁波、処理時間など、装置から漏洩する情報を用いて秘密鍵を推定する方法である。これらの中でも、サイドチャネル攻撃では消費電力を用いた方法が最もよく知られており、電力解析攻撃(Power Analysis Attack)と呼ばれている。電力解析攻撃は、消費電力波形から秘密鍵を推定することができる。
【0010】
次に、RSA暗号の演算方法について説明する。RSA暗号の復号処理では、指数剰余演算処理と呼ばれる処理が行われる。指数剰余演算は、秘密鍵d,暗号文a,法nに対して、v=ad (mod n)により平文vを計算する処理である。一般的に、RSA暗号における秘密鍵dのビット長は1024bit以上が用いられている。このため、d乗演算は単純な方法で実行すると、およそ21024回の乗算が必要となり、現実的な時間内に計算することが不可能となる。
【0011】
このd乗演算を効率的に行うためのアルゴリズムとしてはバイナリ法が従来から知られている(例えば非特許文献1参照)。このバイナリ法を用いることで、d乗に必要な演算回数は、21024回から1024の定数倍(この定数は1.5以下の値)になり、効率的な演算を実現することができる。
【0012】
秘密鍵dをu-bit値とし、その2進表現をd=(du-1,du-2,...,d0)2と表記する。ただし、diはdの個々のビット値を表す。図1はバイナリ法を用いた指数剰余演算のアルゴリズムを示す説明図である。図2は、バイナリ法の処理概要を示す説明図である。図1のアルゴリズムでは、dのビット値diを、i=u-1からi=0の順番にチェックする。このチェックの結果がdi=1ならば、2乗算と乗算の両方が実行される。チェックの結果がdi=0ならば、2乗算のみが実行される。この処理をi=u-1からi=0まで繰り返すことにより、バイナリ法はv=ad(mod n)を計算する。つまり、バイナリ法は、鍵ビットdiの値と、2乗算、乗算の実行パターンが、直接的に連動していることが特徴である。
【0013】
フォールト攻撃とは、半導体に対して、過電圧、異常クロック、高温度、レーザーなどのストレスを与えることで、暗号装置内部のデータ値に異常(Fault)を発生させ、その結果出力される異常な出力値を利用することで、暗号装置内部に格納されている秘密鍵を解読する攻撃である。図3はフォールト攻撃の概要を示す説明図である。
【0014】
特にレーザーを用いたストレス印加法は、1-bit単位で正確にフォールトを発生させることができ、攻撃者が意図した通りのフォールトを発生させることのできる精度の高い方法として知られている。
【0015】
代表的なフォールト攻撃は、例えば非特許文献2に記載されている。ここでは、RSA暗号に対するフォールト攻撃の概略について説明する。
【0016】
RSA暗号は、素数p,qに対しn=p×qを満たす合成数nを用いる暗号である。RSA暗号の安全性は、素因数分解によりnから素数p,qを得ることが困難である、という仮定に基づいている。ただし、p,qは512-bit以上、nは1024-bit以上の大きな整数である。つまり、攻撃者が合成数nから素数p,qを得ることに成功すれば、RSA暗号は解読することができる。
【0017】
RSA暗号に対するフォールト攻撃の目的は、素数pを得ることである。素数pを得ることができれば、割り算によりqも簡単に求めることができるので、p,qのいずれかを攻撃者が得ることができれば、RSA暗号は解読できる。
【0018】
RSA暗号に対するフォールト攻撃は、正常な出力値と、フォールトを発生させた場合の異常な出力値との2つを用いることで、pを解読する。攻撃者は、正常な出力値を得た後、後述の(mod q)のべき乗剰余計算における計算処理を実行している最中にフォールトを発生させる。
【0019】
この結果、正常な処理の場合 mq=cqdq (mod q)を得るのに対し、フォールト発生の場合は計算値が異常な値となり、m'q≠mqを満たすm'qを得る(m'qの値は、mqと等しくなければどのような値でも攻撃が成功する)。このm'qを用いて最終的に計算された結果、攻撃者は出力m'を得る。攻撃者は、正常な出力mとフォールト発生時の出力m'を用いて、GCD(m' - n, n)を計算することで、p=GCD(m' - m, n)を得る。ただし、GCD(a,b)は整数a,bの最大公約数を計算する関数である。
【0020】
この攻撃が成立する理由は、異常なm'qを用いて後述するm'の計算を行うことで、正しいmの値とm'の値との差分がpの整数倍となる、つまり整数kに対してm' -m = kpとなるからであり、その結果、CD(m' - m, n)=GCD(kp, pq) = pを得ることができる。
【0021】
入力:c (暗号文)
dp (秘密鍵dに対し、dp=d mod (p-1)を満たす秘密鍵)
dq (秘密鍵dに対し、dq=d mod (q-1)を満たす秘密鍵)
p (n=p×qを満たす素数p)
q (n=p×qを満たす素数q)
u (u= q-1 (mod p)を満たす整数)
出力:m (平文)
ただし、eは暗号化用の公開鍵, dは復号用秘密鍵であり、ed=1 mod (p-1)(q-1)を満たす。
【0022】

*正常な処理
1. cp= c mod p, cq = c mod q
2. mp=cpdp (mod p)を計算。
【0023】
3. mq=cqdq (mod q)を計算。
【0024】
4. m = ( (mq - mp)×u (mod q) )×p + mp を計算
5. mを出力
*Fault発生時の処理
1. cp= c mod p, cq = c mod q
2. mp=cpdp (mod p)
3. mq=cqdq (mod q)計算中にfault発生、mqの代わりにm'q出力(mq'≠mq)
4. m = ( (m'q - mp)×u (mod q) )×p + mp を計算
5. m'を出力
前述したフォールト攻撃は、正常な出力値とフォールト発生時の出力値とを比較することにより、RSA暗号を解読するための秘密鍵である素数pを得る攻撃である。ここではフォールト発生時の電力波形を観察することで秘密鍵dを得ることができるフォールト攻撃について説明する(例えば非特許文献3参照)。
【0025】
図4はバイナリ法を用いるRSA暗号をベースとした電力解析への耐タンパ性を有するRSA暗号アルゴリズムを示す説明図である。図4の左側に記してある4ビット値1はRSA暗号アルゴリズムの実行状態を表す値であり、以下では「状態値」と呼ぶ。図4のRSA暗号アルゴリズムにおいては、(0000)2, (0001)2, ...., (1001)2が状態値である。図4のRSA暗号処理に限らず、全ての暗号処理を実行する装置において、状態値は演算の実行状態を管理するために用いられる値である。
【0026】
図4のRSA暗号アルゴリズムは、入力された暗号文c, 秘密鍵d=(du-1,du-2,...,d0)2、法nから、平文m=cd (mod n)を計算するアルゴリズムであり、電力解析により秘密鍵dが漏洩することを防ぐ耐タンパ機能(耐タンパ性)を有する。ここでは、この耐タンパ機能について図5を用いて説明する。
【0027】
図5は、図4のRSA暗号アルゴリズムを実装した装置におけるd=(10100...)2の場合の消費電力波形を表したイメージ図である。図5は、d=(du-1,du-2,...,d0)2に対して、以下の処理をi=u-1,...,1,0それぞれについて繰り替えし実行した場合の波形である。
【0028】
di=1: R0=R0×R0で示される2乗算の後に、R0=R0×R1で示される乗算が実行される。
【0029】
di=0: R0=R0×R0で示される2乗算が実行される。
【0030】
つまり、図5はdiのビット値に応じて、R0=R0×R0とR0=R0×R1との2種類の乗算が実行されている。もし、これらの乗算の種類を消費電力波形により識別することが可能であるならば、diのビット値を判別でき、秘密鍵dは解読できる。しかし、図4のRSA暗号アルゴリズムに対しては、上記のような識別は困難である。なぜなら、R0,R1は図4の状態値(0001)2,(0010)2に記されている通り、初期値を乱数r1, r2により与えられ更新される常にランダムな値であるからである。
【0031】
つまり、R0=R0×R0とR0=R0×R1との2種類の乗算は、いずれも(乱数)×(乱数)の乗算であり、このような乱数データ同士の乗算は、図5に示すように、消費電力波形で識別するのは困難である。すなわち、図4のRSA暗号アルゴリズムに対する電力解析は困難である。このように、図4のRSA暗号アルゴリズムを実行する装置は、電力解析に対して安全である。
【0032】
図4のRSA暗号アルゴリズムに対して、フォールト攻撃を行うことで、電力解析に対する耐性を無効化できる攻撃法は、従来から存在している(例えば非特許文献3参照)。RSA暗号アルゴリズムに対して、フォールト攻撃を行うことで、電力解析に対する耐性を無効化できる攻撃法の基本アイデアは、フォールト攻撃を行うことで、状態値の一部を強制的に変更し、電力解析への対策機能に必要となる処理をスキップし、対策機能を無効化させることである。
【0033】
図6は、フォールト攻撃による電力解析の対策機能を無効化する方法を表した説明図である。図6に示すように、実行状態は基本的に状態値の遷移により管理される。正常な処理においては、この状態値は(0000)2→(0001)2→(0010)2→(0011)2...のように、1つずつ増加しながら遷移するので、図6に示した順番によるRSA暗号アルゴリズムの処理が行われる。
【0034】
図6に示したRSA暗号アルゴリズムの処理に対し、フォールト攻撃は状態値の値を強制的に変更することで、(0000)2→ (0010)2→(0011)2...のように、一部の状態値(図6の例では(0001)2)を強制的にスキップさせることが可能である。なお、このような精度の高いフォールト発生は、レーザーを用いたストレス印加方法により実現できる。このように図6のRSA暗号アルゴリズムの処理に対し、フォールト攻撃により状態値(0001)2を強制的にスキップすることで、R0への乱数の書き込み処理がスキップされるため、R0の値は初期値0となる。
【0035】
図4、図6のRSA暗号アルゴリズムにおいては、R0への乱数書き込みが耐タンパ機能を保障する重要な条件であり、この処理がスキップされることで耐タンパ機能が無効化される。このスキップの結果、R0の値が0となった場合の消費電力波形を図7に示す。図7は図6の状態値(0001)2をスキップしたRSA暗号アルゴリズムを実装した装置におけるd=(10100...)2の場合の消費電力波形を表したイメージ図である。
【0036】
図7においては、R0=R0×R0とR0=R0×R1の2種類の乗算が発生している。図5の消費電力波形においては、これら2種類の乗算は共に(乱数)×(乱数)であった。しかし、図7の消費電力波形においては、フォールト発生によりR0の値がゼロであるので、それぞれ以下の乗算となる。
【0037】
R0×R0:0×0
R0×R1:0×(乱数)
つまり、R0×R0は入力の両方がゼロである乗算である。R0×R1は入力の片方がゼロである乗算である。乗算の性質上、0を入力とする乗算の消費電力波形は、特殊な形状になることが知られている。このような特殊な波形は、0の入力が1個か、2個かに応じてさらに変化する場合がある。つまり、0の入力が1個である波形と、2個である波形はそれぞれに特徴がある。したがって、図7に示すようにR0×R0の乗算とR0×R1の乗算とは消費電力波形の形状によって識別できる。これらの消費電力波形を識別することで、そのままdのビット値を識別できるので、図7の消費電力波形からは秘密鍵dをd=(10100..)2と解読できる。
【0038】
前述した、RSA暗号アルゴリズムに対してフォールト攻撃を行うことで電力解析に対する耐性を無効化できる攻撃法を防ぐための対策技術は、従来から存在している(例えば特許文献1参照)この対策技術は、回路の内部状態をチェックし、フォールト発生の有無の検知を行う「フォールト検知」による対策法である。
【0039】
フォールト検知を用いることで、フォールトが発生した場合でも、暗号装置の処理停止やデータ出力停止など、適切な防御方法を実施することができるので、フォールト検知技術はフォールト対策において重要な技術である。
【0040】
従来のフォール検知の基本アイデアは、暗号装置の外側に状態値の外付けのカウンタを設置し、状態値の遷移が進むごとに、このカウンタを増加させ、このカウンタの値が期待通りの値であるかのチェックを定期的に行うことで、状態値の遷移が正しいかどうかのチェックを行う。つまり、従来のフォール検知の基本アイデアは状態値の遷移が正しく行われているかどうかを、外付けのカウンタを用いて間接的にチェックするものある。
【0041】
図8はフォールト検知法を表した説明図である。図8は、装置内部の個々の処理を実現する単位を「被制御セクション」と記している。個々の被制御セクションには一つの状態値が対応する。この状態値の遷移をチェックするために、図8のフォールト検知法では外付けのカウンタZZが備えられている。
【0042】
最初の「開始セクション」において、カウンタZZはZZ=0に初期化される。このZZの値は、被制御セクションを一つ完了するごとに1つ増加する(ZZ=ZZ+1)。N個の被制御セクションから構成されるので、条件分岐なしにN個全ての被制御セクションを実行する実行経路が、フォールト攻撃による状態スキップ無しに正常に実行された場合、カウンタZZの値はNとなっていることが期待される。
【0043】
また、条件分岐により、全ての被制御セクションが実行されない場合でも、条件分岐によって実行されなかった被制御セクションの個数をZZに加算するので、フォールト攻撃による状態スキップ無しに正常に実行された場合、カウンタZZの値はNとなることが期待される。
【0044】
例えば被制御セクション1の処理終了後に条件分岐を行う場合、残りのN−1個の被制御セクションが実行されないことになる。この場合は条件分岐時にZZに対してN−1が加算される。他の被制御セクション終了時の条件分岐についても同様に扱う。
【0045】
これにより、全ての実行経路においてフォールト攻撃による状態スキップ無しに正常に実行された場合、カウンタZZの最終的な値はNとなることが期待される。つまり、図8のフォールト検知法では、このカウンタZZの値がNとなるかどうかを、最後にチェックすることで、フォールト発生の有無を検知することができる。この検知処理は、最後の状態sm+1に対応する「Fault検知:ZZ=N?」の処理において行われる。ZZの値がNであるならば、図8のフォールト検知法ではフォールト発生が無い正常処理と判定され、ZZの値がN以外であるならば、フォールトが発生したと判断する。
【0046】
例えば図8のプログラムの「実行経路4」に示すように、「被制御セクション1」がフォールト攻撃によりスキップされた場合は、ZZ=ZZ+1の処理が一つスキップされることになるのでフォールト検知処理におけるZZの最終的な値がZZ=N−1となり、本来期待される値であるNではなくなるので、フォールトが発生したことを検知できる。
【特許文献1】特表2005−509936号公報
【非特許文献1】Alfred J.Menezesほか著"HANDBOOK OF APPLIED CRYPTOGRAPHY"(CRC press)の615ページ, アルゴリズム14.79 (http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf)
【非特許文献2】D. Boneh, R. A. DeMillo, R. J. Lipton, "On the Importance of Checking Cryptographic Protocols for Faults", Eurocrypt'97, pp.37-51, 1997.
【非特許文献3】Benoit Feix and Louis Marcel, "Passive and Active Combined Attacks", 2007 Workshop on Fault Diagnosis and Tolerance in Cryptography, FDTC 2007)
【発明の開示】
【発明が解決しようとする課題】
【0047】
図8の公知技術を用いることで、フォールト攻撃は検知できる。しかし、このフォールト検知法は、基本的なフォールト攻撃を検知できるものの、より高度なフォールト攻撃を行った場合、フォールト検知機能が無効化されるという問題点があった。以下では従来のフォールト検知法の問題点について説明を行う。
【0048】
図9はフォールト検知法の基本的な問題点を表した説明図である。従来のフォールト検知法は前述したとおり、暗号装置の外側に状態値の外付けカウンタを追加し、このカウンタ値の整合性をチェックすることでフォールト発生の有無を検知する。この基本的なメカニズムにより、従来のフォールト検知法は、以下の(P1)〜(P3)に示す3つの性質を備える。
【0049】
(P1)従来のフォールト検知法はフォールト検知のメカニズムとして、カウンタを増加させる仕組みとカウンタをチェックする仕組みとの2つが必要であり、カウンタのチェックを行うことで初めてフォールト検知に成功する。つまり、従来のフォールト検知法はフォールト検知可能なタイミングが限定される。
【0050】
(P2)従来のフォールト検知法は、カウンタのチェックを行っている状態において、初めてフォールト検知が実行されるため、それ以外の状態でフォールト検知が実行できない。
【0051】
(P3)従来のフォールト検知法は全ての状態遷移についてフォールト検知を実行することはできない。
【0052】
(P3)に示す性質により、従来のフォールト検知法は高度なフォールト攻撃に対してフォールト検知を行うことができない。図9に示すとおり、フォールト検知可能な状態は最後の「Fault検知:ZZ=N?」、つまり状態sm+1のみである。そして、それ以外の状態ではフォールト検知できない。よって、従来のフォールト検知法はフォールト検知のリアルタイム性が失われるという問題を有している。この問題により、従来のフォールト検知法はフォールト検知のメカニズムが高度なフォールト攻撃に対しては無効化される。
【0053】
また、前述した通り、従来のフォールト検知法は、フォールト検知にリアルタイム性がないため、フォールト検知可能な状態と不可能な状態とに2分される。フォールト検知可能な状態と不可能な状態とに2分されるという性質を考慮して、フォールト検知を無効化するメカニズムは図10のようになる。
【0054】
図10はフォールト検知を無効化するフォールト攻撃を表した説明図である。攻撃者はフォールトを発生させて状態s1をスキップすることで、秘密鍵を得るためのスキップを実行する。しかし、このままではカウンタZZの整合性が失われ、フォールト発生が検知される。そこで、これを回避するために図10のフォールト攻撃はフォールト検知状態である状態sm+1を再度スキップすることで、フォールト発生が検知されることを回避する。
【0055】
よって、図10のフォールト攻撃は秘密鍵を得るために発生させるスキップとフォールト検知を回避させるためのスキップとの2回のフォールトを発生させる高度なフォールト攻撃を行うことで、従来のフォールト検知法を無効化できる。つまり、従来のフォールト検知法は図8に示すフォールト発生を1回行うフォールトに有効であるが、図10に示すフォールト発生を2回行うフォールト攻撃には無効である。
【0056】
以上、従来のフォールト検知法はフォールト検知にリアルタイム性がない為、フォールトを1回発生させるフォールト攻撃に有効であるがフォールトを2回発生させるフォールト攻撃に無効である。
【0057】
本発明の一実施形態は、上記の点に鑑みなされたもので、アルゴリズムの実行状態を状態値により管理する装置への不正操作を高精度に検知し、セキュリティの強化が可能な不正操作検知回路、不正操作検知回路を備えた装置、及び不正操作検知方法を提供することを目的とする。
【課題を解決するための手段】
【0058】
上記課題を解決するため、本発明の一実施形態は、アルゴリズムの実行状態を状態値により管理する装置への不正操作を検知する不正操作検知回路であって、正常な処理における状態値の変化条件ルールを出力する変化条件ルール出力手段と、前記変化条件ルール出力手段から出力される前記変化条件ルールに基づき、前記状態値を順次生成する状態値生成手段と、前記状態値生成手段が生成した前記状態値を格納する状態値格納手段と、前記状態値格納手段が格納している前記状態値を遷移前の状態値、前記状態値生成手段が生成した前記状態値を遷移後の状態値として比較し、前記状態値の遷移が前記変化条件ルール出力手段から出力される前記変化条件ルールに従っていなければ異常な処理であると判定する状態値比較判定手段とを有する。
【0059】
なお、本発明の一実施形態の構成要素、表現または構成要素の任意の組合せを、方法、装置、システム、コンピュータプログラム、記録媒体、データ構造などに適用したものも本発明の態様として有効である。
【発明の効果】
【0060】
上述の如く、本発明の一実施形態によれば、アルゴリズムの実行状態を状態値により管理する装置への不正操作を高精度に検知し、セキュリティの強化が可能な不正操作検知回路、不正操作検知回路を備えた装置、及び不正操作検知方法を提供できる。
【発明を実施するための最良の形態】
【0061】
次に、本発明を実施するための最良の形態を、以下の実施例に基づき図面を参照しつつ説明していく。なお、本実施例ではアルゴリズムの実行状態を状態(ステート)値により管理する装置の一例として任意の暗号機能を搭載したスマートカード(ICカード)を例に説明するが、他の装置であってもよい。
【0062】
まず、従来のフォールト検知法の問題点の原因はフォールト検知にリアルタイム性がないことにある。そのため、従来のフォールト検知法はフォールト検知の状態そのものをスキップすることでフォールト検知を無効化できることであった。また、従来のフォールト検知にリアルタイム性がない原因は、全ての状態遷移についてフォールト検知をできないことにあった。
【0063】
本実施例では、従来のフォールト検知法における前述の問題を解消するために、全ての状態遷移についてフォールト検知を行う手段を提供する。従来のフォールト検知法の問題は状態値の遷移とフォールト検知のカウンタとが別々であったため、状態値のフォールト発生を直接的に検知することができず、フォールト検知のリアルタイム性が失われていたことにあると考えられる。
【0064】
この問題を解決するために、本実施例においては、状態値の遷移とフォールト検知とを一体化する。状態値の遷移とフォールト検知とを一体化することで、本実施例は全ての状態遷移に関してフォールト検知を有効とし、フォールト検知のリアルタイム性を保障する手段を提供する。
【0065】
ここでは、本実施例の基本的なアイデアを説明する。図11はフォールト攻撃に脆弱な従来の状態値の遷移を表した説明図である。図12は本実施例の状態値の遷移を表した説明図である。
【0066】
図11に示すフォールト検知法は、状態値の変化に制約を設けていないため、任意の値から任意の値に状態値が変化可能である。よって、(0000)2→(0010)2のような、本来ありえない状態値の遷移が発生した場合でも、従来のフォールト検知法はフォールト発生を検知することができない。
【0067】
これに対し、図12に示す本実施例のフォールト検知法は、正常な状態値の遷移に対して常に一定の制約条件を設ける。図12は、正常な状態値遷移により状態値のビット値が常に1-bitのみ変化するという制約条件を設けた例である。よって、(0000)2→(0011)2のような、制約条件を満たさない2-bitの状態値の遷移が発生すれば、本実施例のフォールト検知法はフォールト発生を検知できる。
【0068】
図13は、フォールト発生が無い正常な場合の従来の状態値の遷移と本実施例の状態値の遷移とを表した説明図である。図13の上段は従来の状態値の遷移を表している。図13の下段は本実施例の状態値の遷移を表している。
【0069】
図13の上部に示すように、従来の状態値の遷移は分岐がない場合+1ずつ増加し、分岐がある場合、戻った状態数だけ減少する。つまり、フォールト無しの正常な場合における状態値の遷移の法則は一定していないため、状態値の遷移が正常であるか、異常であるかの判断を単純な方法で行うことは困難である。
【0070】
これに対し、図13下部に示すように、本実施例の状態値の遷移は分岐の有無に関係なく常に1-bit値だけ状態値が変化するという共通の法則を有する。よって、この法則に従う状態遷移であれば、フォールト無しの正常な遷移と判断でき、この法則に従わない状態遷移であれば、フォールト有りの異常な遷移と判断できる。よって、本実施例のフォールト検知法は、状態値の遷移が常に1-bit値の変化であるか、そうでないかという単純な検査回路(チェック機能回路)を用いることで、フォールト検知を行うことができる。
【0071】
図14は本実施例によるフォールト検知回路の一例の構成図である。図14のフォールト検知回路10は例えばステートマシンとして利用される。図14のフォールト検知回路10は、状態値生成回路11,状態値レジスタ12,変化条件ルール回路13,状態値比較回路14を有する構成である。
【0072】
状態値生成回路11は、遷移後の状態値を決定する。状態値レジスタ12は現在の状態値を格納する。変化条件ルール回路13は、フォールト攻撃無しの正常な処理における状態値の変化条件ルールを定める。状態値比較回路14は状態値の遷移が正常であるかどうかを判断する。
【0073】
状態値生成回路11,状態値レジスタ12は一般的に用いられる回路である。変化条件ルール回路13,状態値比較回路14はチェック機能回路である。状態値レジスタ12の出力は、現在の状態値を表している。状態値レジスタ12の入力は、次の状態値を表している。
【0074】
つまり、状態値レジスタ12の入力と出力とを比較することで、遷移前及び遷移後の状態値の比較を行うことができる。変化条件ルール回路13,状態値比較回路14は遷移前及び遷移後の状態値の比較によるフォールト検知のチェック機能回路として動作する。状態値比較回路14は状態値レジスタ12の入力と出力とを比較することで、フォールト発生の有無の検知を行う。
【0075】
状態値比較回路14が行うフォールト発生の有無の検知は状態値レジスタ12の入力と出力との関係が、変化条件ルール回路13の与える変化条件ルールに従っているか否かにより行われる。状態値比較回路14は、状態値レジスタ12の入力と出力との関係が変化条件ルール回路13の与える変化条件ルールに従っている場合、フォールト発生の無い正常な処理であると判断し、変化条件ルールに従っていない場合、フォールトの発生した異常な処理であると判断する。
【0076】
変化条件ルール回路13の与える変化条件ルールが「1-bit値変化」である場合、図12や図13の下段に示したフォールト検知回路となる。もし、フォールトの発生した異常な処理であると判断される場合、状態値比較回路14はフォールト検知出力によりフォールト発生を検知したことを外部の回路(例えばCPU)に通知する。
【0077】
ここではフォールト検知機能を実現するために必要となる回路の比較のために、従来のフォールト検知回路の構成を図15に示す。図15は従来のフォールト検知回路の一例の構成図である。図15のフォールト検知回路は、状態値生成回路21,状態値レジスタ22,フォールト検知用カウンタ制御回路23,フォールト検知用カウンタ24,フォールト検知用カウンタチェック回路25を有する構成である。状態値生成回路21は遷移後の状態値を決定する。状態値レジスタ22は現在の状態値を格納する。
【0078】
状態値生成回路21,状態値レジスタ22は一般的に用いられる回路である。フォールト検知用カウンタ制御回路23,フォールト検知用カウンタ24はカウンタ機能回路である。フォールト検知用カウンタチェック回路25は、チェック機能回路である。
【0079】
状態値生成回路21により状態値の遷移が決定されるのを受けて、フォールト検知用カウンタ制御回路23はフォールト検知用カウンタ24の値の操作を行う。フォールト検知用カウンタ24の値は、図8〜図10におけるカウンタZZの値に相当する。
【0080】
フォールト検知用カウンタ制御回路23は図8〜図10のカウンタZZと同様に、状態値の分岐の有無、および分岐のタイミングに応じて、フォールト検知用カウンタ24に対する様々な操作を行う。フォールト検知用カウンタ制御回路23は、状態値の遷移に応じてフォールト検知用カウンタ24の操作を決定する。
【0081】
フォールト検知用カウンタチェック回路25はフォールト検知を行う。フォールト検知用カウンタチェック回路25は、フォールト検知用カウンタ制御回路23によるフォールト検知用カウンタ24に対する操作が何回か繰り返されたあと、フォールト検知用カウンタ24の値が期待値どおりの値であるかをチェックすることで、フォールト発生の有無を判断する。
【0082】
なお、フォールト検知用カウンタ24の値が期待値どおりの値であるかをチェックするフォールト検知用カウンタチェック回路25の処理は、図8〜図10において、カウンタZZについてZZ=Nであるかどうかの判定を行う処理に対応する。
【0083】
フォールト検知用カウンタ24の値が期待値どおりの正常な値であるならば、フォールト検知用カウンタチェック回路25はフォールト発生の無い正常な処理と判断し、期待値通りの正常な値でなければフォールト発生の有る異常な処理と判断する。フォールトが発生していると判断された場合、フォールト検知用カウンタチェック回路25はフォールト検知出力によりフォールト発生を検知したことを外部の回路に通知する。
【0084】
従来のフォールト検知回路は状態値の遷移とフォールト検知とを一体化せず、間接的にフォールト検知を行うので、状態値の遷移をカウントするカウンタ機能回路と、その状態値の遷移のカウント値が期待値どおりの値であるかをチェックするチェック機能回路との両方が必要である。
【0085】
これに対し、本発明のフォールト検知回路10は、状態値の遷移とフォールト検知とを一体化しているため、図14に示す通り、チェック機能回路のみの追加でよい為、従来のフォールト検知回路より小さな回路によるフォールト検知機能を実現できる。
【0086】
図14のフォールト検知回路10は改良を加えることで、更にセキュリティを向上させることができる。ここでは、図14のフォールト検知回路10のセキュリティを向上させる改良について説明する。図16は、図14のフォールト検知回路により検知できない状態値のスキップを表した説明図である。
【0087】
図14のフォールト検知回路10は変化条件ルールが「1-bit値変化」である場合における状態値の遷移例を表している。図6に示すRSA暗号アルゴリズムを実装した暗号装置は秘密鍵を得るための状態値のスキップとして、(0000)2→(0011)2...のフォールト攻撃を行われてもフォールト発生を検知できるので安全である。しかし、図14のフォールト検知回路10は一部の状態値のスキップを検知できない。なぜなら、図14のフォールト検知回路10は変化条件ルール(制約条件)の範囲内の状態値の遷移であれば、フォールト発生と判定しないからである。
【0088】
図16は変化条件ルールが「1-bit値変化」の例である為、状態値が1-bit値だけ変化する(0000)2→(0010)2及び(0000)2→(0100)2のフォールト攻撃を検知できないことを表している。このように、本実施例のフォールト検知回路10は一部の状態値のスキップに関して検知できない、フォールト検知漏れを有する。このフォールト検知漏れを有していても図6に示すRSA暗号アルゴリズムを実装した暗号装置はフォールト攻撃による秘密鍵の解読を防ぐことができる。
【0089】
図6に示すRSA暗号アルゴリズムを実装した暗号装置から秘密鍵を得る為にはR0への乱数書き込みに対してはスキップを行うがR1への乱数書き込みに対してはスキップを行わないことが必要である。なぜなら、R0,R1の両方の乱数書き込みをスキップすることでR0×R0, R0×R1の両方が0×0となるため、これらは完全に同一の演算となり、消費電力波形による識別が不可能となるからである。つまり、図6に示すRSA暗号アルゴリズムを実装した装置に対して秘密鍵を得るための状態値のスキップは、(0000)2→(0011)2に限定される。
【0090】
よって、図14に示す本実施例のフォールト検知回路10はフォールト検知漏れを有するが、図6に示すRSA暗号アルゴリズムを実装した暗号装置に適用した場合、フォールト発生に成功しても秘密鍵を解読することができないため、安全である。
【0091】
ゆえに、本実施例のフォールト検知回路10は、暗号装置を開発する段階で既知の攻撃法(Known Attack)の調査を行い、秘密鍵を解読できる状態値のスキップのパターンを事前に網羅し、このようなフォールト検知漏れに関する秘密鍵の漏洩の可能性について検証を行うことで、秘密鍵の解読が不可能である状態値の遷移を構築することができる。
【0092】
既知の攻撃法(Known Attack)に対しては図14に示す本実施例のフォールト検知回路10を用いることでフォールト攻撃による秘密鍵の解読を防止できる。ただし、図14に示す本実施例のフォールト検知回路10のフォールト検知漏れは既知の攻撃法に対する防御を実現できるが、未知の攻撃法(Unknown Attack)に対して秘密鍵が解読できる可能性を残す。
【0093】
例えば図16に示した例では、(0000)2→(0010)2及び(0000)2→(0100)2のスキップが可能であり、将来的に攻撃手法が進化した場合、これらのスキップを用いた秘密鍵の解読が成功する可能性が残されているからである。そこで、図14のフォールト検知回路10は改良を加えることで、既知の攻撃のみならず、将来的に発生しうる未知の攻撃に対する防御を実現できるようにする。
【0094】
図17は、図14に示す本実施例のフォールト検知回路が有するフォールト検知漏れの解決方法を表した説明図である。図17の上段は図14に示す本実施例のフォールト検知回路10において変化条件ルールを「1-bit値変化」とした場合における状態値の遷移例を表している。図17の下段は図14に示す本実施例のフォールト検知回路10において変化条件ルールを「3-bit値変化」とした場合における状態値の遷移例を表している。
【0095】
図17の上段、下段いずれの場合についても、図6に示すアルゴリズムを実装した暗号装置から秘密鍵を得るための状態値のスキップとして、(0000)2→(0011)2(上段)もしくは(0000)2→(1010)2(下段)のフォールト攻撃を行おうとすると、フォールト発生を検知できるので安全である。
【0096】
しかし、図14のフォールト検知回路10は、全ての状態値のスキップに関して検知できる完全な方法ではなく、一部の状態値のスキップに関しては検知できない。図14に示すフォールト検知回路10は、制約条件の範囲内の状態値の遷移であれば、フォールト発生と判断しないからである。
【0097】
例えば図17上段では、(0000)2→(0010)2および(0000)2→(0100)2のスキップが1-bit値変化であるためフォールト発生を検知できない。図17下段では、(0000)2→(1110)2のスキップおよび(0000)2→(1011)2が3-bit値変化であるためフォールト発生を検知できない。
【0098】
このように、図14に示す本実施例の方式は一部の状態値の遷移についてスキップ可能であり、図16に示すように状態値の変化条件ルールに応じて、固定のパターンによる状態値のスキップが可能である。
【0099】
例えば図17上段では(0000)2→(0010)2および(0000)2→(0100)2、つまり2パターンのスキップが可能である。同様に、図17下段では(0000)2→(1110)2および(0000)2→(1011)2の2パターンのスキップが可能である。
【0100】
つまり、ある状態値の変化条件ルールにおいて可能であった状態値のスキップは、もう片方の状態値の変化条件ルールにおいて不可能であることが分かる。よって、状態値の変化条件ルールを複数準備し、どの変化条件ルールを用いるかをフォールト検知回路10の内部で発生させた乱数によって選択することで、フォールト検知回路10はフォールト検知漏れとなる状態値のスキップのパターンを攻撃者が特定できなくなり、安全性を向上することができる。
【0101】
図18は本実施例によるフォールト検知回路の他の例の構成図である。図18に示したフォールト検知回路10Aは、状態値生成回路11A〜11C,状態値レジスタ12,変化条件ルール回路13A〜13C,状態値比較回路14,セレクタ15及びセレクタ16を有する構成である。
【0102】
状態値生成回路11A〜11Cは、遷移後の状態値を決定する。状態値レジスタ12は現在の状態値を格納する。変化条件ルール回路13A〜13Cは、フォールト攻撃無しの正常な処理における状態値の変化条件ルールを定める。状態値比較回路14は状態値の遷移が正常であるかどうかを判断する。セレクタ15は乱数に基づいて、状態値生成回路11A〜11Cの出力の何れか一つを、状態値レジスタ12及び状態値比較回路14に入力する。また、セレクタ16は乱数に基づいて変化条件ルール回路13A〜13Cの出力の何れか一つを、状態値比較回路14に入力する。
【0103】
セレクタ15及びセレクタ16は乱数に基づいて連動し、状態値生成回路11Aの出力が選択されるとき変化条件ルール回路13Aの出力が選択され、状態値生成回路11Bの出力が選択されるとき変化条件ルール回路13Bの出力が選択され、状態値生成回路11Cの出力が選択されるとき変化条件ルール回路13Cの出力が選択される。
【0104】
状態値比較回路14は状態値レジスタ12の入力と出力とを比較することで、フォールト発生の有無の検知を行う。状態値比較回路14が行うフォールト発生の有無の検知は状態値レジスタ12の入力と出力との関係が、変化条件ルール回路13A〜13Cの何れか一つにより与えられる変化条件ルールに従っているか否かにより行われる。
【0105】
状態値比較回路14は、状態値レジスタ12の入力と出力との関係が、セレクタ16を介して変化条件ルール回路13A〜13Cの何れか一つにより与えられる変化条件ルールに従っている場合、フォールト発生の無い正常な処理であると判断し、変化条件ルールに従っていない場合、フォールトの発生した異常な処理であると判断する。
【0106】
なお、セレクタ15による状態値生成回路11A〜11Cの出力の何れか一つを選択する処理と、セレクタ16による変化条件ルール回路13A〜13Cの出力の何れか一つを選択する処理とは、フォールト検知回路10Aが動作する最初のサイクルの初期化処理として実行される。
【0107】
図18のフォールト検知回路10Aは、変化条件ルール回路13Aの与える変化条件ルールが「1-bit値変化」であり、変化条件ルール回路13Bの与える変化条件ルールが「2-bit値変化」であり、変化条件ルール回路13Cの与える変化条件ルールが「3-bit値変化」である例を表している。また、図18のフォールト検知回路10Aは、状態値生成回路11Aが変化条件ルール「1-bit値変化」に基づいて遷移後の状態値を決定し、状態値生成回路11Bが変化条件ルール「2-bit値変化」に基づいて遷移後の状態値を決定し、状態値生成回路11Cが変化条件ルール「3-bit値変化」に基づいて遷移後の状態値を決定する。
【0108】
図14のフォールト検知回路10と比較すると、フォールト検知回路10Aは乱数の入力と、3つの状態値生成回路11A〜11Cと、3つの変化条件ルール回路13A〜13Cと、セレクタ15と、セレクタ16とを更に必要とするが、3つの中から乱数により一つの変化条件ルールを選択することで、図14のフォールト回路10におけるフォールト検知漏れの確率「1」を「1/3」に下げることができる。
【0109】
なお、フォールト検知漏れの確率が「1/3」ということは、フォールト検知できる確率が「1」から「1/3」であることを意味する。一般的に、フォールト検知回路を備えた暗号装置は、フォールト検知に1回でも成功したら、秘密鍵データ消去処理、暗号装置の利用停止処理などにより、攻撃者が2度とフォールト攻撃できないような適切な対処を実行する。
【0110】
したがって、攻撃者は何回もフォールト攻撃を繰り返し試すことにより秘密鍵を解読することが不可能である。図18のフォールト検知回路10Aは、既知の攻撃を確率「1」で防御を行い、さらに未知の攻撃に対しても確率「1」−「1/3」で防御することができる。この確率は変化条件ルールの数を多くするほど「1」に近づけることができ、より安全となる。なお、図18のフォールト検知回路10Aでは変化条件ルールが3つの例を示したが複数であれば他の数値でもよい。
【0111】
フォールト検知なしの回路、従来のフォールト検知回路,図14のフォールト検知回路10,図18のフォールト検知回路の特徴は図19のようになる。図19はフォールト検知なしの回路、従来のフォールト検知回路,図14のフォールト検知回路10,図18のフォールト検知回路10Aの特徴を比較した比較図である。
【0112】
本実施例の図14に示したフォールト検知回路10,図18に示したフォールト検知回路10Aは、従来のフォールト検知回路が備えていなかった、フォールト検知のリアルタイム性を備えているというメリットを有する。
【0113】
また、本実施例の図14に示したフォールト検知回路10,図18に示したフォールト検知回路10Aは、既知の攻撃に対してフォールト発生を1回実施する、2回実施する方法の両方に対して秘密鍵の漏洩を防止することができる。また、本実施例の図18に示したフォールト検知回路10Aは、将来的に攻撃手法が進化し、未知の攻撃が発見された場合でも、秘密鍵の漏洩を防止することができる。
【0114】
また、従来のフォールト検知回路は、フォールト検知を実現するため、カウンタ機能とチェック機能の両方が必要であった。一方、本実施例の図14に示したフォールト検知回路10,図18に示したフォールト検知回路10Aは、チェック機能のみによりフォールト検知を実現することができる。
【0115】
図20はフォールト攻撃対策ハードウェアを搭載したスマートカードチップの一例の構成図である。スマートカードチップ100は、CPU101,ROM102,通信回路103,外部インターフェース104,フォールト攻撃対策ハードウェア105,RAM106,クロック生成回路107,電源回路108を有する構成である。
【0116】
図20中、フォールト攻撃対策ハードウェア105は、本実施例のフォールト検知回路10又は10Aに相当する。フォールト攻撃対策ハードウェア105は、上記したようにフォールト発生を検知すると、バス経由でCPU101にフォールト検知信号(割り込み信号)を出力する。CPU101はフォールト検知信号を受信すると、秘密鍵データ消去処理、暗号装置の利用停止処理などにより、攻撃者が2度とフォールト攻撃できないような適切な対処を実行する。
【0117】
本実施例のフォールト検知回路10又は10Aは、RSA暗号アルゴリズム,AES暗号アルゴリズムなど、任意の暗号アルゴリズムに対するフォールト攻撃により秘密鍵の推定が行われることを防ぐための対策技術である。本実施例のフォールト検知回路10又は10Aを適用することで、暗号装置は高い耐タンパ性を持つことができる。
【実施例1】
【0118】
図21は共通鍵暗号方式への本実施例の適用を表した一例の説明図である。代表的な共通鍵暗号アルゴリズムは、Advanced Encryption Standard(AES)が、米国連邦標準Federal Information Standards (FIPS) FIPS 197として公開している(文献:http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf)。
【0119】
図21は、この文献の15ページ、Figure5に記されているAES暗号化処理に対して図14に示したフォールト検知回路10を用いた場合の状態値の遷移を表している。図21では13個の状態値を4-bitで表現している。状態値の変化条件ルールは、1-bit値変化である。正常な遷移である限り、状態値は常に1-bit変化を行う。
【0120】
本実施例のフォールト検知回路10の状態値比較回路14は、状態値の遷移前と遷移後の値を比較し、1-bit値の変化であればフォールト発生が無いと判定し、それ以外の変化であればフォールトが発生したと判定する。
【実施例2】
【0121】
図22は共通鍵暗号方式への本実施例の適用を表した他の例の説明図である。図22では状態値の変化条件ルールが2つ以上必要となる。図22では第1の変化条件ルールとして「1-bit値変化」、第2の変化条件ルールとして「3-bit値変化」を利用している。図22の共通鍵暗号アルゴリズムを実行する前の初期化処理として、本実施例のフォールト検知回路10Aは乱数により第1の変化条件ルール又は第2の変化条件ルールを選択する。
【0122】
本実施例のフォールト検知回路10Aの状態値比較回路14は、選択された第1又は第2の変化条件ルールに応じて、状態値の遷移前と遷移後との比較を行う。フォールト検知回路10Aの状態値比較回路14は、第1の変化条件ルールが選択された場合、1-bit値の変化であればフォールト発生が無いと判定し、それ以外の変化であればフォールトが発生したと判定する。
【0123】
フォールト検知回路10Aの状態値比較回路14は、第2の変化条件ルールが選択された場合、3-bit値の変化であればフォールト発生が無いと判定し、それ以外の変化であればフォールトが発生したと判定する。
【実施例3】
【0124】
図23は公開鍵暗号方式への本実施例の適用を表した一例の説明図である。代表的な公開鍵暗号アルゴリズムとしては、RSA暗号方式が知られている。RSA暗号は乗算剰余演算を繰り返すことで処理を行う公開鍵暗号である。
【0125】
RSA暗号は乗算剰余を効率的に実行するための方法として、整数A,B, 法Nに対してREDC(A,B,N)=A×B×R-1 (mod N)を計算するMontgomery乗算剰余という方法が一般的に知られている。ただし、RはNのビット長xに対して、R=2xで与えられる定数である。
【0126】
Montgomery乗算剰余の処理アルゴリズムは、様々な方法が知られているが、その一つに文献:Kouichi Itoh, Masahiko Takenaka, Naoya Torii, Syouji Temma, and Yasushi Kurihara, "Fast Implementation of Public-Key Cryptography on a DSP TMS320C6201", CHES '99, LNCS 1717, page 61-72の方法が知られている。
【0127】
図23は、この文献のpage65, Algorithm4に記されたMontgomery乗算剰余に対して図14に示したフォールト検知回路10を用いた場合の状態値の遷移を表している。図23では、w-bit単位の変数をg個並べることで、RSA暗号で用いられる1024-bit以上の数値を表現している。wは、一般的にw=16,32,64など、1024より小さな値である。w-bitの部分乗算を繰り返すことで、1024-bit以上の乗算剰余演算を行う。
【0128】
図23では17個の状態値を5-bitで表現している。状態値の変化条件ルールは、1-bit値変化である。いずれの状態遷移についても正常な遷移である限り、状態値は常に1-bit変化を行う。本実施例のフォールト検知回路10の状態値比較回路14は、状態値の遷移前と遷移後の値を比較し、1-bit値の変化であればフォールト発生が無いと判定し、それ以外の変化であればフォールトが発生したと判定する。
【0129】
実施例1,2は、共通鍵暗号方式の実施例であり、条件分岐のパターンは、for文による1重ループと非常に簡潔な構造であった。これに対し、図23の示す公開鍵暗号方式の実施例においては条件分岐のパターンがもっと複雑となり、for文による2重ループと、if文による条件分岐とが組み合わさっている。条件分岐のパターンが複雑化することで、状態値の遷移パターンの構築は、より困難となる。
【0130】
この困難さを解決するためには、補助的な手段が必要となるが、その一つである"NOP"状態の挿入を図23の条件分岐((11001)2-(10001)2の状態値)において用いている。"NOP"とは、何も処理を行わない状態を指す。"NOP"は何も処理を行わないため、冗長な処理であるが、状態値の遷移条件の制約下において、遷移パターンを構築するために用いることができる補助的な手段である。
【0131】
図24は状態値の遷移条件が1-bit値変化である場合において、この"NOP"挿入が必要な例を示す説明図である。状態値の変化条件ルールが1-bit値変化の場合は、図22に示すように、状態値A,B,Cを用いて以下の処理を行う場合、状態値BとCとの間にNOPを挿入する必要がある。
【0132】
A if (cond) then {
B 処理1}
C 処理2
変化条件ルールを1-bit値変化とした場合には、状態値A→B→Cの遷移を行うことを考える。状態値Aに含まれる'1'の個数をkと表記すると、状態変化ルールの制約により、状態値Bでは'1'の個数が1つ増えるか、もしくは減るかのいずれであるので、k-1もしくはk+1となる。同様に、状態値Bから状態値Cに遷移する場合は、'1'の個数はk-2、kもしくはk+2となる。
【0133】
以上により、変化条件ルールを1-bit値変化とした場合には、状態値A→B→Cの遷移を実現することができる。しかし、A→Cの遷移を行う場合は、'1'の個数がk個からk-2, k, k+2となる。つまり、A→Cの遷移を行う場合はkの値に関係なく、状態値が2-bit値変化するか、0-bit値変化するかのいずれかでしかなく、1-bit値変化を実現できない。この問題を解決するために、変化条件ルールを1-bit値変化とした場合には、状態値BとCとの間にNOPを挿入した以下の処理を行う。
【0134】
A if (cond) then {
B 処理1
C NOP }
D 処理2
状態値BとCとの間にNOPを挿入したことで、変化条件ルールを1-bit値変化とした場合には、状態値A→B→C→Dの遷移において、状態値CからDに遷移したときの'1'の個数を、k-1もしくはk+1とすることができる。このとき、状態値A→Dの遷移は1-bit値変化となる。つまり、状態値A→B→C→Dの遷移と、状態値A→Dの遷移とは、両方とも1-bit値変化という制約において実現することができる。ここでは、NOPの挿入を含めた、状態値の遷移パターンの構築に利用できる補助的な手段を以下に列挙する。
【0135】
・NOPの挿入
図24では条件分岐に関する例を示したが、ループ分岐に対しても応用可能である。
【0136】
・状態値のビット長の拡大
状態値のビット長を拡大することで、状態値の選択の自由度が広がり、状態値の遷移パターンの構築が容易となる。例えば15個の状態値が与えられている場合、それを表現するための最小のビット長は4-bitであるが、この4-bitより大きなビット長で15個の状態値を表現することで、状態値の遷移パターンの構築が容易となる。
【0137】
・テンプレートの作成
1重ループ、2重ループ、条件分岐など、基本的なフロー制御の種類に応じて、状態値の構築のためのテンプレートを事前計算しておき、そのテンプレートを利用して、状態値の構築を行う。ループ中の状態数、条件分岐の状態数に応じて多様なテンプレートを作成することで、様々な処理に対応できる。
【実施例4】
【0138】
図25は公開鍵暗号方式への本実施例の適用を表した他の例の説明図である。図25では状態値の変化条件ルールが2つ以上必要となる。図25では第1の変化条件ルールとして「1-bit値変化」、第2の変化条件ルールとして「3-bit値変化」を利用している。図25の公開鍵暗号アルゴリズムを実行する前の初期化処理として、本実施例のフォールト検知回路10Aは乱数により第1の変化条件ルール又は第2の変化条件ルールを選択する。
【0139】
本実施例のフォールト検知回路10Aの状態値比較回路14は、選択された第1又は第2の変化条件ルールに応じて、状態値の遷移前と遷移後との比較を行う。フォールト検知回路10Aの状態値比較回路14は、第1の変化条件ルールが選択された場合、1-bit値の変化であればフォールト発生が無いと判定し、それ以外の変化であればフォールトが発生したと判定する。
【0140】
フォールト検知回路10Aの状態値比較回路14は、第2の変化条件ルールが選択された場合、3-bit値の変化であればフォールト発生が無いと判定し、それ以外の変化であればフォールトが発生したと判定する。
【0141】
(効果)
本実施例の効果は図19の比較図に示される通りである。本実施例は、従来のフォールト検知回路が備えていなかった、フォールト検知のリアルタイム性を備えている。既知の攻撃に対しては、フォールト発生を1回実施する、2回実施する方法の両方に対して秘密鍵の漏洩を防止することができる。将来的に攻撃手法が進化し、未知の攻撃が発見された場合でも、図18のフォールト検知回路10Aは秘密鍵の漏洩を防止できる。
【0142】
また、従来のフォールト検知回路は、フォールト検知を実現するため、カウンタ機能とチェック機能の両方が必要であった。一方、本実施例の図14に示したフォールト検知回路10,図18に示したフォールト検知回路10Aは、チェック機能のみによりフォールト検知を実現できる。
【0143】
本発明は、以下に記載する付記のような構成が考えられる。
(付記1)
アルゴリズムの実行状態を状態値により管理する装置への不正操作を検知する不正操作検知回路であって、
正常な処理における状態値の変化条件ルールを出力する変化条件ルール出力手段と、
前記変化条件ルール出力手段から出力される前記変化条件ルールに基づき、前記状態値を順次生成する状態値生成手段と、
前記状態値生成手段が生成した前記状態値を格納する状態値格納手段と、
前記状態値格納手段が格納している前記状態値を遷移前の状態値、前記状態値生成手段が生成した前記状態値を遷移後の状態値として比較し、前記状態値の遷移が前記変化条件ルール出力手段から出力される前記変化条件ルールに従っていなければ異常な処理であると判定する状態値比較判定手段と
を有する不正操作検知回路。
(付記2)
前記変化条件ルール出力手段は正常な処理における状態値の複数種類の変化条件ルールから一つの前記変化条件ルールを出力する付記1記載の不正操作検知回路。
(付記3)
前記変化条件ルール出力手段は正常な処理における状態値の変化条件ルールとして前記遷移前の状態値と前記遷移後の状態値とで変化すべきビット数を出力する付記1又は2記載の不正操作検知回路。
(付記4)
前記変化条件ルール出力手段は正常な処理における状態値の複数種類の変化条件ルールとして、前記複数種類の変化条件ルールごとに前記遷移前の状態値と前記遷移後の状態値とで変化すべきビット数を異ならせて出力する付記2記載の不正操作検知回路。
(付記5)
アルゴリズムの実行状態を状態値により管理する装置への不正操作を検知する不正操作検知回路を備えた装置であって、
正常な処理における状態値の変化条件ルールを出力する変化条件ルール出力手段と、
前記変化条件ルール出力手段から出力される前記変化条件ルールに基づき、前記状態値を順次生成する状態値生成手段と、
前記状態値生成手段が生成した前記状態値を格納する状態値格納手段と、
前記状態値格納手段が格納している前記状態値を遷移前の状態値、前記状態値生成手段が生成した前記状態値を遷移後の状態値として比較し、前記状態値の遷移が前記変化条件ルール出力手段から出力される前記変化条件ルールに従っていなければ異常な処理であると判定する状態値比較判定手段と
を有する装置。
(付記6)
アルゴリズムの実行状態を状態値により管理する装置への不正操作を検知する不正操作検知回路の不正操作検知方法であって、
変化条件ルール出力手段が、正常な処理における状態値の変化条件ルールを出力する変化条件ルール出力ステップと、
状態値生成手段が、前記変化条件ルール出力手段から出力される前記変化条件ルールに基づき、前記状態値を順次生成する状態値生成ステップと、
状態値格納手段が、前記状態値生成手段の生成した前記状態値を格納する状態値格納ステップと、
状態値比較判定手段が、前記状態値格納手段が格納している前記状態値を遷移前の状態値、前記状態値生成手段が生成した前記状態値を遷移後の状態値として比較し、前記状態値の遷移が前記変化条件ルール出力手段から出力される前記変化条件ルールに従っていなければ異常な処理であると判定する状態値比較判定ステップと
を有する不正操作検知方法。
【0144】
本発明は、具体的に開示された実施例に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。
【図面の簡単な説明】
【0145】
【図1】バイナリ法を用いた指数剰余演算のアルゴリズムを示す説明図である。
【図2】バイナリ法の処理概要を示す説明図である。
【図3】フォールト攻撃の概要を示す説明図である。
【図4】バイナリ法を用いるRSA暗号をベースとした電力解析への耐タンパ性を有するRSA暗号アルゴリズムを示す説明図である。
【図5】図4のRSA暗号アルゴリズムを実装した装置におけるd=(10100...)2の場合の消費電力波形を表したイメージ図である。
【図6】フォールト攻撃による電力解析の対策機能を無効化する方法を表した説明図である。
【図7】図6の状態値(0001)2をスキップしたRSA暗号アルゴリズムを実装した装置におけるd=(10100...)2の場合の消費電力波形を表したイメージ図である。
【図8】フォールト検知法を表した説明図である。
【図9】フォールト検知法の基本的な問題点を表した説明図である。
【図10】フォールト検知を無効化するフォールト攻撃を表した説明図である。
【図11】フォールト攻撃に脆弱な従来の状態値の遷移を表した説明図である。
【図12】本実施例の状態値の遷移を表した説明図である。
【図13】フォールト発生が無い正常な場合の従来の状態値の遷移と本実施例の状態値の遷移とを表した説明図である。
【図14】本実施例によるフォールト検知回路の一例の構成図である。
【図15】従来のフォールト検知回路の一例の構成図である。
【図16】図14のフォールト検知回路により検知できない状態値のスキップを表した説明図である。
【図17】図14に示す本実施例のフォールト検知回路が有するフォールト検知漏れの解決方法を表した説明図である。
【図18】本実施例によるフォールト検知回路の他の例の構成図である。
【図19】フォールト検知なしの回路、従来のフォールト検知回路,図14のフォールト検知回路10,図18のフォールト検知回路10Aの特徴を比較した比較図である。
【図20】フォールト攻撃対策ハードウェアを搭載したスマートカードチップの一例の構成図である。
【図21】共通鍵暗号方式への本実施例の適用を表した一例の説明図である。
【図22】共通鍵暗号方式への本実施例の適用を表した他の例の説明図である。
【図23】公開鍵暗号方式への本実施例の適用を表した一例の説明図である。
【図24】状態値の遷移条件が1-bit値変化である場合において、この"NOP"挿入が必要な例を示す説明図である。
【図25】公開鍵暗号方式への本実施例の適用を表した他の例の説明図である。
【符号の説明】
【0146】
1 4ビット値(状態値)
10,10A フォールト検知回路
11,11A〜11C,21 状態値生成回路
12,22 状態値レジスタ
13,13A〜13C 変化条件ルール回路
14 状態値比較回路
15,16 セレクタ
23 フォールト検知用カウンタ制御回路
24 フォールト検知用カウンタ
25 フォールト検知用カウンタチェック回路
100 スマートカードチップ
101 CPU
102 ROM
103 通信回路
104 外部インターフェース
105 フォールト攻撃対策ハードウェア
106 RAM
107 クロック生成回路
108 電源回路

【特許請求の範囲】
【請求項1】
アルゴリズムの実行状態を状態値により管理する装置への不正操作を検知する不正操作検知回路であって、
正常な処理における状態値の変化条件ルールを出力する変化条件ルール出力手段と、
前記変化条件ルール出力手段から出力される前記変化条件ルールに基づき、前記状態値を順次生成する状態値生成手段と、
前記状態値生成手段が生成した前記状態値を格納する状態値格納手段と、
前記状態値格納手段が格納している前記状態値を遷移前の状態値、前記状態値生成手段が生成した前記状態値を遷移後の状態値として比較し、前記状態値の遷移が前記変化条件ルール出力手段から出力される前記変化条件ルールに従っていなければ異常な処理であると判定する状態値比較判定手段と
を有する不正操作検知回路。
【請求項2】
前記変化条件ルール出力手段は正常な処理における状態値の複数種類の変化条件ルールから一つの前記変化条件ルールを出力する請求項1記載の不正操作検知回路。
【請求項3】
前記変化条件ルール出力手段は正常な処理における状態値の変化条件ルールとして前記遷移前の状態値と前記遷移後の状態値とで変化すべきビット数を出力する請求項1又は2記載の不正操作検知回路。
【請求項4】
前記変化条件ルール出力手段は正常な処理における状態値の複数種類の変化条件ルールとして、前記複数種類の変化条件ルールごとに前記遷移前の状態値と前記遷移後の状態値とで変化すべきビット数を異ならせて出力する請求項2記載の不正操作検知回路。
【請求項5】
アルゴリズムの実行状態を状態値により管理する装置への不正操作を検知する不正操作検知回路を備えた装置であって、
正常な処理における状態値の変化条件ルールを出力する変化条件ルール出力手段と、
前記変化条件ルール出力手段から出力される前記変化条件ルールに基づき、前記状態値を順次生成する状態値生成手段と、
前記状態値生成手段が生成した前記状態値を格納する状態値格納手段と、
前記状態値格納手段が格納している前記状態値を遷移前の状態値、前記状態値生成手段が生成した前記状態値を遷移後の状態値として比較し、前記状態値の遷移が前記変化条件ルール出力手段から出力される前記変化条件ルールに従っていなければ異常な処理であると判定する状態値比較判定手段と
を有する装置。
【請求項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

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate

【図25】
image rotate


【公開番号】特開2010−68135(P2010−68135A)
【公開日】平成22年3月25日(2010.3.25)
【国際特許分類】
【出願番号】特願2008−231269(P2008−231269)
【出願日】平成20年9月9日(2008.9.9)
【出願人】(000005223)富士通株式会社 (25,993)
【出願人】(000237156)株式会社富士通アドバンストエンジニアリング (100)
【Fターム(参考)】