JP4199937B2 - 耐タンパー暗号処理方法 - Google Patents
耐タンパー暗号処理方法 Download PDFInfo
- Publication number
- JP4199937B2 JP4199937B2 JP2001061544A JP2001061544A JP4199937B2 JP 4199937 B2 JP4199937 B2 JP 4199937B2 JP 2001061544 A JP2001061544 A JP 2001061544A JP 2001061544 A JP2001061544 A JP 2001061544A JP 4199937 B2 JP4199937 B2 JP 4199937B2
- Authority
- JP
- Japan
- Prior art keywords
- mod
- processing
- bit
- calculation
- 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
- 238000000034 method Methods 0.000 title claims description 194
- 238000012545 processing Methods 0.000 claims abstract description 194
- 238000004364 calculation method Methods 0.000 claims abstract description 71
- 230000010365 information processing Effects 0.000 claims abstract description 5
- 230000008569 process Effects 0.000 claims description 106
- 238000003672 processing method Methods 0.000 claims description 16
- 238000003860 storage Methods 0.000 claims description 14
- 230000007423 decrease Effects 0.000 abstract description 2
- 239000013256 coordination polymer Substances 0.000 abstract 1
- 238000010586 diagram Methods 0.000 description 31
- 208000019585 progressive encephalomyelitis with rigidity and myoclonus Diseases 0.000 description 14
- 238000004422 calculation algorithm Methods 0.000 description 9
- 230000000694 effects Effects 0.000 description 9
- 238000012546 transfer Methods 0.000 description 8
- 238000012935 Averaging Methods 0.000 description 7
- 230000008859 change Effects 0.000 description 6
- 101000579490 Solanum lycopersicum Suberization-associated anionic peroxidase 1 Proteins 0.000 description 4
- 101001073211 Solanum lycopersicum Suberization-associated anionic peroxidase 2 Proteins 0.000 description 4
- 230000000739 chaotic effect Effects 0.000 description 4
- 238000013500 data storage Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000007781 pre-processing Methods 0.000 description 2
- 238000002360 preparation method Methods 0.000 description 2
- 238000005215 recombination Methods 0.000 description 2
- 230000006798 recombination Effects 0.000 description 2
- 230000000717 retained effect Effects 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 1
- FFBHFFJDDLITSX-UHFFFAOYSA-N benzyl N-[2-hydroxy-4-(3-oxomorpholin-4-yl)phenyl]carbamate Chemical compound OC1=C(NC(=O)OCC2=CC=CC=C2)C=CC(=C1)N1CCOCC1=O FFBHFFJDDLITSX-UHFFFAOYSA-N 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 230000008034 disappearance Effects 0.000 description 1
- 230000001343 mnemonic effect Effects 0.000 description 1
- 230000009979 protective mechanism Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000004904 shortening Methods 0.000 description 1
- 238000009827 uniform distribution Methods 0.000 description 1
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/723—Modular exponentiation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/002—Countermeasures against attacks on cryptographic mechanisms
- H04L9/003—Countermeasures against attacks on cryptographic mechanisms for power analysis, e.g. differential power analysis [DPA] or simple power analysis [SPA]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/30—Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy
- H04L9/3006—Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy underlying computational problems or public-key parameters
- H04L9/302—Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy underlying computational problems or public-key parameters involving the integer factorization problem, e.g. RSA or quadratic sieve [QS] schemes
-
- 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/7252—Randomisation as countermeasure against side channel attacks of operation order, e.g. starting to treat the exponent at a random place, or in a randomly chosen direction
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2209/00—Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
- H04L2209/08—Randomization, e.g. dummy operations or using noise
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2209/00—Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
- H04L2209/12—Details relating to cryptographic hardware or logic circuitry
- H04L2209/127—Trusted platform modules [TPM]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- Mathematical Physics (AREA)
- Storage Device Security (AREA)
Description
【発明の属する技術分野】
本発明は、高いセキュリティを持つICカードなどに適用される耐タンパー暗号処理方法に関するものである。
【0002】
【従来の技術】
ICカードは、勝手に書き換えることが許されないような個人情報の保持や、秘密情報である暗号鍵を用いたデータの暗号化や暗号文の復号化を行う装置である。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は、プログラム205やデータを格納する装置である。入出力ポート207は、リーダライタと通信を行なう装置である。コ・プロセッサ202は、暗号処理そのもの、または暗号処理に必要な演算を高速に行なう装置であり、例えば、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カードチップで中国人剰余定理を用いたべき乗剰余演算の処理の順序をアタッカーに推定されないように変更することにより、消費電流の波形から、処理や暗号鍵の推測を困難にするものである。本発明のもう一つの着眼点は、算術和や算術積を二つのレジスタの値に対して実行する際に、レジスタへの転送順序をアタッカーに推定されないように変更することにより、消費電流の波形から、処理や暗号鍵の推測を困難にするものである。
【0013】
本発明の目的は、上記の課題について、実現手段としての耐タンパー暗号処理方法を提供することにある。
【0014】
【課題を解決するための手段】
ICカードチップに代表される耐タンパー装置は、プログラムを格納するプログラム格納部、データを保存するデータ格納部を持つ記憶装置と、プログラムに従って所定の処理を実行しデータ処理を行う中央演算装置(CPU)を持ち、プログラムは、CPUに実行の指示を与える処理命令から構成される一つ以上のデータ処理手段からなる情報処理装置として捉えることができる。
【0015】
本発明の第一は、中国人剰余定理(CRT:Chinese Remainder Theorem)を用いてべき乗剰余計算の処理を行なう際に、処理しているデータとICカード用チップの消費電流の関連性を減らす方法は、モジュラスを素因数に分離し、それぞれの素因数を法とするべき乗剰余計算の処理の順序を本来の処理順序とは異なる方式で処理する方法である。
【0016】
中国人剰余定理とは、法Nによる剰余を、Nの互いに素な因数に対する剰余によって表現するものである。例えば、N = pqのようにモジュラスが二つの互いに素な素数の積である場合には、a mod Nを、a mod p と a mod qを用いて表現するのである。このように、モジュラスを分離して表現することにより、特にべき乗剰余計算の高速化が可能となる。すなわち、べき乗剰余計算y^x mod Nを、N=pqの場合に、y^x mod p、 y^x mod qを用いて表現すると、y^x mod p = (y mod p)^(x mod (p-1)) mod p、 y^x mod q = (y mod q)^(x mod (q-1)) mod qと書くことができるので、p、qが共に、N^(1/2)程度であれば、y、 xが、共に半分のデータ長となる。これにより、個々のべき乗剰余計算は、元の長さの処理時間の約1/8の時間で計算することができる。この高速化効果は非常に大きいものである。
【0017】
一方、べき乗剰余計算は、指数のビットパタンを順に読んで実行される。よく知られたアルゴリズムであるアディション・チェイン(加法連鎖)方式やスライディング・ウインドウ方式では、指数ビットを上位(又は下位)から順にビット値を取り出し、二乗剰余演算と剰余乗算演算を組み合せて処理を行なう。この二つのべき乗剰余計算の途中の処理を本来の処理順序とは異なる方式で処理する。例えば、通常は、yp^xp mod pの指数のビットに応じる単位処理をビット長さ分だけ続け、その後、yq^xq mod qの処理を行なう。
【0018】
本発明に基づくべき乗剰余処理においては、yp^xp mod pの途中処理 → yq^xq mod pの途中処理 →yq^xq mod qの途中処理 → yp^xp mod pの途中処理 → yp^xp mod pの途中処理 → yp^xp mod pの途中処理 → yq^xq mod qの途中処理 → ...→ などのように、両者の処理とは異なる処理順序で実行する。 これにより、電流観測を行なっているアタッカーは混乱する。処理順序を定められた単純な規則を用いずに、ランダム(疑似ランダム)に行なうことにより、効果をさらに高めることができる。特に、電流波形の平均化を行なうことによってノイズを除去する通常の波形観測を著しく困難にすることができる。
【0019】
また、本発明をxp = (x mod (p-1)) + k(p-1)、 xq = (x mod (q-1)) + j(q-1) (k、 jは乱数)と表現する方式や、モジュラスをp、qそのものではなく、その乱数倍にするなどの操作を組み合せることで、さらに効果を高めることができる。
【0020】
本発明の第二は、マイクロコンピュータに実装された二項演算、例えば、算術和「+」、算術積「×」や、論理和、論理積、排他的論理和を実行する際に必要な転送処理において、その転送処理の順序を毎回変更するものである。例えば、RAMに格納されたデータAとBに対して、ソースレジスタRs、 ディスティネ−ションレジスタRdの値の算術和を行なう際、通常は、Aの値をRs(又はRd)、Bの値をRd(又はRs)に転送した後、ADD Rs、 Rd(これは、アセンブラ形式で、RsとRdの算術和を計算し、Rdに結果を格納することを意味する)を実行するが、その際、転送の順序は固定されている。本発明では、Aの値をRsに転送した後、Bの値をRdに転送するか、Bの値をRdに転送した後、Aの値をRsに転送するかをアタッカーが予測できないように入れ換えることにより、電流観測を行なっているアタッカーは混乱する。処理順序を定められた単純な規則を用いずに、ランダム(疑似ランダム)に行なうことにより、効果をさらに高めることができる。特に、電流波形の平均化を行なうことによってノイズを除去する通常の波形観測を著しく困難にすることができる。
【0021】
【発明の実施形態】
実施例を説明する準備として、CRTを用いたRSA暗号のべき乗剰余計算の基本アルゴリズム及び、べき乗剰余計算の代表的な方式であるアディション・チェイン方式及びスライディング・ウインドウ方式について説明する。
【0022】
RSA暗号では、大きな素数、例えば512ビットの2つの素数p、qの積 N = pqと Nと互いに素な数 e(ICカードでは、3や、65537が用いられることが多い)をとり、これを公開鍵として公開鍵簿に登録する。このとき、この公開鍵の持ち主Aに送信者Bは、1以上N−1以下の数で表現されたデータ(平文)M を、
y = M^e mod N
として暗号化して送信する。ここで、M^eはMのe乗を表す記号とする。
この暗号文R を受け取った持ち主Aは、xe mod (p-1)(q-1) = 1となる秘密鍵 x
を用いて
y^x mod N
を計算する。ここで、(p-1)(q-1)は、Nのオイラー関数の値f(N)である。これは、Nと互いに素な自然数の個数に等しい。オイラーの定理によれば、
y^((p-1)(q-1)) mod N = 1
が成り立つ。一方、xe = 1 + k(p-1)(q-1)(kは整数)と書くことができるので、
y^x mod N
= (M^e)^x mod N
= M^(ex) mod N
= M^(1+k(p-1)(q-1)) mod N
= M*M^(k(p-1)(q-1)) mod N
= M
が成り立つ。従って、y^x mod Nを計算することで、持ち主Aは、送信者Bの平文 M を復号することができる。この際、秘密鍵 x を計算するのに、Nの素因数 p、 q が用いられている。現在のところ、素因数分解を介さないで、xを計算する方法は知られておらず、大きな素数の積を因数分解することは、現実的でない時間が必要であるので、Nを公開しても持ち主Aの秘密鍵は安全である。
【0023】
ICカードでは、公開鍵指数eとして、3や65537が用いられることが多い。これは暗号化の計算時間を短縮するという意味もあるが、eの値を知っても直接的に秘密鍵指数xやNの素因数が危険に曝されることはないという事情によるものである。
【0024】
この計算法としては、アディション・チェイン方式などが採用される(上記「暗号理論入門」参照)ことが多いが、このようなアルゴリズムでは処理が遅く、ICカードを用いたトランザクションに要する時間がユーザの許容範囲を超えてしまう可能性がある。そこで、単純にx、Nに対するべき乗剰余計算を行なわずに、公開モジュラスNの二つの素因数p、qに対するべき乗剰余計算結果からMを導く方法がCRTである。
【0025】
図4を用いてCRTの処理を簡単に説明する。まずカード101は、計算に用いる値k=p^(-1) mod q、 xp = x mod (p-1)、 xq = x mod (q-1)の値を計算する(ステップ401)。ここでp-1,q-1の代わりに各々の倍数でもよい。普通、これらの値はEEPROMに格納しておく。次にI/Oポートから暗号文yを受け取り(ステップ402)、この暗号文yから素因数p,qまたはp,qの倍数を法とする剰余yp = y mod p、 yq = y mod qを求め、これをRAMに格納する(ステップ403)。次に、二つのべき乗剰余計算:
Cp = yp^xp mod p、 Cq = yq^xq mod q
を行なう(ステップ404, 405)。次に、再結合計算:
S = (Cq - Cp)*k mod q
M = S*p + Cp
を行ない(ステップ406,407)、I/Oポートに平文Mを出力する(ステップ408)。このMが実際のy^x mod Nに一致する。
【0026】
この事実を数値的に確認しておく。暗号文y = 79、 N = 187(=11*17)、 x = 107とする。このxは、Nのオイラー関数値(11-1)*(17-1)=160に関して、e = 3の逆数になっている。このとき、実際の値は、
M = 79^107 mod 187
= 79^(5*3*7 + 2) mod 187
= 79^2 * (79^5 mod 187)^(3*7) mod 187
= 79^2 * 10^(3*7) mod 187
= 79^2 * (10^3 mod 187)^7 mod 187
= 79^2 * (65^7 mod 187) mod 187
= 79^2 * 142 mod 187
= 29
である。
【0027】
これをCRTを用いて計算する。11*14 mod 17 = 1であるから、k = 11^(-1) mod 17 = 14であり、xp = 107 mod (11-1) = 7、 xq = 107 mod (17-1) = 11である。また、yp = 79 mod 11 = 2、 yq = 79 mod 17 = 11となる。
【0028】
Cp = 2^7 mod 11 = 7
Cq = 11^11 mod 17 = 12
となるので、
S = (12 - 7)*14 mod 17 = 2
M = 2*11 + 7 = 29
となり、先の値と一致する。
【0029】
CRTを用いると高速化できる理由は、べき乗剰余計算では、データ長さの3乗に比例して、計算量が増加するのに対して、CRTでは、データの長さが半分のものを二つ計算するため、それぞれのべき乗剰余計算の計算量は、1/8で済み、これを二回実行しても、両者の計算量の合計は、1/8 * 2 = 1/4で済むからである。実際には、データの変換や、再結合計算を行なう必要があるので4倍速にはならないが、速度は3倍程度に向上する。
【0030】
次に、図5を参照してべき乗剰余計算のアディション・チェイン方式による計算アルゴリズムを説明する。この方式は、最も多く利用されているものである。ここでは、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 を対応させ(ステップ501)、剰余乗算計算を行うことによって実現したものである。 勿論、2ビット毎に区切ることは説明の便宜のためであり、実際には1ビット、3ビット、4ビットをまとめて計算することもある。その際も考え方は全く同じである。
この計算の際、4乗の計算(ステップ502)は、xのビットと無関係に行われるが、その次にカード101が行う剰余乗算計算においては、xのビット(2ビット分を指す)値に応じて、条件分岐(ステップ503,504,505,506)を行い、それぞれ、ステップ507,508,509,510の剰余乗算計算を行う。
この方式で正しい計算が行なえることを簡単に数値例で確認する。この計算方式の本質的部分は指数部分であるので、例として、指数部分のみ数値である
S = y^219 mod N
の例を取り挙げる。ここで、219は二進数表示で11011011である。これをもとに、2ビット幅のアディション・チェイン方式で計算する。ステップ501の処理に相当する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となる。これが求める答である。
【0031】
次に、もう一つの代表的なべき乗剰余計算アルゴリズムであるスライディング・ウインドウ方式を説明する。スライディング・ウインドウ方式では、例えば、次のように処理を行なう。
【0032】
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の4乗剰余演算を行なって、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の容量が半分で済むという利点がある。
【0033】
上記のアディション・チェイン方式、スライディング・ウインドウ方式は、モンゴメリ法と呼ばれる方式を用いて実行されることがあることに注意しておく。モンゴメリ法とは、剰余乗算演算 AB mod Nを高速に実行する方式であり、特にハードウエア化に向いた方法である。簡単にそのしくみを説明する。詳細は、モンゴメリの原著論文”Modular Multiplication Without Trial Division”、 Mathematics of Computation 44、 170、 pp.519-521(1985))に記載されている。
【0034】
モンゴメリ法の本質は、殆ど全てのコンピュータにおいて、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を引き算して求める答を得る。
【0035】
このように、モンゴメリ法においては、ABR^(-1) mod Nの形で演算が行なわれるので、上記のアルゴリズム、例えばアディション・チェイン方式においては、図5のステップ501で実行されるテーブル作成処理では、それぞれのテーブルの値をy[0] = R mod N、 y[1] = yR mod N、 y[2] = y^2R mod N、 y[3] = y^3R mod Nに置き換えて処理する。Sの初期値もR mod Nとする。すると、被乗数Aと乗数Bの値は、もとの値のR倍になっているため、ABR^(-1) mod Nの処理では、必ずR倍の項が残ることになる。このデータ形式をモンゴメリフォーマットと呼ぶことにすれば、アディション・チェイン、スライディング・ウインドウ両方式を、モンゴメリフォーマットで実行し、最後に、R^(-1) mod N倍することにより、求める答を得ることができる。モンゴメリ法を用いた処理においても、本発明の方式は、本質的に何ら変更を必要としない。
上記の準備の下で、本発明の実施例を説明する。図6及び図7を用いて、べき乗剰余計算の方式として、モンゴメリ法を用いた剰余乗算演算を用い、2ビットアディション・チェイン方式を用いる場合について説明する。RSA暗号系において、モジュラスN、秘密鍵指数xによって、暗号文yを復号する処理M = y^x mod N (N = pq)を行なうに際し、まずCRTに用いる前処理計算(ステップ601)において、k = p^(-1) mod q、 xp = x mod (p-1)、 xq = x mod (q-1)を準備し、EEPROMに格納しておく。暗号文yを取得し(ステップ602)、2ビットのモンゴメリフォーマットに変換されたテーブルを用意する(ステップ603)。このテーブルは、Nの素因数p、qをモジュラスとしたもの両方からなる。すなわち、R mod p、 yR mod p、 y^2R mod p、 y^3R mod p、 R mod q、 yR mod q、 y^2R mod q、 y^3R mod qを用意する。このテーブルは、CRTにおける二つのべき乗剰余処理、Cp = (y mod p)^xp mod p、 Cq = (y mod q)^xq mod qの2ビットアディション・チェイン処理に必要なものである。この二つのべき乗剰余処理が終わったかどうかをステップ604、605の条件分岐処理で判定する。ステップ604の条件分岐処理は、xp、xq全てのビット処理が終了したかどうかを判定するものであり、全てのビットが終了していれば、ステップ610の処理に移る。ステップ610、611では、Cp、 Cqをモンゴメリフォーマットから通常のフォーマットに書き直す処理Cp = Cp*R^(-1) mod p、Cq = Cq*R^(-1) mod qを行ない、ステップ612では、S = (Cq - Cp)*k mod qが求められ、続くステップ613の処理で、M =S*p + Cpを求め、最後にこの値Mを出力する。一方、xp、 xqのうち、少なくとも一方が終了していない場合、ステップ604の条件分岐はスルーし、ステップ605の条件分岐処理に入る。ステップ605では、xp、 xqのどちらが終了しているか、または終了していないかが判定される。いずれも終了していない場合、ステップ606の処理に進む。ステップ606では、1ビットの乱数vが生成され、v = 0であれば、Cpの処理(ステップ608)、v = 1であれば、Cqの処理(ステップ609)を行ない、終了後、再びステップ604の処理に移る。
ここでCpの処理、Cqの処理とは、図8に示した処理である。ここでは、Cpの場合が書かれているが、Cqの場合でも処理内容は同一である。図8の処理は、まず、4乗剰余乗算処理を行なう。モンゴメリ法で実行するので、R^(-1) mod pというファクターが含まれているが、本質的には、通常の4乗剰余乗算処理と考えてよい。次に指数部の2ビットブロックを受け取り(ステップ702)、このビットブロックが、00であるか、01であるか10であるか、11であるかに応じて、それぞれステップ707、708、709、710の処理に分岐する(ステップ703、 704、 705、 706)。ステップ707、708、709、710の処理は、乗数が異なるのみで、他は同一の処理であるから、ステップ705からの分岐の場合のみ説明する。このときは、y^2R mod pを乗じて、モンゴメリ剰余乗算処理を行ない、処理が終了すれば、Cpの値をRAMに書き戻す(ステップ711)。他も同様である。ステップ605において、xpが終了していれば、Cpの処理は終了しているので、Cqの処理(ステップ609)を実行する。逆に、xqが終了していれば、Cqの処理が終了していることになるので、Cpの処理(ステップ608)を実行する。この処理で、正しいCp,Cqの値が得られることは明白である。
本実施例に基づいて動作するプログラムの実行時の消費電力を解析するアタッカーは、通常の処理系列とは異なる電流パターンを見ることになる。特に本実施例では、処理系列をランダムに選択するため、実行のたびに異なる処理系列を観測する。例えば、本来のxpのビットパターンが、10 11 00 10であり、xqのビットパターンが、11 00 01 11であったと仮定する。このとき、通常は、Cpの処理を行なってから、Cqの処理を行なう(又はCqの処理を行なってから、Cpの処理を行なう)。従って、通常のCRTによる処理で観測される処理系列は、10 11 00 10 11 00 01 11となる。一方、本実施例のCRT処理系列は、毎回異なる処理系列を生成する。例えば、分岐用の乱数がv = 0 1 1 0 0 1 0 1 であれば、10 11 00 11 00 01 10 11となり、v = 1 1 0 0 0 1 1 0であれば、11 00 10 11 00 01 11 10となる。通常処理は、v = 0 0 0 0 1 1 1 1に対応する。並べて比較してみると、
通常CRTの処理 10 11 00 10 11 00 01 11
本実施例の処理1 10 11 00 11 00 01 10 11
本実施例の処理2 11 00 10 11 00 01 11 10
のようになる。このように、ランダムに攪拌された処理系列から、元の処理系列を推測することは困難となる。また実際の電流波形観測においては、複数の波形を各時点毎に平均化して、ノイズを除去することが多い。(平均化でノイズを除去する方法は、確率論における大数の法則に基づいている。)この場合、処理順序の撹乱の効果は、波形が異なるビット値に対する波形の平均として観測され、指数による特徴が消失することによりさらに高まるものと考えられる。
【0036】
上記実施例においては、ビットパタンの一処理単位とは、xp、 xqの2ビットブロック00、 01、 10、 11に相当する。これを、1ビット、3ビット、4ビット等々のブロックとしても、上記処理がビット単位を変えるのみで、同一の構造を持つことは明らかであろう。
【0037】
また本実施例では、乱数vを用いて条件分岐処理をスイッチしているが、これを線形合同法等を用いた疑似乱数や、カオス数列や、あらかじめ定められたビット列に変えることは容易なことであり、本発明の本質とは無関係である。
【0038】
次に本発明の「ビットパタンの一処理単位」のもう一つの側面を示すために、図9及び図10を用いてスライディング・ウインドウ方式の場合を説明する。本質的には、図6及び図7の処理に類似しているが、指数ビットの扱いが若干異なる。比較を容易にするために、0以外の処理ビットの単位を2ビットとしたものを示す。
RSA暗号系において、モジュラスN、秘密鍵指数xによって、暗号文yを復号する処理M = y^x mod N (N = pq)を行なうに際し、まず、CRTに用いる前処理計算(ステップ801)において、k = p^(-1) mod q、 xp = x mod (p-1)、 xq = x mod (q-1)を準備し、EEPROMに格納しておく。暗号文yを取得し(ステップ802)、アディション・チェイン方式の場合の00、01に相当するテーブル値を除いたモンゴメリフォーマットテーブルを用意する(ステップ803)。このテーブルは、Nの素因数p、qをモジュラスとしたもの両方からなる。すなわち、y^2R mod p、 y^3R mod p、 y^2R mod q、 y^3R mod qを用意する。このテーブルは、CRTにおける二つのべき乗剰余処理、Cp = (y mod p)^xp mod p、 Cq = (y mod q)^xq mod qの2ビットスライディング・ウインドウ処理に必要なものである。この二つのべき乗剰余処理が終わったかどうかをステップ804、805の条件分岐処理で判定する。ステップ804の条件分岐処理は、xp、xq全てのビット処理が終了したかどうかを判定するものであり、全てのビットが終了していれば、ステップ810の処理に移る。ステップ810、 811の処理では、Cp、 Cqをモンゴメリフォーマットから通常のフォーマットに書き直す処理Cp = Cp*R^(-1) mod p、Cq = Cq*R^(-1) mod qを行ない、ステップ812では、S = (Cq - Cp)*k mod qが求められ、続くステップ813の処理で、M = S*p + Cpを求め、最後にこの値Mを出力する。一方、xp、 xqのうち、少なくとも一方が終了していない場合、ステップ804の条件分岐はスルーし、ステップ805の条件分岐処理に入る。ステップ805では、xp、 xqのどちらが終了しているか、または終了していないかが判定される。いずれも終了していない場合、ステップ806の処理に進む。ステップ806では、1ビットの乱数vが生成され、v = 0であれば、Cpの処理(ステップ808)、v = 1であれば、Cqの処理(ステップ809)を行ない、終了後、再びステップ804の処理に移る。ここで、Cpの処理(ステップ808)、Cqの処理(ステップ809)とは、図11に示した処理である。ここでは、Cpの場合が書かれているが、Cqの場合でも処理内容は同一である。
図11の処理は、まず、2乗剰余乗算処理を行なう。モンゴメリ法で実行するので、R^(-1) mod pというファクターが含まれているが、本質的には、通常の2乗剰余乗算処理と考えてよい(アディション・チェイン方式では、無条件に4乗剰余乗算処理を行なったがスライディングウインドウ方式ではこの点が異なっていることに注意)。次に指数部の1ビットを受け取り(ステップ902)、その値を読み、これが1であるかどうか判定し(ステップ903)、1でなければ、直接ステップ909の処理に移る。もしステップ903において、ビット値が1であれば、ステップ904にて、モンゴメリ法での2乗剰余乗算処理を行なう。次に、xpの次の1ビットが読めるかどうか(ビットの終端に来ているかどうか)を判定し(ステップ905)、そのビット値が0であるかどうか判定し(ステップ906)、0であれば、モンゴメリフォーマットでの乗算Cp=Cp*(y^2R mod p)*R^(-1) mod pを実行し(ステップ907)、0でなければ1であるので、Cp=Cp*(y^3R mod p)*R^(-1) mod pを実行し(ステップ908)、CpをRAMに格納して(ステップ909)、剰余乗算処理を終了する。Cqの場合の処理も全く同様である。ステップ805において、xpが終了していれば、Cpの処理は終了しているので、Cqの処理(ステップ809)を実行する。逆に、xqが終了していれば、Cqの処理が終了していることになるので、Cpの処理(ステップ808)を実行する。この処理で、正しいCp,Cqの値が得られることは明白である。
本実施例に基づいて動作するプログラムの実行時の消費電力を解析するアタッカーは、通常の処理系列とは異なる電流パターンを見ることになる。特に本実施例では、処理系列をランダムに選択するため、実行のたびに異なる処理系列を観測することになる。この事情を前実施例と同様の例で説明する。すなわち、xpのビットパターンが10 11 00 10であり、xqのビットパターンが11 00 01 11であったと仮定する。このとき、通常はCpの処理を行なってから、Cqの処理を行なう(又はCqの処理を行なってから、Cpの処理を行なう)。従ってスライディングウインドウ方式を用いた通常のCRTによる処理で観測される処理系列は、10 11 0 0 10 11 0 0 0 11 1となる。一方、本実施例のCRT処理系列は、毎回異なる処理系列を生成する。例えば分岐用の乱数がv = 0 1 1 0 0 1 0 1 0 1であれば、10 11 0 11 0 0 0 0 10 11 1となり、v = 1 1 0 0 0 1 1 0 1 0 1であれば、11 0 10 11 0 0 0 0 11 10 1となる。通常処理は、v = 0 0 0 0 1 1 1 1に対応する。並べて比較してみると、スライディングウインドウ方式では、
通常CRTの処理 10 11 0 0 10 11 0 0 0 11 1
本実施例の処理1 10 11 0 11 0 0 0 0 10 11 1
本実施例の処理2 11 0 10 11 0 0 0 0 11 10 1
のようになる。このように、ランダムに攪拌された処理系列から元の処理系列を推測することは困難となる。
【0039】
上記実施例においては、ビットパタンの一処理単位とは、xp、 xqのアディション・チェインのときとは異なっている。すなわちスライディングウインドウ方式の場合、ビットパタンの一処理単位は、「0」、「10」、「11」と考えることができる。さらにビット幅を増やして、「0」、「100」、「101」、「110」、「111」のように取ることもできる。同様にビットの幅を増やすことも容易である。このように、本発明でいう「ビットパタンの一処理単位」とは、同じ長さを持つビットブロックのみを意味するのではなく、スライディングウインドウ方式のときのように、異なる長さのものをも許容するものである。
【0040】
また本実施例では、乱数vを用いて条件分岐処理をスイッチしているが、これを線形合同法等を用いた疑似乱数や、カオス数列や、あらかじめ定められたビット列に変えることは容易なことであり、本発明の本質とは無関係である。
【0041】
上記実施例は、Cp、 Cqの処理を同一の方式で行なっているが、これを変えることも本発明の趣旨を損ねない。例えば、Cpの処理系列を2ビット幅のアディション・チェイン方式で実行し、Cqの処理系列を上記の2ビットスライディング・ウインドウ方式で行なってもよい。この他、Cpの処理系列を2ビット幅のアディション・チェイン処理で実行し、Cqの処理系列を3ビット幅のアディション・チェイン方式で行なってもよい。以下、これら全ての場合について例を挙げることはしないが、このような場合に対して、本発明を適用することは、自然なことである。
【0042】
次に、上記二つの実施例は、xp、 xq全てのビットに関して、順序撹乱を施しているが、これを一部のビット列に関してのみ適用することができることを示す。
【0043】
これを説明するために、まず、「xの一部のビット列」を明確化する。そのために、いくつか例を挙げる。図12は、xの二進数表示(x[n-1]x[n-2]...x[1]x[0])を分割したもので、1002は、「xの一部のビット列」の一例である。図13は、xを二つの部分に区切ったものであり、1101は、「xの一部のビット列」の一例である。図14は、図13と同様にxを分割したものであり。1202は、「xの一部のビット列」の一例になっている。図15は、xを5つの部分に分割したものである。1302と1304を合わせた部分は、「xの一部のビット列」の一例である。
【0044】
上記の例に見るように、「xの一部のビット列」とは、「xのビットの連続した一部分の和集合」とみなすことができる。容易に類推できるように、「xの一部のビット列」の取り方は上記の例の他に数多くある。以下、簡単のためxpの一部のビット列Bpなどという書き方をする。
【0045】
CRTでの処理における指数xpの一部のビット列Bp、 指数xqの一部のビット列Bqを図16のように定める。但し、ここでxp = (xp[n-1]xp[n-2]...xp[1]xp[0])の各成分は2ビットブロックであるものとする。すなわち、xp[k]は、二進数00、 01、 10、 11のうちのいずれかである。従って、nはブロック数であり、例えば、xpが512ビットであれば、ブロック数は、512/2 = 256である。xqについても同様である。
【0046】
RSA暗号系において、モジュラスN、秘密鍵指数xによって、暗号文yを復号する処理M = y^x mod N (N = pq)を行なうに際し、まず、図17〜図19に示すCRTに用いる前処理計算(ステップ1501)において、k = p^(-1) mod q、 xp = x mod (p-1)、 xq = x mod (q-1)を準備し、EEPROMに格納しておく。暗号文yを取得し(ステップ1502)、2ビットのモンゴメリフォーマットに変換されたテーブルを用意する(ステップ1503)。このテーブルは、Nの素因数p、qをモジュラスとしたもの両方からなる。すなわち、R mod p、 yR mod p、 y^2R mod p、 y^3R mod p、 R mod q、 yR mod q、 y^2R mod q、 y^3R mod qを用意する。このテーブルは、CRTにおける二つのべき乗剰余処理、Cp = (y mod p)^xp mod p、 Cq = (y mod q)^xq mod qの2ビットアディション・チェイン処理に必要なものである。
【0047】
次に、カウンタ conutをn-1にセットする(ステップ1504)。次にxp[count]に対応したモンゴメリフォーマットによる剰余乗算処理を行う(ステップ1505)。この処理は、図8に示すものと本質的に同一の計算である。つまり、Cpの場合、4乗剰余乗算を行なった後、xp[count]が、00、 01、 10、 11のいずれかに応じ、それぞれ、R mod p、 yR mod p、 y^2R mod p、 y^3R mod pをモンゴメリ法を用いた剰余乗算処理を行なうものである。ステップ1505の処理の後、CpをRAMに格納し(ステップ1506)、カウンタcountを1減らす(ステップ1507) 。ステップ1508の条件分岐処理においては、カウンタcountが、j-2になっていなければ、再び、ステツプ1505の処理に移り、countがj-2になれば、Cqの処理に移り、カウンタcountを再びn-1にセットする(ステップ1509)。次にxq[count]に対応したモンゴメリフォーマットによる剰余乗算処理を行なう(ステップ1510)。この処理は、図8に示すものと本質的に同一の計算である。ステップ1510の処理終了後、CqをRAMに格納する。いちいち確認しないが、CpとCqの格納位置は重複してはならない。これは、CpとCqが互いに上書きしてしまうことを防ぐためである。以下、異なる変数名(定数名)で呼ばれているものについては、互いにRAM上で重複がないものと仮定して話を進める。
【0048】
次に、本発明の処理をBp、 Bqに適用している部分の説明を行なう。この部分は、既にこれまで説明してきたものであるが、図に合わせて説明を再記する。まず、Bp、 Bqのビットブロックの処理が終了したかどうかを判定する(ステップ1514) 。共に終了していれば、ステップ1520の処理に移る。もし、両方が終了していないならば、Bpか、Bqの少なくともいずれか一方は終了していない。ステツプ1515の条件分岐処理では、Bp、 Bqのどちらが終了しているか、あるいは共に終了していないかを判定する。いずれも終了していない場合、ステップ1516の処理に進む。ステップ1516では、1ビットの乱数vが生成され、ステップ1517の条件分岐処理にて、v = 0であれば、Cpの処理(ステップ1518)、v = 1であれば、Cqの処理(ステップ1519)を行い、終了後、再びステップ1514の処理に移る。ここで、Cpの処理(ステップ1518)、Cqの処理(ステップ1519)とは、図8に示した処理である。ここでは、Cpの場合が書かれているが、Cqの場合でも処理内容は同一である。ステップ1515において、Bpが終了していれば、Cpの処理は終了しているので、Cqの処理(ステップ1519)を実行する。逆に、Bqが終了していれば、Cqの処理が終了していることになるので、Cpの処理(ステップ1518)を実行する。
【0049】
順序撹乱処理後、ステップ1520に移る。ここでは、カウンタcountをk-2にセットする。ここでkはx[k]のkであり、ステップ1532のkとは別の変数とする。次にxp[count]に対応したモンゴメリフォーマットによる剰余乗算処理を行なう(ステップ1521)。この処理は、図8に示すものと本質的に同一の計算である。つまり、Cpの場合、4乗剰余乗算を行なった後、xp[count]が、00、 01、 10、 11のいずれかに応じ、それぞれR mod p、 yR mod p、 y^2R mod p、 y^3R mod pをモンゴメリ法を用いた剰余乗算処理を行なうものである。ステップ1521の処理の後、CpをRAMに格納し(ステップ1522)、カウンタcountを1減らす(ステップ1523)。ステップ1524の条件分岐処理においては、カウンタcountが負になっていなければ、再びステップ1521の処理に移り、countが負になれば、Cqの処理に移り、カウンタcountを再びk-2にセットする(ステップ1525)。次にxq[count]に対応したモンゴメリフォーマットによる剰余乗算処理を行う(ステップ1526)。この処理は、図8に示すものと本質的に同一の計算である。ステップ1526の処理終了後、CqをRAMに格納する(ステップ1527)。次にカウンタcountを1減らす(ステップ1528)。ステップ1529の条件分岐処理においては、カウンタcountが負になっていなければ、再びステップ1526の処理に移り、countが負になれば、ステップ1530の処理に移る。ステップ1530、1531では、Cp、 Cqをモンゴメリフォーマットから、通常のフォーマットに書き直す処理Cp =Cp*R^(-1) mod p、Cq = Cq*R^(-1) mod qを行ない、ステップ1532では、S = (Cq Cp)*k mod qが求められ、続くステップ1533の処理で、M = S*p + Cpを求め、最後にこの値Mを出力する。この処理で正しいMの値が得られることは明白である。本実施例に基づいて動作するプログラムの実行時の消費電力を解析するアタッカーは、通常の処理系列とは異なる電流パターンを見ることになる。特に本実施例では、処理系列をランダムに選択するため、実行のたびに異なる処理系列を観測する。
【0050】
上記実施例においては、Bp、 Bqの位置と大きさが同一であったが、これは本発明の本質とは無関係である。すなわちBp、 Bqの位置や大きさを変えることができ、さらに、CpとCqの処理を一方はアディション・チェイン、他方はスライディング・ウインドウ方式といった変則的な適用も可能である。
【0051】
また上記実施例では、図12に示す比較的単純な位置をプロテクトしたが、先に「指数の一部のビット列」の定義部で述べたように、図15に示すようなより複雑な位置をプロテクトすることも可能である。
【0052】
次に、他の実施例について説明する。実施例の説明に先立ち、背景を簡単に説明する。
【0053】
一般に、マイクロコンピュータにおいては、中央演算装置(またはコ・プロセッサ等の演算装置)がレジスタと呼ばれる一時記憶領域を持っている。図20は、マイクロコンピュータの中央演算装置と、RAM(データ記憶装置)の図である。RAM(1601)は、書換え可能なメモリである。このメモリ内に演算に用いる各々1602、1603で示すデータA、Bが格納されているのが一般的である。定数として扱う場合には、ROMやEEPROM等に格納されることもある。1604で示すデータCは演算結果を格納する領域であり、RAM1601自体が、データバス1606、1607及びライトバス(書き込み用バス)1608に接続されており、RAMのデータを読み込んで、それを演算ユニットALU(Arithmetic & Logic Unit)1605や、レジスタ1610、1613に転送する。
【0054】
以下、説明のため、ALU1605は8ビットの演算器で、バスライン1606、1607、1608のサイズは16ビットであるものとする。説明のためレジスタは2つのみ考える。またレジスタ1610はソース側、レジスタ1613はディスティネ−ション側として利用するものとする。レジスタ1610のサイズは16ビットで、HIGH側1609の8ビット と、LOW側1611の8ビットから構成されているものとする。また、演算結果のフラグ、例えば値がゼロであれば1、ゼロでなければ0となるゼロフラグや、桁上がりを示すキャリーフラグ等を格納するレジスタCCR(コンディション・コード・レジスタ)1615があり、ALU1605及び各種のバス(1606、1607、1608)に接続されているものとする。
【0055】
上記のマイクロコンピュータの構成は、簡略化したものであり、一般には、8ビットだけでなく、16ビット、32ビット、64ビットのCPUがあり、レジスタの本数やサイズも異なるものがある。また、RAMの特定領域をレジスタに割り当てているものもある。また簡単のため、ROMやEEPROM(FRAM)も示していないが、プログラムは通常このいずれかに保持され、このプログラム中の各命令が図示しないデコーダによってデコードされ、実行されることによってプログラムが実行される。本発明の趣旨は、このような構成の違いには無関係であるので、以下、図20のマイクロコンピュータの構成を前提に話を進める。
【0056】
ALU1605では、種々の二項演算が行なわれる。論理演算であるAND(論理積)、 OR(論理和)、 XOR(排他的論理和)や、算術演算である+(和)、−(差)、×(積)、÷(商)は、その代表的なものである。(算術演算は、論理演算回路から構成されている。そのため、ALUのような回路を「論理回路」と呼ぶことがある。) 2項演算は、通常、以下の二通りの方法で行なわれる。
【0057】
イミディエート方式: 定数とレジスタの値を演算するもの( ADD 01、 Rd等)
レジスタ直接方式: レジスタとレジスタの値を演算するもの( ADD Rs、 Rd等)
本発明は、後者の「レジスタ直接方式」に関するものである。
【0058】
本発明の趣旨を明瞭、かつ網羅的に説明するために、多桁の数同士の加法を例にとる。ADD.W をワードサイズ(16ビット)のキャリー付きの加法演算を表すニーモニックとする。例えば16*3ビットの数A、Bの加法は、通常、ADD.Wを3回繰り返し用いることによって行われる。この際、繰り上がりに伴いキャリーが発生する。
【0059】
図21は、16*3ビットの数Aと、同じく16*3ビットの数Bの和を計算する過程を表現したものである。Aは3つのワード(16ビットブロック)から構成される。これを下位から順にA[0]、 A[1]、 A[2]とする。同様に、BについてもB[0]、 B[1]、 B[2]とする。ADD.W命令によって、A[0]とB[0]の和を計算し、和をC[0]と、キャリー(1712)として出力する。キャリーは、CCR(コンディション・コード・レジスタ)と呼ばれるレジスタに格納される。) 次にビットブロックA[1]、 B[1]の和および先の計算におけるキャリー(1712)の和をADD.Wによって計算し、この和をC[1]と、キャリー(1716)として求める。次にビットブロックA[2]、 B[2]の和および先の計算におけるキャリー(1716)の和をADD.Wによって計算し、この和をC[2]と、キャリー(1718)として求める。これを「キャリー(1718)C[2]C[1]C[0]」の順に上位から並べたものが、AとBの和Cとなる。
【0060】
この計算を本発明の方法を用いて実装する方法を述べる。上記の説明にあるように、ワードサイズを超えるサイズの数A、Bの和を計算するには、A及びBをワード単位に分割して演算ADD.Wをワードサイズのブロック数と同じ回数だけ繰り返し、その際、各ブロック部の計算で生じたキャリーを順次繰り上げて処理することによって目的の和を求めることができる。原理的にはいくらでも大きな桁の数の和が計算できる。
【0061】
以下、A = (A[n-1]A[n-2]...A[1]A[0])、 B = (B[n-1]B[n-2]...B[1]B[0])(各A[j]、 B[j]は、16ビットブロック)のように表示する。図22は、このA、Bの和を計算する手順を示したものである。まず、A、Bを受信する(ステップ1801)。ここで受信と言っているのは、I/Oポートから信号を受信するという意味の他、計算途中で、A、Bが確定したということをも意味するものとする。次にカウンタjを0に初期化する(ステツプ1802)。条件分岐処理(ステップ1803)は、カウンタがnであるかどうかを判定するものであり、j = nのときは、全てのビットブロックの処理が終了したことを意味しているので終了し、そうでないときはステップ1804に進む。ステップ1804においては、1ビットの乱数vを発生する。乱数発生後、ステップ1805の条件分岐処理にてvが0であるか1であるか判定し、0であればA[j]をソースレジスタRsに転送し(ステップ1806)、その後、B[j]をディスティネ−ションレジスタRdに転送する(ステップ1807)。その後、ADD.W Rs、 Rdを実行する(ステップ1810)。ステップ1810においては、Rsの値とRdの値の和を計算し、その値をRdに転送する(ステップ1811)。繰り上がりがあれば、キャリーとして保持し、次回のADD.W処理の際に1を加える処理を行なう。この部分は、ADD.Wという命令が処理するものであるので、処理のフローには書かれていないが、通常、アセンブラ言語のプログラマが、キャリの処理を行なうことはあまりない。次に、Rdの内容をRAMのCの所定位置C[j]に格納する(ステップ1811)。次にjをインクリメントして(ステツプ1812)、再びステップ1803の条件分岐処理に戻る。逆にvが1であれば、B[j]をディスティネ−ションレジスタRdに転送し(ステップ1808)、その後、A[j]をソースレジスタRsに転送する(ステップ1809)。その後、ADD.W Rs、 Rdを実行する(ステップ1810)。ステップ1810においては、Rsの値とRdの値の和を計算し、その値をRdに転送する。繰り上がりがあればキャリーとして保持し、次回のADD.W処理の際に1を加える処理を行なう。次に、Rdの内容をRAMのCの所定位置C[j]に格納する(ステップ1811)。次にjをインクリメントして(ステップ1812)、再びステップ1803の条件分岐処理に戻る。
【0062】
この処理においては、乱数vを発生させ、その値によって、A[j]をRsに転送してからB[j]をRdに転送するか、その逆にB[j]をRdに転送してからA[j]をRsに転送するかを切り換えている。この切り換えによってICチップの消費電力の波形が変化し、特に波形を平均化してノイズを除去する処理(通常のオシロスコープでは、この方法でノイズを除去する)を行なってデータの違いを読み取ろうとすると、波形がAとBの平均としてしか観測されず、A、B個別の内容が推定できなくなる。個別に例を示すことはしないが、本実施例を16ビットブロック単独の和に制限することは容易なことである。また本実施例では乱数vを用いて条件分岐処理をスイッチしているが、これを線形合同法等を用いた疑似乱数や、カオス数列や、あらかじめ定められたビット列に変えることは容易なことであり、本発明の本質とは無関係であることはいうまでもない。
【0063】
本実施例が和ではなく、積の場合にどうなるかを示す。積の場合も本質は全く同様である。ここでは、MULTIという命令を想定する。MULTI RsL、 RdLは、RsのLOW側の8ビットと、RdのLOW側の8ビットとを乗じて、Rd(16ビット)に積を格納するものとする。MULTIを用いて、16ビットの数A、 Bの積を計算する処理を図23に示す。ここでは、A = (A[1]A[0])、 B = (B[1]B[0])、A*B=Cを(C[3]C[2]C[1]C[0]) (ここで、A[j]、 B[j]、 C[j]は8ビットのブロック)と表示する。まずA[0]とB[0]の積を積演算MULTIにて計算する。積は最大で16ビットの数になる。この値は、Rdに格納されている。これを上位からT[0][1]、T[0][0]とする。T[0][0]は、そのままC[0]とする。次に、A[1]と、B[0]の積を計算し上位からT[1][1]、T[1][0]とする。次に、B[1]とA[0]の積を計算し、上位からT[2][1]、T[2][0]とする。T[0][1]と、T[1][0]と、T[2][0]の和をADD.B(8ビットのキャリー付和演算)を二回用いて計算し、キャリーとC[1]を得る。T[1][1]と、T[2][1]と、T[3][0]の和をADD.B(8ビットのキャリー付和演算)を二回用いて計算し、キャリーとC[2]を得る。このキャリーとT[3][1]をADD.Bで加えてC[3]を得る。最後ではキャリーは生じない。
【0064】
ここでは、A = (A[n-1]A[n-2]...A[1]A[0])、 B = (B[n-1]B[n-2]...B[1]B[0])(各A[j]、 B[j]は、8ビットブロック)のように表示する。また、RAM上に一時記憶領域TMP1、TMP2という8*nビットの互いに重複のない領域があるものとする。多ビットの和の処理部は、図21の説明に任せ、以下では特に説明しないものとする。
【0065】
図24及び図25は、A、Bの積を計算する手順を示したものである。まず、A、Bを受信する(ステップ2001)。ここで受信と言っているのは、I/Oポートから信号を受信するという意味の他、計算途中でA、Bが確定したということをも意味するものとする。次にカウンタi及びjを0に初期化する(ステップ2002)。条件分岐処理(ステップ2003)は、カウンタjがnであるかどうかを判定するものであり、j = nのときは、全てのビットブロックの処理が終了したことを意味しているので終了し、そうでないときは、ステップ2004に進む。ステップ2004においては、1ビットの乱数vを発生する。乱数発生後、条件分岐処理(ステップ2005)にて、vが0であるか1であるか判定し、0であればA[i]をソースレジスタRsLに転送し(ステップ2006)、その後、B[j]をディスティネ−ションレジスタRdLに転送する(ステップ2007)。その後、MULTI RsL、 Rdを実行し(ステップ2010)、部分積の値が格納されているディスティネ−ションレジスタRdの値をRAM上の一次記憶領域TMP1に転送する(ステップ2011)。次にカウンタiを1だけインクリメントし(ステップ2012)、条件分岐処理(ステップ2013)に進む。条件分岐処理(ステップ2013)は、カウンタiがnであるかどうか判定し、i = nであれば、jを1だけインクリメントし、iを0に初期化して(ステップ2025)、条件分岐処理(ステップ2003)に戻り、先に述べた操作を行なう。条件分岐処理(ステップ2013)においてiがnでなければ、1ビットの乱数vを発生し(ステップ2015)、v = 0であれば、A[i]をRsLに転送(ステップ2016)した後、B[j]をRdLに転送する(ステップ2017)。逆にv = 1の場合は、B[j]をRdLに転送(ステップ2018)した後、A[i]をRsLに転送する(ステップ2019)。ステップ2017かステップ2019のいずれかの処理が終了した後、MULTI RsL、 Rdを実行し(ステップ2020)、RdをTMP2に転送し(ステップ2021)、TMP2の値を左に8ビットシフトし(ステップ2022)、TMP1とTMP2の和(この操作に関しては、図21の説明参照)を計算してTMP1に転送し(ステップ2023)、iを1インクリメントして(ステップ2024)、条件分岐処理(ステップ2013)に戻る。
【0066】
この処理においては、乱数vを発生させ、その値によってA[j]をRsに転送してからB[j]をRdに転送するか、その逆にB[j]をRdに転送してからA[j]をRsに転送するかを切り換えている。この切り換えによってICチップの消費電力の波形が変化し、特に波形を平均化してノイズを除去する処理(通常のオシロスコープでは、この方法でノイズを除去する)を行なってデータの違いを読み取ろうとすると、波形がAとBの平均としてしか観測されず、A、B個別の内容が推定できなくなる。個別に例を示すことはしないが、本実施例を8ビットブロック単独の和に制限することは容易なことである。また本実施例では乱数vを用いて条件分岐処理をスイッチしているが、これを線形合同法等を用いた疑似乱数や、カオス数列や、あらかじめ定められたビット列に変えることは容易なことであり、本発明の本質とは無関係であることはいうまでもない。
上記の実施例は、AをソースレジスタRsに、Bをディスティネ−ションレジスタRdに転送する順序を変えるものであった。この類似として、AをソースレジスタRsに転送して後、Bをディスティネ−ションレジスタRdに転送するか、Aをディスティネ−ションレジスタRdに転送して後、BをソースレジスタRsに転送するかをランダムにスイッチすることが考えられる。この実施例を和の場合に限って示す。上記の実施例に僅かな変更を加えるに過ぎないので、積の場合等、容易に類推できるものについては省略する。ここでは、以下、A = (A[n-1]A[n-2]...A[1]A[0])、 B = (B[n-1]B[n-2]...B[1]B[0])(各A[j]、 B[j]は、16ビットブロック)のように表示する。 図26は、このA、Bの和を計算する手順を示したものである。まず、A、Bを受信する(ステップ2101)。ここで、受信と言っているのは、I/Oポートから信号を受信するという意味の他、計算途中で、A、Bが確定したということをも意味するものとする。次に、カウンタjを0に初期化する(ステップ2102)。条件分岐処理(ステップ2103)は、カウンタがnであるかどうかを判定するものであり、j = nのときは、全てのビットブロックの処理が終了したことを意味しているので終了し、そうでないときは、ステップ2104に進む。ステップ2104においては、1ビットの乱数vを発生する。乱数発生後、条件分岐処理(ステップ2105)にて、vが0であるか1であるか判定し、0であればA[j]をソースレジスタRsに転送し(ステップ2106)、その後、B[j]をディスティネ−ションレジスタRdに転送する(ステップ2107)。その後、ADD.W Rs、 Rdを実行する(ステップ2110)。ステップ2110においては、Rsの値とRdの値の和を計算し、その値をRdに転送する。繰り上がりがあれば、キャリーとして保持し、次回のADD.W処理の際に1を加える処理を行なう。この部分は、ADD.Wという命令が処理するものであるので、処理のフローには書かれていないが、通常、アセンブラ言語のプログラマが、キャリの処理を行なうことはあまりない。次に、Rdの内容をRAMのCの所定位置C[j]に格納する(ステップ2111)。次にjをインクリメントして(ステップ2112)、再び条件分岐処理(ステップ2103)に戻る。逆にvが1であれば、A[j]をディスティネ−ションレジスタRdに転送し(ステップ2108)、その後、B[j]をソースレジスタRsに転送する(ステップ2109)。その後、ADD.W Rs、 Rdを実行する(ステップ2110)。ステップ2110においては、Rsの値とRdの値の和を計算し、その値をRdに転送する。繰り上がりがあれば、キャリーとして保持し、次回のADD.W処理の際に1を加える処理を行なう。次に、Rdの内容をRAMのCの所定位置C[j]に格納する(ステップ2111)。次にjをインクリメントして(ステップ2112)、再び条件分岐処理(ステップ2103)に戻る。乱数による処理の切り換えによってICチップの消費電力の波形が変化し、アタッカーは撹乱される。但し、この方式では、転送レジスタを切り換えているだけなので、図22に示す実施例のように、データの平均化の効果は期待できない。マイクロコンピュータによっては、RsとRdに転送する際の消費電流に大きな違いがある場合があるが、そのような場合には、本実施例の処理が有効であると考えることができる。個別に例を示すことはしないが、本実施例を、16ビットブロック単独の和に制限することは容易なことである。また、本実施例では、乱数vを用いて条件分岐処理をスイッチしているが、これを、線形合同法等を用いた疑似乱数や、カオス数列や、あらかじめ定められたビット列に変えることは容易なことであり、本発明の本質とは無関係であることはいうまでもない。
【0067】
また、本実施例と図22に示す実施例を混合して用いるなどすれば、高い撹乱効果が期待できる。
【0068】
次にさらに他の実施例について説明する。上記の実施例では、ビットブロックに区切って(例えば、8ビットや16ビットに区切って)和や積のような算術演算を計算する場合に繰り上がり(キャリー。引き算の場合はボロー)が生ずるので、各ブロック毎に独立に演算を実行することができない。一方、排他的論理和EXOR、論理積AND、論理和OR等の論理演算は、ビット毎の処理を行なうものであり、繰り上がり等の他のビットブロックの処理に影響するような処理が生ずることはない。このような場合には、上記実施例よりも大きな撹乱処理を行うことができる。
【0069】
図27は、このような実施例を特にA = (A[n-1]A[n-2]...A[1]A[0])、 B = (B[n-1]B[n-2]...B[1]B[0])(A[j]、 B[j]は8ビットブロック)に対し、A EXOR Bを計算する場合に適用したものである。ANDや、ORにした場合も、同様であるので、省略する。(参考までに、論理演算EXOR、 AND、 ORの演算表を、図28、29、30に示しておく。) ここでは、A EXOR Bの演算結果をC = (C[n-1]C[n-2]...C[1]C[0])のように表示する。 また、図27において、PERM[v]は、確率変数vに従って決まる置換で、PERM[v][j] は、その第j成分(j=0,1,...n-1)であるものとする。具体的には、例えば、n = 3の場合なら、PERM[v]は、6通りの置換、
PERM[0] (0 1 2) → (0 1 2)
PERM[1] (0 1 2) → (0 2 1)
PERM[2] (0 1 2) → (1 0 2)
PERM[3] (0 1 2) → (1 2 0)
PERM[4] (0 1 2) → (2 0 1)
PERM[5] (0 1 2) → (2 1 0)
のどれかである。表示法を確認するために、例を挙げると、例えば、PERM[3][1] = 2(PERM[3]の第1成分)、 PERM[5][2] = 0(PERM[5]の第2成分)である。この置換は、RAMに配置する。
【0070】
本実施例においては、確率変数vは、0から n! -1(n! = n*(n-1)*...*2*1)を値に取る一様分布に従うものとする。
【0071】
以上を前提に図27の説明に入る。まず、演算に用いるA、 Bを受信する(ステップ2501)。次にカウンタjを0に設定し(ステップ2502)、乱数vを発生する(vは上記のものである)(ステップ2503)。次に条件分岐処理(ステップ2504)に入る。条件分岐処理(ステップ2504)では、カウンタjがnであるかどうか判定し、j = nであれば、全てのビットブロックを処理したことになるので、演算処理を終了する。もし、jがnでなければ、k = PERM[v][j]とし(ステップ2505)、A[k]をRsLに転送し(ステップ2506)、B[k]をRdLに転送し(ステップ2507)、排他的論理和EXOR RsL RdLを実行する(ステップ2508)。この答が格納されているRdLの値をC[k]に転送し(ステップ2509)、カウンタを1インクリメントし(ステップ2510)、再び条件分岐処理(ステップ2504)に戻る。個別に例を示すことはしないが、本実施例を、AND、OR等、他の論理演算に置き換えることは容易である。実際、図27のステップ2508の演算をAND RsL、 RdLやOR RsL、 RdLとすることで目的は達せられる。また、本実施例では、乱数vを用いて条件分岐処理をスイッチしているが、これを、線形合同法等を用いた疑似乱数や、カオス数列や、あらかじめ定められたビット列に変えることは容易なことであり、本発明の本質とは無関係であることはいうまでもない。
【0072】
また、本実施例において、図22や図26の実施例を、ステップ2506の処理とステップ2507の処理の順序の変更に利用することは、本発明を単独に用いることよりも、高い効果の期待できるものである。
【0073】
【発明の効果】
本発明によれば、ICカードチップなどの情報処理装置において、CRT(中国人剰余定理)を用いたべき乗剰余計算を実行する際に、CRTのために算術的関係を持って分割された指数に対するべき乗剰余処理の途中計算を本来の順序とは別の順序で処理することにより、消費電流の波形から処理や暗号鍵の推測を行うことが困難になる。また、和や積を計算する際の処理順序が本来の順序とは別の順序で処理することにより、消費電流の波形から処理や暗号鍵の推測を行なうことが困難になる。
【図面の簡単な説明】
【図1】ICカードの概観及び端子を示す図である。
【図2】 マイクロコンピュータの構成図である。
【図3】 消費電流の波形を示す図である。
【図4】 CRT(中国人剰余定理)を用いたべき乗剰余計算の手順を示す図である。
【図5】 2ビットアディション・チェイン方式によるべき乗剰余計算アルゴリズムを示す図である。
【図6】 2ビットアディション・チェイン方式によるべき乗剰余計算に関する実施例を示す図である。
【図7】2ビットアディション・チェイン方式によるべき乗剰余計算に関する実施例を示す図(続き)である。
【図8】実施例の 2ビット毎の乗算剰余処理ルーチン(モンゴメリ法)を示す図である。
【図9】2ビットスライディング・ウインドウ方式によるべき乗剰余計算に関する実施例を示す図である。
【図10】2ビットスライディング・ウインドウ方式によるべき乗剰余計算に関する実施例を示す図(続き)である。
【図11】実施例のスライディングウインドウ方式による乗算剰余処理ルーチン(モンゴメリ法)を示す図である。
【図12】「xの一部のビット列」の例(1)を示す図である。
【図13】「xの一部のビット列」の例(2)を示す図である。
【図14】「xの一部のビット列」の例(3)を示す図である。
【図15】「xの一部のビット列」の例(4)を示す図である。
【図16】 xp、 xqについて一部のビット列の例を示す図である。
【図17】実施例の一部のビット列について本発明を適用する処理手順を示す図である。
【図18】実施例の一部のビット列について本発明を適用する処理手順を示す図(続き)である。
【図19】実施例の一部のビット列について本発明を適用する処理手順を示す図(続き)である。
【図20】マイクロコンピュータの中央演算装置及びRAMの構成例を示す図である。
【図21】ビットブロックに分割された二数A、Bの和の計算法の例を示す図である。
【図22】実施例の和演算の処理手順を示す図である。
【図23】ビットブロックに分割された二数A、Bの積の計算法の例を示す図である。
【図24】実施例の積演算の処理手順を示す図である。
【図25】実施例の積演算の処理手順を示す図(続き)である。
【図26】他の実施例の和演算の処理手順を示す図である。
【図27】他の実施例の排他的論理和の処理手順を示す図である。
【図28】排他的論理和EXORの演算表を示す図である。
【図29】論理積ANDの演算表を示す図である。
【図30】論理和ORの演算表を示す図である。
【符号の説明】
606:ステップ(乱数生成)、607:ステップ(乱数値による処理選択)、608:ステップ(Cpの計算)、609:ステップ(Cqの計算)、1804,2004,2014,2104,2503:ステップ(乱数生成)、1805,2005,2015,2105:ステップ(乱数値による処理選択)
Claims (7)
- RSA暗号の暗号データを受信するための入出力ポートと、該RSA暗号の復号化処理のためのプログラムおよび前記暗号データが記憶される記憶装置と、前記復号化処理に必要な演算を実行するCPUとを備えた情報処理装置により実行される耐タンパー暗号処理方法において、
前記CPUは、
(1)前記RSAの公開鍵e,モジュラスN(モジュラスNは2つの素数p,qの積)に対応する秘密鍵指数xを前記記憶装置に格納し、
(2)前記入出力ポートを介して前記暗号データyを受信し、
(3)前記pまたはその倍数を法とする前記暗号データyの剰余yp、および前記qまたはその倍数を法とする前記暗号データyの剰余yqを計算し、
(4)p−1またはその倍数を法とするxの剰余をxp、q−1またはその倍数を法とするxの剰余をxqとするときに、前記pまたはその倍数を法とするyp^xpの剰余であるCpおよび前記qまたはその倍数を法とするyq^xqの剰余であるCqを計算するに際して、
(4a)下記(4b)と(4c)のいずれの処理を行うかを、xp、xqを構成する少なくとも1ビットのビット列であるビットブロックの処理ごとに、生成した乱数の値に基づき決定し、
(4b)xpの処理すべき前記ビットブロックについて前記Cpを計算し、その計算結果を前記記憶装置に格納し、
(4c)xqの処理すべき前記ビットブロックについて前記Cqを計算し、その計算結果を前記記憶装置に格納し、
(5)前記xp全体についてのCpの計算及び前記xq全体についてのCqの計算を終了したとき、CpとCqの差分に基づいてRSA復号化計算y^xmod Nを計算し、
(6)計算した前記RSA復号化計算の結果を出力する
ことにより前記復号化処理を実行することを特徴とする耐タンパー暗号処理方法。 - 前記yp,yq,xp,xqについて、yp=ymod p,yq=ymod q,xp=xmod(p−1),xq=xmod(q−1)として計算することを特徴とする請求項1記載の耐タンパー暗号処理方法。
- 前記(4a)の処理を前記xp,xqのビットパターンの一部に適用し、前記ビットパターンの残りの部分については、前記(4b)と(4c)のいずれか一方を行なった後に他方を実行することを特徴とする請求項1記載の耐タンパー暗号処理方法。
- RSA暗号の暗号データを受信するための入出力ポートと、該RSA暗号の復号化処理のためのプログラムおよび前記暗号データが記憶される記憶装置と、ソースレジスタR1、ディスティネーションレジスタR2および演算器を有し、前記復号化処理に必要な演算を実行するCPUとを備えた情報処理装置を用いて実行される耐タンパー暗号処理方法において、
当該耐タンパー暗号処理方法は、前記暗号データに対して秘密鍵と公開鍵とを用いたべき乗剰余演算を二項演算を繰り返すことにより実行して復号化を行う暗号処理方法であって、
(1)前記CPUが前記二項演算の対象データAおよび対象データBを所定のビットブロック単位に分割するステップと、
(2)前記二項演算を実行する際に、下記(3)と(4)のいずれのステップを他方のステップより先に実行するかを、生成した乱数の値に基づき、前記ビットブロック単位の処理をするごとに前記CPUが決定するステップと、
(3)前記二項演算の対象となるビットブロックを前記対象データAから選択して前記ソ ースレジスタR1に転送するステップと、
(4)前記二項演算の対象となるビットブロックを前記対象データBから選択して前記ディスティネーションレジスタR2に転送するステップと、
(5)前記CPUが前記ソースレジスタR1の内容と前記ディスティネーションレジスタR2の内容について所定の演算を行うステップと、
(6)前記CPUが前記演算の結果を前記記憶装置に格納するステップとを備え、
前記CPUが前記(1)から(6)までのステップを繰り返すことにより前記二項演算を実行することを特徴とする耐タンパー暗号処理方法。 - 請求項4記載の耐タンパー暗号処理方法において、
前記二項演算が、算術和「+」をとる演算を含むことを特徴とする耐タンパー暗号処理方法。 - 請求項4記載の耐タンパー暗号処理方法において、
前記二項演算が、算術積「×」をとる演算を含むことを特徴とする耐タンパー暗号処理方法。 - 請求項4記載の耐タンパー暗号処理方法において、
前記二項演算が、論理和OR、論理積AND、排他的論理和EXORのうちのいずれか1つを含むことを特徴とする耐タンパー暗号処理方法。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001061544A JP4199937B2 (ja) | 2001-03-06 | 2001-03-06 | 耐タンパー暗号処理方法 |
DE60138995T DE60138995D1 (de) | 2001-03-06 | 2001-08-27 | Betrugssicheres Verarbeitungsverfahren |
EP01119739A EP1239365B1 (en) | 2001-03-06 | 2001-08-27 | Tamper-resistant processing method |
US09/940,985 US7254718B2 (en) | 2001-03-06 | 2001-08-29 | Tamper-resistant processing method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001061544A JP4199937B2 (ja) | 2001-03-06 | 2001-03-06 | 耐タンパー暗号処理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2002261753A JP2002261753A (ja) | 2002-09-13 |
JP4199937B2 true JP4199937B2 (ja) | 2008-12-24 |
Family
ID=18920823
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001061544A Expired - Fee Related JP4199937B2 (ja) | 2001-03-06 | 2001-03-06 | 耐タンパー暗号処理方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US7254718B2 (ja) |
EP (1) | EP1239365B1 (ja) |
JP (1) | JP4199937B2 (ja) |
DE (1) | DE60138995D1 (ja) |
Families Citing this family (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR2838210B1 (fr) * | 2002-04-03 | 2005-11-04 | Gemplus Card Int | Procede cryptographique protege contre les attaques de type a canal cache |
DE10304451B3 (de) | 2003-02-04 | 2004-09-02 | Infineon Technologies Ag | Modulare Exponentiation mit randomisiertem Exponenten |
KR100720726B1 (ko) * | 2003-10-09 | 2007-05-22 | 삼성전자주식회사 | Rsa 알고리즘을 이용한 보안유지시스템 및 그 방법 |
KR20060081847A (ko) * | 2005-01-10 | 2006-07-13 | 삼성전자주식회사 | 비밀키를 보호하는 스마트 카드 및 그것의 방법 |
US7743977B2 (en) * | 2005-02-28 | 2010-06-29 | Broadcom Corporation | Method and system for random data access for security applications |
US20080271001A1 (en) * | 2006-09-11 | 2008-10-30 | Yo Nonomura | Method of generating program, information processing device and microcomputer |
FR2917197B1 (fr) * | 2007-06-07 | 2009-11-06 | Thales Sa | Procede de masquage du resultat d'une operation de multiplication modulaire et dispositif associe. |
JP5365624B2 (ja) | 2008-03-31 | 2013-12-11 | 富士通株式会社 | 電力解析攻撃への対策機能を備えた復号装置、プログラム、及び復装置を組み込んだ組込機器装置 |
DE102008026099A1 (de) * | 2008-05-30 | 2009-12-03 | Giesecke & Devrient Gmbh | Sichere Sliding Window Exponentiation |
JP5407352B2 (ja) * | 2009-01-19 | 2014-02-05 | 富士通株式会社 | 復号処理装置、復号処理プログラム、復号処理方法 |
EP2234031A1 (en) * | 2009-03-24 | 2010-09-29 | SafeNet, Inc. | Obfuscation |
GB2479871A (en) * | 2010-04-26 | 2011-11-02 | David Coyne | System for preventing side channel attacks on a synchronous logic device. |
WO2012090289A1 (ja) * | 2010-12-27 | 2012-07-05 | 富士通株式会社 | 暗号処理装置および方法 |
WO2012161763A1 (en) * | 2011-02-15 | 2012-11-29 | Lewis James M | Method and system for identifying counterfeit programmable devices |
CN103780381B (zh) * | 2012-12-17 | 2017-06-27 | 深圳市证通电子股份有限公司 | 基于高基脉动阵列的蒙哥马利算法的实现装置及方法 |
EP3032416A1 (en) * | 2014-12-10 | 2016-06-15 | Gemalto SA | Method to execute a sensitive computation using multiple different and independent branches |
CN108242994B (zh) | 2016-12-26 | 2021-08-13 | 阿里巴巴集团控股有限公司 | 密钥的处理方法和装置 |
US11580234B2 (en) | 2019-06-29 | 2023-02-14 | Intel Corporation | Implicit integrity for cryptographic computing |
US11403234B2 (en) | 2019-06-29 | 2022-08-02 | Intel Corporation | Cryptographic computing using encrypted base addresses and used in multi-tenant environments |
US20200145187A1 (en) * | 2019-12-20 | 2020-05-07 | Intel Corporation | Bit-length parameterizable cipher |
US11575504B2 (en) | 2019-06-29 | 2023-02-07 | Intel Corporation | Cryptographic computing engine for memory load and store units of a microarchitecture pipeline |
US11669625B2 (en) | 2020-12-26 | 2023-06-06 | Intel Corporation | Data type based cryptographic computing |
US11580035B2 (en) | 2020-12-26 | 2023-02-14 | Intel Corporation | Fine-grained stack protection using cryptographic computing |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
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 |
CA2267721C (en) | 1998-03-26 | 2002-07-30 | Nippon Telegraph And Telephone Corporation | Scheme for fast realization of encryption, decryption and authentication |
IL139935A (en) * | 1998-06-03 | 2005-06-19 | Cryptography Res Inc | Des and other cryptographic processes with leak minimization for smartcards and other cryptosystems |
EP1084543B1 (en) * | 1998-06-03 | 2008-01-23 | Cryptography Research Inc. | Using unpredictable informaion to minimize leakage from smartcards and other cryptosystems |
DE19837808A1 (de) * | 1998-08-20 | 2000-02-24 | Orga Kartensysteme Gmbh | Verfahren zur Ausführung eines Verschlüsselungsprogramms zur Verschlüsselung von Daten in einem mikroprozessorgestützten, tragbaren Datenträger |
DE19845073C2 (de) * | 1998-09-30 | 2001-08-30 | Infineon Technologies Ag | Verfahren zur Absicherung der DES-Verschlüsselung gegen Ausspähung der Schlüssel durch Analyse der Stromaufnahme des Prozessors |
US6594760B1 (en) * | 1998-12-21 | 2003-07-15 | Pitney Bowes Inc. | System and method for suppressing conducted emissions by a cryptographic device |
GB2345229B (en) * | 1998-12-23 | 2003-12-03 | Motorola Ltd | Method for encrypting data |
CA2258338C (en) * | 1999-01-11 | 2009-02-24 | Certicom Corp. | Method and apparatus for minimizing differential power attacks on processors |
US6308256B1 (en) * | 1999-08-18 | 2001-10-23 | Sun Microsystems, Inc. | Secure execution of program instructions provided by network interactions with processor |
US6438664B1 (en) * | 1999-10-27 | 2002-08-20 | Advanced Micro Devices, Inc. | Microcode patch device and method for patching microcode using match registers and patch routines |
FR2804524B1 (fr) * | 2000-01-31 | 2002-04-19 | Oberthur Card Systems Sas | Procede d'execution d'un protocole cryptographique entre deux entites electroniques |
-
2001
- 2001-03-06 JP JP2001061544A patent/JP4199937B2/ja not_active Expired - Fee Related
- 2001-08-27 DE DE60138995T patent/DE60138995D1/de not_active Expired - Lifetime
- 2001-08-27 EP EP01119739A patent/EP1239365B1/en not_active Expired - Lifetime
- 2001-08-29 US US09/940,985 patent/US7254718B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
EP1239365B1 (en) | 2009-06-17 |
EP1239365A3 (en) | 2006-03-15 |
US20020166057A1 (en) | 2002-11-07 |
JP2002261753A (ja) | 2002-09-13 |
DE60138995D1 (de) | 2009-07-30 |
EP1239365A2 (en) | 2002-09-11 |
US7254718B2 (en) | 2007-08-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4199937B2 (ja) | 耐タンパー暗号処理方法 | |
US6968354B2 (en) | Tamper-resistant modular multiplication method | |
EP1248409B1 (en) | Attack-resistant cryptographic method and apparatus | |
KR100693239B1 (ko) | 정보 처리 장치, ic 카드 | |
US6408075B1 (en) | Information processing equipment and IC card | |
US6666381B1 (en) | Information processing device, information processing method and smartcard | |
CN102638341B (zh) | 用于计算标量乘法的结果的设备和方法 | |
JP3904432B2 (ja) | 情報処理装置 | |
JP4317607B2 (ja) | 情報処理装置、耐タンパ処理装置 | |
US20150339102A1 (en) | Cryptography Method Comprising an Operation of Multiplication by a Scalar or an Exponentiation | |
JP5097138B2 (ja) | モンゴメリ乗算のための演算回路及び暗号回路 | |
US20020124179A1 (en) | Fault detection method | |
JP2004126841A (ja) | プログラム実装方法 | |
JP3904421B2 (ja) | 剰余乗算演算装置 | |
Ahn et al. | A random M-ary method based countermeasure against side channel attacks | |
JP3945497B2 (ja) | 情報処理装置、icカード | |
AU2005203004B2 (en) | Information processing device, information processing method and smartcard | |
JP4003723B2 (ja) | 情報処理装置、耐タンパ処理装置 | |
WO2004047052A1 (ja) | 耐タンパー情報処理装置 | |
JP2010271363A (ja) | モンゴメリ乗算回路、rsa暗号回路、及び、icカード |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20050311 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20080527 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080723 |
|
RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7422 Effective date: 20080723 |
|
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: 20080909 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20081006 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111010 Year of fee payment: 3 |
|
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: 20121010 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121010 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131010 Year of fee payment: 5 |
|
LAPS | Cancellation because of no payment of annual fees |