JP2004126841A - プログラム実装方法 - Google Patents
プログラム実装方法 Download PDFInfo
- Publication number
- JP2004126841A JP2004126841A JP2002288204A JP2002288204A JP2004126841A JP 2004126841 A JP2004126841 A JP 2004126841A JP 2002288204 A JP2002288204 A JP 2002288204A JP 2002288204 A JP2002288204 A JP 2002288204A JP 2004126841 A JP2004126841 A JP 2004126841A
- Authority
- JP
- Japan
- Prior art keywords
- pcd
- data
- program
- address
- pcs
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims description 29
- 238000012545 processing Methods 0.000 claims description 46
- 238000012546 transfer Methods 0.000 claims description 36
- 230000010365 information processing Effects 0.000 claims description 7
- 238000013500 data storage Methods 0.000 claims 3
- 238000004364 calculation method Methods 0.000 description 7
- 238000004458 analytical method Methods 0.000 description 6
- 239000003990 capacitor Substances 0.000 description 3
- 238000013478 data encryption standard Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 230000000717 retained effect Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 230000007423 decrease Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000005259 measurement Methods 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000000295 complement effect Effects 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 230000001771 impaired effect Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000009979 protective mechanism Effects 0.000 description 1
Images
Classifications
-
- 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/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/71—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
- G06F21/75—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information by inhibiting the analysis of circuitry or operation
- G06F21/755—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information by inhibiting the analysis of circuitry or operation with measures against power attack
-
- 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/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/30156—Special purpose encoding of instructions, e.g. Gray coding
-
- 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/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
-
- 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/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/35—Indirect addressing
-
- 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]
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y04—INFORMATION OR COMMUNICATION TECHNOLOGIES HAVING AN IMPACT ON OTHER TECHNOLOGY AREAS
- Y04S—SYSTEMS INTEGRATING TECHNOLOGIES RELATED TO POWER NETWORK OPERATION, COMMUNICATION OR INFORMATION TECHNOLOGIES FOR IMPROVING THE ELECTRICAL POWER GENERATION, TRANSMISSION, DISTRIBUTION, MANAGEMENT OR USAGE, i.e. SMART GRIDS
- Y04S40/00—Systems for electrical power generation, transmission, distribution or end-user application management characterised by the use of communication or information technologies, or communication or information technology specific aspects supporting them
- Y04S40/20—Information technology specific aspects, e.g. CAD, simulation, modelling, system security
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Mathematical Physics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Storage Device Security (AREA)
Abstract
【解決手段】ICチップの内部で処理されるアドレス情報と、その消費電力の関連を、条件分岐の際のプログラムカウンタの変化が小さくなるように、プログラムとデータの間のハミング距離を小さくすることによって、減少させる。
【選択図】 図6
Description
【発明の属する技術分野】
本発明は,高いセキュリティを持つICカードなどの耐タンパー情報処理装置に関するものである。
【0002】
【従来の技術】
ヨーロッパで広く利用されているGSM(Global Systems for Mobile communications)規格のモバイルホンをはじめとするモバイル端末や、ICカード(smart card)などでは、利用者認証(user authentication)や、電子商取引(electric commerce)を行うことができる。一般に、電子マネー(electric money)として利用する場合、それはICカードの形態を取っており、GSMモバイルホン(GSM mobile radiotelephone system)の場合は、SIM(Subscriber Identification Module)とよばれる形態を取っている。SIMもICカードも端子付きの半導体チップをプラスティックの板に張り付けたものであり、いずれもデバイスの実体は同じく半導体チップであるので、以下ICカードについて説明する。
【0003】
ICカードは、勝手に書き換えることが許されないような個人情報の保持や、データの暗号化や復号化を行う装置である。ICカード自体は電源を持っておらず,ICカード用のリーダライタ(card reader)に差し込まれると,電源の供給を受け,動作可能となる。動作可能になると,リーダライタから送信されるコマンドを受信し,そのコマンドに従って,データの転送等の処理を行う。ICカードの一般的な解説は,オーム社出版電子情報通信学会編水沢順一著「ICカード」などにある。
【0004】
ICカードの構成は,図1に示すように,カード101の上に,ICカード用チップ102を搭載したものである。図に示すように、一般にICカードは,ISO7816の規格に定められた位置に供給電圧端子Vcc, グランド端子GND,リセット端子RST, 入出力端子I/O, クロック端子CLKを持ち,これらの端子を通して,電源の供給を受け、通信を行う(W.Rankl and Effing : SMARTCARD HANDBOOK, John Wiley & Sons, 1997, p.41参照)。
【0005】
ICカード用チップの構成は,基本的には通常のマイクロコンピュータと同じ構成である。その構成は,図2に示すように,中央処理装置(CPU)201,記憶装置204,入出力(I/O)ポート207,コ・プロセッサ202からなる(コ・プロセッサはない場合もある)。CPU(201)は,論理演算や算術演算などを行う装置であり,記憶装置204は,プログラムやデータを格納する装置である。入出力ポートは,リーダライタと通信を行う装置である。コ・プロセッサは,暗号処理そのもの、または、暗号処理に必要な演算を高速に行う装置である。例えば、RSA暗号の剰余演算を行う為の特別な演算装置や、DES暗号の処理を行う暗号装置などがある。ICカード用プロセッサの中には,コ・プロセッサを持たないものも多くある。データバス203は,各装置を接続するバスである。
【0006】
記憶装置204は,ROM(Read Only Memory)やRAM(Random Access Memory),EEPROM(Electrical Erasable Programmable Read Only Memory)などからなる。ROMは,変更できないメモリであり,主にプログラムを格納するメモリである。RAMは自由に書き換えができるメモリであるが,電源の供給が中断されると,記憶している内容は消滅する。ICカードがリーダライタから抜かれると電源の供給が中断されるため,RAMの内容は,保持されなくなる。EEPROMは,電源の供給が中断されてもその内容を保持することができるメモリである。書き換える必要があり,ICカードがリーダライタから抜かれても,保持するデータを格納するために使われる。例えば,プリペイドカードの残高などは,使用するたびに書き換えられ,かつリーダライタが抜かれてもデータを保持する必要があるため,EEPROMで保持される。
【0007】
ICカードは,プログラムや重要な情報がICカード用チップの中に密閉されているため,重要な情報を格納したり,カードの中で暗号処理を行うために用いられる。従来、ICカードでの暗号を解読する難しさは,暗号アルゴリズムの解読の難しさと同じであると考えられていた。
【0008】
しかし,ICカードが暗号処理を行っている時の消費電力を観測し,これを解析することにより,暗号アルゴリズムを直接的に解読するよりも容易に暗号処理の内容や暗号鍵が推定される可能性がある。消費電力は,オシロスコープを用いて、ICカードのVcc端子とグランド端子の間の電圧変化を測定することによって調べることができる。John Wiley & Sons社 W.Rankl & W.Effing著 「Smart Card Handbook」の8.5.1.1 Passive protective mechanisms(p.263)にこのような危険性が記載されている。
【0009】
ICカード用チップを構成しているCMOS(相補的MOS)トランジスタは,出力状態が1から0あるいは0から1に変わった時に電力を消費する。例えば、CMOSインバータは、PMOSとNMOS及びコンデンサを図4のように接続したものである。402がPMOS,403がNMOS、405がコンデンサである。CMOSインバータは、401から印加された電圧がHigh(=1)のときに406にLow(=0)を返し、印加電圧がLowのときに406にHighを返すものである。この際、ドライブ電圧Vdd(404)が402,403の導通、非導通に応じて、コンデンサ405に対する充電、放電がなされ、これに伴う電力消費が発生する。このときに発生する消費電力の時間変化は、図5の501のような波形となる。ICカードの端子を通して観測されるのは、図5のような消費電力波形が、時間遅れを伴って重ね合わされたものである。
【0010】
特に,データバス203においては、バスドライバーの消費電力や,配線及び、配線に接続されているトランジスタの静電容量のため,バスの値が1から0あるいは0から1に変わるときに電力を消費する。そのため,消費電力を観測すれば,ICカード用チップの中で,何が動作しているかが分かる可能性がある。
【0011】
図3は,ICカード用チップの1サイクルでの消費電力の波形を示したものである。処理しているデータに依存して,消費電力波形が301や302のように異なる。このような差は,バス203を流れるデータや中央演算装置201で処理しているデータに依存して生じる。
【0012】
コ・プロセッサ202は,CPUと並列に,例えば,512ビットの剰余演算を行うことができる。そのため,CPUの消費電力とは異なった消費電力波形の長時間の観測が可能である。その特徴的な波形を観測することにより,コ・プロセッサの動作回数を容易に測定することができる。コ・プロセッサの動作回数が暗号鍵と何らかの関係があるならば,コ・プロセッサの動作回数から暗号鍵を推定できる可能性がある。
【0013】
また,コ・プロセッサでの演算内容に,暗号鍵に依存した偏りがあると,その偏りが消費電力から求められ,暗号鍵が推定される可能性がある。CPUでも同様の事情が存在する。
【0014】
消費電力がデータに依存する典型的な例は、アドレスバスで消費される電力である。アドレスバスは、常に動作していなければならないので、その制御は、スタティック方式である。スタティック方式では、データを毎回クリアすることなく、直前の値と現在の値との変化分の電力が消費される。従って、例えば、アドレス(プログラムカウンタ)が、2ビット毎に、
800C → 800E → 8010 → 8012 → 8014 → 8016 → 8018
と変化したとすると、それぞれ
800C → 800Eの変化ビット数=1
800E → 8010の変化ビット数=4
8010 → 8012の変化ビット数=1
8012 → 8014の変化ビット数=2
8014 → 8016の変化ビット数=1
8016 → 8018の変化ビット数=3
にほぼ比例した電力が消費される。ここで、アドレスの値は16進数で表記した(以下、特に断らない限り、アドレスは16進数で表記するものとする)。
【0015】
この性質を利用すると、ICチップを開封することなく、消費電力の変化を調べることによって、内部情報を不正に取り出すことができる。このような方法は、電力解析(Power Analysis)と呼ばれている。
【0016】
以下、典型的な例として、アドレスの変化を調べることによりRSA暗号の秘密指数(secret exponent)を取り出す方法を述べる。電力解析による内部秘密情報を取り出す方法は既に多くの文献に見られるが、ここでは、電力解析の有効性を最初に指摘した論文:
Paul Kocher, Joshua Jaffe, and Benjamin Jun, Differential Power Analysis: Leaking Secrets. Advances in Cryptology Proceedings of Crypto’99, Springer−Verlag, Lecture Notes in Computer Science 1666, pp. 388−397.(同様の内容を持つものがURL:
http://www.cryptography.com/dpa/technical/index.html
にある。)の内容の一部を敷延して説明する。上記の文献は、電流解析の原理を示したものであり、以下に示す解析手法を直接扱ってはいない。
【0017】
まず、説明のために、簡単にRSA暗号、アディション・チェイン方式、マイクロコンピュータの動作とプログラムカウンタについて説明する。
(RSA暗号)
RSA暗号では、非常に大きな素数、例えば512ビットの2つの素数P,Qの積 N = PQ と Nと互いに素な数 Eをとり、このNとEをこれを公開鍵として公開鍵簿に登録する。このとき、この公開鍵の持ち主Aに送信者Bは、1以上N−1以下の数で表現されたデータ(平文) R を、
Y = R^E mod N
として暗号化して送信する。ここで、Y^EはYのE乗を表す記号とする。この暗号文 R を受け取ったAは、XE mod (P−1)(Q−1) = 1となる秘密鍵 X を用いて
Y^X mod N
を計算する。ここで、(P−1)(Q−1)は、Nのオイラー関数の値φ(N)である。これは、Nと互いに素な自然数の個数に等しい。オイラーの定理によれば、
R^((P−1)(Q−1)) mod N = 1
が成り立ち、一方で、XE = 1 + k(P−1)(Q−1)(kは、ある整数)が成り立つので、
Y^X mod N
= R^(XE) mod N
= R^(1+k(P−1)(Q−1)) mod N
= R*R^(k(P−1)(Q−1)) mod N
= R
が成り立つ。従って、R^X mod Nを計算することで、Aは、送信者Bの平文 R を復号することができる。この際、秘密鍵 X を計算するのに、Nの素因数 P,Qが用いられており、現在のところ、素因数分解を介さないで、Xを計算する方法は知られておらず、大きな素数の積を因数分解することは、現実的でない時間が必要であるので、Nを公開しても、Aの秘密鍵は安全である。
(アディション・チェイン方式(addition chain method))
RSA暗号の計算の本体は、べき乗剰余計算であるが、これは、一般に、剰余乗算の組み合せで実行される。今、Aレジスタ,Bレジスタ,Nレジスタを持ち、これに対して、A^2 mod N又はA*B mod Nを計算して、再びAレジスタに戻すコプロセッサを持つマイクロコンピュータを考える(これはICカードでは標準的な仕様である)。このようなマイクロコンピュータにおいて、べき乗剰余計算を行う為に広く用いられているのが、以下の[アルゴリズム1]に示すアディション・チェイン方式(addition chain method)である。
このアルゴリズムにおいては、nは、Xのビット長に対応され、(X[n−1]X[n−2]...X[1]X[0])は、Xの二進数表現である。本アルゴリズムは、概略的には、二乗の剰余乗算「A^2 mod N」(ステップ4)及び、剰余乗算「A = A*B mod N」(ステップ5)を組み合せて実行され、X[n−1], X[n−2], ..., X[1], X[0]における1の個数をH(X)とすると、二乗の剰余乗算「A^2 mod N」にn回、剰余乗算「A = A*B mod N」にH(X)回の演算が繰り返し行われることになる。
【0018】
上記のアルゴリズム1で、正しい結果が得られることを数値例で確認しておく。
アルゴリズムの確認の意味では、指数Xを具体化すれば十分であるので、Y及びNは、記号のまま用いることにする。
S = Y^45 mod N
をアルゴリズム1に従って計算する。ここで、指数45は、二進数では、
45 = 101101(二進数)
と書くことができる。従って、アルゴリズム1の記号を用いて指数を表現すると、
X[5] = 1, X[4] = 0, X[3] = 1, X[2] = 1, X[1] = 0, X[0] = 1
となる。ビット数nは6である。Sの初期値は1である。
(1) j=5のとき
Sの初期値は1であるから、これを二乗しNで割った剰余を取っても、1である(ステップ4)。
【0019】
X[5] = 1であるから、ステップ5が実行され、
が得られる。
(2) j=4のとき
このときのSの値は、最初S = Y mod Nであるから、これを二乗してNで割った剰余を取ると、S = Y^2 mod Nとなる。
【0020】
X[4] = 0であるから、ステップ5は実行されず、S = Y^2 mod Nのままである。
(3) j=3のとき
このときのSの値は、最初S = Y^2 mod Nであるから、これを二乗してNで割った剰余を取ると、S = Y^4 mod Nとなる。
【0021】
X[3] = 1であるから、ステップ5が実行され、
S = Y^4*Y mod N = Y^5 mod N
となる。
(4) j=2のとき
このときのSの値は、最初S = Y^5 mod Nであるから、これを二乗してNで割った剰余を取ると、S = Y^10 mod Nとなる。
【0022】
X[2] = 1であるから、ステップ5が実行され、
S = Y^10*Y mod N = Y^11 mod N
となる。
(5) j=1のとき
このときのSの値は、最初S = Y^11 mod Nであるから、これを二乗してNで割った剰余を取ると、S = Y^22 mod Nとなる。
【0023】
X[1] = 0であるから、ステップ5は実行されず、S = Y^22 mod Nのままである。
(6) j=0のとき
このときのSの値は、最初S=Y^22 mod Nであるから、これを二乗してNで割った剰余を取ると、S = Y^44 mod Nとなる。
【0024】
X[0] = 1であるから、ステップ5が実行され、
S = Y^44*Y mod N = Y^45 mod N
となり、所望の結果が得られる。
【0025】
アルゴリズム1は、指数1ビット毎に処理を実行しているが、複数のビットをまとめて処理することもできる。例えば、2ビットを処理単位とするアディション・チェイン方式によるべき乗剰余計算を行う場合、以下の手順[アルゴリズム2]に従って各処理を実行する。以下、Xのデータ長をnビットとし、X[j](j=0,1,2,...,n/2−1)は、その2ビットブロックであるものとする。
上記[アルゴリズム2]で実際にべき乗剰余計算ができることは、[アルゴリズム1]の正当性と同様に確かめることができる。
(マイクロコンピュータの動作とプログラムカウンタ)
マイクロコンピュータには、プログラム又はデータを読む位置(アドレス)を指定する為のカウンタ(プログラムカウンタ)が内蔵されている。マイクロコンピュータは、プログラムカウンタの指定するアドレスに格納されているビット情報を読み出す。ビット情報は、オペコード(opcode)と、オペランド(operand)に分類することができる。オペコードは、マイクロコンピュータがどのようにデータを演算すればいいかを指定したものであり、オペランドは、演算対象のデータや、レジスタを指定したものである。ここで、レジスタとは、物理的にはRAMと同じものであるが、CPUに含まれており、CPU内の論理(又は算術)演算器とのデータのやりとりを行うものである。
【0026】
今、上記の各種概念を説明するために、8ビットのマイクロコンピュータを想定し、簡単な命令列を考える。
[コード例1]
8000 MOV.B C3, R2H ステップ1
8002 MOV.B F2, R4H ステップ2
8004 XOR R2H, R4H ステップ3
上記の[コード例1]における8000, 8002, 8004は、命令の位置を示すアドレスを16進数で示したものである。コード例1を実行する際のマイクロコンピュータの動作を説明する。マイクロコンピュータは、まず、プログラムカウンタを8000に設定し、オペコードであるMOV.B、オペランドであるデータC3と、レジスタR2Hを読み取り、データC3をレジスタR2Hに転送する(ステップ1)。次に、マイクロコンピュータは、プログラムカウンタを2だけ進め、8002とし、ステップ2に進む。ステップ2では、データF2をレジスタR4Hに転送する。この処理が終わると、プログラムカウンタをさらに2進め、8004とする。ステップ3では、レジスタR2Hに格納されているデータC3と、レジスタR4Hに格納されているデータF2の排他的論理和(exclusive OR) C3 EXOR F2(=11000011 EXOR 11110010)を実行し、その結果00110001をレジスタR4Hに格納する。
【0027】
より複雑な、もう一つのコード例を挙げる。ここでの記号の意味は、「発明の詳細な説明」において詳細に説明する。ここでは、動作の意味のみ説明する。
[コード例2]
8100 MOV.W #Yj_TOP , R1 ステップ1
8102 MOV.W #B_TOP , R2 ステップ2
8104 MOV.B #DATA_LENGTH , R3H ステップ3
8106 loop: MOV.W @R1 , R4 ステップ4
8108 MOV.W R4 , @R2 ステップ5
810A ADDS #2 , R1 ステップ6
810C ADDS #2 , R2 ステップ7
8110 DEC.B R3H ステップ8
8112 BNE loop ステップ9
コード例2は、DATA_LENGTHで指定された長さ(ワードサイズ)を持ったYjをコプロセッサのBレジスタに転送するプログラムである。ここで、Yj_TOPは、データYjの格納されているアドレスの先頭位置、B_TOPは、Bレジスタのアドレスの先頭位置である。コード例2におけるYjはRAM上に配置されている。ステップ1によって、Yjの先頭アドレスをレジスタR1に転送し、さらに、ステップ2の命令によって、Bレジスタの先頭アドレスをR2に転送する。ステップ3で、データのワードサイズDATA_LENGTHをレジスタR3Hに転送する。ステップ4からステップ9までの命令は、DATA_LENGTH回ループして繰り返し実行される。ステップ4で、レジスタR1が指し示すアドレスのデータをレジスタR4に転送し、ステップ5の命令で当該データをレジスタR2が指し示すアドレスに転送する。ステップ6,7では、R1,R2のそれぞれに2を加える。これは、それぞれのアドレスを2進めることを意味している。ステップ8は、カウンタR3Hをデクリメントするものである。ステップ9は、カウンタの値が0であるか否かに応じて条件分岐するものである。0でなければ、ラベルloopの指し示すアドレス8106(ステップ4)にプログラムカウンタを戻し、ループを継続する。このプログラムは、RSA暗号の処理を[アルゴリズム1]に従って実行する際に必要となるものである。
【0028】
このとき、Yjは、Y0, Y1, Y2, Y3の4種類である。Y0, Y1, Y2, Y3は、それぞれRAM上の異なる位置に置かれている。今、最も極端な場合を考える。仮に、DATA_LENGTHが、64(128バイト=1024ビット)であるものとし、Y0の先頭アドレスが、0000, Y1の先頭アドレスが、0080, Y2の先頭アドレスが、0100, Y3の先頭アドレスが、5180であるものとする(このアドレス設定は説明の為の便宜でこのように設定したもので、実際にデータを配置する場合は、連続したアドレスに配置することが多い)。
【0029】
このとき、アドレス8006の命令MOV.W @R0 , R4において、プログラムカウンタは、データが、Y0, Y1, Y2, Y3のどれであるかに応じて以下のように変化する。
Y0のとき 8106 から 0000(反転ビット数4)
Y1のとき 8106 から 0080(反転ビット数5)
Y2のとき 8106 から 0100(反転ビット数3)
Y3のとき 8106 から 5180(反転ビット数6)
既に述べたように、反転ビット数(ハミングウエイト)に応じて電力が消費されるため、上記の転送時に、データが、Y0, Y1, Y2, Y3の区別ができる。(さらに、ループが繰り返されると,その度に、8106からのハミング距離に比例した電力波形が観測される。例えば、Y0の転送においては、Ham(8106, 0000), Ham(8106,0002), Ham(8106, 0004), ... , Ham(8106, 007E)に比例した電力が観測される。)
すると、転送データに応じて、RSA暗号処理における指数Xの各2ビットに対して4種類のラベルをつけていくことができる。これを簡単のためDA、DB,DC,DDと書くことにすると、例えば、実際の指数Xの列の一部が、10 11 01 00 11 01 10 10という並びであった場合、消費電力の観測から、DA, DB, DC, DD, DB, DC, DA, DAというラベル列が得られる。それぞれは、00, 01, 10, 11のいずれかに対応するので、この順列(permutation)の数は、4の階乗(factorial)=24通りしかないため、容易に正しいビット列を見出すことができる。これは、任意の長さの指数Xに対して適用可能である。
この例は、意識的にハミングウエイトが異なるように配置したものであるので、実際の配置、例えば、Y3の先頭アドレスを0180とした場合は、Y0とY3の区別ができなくなる。しかし、場合の数を大幅に減少させることができるため、正しい指数Xを求める計算時間を大幅に減らすことができる。以上がアドレスの変化電流を利用して秘密指数を見出す典型的な方法の一つである。この原理が、RSA暗号以外の暗号系、例えば、楕円曲線暗号のような公開鍵暗号に対しても有効であることは言うまでもない。DES(Data Encryption Standard)のような秘密鍵暗号におけるSBOX処理のアドレス変化を調べるなどの方法で秘密鍵を取り出せる可能性もある。
【0030】
【発明が解決しようとしている課題】
本発明の課題は,「従来の技術」において示したアドレスの変化に伴う消費電力の差を逓減することにより、ICチップ内の秘密情報を守ることである。
【0031】
【課題を解決するための手段】
既に述べたように、アドレスバスの制御によって生ずる電流は、プログラムカウンタの変化に伴うアドレスビットの反転数(ハミング距離)に比例し、これを観測することによって、ICチップ内の秘密データを知ることができる場合がある。
【0032】
逆に、データのハミング距離が同一であるように変化する場合は、たとえアドレス自体が異なっても、同じ電力が消費される。例えば、b90cから開始されるサブルーチンと、開始アドレスがba0cであるが、他が同一のプログラムを考える。簡単のため、プログラムカウンタは2ずつインクリメントされるものとすると、両者のプログラムカウンタの変化は、
b90c → b90e → b910 → b912 → b914 → b916
ba0c → ba0e → ba10 → ba12 → ba14 → ba16
のようになる。この際消費される電力は、それぞれの変化におけるビット反転数に比例するので、共に全く同一のハミング距離:
1 4 1 2 1
に比例した電力波形が観測される。従って、アドレスという面からは、両者を消費電力から区別することはできない。
【0033】
これを応用すれば、暗号等の秘密鍵と対応するアドレス変化に伴う消費電力が外部に漏洩するのを防ぐことができる。すなわち、本発明における問題解決の第一の方法は、プログラムカウンタの変化を均一化することである。
【0034】
第二の方法は、同一のデータにアクセスする際のプログラムカウンタの変化を処理毎に変更することである。これは上記の「変化の均一化」とは反対の考え方に基づいている。
【0035】
第一の方法及び第二の方法の実装方式は、プログラムの構造に依存するため、種々の構造に応じて変える必要がある。
【0036】
第一の方法のうち典型的なものは、アドレスの値がPCSである位置に配置された転送命令又は条件分岐又は無条件分岐命令が実行された直後にアクセスされるデータ又はサブルーチンを、Ham(PCS, PCD[1])= Ham(PCS, PCD[2])=...= Ham(PCS, PCD[m])となるようなアドレスPCD[1], PCD[2], ..., PCD[m]で開始される位置に配置することである。このようにデータ及びプログラムを配置することによって、アドレスのハミング距離の違いによって生ずる電力消費の違いが逓減される。実際にこのような配置が可能であること、及び、プログラムの詳細については、次節の「発明の実施形態」において詳しく説明する。
【0037】
第二の方法のうち典型的なものは、アドレスの値がPCSである位置に配置された転送命令又は条件分岐又は無条件分岐命令が実行された直後にアクセスされるデータ又はサブルーチンを、Ham(PCS[1], PCD)= Ham(PCS[2], PCD)=...= Ham(PCS[m], PCD)となるようなアドレスPCS[1], PCS[2], ..., PCS[m]で開始される位置に配置し、さらに、各PCS[j](j=1,2,3,...,m)に配置されたm個の命令の実行順序を予測できない(unpredictable)情報源によってプログラムの実行毎に毎回変化させることである。実際にこのような配置が可能であること、及び、プログラムの詳細については、次節の「発明の実施形態」において詳しく説明する。ここで、予測できない情報源とは、具体的には、種々の乱数発生装置や、非公開情報を数学的演算によって加工することによって生成される疑似乱数(pseudo randomnumber)等を想定している。
【0038】
乱数発生装置のうち典型的なものは、抵抗等の熱雑音をアンプ(amplifier)で増幅し、これを適当な閾値電圧(threshold voltage)で0/1信号に変換することによって、自然界の予測不能なゆらぎ(fluctuation)を0/1ビット列に変換するものである。現在、熱雑音による抵抗値の変化を正しく予測する方法は知られていないため、発生する0/1ビット列もまた、予測できない。
【0039】
疑似乱数の作り方には種々のものがあるが、例えば、ICチップ内にnビットの長さを持つ二つの秘密の数をそれぞれ, a,X[0]とし、この値から,関係式:
X[j] = a*X[j−1] mod 2^n (式1)
を用いて帰納的(inductive)に, X[0], X[1], X[2], ...を定義する方法が知られている。例えば、a = 2100005341, n = 32とし、X[0]を0でない数に選べば、統計的性質のよい疑似乱数が生成できることが知られている(このような方法に関する詳細については、例えば、伏見正則「乱数」東京大学出版会, 1989年に記載されている)。
【0040】
また、両者を組み合せて用いることもできる。例えば、上述の例で、初期値X[0]のみ抵抗の熱雑音を利用した乱数生成装置によって生成し、以後は、(式1)を利用してビット列を作ってもよい。
【0041】
多くのICカード用ICチップは、何らかの乱数生成装置を内蔵しており、これを利用することができる。
【0042】
【発明の実施の形態】
以下、簡単のため、日立製作所製AEマイコン(旧H8マイコン)のアセンブラ言語の形式に従った。(日立製作所製H8マイコンに関する一般的解説は、例えば、藤沢幸穂著「H8マイコン完全マニュアル」(オーム社)等にある。)これは便宜的なものであり、発明の本質とは無関係であることはいうまでもない。又、アドレス空間は、16進数表示で0000から8000までがROM(EEPROMやFRAMでもよい)で、8000からFFFFまでがRAMであるものとする。又、CPUは8ビット単位で処理を行うもので、そのレジスタは、R0H, R0L(それぞれR0レジスタの上位8ビットと下位8ビットで、16ビット全体をまとめてR0とする)から、R7H, R7Lまでであるものとする。
【0043】
以下、H8マイコンの簡単な命令語について説明を行う。
【0044】
アセンブラ言語において中核をなす命令は転送命令である。転送命令は、1バイト(8ビット)データの転送を行うMOV.Bと2バイトデータの転送を行うMOV.Wとに分けることができる。例えば、以下のような転送命令が重要である。
(A) MOV.B(W) #(8ビット又は16ビットの値), レジスタ名
これはイミディエート転送と呼ばれる転送命令で、括弧内の8ビット(又は16ビット)の値をレジスタ名で指定されたレジスタに転送する。例えば、
MOV.B #F9, R2H
は、データF9をレジスタR2Hに転送するものである。
(B) MOV.B(W) @(レジスタ名1),レジスタ名2
これは、レジスタ名1で示されるレジスタに格納されているアドレスが指定する位置のデータをレジスタ名2で示されるレジスタに転送するものである。
例えば、
MOV.B(W) @R2 , R4
は、レジスタR2が指し示したアドレスに格納されているデータ(2バイト)をレジスタR4に転送するものである。
(C) MOV.B(W) レジスタ名1 , @(レジスタ名2)
これは、レジスタ名1で指定されたレジスタ内のデータをレジスタ名2に格納されているアドレス位置に転送するものである。
例えば、
MOV.B(W) R4 , @R1
は、レジスタR4に格納されているデータを、レジスタR1が示しているアドレスに転送するものである。
(D) MOV.B(W) @(ラベル名(アドレス),レジスタ名1), レジスタ名2
これは、ラベル名で示されたアドレスにレジスタ名1で指定されるレジスタに格納されている値を加えたアドレス位置に含まれるデータを、レジスタ名2で指定されたレジスタに転送するものである。レジスタ名1で指定されるレジスタに格納されている値は、変位(displacement)と呼ばれることがある。
【0045】
H8マイコンには、上記(A),(B),(C),(D)の他にも種々のアドレス指定方法(アドレッシングモード)があるが、ここでは、説明に必要ないので省略する。
【0046】
転送命令の他、レジスタ間で種々の論理演算を行うことができる。例えば、
ADD.B R2H, R4H
は、レジスタR2Hに格納されている値とレジスタR4Hに格納されている値を加えて、結果をR4Hに書き込むものである。この他にSUB(減算),XOR(排他的論理和),AND(論理積)等の演算命令がある。
【0047】
又、1だけ減算するための命令BNEや、アドレスのインクリメント/デクリメント用の命令ADDS, SUBSも頻繁に利用される。
【0048】
この他、条件分岐命令が重要である。条件分岐命令は、直前に実行したオペレーションの結果を示す各種のフラグの値に応じてプログラムカウンタを変化させる命令である。マイコンにはコンディションコードレジスタ(CCR)と呼ばれる各種フラグを格納するレジスタがある。CCRのフラグには種々のものがあるが、ここでは簡単のため、Z(ゼロフラグ)及びC(キャリーフラグ)についてのみ説明する。ゼロフラグは、直前のオペレーションの結果が0であった場合は1、0でなかった場合は0となるものである。Zの変化に対応する条件分岐命令として、BEQとBNEがある。BEQは、Zが0のときに指定されたアドレスにジャンプする命令であり、BNEは、Zが0でないときにジャンプする命令である。例えば、
XOR R2H, R2L
BEQ 1st address
BNE 2nd address
というプログラムは、レジスタR2HとR2Lに含まれる値が一致したときには、第一のアドレスにプログラムカウンタの値を変更し、一致しなかった場合は、第二のアドレスにプログラムカウンタの値を変更する。
【0049】
キャリーフラグCは、直前のオペレーションの結果、桁上がりが生じた場合は1、0でなかった場合は0となるものである。Cの変化に対応する条件分岐命令として、BCSとBCCがある。BCSはC=1の時に該当アドレスにジャンプし、BCCはC=0のときに指定されたアドレスにジャンプする命令である。
【0050】
プログラムカウンタを変更する命令には、変更をCCRの値によらず、無条件に行うものもある。
【0051】
例えば、ジャンプ命令:
JMP @R1
は、プログラムカウンタをレジスタR1が指定する値に変更する。
【0052】
同じく、サブルーチンへのジャンプを行う命令:
JSR subroutine
は、プログラムカウンタをsubroutineで指定されたアドレスに強制的に変更する。但し、JSRはJMPとは異なり、ジャンプ先のサブルーチン
において、命令1−命令Xまでを実行し、最後にRTS(Return from Subroutine)命令によって、JSR命令の直後のアドレス位置へプログラムカウンタを変更する。
【0053】
上記の他、カウンタのデクリメントに用いるDEC命令や、アドレス変更のために用いられるADDS命令などがある。例えば、
DEC R3H
は、レジスタR3Hの値を1だけ減らす命令であり、
ADDS #2, R2
は、R2に2を加える命令である。
【0054】
以上で、H8/300アセンブラ言語の説明を終わる。
【0055】
以下で本発明の実施例を詳細に説明する。記述はこれまでに倣い、日立製作所製H8マイコンのH8/300アセンブラを用いて行う。
【0056】
今、2ビットのデータdが、’00’,’01’, ’10’, ’11’である場合に、それぞれ、データY0, Y1, Y2, Y3をあるコプロセッサのデータレジスタCDBに転送するプログラムを考える。Y0, Y1, Y2, Y3は、同一の長さDATA_LENGTHを持つデータであり、あらかじめRAMの所定の位置に格納されているものとする。各データの先頭アドレスは、それぞれ、Y0_TOP, Y1_ TOP, Y2_ TOP, Y3_ TOPであるものとする。又、CDBの先頭アドレスをCDB_TOPとする。
【0057】
さらに、
Ham(Copy,Y0_TOP)
=Ham(Copy,Y1_TOP)
=Ham(Copy,Y2_TOP)
=Ham(Copy,Y3_TOP)
(条件1)
を満たすように定める。例えば、DATA_LENGTH=1024/16=64, Copy=0100,Y0_TOP=C200, Y1_TOP=C400, Y0_TOP=C700, Y0_TOP=C800と定めれば、
Ham(Copy,Y0_TOP)=Ham(0100,C200)=4
Ham(Copy,Y1_TOP)=Ham(0100,C400)=4
Ham(Copy,Y2_TOP)=Ham(0100,C700)=4
Ham(Copy,Y3_TOP)=Ham(0100,C800)=4
となり、かつ各データは重複なくRAM上に配置され、ワード転送の各段階で(条件1)が満足される。
【0058】
以下に示すプログラムは、3つの部分から構成されている。第一はMAINを先頭アドレス(ラベル)とする主要部、第二は、Copyを先頭アドレスとする転送サブルーチン、第三が、tableを先頭アドレスとするデータ部である。プログラム実行においては、最初に、プログラムカウンタの値をMAINとしておく。
このプログラムの動作を、上記[実施例1]及び図6に基づいて説明する。
【0059】
プログラム及びデータの位置付けは、図6に示されている。CDBはRAMの一部として機能するものとする。
【0060】
最初、プログラムカウンタはMAIN=0000を指しているので、マイクロコンピュータは、MOV.W @d, R2から順に命令を実行する。
【0061】
0000では、2ビットのdを該当アドレスから読み出し、これをレジスタR2に格納する。0002では、レジスタR2の値を1ビット左にシフトする。これは、R2の値を2倍することに等しい。0004でtable=0200にR2の値を加えたアドレスに格納されているデータをレジスタR0に転送する。例えば、dの値が3であれば、0200+2*3=0206のアドレスに格納されているデータY3_TOPが指し示すアドレスC800がR0に格納される。
【0062】
0006では、CDBの先頭アドレスCDB_TOPがレジスタR1に格納される。0008では、データのワード長DATA_LENGTH=64がレジスタR3Hに格納される。000AではJSR Copyという命令によって、プログラムカウンタの値を0100(ラベル名”Copy”)に変更する。0100では、R0に格納されているアドレスのデータをレジスタR4に転送し、0102では、R4の値をR1に格納されているアドレス位置に転送する。0104,0106で、アドレスを2だけインクリメントし、0108では、レジスタR3Hに格納されているカウンタの値を1だけデクリメントする。010Aでは、カウンタの値が0でなければ再びコピールーチンの先頭にプログラムカウンタを変更し、レジスタR3Hの値が0になるまで上述の操作を繰り返す。R3Hの値が0になると、プログラムカウンタは、010Cとなり、サブルーチンから抜けて、000Aの次のアドレス、すなわち、000Cに変更し、処理を終える。
【0063】
アドレス0100の転送命令にて、データY0, Y1, Y2, Y3を読む際のプログラムカウンタは、0100からR0に変化する。この際、R0に含まれている値と0100とのハミング距離は、常に同じである。ずなわち、
d=0の場合、
0100 → C200(ハミング距離4)
0100 → C202(ハミング距離5)
0100 → C204(ハミング距離5)
…
0100 → C080(ハミング距離4)
のように変化する。
d=1の場合、
0100 → C400(ハミング距離4)
0100 → C402(ハミング距離5)
0100 → C404(ハミング距離5)
…
0100 → C480(ハミング距離4)
であり、ハミング距離の変化の仕方は、d=0の場合と全く同一である。d=2,3の場合も同様に変化することは明らかであろう。したがって、アドレスの変化に応じて発生する電力を観測してdの値を知ることは極めて困難となる。これは、本発明請求項5の実施例の一つである。
ここでは、転送するデータを4つとしたが、これは説明の便宜の為であり、データ数を一般の数とすることによって、本発明の思想が損なわれることはない。又、ここで示したデータ配置は一つの例にすぎず、他のマイクロコンピュータに実装する際には、個々のマイクロコンピュータのアドレス空間に応じて、複数のデータを同じハミング距離となる位置に配置する必要があることはいうまでもない。又、ここでは、複数のデータを読むプログラムを示したが、転送の方向を逆にすることによって、書き込みの場合にも、本発明請求項1の思想を適用することができる。
【0064】
上記の実施例は、複数のデータに対応するプログラム側の転送命令が1つしかない場合であるが、これが複数ある場合もある。請求項2は、このような場合に対応するものである。
【0065】
以下に示す本発明請求項6の実施例は、説明の便宜のために簡略化されており、実際に本発明を適用する場合とは異なるものであることに注意しておく。
【0066】
本実施例は、1ビットのデータdが、’0’, ’1’ である場合に、それぞれ、データY0, Y1をあるコプロセッサのデータレジスタCDB(CDBの先頭アドレスをCDB_TOPとする)に転送するものである。
【0067】
図7は、本実施例の基本構造を模式的に示したものである。ROM又はEEPROM(701)には、メインルーチン(702)及び、二つのコピールーチン703,704が配置されており、各ルーチンのMOV.W @R0, R4命令のアドレスは、Y0_pointer, Y1_pointerであるものとし、さらに、MOV.W @R0, R4の直後の命令MOV.W R4, @R1のアドレスは、それぞれ、Y0_pointer+2, Y1_pointer+2であるものとする。さらに、RAM(705)には、3つのデータ領域Y0(706), Y1(707), CDB(708)があり、それぞれの先頭アドレスは、Y0_TOP, Y1_TOP, CDB_TOPとする。又、MAIN関数のJSR @R0命令のアドレスは、JSR_TOPであるものとする。このとき、関係式:
Ham(JSR_TOP,Y0_pointer) = Ham(JSR_TOP, Y1_pointer)(条件3),
Ham(Y0_pointer, Y0_TOP) = Ham(Y1_pointer)(条件4),
Ham(Y0_pointer+2,CDB_TOP) = Ham(Y1_pointer+2,CDB_TOP)(条件5)
を満たすように各アドレスを選ぶ。このような配置は、例えば、DATA_LENGTH=1024/16=64,
JSR_TOP = 8000,
Y0_pointer = 8100,
Y1_pointer = 8200,
Y0_TOP = C100,
Y1_TOP = C800,
CDB_TOP = D000
とすることによって実現できる。これが、(条件3)、(条件4)、(条件5)を満たすことは明らかであろう。
【0068】
以下に実施例のプログラムコードを示す。動作は、[実施例1]から容易に類推できるものであるので、説明は省略する。
ここまでに述べた実施例1,2は、いずれも、プログラムカウンタの変化が全て等しいような例である。しかし、一般には、完全にハミング距離が揃うように配置することが難しい場合がある。このような場合には、プログラムカウンタの変化に伴う消費電力が、測定に伴うノイズと比較して小さい程度にすることにより、ほぼ同様の効果を見込むことができる。申請者は、この点を確認する実験を行い、多くの測定環境において、4ビット程度の違いを区別することには、大きな困難を伴うことを見出した。さらに、5ビット以上の差がある場合は、ノイズを考慮しても、アドレス位置が明確に区別できることを確認した。そこで、この実験結果、すなわち4ビットの差以下にハミング距離を揃えることを本発明の基本的思想とし、請求項1,2に反映させた。
【0069】
次に図8を用いて本発明請求項3、4の実施例を説明する。
【0070】
この実施例では、日立製作所製AE45Cマイコンの命令を用いる。AE45C上のプログラムは、先に説明したH8/300アセンブラとは若干異なるH8/300Hアセンブラによって記述される。H8/300Hでは、H8/300の命令が拡張されているので、以下、適宜説明を加える。H8/300Hにおいては、レジスタが32ビットまで拡張されており、下記のプログラムにおいて、これをERの後に番号を付けて表示していること、及び、Eの後に番号jを付けた場合、ERjの上位半分のビットを指していることに注意されたい。
【0071】
本実施例においては、RAM(804)は、FF0000からFFFFFFまでのアドレスに割り当てられているものとする。RAM上には、512ビットの長さを持つデータ領域A(805)と、同じく512ビットの長さを持つデータ領域B(806)、及び、同じ長さを持つデータ領域Z(807)があるものとする。本実施例は、データ領域AかBのデータをデータ領域Zに転送するものである。この際、どちらのデータを転送しているかが、プログラムカウンタの変化に伴う消費電力を観測することによってわからないように転送することを考える。この際、乱数を必要とするが、この実施例においては、簡単の為、「予測不能な情報源」(Source of Unpredictable Information)として、乱数発生装置(Random Number Generator)を持つICチップを仮定する。既に述べたように、ICカードマイコンの多くは、乱数発生装置を内蔵しており、この仮定は自然なものである。
【0072】
[実施例3]のプログラムは、ROM(又はEEPROM)(801)上のMAIN(802)部分と、コピールーチン(803)及び、E1_mod_E4ルーチンから構成されている。ここで、E1_mod_E4ルーチンは、E1のデータをE4で割った余りをE1に格納するものとする。このサブルーチンのプログラムは、本実施例の説明には必要ないので省略する。
【0073】
MAINは、データのセットを行う部分である。コピールーチンは、実施例1、2とは異なり、8ビットぼブロックデータをランダムな順序で転送する。このコピールーチンは、乱数R1と転送元のアドレスR5を基点として、公式:
E1 = R1*(カウンタ値) mod E4
によってオフセットを作り、R5+E1の位置のデータを読み、これをZに書き込む。上記の公式において、E4はビット数で、R1は乱数である。R1は奇数である必要がある(ここでは、レジスタとその中に格納されている値を同じ記号を用いて表現している)。R1は実行のたびに異なるので、ブロック毎の転送の順序は毎回異なる。
【0074】
このとき、データの読み込みにおいては、ブロック毎に、転送命令:
MOV.B @ER5, R0Lが配置されているアドレス(8000)と各データとのハミング距離に比例した消費電力が生ずる。今、転送の順序はランダムであるので、転送毎のハミング距離全体の集合が一致すれば、Aを転送しているのか、Bを転送しているのかを区別することはできない。例えば、SRC_ADDRESSとして、FFC100, FFC210を選べば、この条件が満たされる。これらのアドレスの値は、アドレスの小さい方から大きい方へ読んだ場合に発生する消費電力のパターンは異なるが、これは、順序を無視すれば同じパターンであり、ランダムに転送した場合は、区別することができない例になっている。
【0075】
【発明の効果】
本発明によれば、暗号等の秘密情報を処理するプログラムにおいて、秘密情報と関係するデータを命令の配置されているアドレスから同一のハミング距離に配置に配置することにより、アドレスの違いから生ずる消費電力の差が大きく逓減し、消費電力の違いを観測することによって内部情報を知ることが困難になる。
【図面の簡単な説明】
【図1】ICカードの概観。
【図2】マイクロコンピュータの構成。
【図3】消費電流波形。
【図4】CMOSインバータの構造。
【図5】CMOSインバータの消費電力波形。
【図6】本発明請求項1の実施例の基本構造。
【図7】本発明請求項2の実施例の基本構造。
【図8】本発明請求項3,4の実施例の基本構造。
Claims (6)
- プログラムを格納するプログラム格納部、データを保存するデータ格納部を持つ記憶装置とプログラムに従い、所定の処理を実行し、データ処理を行う中央演算装置を持ち、プログラムは中央演算装置に実行の指示を与える処理命令から構成される一つ以上のデータ処理手段からなり、一つのデータ処理手段が、その入力データを処理し、処理済データを出力する入力データ処理手段を含み、当該情報処理装置に格納されたプログラム又はデータのアドレスを示すプログラムカウンタを持つ情報処理装置において、アドレスの値がPCSである位置に配置された転送命令又は条件分岐又は無条件分岐命令が実行された直後にアクセスされるデータ又はサブルーチンを、|Ham(PCS, PCD[I])−Ham(PCS, PCD[J])|≦4(1≦I<J≦m)となるようなアドレスPCD[1], PCD[2],..., PCD[m]で開始される位置に配置することを特徴とするプログラム実装方法。(但し、ここで、Ham(A,B)は、アドレスAとBのハミング距離であり、A, Bの二進数表現において、相異なるビットの数と定義される。例えば、A=11010101とB=01110100のハミング距離は、3である。)
- プログラムを格納するプログラム格納部、データを保存するデータ格納部を持つ記憶装置とプログラムに従い、所定の処理を実行し、データ処理を行う中央演算装置を持ち、プログラムは中央演算装置に実行の指示を与える処理命令から構成される一つ以上のデータ処理手段からなり、一つのデータ処理手段が、その入力データを処理し、処理済データを出力する入力データ処理手段を含み、当該情報処理装置に格納されたプログラム又はデータのアドレスを示すプログラムカウンタを持つ情報処理装置において、アドレスの値がPCS[1], PCS[2],..., PCS[m](mは2以上の整数)である位置に配置された転送命令又は条件分岐又は無条件分岐命令が実行された直後にアクセスされるデータ又はサブルーチンを、
|Ham(PCS[I], PCD[I])−Ham(PCS[J], PCD[J])|≦4(1≦I<J≦m)となるようなアドレスPCD[1], PCD[2],..., PCD[m]で開始される位置に配置することを特徴とするプログラム実装方法。 - プログラムを格納するプログラム格納部、データを保存するデータ格納部を持つ記憶装置とプログラムに従い、所定の処理を実行し、データ処理を行う中央演算装置を持ち、プログラムは中央演算装置に実行の指示を与える処理命令から構成される一つ以上のデータ処理手段からなり、一つのデータ処理手段が、その入力データを処理し、処理済データを出力する入力データ処理手段を含み、当該情報処理装置に格納されたプログラム又はデータのアドレスを示すプログラムカウンタを持つ情報処理装置において、アドレスの値がPCSである位置に配置された転送命令又は条件分岐又は無条件分岐命令が実行された直後にアクセスされるデータ群のアドレスの集合が、
(第1群)PCD[1,1], PCD[1,2],..., PCD[1,m]
(第2群)PCD[2,1], PCD[2,2],..., PCD[2,m]
………
(第n群)PCD[n,1], PCD[n,2],..., PCD[n,m]
であるとき、PCDとのハミング距離の集合
S[j] = {Ham(PCS, PCD[j,k]); k = 1,2,3,..., m}(j=1,2,3,...,n)
が、集合としてS[1]=S[2]=...=S[n]を満たすようなアドレスPCD[1,1], PCD[1,2], ... , PCD[1,m],PCD[2,1], PCD[2,2], ... , PCD[2,m],………,PCD[n,1], PCD[n,2], ... , PCD[n,m]で開始される位置に配置することを特徴とするプログラム実装方法。 - 請求項3において、集合S[j](j=1,2,3,...,n)内の各アドレスにアクセスする順序を予測できない情報源によって各j毎に毎回変化させることを特徴とするプログラム実装方法。
- 請求項1において、Ham(PCS, PCD[I])=Ham(PCS, PCD[J])(1≦I<J≦m)とすることを特徴とするプログラム実装方式。
- 請求項2において、Ham(PCS[I], PCD[I])=Ham(PCS[J], PCD[J])(1≦I<J≦m) とすることを特徴とするプログラム実装方式。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002288204A JP2004126841A (ja) | 2002-10-01 | 2002-10-01 | プログラム実装方法 |
US10/452,138 US20040064715A1 (en) | 2002-10-01 | 2003-06-03 | Method and device for accessing a memory to prevent tampering of a program in the memory |
EP03013398A EP1406145A3 (en) | 2002-10-01 | 2003-06-18 | Method and device for accessing a memory to prevent tampering of a program in the memory |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002288204A JP2004126841A (ja) | 2002-10-01 | 2002-10-01 | プログラム実装方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2004126841A true JP2004126841A (ja) | 2004-04-22 |
JP2004126841A5 JP2004126841A5 (ja) | 2005-10-27 |
Family
ID=31987140
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002288204A Pending JP2004126841A (ja) | 2002-10-01 | 2002-10-01 | プログラム実装方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20040064715A1 (ja) |
EP (1) | EP1406145A3 (ja) |
JP (1) | JP2004126841A (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005149262A (ja) * | 2003-11-18 | 2005-06-09 | Renesas Technology Corp | 情報処理装置 |
JP2006155140A (ja) * | 2004-11-29 | 2006-06-15 | Renesas Technology Corp | 情報処理装置、および、そのアドレス制御方法 |
WO2008090874A1 (ja) | 2007-01-23 | 2008-07-31 | Kabushiki Kaisha Toshiba | Icカードおよびicカードにおける認証処理方法 |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE10202700A1 (de) * | 2002-01-24 | 2003-08-07 | Infineon Technologies Ag | Vorrichtung und Verfahren zum Erzeugen eines Befehlscodes |
CN1969277A (zh) * | 2004-07-07 | 2007-05-23 | 三菱电机株式会社 | 电力计算装置、电力计算方法、抗侵害性评价装置和抗侵害性评价方法 |
US20060099991A1 (en) * | 2004-11-10 | 2006-05-11 | Intel Corporation | Method and apparatus for detecting and protecting a credential card |
JP4680876B2 (ja) * | 2006-12-11 | 2011-05-11 | ルネサスエレクトロニクス株式会社 | 情報処理装置及び命令フェッチ制御方法 |
FR3073645A1 (fr) * | 2017-11-13 | 2019-05-17 | Stmicroelectronics (Rousset) Sas | Procede de modification aleatoire du profil de consommation d'un circuit logique, et dispositif associe |
US10665319B1 (en) * | 2018-09-20 | 2020-05-26 | Amazon Technologies, Inc. | Memory device testing |
US11586380B2 (en) | 2020-09-09 | 2023-02-21 | Micron Technology, Inc. | Memory systems including examples of calculating hamming distances for neural network and data center applications |
US11609853B2 (en) | 2020-09-09 | 2023-03-21 | Micron Technology, Inc. | Memory controllers including examples of calculating hamming distances for neural network and data center applications |
US11636285B2 (en) * | 2020-09-09 | 2023-04-25 | Micron Technology, Inc. | Memory including examples of calculating hamming distances for neural network and data center applications |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR2117165A5 (ja) * | 1970-12-07 | 1972-07-21 | Ibm | |
AU6238499A (en) * | 1998-06-03 | 2000-01-10 | Cryptography Research, Inc. | Balanced cryptographic computational method and apparatus for leak minimization in smartcards and other cryptosystems |
JP3600454B2 (ja) * | 1998-08-20 | 2004-12-15 | 株式会社東芝 | 暗号化・復号装置、暗号化・復号方法、およびそのプログラム記憶媒体 |
US6557080B1 (en) * | 1999-01-25 | 2003-04-29 | Wisconsin Alumni Research Foundation | Cache with dynamic control of sub-block fetching |
CA2298990A1 (en) * | 2000-02-18 | 2001-08-18 | Cloakware Corporation | Method and system for resistance to power analysis |
GB2366634B (en) * | 2000-09-11 | 2003-03-12 | Lucent Technologies Inc | Memory addressing |
-
2002
- 2002-10-01 JP JP2002288204A patent/JP2004126841A/ja active Pending
-
2003
- 2003-06-03 US US10/452,138 patent/US20040064715A1/en not_active Abandoned
- 2003-06-18 EP EP03013398A patent/EP1406145A3/en not_active Withdrawn
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005149262A (ja) * | 2003-11-18 | 2005-06-09 | Renesas Technology Corp | 情報処理装置 |
JP2006155140A (ja) * | 2004-11-29 | 2006-06-15 | Renesas Technology Corp | 情報処理装置、および、そのアドレス制御方法 |
JP4664655B2 (ja) * | 2004-11-29 | 2011-04-06 | ルネサスエレクトロニクス株式会社 | 情報処理装置、および、そのアドレス制御方法 |
WO2008090874A1 (ja) | 2007-01-23 | 2008-07-31 | Kabushiki Kaisha Toshiba | Icカードおよびicカードにおける認証処理方法 |
Also Published As
Publication number | Publication date |
---|---|
US20040064715A1 (en) | 2004-04-01 |
EP1406145A3 (en) | 2006-01-04 |
EP1406145A2 (en) | 2004-04-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7194633B2 (en) | Device and method with reduced information leakage | |
US20040078588A1 (en) | Method and apparatus for balanced electronic operations | |
US7543159B2 (en) | Device and method with reduced information leakage | |
JP4317607B2 (ja) | 情報処理装置、耐タンパ処理装置 | |
JP4199937B2 (ja) | 耐タンパー暗号処理方法 | |
KR20170098731A (ko) | 부채널 분석으로부터 회로를 보호하는 방법 | |
US7454017B2 (en) | Information processing unit | |
EP1088295A2 (en) | Balanced cryptographic computational method and apparatus for leak minimization in smartcards and other cryptosystems | |
JP2001268072A (ja) | 情報処理装置、情報処理方法、及びカード部材 | |
Dhem et al. | Hardware and software symbiosis helps smart card evolution | |
JP2004126841A (ja) | プログラム実装方法 | |
Tunstall | Smart card security | |
US8321691B2 (en) | EMA protection of a calculation by an electronic circuit | |
EP1244077B1 (en) | Tamper resistant device | |
JP2005149262A (ja) | 情報処理装置 | |
Mayes | Performance of authenticated encryption for payment cards with crypto co-processors | |
Bhatti | Maskování šifry AES na mikrořadiči a DPA druhého řádu | |
JP4381987B2 (ja) | 耐タンパー情報処理装置並びにそれを用いたicカード及びsimモジュール | |
Saputra et al. | Masking the energy behaviour of encryption algorithms | |
JP4664655B2 (ja) | 情報処理装置、および、そのアドレス制御方法 | |
Komárek | The RSA key generation process via power analysis | |
JP4003723B2 (ja) | 情報処理装置、耐タンパ処理装置 | |
Fournier | Vector microprocessors for cryptography | |
EP1802024A2 (en) | Balanced cryptographic computational method and apparatus for leak minimization in smartcards and other cryptosystems | |
Balasch | Implementation Aspects of Security and Privacy in Embedded Design |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050905 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20050905 |
|
RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7422 Effective date: 20050905 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20081007 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20090217 |