JP3950638B2 - 耐タンパーモジュラ演算処理方法 - Google Patents
耐タンパーモジュラ演算処理方法 Download PDFInfo
- Publication number
- JP3950638B2 JP3950638B2 JP2001060223A JP2001060223A JP3950638B2 JP 3950638 B2 JP3950638 B2 JP 3950638B2 JP 2001060223 A JP2001060223 A JP 2001060223A JP 2001060223 A JP2001060223 A JP 2001060223A JP 3950638 B2 JP3950638 B2 JP 3950638B2
- Authority
- JP
- Japan
- Prior art keywords
- mod
- processing
- calculation
- data
- processing method
- 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.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/60—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
- G06F7/72—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic
- G06F7/724—Finite field arithmetic
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/60—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
- G06F7/72—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic
- G06F7/722—Modular multiplication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/60—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
- G06F7/72—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic
- G06F7/728—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic using Montgomery reduction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/72—Indexing scheme relating to groups G06F7/72 - G06F7/729
- G06F2207/7219—Countermeasures against side channel or fault attacks
- G06F2207/7223—Randomisation as countermeasure against side channel attacks
- G06F2207/7257—Random modification not requiring correction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/60—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
- G06F7/72—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic
- G06F7/724—Finite field arithmetic
- G06F7/725—Finite field arithmetic over elliptic curves
Landscapes
- Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- General Engineering & Computer Science (AREA)
- Storage Device Security (AREA)
- Complex Calculations (AREA)
Description
【発明の属する技術分野】
本発明は、高いセキュリティを持つICカードなどの耐タンパー暗号処理方法に関するものである。
【0002】
【従来の技術】
ICカードは、勝手に書き換えることが許されないような個人情報の保持や、秘密情報である暗号鍵を用いたデータの暗号化や暗号文の復号化を行う装置である。ICカード自体は電源を持っておらず、ICカード用のリーダライタに差し込まれると、電源の供給を受け、動作可能となる。動作可能になると、リーダライタから送信されるコマンドを受信し、そのコマンドに従ってデータの転送等の処理を行う。ICカードの一般的な解説は、オーム社出版電子情報通信学会編水沢順一著「ICカード」などにある。
【0003】
ICカードの構成は、図1に示すように、カード101の上にICカード用チップ102を搭載したものである。図に示すように、一般にICカードは、ISO7816の規格に定められた位置に供給電圧端子Vcc、 グランド端子GND、リセット端子RST、 入出力端子I/Oおよびクロック端子CLKを持ち、これらの端子を通して、リーダーライタから電源の供給やリーダライタとのデータの通信を行う(W.Rankl and Effing : SMARTCARD HANDBOOK、 John Wiley & Sons、 1997、 pp.41参照)。
【0004】
ICカード用チップの構成は、基本的には通常のマイクロコンピュータと同じ構成である。その構成は、図2に示すように、中央処理装置(CPU)201、記憶装置204、入出力(I/O)ポート207、コ・プロセッサ202からなる(コ・プロセッサはない場合もある)。CPU201は、論理演算や算術演算などを行う装置であり、記憶装置204は、プログラムやデータを格納する装置である。入出力ポートは、リーダライタと通信を行う装置である。コ・プロセッサは、暗号処理そのもの、または暗号処理に必要な演算を高速に行う装置であり、例えばRSA暗号の剰余演算を行うための特別な演算装置や、DES暗号のラウンド処理を行う暗号装置などがある。ICカード用プロセッサの中には、コ・プロセッサを持たないものも多くある。データバス203は、各装置を接続するバスである。
【0005】
記憶装置204は、ROM(Read Only Memory)やRAM(Random Access Memory)、EEPROM(Electrical Erasable Programmable Read Only Memory)などからなる。ROMは、変更できないメモリであり、主にプログラムを格納するメモリである。RAMは自由に書き換えができるメモリであるが、電源の供給が中断されると、記憶している内容は消滅する。ICカードがリーダライタから抜かれると電源の供給が中断されるため、RAMの内容は、保持されなくなる。EEPROMは、電源の供給が中断されてもその内容を保持することができるメモリである。書き換える必要があり、ICカードがリーダライタから抜かれても、保持するデータを格納するために使われる。例えば、プリペイドカードでのプリペイドの度数などは、使用するたびに書き換えられ、かつリーダライタか抜かれてもデータを保持する必要があるため、EEPROMで保持される。
【0006】
ICカードは、プログラムや重要な情報がICカード用チップの中に密閉されているため、重要な情報を格納したり、カードの中で暗号処理を行うために用いられる。従来、ICカードでの暗号を解読する難しさは、暗号アルゴリズムの解読の困難さと同じと考えられていた。しかし、ICカードが暗号処理を行っている時の消費電流を観測し、解析することにより、暗号アルゴリズムの解読より容易に暗号処理の内容や暗号鍵が推定される可能性が示唆されている。消費電流は、リーダライタから供給されている電流を測定することにより観測することができ、この攻撃法の詳細は、John Wiley & sons社 W.Rankl & W.Effing著 「Smart Card Handbook」の8.5.1.1 Passive protective mechanisms(263ページ)にこのような危険性が記載されている。
【0007】
ICカード用チップを構成しているCMOSは、出力状態が1から0あるいは0から1に変わった時に電流を消費する。特に、データバス203においては、バスドライバーの電流や、配線および配線に接続されているトランジスタの静電容量のため、バスの値が1から0あるいは0から1に変わると、大きな電流が流れる。そのため、消費電流を観測すれば、ICカード用チップの中で、何が動作しているか分かる可能性がある。
【0008】
図3は、ICカード用チップの1サイクルでの消費電流の波形を示したものである。処理しているデータに依存して、電流波形が301や302のように異なる。このような差は、バス203を流れるデータや中央演算装置201で処理しているデータに依存して生じる。
【0009】
コ・プロセッサ202は、CPUと並列に、例えば、512ビットの剰余演算を行うことができる。そのため、CPUの消費電流とは異なった消費電流波形の長時間の観測が可能である。その特徴的な波形を観測することにより、コ・プロセッサの動作回数を容易に測定することができる。コ・プロセッサの動作回数が暗号鍵と何らかの関係があるならば、コ・プロセッサの動作回数から暗号鍵を推定できる可能性がある。
【0010】
また、コ・プロセッサでの演算内容が、暗号鍵に依存した偏りがあると、その偏りが消費電流から求められ、暗号鍵が推定される可能性がある。例えば、乗算剰余演算の際に発生するオーバーフロー処理は、多くの場合、オーバーフロー処理特有の電流が発生する。オーバーフロー処理をするかしないかで、処理時間が異なる場合もある。
【0011】
CPUでも同様の事情が存在する。暗号鍵のビット値は決まっているため、処理するデータを変更して、消費電流を観測することにより、暗号鍵のビット値の影響が観測できる可能性がある。これらの消費電流の波形を統計的に処理することにより、暗号鍵を推定できる可能性がある。
【0012】
【発明が解決しようとしている課題】
本発明の課題は、ICカード用チップでのデータ処理と消費電流との関連性を減らすことである。消費電流とチップの処理との関連性が減れば、観測した消費電流の波形からICカードチップ内での処理や暗号鍵の推測が困難になる。本発明の着眼点は、ICカードチップでの乗算剰余処理AB mod Nまたはモンゴメリ法による乗算剰余処理ABR^(-1) mod Nにおいて、乗数Bまたは被乗数Aを、そのモジュラスNを用いて、tN + B*(-1)^g、sN + A*(-1)^f (s, t, f, gは整数。但し、f, gは0又は1)に置き換えて処理することにより、消費電流の波形や処理時間の偏りから、処理内容や暗号鍵の推測を困難にするものである。
【0013】
【課題を解決するための手段】
ICカードチップに代表される耐タンパー装置は、プログラムを格納するプログラム格納部、データを保存するデータ格納部を持つ記憶装置と、プログラムに従って所定の処理を実行しデータ処理を行う中央演算装置(CPU)を持ち、プログラムは、CPUに実行の指示を与える処理命令から構成される一つ以上のデータ処理手段からなる情報処理装置として捉えることができる。
【0014】
電子マネーに代表される高セキュリティのICカードでは、RSA暗号や、ガロア体GF(p^n):pは素数、nは正の整数)上の楕円曲線暗号が用いられる。その際、乗算剰余演算A*B mod Nや、多項式の乗算剰余演算A(X)*B(X) mod Φ(X)の処理が必要となる(A=Bの場合もある)。以下、多項式の場合も考え方は同じなので、通常の乗算剰余処理の場合について説明する。多項式の場合の乗算剰余処理ついては、計算機上の実装が通常の乗算剰余処理の場合と若干異なるが、それは「発明の実施形態」にて詳細に説明する。
【0015】
本発明において、乗算剰余演算で処理しているデータとICカード用チップの消費電流の関連性を撹乱する一つの方法は、本来の演算処理に用いられるデータを直接用いずに、演算結果が大きく変わらないようなデータを用いて計算を行い、計算後に結果を修正することである。
【0016】
具体的には、乗算剰余処理A*B mod Nの計算を行う際、乗数B及び被乗数Aの両者を、それぞれtN + B*(-1)^g、sN + A*(-1)^f (s, t, f, gは少なくとも1つは0でない整数。但し、f, gは0又は1)に置き換えて、
S = (sN + A*(-1)^f)*(tN + B*(-1)^g) mod N
を計算し、その後、f+gが奇数になる場合は、N-Sを該乗算剰余演算結果とし、f+gが偶数となる場合は、Sを演算結果とすることである。
【0017】
上記の処理では、乗算剰余演算を行う度に本来の答になるように修正している。しかし、RSA暗号に代表されるべき乗剰余計算の場合は、毎回修正を施す必要はなく、最終的に修正を施せばよい。
【0018】
RSA暗号で用いられるべき乗剰余計算y^x mod Nに対して用いられる乗算剰余処理を上記の置き換え、すなわち、乗算剰余処理A*B mod Nの計算を行う際、乗数B及び被乗数Aの両者を、それぞれtN + B*(-1)^g、sN + A*(-1)^f (s, t, f, gは整数。但し、f, gは0又は1)に置き換えて、
S = (sN + A*(-1)^f)*(tN + B*(-1)^g) mod N
を計算し、最後に、必要ならNからべき乗剰余計算の値を引く修正を行えばよい。なぜこのようなことができるかは、「発明の実施形態」の中で述べる。
【0019】
上記のように処理することで、本来の乗算剰余演算処理で発生する電流とは異なるパターンの電流が観測されることになるため、本来のデータの場合に期待される波形を基に内部処理を推定することが困難になる。s, t, f, gを外部から推定できない情報源を用いて変更すれば、さらに効果が高まり、特に、複数の波形を収集して平均をとるなどの統計処理を行う場合は、ランダムな波形を平均化するのと同じことになり、波形の特徴は消滅するため、さらに効果は顕著である。
【0020】
本発明は、特にRSA暗号での、乗算剰余演算や、べき乗剰余計算、および楕円曲線暗号での定義体上での乗算や除算、ベースポイントのスカラー倍などの情報隠蔽に利用することができる。
【0021】
【発明の実施形態】
以下に示す実施例では、公開鍵暗号(非対称鍵暗号)の代表例であるRSA暗号、楕円曲線暗号を例にとる。RSA暗号については、岡本栄司著「暗号理論入門」(共立出版)や、A.J.Menezes、 P.C. van Oorschot、 S. A.Vanstone著 Handbook of Applied Cryptography、(CRC-Press)などに詳しく記載されている。楕円曲線暗号については、考案者の一人が書いたN.コブリツ著(櫻井幸一訳)「数論アルゴリズムと楕円暗号理論入門」(シュプリンガーフェアラ−ク東京)、楕円曲線上の演算については、I.H.シルバーマン・J.テイト著「楕円曲線論入門」(シュプリンガーフェアラ−ク東京)、又、群、環、体等の代数系については、松坂和夫著「代数系入門」(岩波書店)に詳しい説明がある。
【0022】
実施例を説明するに先立ち、背景となる数学的知識を整理しておく。一般に公開鍵暗号(非対称鍵暗号)においては、秘密鍵情報が公開鍵の中に含まれているが、公開鍵から秘密鍵情報を取り出すことが、計算時間の点で著しく現実性を欠くということ(計算量的安全性)を根拠にして暗号が構成されている。計算量的安全性を持つ問題の代表的なものとして、素因数分解と、群上の離散対数問題が挙げられる。前者を利用したものがRSA暗号であり、後者を楕円曲線上のモーデル・ヴェイユ群に適用して利用しているものが楕円曲線暗号である。
【0023】
簡単にRSA暗号を説明する。RSA暗号では、大きな素数、例えば512ビットの2つの素数p,qの積 N = pq と Nと互いに素な数 e(ICカードでは、3や、65537が用いられることが多い)をとり、これを公開鍵として公開鍵簿に登録する。このとき、この公開鍵の持ち主Aに送信者Bは、1以上N-1以下の数で表現されたデータ(平文) L を、
y = L^e mod N
として暗号化して送信する。ここで、L^eはLのe乗を表す記号とする。
この暗号文 R を受け取った持ち主Aは、xe mod (p-1)(q-1) = 1となる秘密鍵 xを用いて
y^x mod N
を計算する。ここで、(p-1)(q-1)は、Nのオイラー関数の値φ(N)である。これは、Nと互いに素な自然数の個数に等しい。オイラーの定理によれば、
y^((p-1)(q-1)) mod N = 1
が成り立ち、一方で、xe = 1 + k(p-1)(q-1)(kは整数)と書くことができるので、
が成り立つ。従って、y^x mod Nを計算することで、持ち主Aは、送信者Bの平文 L を復号することができる。この際、秘密鍵 x を計算するのに、Nの素因数 p、 q が用いられており、現在のところ、素因数分解を介さないで、xを計算する方法は知られておらず、大きな素数の積を因数分解することは、現実的でない時間が必要であるので、Nを公開しても、Aの秘密鍵は安全である。
【0024】
RSA暗号の暗号化/復号化操作で用いられるべき乗剰余計算の実装方法の代表的なものは、アディション・チェイン方式とスライディング・ウインドウ方式である。
まず、アディション・チェイン方式による計算アルゴリズムについて図4を用いて説明する。この方式は、最も多く利用されているものである。ここでは、y^x mod Nの計算を、秘密鍵 x のビットを2ビット毎に区切り、上位から読んでいき、それが、00,01,10,11のいずれであるかに応じて、y[0] = 1, y[1] = y, y[2] = y^2 mod N, y[3] = y^3 mod N を対応させ、剰余乗算計算を行うことによって実現したものである。 勿論、2ビット毎に区切ることは説明の便宜のためであり、実際には1ビット、3ビット、4ビットをまとめて計算することもある。その際も考え方は全く同じである。
【0025】
まず、ビットテーブルy[0] = 1, y[1] = y, y[2] = y^2 mod N, y[3] = y^3 mod Nを用意する(ステップ401)。続いて初期化(ステップ402)を行い、条件分岐(ステップ403)にて、指数xの最後まで処理し終えたかを判定し、終了していれば、処理終了し、終了していなければ、4乗の計算(ステップ404)を行う。この4乗計算(ステップ404)は、xのビットと無関係に行われるが、その次に行われる剰余乗算計算においては、条件分岐処理(ステップ405,406,407,408)が行われ、それぞれの条件に対応して、ステップ409,410,411,412の剰余乗算演算が行われる。
【0026】
この方式で正しい計算が行なえることを簡単に数値例で確認する。この計算方式の本質的部分は指数部分であるので、例として、指数部分のみ数値である例として
S = y^219 mod N
を取り上げる。ここで、219は二進数表示で11011011である。これをもとに、2ビット幅のアディション・チェイン方式で計算する。11011011を2ビットブロックに分割すると、11 01 10 11である。S = 1(初期化)を行ない、これをNを法として4乗する。勿論、1を4乗しても1である。次に指数部の先頭のビットブロックを読む。これは、11であるから、y[3] = y^3 mod Nを乗じて、S = y^3 mod Nとなる。次に、再びループし、これをNを法として4乗すると、y^12 mod Nとなる。
指数部のビットブロックの先頭から2番目のビットブロックを読むと、これは、01であるから、y[1] = y を乗じて、S = y^13 mod Nとなる。再びループし、これをNを法として4乗すると、S = y^52 mod Nとなる。指数部のビットブロックの先頭から3番目のビットブロックを読むと、これは、10であるから、y[2] = y^2 mod N を乗じて、S = y^54 mod Nとなる。再びループし、これをNを法として4乗すると、S = y^216 mod Nとなる。指数部のビットブロックの先頭から4番目のビットブロックを読むと、これは、11であるから、y[1] = y^3 mod N を乗じて、S = y^219 mod Nとなる。これが求める答である。
【0027】
次に、もう一つの代表的なべき乗剰余計算アルゴリズムであるスライディング・ウインドウ方式について図5を用いて説明する。ここでは、y^x mod Nを計算する際のxの最大の処理単位を2ビットとする。まず、テーブルy[2] = y^2 mod N、 y[3] = y^3 mod Nを用意する(ステップ501)。次にSを1に初期化し(ステップ502)、指数xの最後のビットであるかどうかを判定し(ステップ503)、終了していれば、処理を終了し、xの最後のビットでなければ、二乗剰余演算を行う(ステップ504)。指数xの1ビットを読み(ステップ505)、これが1でなければ、再び条件分岐処理(ステップ503)に戻り、この1ビットが1であれば、二乗剰余処理(ステップ507)を行う。次にxの次のビットが受け取れたかどうかを判定し(ステップ508)、受け取れなければ、条件分岐処理(ステップ503)に戻るが、このときはxの最後まで処理が終了しているので、ステップ503の条件はYesとなり、処理を終了する。xの次の処理ビットが受け取れた場合は、条件分岐処理(ステップ509)にて、そのビットが0であるか1であるかに応じ、それぞれ、乗算剰余計算(ステップ510,511)を実行し、再び条件分岐処理(ステップ503)に戻る。
【0028】
これも、数値例で簡単に確認しておく。例として
S = y^2226 mod N
を計算するにあたり、テーブルy[2] = y^2 mod N, y[3] = y^3 mod Nを用意する。この際、y[0], y[1]は不要である。2226は、2進法で、100010110010と書くことができる。これを上位より読んで、2ビットが1を上位に持っているときは、それを一塊とみなし、0が続いているときは、2乗剰余演算を行なうとみなす。つまり、100010110010 = 10 0 0 10 11 0 0 10 という分解に対応するように処理する。従って、S=1と初期化した後、まず、10に対応する処理、すなわち、Sの2乗剰余演算を行なって、Sにy[2]を掛ける。このとき、S = y[2] = y^2 mod Nとする。次に、0に対応した処理、すなわち2乗剰余演算を行なって、S = y^4 mod Nを得る。続く0に対応する処理、S = y^8 mod Nを行ない、次に、10に対応する処理を行なえば、S = ((y^8 mod N)^4 mod N * y^2 mod N) mod N = y^34 mod Nとなる。続く処理は、11に対応した、S = ((y^34 mod N)^4 * y^3 mod N) mod N = y^139 mod Nを実行する。さらに続く2つの0に対応して4乗剰余演算を行ない、S = (y^139 mod N)^4 mod N = y^556 mod Nとし、最後の10に対応する処理S = ((y^556 mod N )^4 mod N * y^2 mod N) mod N = y^2226 mod Nによって、求める答を得る。この方式は、テーブルとして、指数ビットの先頭が1であるものだけを利用するので、RAMの容量が半分で済むという利点がある。
【0029】
上記のアディション・チェイン方式、スライディング・ウインドウ方式は、モンゴメリ法と呼ばれる方式を用いて実行されることがあることに注意しておく。モンゴメリ法とは、剰余乗算演算 AB mod Nを高速に実行する方式であり、特にハードウエア化に向いた方法である。簡単にそのしくみを説明する。詳細は、モンゴメリの原著論文“Modular Multiplication Without Trial Division”、 Mathematics of Computation 44、 170、 pp.519-521(1985))に記載されている。
【0030】
モンゴメリ法の本質は、殆ど全てのコンピュータにおいて、mod 2^nの演算は、上位ビットを無視することにより実現できるということを利用することにある。すなわち、AB mod Nの計算を2のべきを法とする演算に置き換えることに、その本質がある。RSA暗号では、Nは、大きな素数の積であるから奇数であり、従って任意の2のべきと互いに素である。そこで、M, Wを未知数とした不定方程式:
AB + MN = WR
を考える。ここで、A, Bのビット長はnであるものとし、R = 2^nとする。このとき、この不定方程式は無限個の解を有する。このようなMを見つければ、WはABR^(-1) mod Nと合同である。Mは、Rおきに並んでいるので、Rより小さい非負の値がとれる。このとき、Wは、ABR^(-1) mod Nであるかまたは、ABR^(-1) mod N+Nである。後者の場合は、Nを引き算して求める答を得る。
【0031】
このように、モンゴメリ法においては、ABR^(-1) mod Nの形で演算が行なわれるので、上記のアルゴリズム、例えば、アディション・チェイン方式では図4の401、スライディング・ウィンドウ方式では図5の501で実行されるテーブル作成処理において、それぞれのテーブルの値を、y[0] = R mod N, y[1] = y*R mod N, y[2] = y^2*R mod N, y[3] = y^3*R mod Nに置き換えて処理する。Sの初期値もR mod Nとする。すると、被乗数Aと乗数Bの値は、もとの値のR倍になっているため、ABR^(-1) mod Nの処理では、必ずR倍の項が残ることになる。このデータ形式をモンゴメリフォーマットと呼ぶことにすれば、アディション・チェイン、スライディング・ウインドウ両方式を、モンゴメリフォーマットで実行し、最後に、R^(-1) mod N倍することにより、求める答を得ることができる。
【0032】
次に、後の説明の便宜のため、乗算剰余処理におけるオーバーフロー処理について簡単に説明しておく。オーバーフロー処理は、演算装置の実装方法によって若干の違いがあるが、ここでは代表的なものを説明する。最も単純な方式は、A*Bをはじめに求め、これがN未満であれば、このA*Bを答えとし、Nより大きい場合は、N未満の値になるまでNを引き算することによってA*B mod Nを求めるというものである。つまり、この場合、「オーバーフロー」とは、A*BがN以上になることであり、「オーバーフロー処理」とは、N未満の値になるまでNを引き算するという操作に他ならない。この方式は、A*Bのビット長が小さいときはコード量も少なく、処理時間も無視できるが、ビット長が大きくなると、ICカードのような非力なデバイスでは処理時間が極めて大きくなるため、あまり用いられない。
【0033】
もう一つは、モンゴメリ法で生ずるオーバーフローである。先に簡単に説明したように、モンゴメリ法では、法N(奇数)における剰余を計算するよりも、法R = 2^n(nはA,Bのビット数)における剰余を求める方が計算が速いことに着目し、不定方程式:
AB + MN = WR
によって、A*B*R^(-1) mod Nの計算を上記不定方程式のM = -A*B*N^(-1) mod Rを求める操作に変換する。Mは、0以上R未満の範囲に一つ存在する。これを求めた場合、A*B*R^(-1) mod Nが確定するかというと、そうではない。(以下、この不定方程式をモンゴメリ方程式と呼ぶことにする。)
A、 Bが既に法Nでの剰余であれば、A < N < RかつB < N < Rである。また、M < Rであるので、
W = (AB + MN)/R < (NR + RN)/R = 2N
となる。つまり、Wは2Nよりも小さいが、Nより大きい可能性がある。実際、そのような場合があり、その際には、Nを一回引き算する必要がある。つまり、この場合、「オーバーフロー」とは、WがN以上になることであり、「オーバーフロー処理」とは、Nを一回引く操作に対応する。
【0034】
RSA暗号の場合、乗算剰余処理が出現することは明らかであるが、楕円曲線暗号に対しては、自明な事柄ではないので、以下、楕円曲線暗号について簡単に説明しておく。楕円曲線とは、体Kの上で定義された3次多項式の零点集合であり、Kの標数が2でない場合は、
y^2 = x^3 + ax + b
という標準形を持つ。標数が2の体の上では、
y^2 + cy = x^3 + ax + b 又は、
y^2 + xy = x^3 + ax + b
という標準形を持つ曲線である。(いずれの場合も、後に説明する無限遠点Oを含めて考える)。楕円曲線の形状は、図6のようなものになる。
【0035】
暗号で必要なのは、定義体が有限体(ガロア体)の場合のみであるので、その場合に限って説明する。有限個の元からなる体を有限体又はガロア体といい、その構造はよく知られている。その最も単純な構成法は以下の通りである。まず、素数 p を法とする整数環の剰余環 Zp を考える。Zpは集合としては、{0, 1, 2,…, p-1}に一致する。Zpにおける和(+)、積(*)は、
A (+) B = (A+B) mod p
A (*) B = (A*B) mod p
で定義されている。0以外の元は、(*)に関して逆元を持つので、体の構造を持っている。これを素体といい、GF(p)と書く。これが最も原始的な有限体の例である。以下、混乱がない限り、(+)は通常の+と書き、(*)も、通常の積*で表す。積については、A*Bを、ABのように書くこともある。
【0036】
次に、GF(p)の元を係数に持つ多項式 f(X) を考え、その零点のうち、GF(p)に含まれないものをGF(p)に添加することによって、新しい体を構成することができる。これを、GF(p)の有限次代数拡大体という。GF(p)の有限次代数拡大体の元の個数は、pのべきになっていることが知られている。その元の個数をp^nと書くとき、有限次代数拡大体をGF(p^n)などと表示することがある。
【0037】
準同型定理(松坂和夫「代数系入門」岩波書店、 p.125 定理4)によれば、GF(p^n)は、GF(p)係数の多項式全体がつくる環GF(p)[X]をGF(p)[X]のn次既約多項式f(X)の倍元全体の作るイデアルに関する剰余環GF(p)[X]/(f(X))と同型である。この際、f(X)は既約でさえあれば、環としては同じものである。従って、適当にn次の既約多項式を決めて、和と積を、Zpと同じように、法f(X)における和、積とすることでGF(p^n)の演算をマイクロコンピュータ上に実現することができる。
【0038】
ICカードの上で実装する場合は、特に素体GF(p)(pは素数)の場合とバイナリ体GF(2^n)の場合が重要である。GF(p^n)を、pの大きさをマイクロコンピュータのレジスタの大きさ程度にすることによって、実現する方法もあり、研究が進められている。
【0039】
楕円曲線上の点の間には、演算を定めることができる。図7に示すように、楕円曲線上の二つの点、P,Qがあるとき、この二点を通る直線を引き(P=Qのときは接線を引く)、この直線が再び楕円曲線と交わる点Rをx軸に関して対称に折り返した点は、曲線の対称性から、再び楕円曲線上の点となる。この点をP+Qと書き、PとQの「和」と定義する。交わる点がない場合は、架空の点として無限遠点というものを考え、この架空の点で交わっているものとみなす。無限遠点をOと書く。また、楕円曲線上の点Pとx軸に関して対称な位置にある点をPの逆元といい、-Pで表す。楕円曲線上の一点Pをk個加えたものを、kP、-Pをk個加えたものを-kPと書いて、Pのスカラー倍という。これらの座標は、P,Qの座標の有理式で表すことができ、従って一般の体の上でこの演算を考えることができる。この「加法」は、通常の加法と同様に、結合法則、交換法則が成立し、この加法に関して、無限遠点Oは、通常の数での演算と同様にゼロの役割を果たし、-Pは、Pと加えると、Oになる。これは楕円曲線上の加法演算が、可換群(アーベル群)の構造を持つことを示している。これをモーデル・ヴェイユ群ということがある。楕円曲線E、定義体GF(q)(q=p^n)を固定したときのモーデル・ヴェイユ群を、G(E/GF(q))と書くことがある。G(E/GF(q))の構造は非常に単純で、巡回群か、または二つの巡回群の直積と同型になることが知られている。暗号学上は、巡回群になっているか、または2つの巡回群の直積になっている場合は、いずれかの位数(元の数)が、大きな素数で割れることが望ましい。
【0040】
楕円曲線上の点P=(x1, y1)、 Q=(x2, y2)の和P+Qの座標を(x3, y3)とする。P+Q=Oでないとき、以下の関係式が成立する。ICカードでは、標数3を用いる積極的理由は何もないので、以下標数3の場合は省略する。以下、考える楕円曲線は、非特異(non-singular)であるものとする。
【0041】
標数が2,3でない場合:
y^2 = x^3 + ax + b
に対しては、
x3 = h^2 - x1 - x2
y3 = h(x1 - x3) - y1
ここで、hは、
h = (y2 - y1)/(x2 - x1) if P≠Q, (3x1^2 + a)/(2y1) if P = Q
である。
【0042】
標数が2の場合:
y^2 + xy = x^3 + ax + b
に対しては、
x3 = h^2 + h + x1 + x2 + a
y3 = h(x1 + x3) + x3 + y1
ここで、hは、
h = (y1 + y2)/(x1 + x2) if P≠Q, x1 + (y1/x1) if P = Q
である。
【0043】
上記の和の公式では、演算をガロア体GF(p^n)の上で行う必要がある。従って、例えば、GF(p)(pは大きな素数)の上では、
x3 = (h^2 - x1 - x2) mod p
y3 = (h(x1 - x3) - y1) mod p
を行うことになる。
【0044】
またhの計算もmod pで実行しなければならない。つまり、例えば、h = (y2 - y1)/(x2 - x1)は、h = (y2 - y1)*{(x2 - x1)^(-1) mod p} mod pと解釈される。
【0045】
GF(p^n)の場合も、先に述べたように、結局は、多項式の乗算剰余演算を行うことになるので、同様に理解することができる。
【0046】
一般に、kP=Qの値がわかっても、逆にkの値を知るのは計算量が膨大になるため、容易でない。これを楕円曲線上の離散対数問題という。楕円曲線暗号では、楕円曲線上の離散対数問題が困難であることを利用している。楕円曲線を利用した暗号方式には種々のものがあるが、ここでは、特に、楕円ElGamal方式を説明する。楕円曲線Eとその上の一点(一般に大きな位数を持つ点。ベースポイントと呼ぶ)Pが公開されているものとする。
【0047】
A氏が、B氏に秘密情報M(楕円曲線上の点で表現する。平文(暗号文)の楕円曲線上の埋め込みについては、N.コブリッツ、櫻井幸一訳「数論アルゴリズムと楕円暗号入門」シュプリンガーフェアラ−ク p.253に説明されている)を送信することを考える。
ステップ 1. 受信者B氏は、正整数 x[B] を選び、これを秘密鍵として保持し、
Y[B] = x[B]P
を公開鍵簿に登録する。
ステップ 2. 送信者A氏は、乱数 r を用いて、
C1 = rP
C2 = M + rY[B]
をB氏に送信する。
ステップ 3. 受信者B氏は、C1、C2を受け取り、自分の秘密鍵x[B]を用いて、
C2 - x[B]C1 = M
としてMを復元する。
【0048】
楕円ElGamal暗号に限らず、楕円曲線暗号においては、楕円曲線上の点のスカラー倍を計算する必要がある。楕円曲線上の点のスカラー倍を求めるアルゴリズムは、べき乗剰余計算のアルゴリズムに類似している。kP(kは正整数)を計算する標準的なアルゴリズムをべき乗剰余計算と同様に2ビットづつまとめて処理する場合について示したものを、図8に示す。まず、2ビットの処理を一度に行うために、ベースポイントPのテーブルを作る。べき乗剰余演算においては、mod nでの0乗,1乗,2乗,3乗に対応して、O(無限遠点),P,2P,3Pを用意する(ステップ801)。べき乗剰余演算とは異なり、このテーブルは毎回書き換える必要はなく、あらかじめ用意しておくことができる。次に、計算用の点の値を初期化する(ステップ802)。次に点Sの2倍を計算し(ステップ803)た後、kの最後のビットまで実行したかどうか判定し(ステップ804)、実行済でなければ、kのビットの値(2ビットごと)によって条件分岐して(ステップ804, 805, 806, 807)、これらに対応する点P[0], P[1], P[2], P[3]を加える(ステップ808, 809, 810, 811)。この処理をkのビットが尽きるまで続けることにより、kPを計算することができる。この計算はkの上位から2ビットづつ区切って見て計算する方式である。べき乗剰余計算と、数学的には同一の構造をしていることがわかる。スライディング・ウインドウ方式にすることも容易である。後に再び説明するが、RSAにおけるべき乗剰余演算、楕円曲線上の加法演算は、それぞれ、Zn、G(E/GF(q))という代数系の上で行われる演算と考えることができる。
【0049】
一方で、マイクロコンピュータが内部のプログラムを実行する際、動作時の内部消費電力が漏洩する可能性があるため、このプロセスをマイクロコンピュータで実現する場合、秘密鍵の処理が漏洩し、危険に曝されることになる。例えば、kのビット(この例では2ビット毎)の違いにより、分岐が行われるので、もしも、その処理が消費電流の差として現れれば、電流波形からkのビットを特定することができる可能性がある。
【0050】
上記の背景を踏まえて、本発明の実施例を説明する。図9に示した処理は、本発明の典型的応用例である。本実施例は、べき乗剰余計算y^x mod Nをアディション・チェイン方式によって実行するものである。但し、本実施例では、モンゴメリ法による乗算剰余処理を用いて、RSA暗号のべき乗剰余計算を行う。この処理において、A*B*R^(-1) mod Nという乗算剰余演算が用いられる。先に述べたのと同じく、Nは奇数(一般にRSA暗号では、Nは、大きな素数p,qの積であり、奇数である)であり、R = 2^n(nはデータのビット長)とする。
【0051】
まず、ステップ901にて、S = R mod Nとし、さらに、xのビットブロックの番号を数えるためのカウンタjを0に初期化し、条件分岐判定用の変数v[0] = 0とする。次に2ビットアディション・チェイン方式処理用のテーブル作成を行う(ステップ902)が、この際、通常のアディション・チェイン処理に必要なオリジナルテーブル(903)y[0][0] = R mod N, y[1][0] = yR mod N, y[2][0] = y^2R mod N, y[3][0] = y^3R mod Nの他に、モジュラスNにおける反転テーブル(904) y[0][1] = N - (R mod N), y[1][1] = N - (yR mod N), y[2][1] = N - (y^2R mod N), y[3][1] = N - (y^3R mod N)をも用意する。テーブルは通常、RAM上に存在する。このテーブル作成の後、条件分岐処理(ステップ905)にて、指数xが最後まで読まれたか(全てのビットブロックを読んだか)を調べる。指数xの全てのビットブロックの処理が終了していなければ、ステップ906に進み乱数v[j]を発生する(ステップ906)。この乱数は、0または1である。次に、S = S^2*R^(-1) mod Nを2回実行する(ステップ907)。最初の処理では、S = R mod Nに初期化されているので、この二乗剰余演算の結果は、S = (R mod N)^2*R^(-1) mod N = R mod Nとなり、ステップ907の処理結果は、R mod Nとなることに注意する。次に、条件分岐処理(ステップ908, 909, 910, 911)において、指数xの2ビットブロックを読み、このビットブロック(図中では「xのビットブロック」と表現されている)が、2進数で、00であるか01であるか、10であるか、11であるかに応じて、それぞれ、ステップ912, 913, 914, 915に進み、乗算剰余演算を行う。この乗算剰余演算では、v[j] が、0であるか、1であるかに応じて、用いるテーブル値が異なる。例えば、xのビットブロックが10であれば、通常は、S = S*y[2][0]*R^(-1) mod N = S*(y^2R mod N) mod Nを計算するが、v[j] = 1のときは、反転テーブルから、y[2][1]を取り出して、S = S*y[2][1]*R^(-1) mod N = S*(N - (y^2R mod N))*R^(-1) mod Nを計算する(ステップ914)。
ステップ912, 913, 915の処理においても、同様にv[j]の値に応じて乗ずる値を変える。乗算剰余処理を終えた後、ステップ921にて、カウンタをインクリメントし、ステップ905の処理に戻る。条件分岐処理(ステップ905)にて、指数xのビットブロックを全て読み終わっている場合には、ステップ916の処理に進む。ステップ916では、モンゴメリ形式(R mod Nが掛かっている)のデータを通常の値に戻すために、R^(-1) mod Nを乗ずる処理を行う。次に、T = N - Sを計算し、これをRAMに置く(ステップ917)。ここで、SとTはRAM上で異なる位置に配置され、RAM上で重複することはないものとする。条件分岐処理(ステップ918)にて、最後のvの値が1であれば、Tを出力し(ステップ919)、v = 0であれば、Sを出力する(ステップ920)。この処理によって正しい値が出力されることは、( tN - B )^2 mod N = B^2 mod N(tは整数)であることから明らかである。このように処理することによって、オーバーフローの処理が本来のものとは異なるものになるため、ICチップの消費電力や、処理時間等を観測して内部処理を行うことが困難になる。これは、乗算剰余演算A*B mod NのAをsN+A*(-1)^f、BをtN+B*(-1)^g(s,t,f,gは整数)に置き換えたときに、特に(s, t, f, g) = {(0, 0, 0, 0),(0, 1, 0, 1)}としたものの一つである({}内は集合の要素)。
【0052】
上記実施例では、各jに関してv[j]を乱数として変化させているが、全てのj = 0, 1, ..., m-1(mはビットブロックの数)を0とするか、1とするかを、最初にランダムに決定するという方法もある。図10に、これを示す。まずステップ1001にて、S = R mod Nとし、さらに、xのビットブロックの番号を数えるためのカウンタjを0に初期化する。次に2ビットアディション・チェイン方式処理用のテーブル作成を行う(ステップ1002)が、この際、通常のアディション・チェイン処理に必要なオリジナルテーブル(1003)y[0][0] = R mod N, y[1][0] = yR mod N, y[2][0] = y^2R mod N, y[3][0] = y^3R mod Nの他に、モジュラスNにおける反転テーブル(1004) y[0][1] = N - (R mod N), y[1][1] = N - (yR mod N), y[2][1] = N - (y^2R mod N), y[3][1] = N - (y^3R mod N)をも用意する。テーブルは通常、RAM上に存在する。このテーブル作成の後、ステップ1005に進み乱数vを発生する。この乱数は、0または1である。次に条件分岐処理(ステップ1006)にて、指数xが最後まで読まれたか(全てのビットブロックを読んだか)を調べる。次に、S = S^2*R^(-1) mod Nを2回実行する(ステップ1007)。
最初の処理では、S = R mod Nに初期化されているので、この二乗剰余演算では、S = (R mod N)^2*R^(-1) mod N = R mod Nとなり、ステップ1007の処理結果は、R mod Nとなることに注意する。次に、条件分岐処理(ステップ1008, 1009, 1010, 1011)において、指数xの2ビットブロックを読み、このビットブロックが、2進数で、00であるか01であるか、10であるか、11であるかに応じて、それぞれステップ1012, 1013, 1014, 1015に進み、乗算剰余演算を行う。乗算剰余演算では、vが、0であるか、1であるかに応じて、用いるテーブル値が異なる。例えば、xのビットブロックが10であれば、通常は、S = S*y[2][0]*R^(-1) mod N = S*(y^2R mod N) mod Nを計算するが、v = 1のときは、反転テーブルからy[2][1]を取り出して、S = S*y[2][1]*R^(-1) mod N = S*(N - (y^2R mod N))*R^(-1) mod Nを計算する(ステップ1014)。ステップ1012, 1013, 1015の処理においても、同様にvの値に応じて乗ずる値を変える。乗算剰余処理を終えた後、ステップ1021にて、カウンタをインクリメントし、ステップ1006の処理に戻る。
条件分岐処理(ステップ1006)にて、指数xのビットブロックを全て読み終わっている場合には、ステップ1016の処理に進む。ステップ1016では、モンゴメリ形式(R mod Nが掛かっている)のデータを通常の値に戻すために、R^(-1) mod Nを乗ずる処理を行う。次に、T = N - Sを計算し、これをRAMに置く(ステップ1017)。ここで、SとTはRAM上で異なる位置に配置され、RAM上で重複することはないものとする。条件分岐処理(ステップ1018)にて、最後のvの値が1であれば、Tを出力し(ステップ1019)、v = 0であれば、Sを出力する(ステップ1020)。この処理によって正しい値が出力されることは、( tN - B )^2 mod N = B^2 mod N(tは整数)であることから明らかである。このように処理することによって、オーバーフローの処理が本来のものとは異なるものになるため、ICチップの消費電力や、処理時間等を観測して内部処理を行うことが困難になる。これは、乗算剰余演算A*B mod NのA,Bを上記のように置き換えたときに、特に(s, t, f, g) = {(0, 0, 0, 0),(0, 1, 0, 1)}としたものの一つである。
【0053】
上記の2つの実施例では、モンゴメリ法を用いたものを例として示したが、モンゴメリ法を用いない形式で本発明を適用することも容易である。この例を示そう。図9の実施例を非モンゴメリ形式に変更することは全く容易であって、モンゴメリ・フォーマットに変換している部分を除去すればよい。図11は、モンゴメリ法を用いない通常の実装方法を示したものである。
【0054】
まずステップ1101にて、S = 1とし、さらに、xのビットブロックの番号を数えるためのカウンタjを0に初期化し、条件分岐判定用の変数v[0] = 0とする。次に2ビットアディション・チェイン方式処理用のテーブル作成を行う(ステップ1102)が、この際、通常のアディション・チェイン処理に必要なオリジナルテーブル(1103)y[0][0] = 1, y[1][0] = y mod N, y[2][0] = y^2 mod N, y[3][0] = y^3 mod Nの他に、モジュラスNにおける反転テーブル(1104) y[0][1] = N - 1, y[1][1] = N - (y mod N), y[2][1] = N - (y^2 mod N), y[3][1] = N - (y^3 mod N)をも用意する。テーブルは通常、RAM上に存在する。このテーブル作成の後、条件分岐処理(ステップ1105)にて、指数xが最後まで読まれたか(全てのビットブロックを読んだか)を調べる。指数xの全てのビットブロックの処理が終了していなければ、ステップ1106に進み乱数v[j]を発生する。この乱数は、0または1である。次に、S = S^2 mod Nを2回実行する(ステップ1107)。次に、条件分岐処理(ステップ1108, 1109, 1110, 1111)において、指数xの2ビットブロックを読み、このビットブロック(図中では「xのビットブロック」と表現されている)が、2進数で、00であるか01であるか、10であるか、11であるかに応じて、それぞれ、ステツプ1112, 1113, 1114, 1115に進み、乗算剰余演算を行う。乗算剰余演算では、v[j] が、0であるか、1であるかに応じて、用いるテーブル値が異なる。例えば、xのビットブロックが10であれば、通常は、S = S*y[2][0] mod N = S*(y^2 mod N) mod Nを計算するが、v[j] = 1のときは、反転テーブルから、y[2][1]を取り出して、S = S*y[2][1] mod N = S*(N - (y^2 mod N)) mod Nを計算する(ステップ1114)。ステップ1112, 1113, 1115の処理においても、同様にv[j]の値に応じて乗ずる値を変える。乗算剰余処理を終えた後、ステップ1120にて、カウンタをインクリメントし、ステップ1105の処理に戻る。条件分岐処理(ステップ1105)にて、指数xのビットブロックを全て読み終わっている場合には、ステツプ1116の処理に進む。ステップ1116では、T = N - Sを計算し、これをRAMに置く。ここで、SとTはRAM上で異なる位置に配置され、RAM上で重複することはないものとする。条件分岐処理(ステップ1117)にて、最後のvの値が1であれば、Tを出力し(ステップ1118)、v = 0であれば、Sを出力する(ステップ1119)。この処理によって正しい値が出力されることは、( tN - B )^2 mod N = B^2 mod N(tは整数)であることから明らかである。このように処理することによって、オーバーフローの処理が本来のものとは異なるものになるため、ICチップの消費電力や、処理時間等を観測して内部処理を行うことが困難になる。これは、乗算剰余演算A*B mod NのA,Bを上記のように置き換えたときに、特に(s, t, f, g) = {(0, 0, 0, 0),(0, 1, 0, 1)}としたものの一つである。
【0055】
以下図11の実施例に対応する発明を方法ステップの形で要約しておく。
【0056】
情報処理装置を利用して、暗号処理中に出現する剰余乗算であるA*B mod Nを計算する方法であって、その方法は、
(1)S1=A*B mod Nを計算するステップ、
(2)(1)の代わりにS2={sN + A*(-1)^f }*{tN + B*(-1)^g}mod N (s, t, f, gは少なくとも1つは0でない整数であり、f, gは0又は1)を計算するステップ、
(3)上記(1)と(2)のいずれかを適宜選択するステップ、
(4)上記(1)(2)(3)を適宜繰り返し、最後に上記(1)を選択したときはその計算結果S1を出力し、上記(2)を選択したときにはS2の代わりにN−S2を出力するステップ、および
(5)S1とN−S2を、暗号処理の剰余乗算A*B mod Nの計算結果として用いるステップを有することを特徴とする耐タンパーモジュラ演算処理方法。
【0057】
上記の実施例(図9、図10及び図11の実施例)においては、vとして乱数を用いているが、これを0と1を交互に取るような仕方で変化させたり、疑似乱数や、カオス的数列といったものに変えることができることは言うまでもない。また、上記実施例では、s, t, f, gを二通りにしか変化させていないが、より多くの変数を変化させることにより、撹乱効果を上げることができる。この場合の実施例を図12に示す。
【0058】
まずステップ1201にて、S = 1とし、さらに、xのビットブロックの番号を数えるためのカウンタjを0に初期化し、条件分岐判定用の変数v[0] = 0とする。次に、4つの乱数w[k](k=0,1,2,3)を用意する(ステップ1202)。この乱数は、0 < w[k] < MAXを満たす整数で、MAXは、メモリやレジスタの大きさ等の制約によって決める。次に2ビットアディション・チェイン方式処理用のテーブル作成を行う(ステップ1203)が、この際、通常のアディション・チェイン処理に必要なオリジナルテーブル(1204)y[0][0] = 1, y[1][0] = y mod N, y[2][0] = y^2 mod N, y[3][0] = y^3 mod Nの他に、モジュラスNにおける反転テーブル(1205) y[0][1] = N - 1, y[1][1] = N - (y mod N), y[2][1] = N - (y^2 mod N), y[3][1] = N - (y^3 mod N)をも用意する。テーブルは通常、RAM上に存在する。このテーブル作成の後、条件分岐処理(ステップ1206)にて、指数xが最後まで読まれたか(全てのビットブロックを読んだか)を調べる。指数xの全てのビットブロックの処理が終了していなければ、ステップ1207に進み乱数v[j]を発生する。この乱数は、0または1である。次に、S = S^2 mod Nを2回実行する(ステップ1208)。次に、条件分岐処理(ステップ1209,1210,1211,1212)において、指数xの2ビットブロックを読み、このビットブロック(図中では「xのビットブロック」と表現されている)が、2進数で、00であるか01であるか、10であるか、11であるかに応じて、それぞれ、ステップ1213,1214,1215,1216に進み、乗算剰余演算を行う。乗算剰余演算では、v[j] が、0であるか、1であるかに応じて、用いるテーブル値が異なる。例えば、xのビットブロックが10であれば、通常は、S = S*y[2][0] mod N = S*(y^2 mod N) mod Nを計算するが、v[j] = 1のときは、反転テーブルから、y[2][1]を取り出して、S = S*y[2][1] mod N = S*(N - (y^2 mod N)) mod Nを計算する(ステップ1215)。ステップ1213,1214,1216の処理においても、同様にv[j]の値に応じて乗ずる値を変える。乗算剰余処理を終えた後、ステップ1221にて、カウンタをインクリメントし、ステップ1206の処理に戻る。条件分岐処理(ステップ1206)にて、指数xのビットブロックを全て読み終わっている場合には、ステップ1217の処理に進む。ステツプ1217では、T = N - Sを計算し、これをRAMに置く。ここで、SとTはRAMで異なる位置に配置され、RAM上で重複することはないものとする。条件分岐処理(ステップ1218)にて、最後のvの値が1であれば、Tを出力し(ステップ1219)、v = 0であれば、Sを出力する(ステップ1220)。この処理によって正しい値が出力されることは、( tN - B )^2 mod N = B^2 mod N(tは整数)であることから明らかである。このように処理することによって、オーバーフローの処理が本来のものとは異なるものになるため、ICチップの消費電力や、処理時間等を観測して内部処理を行うことが困難になる。これは、本発明の実施例の一つである。これをモンゴメリ方式の場合に変更することは容易であるので、例を挙げることは省略する。
【0059】
これまで示した実施例は、乗数側を変形するものである。本発明の趣旨は、乗数側、被乗数側のいずれか、または両方に適用することによって損なわれることはない。これは数学的には自明な事実である。しかし、実装上は若干の違いが生ずる。乗数側の変形は、最初の段階でテーブルを作成しさえすれば、その後は「取り出す値」を変化させることによって本発明を実現することができる。ところが被乗数を変形する場合は、被乗数自身が各計算過程で異なるため、計算過程毎に途中計算値SとN-Sを構成しなければならない。これを示すために、被乗数側を変形する実施例を示す。
【0060】
図13を順に説明する。まず、ステップ1301にて、S = R mod Nとし、さらに、xのビットブロックの番号を数えるためのカウンタjを0に初期化し、条件分岐判定用の変数v[0] = 0とする。次に2ビットアディション・チェイン方式処理用のテーブル作成を行う(ステップ1302)。テーブルは、通常のテーブル値y[0] = R mod N, y[1] = yR mod N, y[2] = y^2R mod N, y[3] = y^3R mod Nで構成され、乗数側の変形に用いる反転テーブルは不要である。テーブルは通常、RAM上に存在する。このテーブル作成の後、条件分岐処理(ステップ1303)にて、指数xが最後まで読まれたか(全てのビットブロックを読んだか)を調べる。指数xの全てのビットブロックの処理が終了していなければ、ステップ1304に進み乱数v[j]を発生する。この乱数は、0または1である。次に、S = S^2*R^(-1) mod Nを2回実行する(ステップ1305)。最初の処理では、S = R mod Nに初期化されているので、この二乗剰余演算では、S = (R mod N)^2*R^(-1) mod N = R mod Nとなり、ステップ1305の処理結果は、R mod Nとなることに注意する。次に、このSから、S[0] = S, S[1] = N - Sを計算しRAM上に格納する(ステップ1306)。続いて、条件分岐処理(ステップ1307,1308,1309,1310)において、指数xの2ビットブロックを読み、このビットブロック(図中では「xのビットブロック」と表現されている)が、2進数で、00であるか01であるか、10であるか、11であるかに応じて、それぞれ、ステップ912, 913, 914, 915に進み、乗算剰余演算を行う。乗算剰余演算では、v[j] が、0であるか、1であるかに応じて、用いるテーブル値が異なる。例えば、xのビットブロックが10であれば、通常は、S = S[0]*y[0]*R^(-1) mod N = S*(y^2R mod N) mod Nを計算するが、v[j] = 1のときは、S[0]の代わりにS[1]を取り出して、S = S[1]*y[2]*R^(-1) mod N = (N - S)*(y^2R mod N)*R^(-1) mod Nを計算する(ステップ1313)。ステップ1311、1312、1314の処理においても、同様にv[j]の値に応じて乗ずる値を変える。乗算剰余処理を終えた後、ステップ1315にて、カウンタをインクリメントし、ステップ1303の処理に戻る。条件分岐処理(ステップ1303)にて、指数xのビットブロックを全て読み終わっている場合には、ステップ1316の処理に進む。ステップ1316では、モンゴメリ形式(R mod Nが掛かっている)のデータを通常の値に戻すために、R^(-1) mod Nを乗ずる処理を行う。次に、T = N - Sを計算し、これをRAMに置く(ステップ1317)。ここで、SとTはRAM上で異なる位置に配置され、RAM上で重複することはないものとする。条件分岐処理(ステップ1318)にて、最後のvの値が1であれば、Tを出力し(ステップ1319)、v = 0であれば、Sを出力する(ステップ1320)。この処理によって正しい値が出力されることは、( tN - B )^2 mod N = B^2 mod N(tは整数)であることから明らかである。このように処理することによって、オーバーフローの処理が本来のものとは異なるものになるため、ICチップの消費電力や、処理時間等を観測して内部処理を行うことが困難になる。これは、乗算剰余演算A*B mod NのA,Bを上記のように置き換えたときに、特に(s, t, f, g) = {(0, 0, 0, 0), (1, 0, 1, 0)}としたものの一つである。これをモンゴメリ法を用いない方式に変更することは容易であるので、例を挙げることは省略する。
【0061】
これまでに示した実施例は、乗数または被乗数を変形したものであるが、両方を変形することもできることは言うまでもない。また、例えば図13のステップ1305の処理過程で、S = (N - S)^2*R^(-1) mod Nのように処理を行うことにより、消費電流を本来のそれとは異なるものにすることが可能となる。本発明の実施例は、様々なバリエーションを持っているが、本質的には、上記の実施例を組み合せて構成することが可能である。
【0062】
上記の実施例はいずれも、べき乗剰余計算の処理に対して適用されたものである。べき乗剰余計算に対して本発明はとりわけ有効であるが、上記の考え方をより一般のモジュラ計算(剰余計算)に置き換えることによって、オーバーフロー等の処理から秘密情報が漏洩することを防ぐことも可能である。べき乗剰余計算において本発明が有効である理由は、本質的には、
( tN - B )^2 mod N = B^2 mod N(tは整数)
という関係式が成り立つという事実に帰着する。
【0063】
ところがべき乗剰余計算とは異なる処理、例えば、楕円曲線暗号における曲線上のベースポイントPのスカラー倍を計算するというような場合には、上記の関係式のような「自然な」修正処理が現れるとは限らない。この事情を簡単に説明する。素体GF(p)(pは大きな素数)において、楕円曲線E:
y^2 = x^3 + ax + b
を考える。先に延べたように、E上の点Pのスカラー倍kPを計算する場合は、点の2倍算と、点同士の和の計算が出現する(図8参照)。ここで、この二つの計算をより詳細に分解すると、通常のICカードマイコンにおいては、RSAよりも複雑な計算過程を経なければならないことがわかる。
【0064】
先に述べたように、楕円曲線上の点P=(x1, y1), Q=(x2, y2)の和P+Qの座標を(x3, y3)とすると、P+Q=Oでないとき
x3 = (h^2 - x1 - x2) mod p
y3 = (h*(x1 - x3) - y1) mod p
と表現できる。ここで、hは、
h = (y2 - y1)*((x2 - x1)^(-1)) mod p if P≠Q, (3x1^2 + a)*((2y1)^(-1)) mod p if P = Q
である。
【0065】
この群演算(モーデル・ヴェイユ群の群演算)で必要な乗算剰余演算を列挙すると、
h = (y2 - y1)*(x2 - x1)^(-1) mod p if P≠Q、--- (E1)
h = (3x1^2 + a)*(2y1)^(-1) mod p if P = Q --- (E1)'
h^2 mod p --- (E2)
h*(x1 - x3) mod p --- (E3)
となる。(E1)の処理において、A = y2 - y1, B = (x2 - x1)^(-1) mod p(またはx2 - x1)をそれぞれ、sN + A*(-1)^f,tN + B*(-1)^g(s, t, f, gは整数。但し、f, gは0又は1)に置き換えると、オーバーフローのパターンが変化する((E1)'の場合も同様)。hは(E2)の処理において法pにおいて2乗され、この値は本来のものと同一になるが、(E3)の処理では、値が、法pで反転してしまうため、正しいy3を求めるには、(E3)の結果を補正しなければならない。明らかにf+gが偶数であれば補正は不要で、f+gが奇数の場合は、補正が必要となる。
【0066】
ここで、実施例を示すが、楕円曲線暗号の大域的処理フローについては、図8及び対応する説明において説明したので、ここでは、2倍計算S = 2SとS = S+P[j]の計算部に絞って説明を行う。すなわち、図8における、ステップ803(2倍計算)、ステップ809,810,811,812(和の計算)の処理に本発明の処理方式を実装する方法を説明する。
【0067】
まず、素体GF(p)の上での実施例のうち、最も簡単なものを説明する。素体上での計算は、全て、法pのもとで実行すればよい。図15はGF(p)上での楕円曲線E: y^2 = x^3 + ax + bにおける点P(x,y)の2倍計算に本発明を適用したものである。以下、2P = (x3, y3)とする。
【0068】
ステップ1401において、D1 = (2*y)^(-1) mod pを計算する。次に、ステップ1402にて、D2 = (3*x^2 + a) mod pを計算する。これらD1,D2に対して、テーブルD1[0] = D1, D2[0] = D2,D1[1] = p - D1, D2[1] = p - D2を計算してRAMに格納する(ステップ1403)。D1[1], D2[1]は、それぞれ、法pに対するD1, D2の反転値である。次に2つ(2ビット)の乱数v,w(v,wは、共に0又は1)を発生する(ステップ1404)。次に、ステップ1403で求めたテーブルから、D1[v], D2[v]を取り出して、乗算剰余計算:h = D1[v]*D2[v] mod pを実行して結果をRAMに格納する(ステップ1405)。ここで、D1[1]*D2[1] mod p = (p - D1)*(p - D2) mod p = D1*D2 mod pであるので、ステップ1405の終了時には、v = 0, 1いずれの場合でも、正しいhが求まる。次にステップ1406,1407にて、x3を求め、答えをRAMに格納する。ステップ1408にて、D3 = (x - x3) mod pを計算する。次に、このD3と、先に用いたhに対して、テーブルh[0] = h, D3[0] = D3,h[1] = p - h, D3[1] = p - D3を求めてRAMに格納する(ステップ1409)。h[1], D3[1]は、それぞれ、法pに対するh、 D3の反転値である。次に、ステップ1409で求めたテーブルから、h[v], D3[v]を取り出して、乗算剰余計算:h[w]*D3[w] mod pを実行して結果をRAMに格納する(ステップ1410)。ここで、h[1]*D3[1] mod p = (p - h)*(p - D3) mod p = h*D3 mod pであるので、ステップ1410の終了時には、w = 0, 1いずれの場合でも、正しい値が求まる。最後に、ステップ1411にて、y3 = (y3 - y) mod pを求めてRAMに格納する。これで、2Pの各座標の値が求められたことになる。これは、本発明の実施例の一つである。
【0069】
本実施例にて、ステップ1401における逆数計算を実行する代表的な方法は、拡張ユークリッド互除法を利用するものとフェルマーの小定理を利用するものである。拡張ユークリッド互除法では、不定方程式: 2*y*D1 + p*U = 1を(2*yとpの最大公約数を求める操作(ユークリッド互除法)を繰り返すことで、結果的にD1を求める方法である。一方、フェルマーの小定理を用いる方法とは、フェルマーの小定理、すなわち、pと互いに素な正の整数gに対し、g^(p-1) mod p = 1が成り立つことから、g^(-1) mod p = g^(p-2) mod pとなることを用いるものである。つまり、D1 = (2*y)^(p-2) mod pとして、D1を求めるものである。フェルマーの小定理を用いる方法では、逆数の計算は、べき乗剰余計算に帰着する。このべき乗剰余計算に本発明の方法を適用することは容易なことであり、オーバーフロー処理からのリーク情報を減らすことができる。
【0070】
次にGF(p)上の楕円曲線に対する点の和の計算に本発明を適用した場合の実施例を示す。以下、楕円曲線上の点P=(x1, y1)、 Q=(x2, y2)の和P+Qの座標を(x3, y3)とし、P+Q=Oでないものとする。図16はGF(p)上での楕円曲線E: y^2 = x^3 + ax + bにおける点PとQの和の計算に本発明を適用したものである。
【0071】
条件分岐処理(ステップ1501)にて、PとQが一致しているかどうかを判定する。もし、PとQが一致していれば、2倍算になり、図15について説明した処理と同じものになるので、説明は省略する(ただしx,yの符号はx1,y1の符号に読み替える)。以下、PとQが一致していない場合の処理を示す。ステップ1502において、D1 = (x2 - x1)^(-1) mod pを計算する。次に、ステップ1503にて、D2 = (y2 - y1) mod pを計算する。これらD1,D2に対して、テーブルD1[0] = D1, D2[0] = D2,D1[1] = p - D1, D2[1] = p - D2を計算してRAMに格納する(ステップ1504)。D1[1], D2[1]は、それぞれ、法pに対するD1, D2の反転値である。次に二つ(2ビット)の乱数v,w(v,wは、共に0又は1)を発生する(ステップ1505)。次に、ステップ1504で求めたテーブルから、D1[v], D2[v]を取り出して、乗算剰余計算:h = D1[v]*D2[v] mod pを実行して結果をRAMに格納する(ステツプ1506)。ここで、D1[1]*D2[1] mod p = (p - D1)*(p - D2) mod p = D1*D2 mod pであるので、ステップ1506の終了時には、v = 0, 1いずれの場合でも、正しいhが求まる。次にステツプ1507,1509にて、x3を求め、答をRAMに格納する。ステツプ1509にて、D3 = (x1 - x3) mod pを計算する。次に、このD3と、先に用いたhに対して、テーブルh[0] = h, D3[0] = D3,h[1] = p - h, D3[1] = p - D3を求めてRAMに格納する(ステップ1510)。h[1], D3[1]は、それぞれ、法pに対するh, D3の反転値である。次に、ステップ1510で求めたテーブルから、h[w], D3[w]を取り出して、乗算剰余計算:h[w]*D3[w] mod pを実行して結果をRAMに格納する(ステップ1511)。ここで、h[1]*D3[1] mod p = (p - h)*(p - D3) mod p = h*D3 mod pであるので、ステップ1511の終了時には、w = 0, 1いずれの場合でも、正しい値が求まる。最後に、ステツプ1512にて、y3 = (y3 - y1) mod pを求めてRAMに格納する。これで、P+Qの各座標の値が求められたことになる。これは、本発明の実施例の一つである。
【0072】
図16の実施例は、容易にガロア体GF(p^n)(pは素数、 nは正の整数)に拡張することができる。先に述べたように、GF(p^n)は、GF(p)係数の多項式全体がつくる環(多項式環)GF(p)[X]のGF(p)における既約多項式Φ(X)(reduction polynomialと呼ばれることもある)の倍元全体が生成する素イデアル(prime ideal)(Φ(X))による剰余環(quotient ring)GF(p)[x]/(Φ(X))と同型(homomorphic)であり、計算機では、GF(p)[x]/(Φ(X))として実現される。その演算を実行するにあたり、A(X), B(X)をGF(p)[X]の元(すなわち、GF(p)係数の多項式)とすると、GF(p)[X]/(Φ(X))での演算は、
(和) {A(X) + B(X)} mod Φ(X)
(積) A(X)*B(X) mod Φ(X)
とすることによって実現することができる。但し、係数の演算は、mod pで行う。
【0073】
実例を示す。素数p = 5, n = 2とし、reduction polynomial Φ(X)をX^2 + X + 1とする。Φ(X)が既約であることは、Φ(0) = 1, Φ(1) = 3, Φ(2) = 7 ≡ 2(mod 5), Φ(3) = 13 ≡ 3(mod 5), Φ(4) = 21 ≡ 1(mod 5)であることからすぐに分かる。A(X) = 4X^2 + 3X + 2、 B(X) = 3X^2 + 4X + 1とすると、この、二つの多項式のGF(5)[X]/(X^2+X+1)における和と積は、
として計算することができる。この事実を踏まえれば、実施例を構成することは容易である。
【0074】
素数p≧3の場合を考える。このとき、全ての楕円曲線は、E: y^2 = x^3 + ax + bの形に変換できる。これをWeierstrassの標準形と呼ぶ。ここで、E上の点の座標の各成分は、GF(p^n)の元であるので、A(X), B(X)をGF(p)[X]/(Φ(X))の元として、(A(X), B(X))のように表現することができる。
【0075】
以下、P = (A(X), B(X))の2倍計算についての実施例を示す。和の計算は、GF(p)の場合に対する図16の実施例及び2倍計算の実施例から、容易に類推できるので、2倍計算の場合のみ説明する。
【0076】
図17に2倍計算の実施例を示す。ステップ1601において、D1(X) = (2*B(X))^(-1) mod Φ(X)を計算する。次に、ステツプ1602にて、D2(X) = (3*A(X)^2+a) mod Φ(X)を計算する。これらD1,D2に対して、テーブルD1[0](X) = D1(X), D2[0] = D2(X),D1[1](X) = Φ(X) - D1(X), D2[1](X) = Φ(X) - D2(X)を計算してRAMに格納する(ステップ1603)。D1[1](X), D2[1](X)は、それぞれ法Φ(X)に対するD1(X), D2(X)の反転値である。次に2つ(2ビット)の乱数v,w(v,wは、共に0又は1)を発生する(ステップ1604)。次に、ステップ1603で求めたテーブルから、D1[v](X), D2[v](X)を取り出して、乗算剰余計算:h(X) = D1[v](X)*D2[v](X) mod Φ(X)を実行して結果をRAMに格納する(ステップ1605)。ここで、D1[1](X)*D2[1](X) mod Φ(X) = (Φ(X) - D1(X))*(Φ(X) - D2(X)) mod Φ(X) = D1(X)*D2(X) mod Φ(X)であるので、ステップ1605の終了時には、v = 0, 1いずれの場合でも、正しいh(X)が求まる。次にステップ1606,1607にて、A3(X)を求め、答えをRAMに格納する。ステップ1608にて、D3(X) = (A(X) - A3(X)) mod Φ(X)を計算する。次に、このD3(X)と先に用いたh(X)に対して、テーブルh[0](X) = h(X), D3[0](X) = D3(X),h[1](X) = Φ(X) h(X), D3[1](X) = Φ(X) - D3(X)を求めてRAMに格納する(ステップ1609)。h[1](X), D3[1](X)は、それぞれ、法Φ(X)に対するh(X), D3(X)の反転値である。次に、ステップ1609で求めたテーブルから、h[w](X), D3[w](X)を取り出して、乗算剰余計算:h[w](X)*D3[w](X) mod Φ(X)を実行して結果をRAMに格納する(ステップ1610)。ここで、h[1](X)*D3[1](X) mod Φ(X) = (Φ(X) - h(X))*(Φ(X) - D3(X)) mod Φ(X) = h(X)*D3(X) mod Φ(X)であるので、ステップ1610の終了時には、w = 0, 1いずれの場合でも、正しい値が求まる。最後に、ステップ1611にて、B3(X) = (B3(X) - B(X)) mod Φ(X)を求めてRAMに格納する。これで、2Pの各座標の値が求められたことになる。これは、本発明の実施例の一つである。
【0077】
本実施例にて、ステップ1601における逆数計算を実行する代表的な方法は、拡張ユークリッド互除法を利用するものとフェルマーの小定理を利用するものである。拡張ユークリッド互除法では、不定方程式: 2*B(X)*D1(X) + Φ(X)*U(X) = 1を(2*B(X)とΦ(X)の最大公約数を求める操作(ユークリッド互除法)を繰り返すことで、結果的にD1(X)を求める方法である。一方、フェルマーの小定理を用いる方法とは、フェルマーの小定理、すなわち、Φ(X)と互いに素なg(X)に対し、g(X)^(p^n-1) mod Φ(X) = 1が成り立つことから、g(X)^(-1) mod Φ(X) = g(X)^(p^n-2) mod Φ(X)となることを用いるものである。つまり、D1(X) = (2*B(X))^(p^n-2) mod Φ(X)として、D1(X)を求めるものである。フェルマーの小定理を用いる方法では、逆数の計算は、べき乗剰余計算に帰着する。このべき乗剰余計算に本発明の方法を適用することは容易なことであり、オーバーフロー処理からのリーク情報を減らすことができる。
【0078】
次に、p = 2の場合の実施例を説明する。この場合は、これまでとは若干事情が異なる。これは、ガロア体GF(2^n)をreduction polynomial Φ(X)を用いてGF(2)[X]/(Φ(X))の形で表現した際、多項式の係数がGF(2)であることから生ずるものである。GF(2)においては、符号は無意味である。というのは、この体の上では、-1 = 1だからである。このことから本発明の趣旨の一つである、「法Φ(X)での反転」が無意味となるからである。また、GF(2)[X]の多項式A(X)の偶数倍も係数がmod 2で計算されるため0となって、計算結果に影響を与えない。従って、-A(X) ≡ A(X)となる。よって、Φ(X)とA(X)のGF(2)における線形結合は、0を除くと、本質的には、Φ(X), Φ(X)+A(X), A(X)だけとなる。この事実を踏まえて、p = 2の場合の実施例を示す。
【0079】
ここでは、Weierstrass標準形E:y^2 + xy = x^3 + ax + bを持つ楕円曲線を考える。E上の点P = (A(X), B(X))に対し、2P = (A3(X), B3(X))とする。実施例を構成するにあたって、2倍公式を次のように変形しておく。
【0080】
A3(X) = (h(X)^2 + h(X) + a) mod Φ(X)
B3(X) = (h(X)*(A(X) + A3(X)) + A3(X) + B(X)) mod Φ(X)
ここで、h(X)は、h(X) = (A(X)^2 + B(X))*A(X)^(-1) mod Φ(X)とする。
【0081】
図18に2倍計算の実施例を示す。ステツプ1701において、D1(X) = (A(X))^(-1) mod Φ(X)を計算する。次に、ステツプ1702にて、D2(X) = (A(X)^2+B(X)) mod Φ(X)を計算する。これらD1(X),D2(X)に対して、テーブルD1[0](X) = D1(X), D2[0](X) = D2(X),D1[1](X) = Φ(X) + D1(X), D2[1](X) = Φ(X) + D2(X)を計算してRAMに格納する(ステップ1703)。次に4つ(4ビット)の乱数v, w, i, j(v, w, i, jは、全て0又は1)を発生する(ステップ1704)。次に、ステップ1703で求めたテーブルから、D1[v](X), D2[w](X)を取り出して、乗算剰余計算:h(X) = D1[v](X)*D2[w](X) mod Φ(X)を実行して結果をRAMに格納する(ステップ1705)。ここで(Φ(X)+D1(X))*D2(X) mod Φ(X) = D1(X)*(Φ(X)+D2(X)) mod Φ(X) = (Φ(X) + D1(X))*(Φ(X) + D2(X)) mod Φ(X) = D1(X)*D2(X) mod Φ(X)であるので、ステツプ1705の終了時には、v, w = 0, 1のどの場合でも、正しいh(X)が求まる。次にステップ1706,1707にて、A3(X)を求め、答えをRAMに格納する。ステップ1708にて、D3(X) = (A(X) + A3(X)) mod Φ(X)を計算する。次に、このD3(X)と先に用いたh(X)に対して、テーブルh[0](X) = h(X), D3[0](X) = D3(X),h[1](X) = Φ(X) + h(X), D3[1](X) = Φ(X) + D3(X)を求めてRAMに格納する(ステップ1709)。次に、ステップ1709で求めたテーブルから、h[i](X), D3[j](X)を取り出して、乗算剰余計算:h[i](X)*D3[j](X) mod Φ(X)を実行して結果をRAMに格納する(ステップ1710)。ここで、(Φ(X)+h(X))*D3(X) mod Φ(X) = h(X)*(Φ(X)+D3(X)) mod Φ(X) = (Φ(X) + h(X))*(Φ(X) + D3(X)) mod Φ(X) = h(X)*D3(X) mod Φ(X)であるので、ステップ1710の終了時には、i, j = 0, 1のどの場合でも、正しい値が求まる。最後に、ステップ1711にて、B3(X) = (B3(X)+A3(X)+B(X)) mod Φ(X)を求めてRAMに格納する。これで、2Pの各座標の値が求められたことになる。これは、本発明の実施例の一つである。
【0082】
本実施例にて、ステップ1701における逆数計算を実行する代表的な方法は、拡張ユークリッド互除法を利用するものとフェルマーの小定理を利用するものである。拡張ユークリッド互除法では、不定方程式: A(X)*D1(X) + Φ(X)*U(X) = 1を(A(X)とΦ(X)の最大公約数を求める操作(ユークリッド互除法)を繰り返すことで、結果的にD1(X)を求める方法である。一方、フェルマーの小定理を用いる方法とは、フェルマーの小定理、すなわち、Φ(X)と互いに素なg(X)に対し、g(X)^(2^n-1) mod Φ(X) = 1が成り立つことから、g(X)^(-1) mod Φ(X) = g(X)^(2^n-2) mod Φ(X)となることを用いるものである。つまり、D1(X) = (A(X))^(2^n-2) mod Φ(X)として、D1(X)を求めるものである。フェルマーの小定理を用いる方法では、逆数の計算は、べき乗剰余計算に帰着する。このべき乗剰余計算に本発明の方法を適用することは容易なことであり、オーバーフロー処理からのリーク情報を減らすことができる。
【0083】
楕円曲線上の点のモーデル・ヴェイユ群演算に関する上記実施例は、いずれも、符号の影響が、即時に解消されるものであった。ここで、即時解消されないような場合の実施例を示す。
【0084】
図19は、GF(p)上の楕円曲線E: y^2 = x^3 + ax + b上の点P = (x, y)の2倍計算に本発明を適用したものである。以下、2P = (x3, y3)とする。ステップ1801において、D1 = (2*y)^(-1) mod pを計算する。次に、ステップ1802にて、D2 = (3*x^2 + a) mod pを計算する。D2に対して、テーブルD2[0] = D2,D2[1] = p - D2を計算してRAMに格納する(ステップ1803)。D2[1]は、法pに対するD2の反転値である。次に2つ(2ビット)の乱数v、w(v、wは、共に0又は1)を発生する(ステップ1804)。次に、ステップ1803で求めたテーブルから、D2[v]を取り出して、乗算剰余計算:h = D1*D2[v] mod pを実行して結果をRAMに格納する(ステップ1805)。ここで、D1*D2[1] mod p は、D1*D2 mod pであるか、または、p - (D1*D2 mod p)であり、図15の実施例とは異なり、ステツプ1805終了時点では、正しい値になるとは限らない。次にステツプ1806,1807にて、x3を求め、答えをRAMに格納する。ここで、ステップ1806において、hがmod pで2乗されるため、ステツプ1805の結果が、D1*D2 mod pであっても、p - (D1*D2 mod p)であっても、正しいx3の値が求まる。ステツプ1808にて、D3 = (x - x3) mod pを計算する。次に、このD3に対して、テーブルD3[0] = D3,D3[1] = p - D3を求めてRAMに格納する(ステップ1809)。D3[1]は、法pに対するD3の反転値である。次に、ステップ1809で求めたテーブルから、D3[w]を取り出して、乗算剰余計算:h*D3[w] mod pを実行して結果をRAMに格納する(ステップ1810)。ここで、h*D3[1] mod p = h*(p - D3) mod p =p -(h*D3 mod p)であるので、ステップ1810の終了時では、v = 0であれば、h*D3 mod p、v = 1であれば、p - (h*D3 mod p)となっている。ステツプ1811にて、テーブルy3[0] = y3,y3[1] = p - y3を求めてRAMに格納する。次に、条件分岐処理(ステツプ1812)にて、vとwの排他的論理和(exclusive OR) v EXOR wの値が、0であるか1であるかを判定し、0であれば、ステップ1813に進み、1であれば、ステップ1814に進む。排他的論理和 v EXOR wは、vとwが同じであれば0、異なれば1となる。従って、最終的に、該排他的論理和が0のときには、ステップ1813によって正しいy3が求められ、1のときは、ステップ1814にて、正しいy3が求められる。これで、2Pの各座標の値が求められたことになる。これは、本発明の実施例の一つである。
【0085】
本実施例にて、ステップ1801における逆数計算を実行する代表的な方法は、拡張ユークリッド互除法を利用するものとフェルマーの小定理を利用するものである。拡張ユークリッド互除法では、不定方程式: 2*y*D1 + p*U = 1を(2*yとpの最大公約数を求める操作(ユークリッド互除法)を繰り返すことで、結果的にD1を求める方法である。一方、フェルマーの小定理を用いる方法とは、フェルマーの小定理、すなわち、pと互いに素な正の整数gに対し、g^(p-1) mod p = 1が成り立つことから、g^(-1) mod p = g^(p-2) mod pとなることを用いるものである。つまり、D1 = (2*y)^(p-2) mod pとして、D1を求めるものである。フェルマーの小定理を用いる方法では、逆数の計算は、べき乗剰余計算に帰着する。このべき乗剰余計算に本発明の方法を適用することは容易なことであり、オーバーフロー処理からのリーク情報を減らすことができる。
【0086】
また、本実施例を、図16の実施例等に倣ってGF(p^n)の上の楕円曲線上の2倍算に拡張することは、全く容易である。
【0087】
【発明の効果】
本発明によれば、ICカードチップなどの情報処理装置において、データとして本来の値とは異なる「モジュラ反転値」を用いて剰余乗算の計算を行い、その計算結果を修正することで正しい結果を求めることにより、消費電流の波形から処理や暗号鍵の推測を行うことが困難になる。
【図面の簡単な説明】
【図1】ICカードの概観及び端子の構成を示す図である。
【図2】マイクロコンピュータの構成図である。
【図3】消費電流の波形の例を示す図である。
【図4】べき乗剰余計算(ウインドウ幅2ビットのアディション・チェイン方式)の処理手順を示す図である。
【図5】べき乗剰余計算(ウインドウ幅2ビットのスライディング・ウインドウ方式)の処理手順を示す図である。
【図6】楕円曲線の形状を示す図である。
【図7】楕円曲線上の加法を説明する図である。
【図8】楕円曲線上の点Pのスカラー倍の計算アルゴリズム(2ビットのアディション・チェイン方式)を示す図である。
【図9】モンゴメリ法を用いたべき乗剰余計算に本発明を適用した場合の第1の実施例の処理手順を示す図である。
【図10】モンゴメリ法を用いたべき乗剰余計算に本発明を適用した場合の第2の実施例の処理手順を示す図である。
【図11】通常のべき乗剰余計算に本発明を適用した場合の第1の実施例の処理手順を示す図である。
【図12】通常のべき乗剰余計算に本発明を適用した場合の第2の実施例の処理手順を示す図である。
【図13】モンゴメリ法を用いたべき乗剰余計算に本発明を適用した場合の第3の実施例の処理手順を示す図である。
【図14】モンゴメリ法を用いたべき乗剰余計算に本発明を適用した場合の第3の実施例の処理手順を示す図(続き)である。
【図15】 GF(p)上の楕円曲線上の点の2倍計算に本発明を適用した場合の第1の実施例の処理手順を示す図である。
【図16】 GF(p)上の楕円曲線上の点の和計算に本発明を適用した場合の第1の実施例の処理手順を示す図である。
【図17】 GF(p^n)上の楕円曲線上の点の2倍計算に本発明を適用した場合の実施例の処理手順を示す図である。
【図18】 GF(2^n)上の楕円曲線上の点の2倍計算に本発明を適用した場合の実施例の処理手順を示す図である。
【図19】 GF(p)上の楕円曲線上の点の和計算に本発明を適用した場合の第2の実施例の処理手順を示す図である。
【符号の説明】
906,1005,1106,1207,1304,1404,1604…ステップ(剰余乗算の選択)、912〜915,1012〜1015,1112〜1115,1213〜1216,1311〜1314,1405,1410,1605,1610…ステップ(選択的な剰余乗算)、917,1017,1116,1217,1317…(結果の補正)、919〜920,1019〜1020,1118〜1119,1219〜1220,1319〜1320…ステップ(結果の出力)
Claims (13)
- 外部とのデータ送受信を行う入出力ポートと、プログラムとデータを格納する記憶装置と、前記プログラムに従ってデータ処理を実行する演算装置と、前記入出力ポート、記憶装置および演算装置を接続するバスとを有する情報処理装置における、データ処理と消費電流との関連性を減らすための方法であって、前記データ処理に関して、前記演算装置が暗号処理中に出現する剰余乗算であるA*B*R^(−1) mod Nを計算する際に実行されるその方法は、
(1)次のステップ(2)と(3)のいずれかをランダムに選択するステップ、
(2)モンゴメリ法に従ってビットストリングデータについてS1=A*B*R^(−1) mod N(Bは乗数、Aは被乗数、Nは2つの大きな素数の積、Rは2^(前記ビットストリングデータのビット長))を計算するステップ、
(3)S 2 ={sN + A*(-1)^f }*{tN + B*(-1)^g} R^(−1) mod N (任意の整数s, t, f, gは少なくとも1つは0でない整数であり、f, gは0又は1)を計算するステップ、
(4)前記ビットストリングデータを構成する各々のビットブロックについて上記(1)(2)(3)を繰り返し、最後に前記ビットストリングデータの最後のビットブロックについて上記(2)を選択したときには計算結果S1についてT1=S1*R^(−1) modNを計算してT1を出力し、上記(3)を選択したときには計算結果S2についてT2=S2*R^(−1) modNを計算してN−T2を出力するステップ、および
(5)T1とN−T2を、暗号処理の剰余乗算A*B*R^(−1) mod Nの計算結果として用いるステップを有することを特徴とする耐タンパーモジュラ演算処理方法。 - 前記(1)の選択するとは、乱数を用いていずれかを選択することを特徴とする請求項1記載の耐タンパーモジュラ演算処理方法。
- 前記(s, t, f, g)は、(0, 1, 0, 1)であることを特徴とする請求項1記載の耐タンパーモジュラ演算処理方法。
- 前記(s, t, f, g)は、(1, 0, 1, 0)であることを特徴とする請求項1記載の耐タンパーモジュラ演算処理方法。
- 外部とのデータ送受信を行う入出力ポートと、プログラムとデータを格納する記憶装置と、前記プログラムに従ってデータ処理を実行する演算装置と、前記入出力ポート、記憶装置および演算装置を接続するバスとを有する情報処理装置における、データ処理と消費電流との関連性を減らすための方法であって、前記データ処理に関して、前記演算装置が暗号処理中に出現する剰余乗算であるA*B mod p (pは素数)を計算する際に実行されるその方法は、
(1)次のステップ(2)と(3)のいずれかをランダムに選択するステップ、
(2)ビットストリングデータについてS=A*B mod p(Bは乗数、Aは被乗数)を計算するステップ、
(3)S={sp + A*(-1)^f }*{tp + B*(-1)^g} mod p (任意の整数s, t, f, gは少なくとも1つは0でない整数であり、f, gは0又は1でf+gは偶数)を計算するステップ、および
(4)上記(2)と(3)のうち選択された方の計算結果Sを暗号処理の剰余乗算A*B mod pの計算結果として用いるステップを有することを特徴とする耐タンパーモジュラ演算処理方法。 - 前記(s, t, f, g)は、(1, 1, 1, 1)であることを特徴とする請求項5記載の耐タンパーモジュラ演算処理方法。
- 前記(3)のステップのf+gは奇数であって、前記(4)の代わりに、
(4)前記(2)を選択したときは計算結果Sそのままとし、前記(3)を選択したときにはSの代わりにp−Sを計算結果とするステップ、および
(5)前記Sとp−Sを、暗号処理の剰余乗算A*B mod pの計算結果として用いるステップを有することを特徴とする請求項5記載の耐タンパーモジュラ演算処理方法。 - 前記(s, t, f, g)は、(0, 1, 0, 1)であることを特徴とする請求項7記載の耐タンパーモジュラ演算処理方法。
- 外部とのデータ送受信を行う入出力ポートと、プログラムとデータを格納する記憶装置と、前記プログラムに従ってデータ処理を実行する演算装置と、前記入出力ポート、記憶装置および演算装置を接続するバスとを有する情報処理装置における、データ処理と消費電流との関連性を減らすための方法であって、前記データ処理に関して、前記演算装置が暗号処理中に出現する剰余乗算であるA(x)*B(x) mod Φ(x)(Φ(x)はxの既約多項式であり、A(x)*B(x)の係数の演算は3以上の素数pを法として行う)を計算する際に実行されるその方法は、
(1)次のステップ(2)と(3)のいずれかをランダムに選択するステップ、
(2)S(x)=A(x)*B(x) mod Φ(x)(A(x)又はB(x)はxの多項式)を計算するステップ、
(3)S(x)={sΦ(x) + A(x)*(-1)^f }*{tΦ(x) + B(x)*(-1)^g} mod Φ(x) (任意の整数s, t, f, gは少なくとも1つは0でない整数であり、f, gは0又は1でf+gは偶数)を計算するステップ、および
(4)上記(2)と(3)のうち選択された方の計算結果S(x)を、暗号処理の剰余乗算A(x)*B(x) mod Φ(x)の計算結果として用いるステップを有することを特徴とする耐タンパーモジュラ演算処理方法。 - 前記(s, t, f, g)は、(1, 1, 1, 1)であることを特徴とする請求項9記載の耐タンパーモジュラ演算処理方法。
- 前記(3)のステップのf+gは奇数であって、前記(4)の代わりに、
(4)前記(2)を選択したときは計算結果S(x)そのままとし、上記(3)を選択したときにはS(x)の代わりにΦ(x)−S(x)を計算結果とするステップ、および
(5)前記S(x)とΦ(x)−S(x)を、暗号処理の剰余乗算A(x)*B(x) mod Φ(x)の計算結果として用いるステップを有することを特徴とする請求項9記載の耐タンパーモジュラ演算処理方法。 - 前記(s, t, f, g)は、(0, 1, 0, 1)であることを特徴とする請求項11記載の耐タンパーモジュラ演算処理方法。
- 前記A(x)*B(x)の係数の演算は素数2を法として行うものであり、前記(3)の(f,g)は(0,0)であることを特徴とする請求項9記載の耐タンパーモジュラ演算処理方法。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001060223A JP3950638B2 (ja) | 2001-03-05 | 2001-03-05 | 耐タンパーモジュラ演算処理方法 |
EP01119672A EP1239364B1 (en) | 2001-03-05 | 2001-08-22 | Tamper-resistant modular multiplication method |
DE60125710T DE60125710T2 (de) | 2001-03-05 | 2001-08-22 | Manipulationssichere Methode zur modularen Multiplikation |
US09/935,654 US6968354B2 (en) | 2001-03-05 | 2001-08-24 | Tamper-resistant modular multiplication method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001060223A JP3950638B2 (ja) | 2001-03-05 | 2001-03-05 | 耐タンパーモジュラ演算処理方法 |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2002258743A JP2002258743A (ja) | 2002-09-11 |
JP2002258743A5 JP2002258743A5 (ja) | 2005-07-14 |
JP3950638B2 true JP3950638B2 (ja) | 2007-08-01 |
Family
ID=18919673
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001060223A Expired - Fee Related JP3950638B2 (ja) | 2001-03-05 | 2001-03-05 | 耐タンパーモジュラ演算処理方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US6968354B2 (ja) |
EP (1) | EP1239364B1 (ja) |
JP (1) | JP3950638B2 (ja) |
DE (1) | DE60125710T2 (ja) |
Families Citing this family (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE10142155C1 (de) * | 2001-08-29 | 2002-05-23 | Infineon Technologies Ag | Verfahren und Vorrichtung zum modularen Multiplizieren |
JP2003241659A (ja) * | 2002-02-22 | 2003-08-29 | Hitachi Ltd | 情報処理方法 |
US20040001590A1 (en) * | 2002-06-27 | 2004-01-01 | Eisentraeger Anne Kirsten | Efficient elliptic curve double-and-add calculator |
JP4360792B2 (ja) * | 2002-09-30 | 2009-11-11 | 株式会社ルネサステクノロジ | べき乗剰余演算器 |
US7769167B2 (en) | 2003-07-25 | 2010-08-03 | Microsoft Corporation | Weil and Tate pairing techniques using parabolas |
US7298839B2 (en) | 2003-07-25 | 2007-11-20 | Microsoft Corporation | Squared Weil and Tate pairing techniques for use with elliptic curves |
US7440569B2 (en) * | 2003-07-28 | 2008-10-21 | Microsoft Corporation | Tate pairing techniques for use with hyperelliptic curves |
DE10338435B4 (de) * | 2003-08-18 | 2008-12-11 | Infineon Technologies Ag | Schaltung zur Durchführung eines Algorithmus |
JP4713490B2 (ja) * | 2003-11-17 | 2011-06-29 | サンディスク アイエル リミティド | 暗号文メッセージからリトリーブされた平文メッセージの計算をマスクする方法、および、暗号文メッセージをマスクする装置 |
KR100564599B1 (ko) | 2003-12-24 | 2006-03-29 | 삼성전자주식회사 | 역원 계산 회로, 역원계산 방법 및 상기 역원계산 방법을실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수있는 기록매체 |
FR2864649B1 (fr) * | 2004-12-23 | 2007-06-01 | Samsung Electronics Co Ltd | Circuit de calcul d'inverse, procede de calcul d'inverse et support d'enregistrement contenant un code de programme lisible par ordinateur |
JP5068176B2 (ja) * | 2005-01-18 | 2012-11-07 | サーティコム コーポレーション | デジタル署名と公開鍵の促進された検証 |
US7743977B2 (en) * | 2005-02-28 | 2010-06-29 | Broadcom Corporation | Method and system for random data access for security applications |
EP1939838A1 (en) * | 2005-10-19 | 2008-07-02 | Matsushita Electric Industrial Co., Ltd. | Information security device, information security method, computer program, computer-readable recording medium, and integrated circuit |
US20070127431A1 (en) * | 2005-11-11 | 2007-06-07 | Samsung Electronics Co., Ltd. | Method and apparatus for generating pseudorandom binary sequence in communication system using linear feedback shift register |
US20070157030A1 (en) * | 2005-12-30 | 2007-07-05 | Feghali Wajdi K | Cryptographic system component |
KR100808953B1 (ko) | 2006-05-22 | 2008-03-04 | 삼성전자주식회사 | 모듈러곱셈 방법 및 상기 곱셈방법을 수행할 수 있는스마트카드 |
FR2917197B1 (fr) | 2007-06-07 | 2009-11-06 | Thales Sa | Procede de masquage du resultat d'une operation de multiplication modulaire et dispositif associe. |
EP2015171A1 (fr) * | 2007-06-29 | 2009-01-14 | Gemplus | Procédé cryptographique comprenant une exponentiation modulaire sécurisée contre les attaques à canaux cachés sans la connaissance de l'exposant public, cryptoprocesseur pour la mise en oeuvre du procédé et carte à puce associée |
US7991162B2 (en) * | 2007-09-14 | 2011-08-02 | University Of Ottawa | Accelerating scalar multiplication on elliptic curve cryptosystems over prime fields |
JP5179933B2 (ja) * | 2008-04-18 | 2013-04-10 | ルネサスエレクトロニクス株式会社 | データ処理装置 |
US8635467B2 (en) | 2011-10-27 | 2014-01-21 | Certicom Corp. | Integrated circuit with logic circuitry and multiple concealing circuits |
US8334705B1 (en) | 2011-10-27 | 2012-12-18 | Certicom Corp. | Analog circuitry to conceal activity of logic circuitry |
US10148285B1 (en) | 2012-07-25 | 2018-12-04 | Erich Schmitt | Abstraction and de-abstraction of a digital data stream |
US9959429B2 (en) | 2013-03-15 | 2018-05-01 | Cryptography Research, Inc. | Asymmetrically masked multiplication |
US10795858B1 (en) | 2014-02-18 | 2020-10-06 | Erich Schmitt | Universal abstraction and de-abstraction of a digital data stream |
EP3242202A1 (en) * | 2016-05-04 | 2017-11-08 | Gemalto Sa | Countermeasure to safe-error fault injection attacks on cryptographic exponentiation algorithms |
CN108242994B (zh) | 2016-12-26 | 2021-08-13 | 阿里巴巴集团控股有限公司 | 密钥的处理方法和装置 |
US10601578B2 (en) * | 2017-10-26 | 2020-03-24 | Nxp B.V. | Protecting ECC against fault attacks |
EP3503459B1 (en) * | 2017-12-22 | 2021-04-21 | Secure-IC SAS | Device and method for protecting execution of a cryptographic operation |
US11522674B1 (en) | 2021-09-09 | 2022-12-06 | Aires Investment Holdings Private Limited | Encryption, decryption, and key generation apparatus and method involving diophantine equation and artificial intelligence |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR2726668B1 (fr) * | 1994-11-08 | 1997-01-10 | Sgs Thomson Microelectronics | Procede de mise en oeuvre de reduction modulaire selon la methode de montgomery |
JP3525209B2 (ja) * | 1996-04-05 | 2004-05-10 | 株式会社 沖マイクロデザイン | べき乗剰余演算回路及びべき乗剰余演算システム及びべき乗剰余演算のための演算方法 |
JP3615622B2 (ja) * | 1996-06-28 | 2005-02-02 | 株式会社ルネサステクノロジ | マイクロコンピュータ |
WO1998019231A1 (en) * | 1996-10-31 | 1998-05-07 | Motorola Limited | Co-processor for performing modular multiplication |
US6748410B1 (en) * | 1997-05-04 | 2004-06-08 | M-Systems Flash Disk Pioneers, Ltd. | Apparatus and method for modular multiplication and exponentiation based on montgomery multiplication |
US6026421A (en) * | 1997-11-26 | 2000-02-15 | Atmel Corporation | Apparatus for multiprecision integer arithmetic |
JP2000165375A (ja) * | 1998-11-30 | 2000-06-16 | Hitachi Ltd | 情報処理装置、icカード |
US6298135B1 (en) * | 1999-04-29 | 2001-10-02 | Motorola, Inc. | Method of preventing power analysis attacks on microelectronic assemblies |
JP3926532B2 (ja) * | 2000-03-16 | 2007-06-06 | 株式会社日立製作所 | 情報処理装置、情報処理方法、及びカード部材 |
US6625631B2 (en) * | 2001-09-28 | 2003-09-23 | Intel Corporation | Component reduction in montgomery multiplier processing element |
-
2001
- 2001-03-05 JP JP2001060223A patent/JP3950638B2/ja not_active Expired - Fee Related
- 2001-08-22 DE DE60125710T patent/DE60125710T2/de not_active Expired - Lifetime
- 2001-08-22 EP EP01119672A patent/EP1239364B1/en not_active Expired - Lifetime
- 2001-08-24 US US09/935,654 patent/US6968354B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
DE60125710D1 (de) | 2007-02-15 |
DE60125710T2 (de) | 2007-11-08 |
JP2002258743A (ja) | 2002-09-11 |
US6968354B2 (en) | 2005-11-22 |
EP1239364A1 (en) | 2002-09-11 |
US20020152252A1 (en) | 2002-10-17 |
EP1239364B1 (en) | 2007-01-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3950638B2 (ja) | 耐タンパーモジュラ演算処理方法 | |
JP4188571B2 (ja) | 情報処理装置の演算方法および耐タンパ演算攪乱実装方式 | |
Blake et al. | Elliptic curves in cryptography | |
KR100693239B1 (ko) | 정보 처리 장치, ic 카드 | |
JP4875700B2 (ja) | ランダム化されたモジュラー多項式のリダクション方法およびそのためのハードウェア | |
KR102136911B1 (ko) | 스칼라 또는 멱수와의 곱셈 연산을 포함하는 암호화 방법 | |
CN107040362B (zh) | 模乘设备和方法 | |
AU782868B2 (en) | Information processing device, information processing method and smartcard | |
JP4199937B2 (ja) | 耐タンパー暗号処理方法 | |
US7379546B2 (en) | Method for XZ-elliptic curve cryptography | |
EP1816624A1 (en) | Encryption computing device | |
EP1808762B1 (en) | Encryption processing apparatus, encryption processing method, and computer program | |
US7483534B2 (en) | Elliptic polynomial cryptography with multi y-coordinates embedding | |
JP2002261751A (ja) | 暗号処理方法 | |
Batina et al. | Public-key cryptography on the top of a needle | |
JP2005020735A (ja) | データ処理装置におけるサイドチャネル攻撃防止 | |
Guajardo et al. | Efficient software-implementation of finite fields with applications to cryptography | |
JP3779479B2 (ja) | Icカード | |
RU2541938C1 (ru) | Способ шифрования с защитой от квантовых атак на основе циклов функций вебера | |
AU2005203004B2 (en) | Information processing device, information processing method and smartcard | |
Becker | Methods of fault analysis attacks on elliptic curve cryptosystems | |
CA2640641C (en) | Public key cryptography utilizing elliptic curves | |
CA2711188C (en) | Public key cryptography utilizing elliptic curves | |
Ciet et al. | Several optimizations for elliptic curves implementation on smart card | |
KR100954582B1 (ko) | GF(3) 기반의 덧셈기, GF(3) 기반의 곱셈기,GF(3) 기반의 덧셈 뺄셈 통합형 연산 장치, 및 MSBfirst GF(3^m) 직렬 곱셈 장치 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20041119 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20041119 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20070410 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20070423 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110427 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120427 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120427 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130427 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140427 Year of fee payment: 7 |
|
LAPS | Cancellation because of no payment of annual fees |