説明

楕円曲線暗号を用いた認証処理に対する故障利用攻撃を検知する認証用媒体

【課題】
楕円曲線暗号方式を用いたICカード認証における故障利用攻撃の検知技術において、復号メッセージが楕円曲線の点であることを利用する従来技術では、多くの場合で当該攻撃を受けていることを検知できない。
【解決手段】
ICカードにおいて、認証装置から入力された暗号文を秘密鍵で復号することで復号メッセージを得た後に、当該復号メッセージと前記暗号文との対応関係を、楕円曲線上の退化なペアリング関数を用いて検証することにより、故障利用攻撃の有無を検知する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、楕円曲線暗号を用いた認証処理に対する故障利用攻撃を検知する認証用媒体に関する。
【背景技術】
【0002】
ICカード等の認証用媒体を用いた認証においては、一般に公開鍵暗号方式が用いられる。ICカードには公開鍵暗号方式の秘密鍵及び暗号化(復号化)回路が実装されており、これにより暗号学的に安全性が保証された認証を行うことを可能としている。
【0003】
ICカード認証で通常用いられる公開鍵暗号方式として、楕円曲線暗号が知られている。楕円曲線暗号は、やはり公開鍵暗号方式の一つであるRSA暗号方式と比べ、より短い鍵長で同程度のセキュリティレベルを確保できるという特徴を持つ。例えば、鍵長160ビットの楕円曲線暗号と、鍵長1024ビットのRSA暗号のセキュリティレベルがほぼ同じであることが知られている。そのため、楕円曲線暗号は、メモリや処理パワーの少ないICカード、携帯電話などの小型デバイスにおける実装に適している。
【0004】
楕円曲線暗号の1つである楕円エルガマル(ElGamal)暗号を利用したICカード認証システムにおける認証処理の例を説明する。pを素数とし、有限体GF(p)上の楕円曲線EにおけるベースポイントをGとする(各記号の詳細については後述する)。ICカードには、前記楕円曲線に基づく楕円曲線暗号の秘密鍵dが秘密に格納されている。また、認証装置には、前記楕円曲線暗号の公開鍵Y=[d]Gが格納されている(ここで、記号[ ]はスカラー倍算を示す)。
【0005】
図11に基づき、認証装置がICカード(正確には、ICカードを保持するユーザ)を認証するための処理フローを説明する。認証装置は、ICカードが入力されたことを検知する(ステップS701)。次に認証装置は、適当なメッセージMを生成して記憶装置に格納するとともに、公開鍵を用いて前記メッセージMを暗号化することで暗号文C=(C1,C2)を生成する(ステップS702)。ここで、C1=[r]G、C2=M+[r]Yである(rは適当に選んだ乱数)。そして認証装置は、生成した暗号文CをICカードに送信する(ステップS703)。
【0006】
次にICカードは、前記暗号文Cを受信する(ステップS705)。ICカードは、秘密鍵を用いてC1を復号することで、中間メッセージKを得る(ステップS707)。具体的には、ICカードはK=[d]C1を計算する。また、ICカードは、C2を復号し、復号メッセージM’を得る(ステップS709)。具体的には、ICカードはM’=C2−Kを計算する。そして、ICカードは、M’を認証装置に送信する(ステップS711)。
【0007】
認証装置は、前記M’を受信する(ステップS713)。認証装置は、記憶装置から前記Mを読み出し、Mと前記受信したM’を比較する(ステップS715)。認証装置は、MとM’が一致した場合に「認証成功」と判定する(ステップS717)。一方、MとM’が一致しなかった場合には、認証装置は「認証失敗」と判定する(ステップS719)。この認証システムの安全性は、ICカードが秘密鍵を有しない限り、ICカードは手順3においてCに基づいてM’=MとなるM’を算出できないことに基づいている。
【0008】
ICカードにおいて秘密鍵は耐タンパに保持される為、外部から直接読み取られることは考えにくいが、これを間接的に推測する攻撃がいくつか存在する。そのような攻撃の1つに、故障利用攻撃がある。故障利用攻撃では、ICカードが秘密鍵を用いて暗号化または復号化を行っている最中に、外部から供給電圧を急激に変化させる等の物理的変化を与えることにより、ICカードの処理結果を意図的に誤らせる。攻撃者は、認証装置上でこの誤らせた処理結果を得ることで、所定の条件の下で、秘密鍵を推測することが可能となる。
【0009】
すなわち、ステップS707およびS708において、ICカードは、認証装置から受け取った暗号文Cから復号メッセージを計算するが、攻撃者はその際に高電圧などの物理的操作をICカードに与える。このときICカードが正当なもの(認証装置上の公開鍵に対応する秘密鍵を有するもの)であっても、復号メッセージは正しく計算されず(M’≠MとなるM’が算出される)、ICカードは認証装置に対して正しくない結果を送信することになる。攻撃者は、その誤った出力を得て、当該出力を解析することで、ICカード内に保持されている秘密鍵を推測できる。
【0010】
上の例のように、ICカード上の楕円曲線暗号を用いた認証システムにおいて故障利用攻撃を受けると、ICカードの秘密鍵を攻撃者に特定される可能性がある。すなわち、故障利用攻撃は秘密鍵の漏洩に繋がるため、その対策が強く望まれている。
【0011】
故障利用攻撃を検知するための従来技術として、ICカードが故障利用攻撃を受けた場合に、その計算結果が楕円曲線暗号で利用する楕円曲線の点にならないことがある性質を利用する方式が知られている(例えば、特許文献1)。従来技術では、ICカードに係る楕円曲線Eが方程式
E:y2+a1xy+a3y=x3+a22+a4x+a6
で表されるとき、関数Is_on_EC(x,y)を
Is_on_EC(x,y)=x3+a22+a4x+a6−(y2+a1xy+a3y)
と定める。ICカードは、前記中間メッセージKを求めた後、Kが楕円曲線Eの点であるかを判定する。ここで、M’ではなくKの値を検証する理由は、攻撃者は秘密鍵dを推定したいのでK=[d]C1の計算時に故障利用攻撃を行うと考えられるためである。これに対し、M’=C2−Kであり、すなわちM’の計算にdは用いられないため、M’の計算時のみに故障利用攻撃を行っても意味がない。
【0012】
ICカードがKが楕円曲線Eの点であるかを判定するためには、具体的には、前記Kを(xk,yk)と表すと、Is_on_EC(xk,yk)を計算すればよい。そして、Is_on_EC(xk,yk)=0であればKは楕円曲線の点であり、Is_on_EC(xk,yk)≠0であればKは楕円曲線の点でないと判定できる。Kは本来は楕円曲線Eの点であるはずである(詳しくは後述するが、楕円曲線暗号では、元のメッセージ、暗号文、および復号メッセージはいずれも楕円曲線の点である)。そこで、Kが楕円曲線の点でないとき、ICカードは、故障利用攻撃を受けたと判断することができる。
【特許文献1】特開2004-252433号公報
【発明の開示】
【発明が解決しようとする課題】
【0013】
しかし、従来技術は、ICカードが故障利用攻撃を受けていることをそもそも検知できない場合が多数あるという課題がある。具体的には、特許文献1に係る従来技術は、故障利用攻撃を受けた計算結果がたまたま楕円曲線上の点になる場合には、攻撃を検知することができない。このような場合は、全暗号文の1/2が該当することが知られている。これは、xの値が与えられたときに、式Eを満たすyを求める(すなわち、yに係る方程式Eが解ける)ことができる確率が1/2だからである。すなわち、従来技術では、2回に1回の割合で、故障利用攻撃の検知に失敗するという問題がある。
【0014】
上記の問題は、従来技術が、中間メッセージKのみを用いて故障利用攻撃の有無を判定していることに起因する。中間メッセージKが満たすべき前記条件(楕円曲線上の点であること)を満たすKは沢山ある(Kの種類数は、楕円曲線Eの点の数に等しい)。そのため、故障利用攻撃を受けて誤ったKが算出されたとしても、当該誤ったKが前記条件を満たしてしまう可能性も高いものとなる。
【課題を解決するための手段】
【0015】
上記の課題を解決するために、本発明は、中間メッセージKの検証を、Kの暗号文であるC1を用いて行うことを特徴とする。すなわち、暗号文C1と中間メッセージKの間にある1対1の対応関係(中間メッセージKは、確かに、暗号文C1を復号したものであるということ)を、復号化処理とは別のアプローチで把握することにより、前記課題を解決する。
【0016】
これを実現するため、本発明は、楕円曲線上の退化なペアリングと呼ばれる関数を利用する。すなわち、退化なペアリングを用いて暗号文C1と中間メッセージKとの対応関係を把握し、これにより故障利用攻撃を検出する。
【0017】
楕円曲線上のペアリングeとは、楕円曲線の2点に対してある値を出力し、かつ以下の2つの条件を満たす関数である(ここで、P1、P2、P3は楕円曲線の点とする)。
(1) e(P1,P2+P3)=e(P1,P2)・e(P1,P3)
(2) e(P1,P2)=e(P2,P1)
また、上記の2条件に加え、以下の条件を満たすeを「退化なペアリング」と呼ぶ。
(3) e(P1,P1)≠1
なお、楕円曲線上の退化なペアリングそのものは公知技術である。従来、退化なペアリングは、楕円曲線暗号に対する攻撃技術や、楕円曲線暗号そのものの内部処理において使用されている。
【0018】
本発明に係るICカードは、前記の退化なペアリングeを用いて、故障利用攻撃の有無を検出する。これは、具体的には以下のように行う。ICカードは、先述した暗号文C=(C1,C2)の復号処理において、C1から中間メッセージKを求めた後に、前記ベースポイントGと当該Kとに基づきe1=e(G,K)を計算するとともに、前記公開鍵Yと当該C1とに基づきe2=e(Y,C1)を計算する。ここで、eは退化なペアリング関数とする。そして、ICカードは、e1=e2が成り立つかを判定する。もしe1=e2であれば、ICカードは、故障利用攻撃が行われなかったと判断する。反対に、e1≠e2であれば、ICカードは、故障利用攻撃が行われたと判断する。
【発明の効果】
【0019】
開示のICカードによれば、従来技術よりも高い確率で故障利用攻撃を検知することが可能となるという効果を奏する。
【0020】
故障利用攻撃が行われていない場合を考える。このとき、退化なペアリングの性質に基づき、前記e1は、
e1=e(G,K)=e(G,[d]C1)=e(G,[d−1]C1+C1)
=e(G,[d−1]C1)・e(G,C1)
=e(G,[d−2]C1+C1)・e(G,C1)
=e(G,[d−2]C1)・e(G,C1)2
と式変形できる。同様の式変形を繰り返すと、結局、関係式e1=e(G,C1)dが導ける。また、前記e2に対しても、同様にして、
e2=e(Y,C1)=e([d]G,C1)=e(G,C1)d
と式変形でき、結局、関係式e2=e(G,C1)dが導ける。すなわち、もし故障利用攻撃が行われていなければ、必ず、e1=e2が成立する。この対偶から、もしe1≠e2であれば、100%の確率で、故障利用攻撃が行われている。
【0021】
反対に、故障利用攻撃が行われた場合を考える。このとき、C1から偶然にKが算出される場合(ランダムな確率で発生するので、確率1/pで発生する)を除いて、C1からKとは異なるK’が算出される。このとき、e1=e(G,K’)≠e(G,C1)dとなる。すなわち、もし故障利用攻撃が行われたならば、1−(1/p)の確率で、e1≠e2が成立する。ここで、通常、pは非常に大きな素数であるので、1/pは無視できるほど小さい確率となる。したがって、もしe1=e2であれば、100%に限りなく近い確率で、故障利用攻撃が行われていない。
【0022】
すなわち、e1=e2が成り立つか否かを判定することで、故障利用攻撃を高精度に検出できる。したがって、本願の方式によれば、ICカード内においてほぼ100%の割合で故障利用攻撃の有無を検出でき、故障利用攻撃による秘密鍵の漏洩を回避することができる。
【発明を実施するための最良の形態】
【0023】
以下、本発明の実施の形態を図面を参照して説明する。なお、本発明は、楕円曲線暗号や楕円曲線上の退化なペアリングといった離散数学に基づいており、発明の理解が容易ではない側面がある。そこで、本発明の実施形態に係る説明においては、楕円曲線暗号や楕円曲線上の退化なペアリングを構成したという前提の下で、それらを用いて故障利用攻撃の検知を可能にした認証システムについて説明する。そして、前記楕円エルガマル暗号と楕円曲線上の退化なペアリング関数については、各実施形態に係る説明の後で、最後に説明する。
【0024】
図1に、本発明の第1の実施形態に係る認証システムの機能ブロック図を示す。認証システムは、認証用媒体の一例であるICカード100と、認証装置300とを備える。
【0025】
ICカード100は、記憶部101、公開情報記憶部103、秘密鍵記憶部105、攻撃検知部107、復号化処理部109、通信部111、及び制御部113を備える。記憶部101は、種々の演算結果等を格納して記憶する。公開情報記憶部103は、PKI(公開鍵基盤)の公開情報を格納して保持する。ここで公開情報は、公開鍵により身元が保証されるユーザの識別子、ユーザの公開鍵Y、公開鍵暗号方式を少なくとも含む必要があり、例えばX.509で規定された公開鍵証明書を用いることができる。本実施例においては、公開鍵暗号として、楕円曲線暗号の1つである楕円エルガマル暗号を用いる。先述した公開鍵暗号方式には、公開鍵暗号として楕円エルガマル暗号を用いることに加え、その公開パラメータである有限体GF(p)、GF(p)上の楕円曲線E、およびベースポイントGそれぞれを含む(各記号の詳細については後述する)。ここで、pは素数であり、p=2 mod 3を満たすとする。すなわち、Eは素数位数の楕円曲線である。なお、FIPS186−2を含む多くの楕円曲線暗号標準において、素数位数の楕円曲線暗号が採用されている。秘密鍵記憶部105は、前記公開鍵に対応する秘密鍵dを格納し、秘密に保持する。ここで、秘密鍵dと前記公開鍵Yの間には、Y=[d]Gの関係が成り立っているものとする。攻撃検知部107は、故障利用攻撃の検知を行う。復号化処理部109は、暗号文を復号して復号メッセージを得る。通信部111は、認証装置300とICカード100の間で暗号文や復号メッセージといったデータを送受する。制御部113は、故障利用攻撃検知部107、復号化処理部109、及び通信部111の制御を司る。
【0026】
一方、認証装置300は、記憶部301、公開情報記憶部303、乱数生成部305、認証処理部307、暗号化処理部309、通信部311、及び制御部313を備える。記憶部301は、種々の演算結果等を格納して記憶する。公開情報記憶部303は、PKI(公開鍵基盤)の公開情報を格納して保持する。この公開情報は、ICカード100の公開情報記憶部103において記憶されるものと同等の情報である。乱数生成部305は、乱数を生成する。ここで生成する乱数は、数学的手法により生成される擬似乱数であっても良い。認証処理部307は、ユーザの認証処理を行う。暗号化処理部309は、メッセージを暗号化して暗号文を生成する。通信部311は、認証装置300とICカード100の間で暗号文や復号メッセージといったデータを送受する。制御部313は、乱数生成部305、認証処理部307、暗号化処理部309、及び通信部311の制御を司る。
【0027】
図2に基づき、第1の実施形態に係る認証システムの処理フローについて説明する。
【0028】
まず、認証装置は、ICカードが入力されたことを検知する(ステップS1)。次に認証装置300の暗号化処理部309は、ICカード100に送信する暗号文を作成する(ステップS2)。これは以下のように行う。暗号化処理部309は、楕円曲線上の点であるメッセージMを適当に選択し、記憶部301に格納する。次に、乱数生成部305は、乱数rを生成し、記憶部301に格納する。なお、前記メッセージMについては、乱数生成部305が前記rとは別の乱数r’を生成し、暗号化処理部309が前記r’に基づいて生成することができる。次に、暗号化処理部309は、ベースポイントGを公開情報記憶部303から読み出し、また前記rを記憶部301から読み出し、読み出したGとrとを用いて点[r]Gを計算し、計算結果を記憶部301上の変数C1に格納する。さらに、暗号化処理部309は、公開鍵Yを公開情報記憶部303から読み出し、また前記rとMとを記憶部301から読み出し、読み出したY、M、およびrを用いて点M+[r]Yを計算し、計算結果を記憶部301上の変数C2に格納する。C=(C1,C2)を暗号文とする。
【0029】
次に認証装置300の通信部313は、ICカード100に対し、作成した暗号文C=(C1,C2)を送信する(ステップS3)。ICカード100の通信部113は、送信された暗号文Cを受信し、記憶部101に格納する(ステップS5)。次にICカードの復号化処理部109は、前記C1を記憶部101から読み出し、読み出したC1を復号する(ステップS7)。すなわち、復号化処理部109は、秘密鍵dを秘密鍵記憶部105から読み出し、読み出したdを用いて点[d]C1を計算し、計算結果を記憶部101上の変数Kに格納する。
【0030】
次にICカード100の攻撃検知部107は、故障利用攻撃の有無を判定する(ステップS9)。判定の処理の詳細については後述する。次に攻撃検知部107は、ステップS9の判定結果に基づき、処理を分岐する(ステップS11)。もし判定結果がYES(攻撃を検知)の場合、ICカードの制御部111は、必要に応じ所定の異常系処理を行う(ステップS13)。すなわち、攻撃を検知したということは、ICカードに故障利用攻撃が行われたことを意味する。そのため、認証の成否に意味が無くなり、またICカードが復号メッセージを認証装置300に出力すると、攻撃者がそれを盗聴してしまう。そこで、制御部111は、復号メッセージを認証装置300に送信することはせず、管理者に通報したりエラーログを残すといった異常系処理を行う。そして、今回の認証処理は終了する。
【0031】
一方、もしステップS9の判定結果がNO(攻撃を検知せず)の場合、ICカード100の復号化処理部109は、メッセージM’を復号する(ステップS15)。すなわち、復号化処理部109は、記憶部からKとC2とを読み出し、読み出したKとC2とにより点C2−Kを計算し、計算結果を記憶部101上の変数M’に格納する。
【0032】
次に、ICカード100の通信部113は、認証装置300に対し、復号したメッセージM’を送信する(ステップS17)。認証装置300の通信部311は、送信されたメッセージM’を受信し、記憶部301に格納する(ステップS19)。最後に、認証装置300の認証処理部307は、認証の成否を判定する(ステップS21)。すなわち、認証処理部307は、認証装置300の暗号化処理部309が選択して暗号化したメッセージMと、ICカードから受信したメッセージであるM’とをそれぞれ記憶部301から読み出し、比較する。そして、M=M’の場合、認証処理部307は、「認証成功」と判定する(ステップS23)。もし認証装置300の公開情報記憶部303に格納された公開鍵YとICカード100の秘密鍵記憶部105に格納された秘密鍵dとの間に対応関係があれば、認証装置300で暗号化したメッセージがICカード100で正しく復号されて元のメッセージに戻るはずであるため、M=M’が成立するはずであるからである。反対に、M≠M’の場合、認証処理部307は、「認証失敗」と判定する(ステップS25)。認証が成功でも失敗でも、認証装置の制御部311は、今回の認証処理を終了し、入力待ちとなる。
【0033】
次に、図3に基づき、第1の実施形態に係るICカードの攻撃検知部107が故障利用攻撃の有無を判定する処理(ステップS9)の詳細な処理フローについて説明する。攻撃検知部107は、前記ベースポイントG、前記暗号文C1を復号して得られたKを記憶部101から読み出し、読み出したGおよびKを用いて、e1=e(G,K) を算出する(ステップS101)。ここで、eは、後述する退化なペアリング関数である。ステップS101の処理の詳細については後述する。次に、攻撃検知部107は、公開鍵Yを公開情報記憶部103から読み出し、また前記暗号文C1を記憶部101から読み出し、読み出したYおよびC1を用いて、e2=e(Y,C1)を算出する(ステップS102)。ステップ102の処理の詳細についても後述する。次に、攻撃検知部107は、e1=e2が成立するか否かを確かめる(ステップS103)。もしe1=e2が成立する場合には、攻撃検知部107は故障利用攻撃を受けなかったと判定する(ステップS104)。また、もしe1=e2が成立しない場合には、攻撃検知部107は故障利用攻撃を受けたと判定する(ステップS105)。
【0034】
次に、ステップS101でe1=e(G,K)を算出する処理、 および、ステップS102でe2=e(Y,C1)を算出する処理の詳細を説明する。これら2つの処理は一部を除いてほとんど同じであるため、以下ではe1を算出する処理であるステップS101について詳細に述べ、e2を算出する処理であるステップS102については、ステップS101と異なる点を中心に簡単に説明する。
【0035】
図4の処理フローに基づき、e1=e(G,K)を算出する処理(ステップS101)の詳細について説明する。まず攻撃検知部107は、公開情報記憶部103からベースポイントGを読み出すと共に、記憶部101から前記算出したKを読み出し、記憶部101上の変数P1にGを、P2にKを、それぞれ格納する(ステップS201)。ここで、P1、P2はそれぞれ平面上の点であり、(x,y)のような座標形式で表せるとする。そして攻撃検知部107は、e(P1,P2)を算出する(ステップS202)。
【0036】
ここで、図6の処理フローに基づき、e(P1,P2)を算出する処理(ステップS202)の詳細について説明する。まず攻撃検知部107は、記憶部101からP2を読み出し、Φ(P2)を計算し、計算結果をP2に格納する(ステップS401)。なお、写像Φは、以下で定義される。
【0037】
Φ:(x,y) → (wx,y)
ここで、wは1の原始3乗根である。次に攻撃検知部107は、記憶部101上の変数SにP1を格納する(ステップS402)。そして攻撃検知部107は、関数fSを導出する(ステップS403)。
【0038】
ここで、図7の処理フローに基づき、楕円曲線Eの点Sに対して、fSを算出する処理の詳細について説明する。まず攻撃検知部107は、前記有限体の位数pの2進展開を算出し、記憶部上の変数のt個組である(nt-1,...,n02に格納する(ステップS501)。次に攻撃検知部107は、記憶部101上の変数i、rにそれぞれ自然数t−2、1を格納し、記憶部101上の変数fに関数1を格納し、さらに、記憶部101上の変数Vに前記楕円曲線Eの点であるSを格納する(ステップS502)。
【0039】
次に攻撃検知部107は、記憶部101上の変数iを読み出し、i<0であるかを判定する(ステップS503)。i<0でない場合(分岐のNO)、攻撃検知部107は、記憶部101上の変数Vおよびrを読み出し、楕円曲線Eの点Vを通り且つ楕円曲線Eに接する直線を求め、当該直線をlr,r(x,y)=0とする(ステップS504)。次に攻撃検知部107は、前記読み出したVに基づき、点[2]Vを算出し、記憶部101上の変数Vに格納する(ステップS505)。また、攻撃検知部107は、記憶部101上の変数Vおよびrを読み出し、楕円曲線E上のV及び無限遠点∞を通る直線を求め、当該直線をv2r}(x,y)=0とする(ステップS506)。そして、攻撃検知部107は、前記記憶部101に格納したfを読み出し、前記求めた関数lr,r(x,y)およびv2r(x,y)とに基づき、関数f2・lr,r(x,y)/v2r(x,y)を算出し、当該算出した関数を記憶部101上の変数fに格納する(ステップS507)。また、攻撃検知部107は、前記読み出したrの値に基づき2rを算出し、当該算出した値を記憶部101上の変数rに格納する(ステップS508)。
【0040】
次に攻撃検知部107は、記憶部101上のniを読み出し、その値が1であるかを判定する(ステップS509)。ni=1でない場合(分岐のNO)、攻撃検知部は、後述するステップS515の処理を行う。一方、ni=1である場合(分岐のYES)、攻撃検知部107は、記憶部101上の変数Vおよびrを読み出し、楕円曲線Eの点Vおよび前記点Sを通る直線を求め、当該直線をlr,1(x,y)=0とする(ステップS510)。次に攻撃検知部107は、前記読み出したVおよびSに基づき、点V+Sを算出し、記憶部101上の変数Vに格納する(ステップS511)。また、攻撃検知部107は、記憶部101上の変数Vおよびrを読み出し、楕円曲線E上のV及び無限遠点∞を通る直線を求め、当該直線をvr+1(x,y)=0とする(ステップS512)。そして、攻撃検知部107は、前記記憶部101に格納したfを読み出し、前記求めた関数lr,1(x,y)およびvr+1(x,y)とに基づき、関数f・lr,1(x,y)/vr+1(x,y)を算出し、当該算出した関数を記憶部101上の変数fに格納する(ステップS513)。また、攻撃検知部107は、前記読み出したrの値に基づきr+1を算出し、当該算出した値を記憶部101上の変数rに格納する(ステップS514)。
【0041】
攻撃検知部107は、記憶部101上のiを読み出し、i+1を算出し、当該算出した値を記憶部101上の変数iに格納する(ステップS515)。そして、攻撃検知部107は、ステップS503に戻って処理を繰り返す。
【0042】
一方、ステップS503の判定において、i<0である場合(分岐のYES)、攻撃検知部107は、記憶部101からfを読みだし、記憶部101上の変数fSに格納する(ステップS516)。以上により、所望の関数fSの導出が完了する。
【0043】
図6の処理の説明に戻って、攻撃検知部107は、導出した関数fSを記憶部101上のfP1に格納する(ステップS404)。また、攻撃検知部107は、記憶部101上の変数SにP2を格納する(ステップS405)。そして攻撃検知部107は、先述した図7の処理フローに基づき、再び関数fSを導出する(ステップS406)。そして、導出した関数fSを記憶部101上のfP2に格納する(ステップS407)。
【0044】
次に攻撃検知部107は、楕円曲線E上の2点を任意に選択し、それぞれ記憶部101上のU,Vに格納する(ステップS408)。そして攻撃検知部107は、P1,P2,U,Vをそれぞれ記憶部101から読み出して、平面上の2点V+P1、および、U+P2を計算し、これら2点が∞(無限遠点)でないかを判定する(ステップS409)。そして、V+P1、U+P2のいずれもが∞でない場合(分岐のYES)、攻撃検知部107は、記憶部101から関数fP2及び関数fP2を読み出し、以下の式に基づいてe(P1,P2)を計算する(ステップS410)。
【0045】
e(P1, P2)=fP1(U+P2)/fP1(U)・fP2(P2)/fP2(V+P2)
一方、ステップS409において、V+P1、U+P2のいずれかが∞である場合(分岐のNO)、攻撃検知部107は、ステップS304の処理に戻って、U,Vを再選択する。
【0046】
図4の処理の説明に戻って、攻撃検知部107は、算出したe(P1, P2)を記憶部101のe1に格納する(ステップS203)。これにより、e1=e(G,K) を算出する処理は終了する。
【0047】
次に、図5の処理フローに基づき、e2=e(Y,C1) を算出する処理(ステップS102)の詳細について説明する。まず攻撃検知部107は、公開情報記憶部103から公開鍵Yを読み出すと共に、記憶部101から前記暗号文C1を読み出し、記憶部101上の変数P1にYを、P2にC1を、それぞれ格納する(ステップS301)。そして攻撃検知部107は、先述した図6の処理フローに基づき、e(P1,P2)を算出する(ステップS302)。最後に、攻撃検知部107は、算出したe(P1, P2)を記憶部101のe2に格納する(ステップS303)。これにより、e2=e(Y,C1) を算出する処理は終了する。
【0048】
以上のように、本発明の第1の実施形態に係る認証システムによれば、故障利用攻撃を高い確率で検知することが可能となる。すなわち、e1=e2が成り立つか否かを判定することで、故障利用攻撃を高精度に検出できる。したがって、本願の方式によれば、ICカード内においてほぼ100%の割合で故障利用攻撃の有無を検出でき、故障利用攻撃による秘密鍵の漏洩を回避することができる。
【0049】
以下では本発明の第2の実施形態について説明する。第2の実施形態は、第1の実施形態と多くの部分は同じであるが、ICカードが故障利用攻撃の有無を判定する処理であるステップS9の詳細な処理フローが図3と異なる。具体的には、まず先述した従来の故障利用攻撃検知処理を行った後に、実施例1に記載の故障利用攻撃検知処理を行うものである。
【0050】
図8に基づき、第2の実施形態に係るICカードの攻撃検知部107が故障利用攻撃の有無を判定する処理(ステップS9)の処理フローについて説明する。楕円曲線Eが方程式
E:y2+a1xy+a3y=x3+a22+a4x+a6
で表されるとき、関数Is_on_EC(x,y)を
Is_on_EC(x,y)=x3+a22+a4x+a6−(y2+a1xy+a3y)
と定める。
【0051】
まず攻撃検知部107は、ステップS7で算出したK=(xk,yk)を記憶装置から読み出し、Kに基づき、Is_on_EC(xk,yk)を計算する(ステップS601)。そして攻撃検知部107は、Is_on_EC(xk,yk)=0であるかを判定する(ステップS602)。Is_on_EC(xk,yk)≠0であれば(分岐のNO)、攻撃検知部107は故障利用攻撃を受けたと判定する(ステップS607)。Is_on_EC(xk,yk)≠0であるならば、Kは楕円曲線Eの点ではなく、故障利用攻撃を受けたと判断できるためである。
【0052】
一方、ステップS601で、Is_on_EC(xk,yk)=0であれば(分岐のYES)、攻撃検知部107は、前記ベースポイントG、前記暗号文C1を復号して得られたKを記憶部101から読み出し、読み出したGおよびKを用いて、e1=e(G,K) を算出する(ステップS603)。ここで、eは、退化なペアリング関数である。次に、攻撃検知部107は、公開鍵Yを公開情報記憶部103から読み出し、また前記暗号文C1を記憶部101から読み出し、読み出したYおよびC1を用いて、e2=e(Y,C1)を算出する(ステップS604)。ここで、ステップ603、S604の処理の詳細は、それぞれ図4および図5の処理フローに従えばよい。次に、攻撃検知部107は、e1=e2が成立するか否かを確かめる(ステップS605)。もしe1=e2が成立する場合には、攻撃検知部107は故障利用攻撃を受けなかったと判定する(ステップS606)。また、もしe1=e2が成立しない場合には、攻撃検知部107は故障利用攻撃を受けたと判定する(ステップS607)。
【0053】
以上のように、第2の実施形態によれば、第1の実施形態と同じ作用・効果を奏する。すなわち、故障利用攻撃を高い確率で検知することが可能となる。さらに、第2の実施形態は、故障利用攻撃を検知できない場合も多いが処理性能に優れた従来の故障利用攻撃検知方法を前段で実施することにより、検知処理の処理時間の平均を約半分にすることができる。したがって、第2の実施形態によれば、第1の実施形態に比べて、検知の処理を高速化できるという特有の効果を奏する。
【0054】
以上、第1〜2の実施形態による認証システムの構成を説明したが、本発明は上記実施形態に限るものではなく、その技術的思想の範囲内で種々の設計変更が可能である。例えば、上記の実施形態においては、楕円曲線暗号として楕円エルガマル暗号を用いたが、楕円RSA暗号を含む他の楕円曲線暗号を用いても同様な故障利用検知は可能である。また、非退化なペアリングとしてヴェイユペアリングを用いたが、その代わりにテイトペアリング(Tate Paring)やこれらの変形を採用することもできる。また、ICカード100は、携帯用情報端末であれば良く、例えば携帯電話やPDA端末等であってもよい。
【0055】
第1〜2の実施形態による認証システムに係るICカード100のハードウェア構成を図9に示す。図9のICカード100においては、Central Processing Unit(CPU)11、Read only memory(ROM)12、Random Access Memory(RAM)13、不揮発性メモリ14、および、入出力インタフェース15がバス17で接続されている。
【0056】
CPU11は後述するROM12に格納されたプログラムやデータを読み込んで実行する。ROM12は、上書きができない記憶装置であり、プログラムやデータが格納される。RAM13は、CPU11がワーク用の記憶装置として使用する。不揮発性メモリ14は、電気的に書き込み可能な記憶装置であり、個人情報のようなICカード毎に異なるデータを格納する。入出力インタフェース15は、後述するICカードリーダとの間でデータの入出力を行う。
【0057】
上記ハードウェア構成を、図1の機能ブロックと対応付けると以下のようになる。ICカード100の各処理部(攻撃検知部107、複号化処理部109、通信部111、及び制御部113)は、ROM12に格納される。公開情報記憶部103、及び秘密鍵記憶部105は不揮発メモリ14により実現される。記憶部101はRAM13により実現される。CPU11は、ROM12から各処理部を読み込んで実行する。このときCPU11は、必要に応じて、不揮発性メモリ14からデータを読み込み、RAM13に対しデータの読み書きを行う。
【0058】
また、第1〜2の実施形態による認証システムに係る認証装置300は、コンピュータ上で動作するプログラムによっても実現することができる。
【0059】
本願発明に係るプログラムを実行するコンピュータである認証装置のハードウェア構成の例を図10に示す。認証装置300のハードウェア構成として、例えば、CPU31、主記憶32、補助記憶装置33、出力インタフェース34、入力インタフェース35、ICカードR/Wインタフェース36がバス37で接続されている。
【0060】
CPU31は後述する主記憶32に格納されたプログラムを実行する。主記憶32としては、通常はRAMが用いられ、後述する補助記憶装置33から実行するプログラムや使用するデータを読み込んで一時的に格納する。補助記憶装置33としては、通常はHard Disk Drive(HDD)が用いられ、プログラムやデータを格納してファイルとして保存する。なお、補助記憶装置33としては、CD−ROM、DVD−ROM、USBメモリ等の外部記憶媒体を用いることもできる。
【0061】
出力インタフェース34には出力装置の一つとして表示装置であるモニタ38が接続される。プログラムの実行結果などがモニタに出力され表示される。入力インタフェース35には入力装置としてキーボード39やマウス40が接続され、これら入力装置からデータが入力される。ICカードR/Wインタフェース36には、ICカードリーダ/ライタ41が接続され、ICカードリーダ/ライタ41にアクセスしたICカードとデータの入出力を行う。
【0062】
上記ハードウェア構成を、図1の機能ブロックと対応付けると以下のようになる。コンピュータを認証装置300として機能させるためのプログラム(乱数生成部305、認証処理部307、暗号化処理部309、通信部311、及び制御部313)、及びデータ(記憶部301、公開情報記憶部303)を予め補助記憶装置13に格納させておく。プログラムが起動されると、当該プログラムおよびデータはまず主記憶12に読み込まれ、その後主記憶12とCPU11とが連携することでプログラムが実行される。プログラム実行中に記憶部301に格納される各種データは、通常は主記憶に書き込まれるが、必要に応じて補助記憶装置13に退避させてもよい。
【0063】
最後に、上記実施形態の前提となる技術である楕円エルガマル暗号、および、楕円曲線上の退化なペアリング関数について、数式を用いて詳細に説明する。
【0064】
以下では、楕円エルガマル暗号について説明する。まず暗号方式の一方式である公開鍵暗号を説明し、次に公開鍵暗号の一方式である楕円曲線暗号を説明し、最後に楕円曲線暗号の一方式である楕円エルガマル暗号を説明する。
【0065】
まず暗号方式の一方式である公開鍵暗号を説明する。暗号方式には、公開鍵暗号方式と共通鍵暗号方式とが含まれる。公開鍵暗号方式は、暗号化と復号化とで異なる鍵を用いる方式である。典型的な公開鍵暗号方式では、暗号化の為の鍵(公開鍵)はあらかじめ公開され、誰もが入手できるようになっている。受信者は、送信したい相手の公開鍵を用いて平文を暗号化して暗号文を作成し、その暗号文を受信者に送信する。暗号文を復号化するための鍵(秘密鍵)は受信者のみが知る秘密情報として保持され、受信者はこの秘密鍵を用いて暗号文を復号化することにより、平文を得る。
【0066】
次に公開鍵暗号の一方式である楕円曲線暗号を説明する。楕円曲線暗号は公開鍵暗号方式に含まれる暗号方式の一つで、楕円曲線と呼ばれる代数曲線の点の間の演算規則を利用した暗号方式の総称である。pを素数、mを自然数とすると、要素数pmの有限体GF(pm)上の楕円曲線とは、方程式
E:y2+a1xy+a3y=x3+a22+a4x+a6
を満たす点(x,y)の集合に、無限遠点とよばれる点∞を加えた集合のことをいう。無限遠点∞を0と表すこともある。ここで、定数a1、a2、a3、a4、および、a6、ならびに、変数x、および、yは、有限体GF(pm)の要素である。楕円曲線上の点は(x,y)のような座標形式(アファイン座標)で表現できるが、無限遠点∞は(x,y)のような座標形式で表現できない唯一の点である。このように、アファイン座標では無限遠点以外の点はGF(pm)の2つの要素の組として表される。
【0067】
楕円曲線E上の点の間には、以下のようにして点の加算と呼ばれる演算が定義できる。PをGF(pm)上の楕円曲線E上の点とする。まず、Pの逆元−Pを以下のように定義する。
【0068】
(1)P=∞のとき、−P=∞
(2)P≠∞のとき(P=(x、y)とする)、−P=(x,−y)
次に、P1,P2をGF(pm)上の楕円曲線E上の2点とする。このとき、P1とP2の和P1+P2を以下のように定義する。
【0069】
(1)P1=∞のとき、P1+P2=P2
(2)P2=∞のとき、P1+P2=P1
(3)P1=−P2のとき、P1+P2=∞
(4)上記以外のとき(P1=(x1,y1),P2=(x2,y2),P1+P2=(x3,y3)とする)、
3=λ2+a1λ−a2−x1−x2
3=(x1−x2)λ−y1−a13−a3
ただし、
λ=(y2−y1)/(x2−x1)・・・(P1≠P2のとき)
λ=(3x12+2a21+a4−a11)/(2y1+a11+a3)・・・(P1=P2のとき)
なお、P1≠P2のときにP1+P2を計算することを楕円加算という。また、P1=P2のときにP1+P2=[2]P1を計算することを楕円2倍算という。
【0070】
楕円曲線とその上の点Pが与えられているとき、ある整数dに対して、点[d]P=P+P+・・・+P(d個の和)を計算することをスカラー倍算という。ここで、点Pをベースポイントと呼ぶ。スカラー倍算とは逆に、楕円曲線とその上の点Pとそのスカラー倍点[d]Pが与えられているとき、整数(スカラー)dを求める問題を楕円曲線離散対数問題という。楕円曲線暗号の安全性は、スカラー倍算は容易に計算可能だが、楕円曲線離散対数問題を解くことは困難であるという事実に依存している。このため多くの楕円曲線暗号方式は、スカラーdを秘密鍵、スカラー倍点[d]Pを公開鍵の一部として使用することが多い。
【0071】
次に、楕円曲線暗号の一方式である、楕円エルガマル暗号について説明する。有限体GF(pm )、その上の楕円曲線E、ベースポイントPはあらかじめ定義されており、公開されているものとする。このとき、楕円エルガマル暗号における受信者の秘密鍵をdとすると、公開鍵をY=[d]Pと定義できる。
【0072】
受信者にメッセージMを秘密裏に送りたい送信者は、受信者の公開鍵Yを用いて、以下の暗号化処理を行う。ここでメッセージMは楕円曲線Eの点として表されているものとする。
(1)(疑似)乱数rを生成する。
(2)点[r]Pを計算し、C1として保持する。
(3)点M+[r]Yを計算し、C2として保持する。
(4)C1とC2のペア(C1,C2)を暗号文として受信者に送る。
暗号文(C1,C2)を受け取った受信者は、自分の秘密鍵dを用いて、以下の復号化処理を行う。
(1)点[d]C1を計算し、Kとして保持する。
(2)点C2−Kを計算し、復号化されたメッセージとする。
【0073】
楕円エルガマル暗号の安全性について説明する。上の通信を傍受した攻撃者の目標は、平文を解読することである。まず攻撃者は公開鍵Y(=[d]P)を入手できるが、ここから秘密鍵dを算出することは楕円曲線離散対数問題を解くことを意味するため、困難である。次に攻撃者は暗号文C=(C1,C2)=([r]P,M+[r]Y)を入手(傍受)できる。C1とベースポイントPから乱数rを算出することは楕円曲線離散対数問題を解くことを意味するため、困難である。従って攻撃者にとって乱数rは入手できないため、そのスカラー倍点[r]Y=[r][d]Pの算出も困難であり、C2から平文Mを入手することも困難である。このように、楕円曲線離散対数問題が困難であるという前提の下で、楕円エルガマル暗号の解読は困難であることが知られている。
【0074】
以下では、楕円曲線上の退化なペアリング関数について説明する。楕円曲線上のペアリング関数は退化なものと非退化なものの2つに分けられ、退化なペアリング関数は非退化なペアリング関数を用いて構成することができる。そこで、まず非退化なペアリング関数の一実施例であるヴェイユペアリング(Weil Paring)について説明し、次にヴェイユペアリングを用いて退化なペアリング関数を構成する方法を述べる。
【0075】
Eを有限体GF(pm)上の楕円曲線とする。楕円曲線上のペアリングeとは、楕円曲線の2点に対してある値を出力し、かつ以下の性質を満たす関数である。
【0076】
(1) e(P1,P2+P3)=e(P1,P2)・e(P1,P3)
(2) e(P1,P2)=e(P2,P1)
そして、非退化なペアリングとは、上記の条件(1),(2)に加えて、条件(3) e(P1,P1)=1を満たすものをいう。
【0077】
非退化なペアリングの例として、ヴェイユペアリングが知られている。以下では、ヴェイユペアリングの説明をする。自然数nに対して、E[n]を[n]P=∞を満たす楕円曲線Eの点Pの全体の集合とする。集合E[n]の2点P1,P2に対するヴェイユペアリングe(P1,P2)を以下のように定める。
【0078】
e(P1, P2)=fP1(U+P2)/fP1(U)・fP2(V)/fP2(V+P1)
ここで、fP1, fP2は、前記楕円曲線の点P1, P2からそれぞれ構成されるE上の関数である。また、例えばfP1(U)とは、fP1にE上の点Uを代入した値を表す。なお、fP1, fP2の構成については後述する。また、点U, Vは、それぞれU+P2及びV+P1が無限遠点∞にならない楕円曲線E上の任意の点である。
【0079】
次に、楕円曲線の点Pに対する、関数fPを導出するアルゴリズムを説明する。まず、方程式li,j(x,y)=0を以下のように定義する。
【0080】
i≠jのとき、楕円曲線E上の2点[i]P及び[j]Pを通る直線
i=jのとき、楕円曲線E上の点[i]Pを通り楕円曲線Eに接する直線
また、方程式vi(x,y)=0を、[i]P及び無限遠点∞を通る直線と定義する。次に、関数gnを以下の漸化式で定義する。ただし、qは自然数である。
【0081】
1=1
2q=lq,q(x,y)/v2q(x,y)・gq2
2q+1=l2q,1(x,y)/v2q+1(x,y)・g2q
このとき、fP=gpとなることが知られている。
【0082】
次に、退化なペアリングについて説明する。退化なペアリングとは、非退化でないペアリングと定義され、一例として、以下のように構成できる。
【0083】
pを素数とし、p=2 mod 3を満たすとする。有限体GF(p)上の楕円曲線E’:y2=x3+1とする。ここで、先述のように楕円曲線は本来GF(pm)において定義可能であるが、ここではm=1の場合に限定する点に注意する。wを1の原始3乗根とし、写像Φ:(x,y)−>(wx,y)とする。このとき、楕円曲線E’の点(x,y)に対してf(x,y)も楕円曲線E’の点となる。
【0084】
以上により、楕円曲線の2点P1,P2に対して、以下の式により退化なペアリングe’を構成することができる。
【0085】
e’(P1,P2)=e(P1,Φ(P2))
ここで、eはヴェイユペアリングである。なお、退化なペアリングの構成に用いる写像Φはdistortion写像と呼ばれる。
【図面の簡単な説明】
【0086】
【図1】本発明の第1の実施形態に係る認証システムの機能ブロック図である。
【図2】本発明の第1の実施形態に係る認証システムの全体の処理手順を示したフローチャートである。
【図3】本発明の第1の実施形態に係る認証システムの攻撃検知の処理手順を示したフローチャートである。
【図4】本発明の第1の実施形態に係る認証システムの攻撃検知処理における、e1の算出の処理手順を示したフローチャートである。
【図5】本発明の第1の実施形態に係る認証システムの攻撃検知処理における、e2の算出の処理手順を示したフローチャートである。
【図6】本発明の第1の実施形態に係る認証システムの攻撃検知処理における、e(P1,P2)の算出の処理手順を示したフローチャートである。
【図7】本発明の第1の実施形態に係る認証システムの攻撃検知処理における、fSの算出の処理手順を示したフローチャートである。
【図8】本発明の第2の実施形態に係る認証システムの攻撃検知の処理手順を示したフローチャートである。
【図9】ICカードのハードウェア構成を示した図である。
【図10】コンピュータである認証装置のハードウェア構成を示した図である。
【図11】従来の一般的な認証システムの全体の処理手順を示したフローチャートである。
【符号の説明】
【0087】
11 CPU
12 ROM
13 RAM
14 不揮発性メモリ
15 入出力インタフェース
17 バス
31 CPU
32 主記憶
33 補助記憶装置
34 出力インタフェース
35 入力インタフェース
36 ICカードR/Wインタフェース
37 バス
38 モニタ
39 キーボード
40 マウス
41 ICカードリーダ/ライタ
100 ICカード
101 記憶部
103 公開情報記憶部
105 秘密鍵記憶部
107 攻撃検知部
109 復号化処理部
111 制御部
113 通信部
300 認証装置
301 記憶部
303 公開情報記憶部
305 乱数生成部
307 認証処理部
309 暗号化処理部
311 通信部
313 制御部

