JP5233473B2 - 暗号処理装置 - Google Patents

暗号処理装置 Download PDF

Info

Publication number
JP5233473B2
JP5233473B2 JP2008192356A JP2008192356A JP5233473B2 JP 5233473 B2 JP5233473 B2 JP 5233473B2 JP 2008192356 A JP2008192356 A JP 2008192356A JP 2008192356 A JP2008192356 A JP 2008192356A JP 5233473 B2 JP5233473 B2 JP 5233473B2
Authority
JP
Japan
Prior art keywords
numerical value
digit
data
value
bits
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.)
Active
Application number
JP2008192356A
Other languages
English (en)
Other versions
JP2010034682A (ja
Inventor
秀一 沖
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Dai Nippon Printing Co Ltd
Original Assignee
Dai Nippon Printing Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Dai Nippon Printing Co Ltd filed Critical Dai Nippon Printing Co Ltd
Priority to JP2008192356A priority Critical patent/JP5233473B2/ja
Publication of JP2010034682A publication Critical patent/JP2010034682A/ja
Application granted granted Critical
Publication of JP5233473B2 publication Critical patent/JP5233473B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/60Methods 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/72Methods 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/723Modular exponentiation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/72Indexing scheme relating to groups G06F7/72 - G06F7/729
    • G06F2207/7219Countermeasures against side channel or fault attacks

Landscapes

  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • General Engineering & Computer Science (AREA)

Description

本発明は、暗号処理装置に関し、特に、外部から与えられた第1の数値Mに対して、秘密鍵となる数値Dを用いた演算を行うことにより第2の数値Cを生成し、これを外部へ出力する処理を行う暗号処理装置に関する。
暗号は、通信の秘密性を確保するために古くから利用されてきた技術であり、近年では、デジタル機器同士の交信を行う際に不可欠の技術になりつつある。たとえば、現在、様々な用途で利用されているICカードの多くには、秘密鍵を用いた暗号化プロセスが組み込まれており、外部から与えられたデータに対して、内部で暗号化もしくは復号化を行う機能が備わっている。
ICカードなどで、現在、最も普及している暗号化方式の一つとして、公開鍵暗号方式の代表格であるRSA暗号方式がある。このRSA暗号方式による暗号化もしくは復号化のプロセスには、指数関数を含む剰余演算が含まれており、この演算の繁雑さにより安全性の確保が図られている。たとえば、下記の特許文献1および2には、このRSA暗号方式による暗号化もしくは復号化の演算を高速化する技術が開示されている。
一方、このような暗号方式に基づくセキュリティを脅かす「サイドチャネル攻撃」と呼ばれているセキュリティに対する脅威となる技術の存在も確認されている。一般に、ICカード等のデジタル機器に組み込まれているICチップは、多数のトランジスタ回路で構成されており、上述した指数関数を含む繁雑な剰余演算は、このトランジスタ回路によって実行されることになる。このため、ICカード等のデジタル機器が、暗号化もしくは復号化のプロセスを実行している最中に、当該機器の消費電力を外部からモニタすることにより、内部で行われている処理を統計的な手法で推定することが可能になる。このような不正な解析方法として、単純電力解析(SPA:Simple Power Analysis)や電力差分解析(DPA:Differential Power Analysis)などの方法が知られている。これらの方法を用いると、不正に入手したICカードに対する統計的な解析を行うことにより、内蔵されている秘密鍵の値を推定することが可能になる。
このようなサイドチャネル攻撃に対抗する方法として、たとえば、下記の特許文献3には、演算に乱数を組み込む手法が開示されており、下記の特許文献4には、より複雑な剰余演算の組み合わせを行う手法が開示されている。また、下記の特許文献5には、本来は必要のないダミー乗算を付加するとともに、乗数をべき乗の途中で更新することにより、ダミー乗算か否かの区別をしにくくする手法が開示されている。
特開平7−129085号公報 特開平8−254949号公報 特表2002−519722号公報 特開2006−217193号公報 特開2007−316491号公報
上述したように、サイドチャネル攻撃に対抗する方法として、従来、暗号化や復号化に用いる演算式に工夫を施し、より複雑な演算式を用いる様々な方法が提案されている。しかしながら、複雑な演算式を用いるようにすればするほど、演算負担が重くなるという弊害が生じる。
そこで本発明は、暗号化もしくは復号化に用いる演算式自体に改変を加えることなしに、サイドチャネル攻撃を防ぐことができる暗号処理装置を提供することを目的とする。
(0) 本発明の基本態様は、外部から与えられた第1の数値Mに対して、秘密鍵となる数値Dを用いた演算を行うことにより第2の数値Cを生成し、これを外部へ出力する処理を行う暗号処理装置において、
第1の数値Mを外部から入力する入力部と、
秘密鍵となる数値Dを格納する秘密鍵格納部と、
乱数Rを発生させる乱数発生部と、
発生させた乱数Rを用いて、数値Dを、1つの桁の数値dが「0≦d≦dmax(但し、dmax>k−1)」の範囲内の値をとる冗長なk進数で表現したランダムなn桁のデータに再符号化する再符号化部と、
少なくとも数値Mと再符号化された数値Dとを用いた所定の演算を行うことにより、第2の数値Cを求める演算実行部と、
演算実行部が求めた第2の数値Cを外部へ出力する出力部と、
を設けるようにしたものである。
(1) 本発明の第1の態様は、上述した基本態様を備えた暗号処理装置において、
再符号化部を、
乱数Rを用いて「0≦d≦dmax」の範囲内の値を発生させる処理をn回繰り返すことによりn桁のランダムデータを生成するランダムデータ生成要素と、
生成されたランダムデータが数値Dに等しいか否かを判断する数値確認要素と、
数値確認要素が等しいとの判断を行うまで、ランダムデータ生成要素にランダムデータの生成を繰り返し実行させ、数値確認要素が等しいとの判断を行った際のランダムデータを再符号化したデータとして出力する制御要素と、
によって構成したものである。
(2) 本発明の第2の態様は、上述した基本態様を備えた暗号処理装置において、
再符号化部を、
n桁のデータを保持するレジスタと、
秘密鍵となる数値Dを、1つの桁の数値dが「0≦d≦k−1」の範囲内の値をとる通常のk進数で表現することにより、n桁からなるデータを用意し、用意したデータを初期データとしてレジスタに設定する初期データ設定要素と、
発生させた乱数Rを用いて、レジスタのn桁のうちの任意の1桁を選択桁として選択する桁選択要素と、
発生させた乱数Rを用いて、増加補正もしくは減少補正のいずれかを決定する増減決定要素と、
増減決定要素により増加補正が決定された場合には、選択桁の数値dについてd<dmaxが満たされ、かつ、他の桁の調整によって所定の増加補正分δ(但し、δ≦dmax−d)を相殺することが可能であることを条件として、選択桁に増加補正分δを加え、他の桁を調整して増加補正分δを相殺する補正を行う増加補正実行要素と、
増減決定要素により減少補正が決定された場合には、選択桁の数値dについてd≠0が満たされ、かつ、他の桁の調整によって所定の減少補正分δ(但し、δ≦d)を相殺することが可能であることを条件として、選択桁から減少補正分δを減じ、他の桁を調整して減少補正分δを相殺する補正を行う減少補正実行要素と、
所定の条件が満たされるまで、桁選択要素による桁選択、増減決定要素による増減決定、増加補正実行要素もしくは減少補正実行要素による補正を繰り返し実行し、所定の条件が満たされたときのレジスタ内のn桁のデータを再符号化したデータとして出力する制御要素と、
によって構成したものである。
(3) 本発明の第3の態様は、上述した基本態様を備えた暗号処理装置において、
再符号化部を、
数値Dをm×nビット(m,nは整数)の2進数として保持する数値D保持要素と、
乱数Rを用いて、「E<D」を満足する任意の数値Eをm×nビットの2進数として生成する数値E生成要素と、
数値Eの下位mビットを0に置換することにより、新たな数値Aを生成する数値A生成要素と、
B=D−Aなる演算により、m×nビットの2進数からなる数値Bを生成する数値B生成要素と、
数値Aを構成するビットの下位側から数えて第(m×(i+1))ビット目から下位に向かって連続するmビット分の数値を上位ビット、数値Bを構成するビットの下位側から数えて第(m×i)ビット目から下位に向かって連続するmビット分の数値を下位ビット、とする2mビットからなる数値(但し、i=1〜nとし、数値Aについては、上位側にmビット分の0を補う)を、下位側から数えて第i番目の桁とするn桁のデータを生成し、これを冗長な2 進数で表現した数値Dを示すデータとして出力する冗長データ生成要素と、
によって構成したものである。
(4) 本発明の第4の態様は、上述した第1〜第3の態様に係る暗号処理装置において、
演算実行部が、M の項を含む所定の演算式もしくはMに基づいて定まる有理点Pをスカラー値Dでスカラー倍する楕円曲線暗号の演算式に基づく演算を行うことにより、第2の数値Cを求めるようにしたものである。
(5) 本発明の第5の態様は、上述した第4の態様に係る暗号処理装置において、
演算実行部が、M を所定の数値Zで除したときのべき乗剰余を示す演算式C=M modZに基づく演算を行うことにより、第2の数値Cを求めるようにしたものである。
(6) 本発明の第6の態様は、上述した第5の態様に係る暗号処理装置において、
再符号化部が、数値Dを、上位桁側から順に、d[n−1],d[n−2],d[n−3],... ,d[2],d[1],d[0]なるn桁のデータに再符号化する処理を行い、
演算実行部が、演算式C=M modZに基づく演算を、
C=(( .....(((1*M d[n−1]
*M d[n−2] modZ)
*M d[n−3] modZ)
.....
*M d[2] modZ)
*M d[1] modZ)
*M d[0] modZ
なる等価演算式を用いて、括弧の内側の演算から順番に実行するようにしたものである。
(7) 本発明の第7の態様は、上述した第1〜第3の態様に係る暗号処理装置において、
演算実行部が、RSA暗号、Diffie Hellman暗号、EL Gamal暗号、もしくは楕円曲線暗号を生成するための演算を行うことにより、第2の数値Cを求めるようにしたものである。
(8) 本発明の第8の態様は、上述した第1〜第7の態様に係る暗号処理装置において、
演算実行部が、再符号化部によって再符号化されたn桁のデータの中から1桁の数値dを抽出して用いる演算を、順番に繰り返し実行することにより第2の数値Cを求めるようにしたものである。
(9) 本発明の第9の態様は、上述した第1〜第8の態様に係る暗号処理装置において、
入力部が第1の数値Mを外部から入力するたびに、乱数発生部が新たな乱数Rを発生させ、再符号化部が新たな再符号化を行い、演算実行部が新たに再符号化された数値Dを用いて第2の数値Cを求める演算を行うようにしたものである。
(10) 本発明の第10の態様は、上述した第1〜第9の態様に係る暗号処理装置をICカードに内蔵させるようにしたものである。
(11) 本発明の第11の態様は、上述した第1〜第9の態様に係る暗号処理装置を、コンピュータに専用のプログラムを組み込むことにより構成したものである。
本発明によれば、秘密鍵となる数値Dは、冗長なk進数で表現したランダムなn桁のデータに再符号化された上で、暗号化もしくは復号化に用いる演算式に適用される。冗長なk進数を用いれば、同じ数値Dを複数通りの表記方法で表現することができるので、同じ数値Dを用いて同じ演算式に基づく演算を繰り返し行ったとしても、トランジスタ回路によって行われる具体的な演算プロセスは、毎回、異なることになる。このため、SPAやDPAといった電力解析による統計的手法を施しても、秘密鍵となる数値Dを推定することは困難になる。したがって、暗号化もしくは復号化に用いる演算式自体に改変を加えることなしに、サイドチャネル攻撃を防ぐことができる。
以下、本発明を図示する実施形態に基づいて説明する。
<<< §1.一般的なRSA暗号演算 >>>
はじめに、説明の便宜上、一般的なRSA暗号演算を例にとって、ICカード内部で行われる暗号処理を説明する。RSA暗号は、桁数が大きい合成数の素因数分解問題が困難であることを安全性の根拠とした公開鍵暗号の一つである。図1に、一般的な公開鍵暗号方式を用いた暗号化および復号化のプロセスを示すブロック図を示す。図示のとおり、暗号化の対象となる平文Mは、鍵Dを用いて暗号化され暗号文Cに変換される。一方、この暗号文Cは別な鍵Eを用いて復号化され平文Mに戻される。通常、鍵D,Eの一方を公開鍵、他方を秘密鍵として用いる。
図2は、一般的なRSA暗号方式で利用されているべき乗剰余演算式を示す図である。式(1)は、平文Mを暗号化して暗号文Cを生成するための演算式を示している。平文Mも暗号文Cも実際には何らかの数値として与えられる。数値Dは暗号化のための鍵であり、Zは所定の定数である。一方、式(2)は、暗号文Cを復号化して平文Mを生成するための演算式を示している。数値Eは復号化のための鍵であり、数値Dに応じて一義的に定まる値になる。Zは式(1)で用いた定数である。
なお、平文Mと暗号文Cという区別や、暗号化や復号化という区別は、利用者サイドから見た便宜上の区別であって、数学的には、両者は全く対等である。図2の式(1)は、単に、数値Mに対する演算により数値Cが得られることを示すものであり、図2の式(2)は、単に、数値Cに対する演算により数値Mが得られることを示すものである。数値C,Mのいずれを平文、いずれを暗号文と呼ぶかは、利用者側の便宜であり、式(1),(2)のいずれを暗号化、いずれを復号化と呼ぶかも、利用者側の便宜である。したがって、本願明細書では、以下、便宜上、式(1)を利用して「平文Mを暗号化して暗号文Cを得る」例を述べることにするが、もちろん本発明は、式(2)を利用して「暗号文Cを復号化して平文Mを得る」例にも適用可能である。
図3は、ICカード10と外部装置20との間の認証にRSA暗号方式を利用した一般的なシステムを示すブロック図である。図示のとおり、ICカード10内には、制御ユニット11と暗号処理装置12とが設けられており、外部装置20内には、認証処理部21と暗号処理装置22とが設けられている。ICカード10が接触型の場合は、表面に設けられた接触端子を介して外部装置20に対して電気的な接続が行われ、両者間での交信が行われる。また、ICカード10が非接触型の場合は、外部装置20の交信範囲内に入れることにより、両者間で無線交信が行われる。
なお、実際には、ICカード10や外部装置20には、図3に示されている構成要素の他にも、様々な要素が組み込まれている。図3にブロックとして示した構成要素は、外部装置20によってICカード10の認証処理を行うのに必要な構成要素のみである。
外部装置20は、ICカード10と交信を開始すると、ICカード10が正規のデバイスであるか否かの認証を行う。具体的には、まず、外部装置20側の認証処理部21によって、第1の数値Mを発生させ(通常は、乱数が用いられる)、これを所定の認証コマンドとともにICカード10側に送信する。この認証コマンドおよび数値Mを受信した制御ユニット11は、暗号処理装置12に数値Mを引き渡し、暗号化の処理を実行させる。暗号処理装置12は、与えられた第1の数値Mに対して、秘密鍵となる数値Dを用いた演算(この例では、図2の式(1)に示す演算)を実行して第2の数値Cを生成する。制御ユニット11は、外部装置20へ、生成された数値Cを認証コマンドに対するレスポンスとして送信する。
一方、外部装置20は、発生させた第1の数値Mを暗号処理装置22に引き渡し、暗号化の処理を実行させる。暗号処理装置22は、与えられた第1の数値Mに対して、秘密鍵となる数値Dを用いた演算(この例では、やはり図2の式(1)に示す演算)を実行して第2の数値Cを生成する。認証処理部21は、ICカード10側から送信されてきた数値Cと、暗号処理装置22によって生成された数値Cとを比較し、両者が一致すれば、ICカード10を正規のデバイスであると認証することができる。あるいは、ICカード10側から送信されてきた数値Cについて、暗号処理装置22に、図2の式(2)に示す復号化の演算を実行させて数値Mを生成させ、この数値Mが、認証処理部21が最初に生成した数値Mに一致することを確認してもよい。
同様の方法で、ICカード10側が、現在交信中の外部装置20を正規の装置であると認証することもできる。こうして、両者間で互いに交信相手が正規の相手であることが認証できれば、両者間で様々な処理のための交信が行われる。その際、必要に応じて、交信対象となるデータに対して、秘密鍵となる数値Dを用いた暗号化や復号化を行うことができる。
上述した認証処理や暗号化/復号化処理は、既にICカードを利用したシステムにおいて広く利用されている処理である。秘密鍵となる数値Dは、ICカード10内の暗号処理装置12内に格納されており、通常、外部には決して読み出されることがない仕様になっている。したがって、たとえICカード10が不正者の手元に渡ったとしても、秘密鍵Dが不正者に知られることはないはずである。しかしながら、実際には、既に述べたように、単純電力解析(SPA)や電力差分解析(DPA)といった「サイドチャネル攻撃」により、秘密鍵Dの値を推定されてしまう可能性がある。
特に、暗号処理装置12の内部で行われる演算が、第1の数値Mに対する秘密鍵Dのべき乗「M」の項を含む演算の場合、秘密鍵Dの値が推定される危険性が高くなる。これは、Mの項を含む所定の演算式に基づく演算が、実際には、数値Dの各桁を用いた繰り返し演算によって実行されるため、ICカード10の消費電力の時間変化を統計的に解析することにより、数値Dの各桁の値の推定を許してしまうためである。
たとえば、前述したRSA暗号方式の場合、暗号処理装置12の内部では、図2の式(1)に示す演算、すなわち、Mを所定の数値Zで除したときのべき乗剰余を示す演算式C=MmodZに基づく演算を実行する必要がある。ところが、このようなべき乗剰余演算をコンピュータで実行するには、実際には、図4に示すような等価演算式を用いた演算を行う必要がある。すなわち、演算式C=MmodZに基づく数値Cは、実際には、
C=(( .....(((1*Md[n−1]
*Md[n−2]modZ)
*Md[n−3]modZ)
.....
*Md[2]modZ)
*Md[1]modZ)
*Md[0]modZ
なる等価演算式を用いて、括弧の内側の演算から順番に実行することによって得られる。ここで、べき乗項として記載されているd[n−1],d[n−2],d[n−3],... ,d[2],d[1],d[0]は、数値Dを2進表現したときのn桁の各ビット(上位桁側から順に並べたもの)であり、「*」は乗算記号である。
図5は、図4に示す演算式おいて、22[10進]なる秘密鍵Dを2進表記にして適用した場合の具体的な演算手順を示す図である。すなわち、22[10進]を2進表記すれば、「10110」となるので、上の等価演算式により数値Cの値を求めるには、n=5として、d[4]=1,d[3]=0,d[2]=1,d[1]=1,d[0]=0を代入すればよい。
図5の下段に示す等価演算式は、このような代入を行った例である。括弧の内側の演算から順番に実行すれば、まず、(1*Mが実行され、続いて、その演算結果をXとして、(X*MmodZ)が実行され、続いて、その演算結果をXとして、(X*MmodZ)が実行され、続いて、その演算結果をXとして、(X*MmodZ)が実行され、最後に、その演算結果をXとして、(X*MmodZ)が実行される。但し、M=Mであるのに対して、M=1であるから、(X*MmodZ)を演算するときと、(X*MmodZ)を演算するときとでは、演算負担が大きく異なり、消費電力に差が生じることになる。したがって、「サイドチャネル攻撃」により、ICカード内部の消費電力をモニタし、これを統計的に解析すれば、秘密鍵Dを構成するビットの0と1の並び順を推定されてしまう可能性がある。
一方、数値Dを2進数以外の数値表記で取り扱った演算も可能であるが、「サイドチャネル攻撃」に対して脆弱性を有することに変わりはない。たとえば、図6は、4進数の秘密鍵Dを用いたべき乗剰余演算を暗号処理装置の内部で実行する際の実際の演算式の一例を示す図である。すなわち、数値Dを4進表現したときの全n桁の数値列を、d[n−1],d[n−2],d[n−3],... ,d[2],d[1],d[0]とすれば、演算式C=MmodZに基づく数値Cは、実際には、
C=(( .....(((1*Md[n−1]
*Md[n−2]modZ)
*Md[n−3]modZ)
.....
*Md[2]modZ)
*Md[1]modZ)
*Md[0]modZ
なる等価演算式を用いて、括弧の内側の演算から順番に実行することによって得られる。
図7は、図6に示す演算式おいて、22[10進]なる秘密鍵Dを4進表記にして適用した場合の具体的な演算手順を示す図である。すなわち、22[10進]を4進表記すれば、「112」となるので、上の等価演算式により数値Cの値を求めるには、n=3として、d[2]=1,d[1]=1,d[0]=2を代入すればよい。
図7の下段に示す等価演算式は、このような代入を行った例である。括弧の内側の演算から順番に実行すれば、まず、(1*Mが実行され、続いて、その演算結果をXとして、(X*MmodZ)が実行され、最後に、その演算結果をXとして、(X*MmodZ)が実行される。4進表記の場合、秘密鍵Dを構成する各桁は、0〜3のいずれかの数値をとることになるが、M=M*M*M、M=M*M、M=M、M=1であるから、各桁のとる数値に応じて消費電力に差が生じることになり、やはり「サイドチャネル攻撃」により、秘密鍵Dを構成する各桁が、0〜3のいずれであるかを推定されてしまう可能性がある。
このような「サイドチャネル攻撃」に対する脆弱性は、数値Dを何進法で表記したとしても、根本的には解消することはできない。図8は、一般にk進数の秘密鍵Dを用いたべき乗剰余演算を暗号処理装置の内部で実行する際の実際の演算式の一例を示す図である。すなわち、数値Dをk進表現したときの全n桁の数値列を、d[n−1],d[n−2],d[n−3],... ,d[2],d[1],d[0]とすれば、演算式C=MmodZに基づく数値Cは、実際には、
C=(( .....(((1*Md[n−1]
*Md[n−2]modZ)
*Md[n−3]modZ)
.....
*Md[2]modZ)
*Md[1]modZ)
*Md[0]modZ
なる等価演算式を用いて、括弧の内側の演算から順番に実行することによって得られるが、各桁のとる数値に応じて消費電力に差が生じることに変わりはなく、「サイドチャネル攻撃」により、秘密鍵Dを構成する各桁が推定されてしまう可能性がある。
以上、一般的なRSA暗号方式によるべき乗剰余演算を実行する場合に、「サイドチャネル攻撃」による脆弱性が生じることを説明したが、このような問題は、Diffie Hellman暗号方式、EL Gamal暗号方式など、他のべき乗剰余演算を利用する暗号方式にも共通した問題である。また、最近では、楕円曲線暗号方式も利用されているが、この楕円曲線暗号方式に対しても、「サイドチャネル攻撃」による脆弱性が生じることに変わりはない。本発明は、このような様々な暗号方式における「サイドチャネル攻撃」に対処することが可能な新たな手法を提案するものである。
<<< §2.本発明の基本概念 >>>
本発明の重要な特徴は、秘密鍵となる数値Dを、冗長なk進数で表現した上で、実際の演算に利用する点にある。いま、図9に示すように、数値Dを任意のk進数で表現することを考えよう。図において、d[n−1],d[n−2],d[n−3],... ,d[2],d[1],d[0]は、それぞれ数値Dをk進表現したときの全n桁の数値列であり、この全n桁の数値列として表現される数値Dの値は、図示のとおり、
D=d[n−1]*kn−1
+d[n−2]*kn−2
+d[n−3]*kn−3
.....
+d[2]*k
+d[1]*k
+d[0]*k
となる。
ここで、第i桁目の数値をd[i]とすれば、
0≦d[i]≦dmax
であり、通常のk進表現の場合は、dmax=k−1に設定される。たとえば、2進表現の場合であれば、dmax=1に設定されるので、各桁の数値d[i]は0または1のいずれかである。4進表現の場合は、dmax=3に設定されるので、各桁の数値d[i]は0〜3のいずれかになり、7進表現の場合は、dmax=6に設定されるので、各桁の数値d[i]は0〜6のいずれかになる。
これに対して、冗長k進表現の場合は、dmax>k−1に設定される。たとえば、冗長2進表現の場合であれば、dmax=2以上に設定されることになる。図10(a) に示すとおり、通常2進表現の場合、dmax=1であるから、各桁の数値d[i]は、
0≦d[i]≦1(各桁の値は0〜1)
であるが、冗長2進表現の場合、dmax=3に設定すれば、図10(a) に示すとおり、
0≦d[i]≦3(各桁の値は0〜3)
となる。
もちろん、冗長2進表現におけるdmaxは2以上であればいくつに設定してもよい。dmax=5に設定すれば、各桁の数値d[i]は0〜5のいずれかになる。同様に、冗長4進表現の場合であれば、dmax=4以上に設定すればよいので、たとえば、dmax=7に設定すれば、各桁の数値d[i]は0〜7のいずれかになり、dmax=9に設定すれば、各桁の数値d[i]は0〜9のいずれかになる。
ここで重要な点は、冗長k進表現を用いると、同じ数値Dを複数通りの表記方法で表現することができる点である。図11は、数値D=22[10進]を、通常2進表現および冗長2進表現で表した例を示す図である。図11(a) の「10110」が、通常2進表現による表記方法を示しているのに対して、図11(b1)の「10022」、図11(b2)の「01222」、図11(b3)の「02030」は、いずれも冗長2進表現による表記方法を示している(この他にも、数値D=22[10進]の冗長2進表記方法は存在する。もちろん、図11(a) の「10110」も、冗長2進表現の一形態に含まれることになる)。各表記方法を比較すると、5桁の数字の構成は互いに異なっているが、右側の計算結果を見れば明らかなように、いずれも同一の数値D=22[10進]を示す点では共通している。
図12は、4進数の例である。図12(a) に示すとおり、通常4進表現の場合、dmax=3であるから、各桁の数値d[i]は、
0≦d[i]≦3(各桁の値は0〜3)
であるが、冗長4進表現の場合、たとえばdmax=7に設定すれば、図12(b) に示すとおり、
0≦d[i]≦7(各桁の値は0〜7)
となる。
図13は、数値D=22[10進]を、通常4進表現および冗長4進表現で表した例を示す図である。図13(a) の「112」が、通常4進表現による表記方法を示しているのに対して、図13(b1)の「106」、図13(b2)の「052」は、いずれも冗長4進表現による表記方法を示している(この他にも、数値D=22[10進]の冗長4進表記方法は存在する。もちろん、図13(a) の「112」も、冗長4進表現の一形態に含まれることになる)。各表記方法を比較すると、3桁の数字の構成は互いに異なっているが、右側の計算結果を見れば明らかなように、いずれも同一の数値D=22[10進]を示す点では共通している。
このように、同一の数値D=22[10進]であっても、冗長k進数を用いた表記を行えば、複数通りの表記方法で表現することができるので、演算を行う際に、複数通りの表記方法のいずれかを選択して用いるようにすれば、同じ数値Dを用いて同じ演算式に基づく演算を繰り返し行ったとしても、トランジスタ回路によって行われる具体的な演算プロセスは、毎回、異なることになる。このため、SPAやDPAといった電力解析による統計的手法を施しても、秘密鍵となる数値Dを推定することは困難になる。これが本発明の基本原理である。
§1で述べたとおり、図5は、22[10進]なる秘密鍵Dの通常2進表記「10110」を用いて、数値Cを求める演算を行う手順を示す図である。これに対して、図14は、22[10進]なる秘密鍵Dの冗長2進表記の1つである「10022」を用いて、数値Cを求める演算を行う手順を示す図である。両者は、全く同じ演算式であり、秘密鍵Dの数値も全く同一であるから、得られる数値Cの演算結果も両者では全く同じになる。したがって、図5に示す演算の代わりに、図14に示す演算を実行しても、暗号処理演算としては何ら支障は生じない。
ところが、全く同じ数値M,D,Zを与えて、全く同じ演算式に基づく演算を実行しているにもかかわらず、図5に示す演算と図14に示す演算とでは、個々の括弧内の演算時の消費電力は異なってくる。すなわち、図5の場合、(1*Mが実行され、その演算結果をXとして(X*MmodZ)が実行され、その演算結果をXとして(X*MmodZ)が実行され、その演算結果をXとして(X*MmodZ)が実行され、その演算結果をXとして(X*MmodZ)が実行されるのに対して、図14の場合、(1*Mが実行され、その演算結果をXとして(X*MmodZ)が実行され、その演算結果をXとして(X*MmodZ)が実行され、その演算結果をXとして(X*MmodZ)が実行され、その演算結果をXとして(X*MmodZ)が実行される。
もちろん、22[10進]なる秘密鍵Dの冗長2進表記は、図11に示すとおり、他にも「01222」,「02030」等があるので、これら複数の冗長2進表記をランダムに選択して演算に利用するようにすれば、全く同じ数値M,D,Zを与えて、全く同じ演算式に基づく演算を実行しているにもかかわらず、消費電力のパターンは毎回異なることになる。したがって、ICカード内部の消費電力をモニタし、これを統計的に解析する手法を採る「サイドチャネル攻撃」が行われたとしても、得られる消費電力のパターンには画一性が失われるため、統計的な解析によって数値Dの値を推定することは困難になる。
もちろん、本発明は冗長2進表記を用いる例に限定されるものではない。§1で述べたとおり、図7には、22[10進]なる秘密鍵Dの通常4進表記「112」を用いて、数値Cを求める演算を行う手順が示されている。これに対して、図15は、22[10進]なる秘密鍵Dの冗長4進表記の1つである「106」を用いて、数値Cを求める演算を行う手順を示す図である。両者は、全く同じ演算式であり、秘密鍵Dの数値も全く同一であるから、得られる数値Cの演算結果も両者では全く同じになる。したがって、図7に示す演算の代わりに、図15に示す演算を実行しても、暗号処理演算としては何ら支障は生じない。
ところが、全く同じ数値M,D,Zを与えて、全く同じ演算式に基づく演算を実行しているにもかかわらず、図7に示す演算と図15に示す演算とでは、個々の括弧内の演算時の消費電力は異なってくる。すなわち、図7の場合、(1*Mが実行され、その演算結果をXとして(X*MmodZ)が実行され、その演算結果をXとして(X*MmodZ)が実行されるのに対して、図15の場合、(1*Mが実行され、その演算結果をXとして(X*MmodZ)が実行され、その演算結果をXとして(X*MmodZ)が実行される。
もちろん、22[10進]なる秘密鍵Dの冗長4進表記は、図13に示すとおり、他にも「106」,「052」等があるので、これら複数の冗長4進表記をランダムに選択して演算に利用するようにすれば、全く同じ数値M,D,Zを与えて、全く同じ演算式に基づく演算を実行しているにもかかわらず、消費電力のパターンは毎回異なることになり、「サイドチャネル攻撃」への対策は有効になる。しかも、暗号処理に用いる演算式は、あくまでも「C=MmodZ」という同一の演算式ですむ。このように、暗号化もしくは復号化に用いる演算式自体に改変を加えることなしに、サイドチャネル攻撃を防ぐことができる点が、本発明の重要な特徴である。
結局、本発明の本質的な技術思想は、秘密鍵となる数値Dを内蔵している演算処理装置に対して、外部から第1の数値Mを与え、当該演算処理装置の内部で、少なくとも数値Mと数値Dとを用いた演算を実行させることにより第2の数値Cを生成させ、これを外部へ出力させる暗号処理方法において、当該演算処理装置の内部で、数値Dを、1つの桁の数値dが「0≦d≦dmax(但し、dmax>k−1)」の範囲内の値をとる冗長なk進数で表現したランダムデータを生成させ、このランダムデータを用いて第2の数値Cを生成する演算を実行させる点にある。
特に、演算処理装置としてICカードを用いる場合であれば、秘密鍵となる数値Dを内蔵し、演算処理機能および乱数発生機能を有するICカードに対して、外部から第1の数値Mを与え、当該ICカードの内部で、少なくとも数値Mと数値Dとを用いた演算を実行させることにより第2の数値Cを生成させ、これを外部へ出力させる暗号処理方法において、当該ICカードの内部で、数値Dを、1つの桁の数値dが「0≦d≦dmax(但し、dmax>k−1)」の範囲内の値をとる冗長なk進数で表現したランダムデータを、乱数発生機能を用いて生成させ、このランダムデータを用いて第2の数値Cを生成する演算を実行させるようにすればよい。
<<< §3.本発明に係る暗号処理装置 >>>
図16は、本発明に係る暗号処理装置100の構成を示すブロック図である。この暗号処理装置100は、たとえば、図3に示す暗号処理装置12としてICカード10に組み込むことができる。もっとも、この図16に示す個々のブロックは、実際には、コンピュータ用のハードウエアおよびこのコンピュータに組み込まれたプログラムによって実現可能な構成要素であり、たとえば、ICカード10に、OSプログラムやアプリケーションプログラムを組み込むことによって実現されることになる。
この図3に示す暗号処理装置100の基本機能は、外部から与えられた第1の数値Mに対して、秘密鍵となる数値Dを用いた演算を行うことにより第2の数値Cを生成し、これを外部へ出力する処理を行うことである。そのため、この暗号処理装置100は、図示のとおり、第1の数値Mを外部から入力する入力部110と、生成した第2の数値Cを外部へ出力する出力部120と、第2の数値Cを生成する演算実行部130と、再符号化部140と、秘密鍵となる数値Dを格納する秘密鍵格納部150と、乱数Rを発生させる乱数発生部160と、を有している。
ここで、再符号化部140は、乱数発生部160が発生させた乱数Rを用いて、秘密鍵格納部150に格納されている数値Dを再符号化する構成要素である。再符号化は、数値Dを、1つの桁の数値dが「0≦d≦dmax(但し、dmax>k−1)」の範囲内の値をとる冗長なk進数で表現したランダムなn桁のデータとして表現することによって行われる。
たとえば、秘密鍵格納部150に格納されている数値Dが、D=22[10進]であり(図示の例では、通常の2進数「10110」の形で、秘密鍵格納部150に格納されていることになる)、これを冗長な2進数で表現した形に再符号化する場合(演算実行部130が、2進表記された秘密鍵Dを用いて演算を行う場合)であれば、再符号化部140は、乱数Rを利用して、図11(b1)の「10022」、図11(b2)の「01222」、図11(b3)の「02030」等の複数通りの「D=22[10進]に対応する冗長2進表記」(通常2進表記の「10110」を含む)の中の1つをランダムに選択することにより、冗長2進表記されたn桁の数値からなるデータを生成する処理を行う。このような再符号化の具体的な方法については、§4で述べる。
演算実行部130は、少なくとも、入力部110が入力した数値Mと、再符号化部140によって再符号化された数値D(冗長k進表記されたn桁の数値)と、を用いた所定の演算を行うことにより、第2の数値Cを生成する構成要素である。ここでは、前述したとおり、RSA暗号方式の実施例が示されているので、演算実行部130は、予め設定されている所定の定数Zを用いて、演算式C=MmodZに基づく演算を行うことにより、第2の数値Cを求めることになる。
既に述べたとおり、この演算は、実際には、図8に示すような等価演算式を用いた繰り返し演算によって行われる。すなわち、演算実行部130は、再符号化部140によって再符号化されたn桁のデータの中から1桁の数値dを抽出して用いる演算を、順番に繰り返し実行することにより第2の数値Cを求めることになる。
なお、ここに示す実施形態の場合、入力部110が第1の数値Mを外部から入力するたびに、乱数発生部160が新たな乱数Rを発生させ、再符号化部140が新たな再符号化を行い、演算実行部130が新たに再符号化された数値Dを用いて第2の数値Cを求める演算を行うようにしている。したがって、第1の数値Mが与えられるたびに、数値Dを構成するn桁の数値の組み合わせは一新されることになり、演算実行部130は、この一新された数値Dを用いて演算を行うことになる。
もちろん、数値Dを構成するn桁の数値の組み合わせは、必ずしも第1の数値Mを外部から入力するたびに毎回更新する必要はなく、たとえば、第1の数値Mを3回入力する度に一新する、という方法を採ってもかまわないが、「サイドチャネル攻撃」への対策を効果的にする上では、上述したように、第1の数値Mを外部から入力するたびに毎回更新するのが好ましい。
<<< §4.再符号化の具体的な方法 >>>
最後に、図16に示す再符号化部140の具体的な構成例をいくつか示すことにより、再符号化処理の具体的な手順を例示する。もっとも、以下に述べる具体例は、あくまでも実施例として示すものであり、本発明に用いる再符号化部140の構成は、これらの実施例に限定されるものではない。
<実施例1>
図17は、図16に示す暗号処理装置の再符号化部140の第1の構成例を示すブロック図である。図示のとおり、この例の場合、再符号化部140Aは、制御要素141A、数値確認要素142A、ランダムデータ生成要素143Aによって構成されている。
ランダムデータ生成要素143Aは、乱数発生部160から与えられる乱数Rを用いて「0≦d≦dmax」の範囲内の値を発生させる処理をn回繰り返すことによりn桁のランダムデータを生成する機能を果たす。ここで生成されたランダムデータは、数値確認要素142Aに与えられる。数値確認要素142Aは、ランダムデータ生成要素143Aが生成したランダムデータが、秘密鍵格納部150から読み出された数値Dと等しいか否かの判定を行い、その結果を制御要素141Aに報告する。制御要素141Aは、数値確認要素142Aが等しいとの判断を行うまで、ランダムデータ生成要素143Aにランダムデータの生成を繰り返し実行させ、数値確認要素142Aが等しいとの判断を行った際のランダムデータを再符号化したデータ(数値Dを冗長k進表記したn桁の数値)として出力する。
図18は、図17に示す再符号化部140Aの動作を説明する流れ図である。まず、ステップS11において、ランダムデータ生成要素143Aによるn桁のランダムデータ生成処理が行われる。たとえば、図11に示すように、各桁の数値が0〜3の範囲をとる5桁の数値からなるランダムデータを生成するのであれば、0〜3の範囲内の整数値をとる乱数を発生させる処理を5回繰り返して実行し、発生させた5つの整数を並べ、これをランダムデータとして出力すればよい。いわば、0〜dmaxまでの整数の目をもつn個のサイコロを振って、出た目をそのまま並べることにより、ランダムデータが生成されることになる。
続いて、ステップS12では、数値確認要素142による比較処理が行われる。すなわち、生成されたランダムデータが示す数値と、秘密鍵格納部150から読み出された数値Dとが比較される(図9に示す加算によって値が決定される)。そして、制御要素141Aが、ステップS13において等しいと判断されるまで、ステップS11の処理が繰り返されるような制御を行い、等しいと判断されたときには、ステップS14へと進み、そのときのランダムデータを、再符号化データとして出力することになる。
要するに、この実施例1として例示する方法は、所望の数値Dと等しくなるランダムデータが得られるまで、繰り返しサイコロを振り続ける方法ということができる。この方法は、非常に単純な方法であるが、桁数nの値やkの値が大きい場合には、数値Dに等しくなるランダムデータが得られるまで長時間を要することになるため、あまり好ましくない。
<実施例2>
図19は、図16に示す暗号処理装置の再符号化部140の第2の構成例を示すブロック図である。図示のとおり、この例の場合、再符号化部140Bは、制御要素141B、レジスタ142B、初期データ設定要素143B、増加補正実行要素144B、減少補正実行要素145B、桁選択要素146B、増減決定要素147Bによって構成されている。
レジスタ142Bは、再符号化プロセスの対象となるk進n桁からなるデータを一時的に保持するための構成要素である。このレジスタ142Bには、初期データ設定要素143Bによって初期値の設定が行われる。すなわち、初期データ設定要素143Bは、秘密鍵格納部150から読み出した秘密鍵D(図示の例では、2進数の数値D)を、1つの桁の数値dが「0≦d≦k−1」の範囲内の値をとる通常のk進数で表現することにより、n桁からなるデータを用意し、用意したデータを初期データとしてレジスタ142Bに設定する機能を果たす。
一方、桁選択要素146Bは、乱数発生部160が発生させた乱数Rを用いて、レジスタ142Bのn桁のうちの任意の1桁を選択桁として選択する機能を果たす。乱数Rを用いているため、n桁のうちの任意の1桁がランダムに選択されることになる。また、増減決定要素147Bは、乱数発生部160が発生させた乱数Rを用いて、増加補正もしくは減少補正のいずれかを決定する機能を果たす。こちらも乱数Rを用いているため、増加補正もしくは減少補正がランダムに選択されることになる。増加補正と減少補正との選択比率は、1:1にする必要はない。実用上は、増加補正の選択頻度が減少補正の選択頻度より高くなるような設定を行うのが好ましい。
増加補正実行要素144Bは、増減決定要素147Bにより増加補正が決定された場合に、桁選択要素146Bが選択した選択桁の数値dについてd<dmaxが満たされ、かつ、他の桁の調整によって所定の増加補正分δ(但し、δ≦dmax−d)を相殺することが可能であることを条件として、選択桁に増加補正分δを加え、他の桁を調整して増加補正分δを相殺する補正を行う構成要素である。
これに対して、減少補正実行要素145Bは、増減決定要素147Bにより減少補正が決定された場合に、桁選択要素146Bが選択した選択桁の数値dについてd≠0が満たされ、かつ、他の桁の調整によって所定の減少補正分δ(但し、δ≦d)を相殺することが可能であることを条件として、選択桁から減少補正分δを減じ、他の桁を調整して減少補正分δを相殺する補正を行う構成要素である。
そして、制御要素141Bは、所定の条件が満たされるまで、桁選択要素146Bによる桁選択、増減決定要素147Bによる増減決定、増加補正実行要素144Bもしくは減少補正実行要素145Bによる補正を繰り返し実行し、上記所定の条件が満たされたときのレジスタ142B内のn桁のデータを、再符号化したデータとして出力する構成要素である。
ここに示す再符号化部140Bによる再符号化処理の基本方針は、まず、通常のk進数で数値Dを表現したn桁のデータをレジスタ142Bに用意し、このレジスタ内のランダムに選択された桁の数値を、冗長k進表現で許容可能な範囲内で増減補正し、当該増減分を別な桁の数値の増減で相殺するような調整を繰り返し実行する、というものである。選択桁の数値の増減は、別な桁の数値の増減で相殺されるため、レジスタ内に保持されているデータの値は常に数値Dに維持される。
図20は、図19に示す再符号化部140Bの動作を説明する流れ図である。まず、ステップS21では、初期データ設定要素143Bによって初期値の設定が行われる。すなわち、秘密鍵としての数値Dに対応する通常k進表現によるn桁のデータがレジスタ142Bに設定される。
続いて、ステップS22では、桁選択要素146Bによる桁選択が行われ、続くステップS23では、増減決定要素147Bによって、増加補正もしくは減少補正のいずれかが決定される。増加補正が決定された場合は、増加補正実行要素144Bによって、ステップS24〜S26の処理が実行され、減少補正が決定された場合は、減少補正実行要素145Bによって、ステップS27〜S29の処理が実行される。
すなわち、増加補正が決定された場合は、ステップS24において、増加補正が可能か否かの条件判断が行われ、可能と判断された場合には、ステップS25を経てステップS26へと進み増加補正が実行される。不可能と判断された場合には、ステップS25を経て増加補正を実行せずにステップS30へ進むことになる。一方、減少補正が決定された場合は、ステップS27において、減少補正が可能か否かの条件判断が行われ、可能と判断された場合には、ステップS28を経てステップS29へと進み減少補正が実行される。不可能と判断された場合には、ステップS28を経て減少補正を実行せずにステップS30へ進むことになる。
ステップS30では、この手順をここで終了するか否かの判断がなされる。すなわち、予め設定しておいた所定の終了条件が満たされたときには、手順終了との判断がなされ、ステップS31へと進むことになる。終了条件が満たされていないときには、再びステップS22からの手順が繰り返し実行される。終了条件としては、たとえば、「ステップS22からの手順が、Q回繰り返して行われること」という繰り返し回数に基づく条件を設定しておくことができる。この場合、ステップS22を実行するたびにカウンタの計数値を更新してゆき、カウンタの値がQに等しくなったら、「終了条件を満足した」との判断がなされることになる。終了条件を満足してステップS31へと進んだ場合には、その時点でレジスタに格納されているn桁の数値が、再符号化した数値D(冗長k進表記)を示すデータとして出力されることになる。
これに対して、ステップS24における条件判断はやや複雑である。基本的には、選択桁の数値dについてd<dmaxが満たされ、かつ、他の桁の調整によって所定の増加補正分δ(但し、δ≦dmax−d)を相殺することが可能である、との判断を行えばよい。前者の条件は、選択桁の数値を増加させることが可能か否かを判定するための条件である。1つの桁の数値dが「0≦d≦dmax(但し、dmax>k−1)」の範囲内の値をとる冗長k進表現を行う場合、d<dmaxでなければ、選択桁の数値をこれ以上増加させることはできない。一方、後者の条件は、選択桁の数値をδだけ増加させた場合、当該増加補正分δに対応する値を、他の桁に対する減少補正で相殺するための条件である。
図20の流れ図には、このような条件判断のより具体的な一例が示されている。すなわち、図示の例では、常に増加補正分δ=kに設定する単純な例であり、選択桁の数値dについては、d+k≦dmaxというより厳しい条件を課している。これは、選択桁の数値に増加補正分kを加えても、dmaxを越えないようにするための条件である。一方、「他の桁の調整によって増加補正分kを相殺することが可能であるか否か」という条件判断については、「選択桁の上位に0でない桁があるか否か」という条件判断を代用している。これは、k進表記されたデータの場合、選択桁の数値にkを加算する補正は、選択桁のすぐ上位の桁(隣接上位桁)の数値から1を減じる補正によって必ず相殺できるためである(k進表記では、選択桁の数値kは、隣接上位桁の数値1に対応する)。
このような条件を満足していると判断された場合には、ステップS26に示す増加補正が実行される。具体的には、選択桁にkを加える増加補正が行われ、隣接上位桁から1を減じる相殺処理が行われることになる(隣接上位桁が0の場合でも、更にその上位に存在する0でない桁を利用した減算が行われる)。
一方、ステップS27における条件判断は、基本的には、選択桁の数値dについてd≠0が満たされ、かつ、他の桁の調整によって所定の減少補正分δ(但し、δ≦d)を相殺することが可能である、との判断を行えばよい。前者の条件は、選択桁の数値を減少させることが可能か否かを判定するための条件である。選択桁の数値dが0である場合には、更に減少させることはできない。一方、後者の条件は、選択桁の数値をδだけ減少させた場合、当該減少補正分δに対応する値を、他の桁に対する増加補正で相殺するための条件である。
図20の流れ図には、減少補正に関する条件判断の具体的な一例が示されている。すなわち、図示の例では、常に減少補正分δ=1に設定する単純な例であり、「他の桁の調整によって減少補正分1を相殺することが可能であるか否か」という条件判断については、「隣接下位桁について、d+k≦dmax」という条件判断を代用している。これは、k進表記されたデータの場合、選択桁の数値から1を減じる補正は、選択桁のすぐ下位の桁(隣接下位桁)の数値にkを加える補正によって必ず相殺できるためである(k進表記では、選択桁の数値1は、隣接下位桁の数値kに対応する)。
このような条件を満足していると判断された場合には、ステップS29に示す減少補正が実行される。具体的には、選択桁から1を減じる減少補正が行われ、隣接下位桁にkを加える相殺処理が行われることになる。
図21は、図20の流れ図に基づく2進データの再符号化処理の一例を示す変遷図である。ここでは、1行目に示すとおり、D=22[10進]を通常2進表記した「10110」なるデータが初期データとしてレジスタに設定されているものとし、dmax=3に設定して、1つの桁の数値dが「0≦d≦3」の範囲内の値をとる冗長な2進数で表現したランダムな5桁のデータに再符号化する場合を考えてみる。なお、図において、特定桁の上に示す(+)は、当該桁が増加補正の対象となる選択桁であることを示し、特定桁の上に示す(−)は、当該桁が減少補正の対象となる選択桁であることを示すものとする。
いま、図の2行目に示すように、右から2桁目について増加補正を行う選択が行われたとすると、当該選択は、図20のステップS24の条件を満たしている。すなわち、選択桁の数値dは1であり、k=2、dmax=3であるから、「d+k≦dmax」なる条件を満たし、しかも選択桁の上位には、0でない桁が存在している。そこで、ステップS26の増加補正が実行され、図の3行目に示すように、第1回目の変遷が生じる。レジスタに得られている「10030」は、冗長2進数であり、その値はD=22[10進]のまま変わりない。
次に、図の4行目に示すように、右から4桁目について増加補正を行う選択が行われたとすると、当該選択も、図20のステップS24の条件を満たしている。すなわち、選択桁の数値dは0であり、k=2、dmax=3であるから、「d+k≦dmax」なる条件を満たし、しかも選択桁の上位には、0でない桁が存在している。そこで、ステップS26の増加補正が実行され、図の5行目に示すように、第2回目の変遷が生じる。レジスタに得られている「02030」は、冗長2進数であり、その値はD=22[10進]のまま変わりない。
続いて、図の6行目に示すように、右から5桁目について増加補正を行う選択が行われたとすると、当該選択は、図20のステップS24の条件を満たさない。すなわち、選択桁の数値dは0であり、k=2、dmax=3であるから、「d+k≦dmax」なる条件を満たすものの、選択桁の上位には、0でない桁は1つも存在しない。そこで、ステップS25からステップS30を経てステップS22へと戻り、再度の選択が行われる。ここでは、図の7行目に示すように、右から4桁目について増加補正を行う選択が行われたとすると、当該選択は、やはり図20のステップS24の条件を満たさない。すなわち、選択桁の数値dは2であり、k=2、dmax=3であるから、「d+k≦dmax」なる条件を満たさず、また、選択桁の上位には、0でない桁は1つも存在しない。そこで、ステップS25からステップS30を経てステップS22へと戻り、再度の選択が行われる。
そこで、図の8行目に示すように、右から1桁目について増加補正を行う選択が行われたとすると、当該選択は、図20のステップS24の条件を満たしている。すなわち、選択桁の数値dは0であり、k=2、dmax=3であるから、「d+k≦dmax」なる条件を満たし、しかも選択桁の上位には、0でない桁が存在している。そこで、ステップS26の増加補正が実行され、図の9行目に示すように、第3回目の変遷が生じる。レジスタに得られている「02022」は、冗長2進数であり、その値はD=22[10進]のまま変わりない。
次に、図の10行目に示すように、右から3桁目について減少補正を行う選択が行われたとすると、選択桁の数値dは0であるから、当該選択は、図20のステップS27の条件を満たさない。そこで、ステップS28からステップS30を経てステップS22へと戻り、再度の選択が行われる。ここでは、図の11行目に示すように、右から2桁目について減少補正を行う選択が行われたとすると、当該選択は、やはり図20のステップS27の条件を満たさない。すなわち、選択桁の数値dは2であるから、d≠0という条件を満たすものの、隣接下位桁(すなわち、右から1桁目)の数値d=2であるあるから、隣接下位桁について「d+k≦dmax」なる条件を満たさないことになる。そこで、ステップS28からステップS30を経てステップS22へと戻り、再度の選択が行われる。
今度は、図の12行目に示すように、右から4桁目について減少補正を行う選択が行われたとすると、当該選択は、図20のステップS27の条件を満たしている。すなわち、選択桁の数値dは2であるから、d≠0という条件を満たし、隣接下位桁(すなわち、右から3桁目)の数値d=0であるあるから、隣接下位桁について「d+k≦dmax」なる条件も満たしている。そこで、ステップS29の減少補正が実行され、図の13行目に示すように、第4回目の変遷が生じる。レジスタに得られている「01222」は、冗長2進数であり、その値はD=22[10進]のまま変わりない。
このような変遷プロセスを実行してゆき、ステップS30の終了条件が満足された時点でレジスタに格納されていた5桁の数値が、再符号化した数値D(冗長2進表記)を示すデータとして出力されることになる。いずれの場合も、その値はD=22[10進]のまま変わりない。
もうひとつ、4進の場合の実例を提示しておく。図22は、図20の流れ図に基づく4進データの再符号化処理の一例を示す変遷図である。ここでは、1行目に示すとおり、D=22[10進]を通常4進表記した「112」なるデータが初期データとしてレジスタに設定されているものとし、dmax=7に設定して、1つの桁の数値dが「0≦d≦7」の範囲内の値をとる冗長な4進数で表現したランダムな3桁のデータに再符号化する場合を考えてみる。
まず、図の2行目に示すように、右から2桁目について減少補正を行う選択が行われたとすると、当該選択は、図20のステップS27の条件を満たしている。すなわち、選択桁の数値dは1であるから、d≠0という条件を満たし、隣接下位桁(すなわち、右から1桁目)の数値d=2であるあるから、隣接下位桁について「d+k≦dmax」なる条件も満たしている。そこで、ステップS29の減少補正が実行され、図の3行目に示すように、第1回目の変遷が生じる。レジスタに得られている「106」は、冗長4進数であり、その値はD=22[10進]のまま変わりない。
次に、図の4行目に示すように、再び右から2桁目について減少補正を行う選択が行われたとすると、選択桁の数値dは0であるから、当該選択は、図20のステップS27の条件を満たさない。そこで、ステップS28からステップS30を経てステップS22へと戻り、再度の選択が行われる。ここでは、図の5行目に示すように、右から3桁目について増加補正を行う選択が行われたとすると、当該選択は、図20のステップS24の条件を満たさない。すなわち、選択桁の数値dは1であり、k=4、dmax=7であるから、「d+k≦dmax」なる条件を満たすものの、選択桁の上位には、0でない桁は1つも存在しない。そこで、ステップS25からステップS30を経てステップS22へと戻り、再度の選択が行われる。
今度は、図の6行目に示すように、右から3桁目について減少補正を行う選択が行われたとすると、当該選択は、図20のステップS27の条件を満たしている。すなわち、選択桁の数値dは1であるから、d≠0という条件を満たし、隣接下位桁(すなわち、右から2桁目)の数値d=0であるあるから、隣接下位桁について「d+k≦dmax」なる条件も満たしている。そこで、ステップS29の減少補正が実行され、図の7行目に示すように、第2回目の変遷が生じる。レジスタに得られている「046」は、冗長4進数であり、その値はD=22[10進]のまま変わりない。
このような変遷プロセスを実行してゆき、ステップS30の終了条件が満足された時点でレジスタに格納されていた3桁の数値が、再符号化した数値D(冗長4進表記)を示すデータとして出力されることになる。いずれの場合も、その値はD=22[10進]のまま変わりない。
以上、図20のステップS24,S27に例示された条件を用いた例を述べたが、前述したとおり、この例は、増加補正の場合の増加補正量δを常にkとし、減少補正の場合の減少補正量δを常に1とし、しかも、隣接上位桁もしくは隣接下位桁の数値を調整することによってのみ、増減量の相殺を行う、というかなり限定的な運用を行う例である。したがって、実用上は、より柔軟な条件設定を行えば、より柔軟な増減補正を行うことも可能である。
図22の8行目以下に示す例は、このように、より柔軟な増減補正を行った例である。たとえば、8行目には、右から2桁目について、増加補正量δ=1とする増加補正を行う選択が行われた例が示されている。第3回目の変遷結果として9行目に示されているとおり、このような増加補正は、実際に可能である。この例では、選択桁の数値を1だけ増加させ、これを相殺するために、隣接下位桁(右から1桁目)の数値から4を減じる調整が行われている。レジスタに得られている「052」は、冗長4進数であり、その値はD=22[10進]のまま変わりない。
続く10行目には、右から3桁目について、増加補正量δ=1とする増加補正を行う選択が行われた例が示されている。第4回目の変遷結果として11行目に示されているとおり、このような増加補正は、実際に可能である。この例では、選択桁の数値を1だけ増加させ、これを相殺するために、隣接下位桁(右から2桁目)の数値から4を減じる調整が行われている。レジスタに得られている「112」は、初期データと同一のデータであり、通常4進の形式をとっているが、これも冗長4進数の表現形態の1つであることに変わりはない。
次の12行目には、右から1桁目について、増加補正量δ=4とする増加補正を行う選択が行われた例が示されており、第5回目の変遷結果として13行目に示されているとおり、選択桁の数値を4だけ増加させ、これを相殺するために、隣接上位桁(右から2桁目)の数値から1を減じる調整が行われている。レジスタに得られている「106」は、第1回目の変遷結果と同一のデータである。ただ、第1回目の変遷結果は、右から2桁目についての減少補正の結果として得られたデータであったのに対し、第5回目の変遷結果は、右から1桁目についての増加補正の結果として得られたデータである。
<実施例3>
図23は、図16に示す暗号処理装置の再符号化部140の第3の構成例を示すブロック図である。図示のとおり、この例の場合、再符号化部140Cは、冗長データ生成要素141C、数値B生成要素142C、数値A生成要素143C、数値D保持要素144C、数値E生成要素145Cによって構成されている。
ここに示す再符号化部140Cによる再符号化処理の基本方針は、まず、数値Dを、D=A+Bを満たすような2つの数値A,Bに分け、これら数値A,Bを通常2進表記し、数値Aの特定ビット部分と数値Bの特定ビット部分とを、桁を若干ずらして加え合わせることにより、冗長データの1桁の数値を決定する、というものである。
サイドチャネル攻撃を防ぐためには、統計的な解析を行っても、秘密鍵Dに関する手掛かりが得られないようにするのが最も効果的である。そのためには、冗長k進表現によって再符号化したデータを構成するn桁の数値が、完全にランダムに選択された数値になるようにするのが好ましい。別言すれば、n桁の数値のそれぞれについて、0〜dmaxの間の数値の出現頻度が一様になるようにするのが理想的である。上述した実施例2の方法は、変遷プロセスの出発点となる初期データとして、通常のk進データを用いているため、0〜dmaxの間の数値の出現頻度に偏りが生じやすい。
これに対して、ここで述べる実施例3の方法によれば、0〜dmaxの間の数値の出現頻度を一様にできるメリットが得られる。この点において、ここで述べる実施例3の方法は、本願発明者が最も好ましい実施例と考えている方法である。但し、この方法は、任意の整数mについて、k=2、dmax=22m−1という条件下での再符号化が前提となるので、冗長2進数において、各桁の数値が0〜22m−1の範囲の値をとる、という前提条件が必要になる。たとえば、m=1に設定した場合、各桁の数値が0〜3の範囲の値をとる冗長2進数による再符号化を前提としたものになり、m=2に設定した場合、各桁の数値が0〜15の範囲の値をとる冗長4進数による再符号化を前提としたものになる。
図23において、数値D保持要素144Cは、秘密鍵格納部150から読み出した数値Dを、m×nビット(m,nは整数)の2進数として保持する構成要素であり、数値E生成要素145Cは、乱数発生部160が発生した乱数Rを用いて、「E<D」を満足する任意の数値Eをm×nビットの2進数として生成する構成要素である。また、数値A生成要素143Cは、数値Eの下位mビット(最下位側のmビット)を0に置換することにより、新たな数値Aを生成する構成要素であり、数値B生成要素142Cは、B=D−Aなる演算により、m×nビットの2進数からなる数値Bを生成する構成要素である。
一方、冗長データ生成要素141Cは、数値Aを構成するビットの下位側から数えて第(m×(i+1))ビット目から下位に向かって連続するmビット分の数値を上位ビット、数値Bを構成するビットの下位側から数えて第(m×i)ビット目から下位に向かって連続するmビット分の数値を下位ビット、とする2mビットからなる数値(但し、i=1〜nとし、数値Aについては、上位側にmビット分の0を補う)を、下位側から数えて第i番目の桁とするn桁のデータを生成し、これを冗長な2進数で表現した数値Dを示すデータとして出力する構成要素である。
図24は、図23に示す再符号化部140Cの動作を説明する流れ図である。ステップS41は、数値D保持要素144Cが行う処理を示しており、数値Dが、m×nビット(m,nは整数)の2進数として用意される。ステップS42は、数値E生成要素145Cが行う処理を示しており、乱数Rを用いて、「E<D」を満足する任意の数値Eが、m×nビットの2進数として生成される。なお、ここに示す数値Eと、図1,図2に示す鍵Eとは、たまたま同じ符号を用いているが、両者は全く無関係な値である。ステップS43は、数値A生成要素143Cが行う処理を示しており、数値Eの下位mビット(最下位側のmビット)を0に置換することにより、新たな数値Aが生成される。ステップS44は、数値B生成要素142Cが行う処理を示しており、B=D−Aなる演算により、m×nビットの2進数からなる数値Bが生成される。
更に、ステップS45は、冗長データ生成要素141Cが行う処理を示しており、数値A,Bの各ビットを組み合わせることにより、n桁の冗長2進数からなるデータが生成される。具体的には、上述したとおり、数値Aを構成するビットの下位側から数えて第(m×(i+1))ビット目から下位に向かって連続するmビット分の数値を上位ビット、数値Bを構成するビットの下位側から数えて第(m×i)ビット目から下位に向かって連続するmビット分の数値を下位ビット、とする2mビットからなる数値(但し、i=1〜nとし、数値Aについては、上位側にmビット分の0を補う)を、下位側から数えて第i番目の桁とするn桁のデータが生成される。
以上、一般論として、図23に示す再符号化部140Cの動作を説明したが、続いて、具体的な数値Dを例示して、この動作を詳細に説明する。
図25は、図24の流れ図に基づく2進データの再符号化処理の一例を示す変遷図である。ここでは、m=1,n=4に設定した例が示されている。m=1の例であるため、k=2、dmax=3という設定が前提となる(すなわち、各桁が0〜3の値をとる冗長2進表記による再符号化が前提となる)。
まず、ステップS41では、数値Dが、m×nビットの2進数として用意される。ここでは、D=11[10進]なる数値が、「1011」という4ビットの通常2進数で用意されている場合を考える。続くステップS42では、乱数Rを用いて、「E<D」を満足するm×nビットの2進数として、数値Eが生成される。ここでは、図示のとおり、「0111」なる通常2進数で表現された数値Eが生成されたものとしよう。次のステップS43では、数値Eの下位mビットを0に置換することにより、新たな数値Aが生成される。この例では、m=1であるから、数値E「0111」の下位1ビットを0に置換することにより、数値A「0110」が生成されることになる。そして、ステップS44では、B=D−Aなる演算により、m×nビットの2進数からなる数値Bが生成される。この例では、B=D−Aなる演算により、4ビットの2進数からなる数値B「0101」が生成されることになる。
かくして、2つの数値A「0110」,数値B「0101」が生成されたが、これら2つの数値A,Bは、元の数値Dを2つに分割した値になっている。別言すれば、A+B=Dである。また、数値Aの下位mビット(1ビット)が0である点も留意すべきである。
図25の下段には、このような具体的な数値A「0110」,数値B「0101」を用いた場合のステップS45の処理が模式的に示されている。ステップS45の処理は、前述したとおり、数値Aを構成するビットの下位側から数えて第(m×(i+1))ビット目から下位に向かって連続するmビット分の数値を上位ビット、数値Bを構成するビットの下位側から数えて第(m×i)ビット目から下位に向かって連続するmビット分の数値を下位ビット、とする2mビットからなる数値(但し、i=1〜nとし、数値Aについては、上位側にmビット分の0を補う)を、下位側から数えて第i番目の桁とするn桁のデータを生成する、というものである。
この処理を、m=1,i=1という具体的な事例に適用すれば、数値Aを構成するビットの下位側から数えて第2ビット目から下位に向かって連続する1ビット分の数値を上位ビット、数値Bを構成するビットの下位側から数えて第1ビット目から下位に向かって連続する1ビット分の数値を下位ビット、とする2ビットからなる数値を、下位側から数えて第1番目の桁とする、ことになる。図示のとおり、この場合、上位ビットは「1」、下位ビットは「1」となるので、「11」なる2ビットからなる数値「3」が、下位側から数えて第1番目の桁の数値になる。
同様に、m=1,i=2という具体的な事例に適用すれば、数値Aを構成するビットの下位側から数えて第3ビット目から下位に向かって連続する1ビット分の数値を上位ビット、数値Bを構成するビットの下位側から数えて第2ビット目から下位に向かって連続する1ビット分の数値を下位ビット、とする2ビットからなる数値を、下位側から数えて第2番目の桁とする、ことになる。図示のとおり、この場合、上位ビットは「1」、下位ビットは「0」となるので、「10」なる2ビットからなる数値「2」が、下位側から数えて第2番目の桁の数値になる。
更に、m=1,i=3という具体的な事例に適用すれば、数値Aを構成するビットの下位側から数えて第4ビット目から下位に向かって連続する1ビット分の数値を上位ビット、数値Bを構成するビットの下位側から数えて第3ビット目から下位に向かって連続する1ビット分の数値を下位ビット、とする2ビットからなる数値を、下位側から数えて第3番目の桁とする、ことになる。図示のとおり、この場合、上位ビットは「0」、下位ビットは「1」となるので、「01」なる2ビットからなる数値「1」が、下位側から数えて第3番目の桁の数値になる。
最後に、m=1,i=4という具体的な事例に適用すれば、数値Aを構成するビットの下位側から数えて第5ビット目(数値Aについては、上位側に1ビット分の0を補う)から下位に向かって連続する1ビット分の数値を上位ビット、数値Bを構成するビットの下位側から数えて第4ビット目から下位に向かって連続する1ビット分の数値を下位ビット、とする2ビットからなる数値を、下位側から数えて第4番目の桁とする、ことになる。図示のとおり、この場合、上位ビットは補われた「0」、下位ビットは「0」となるので、「00」なる2ビットからなる数値「0」が、下位側から数えて第4番目の桁の数値になる。
かくして、ステップS45の処理では、「0123」という冗長2進データが生成されることになる。このデータの値は、D=11[10進]に一致する。これは、図25の下段に示されているとおり、「0123」という冗長2進データが、数値Aと数値Bとの加算(ビットをずらした合成加算)によって得られたデータであることを考えれば当然のことである。なお、数値Aの一番右のビットは加算には利用されないが、もともと数値Aの下位1ビットは0になるように設定されているので、このビットは加算対象にならなくても問題はない(ステップS43で、下位mビットを0に置換するのは、このためである)。
図26は、図24の流れ図に基づく2進データの再符号化処理の別な一例を示す変遷図である。ここでも、m=1,n=4に設定した例が示されており、k=2、dmax=3という設定が前提となる。
この例では、D=5[10進]なる数値が、「0101」という4ビットの通常2進数で用意され、「0010」なる通常2進数で表現された数値Eが生成された場合が例示されている。この場合、数値Eの下位1ビットを0に置換することにより、数値A「0010」が生成されることになる。もっとも、数値Eの下位1ビットは、もともと0であったため、実際には、数値Aは数値Eと変わりない。一方、B=D−Aなる演算により、数値B「0011」が生成されることになる。かくして、2つの数値A「0010」,数値B「0011」が生成されたが、A+B=Dになっている。
図26の下段には、このような具体的な数値A「0010」,数値B「0011」を用いた場合のステップS45の処理が模式的に示されている。最終的に、「0013」という冗長2進データが生成されることになる。このデータの値は、もとの数値D=5[10進]に一致する。
図27は、図24の流れ図に基づく4進データの再符号化処理の一例を示す変遷図である。ここでは、m=2,n=3に設定した例が示されている。m=2の例であるため、k=4、dmax=15という設定が前提となる(すなわち、各桁が0〜15の値をとる冗長4進表記による再符号化が前提となる)。
まず、ステップS41では、数値Dが、m×nビットの2進数として用意される。ここでは、D=53[10進]なる数値が、「110101」という6ビットの通常2進数で用意されている場合を考える。続くステップS42では、乱数Rを用いて、「E<D」を満足するm×nビットの2進数として、数値Eが生成される。ここでは、図示のとおり、「011010」なる通常2進数で表現された数値Eが生成されたものとしよう。次のステップS43では、数値Eの下位mビットを0に置換することにより、新たな数値Aが生成される。この例では、m=2であるから、数値E「011010」の下位2ビットを0に置換することにより、数値A「011000」が生成されることになる。そして、ステップS44では、B=D−Aなる演算により、m×nビットの2進数からなる数値Bが生成される。この例では、B=D−Aなる演算により、6ビットの2進数からなる数値B「011101」が生成されることになる。
かくして、2つの数値A「011000」,数値B「011101」が生成される。ここでも、やはりA+B=Dである。また、数値Aの下位mビット(2ビット)が0である点も留意すべきである。
図27の下段には、このような具体的な数値A「011000」,数値B「011101」を用いた場合のステップS45の処理が模式的に示されている。ステップS45の処理は、前述したとおり、数値Aを構成するビットの下位側から数えて第(m×(i+1))ビット目から下位に向かって連続するmビット分の数値を上位ビット、数値Bを構成するビットの下位側から数えて第(m×i)ビット目から下位に向かって連続するmビット分の数値を下位ビット、とする2mビットからなる数値(但し、i=1〜nとし、数値Aについては、上位側にmビット分の0を補う)を、下位側から数えて第i番目の桁とするn桁のデータを生成する、というものである。
この処理を、m=2,i=1という具体的な事例に適用すれば、数値Aを構成するビットの下位側から数えて第4ビット目から下位に向かって連続する2ビット分の数値を上位ビット、数値Bを構成するビットの下位側から数えて第2ビット目から下位に向かって連続する2ビット分の数値を下位ビット、とする4ビットからなる数値を、下位側から数えて第1番目の桁とする、ことになる。図示のとおり、この場合、上位ビットは「10」、下位ビットは「01」となるので、「1001」なる4ビットからなる数値「9」が、下位側から数えて第1番目の桁の数値になる。
同様に、m=1,i=2という具体的な事例に適用すれば、数値Aを構成するビットの下位側から数えて第6ビット目から下位に向かって連続する2ビット分の数値を上位ビット、数値Bを構成するビットの下位側から数えて第4ビット目から下位に向かって連続する2ビット分の数値を下位ビット、とする4ビットからなる数値を、下位側から数えて第2番目の桁とする、ことになる。図示のとおり、この場合、上位ビットは「01」、下位ビットは「11」となるので、「0111」なる4ビットからなる数値「7」が、下位側から数えて第2番目の桁の数値になる。
最後に、m=1,i=3という具体的な事例に適用すれば、数値Aを構成するビットの下位側から数えて第8ビット目(数値Aについては、上位側に2ビット分の0を補う)から下位に向かって連続する2ビット分の数値を上位ビット、数値Bを構成するビットの下位側から数えて第6ビット目から下位に向かって連続する2ビット分の数値を下位ビット、とする4ビットからなる数値を、下位側から数えて第3番目の桁とする、ことになる。図示のとおり、この場合、上位ビットは補われた「00」、下位ビットは「01」となるので、「0001」なる4ビットからなる数値「1」が、下位側から数えて第3番目の桁の数値になる。
かくして、ステップS45の処理では、「179」という冗長4進データが生成されることになる。このデータの値は、D=53[10進]に一致する。これは、図27の下段に示されているとおり、「179」という冗長4進データが、数値Aと数値Bとの加算(ビットをずらした合成加算)によって得られたデータであることを考えれば当然のことである。なお、数値Aの下位2ビットは加算には利用されないが、もともと数値Aの下位2ビットは0になるように設定されているので、このビットは加算対象にならなくても問題はない(ステップS43で、下位mビットを0に置換するのは、このためである)。
<その他の実施例>
以上、図16に示す再符号化部140の具体的な構成例をいくつか例示したが、本発明に用いる再符号化部140の構成は、これらの実施例に限定されるものではなく、この他にも様々な構成例を利用することが可能である。
また、これまで述べた構成例は、その都度、新たな再符号化処理を実行する例であったが、冗長k進法で秘密鍵Dを表記する複数通りのバリエーションを事前にリストとして保管しておき、乱数を用いて、このリストの中からランダムに1つを選択して用いるようなことも可能である。たとえば、冗長2進法でD=22[10進]を表現する形態は、図11に一例が示されているとおり、「10110」,「10022」,「01222」,「02030」,... など、いくつかのバリエーションが存在するので、秘密鍵Dとして、D=22[10進]なる値を格納している暗号処理装置の場合、上記バリエーションに対応するデータをリストとして格納しておき、再符号化部140では、乱数Rに基づいて、リスト上のいずれか1つのデータをランダムに選択して演算実行部130に引き渡す処理を行えばよい。
ただ、サイドチャネル攻撃の1つとして、暗号処理装置の内部で行われているアドレッシング処理を統計的に解析する手法が知られている。すなわち、CPUがメモリをアクセスする際に、アドレス値が異なると消費電力も異なる現象を利用し、消費電力を統計的に解析することによって、アクセスしたアドレスを推定することが可能になる。したがって、上述したように、冗長k進法で秘密鍵Dを表記する複数通りのバリエーションを事前にリストとして保管しておき、このリストの中からランダムに1つを選択して用いる方法をとると、リスト上のどのデータが用いられたかという情報が、消費電力の統計的解析によって推定されてしまう可能性がある。このようなサイドチャネル攻撃にも対抗するためには、これまで述べた実施例のように、その都度、新たな再符号化処理を実行するのが好ましい。
<<< §5.様々な変形例 >>>
以上、本発明をいくつかの具体的な実施例に基づいて説明したが、もちろん、本発明はこれらの実施例に限定されるものではない。たとえば、§1,§2で説明したべき乗剰余演算の方法は、一般に「Left to Right Exponentiation」と呼ばれている演算方法(指数を左から右へと順々に処理してゆく演算方法)であるが、この方法の代りに、指数を右から左へと順々に処理してゆく「Right to Left Exponentiation」と呼ばれる演算方法を採ることも可能である。更に、これまで述べた実施例では、MのD乗の項を含むべき乗剰余演算式に本発明を適用した例を述べたが、もちろん、本発明に係る暗号処理装置は、実施例で述べた具体的な演算式への適用に限定されるものではなく、数値Mおよび数値Dが含まれるいかなる演算式にも適用可能である。
たとえば、本発明は、楕円曲線暗号の演算にも適応可能である。楕円曲線暗号は、次世代公開鍵暗号として最近注目を浴びている暗号であり、「楕円曲線」という2変数の3次方程式を満たす数字(x,y)(「有理点」と呼ぶ)の集合を扱う演算式で実現できる多種多様な暗号すべてのことを指す(ただし、この式の数字x,yの部分には、実数ではなく、ガロアー体GF(p)という離散的な数字が入る)。有理点を扱うこの演算式では、二つの有理点を入力とし一つの別の有理点を出力する「点加算」が定義され、また、一つの有理点を複数回点加算する「有理点のスカラー倍算」という処理が含まれる。
有理点のスカラー倍算は、全ての楕円曲線暗号に使われている基本的な処理であり、楕円曲線暗号では、スカラー倍算を実施する際、有理点を何個加算するか決定するスカラー数が秘密情報となる。この観点では、スカラー数は、RSA暗号などべき乗剰余を行う際の指数に相当する秘密情報である。
本発明は、上述した楕円曲線暗号の演算における秘密情報であるスカラー数を、電力解析から守るのにも有効である。この楕円曲線暗号の演算におけるスカラー倍算の処理は、前述したべき乗剰余を求める演算処理と極めて類似しており、その根本的な考え方は共通する。すなわち、本発明を楕円曲線暗号に適応する場合は、まず、数値Mに基づいて定まる入力点(有理点)をPとし、スカラー数をDとし、前述した再符号化方法をスカラー数Dに適用し、スカラー倍算演算の入力として利用すればよい。
一般に、有理点Pをスカラー値[D]でスカラー倍する演算は、
[D]*P=P+P+ ... +P(但し、右辺のPはD個)
なる式により、有理点PをD個複写して点加算することによって行われる。具体的には、スカラー値[D]を(n+1)ビットの2進数を用いて、
[D]=d[n]*2+d[n−1]*2(n−1)+ ...
+d[1]*2+d[0]
なる形で表現し(iビット目の数値d[i]は、0もしくは1)、d[n]=1とし、前述したRSAと類似した方法を採用すれば、
[D]*P=[2]*([2] ... *([2]*([2]*([2]*P
+d[n−1]*P)
+d[n−2]*P)
+d[n−3]*P)
+ ........................
+d[1]*P)
+d[0]*P
なる繰り返し演算によって、有理点PをD倍するスカラー倍算が実行できる。
そこで、上記繰り返し演算に、本発明を適用するのであれば、スカラー値[D]を冗長k進数で再符号化する方法を採ればよい。冗長2進数を用いるのであれば、[D]を示す第i番目のビットをd[i]として、たとえば、d[i]∈0,1,2,3となるような再符号化を行えばよい。この場合、[2]*P,[3]*P等の値を予め演算によって求めておき、保存しておくようにすれば、実際の演算時には、これらの保存値を利用することができる。
なお、有理点Pの2倍を求める処理や、異なる二つの有理点を加算する処理には様々な演算方法が知られている。たとえば、第1の有理点PをP=(x,y)とし、第2の有理点QをQ=(x,y)とし、両者の和を(x,y)とすれば、次のような演算により、和「P+Q」=(x,y)が得られることが知られている。
=λ−x−x
=λ(x−x)−y
λ=(y−y)/(x−x) (P≠Qのとき)
λ=(3x +a)/(2y) (P=Qのとき)
xi,yi,a∈GF(p) (但し、i=1,2,or 3)
Char(GF(p))≠2,3
このような楕円曲線暗号の具体的な演算方法としては、この他にも種々の方法が知られているが、ここでは詳しい説明は省略する。
楕円曲線暗号に本発明を適用する上で重要な点は、スカラー値[D]を冗長k進数で再符号化した後、再符号化された[D]を構成する各ビットd[i]についての演算を繰り返し実行してゆく点にある。したがって、具体的な演算式は、上例に限定されるものではない。
もちろん、本発明は、いわゆる暗号化や復号化の処理への利用に限定されるものではなく、たとえば、DSA(Digital Signature Algorithm)などにも利用することが可能である。
本発明では、乱数Rを用いて数値Dを冗長なk進数で表現することが非常に重要な概念になる。ここで、冗長なk進数とは、1つの桁の数値dが「0≦d≦dmax(但し、dmax>k−1)」の範囲内の値をとる数であるが、数値dの候補は、必ずしも0〜dmaxの範囲内の全整数である必要はなく、当該範囲内の一部の整数のみに制限してもかまわない。たとえば、冗長4進数において、dmax=19に設定した場合、1つの桁の数値dは、0〜19の範囲内の値をとる整数になり、この範囲内の全整数を候補として用いるのであれば、数値dは、0〜19の20通りの整数のうちのいずれかになる。このとき、たとえば、「4〜15は使用しない」というような取り決めをしておくことも可能であり、その場合は、数値dが、0,1,2,3,16,17,18,19という8通りの整数のうちのいずれかになるような再符号化が行われることになる。具体的には、10進数の「181」を上記8通りの整数を用いた冗長4進数で表現すれば、「1/2/17/17」なる4桁の数値になる。このように、本発明にいう「冗長なk進数」とは、1つの桁の数値dが「0≦d≦dmax(但し、dmax>k−1)」の範囲内の値をとる数である必要があるが、数値dの候補は、必ずしも0〜dmaxの範囲内の全整数である必要はなく、当該範囲内の一部の整数であってもかまわない。
一般的な公開鍵暗号方式を用いた暗号化および復号化のプロセスを示すブロック図である。 一般的なRSA暗号方式で利用されているべき乗剰余演算式を示す図である。 ICカード10と外部装置20との間の認証にRSA暗号方式を利用した一般的なシステムを示すブロック図である。 2進数の秘密鍵Dを用いたべき乗剰余演算を暗号処理装置の内部で実行する際の実際の演算式の一例を示す図である。 図4に示す演算式おいて、22[10進]なる秘密鍵Dを2進表記にして適用した場合の具体的な演算手順を示す図である。 4進数の秘密鍵Dを用いたべき乗剰余演算を暗号処理装置の内部で実行する際の実際の演算式の一例を示す図である。 図6に示す演算式おいて、22[10進]なる秘密鍵Dを4進表記にして適用した場合の具体的な演算手順を示す図である。 k進数の秘密鍵Dを用いたべき乗剰余演算を暗号処理装置の内部で実行する際の実際の演算式の一例を示す図である。 数値Dをk進表現した場合の各桁の構成を示す図である。 通常2進表現と冗長2進表現との相違を示す図である。 数値D=22[10進]を、通常2進表現および冗長2進表現で表した例を示す図である。 通常4進表現と冗長4進表現との相違を示す図である。 数値D=22[10進]を、通常4進表現および冗長4進表現で表した例を示す図である。 図4に示す演算式おいて、22[10進]なる秘密鍵Dを冗長2進表記にして適用した場合の具体的な演算手順を示す図である。 図6に示す演算式おいて、22[10進]なる秘密鍵Dを冗長4進表記にして適用した場合の具体的な演算手順を示す図である。 本発明に係る暗号処理装置の構成を示すブロック図である。 図16に示す暗号処理装置の再符号化部140の第1の構成例を示すブロック図である。 図17に示す再符号化部140Aの動作を説明する流れ図である。 図16に示す暗号処理装置の再符号化部140の第2の構成例を示すブロック図である。 図19に示す再符号化部140Bの動作を説明する流れ図である。 図20の流れ図に基づく2進データの再符号化処理の一例を示す変遷図である。 図20の流れ図に基づく4進データの再符号化処理の一例を示す変遷図である。 図16に示す暗号処理装置の再符号化部140の第3の構成例を示すブロック図である。 図23に示す再符号化部140Cの動作を説明する流れ図である。 図24の流れ図に基づく2進データの再符号化処理の一例を示す変遷図である。 図24の流れ図に基づく2進データの再符号化処理の別な一例を示す変遷図である。 図24の流れ図に基づく4進データの再符号化処理の一例を示す変遷図である。
符号の説明
10:ICカード
11:制御ユニット
12:暗号処理装置
20:外部装置
21:認証処理部
22:暗号処理装置
100:暗号処理装置
110:入力部
120:出力部
130:演算実行部
140:再符号化部
140A:再符号化部
141A:制御要素
142A:数値確認要素
143A:ランダムデータ生成要素
140B:再符号化部
141B:制御要素
142B:レジスタ
143B:初期データ設定要素
144B:増加補正実行要素
145B:減少補正実行要素
146B:桁選択要素
147B:増減決定要素
140C:再符号化部
141C:冗長データ生成要素
142C:数値B生成要素
143C:数値A生成要素
144C:数値D保持要素
145C:数値E生成要素
150:秘密鍵格納部
160:乱数発生部
A:再符号化に用いる数値
B:再符号化に用いる数値
C:第2の数値(暗号文)
D:秘密鍵
d:秘密鍵の各桁
dmax:dの最大値
E:公開鍵
M:第1の数値(平文)
R:乱数
S11〜S45:流れ図の各ステップ
Z:定数

Claims (11)

  1. 外部から与えられた第1の数値Mに対して、秘密鍵となる数値Dを用いた演算を行うことにより第2の数値Cを生成し、これを外部へ出力する処理を行う暗号処理装置であって、
    第1の数値Mを外部から入力する入力部と、
    秘密鍵となる数値Dを格納する秘密鍵格納部と、
    乱数Rを発生させる乱数発生部と、
    発生させた乱数Rを用いて、前記数値Dを、1つの桁の数値dが「0≦d≦dmax(但し、dmax>k−1)」の範囲内の値をとる冗長なk進数で表現したランダムなn桁のデータに再符号化する再符号化部と、
    少なくとも前記数値Mと再符号化された数値Dとを用いた所定の演算を行うことにより、第2の数値Cを求める演算実行部と、
    前記演算実行部が求めた第2の数値Cを外部へ出力する出力部と、
    を備え、
    前記再符号化部が、
    乱数Rを用いて「0≦d≦dmax」の範囲内の値を発生させる処理をn回繰り返すことによりn桁のランダムデータを生成するランダムデータ生成要素と、
    生成されたランダムデータが前記数値Dに等しいか否かを判断する数値確認要素と、
    前記数値確認要素が等しいとの判断を行うまで、前記ランダムデータ生成要素にランダムデータの生成を繰り返し実行させ、前記数値確認要素が等しいとの判断を行った際のランダムデータを再符号化したデータとして出力する制御要素と、
    を有することを特徴とする暗号処理装置。
  2. 外部から与えられた第1の数値Mに対して、秘密鍵となる数値Dを用いた演算を行うことにより第2の数値Cを生成し、これを外部へ出力する処理を行う暗号処理装置であって、
    第1の数値Mを外部から入力する入力部と、
    秘密鍵となる数値Dを格納する秘密鍵格納部と、
    乱数Rを発生させる乱数発生部と、
    発生させた乱数Rを用いて、前記数値Dを、1つの桁の数値dが「0≦d≦dmax(但し、dmax>k−1)」の範囲内の値をとる冗長なk進数で表現したランダムなn桁のデータに再符号化する再符号化部と、
    少なくとも前記数値Mと再符号化された数値Dとを用いた所定の演算を行うことにより、第2の数値Cを求める演算実行部と、
    前記演算実行部が求めた第2の数値Cを外部へ出力する出力部と、
    を備え、
    前記再符号化部が、
    n桁のデータを保持するレジスタと、
    前記数値Dを、1つの桁の数値dが「0≦d≦k−1」の範囲内の値をとる通常のk進数で表現することにより、n桁からなるデータを用意し、用意したデータを初期データとして前記レジスタに設定する初期データ設定要素と、
    発生させた乱数Rを用いて、前記レジスタのn桁のうちの任意の1桁を選択桁として選択する桁選択要素と、
    発生させた乱数Rを用いて、増加補正もしくは減少補正のいずれかを決定する増減決定要素と、
    前記増減決定要素により増加補正が決定された場合には、前記選択桁の数値dについてd<dmaxが満たされ、かつ、他の桁の調整によって所定の増加補正分δ(但し、δ≦dmax−d)を相殺することが可能であることを条件として、前記選択桁に前記増加補正分δを加え、他の桁を調整して前記増加補正分δを相殺する補正を行う増加補正実行要素と、
    前記増減決定要素により減少補正が決定された場合には、前記選択桁の数値dについてd≠0が満たされ、かつ、他の桁の調整によって所定の減少補正分δ(但し、δ≦d)を相殺することが可能であることを条件として、前記選択桁から前記減少補正分δを減じ、他の桁を調整して前記減少補正分δを相殺する補正を行う減少補正実行要素と、
    所定の条件が満たされるまで、桁選択要素による桁選択、増減決定要素による増減決定、増加補正実行要素もしくは減少補正実行要素による補正を繰り返し実行し、前記所定の条件が満たされたときの前記レジスタ内のn桁のデータを再符号化したデータとして出力する制御要素と、
    を有することを特徴とする暗号処理装置。
  3. 外部から与えられた第1の数値Mに対して、秘密鍵となる数値Dを用いた演算を行うことにより第2の数値Cを生成し、これを外部へ出力する処理を行う暗号処理装置であって、
    第1の数値Mを外部から入力する入力部と、
    秘密鍵となる数値Dを格納する秘密鍵格納部と、
    乱数Rを発生させる乱数発生部と、
    発生させた乱数Rを用いて、前記数値Dを、1つの桁の数値dが「0≦d≦dmax(但し、dmax>k−1)」の範囲内の値をとる冗長なk進数で表現したランダムなn桁のデータに再符号化する再符号化部と、
    少なくとも前記数値Mと再符号化された数値Dとを用いた所定の演算を行うことにより、第2の数値Cを求める演算実行部と、
    前記演算実行部が求めた第2の数値Cを外部へ出力する出力部と、
    を備え、
    前記再符号化部が、
    前記数値Dをm×nビット(m,nは整数)の2進数として保持する数値D保持要素と、
    乱数Rを用いて、「E<D」を満足する任意の数値Eをm×nビットの2進数として生成する数値E生成要素と、
    前記数値Eの下位mビットを0に置換することにより、新たな数値Aを生成する数値A生成要素と、
    B=D−Aなる演算により、m×nビットの2進数からなる数値Bを生成する数値B生成要素と、
    数値Aを構成するビットの下位側から数えて第(m×(i+1))ビット目から下位に向かって連続するmビット分の数値を上位ビット、数値Bを構成するビットの下位側から数えて第(m×i)ビット目から下位に向かって連続するmビット分の数値を下位ビット、とする2mビットからなる数値(但し、i=1〜nとし、数値Aについては、上位側にmビット分の0を補う)を、下位側から数えて第i番目の桁とするn桁のデータを生成し、これを冗長な2 進数で表現した数値Dを示すデータとして出力する冗長データ生成要素と、
    を有することを特徴とする暗号処理装置。
  4. 請求項1〜3のいずれかに記載の暗号処理装置において、
    演算実行部が、Mの項を含む所定の演算式もしくはMに基づいて定まる有理点Pをスカラー値Dでスカラー倍する楕円曲線暗号の演算式に基づく演算を行うことにより、第2の数値Cを求めることを特徴とする暗号処理装置。
  5. 請求項4に記載の暗号処理装置において、
    演算実行部が、Mを所定の数値Zで除したときのべき乗剰余を示す演算式C=MmodZに基づく演算を行うことにより、第2の数値Cを求めることを特徴とする暗号処理装置。
  6. 請求項5に記載の暗号処理装置において、
    再符号化部が、数値Dを、上位桁側から順に、d[n−1],d[n−2],d[n−3],... ,d[2],d[1],d[0]なるn桁のデータに再符号化する処理を行い、
    演算実行部が、演算式C=MmodZに基づく演算を、
    C=(( .....(((1*Md[n−1]
    *Md[n−2]modZ)
    *Md[n−3]modZ)
    .....
    *Md[2]modZ)
    *Md[1]modZ)
    *Md[0]modZ
    なる等価演算式を用いて、括弧の内側の演算から順番に実行することを特徴とする暗号処理装置。
  7. 請求項1〜3のいずれかに記載の暗号処理装置において、
    演算実行部が、RSA暗号、Diffie Hellman暗号、EL Gamal暗号、もしくは楕円曲線暗号を生成するための演算を行うことにより、第2の数値Cを求めることを特徴とする暗号処理装置。
  8. 請求項1〜7のいずれかに記載の暗号処理装置において、
    演算実行部が、再符号化部によって再符号化されたn桁のデータの中から1桁の数値dを抽出して用いる演算を、順番に繰り返し実行することにより第2の数値Cを求めることを特徴とする暗号処理装置。
  9. 請求項1〜8のいずれかに記載の暗号処理装置において、
    入力部が第1の数値Mを外部から入力するたびに、乱数発生部が新たな乱数Rを発生させ、再符号化部が新たな再符号化を行い、演算実行部が新たに再符号化された数値Dを用いて第2の数値Cを求める演算を行うことを特徴とする暗号処理装置。
  10. 請求項1〜9のいずれかに記載の暗号処理装置を内蔵したICカード。
  11. 請求項1〜9のいずれかに記載の暗号処理装置としてコンピュータを機能させるためのプログラム。
JP2008192356A 2008-07-25 2008-07-25 暗号処理装置 Active JP5233473B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008192356A JP5233473B2 (ja) 2008-07-25 2008-07-25 暗号処理装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008192356A JP5233473B2 (ja) 2008-07-25 2008-07-25 暗号処理装置

Publications (2)

Publication Number Publication Date
JP2010034682A JP2010034682A (ja) 2010-02-12
JP5233473B2 true JP5233473B2 (ja) 2013-07-10

Family

ID=41738702

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008192356A Active JP5233473B2 (ja) 2008-07-25 2008-07-25 暗号処理装置

Country Status (1)

Country Link
JP (1) JP5233473B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013014778A1 (ja) * 2011-07-27 2013-01-31 富士通株式会社 暗号化処理装置および認証方法
CN117330941B (zh) * 2023-11-29 2024-02-02 珠海智锐科技有限公司 新能源bms印刷电路板的性能测试方法及相关装置

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3604518B2 (ja) * 1996-11-01 2004-12-22 株式会社ルネサステクノロジ 除算装置
JP3675111B2 (ja) * 1997-06-12 2005-07-27 ソニー株式会社 3入力比較器
JPH11330978A (ja) * 1998-05-15 1999-11-30 Hiroyuki Kawasaki ディジタル・データの変換方法と圧縮方法とディジタル演算処理装置及びディジタル電子計算機
JP4671571B2 (ja) * 1999-09-29 2011-04-20 株式会社日立製作所 秘密情報の処理装置および秘密情報の処理プログラムを格納するメモリ

Also Published As

Publication number Publication date
JP2010034682A (ja) 2010-02-12

Similar Documents

Publication Publication Date Title
KR102136911B1 (ko) 스칼라 또는 멱수와의 곱셈 연산을 포함하는 암호화 방법
CN109791517B (zh) 保护并行乘法运算免受外部监测攻击
JP5412274B2 (ja) サイドチャネル攻撃からの保護
JP5229315B2 (ja) 共通鍵暗号機能を搭載した暗号化装置及び組込装置
JP4668931B2 (ja) 電力解析攻撃に対する耐タンパ性を持った暗号化処理装置
US8422671B2 (en) Methods of encryption and decryption using operand ordering and encryption systems using the same
JP5488718B2 (ja) 暗号処理装置、暗号処理方法、およびプログラム
JP2008252299A (ja) 暗号処理システム及び暗号処理方法
JP4662802B2 (ja) 計算方法、計算装置及びコンピュータプログラム
US20010033655A1 (en) Timing attack resistant cryptographic system
JP2008293034A (ja) タイミング攻撃を阻止する標準化されたモジュラべき乗を計算することにより復号メカニズムを実行する方法と装置
Agrawal et al. Elliptic curve cryptography with hill cipher generation for secure text cryptosystem
EP3698262B1 (en) Protecting modular inversion operation from external monitoring attacks
US20130243191A1 (en) Encryption key generating apparatus
US6480606B1 (en) Elliptic curve encryption method and system
JP5573964B2 (ja) 暗号処理装置および方法
US11336425B1 (en) Cryptographic machines characterized by a Finite Lab-Transform (FLT)
US7903814B2 (en) Enhancing the security of public key cryptosystem implementations
Lee et al. Conditional Re‐encoding Method for Cryptanalysis‐Resistant White‐Box AES
KR20040067779A (ko) 정보 처리방법
EP2738973A1 (en) System and method for cryptography using multiplicative masking using simultaneous exponentiation techniques
JP5233473B2 (ja) 暗号処理装置
US7974409B2 (en) Changing the order of public key cryptographic computations
JPWO2005013243A1 (ja) モンゴメリ乗算剰余における変換パラメータの計算装置、方法およびそのプログラム
RU2188513C2 (ru) Способ криптографического преобразования l-битовых входных блоков цифровых данных в l-битовые выходные блоки

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110520

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20121115

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20121127

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130122

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: 20130226

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130311

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 5233473

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20160405

Year of fee payment: 3