【特許請求の範囲】
【請求項1】
所定の楕円曲線に基づく楕円エルガマル暗号の秘密鍵dを秘密に格納した秘密鍵記憶部と、
前記楕円エルガマル暗号の公開鍵YとベースポイントGとを格納した公開情報記憶部と、
前記楕円エルガマル暗号によって暗号化された暗号文C=(C1,C2)の入力を受付ける入力部と、
当該暗号文Cを、記憶部に格納された秘密鍵dに基づき、K=[d]C1およびM’=C2−Kを順に算出することで復号メッセージM’を生成する復号部と、当該復号メッセージM’を出力する出力部とを備える認証用媒体において、
退化なペアリングeに基づき関係式e(G,K)=e(Y,C1)が成立するかを判定する判定部を、
さらに備え、
前記出力部は、前記関係式が成立する場合に、前記復号メッセージM’を出力する
ことを特徴とする認証用媒体。
【請求項2】
前記判定部は、前記復号部が算出したKが前記所定の楕円曲線の点である場合に、前記関係式に基づく判定を行う、
ことを特徴とする請求項1に記載の認証用媒体。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate


【公開番号】特開2010−226402(P2010−226402A)
【公開日】平成22年10月7日(2010.10.7)
【国際特許分類】
【出願番号】特願2009−71096(P2009−71096)
【出願日】平成21年3月24日(2009.3.24)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】