説明

データ処理装置

【課題】剰余乗算器の演算ビット数の2倍を超えるビット数のデータに対する剰余乗算の演算効率を向上させることができるデータ処理装置を提供する。
【解決手段】演算部(310)により剰余乗算の演算処理を再帰的に複数回繰り返してwビットの剰余乗算の剰余と商から、2wビットの剰余乗算の商と剰余を計算するとき、先の剰余乗算の演算処理で求めたwビットの剰余乗算の剰余と商を、次の剰余乗算の演算処理に振り分ける制御を制御部(320)が行う。これにより、先の剰余乗算の演算処理がwビットの剰余乗算の剰余だけを求める演算アルゴリズムに比べ、再帰的に行われる後の演算に必要な前の演算処理の商を新たに演算することを要しない。剰余乗算ユニットの演算ビット数の2の倍数のビット数のデータに対する剰余乗算の演算効率を向上させることができる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報セキュリティ分野における、剰余乗算機能を備えたデータ処理装置に関し、例えば、剰余乗算を用いた暗号技術を適用したICカード用マイクロコンピュータ、さらには当該マイクロコンピュータを備えたICカードに関する。
【背景技術】
【0002】
公開鍵暗号の事実上標準であるRSA暗号に代表されるように、剰余乗算は、暗号技術における最も基本的な演算の一つである。重い計算処理である剰余乗算を高速に実行するため、ICカード等の多くの暗号機器が剰余乗算を処理できる専用のハードウェアとして剰余乗算ユニット(以降、剰余乗算専用器とも呼ぶ)を搭載している。
【0003】
一方、剰余乗算を採用する暗号アルゴリズムでは、安全性の観点から、年々、長い鍵長を推奨する傾向がある。特に、公開鍵暗号の代表的な暗号アルゴリズムである、RSA暗号や楕円曲線暗号に対しては、近年の計算機器の性能向上や解読アルゴリズムの改善により、より長い鍵長が要求されている。長い鍵長に対応するには、回路規模が大きな前記の剰余乗算専用器を必要とするが、回路規模の増加は、生産コストの増加を招いてしまう。また、近年はRFIDに代表される小型機器に対しても、利用者のプライバシー保護などを目的に、暗号装置の採用に対する要望が強い。従って、前記の剰余乗算専用器に対する回路の小規模化の要望が強い。そこで、計算できる最大ビット長が短い演算器を用いて長いビット長の剰余乗算を演算できるデータ処理装置が提供されている。計算できる最大ビット長を抑制して、回路全体の小規模化に貢献できる技術として、剰余乗算専用器で計算できる最大ビット長の2倍の剰余乗算を実現する技術を記載した非特許文献1、非特許文献2、及び非特許文献3がある。また、上記の非特許文献1乃至3の一般的な計算手順を整理し、汎用化した文献として、非特許文献4がある。
【0004】
非特許文献4では、最大wビットの剰余乗算が計算可能な前記の剰余乗算専用器を用いて、剰余乗算の商を計算するアルゴリズム1と、その商を用いて、最大2wビットの剰余乗算(の剰余)を計算するアルゴリズム2を紹介している。ただし、剰余乗算の商qと剰余rでは、
r=xy2-m mod (z)…(式a)
xy=qz+r2…(式b)
の式が成り立つ。
【0005】
[アルゴリズム1]
入力:x、y、z、ただし0≦x、y<z、gcd(z, 2m) = 1、かつ0≦m<w
出力:xy/z、xy mod (z)
ステップ1. r ←xy2-m mod (z)
ステップ2. r'←xy2-m mod(z + 2m)
ステップ3. q ← r - r'
ステップ4. q ≦-2m, q ← q + z + 2m
ステップ5. Return (q、r)
上記アルゴリズム1では、2種類の剰余乗算の剰余(ステップ1の剰余rとステップ2の剰余r’)から、剰余乗算の商(q)を計算する。従って、上記アルゴリズム1は、最低でも2つの剰余乗算の剰余を演算することが必要になる。gcd(z, 2m) = 1はzと2mの最大公約数が1であること、即ちzと2mが相互に素数であることを意味する。
【0006】
[アルゴリズム2]
入力:X = x1 c + x0 2m、Y = y1 c + y0 2m、Z = z1 c + z0 2m、ただし0≦m<w
出力:XY mod Z
ステップ1. r1 ← x1 y1 2-m mod(z1) and q1 ← x1 y1 -r1 z1 2m
ステップ2. r2 ← q1 z0 2-m mod(c) and q2 ← q1 z0 -r2 c 2m
ステップ3. r3 ← (x0+x1)(y0+y1) 2-m mod(c) and q3 ← (x0+x1)(y0+y1)-r3c2m
ステップ4. r4 ←x0 y0 2-m mod(c) and q4 ← x0 y0 -r4c2m
ステップ5. r5 ← c(-q2+q3-q4+r1) 2-m mod(z1) and q5 ← c(-q2+q3-q4+r1)-r5 z1 2m
ステップ6. r6← q5 z0 2-m mod(c) and q6 ← q5 z0 -r6 c 2m
ステップ7. Return (q2 + q4 - q6 - r1 - r2 + r3 - r4 + r5)c + (r2 + r4 - r6)2m
上記アルゴリズム2の入力において、最大ビット長2wのデータX、データY、データZをより小さなビット長のデータx1、x0、y1、y0、z1、z0、c、2mで表す。ただし、mは前記の剰余乗算専用器が実装する剰余乗算から定まるため、cの値を設定すれば他の値が定まる。例えば、mの値に応じて、c=1(m=wのとき)、c=2m(m=0)、c=2w-1(mは任意)などの値をcに設定する。このアルゴリズム2では、上記小さいビット長のデータに対してアルゴリズム1で求めた商を用いて余りを求める演算を繰り返して最後にXYmodZで表されるXYをZで割った余りが求められる。このアルゴリズム2では、6組の剰余乗算の商と剰余(ステップ1からステップ6)を要する。相対的に計算量の軽い加算や減算を無視した場合、上記アルゴリズム2は、6組の剰余乗算の商と剰余の計算コストの総和とほぼ等しい計算コストを有する。
【0007】
【非特許文献1】W. Fischer, J.−P. Seifert: “Increasing the bitlength of crypto−coprocessors” CHES2002, vol. 2523 of Lecture Notes in Computer Science, Springer−Verlag, pp. 71−−81 (2003).
【非特許文献2】Benoit Chevallier−Mames, Marc Joye, and Pascal Paillier: “Faster Double−Size Modular Multiplication From Euclidean Multipliers” CHES2003, vol. 2779 of Lecture Notes in Computer Science, Springer−Verlag, pp. 214−227 (2003).
【非特許文献3】Masayuki Yoshino, Katsuyuki Okeya, and Camille Vuillaume. Unbridlethe Bit−Length of a Crypto−Coprocessor with Montgomery Multiplication.In Preproceedings of SAC2006 pp. 184−198(2006)
【非特許文献4】Masayuki Yoshino, Katsuyuki Okeya, and Camille Vuillaume. “Double−Size Bipartite Multiplication” ACISP2007, vol. 4586 of Lecture Notes in Computer Science, Springer−Verlag, pp. 230−244 (2007)
【発明の開示】
【発明が解決しようとする課題】
【0008】
上記の非特許文献4に紹介された実現手法(以下、従来技術と呼ぶ)では、1回で計算できる最大ビット長(w)に制限がある前記の剰余乗算専用器に、上記アルゴリズム1と上記アルゴリズム2用い、最大2倍のビット長(2w)の剰余乗算を計算する。即ち、上記アルゴリズム1及び2を用いて最大ビット長wの剰余乗算の商と余りを逐次的に計算して、最大ビット長の2倍である2wの剰余乗算の剰余を求めることができる。本発明者は更にこれを発展させ、上記アルゴリズムによる2倍のビット長の剰余乗算を再帰的に繰り返すことによって4倍、さらには8倍のビット長の剰余乗算を行うことについて検討した。しかしながら、2倍のビット長の剰余乗算を再帰的に繰り返して4倍のビット長の剰余乗算を行うには、4倍のビット長の剰余乗算を行うには、2倍のビット長の剰余乗算で使用した商が必要に成る。しかしながら、非特許文献に記載された技術は2倍化に特化した技術であるため、その演算に使用した商を再帰的演算に使用可能なように出力することが考慮されていなかった。そのため、単純に上記アルゴリズムを4倍化にも適用する場合には、4倍のビット長の剰余乗算を行うときは、新たに2倍のビット長の剰余乗算のアルゴリズムに従って逐次商を特別に求める操作を追加しなければならない。しかもそのような操作の追加はアルゴリズム2の各ステップで行わなければならないから、全体としての演算処理時間が著しく増大する。以下に、剰余乗算器の最大ビット長の複数倍の剰余乗算演算に関する課題を整理して示す。
【0009】
課題1:効率性
(a):従来技術では、前記の剰余乗算専用器が1回で計算可能な最大ビット長(w)を越える剰余乗算の商の計算コストが大きい。例えば、上記アルゴリズム1と上記アルゴリズム2に従い、前記の剰余乗算専用器の最大4倍のビット長(4w)の剰余剰算の計算する例を示す。4wビットの剰余乗算の計算では、上記アルゴリズム2に従い、各6個の2wビットの剰余乗算の剰余(r1、r2、r3、r4、r5、r6)と商(q1、q2、q3、q4、q5、q6)が必要である。2wビットのそれぞれの剰余乗算の剰余を計算するには、再度、上記アルゴリズム2に従い、各6個のwビットの剰余乗算の剰余(r1、r2、r3、r4、r5、r6)と商(q1、q2、q3、q4、q5、q6)が必要である。一方、2wビットの剰余乗算の商の計算においては、上記アルゴリズム1から、前記で得た2wビットの剰余乗算の剰余と、別の値を持つ剰余乗算の剰余の、2種類の剰余乗算の剰余が必要である。従って、2wビットの6個の剰余乗算の商(q1、q2、q3、q4、q5、q6)の計算には、異なる6個の2wビットの剰余乗算の剰余(r1'、r2'、r3'、r4'、r5'、r6')が必要であり、これらは上記アルゴリズム2に従い、各6個のwビットの剰余乗算の商と剰余を必要とする。
【0010】
従って、計算する剰余乗算のビット長が増加すると、計算に必要なwビットの剰余乗算の剰余と商の個数(即ち、wビットの剰余乗算の計算回数)が指数関数的に増加する。例えば、最大wビットの剰余乗算の剰余を計算する前記剰余乗算器を用い、2wビットの剰余乗算を計算する場合にはwビットの剰余乗算を12回、4wビットの剰余乗算を計算する場合にはwビットの剰余乗算を122回、8wビットの剰余乗算を計算するには、123回の計算が必要である。これにより、指数関数的に増加する計算量を抑制するこが必要であるという課題が見出された。
(b):上記アルゴリズム1と上記アルゴリズム2では、剰余乗算だけでなく、四則演算(加算、減算、乗算、割算)を処理する必要がある。そこで、剰余乗算の計算機能に加え、実装環境に四則演算(加算、減算、乗算、割算)の一部または全ての計算機能を備えた方が、性能が向上する場合がある。これにより、剰余乗算に加え、四則演算を利用して、前記の剰余乗算専用器の1回で計算できる最大ビット長の2倍を越える剰余乗算を計算することが得策であるという課題が見出された。
【0011】
課題2:柔軟なビット長の拡張
(a):上記アルゴリズム1と上記アルゴリズム2を用いた従来技術では、前記の剰余乗算専用器が1回で最大wビットの剰余乗算を計算する場合、2wビットの剰余乗算が計算できる。この方法を再帰的に利用し、4wビット、8wビット、16wビット等、wビットの2のべき乗倍の剰余乗算が計算できる。しかし、常に倍数は2のべき乗倍に限定される。そのため、前記の剰余乗算専用器で計算可能なビット長が変更できない(最大ビット長の剰余乗算しか計算できない等)場合、長いビット長の剰余乗算で短いビット長の剰余乗算を代用する必要がある。例えば最大1024ビット、ただし512ビットの剰余乗算も前記の剰余乗算専用器が計算可能な場合、1536(=512×3)ビットの剰余乗算を処理する代わりに、2048(=512×22)ビットの剰余乗算を計算する必要がある。剰余乗算のビット長が長い場合、計算に必要な時間や、データの一時保存に必要なメモリが増加してしまう。これにより、2の倍数だけでなく、前記の剰余乗算専用器のビット長の整数倍の剰余乗算を計算できることが望ましいと言う課題が見出された。
(b):計算する剰余乗算のビット長が長い場合、データの一時保存のために、より大きな領域(メモリ等)が必要である。これにより、剰余乗算器のワークメモリを容易に大きくすることが望ましいと言うことが見出された。
【0012】
本発明の目的は、剰余乗算器の演算ビット数の2倍を超えるビット数のデータに対する剰余乗算の演算効率を向上させることができるデータ処理装置を提供することにある。
【0013】
本発明の別の目的は、剰余乗算器の演算ビット数の2倍を超える整数倍のビット数のデータに対する剰余乗算の演算効率を向上させることができるデータ処理装置を提供することにある。
【0014】
本発明の更に別の目的は、剰余乗算器の演算ビット数の2倍を超えるビット数のデータに対する剰余乗算のためのワークメモリを容易に大きくすることができるデータ処理装置を提供することにある。
【0015】
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【0016】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
【0017】
〔1〕剰余乗算の演算処理を再帰的に複数回繰り返してwビットの剰余乗算の剰余と商から、2wビットの剰余乗算の商と剰余を計算するとき、先の剰余乗算の演算処理で求めたwビットの剰余乗算の剰余と商を、次の剰余乗算の演算処理に振り分ける制御を行う。これにより、先の剰余乗算の演算処理がwビットの剰余乗算の剰余だけを求める演算アルゴリズムに比べ、再帰的に行われる後の演算に必要な前の演算処理の商を新たに演算することを要しない。剰余乗算器の演算ビット数の2の倍数のビット数のデータに対する剰余乗算の演算効率を向上させることができる。
【0018】
〔2〕wビットの剰余乗算の剰余乗算の剰余と商から、kwビット(k>2)の剰余乗算の商と剰余を計算するとき、kwビットの乗算をwビットの乗算に分割する分割演算処理と、分割処理された乗算の積から剰余乗算を計算するためのリダクション処理を前記演算部に実行させる。これにより、剰余乗算器の演算ビット数の2倍を超える整数倍のビット数のデータに対する剰余乗算の演算効率を向上させることができる。
【0019】
〔3〕剰余乗算を行う演算部の制御部は、中央処理装置のアドレス空間に配置されたRAMを、前記演算部のワークメモリとして用いことが可能とされる。剰余乗算を行う演算部内部のワークメモリを大きくすることなく剰余乗算のワークメモリを増やすことができる。
【発明の効果】
【0020】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記のとおりである。
【0021】
〔1〕剰余乗算器の演算ビット数の2倍を超えるビット数のデータに対する剰余乗算の演算効率を向上させることができる。
【0022】
〔2〕剰余乗算器の演算ビット数の2倍を超える整数倍のビット数のデータに対する剰余乗算の演算効率を向上させることができる。
【0023】
〔3〕剰余乗算器の演算ビット数の2倍を超えるビット数のデータに対する剰余乗算のためのワークメモリを容易に大きくすることができる。
【発明を実施するための最良の形態】
【0024】
1.実施の形態の概要
先ず、本願において開示される発明の代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
【0025】
〔1〕本発明に係るデータ処理装置(601)は、剰余乗算のための演算部(310)と制御部(320)を有する。前記演算部は剰余乗算の演算処理を行う。前記制御部は前記剰余乗算の演算処理を再帰的に複数回繰り返してwビットの剰余乗算の剰余と商から、2wビットの剰余乗算の商と剰余を計算するとき、先の剰余乗算の演算処理で求めたwビットの剰余乗算の剰余と商を、次の剰余乗算の演算処理に振り分ける制御を行う(アルゴリズム3)。
【0026】
〔2〕更に具体的には、本発明に係るデータ処理装置(601)は、剰余乗算のための演算部(310)と制御部(320)を有する。前記演算部は、wを演算値のビット数を表す正の整数、x、y、zを0≦x、y、z<2wを満たすwビットの非負の整数、X、Y、Zを0≦X、Y、Z<22wを満たす2wビットの非負の整数、m、nを非負の整数とするとき、剰余乗算の演算式xy = qz+r2nを満たす整数qと整数rを出力するための演算処理を行なう。前記制御部は、前記演算処理を再帰的に繰り返すとき、前記剰余乗算専用器が出力する前記整数qと前記整数rを、乗算の演算式XY = QZ + R22mを満たす整数Qと整数Rを得るための次の演算処理に振り分ける処理を制御する(アルゴリズム3)。
【0027】
〔3〕項2のデータ処理装置において、前記演算部は、剰余乗算器(101)、加算器(102)、及び減算器(103)を有する。
【0028】
〔4〕項3のデータ処理装置は更に、前記演算部は、データメモリ(306)と、アキュムレータ(312)と、前記データメモリ又は前記アキュムレータから前記剰余乗算器、前記加算器、又は前記減算器へのデータ経路を選択するセレクタとを有する。前記アキュムレータは、前記剰余乗算器、前記加算器、又は前記減算器の出力を累積し、累積されたデータをセレクタ又はデータメモリに出力する。
【0029】
〔5〕項2のデータ処理装置において、前記制御部は、前記処理の手順を記述した演算制御プログラムを保持するプログラムメモリ(305)と、前記プログラムメモリから読み出される演算命令を解読して前記演算部に前記演算処理を実行させるための制御信号を生成する制御回路(303)と、を有する。
【0030】
〔6〕項2のデータ処理装置において、前記制御部に暗号化又は復号のための剰余乗算処理の指示を与える中央処理装置(603)とを更に備え、1個の半導体基板に形成されている。
【0031】
〔7〕項2のデータ処理装置は更に、前記中央処理装置のアドレス空間に配置されたRAM(606)を有し、前記制御部は前記RAMを前記演算部のワークメモリとして用いことが可能とされる。
【0032】
〔8〕本発明の別の観点によるデータ処理装置(601)は、剰余乗算のための演算部(310)と制御部(320)を有する。前記演算部は剰余乗算の演算処理を行う。前記制御部は、wビットの剰余乗算の剰余乗算の剰余と商から、kwビット(k>2)の剰余乗算の商と剰余を計算するとき、kwビットの乗算をwビットの乗算に分割する分割演算処理と、分割処理された乗算の積から剰余乗算を計算するためのリダクション処理を前記演算部に実行させる(アルゴリズム10)。
【0033】
〔9〕更に具体的な観点によるデータ処理装置(601)は、剰余乗算のための演算部(310)と制御部(320)を有する。前記演算部は剰余乗算の演算処理を行う。前記制御部は、X、Y、Zを0≦X、Y、Z<2kwを満たすkwビットの非負の整数とし、剰余乗算の演算式R=XY2-kw mod Zを満たす非負の整数Rを得るとき、kwビットの整数同士の乗算の積XYを小さいビット数の乗算の積に分割する分割演算処理と、前記の整数Zに基づいて前記分割処理された前記乗算の積XYに対して次数を低くするリダクション処理と、を前記演算部に実行させる(アルゴリズム10)。
【0034】
〔10〕項9のデータ処理装置において、前記リダクション処理は、前記分割処理された前記乗算の積XYに対して、最終的に0以上Z未満の値を求める処理である。
【0035】
〔11〕項10のデータ処理装置において、前記演算部は、剰余乗算器(101)、加算器(102)、及び減算器(103)を有する。
【0036】
〔12〕項11のデータ処理装置は更に、前記演算部は、データメモリ(306)と、アキュムレータ(312)と、前記データメモリ又は前記アキュムレータから前記剰余乗算器、前記加算器、又は前記減算器へのデータ経路を選択するセレクタ(308)とを有する。前記アキュムレータは、前記剰余乗算器、前記加算器、又は前記減算器の出力を累積し、累積されたデータをセレクタ又はデータメモリに出力する。
【0037】
〔13〕項9のデータ処理装置において、前記制御部は、前記処理の手順を記述した演算制御プログラムを保持するプログラムメモリ(305)と、前記プログラムメモリから読み出される演算命令を解読して前記演算部に前記分割演算処理及びリダクション処理を実行させるための制御信号を生成する制御回路(303)とを有する。
【0038】
〔14〕項9のデータ処理装置は更に、前記制御部に暗号化又は復号のための剰余乗算処理の指示を与える中央処理装置(603)を有し、1個の半導体基板に形成されている。
【0039】
〔15〕項14のデータ処理装置は更に、前記中央処理装置のアドレス空間に配置されたRAM(606)を有し、前記制御部は前記RAMを前記演算部のワークメモリとして用いことが可能とされる。
【0040】
2.実施の形態の詳細
実施の形態について更に詳述する。
【0041】
《実施に形態1》
非特許文献4の上記アルゴリズム1と上記アルゴリズム2では、前記の剰余乗算専用器が1回で計算できる剰余乗算の最大ビット長の2倍を越える剰余乗算を計算する場合、剰余乗算の商の計算コストが大きいという前記課題1があった。剰余乗算の商の計算に、2種類の剰余乗算の剰余を要するからである。
【0042】
そこで、剰余乗算の剰余から商を計算する方式(即ち、上記アルゴリズム1と上記アルゴリズム2に沿った方式)ではなく、乗算を計算し、剰余乗算の商と剰余を効率的に計算するアルゴリズム3を以下に示す。
【0043】
[アルゴリズム3]
入力:X = x1 c + x0 2m、Y = y1 c + y0 2m、Z = z1 c + z0 2m、ただし0≦m<w
出力:XY2-2m / Z、XY2-2m mod Z
ステップ1. r1 ← x0 y0 2-m mod(2w) and q1 ← x0 y0 -r1 2w 2m
ステップ2. r2 ← (x0+x1)(y0+y1)2-m mod(z1) and q2 ← (x0+x1)(y0+y1) -r2 z1 2m
ステップ3. r3 ← x1y1 2-m mod(z1) and q3 ← x1y1 -r3 z1 2m
ステップ4. r4 ← (r3-q1)c 2-m mod(z1) and q4 ← (r3-q1)c -r4 z1 2m
ステップ5. r5 ← q3 z0 2-m mod(z1) and q5 ← q3 z0 -r5 z1 2m
ステップ6. r6← (q2-q3+q4-q5) z0 2-m mod(2w) and q6 ← (q2-q3+q4-q5) z0 -r6 2w 2m
ステップ7. Return q3 2w-m+(q2-q3+q4-q5)2m and (q1-q6-r1+r2-r3+r4-r5)2w-m+ (r1-r6)2m
ただし、出力値 (XY2-2m / Z)は、XY2-2mをZで割り、小数点以下を切捨てた値である。上記アルゴリズム3における入出力データは、以下の恒等式を満たす。
XY = (XY2-2m / Z)Z + (XY2-2m mod Z)22m
即ち、(XY2-2m / Z)の値をもつ剰余乗算の商をQ、(XY2-2m mod Z)の値をもつ剰余をRとすると、(式a)、(式b)同様、以下の式が成り立つ。
R=XY2-2m mod Z・・・(式A)
XY=QZ+R22m ・・・(式B)
上記アルゴリズム3の各ステップは、剰余乗算の商と剰余を求める計算と、加算と減算から構成される。剰余乗算の商を計算する毎に、上記アルゴリズム2を2回(再帰的に)呼び出す必要があった従来技術と比べ、剰余乗算の商と剰余をまとめて計算する上記アルゴリズム3は、計算量が少なく、全体の処理時間を短縮できる。
【0044】
例えば、最大wビットの剰余乗算の剰余を計算する前記剰余乗算器を用い、2wビットの剰余乗算を計算する場合にはwビットの剰余乗算の回数は12回であり、上記アルゴリズム2を用いた従来技術と同様の計算量である。しかし、4wビットの剰余乗算を計算する場合にはwビットの剰余乗算は6*12(=72)回、8wビットの剰余乗算を計算するには62*12(=432)回である。上記アルゴリズム1と上記アルゴリズム2を用いた従来技術では、4wビットの場合は122(=144)回、8wビットの場合は123(=1728)回であり、提案手法は計算量が50%(4wビットの場合)、25%(8wビットの場合)と少なくて済む。一般に、最大wビットの剰余乗算の剰余を計算する前記剰余乗算器を用い、2wビットの剰余乗算を計算する場合、従来技術に比べ、計算量は僅か(1/2x-1)*100%で済む(ただし、理論的に計算量の少ない、加減算等の他の演算は無視している)。
【0045】
従って、本発明では、指数関数的に増加する計算量を抑制し、より効率的に剰余乗算の剰余と商の双方を計算する処理フローと、前記処理フローを用いて剰余乗算を計算する剰余乗算器が提供できる。
【0046】
上記アルゴリズム3の実装機器は、前記の剰余乗算専用器における剰余乗算の計算機能と、加算や減算の計算機能を実装すればよい。
【0047】
なお、上記のアルゴリズム3は、前記の剰余乗算専用器が1回で計算可能な最大ビット長以上の剰余乗算の商と剰余を計算する他のアルゴリズムと、本質的に同様である。例えば、下記のアルゴリズム4においても、同様に商と剰余が計算できる。従って、上記アルゴリズム3と下記アルゴリズム4の処理は、本質的に同じである。アルゴリズム4は、
[アルゴリズム4]
入力:X = x1 c + x0 2m、Y = y1 c + y0 2m、Z = z1 c + z0 2m、ただし0≦m<w
出力:XY2-2m / Z、XY2-2m mod Z
ステップ1. r1 ← x0 y0 2-m mod(2w) and q1 ← x0 y0 -r1 2w 2m
ステップ2. r2 ← x1 y0 2-m mod(z1) and q2 ← x1 y0 -r2 z1 2m
ステップ3. r3 ← x0 y1 2-m mod(z1) and q3 ← x0 y1 -r3 z1 2m
ステップ4. r4 ← x1 y1 2-m mod(z1) and q4 ← x1 y1 -r4 z1 2m
ステップ5. r5 ← r4 c 2-m mod(z1) and q5 ← r4 c -r5 z1 2m
ステップ6. r6 ← q4 z0 2-m mod(z1) and q6 ← q4 z0 -r6 z1 2m
ステップ7. r7← (-q2-q3-q5+q6) z0 2-m mod(2w) and q7 ← (-q2-q3-q5+q6) z0 -r7 2w 2m
ステップ8. Return q4 2w-m + (q2+q3+q5-q6)2m and (r2+r3+r5-r6+q1+q7)2w-m +(r1+r7)2m
である。
【0048】
また、下記のアルゴリズム5においても、同様に商と剰余が計算できる。アルゴリズム5は、
[アルゴリズム5]
入力:X = x1 s + x0 2m、Y = y1 s + y0 2m、Z = z1 s + z0 2m、ただし0≦m<wかつs=Z+a
出力:XY2-2m / Z、XY2-2m mod Z
ステップ1. r1 ← x0 y0 2-m mod(s) and q1 ← x0 y0 -r1 s 2m
ステップ2. r2 ← (x1+x0)(y1+y0) 2-m mod(s) and q2 ← (x1+x0) (y1+y0) -r2 s 2m
ステップ3. r3 ← x1 y1 2-m mod(s) and q3 ← x1 y1 -r3 s 2m
ステップ4. r4 ← a q3 2-m mod(s) and q4 ← a q3 -r4 s 2m
ステップ5. r5 ← a(-q1+q2-q3+q4+r3) 2-m mod(s) and q5 ← a(-q1+q2-q3+q4+r3)-r5 s 2m
ステップ6. Return q3 2w-m+(q1-q3+q4-q5)2m and (r1+r4-r6)2w-m+(q2-q6+r1-r2-r3+r4-r5)2m
である。
【0049】
また、前記の剰余乗算専用器が実装する剰余乗算の種類によらず、任意の種類の剰余乗算の商と剰余が計算できる。例えば、前記の剰余乗算専用器における変数mがm=1を満たすとき(一般に、モンゴメリ乗算と呼ばれる)に、変数mがm=0.5となる剰余乗算(一般に、二分割剰余乗算と呼ばれる)の商と剰余も、下記のアルゴリズム6に従い、計算できる。アルゴリズム6は、
[アルゴリズム6]
入力:X = x1 c + x0 2m、Y = y1 c + y0 2m、Z = z1 c + z0 2m、ただし0≦m<w
出力:XY2-m /Z and XY2-m mod(Z)
ステップ1. r1 ← x1 y1 2-m mod(2w) and q1 ← x1 y1 -r1 2w 2m
ステップ2. r2 ← (x1+x0) (y1+y0) 2-m mod(2w) and q2 ← (x1+x0)(y1+y0) -r2 2w 2m
ステップ3. r3 ← x0 y0 2-m mod(2w) and q3 ← x0 y0 -r3 2w 2m
ステップ4. r4 ← q3 2w 2-m mod(z1) and q4 ← q3 2w -r4 z1 2m
ステップ5. r5 ← r1 1 2-m mod(z0) and q5 ← r1 1 -r5 z0 2m
ステップ6. r6 ← q4 z0 2-m mod(2w) and q6 ← q4 z0 -r6 2w 2m
ステップ7. r7 ← q5 z1 2-m mod(2w) and q7 ← q5 z1 -r7 2w 2m
ステップ8. Return q4 2w + q5 and (r4-q1+q2-q3-q6-q7)2w +(q1-r1+r2+r5-r6-r7)
である。
【0050】
また、法Zと変数mにおいて、Z=22wかつm=0、またはZ=22wかつm=1が成り立つ場合、剰余乗算の商と剰余を計算する上記アルゴリズム3に代えて、乗算を計算する下記アルゴリズム7を実施してもよい。ただし、下記アルゴリズム7では、乗算結果の上位2wビットを剰余乗算の商(m=0のとき)または剰余乗算の剰余(m=1)、下位2wビットを剰余乗算の剰余(m=1のとき)または剰余乗算の商(m=0)とみなす。アルゴリズム7は、
[アルゴリズム7]
入力:X = x1 c + x0 2m、Y = y1 c + y0 2m、Z = z1 c + z0 2m、ただし0≦m<w
出力:XY2-2m /Z and XY2-2m mod(Z)
ステップ1. r1 ← x0 y0 2-m mod(2w) and q1 ← x0 y0 -r1 2w 2m
ステップ2. r2 ← x0 y1 2-m mod(2w) and q2 ← x0 y1 -r2 2w 2m
ステップ3. r3 ← x1 y0 2-m mod(2w) and q3 ← x1 y0 -r3 2w 2m
ステップ4. r4 ← x1 y1 2-m mod(2w) and q4 ← x1 y1 -r3 2w 2m
ステップ5. sum = x1y122w + (x1y0+x0y1)2w + x0y0
ステップ6. Return sum/22w and sum mod(22w)
である。
【0051】
なお、上記のアルゴリズム3と同様に、上記アルゴリズム7も計算方式の一例であり、乗算を用いて、前記の剰余乗算専用器が1回で計算可能な最大ビット長以上の剰余乗算の商と剰余を計算する他のアルゴリズムと、本質的に同様である。例えば、他の計算方式として、下記のアルゴリズム8がある。アルゴリズム8は、
[アルゴリズム8]
入力:X = x1 c + x0 2m、Y = y1 c + y0 2m、Z = z1 c + z0 2m、ただし0≦m<w
出力:XY2-2m /Z and XY2-2m mod(Z)
ステップ1. r1 ← x0 y0 2-m mod(2w) and q1 ← x0 y0 -r1 2w 2m
ステップ2. r2 ← (x0+x1)(y1+y0) 2-m mod(2w) and q2 ← (x0+x1)(y0+y1) -r2 2w 2m
ステップ3. r3 ← x1 y1 2-m mod(2w) and q3 ← x1 y1 -r3 2w 2m
ステップ4. sum = x1y12w(2w-1) + (x1+x0)(y1+y0)2w - x0y0(2w-1)
ステップ5. Return sum/22w and sum mod(22w)
である。
【0052】
次に、剰余乗算ユニットにおいて、上記アルゴリズム3を実現する場合の処理フローを説明する。ただし、その処理フローは特に制限されず、上記アルゴリズム4、上記アルゴリズム6、上記アルゴリズム7、上記アルゴリズム8やその他のアルゴリズムを処理する場合でも同様に実現できる。
【0053】
先ず、その処理に用いる演算ユニットに付ついて説明する。特に制限されないが、図1中の(A)に、与えられた所定の入力値から、各演算器固有の演算を計算し、計算結果を出力する演算器を示す。以下においては、剰余乗算の商と剰余を計算する剰余乗算器としてのMM演算器101、加算を計算する加算器としてのADD演算器102、減算を計算する減算器としてのSUB演算器103の3種類の演算器を用いて、上記のアルゴリズム3を処理する場合を以下で説明する。ただし、剰余乗算ユニットが上記アルゴリズム3を処理するには、剰余乗算と加算と減算が処理できればよく、それらは別々の演算器である必要は無い。例えば、剰余乗算と加算と減算の計算機能をもつ一つの演算器を用いても良い。また、2の補数表現で表したデータとADD演算器102を用いて、減算を処理するように変更しても良い。
【0054】
さらに、剰余乗算の商と剰余の計算では、別の演算器を用いても良い。上記アルゴリズム2に従い、例えば、図1中の(B)に示す剰余乗算の剰余を計算するMM2演算器151を用いても良い。また、乗算と割算を用いて、剰余乗算が計算できる。そのため、図1中の(B)に示す乗算を計算するMU演算器152や、割算を計算するDIV演算器153を用いても良い。
【0055】
図2には上記アルゴリズム3に関する処理フローが例示される。ここでは、図1の(A)で定義したMM演算器101、ADD演算器102、SUB演算器103を用いた、上記アルゴリズム3に関する処理フローを示す。ただし、図2の演算器内の()内の番号は、演算器を用いるステップ番号としての参照番号である。また、図2中で線が交差する場合、黒丸印が無い場合は互いに影響がなく、黒丸印がある場合は同一の値をもつデータの分岐処理を指す。従って、図2中の処理フローは、各演算器への入力順と、黒丸印の有無、結線処理により、2wビットの剰余乗算の商と剰余それぞれに必要な計算wビットの演算結果を振り分け処理を有する。また、この振り分け処理により、図2の処理フローは、最終的には、上記アルゴリズム3の出力値であるq3と(q2-q3+q4-q5)を結合した2wビットの剰余乗算の商であるq3c+(q2-q3+q4-q5)と、(q1-q6-r1+r2-r3+r4-r5)と(r1-r6)を結合した2wビットの剰余乗算の剰余である(q1-q6-r1+r2-r3+r4- r5)c+(r1-r6)を得る。
【0056】
例えば、MM演算器(m1)は、x0、y0、cを入力値として受け付け、剰余乗算の商q1と剰余r1を出力する。MM演算器(m1)から出力された商q1は結線されたSUB演算器(s2)とSUB演算器(s3)に入力値として受け付けられ、同様に、剰余r1はSUB演算器(s3)とSUB演算器(s7)に入力値として受け付けられる。q1とr1を入力値として受け付けたSUB演算器は、減算(q1-r1)を計算し、その結果をADD演算器(a3)へ出力する。同様の処理を他の演算器でも実施し、結果的に、図2中の最下部に記した出力値として、P1=q3、P2=(q2-q3+q4-q5)、P3=(q1-q6-r1+r2-r3+r4-r5)、P4=(r1-r6)を得る。
【0057】
図3には図2の処理フローを実行可能な剰余乗算ユニット3の構成が例示される。なお、図3に示される全ての機能ブロックは、単結晶シリコン基板のような、一個の半導体基板に形成されている。
【0058】
図3において、300は、剰余乗算ユニットと他の機器の接続に用いるシステムバスを示す。301はクロック発生器、302は入出力ポート(単にI/Fと称する)、303はプログラムメモリとしてのプログラム用メモリ305に従って他の機器を制御する制御回路、304は制御回路303における各機器の状態管理用のレジスタ(管理レジスタと称する)、305は制御回路303から読み出されるプログラムやデータが格納されるプログラム用メモリ(読み込み可能であればよく、ROM等の不揮発性媒体でもよい)、306はデータメモリとしてのデータの格納用メモリ(プログラムを格納してもよく、RAM等の揮発性媒体が望ましい)、307は制御レジスタ、308はセレクタである。101は剰余乗算の商と剰余を計算するMM演算器、102は加算を計算するADD演算器、103は減算を計算するSUB演算器、312は各演算器から出力されたデータを格納するアキュムレータである。
【0059】
特に制限されないが、上記アルゴリズム3を実現するための処理手順が記述されたプログラムをプログラム用メモリ305、処理中の入出力や演算で用いるデータをデータ用メモリ306に格納する。また、プログラム用メモリ305や、データ用メモリ306を着脱可能にし、他のメモリと交換または追加して、利用量する記憶容量の調整をしてもよい。また、剰余乗算ユニット3は、クロック発生器301を備えず、外部から供給されるクロック信号に基づいて動作してもよい。
【0060】
尚、剰余乗算ユニット3において、剰余乗算器(MM演算器)101、加算器(ADD演算器)102、減算器(SUB演算器)103、セレクタ308、アキュムレータ213及びデータ用メモリ306は演算部310の一例とされ、制御回路303及びプログラム用メモリ305は制御部320の一例とされる。
【0061】
剰余乗算ユニット3において、図2の処理フローを実行するための、処理フローの概略を図4に示す。図4の処理フローにおいて、剰余乗算の商と剰余の計算はMM演算器101、加算はADD演算器102、減算はSUB演算器103が負担すべき演算処理とされる。
【0062】
まず、制御回路303がプログラム用メモリ305から上記アルゴリズム3を記載したプログラムを読み込む(S401)。制御回路303は、読み込んだプログラムや管理レジスタ304の状態に従って、データ用メモリ306とアキュムレータ312におけるデータを転送する必要があるか否かを判断する(S402)。転送を必要と判断した場合、データ用メモリ306またはアキュムレータ312内から、または相互間で、データを転送する。例えば、アキュムレータ312に格納されたデータが次の演算処理で出力されるデータに上書きされないよう、アキュムレータ312内のデータをデータ用メモリ306に転送する(S403)。制御回路303は、制御信号を送信し、制御レジスタ307内のレジスタ値を設定する(S404)。制御レジスタ307内のレジスタ値は、図5中の(A)に示すように、利用する演算器を決定する演算コード(501)と、演算器に入力するデータの居場所を示すアドレスコード(502)からなる。制御レジスタ307内のレジスタ値に従い、セレクタ308は、演算器にデータを送信する(S405)。データを送信された演算器は演算(剰余乗算の商と剰余の計算、加算または減算)を処理し、演算結果をアキュムレータ312に出力する(S406)。図5中の(B)に示すように、アキュムレータ312は出力値のキャリー(繰上げ)またはボロウ(繰下げ)の有無を、管理レジスタ304に伝達する(S407)。制御回路303は、読み込んだプログラムや管理レジスタ304の状態に従って、処理を終了するかを判断する(S408)。
【0063】
上記では、剰余乗算の商と剰余を計算できるMM演算器101を仮定した。MM演算器101における剰余乗算の計算方法は問わず、例えば、古典的な剰余乗算やモンゴメリ乗算を実装するMM演算器101であってもよい。また、MM演算器101の代わりに、他の演算器を用いても、同様に計算できる。例えば、図1中の(B)に示すような剰余乗算の剰余を出力するMM2演算器151を用いてもよい。さらに、MM演算器101が剰余乗算だけでなく、加算や減算も計算できる場合、ADD演算器102やSUB演算器103を用いなくても良く、剰余乗算ユニットの回路規模を削減できる。また、MM演算器101の代わりに、乗算を計算するMU演算器152と割算を計算するDIV演算器153を用いてもよい。また、入力として、データXとデータYとデータZとデータTを受け付け、(XY+T2k)/ZとXY+T2k(mod Z)を出力する演算器を用いても良い。この場合、下記のアルゴリズム9がある。アルゴリズム9は、
[アルゴリズム9]
入力:X = x1 c + x0 2m、Y = y1 c + y0 2m、Z = z1 c + z0 2m、ただし0≦m<w
出力:XY2-2m /Z and XY2-2m mod(Z)
ステップ1. r1 ← x1 y1 2-m mod(z1) and q1 ← x1 y1 -r1 z1 2m
ステップ2. r2 ← (x0+x1)(y1+y0) 2-m mod(2w-1) and q2 ← (x0+x1)(y0+y1) -r2 (2w-1) 2m
ステップ3. r3 ← x0 y0 2-m mod(2w) and q3 ← x0 y0 -r3 2w 2m
ステップ4. r4 ← q2 z0 2-m + (r2-q3)2w mod(2w) and q4 ← q2 z0+(r2-q3)2w-r4 2w 2m
ステップ5. r5 ← (q1-q2-q4) z0 2-m mod(2w) and q5 ← (q1-q2-q4) z0 -r5 2w 2m
ステップ6. Return q3 2w + (q1-q2-q4) and (r1-r2-r3-r4+q3-q5)2w+r3-r4-r5
である。
【0064】
特に、剰余乗算に加え、乗算を計算できる場合は、上記アルゴリズム3において、剰余乗算に代えて乗算を計算してもよい。図5中の(C)に示すように、上記アルゴリズム3のステップ1において、c=2のとき、wビット整数x0とy0の積の上位wビットは、剰余乗算の商q1と等しく(551)、下位wビットは剰余乗算の剰余r1と等しい。ステップ6も同様の原理で商q6と剰余r6が求まる(552)。
【0065】
さらに、演算器を利用する代わりに、各演算結果を予めメモリに書き込み、入力値から、適切にメモリの値を参照し、演算結果を得るように変更しても良い。この場合、演算器が必要とする回路規模を削減できるが、代わりにメモリの使用量が多くなる。
【0066】
図6は、剰余乗算ユニットの商と剰余を計算する上記アルゴリズム3を実行可能なマイクロコンピュータ601のブロック図の概略の一例を示している。図6において、602はクロック発生器、603はCPU、604は入出力ポート(I/Oポートと称する)、605はプログラムやデータが格納された読み出し専用のメモリであるROM、606はCPU603の作業領域を提供するメモリであるRAM、607はプログラムやデータを格納するメモリであるEEPROM、3は剰余乗算ユニットを示している。CPU603、I/Oポート604、ROM605、RAM606、EEPROM607、及び剰余乗算ユニット3は、アドレスバスとコントロールバスの総称であるバス611と、データバスの総称であるバス612に接続されている。クロック発生器602は、クロック端子CLKから供給されるクロック信号に基づき、または内部の動作基準クロック信号を生成して、CPU603に供給する。I/Oポート604は、データ入出力外部端子I/Oに接続する。Vcc、Vssはマイクロコンピュータ601の電源用外部端子、RESはマイクロコンピュータのリセット用外部端子である。
【0067】
図6に示すマイクロコンピュータ601は、単結晶シリコン基板のような、一個の半導体基板に例えば相補型MOS集積回路製造技術によって形成される。図6に示すマイクロコンピュータ601は一つの実装例であり、他の機器でも、同様に実装できる。例えば、RFIDや、PDA、携帯電話等の小型機器にも実装可能である。
【0068】
《実施の形態2》
非特許文献4の上記アルゴリズム2は、前記の剰余乗算専用器のビット長の2のべき乗の倍数(=2x倍)が計算可能なビット長であるため、ビット長の微調整がきかず、計算量の増加や消費メモリの増加を招く、という課題2があった。上記課題2に対して有効な、前記の剰余乗算専用器のビット長の整数倍の剰余乗算を計算するアルゴリズムと処理フローを以下に説明する。
【0069】
まず、前記の剰余乗算専用器が1回で計算できるビット長の最大3倍の剰余乗算を計算するアルゴリズム10を以下に例示する。アルゴリズム10は、
[アルゴリズム10]
入力:X = x2 c2 + x1 c + x0、Y = y2 c2 +y1 c + y0、Z = z2 c2 + z1 c + z0
出力:XY mod Z
ステップ1. q1 ← x2 y2 / z2 and r1 ← x2 y2 mod(z2)
ステップ2. q2 ← q1 z1 / z2 and r2 ← q1 z1 mod(z2)
ステップ3. q3 ← r1 c /z2 and r3 ← r1 c mod(z2)
ステップ4. q4 ← x2 y1 /z2 and r4 ← x2 y1 mod(z2)
ステップ5. q5 ← x1 y2 /z2 and r5 ← x1 y2 mod(z2)
ステップ6. q6 ← q1 z0/ z2 and r6← q1 z0 mod(z2)
ステップ7. q7 ← (-q2+q3+q4+q5) z1 / z2 and r7 ← (-q2+q3+q4+q5) z1 mod(z2)
ステップ8. q8 ← (-r2+r3+r4+r5)c / z2 and r8 ←(-r2+r3+r4+r5) c mod(z2)
ステップ9. q9 ← x2 y0 / z2 and r9 ← x2 y0 mod(z2)
ステップ10. q10 ← x1 y1 / z2 and r10 ← x1 y1 mod(z2)
ステップ11. q11 ← x0 y2 / z2 and r11 ← x0 y2 mod(z2)
ステップ12. q12 ← (-q2+q3+q4+q5) z0 / c and r12 ← (-q2+q3+q4+q5) z0 mod(c)
ステップ13. q13 ← (-q6-q7+q8+q9+q10+q11) z1 / c and r13 ← (-q6-q7+q8+q9+q10+q11) z1 mod(c)
ステップ14. q14 ← x1 y0 / c and r14 ← x1 y0 mod(c)
ステップ15. q15 ← x0 y1 / c and r15 ← x0 y1 mod(c)
ステップ16. q16 ← (-q6-q7+q8+q9+q10+q11) z0 / c and r16 ← (-q6-q7+q8+q9+q10+q11) z0 mod(c)
ステップ17. q17 ← x0 y0 / c and r17 ← x0 y0 mod(c)
ステップ18. Return ((-q12-q13+q14+q15-r6-r7+r8+r9+r10+r11)c2 + (-r12-r13+r14+r15- q16+q17)c + (-r16+r17))(mod Z)
である。
【0070】
上記アルゴリズム10も、実施の形態1における前記剰余乗算ユニットを用い、同様に実現できる。従って、実施の形態1と実施の形態2において、実装できる装置はプログラムを除いて変わらない。要するに、プログラムメモリ305にはアルゴリズム10を実現するデータ処理手順が記述されたプログラムが格納され、そのプログラムによって規定されるデータを処理行なうための制御回路303や演算器101,102,103等は図3の構成をそのまま用いればよい。
【0071】
上記のアルゴリズム10の各ステップは、剰余乗算の商と剰余を求める計算と、加算と減算から構成される。前記の剰余乗算専用器のビット長の2倍の剰余乗算を計算する上記アルゴリズム3を再帰的に2回呼び出す場合に比べると、ステップ数が圧倒的に少ない。例えば、上記アルゴリズム10における、17回の剰余乗算の商と剰余の計算に対し、上記アルゴリズム3の計算は、36回である。従って、剰余乗算の計算量が半分以下(=17/36)で済み、全体の処理時間を短縮できる。
【0072】
上記アルゴリズム10が、正しく剰余乗算(XY mod Z)を計算できることを以下に示す。
【0073】
c=2とすると、整数cと式(X=x2c2+x1c+x0)を用い、3wビットの整数Xを、前記の剰余乗算専用器のビット長(wビット)の整数x2, x1, x0に分割できる。他の整数Y、Zも同様にwビット整数y2,y1,y0,z2,z1,z0であらわせる(Y=y2c2+y1c+y0, Z=z2c2+z1c+z0)。従って、乗算XYをwビット整数で展開すると、(式0)から(式1)のように展開できる。
XY = (x2 c2 + x1c + x0)(y2 c2 + y1c + y0)…(式0)
= x2y2c4+(x2y1+x1y2)c3 + (x2y0+x1y1+x0y2)c2 + (x1y0+x0y1)c + x0y0…(式1)
なお、展開方法としては、(式1)のような単純な展開式の他、効率的な乗算式への変換が知られているKaratsubaアルゴリズムや、Tom-Cook乗算アルゴリズム、高速フーリエ変換アルゴリズム等の計算手法を用いても良い。
【0074】
以降では、(式1)の値が法Z未満になるよう、(式1)の各項目を変換、整理していく。この要が、次式
z2c2 = -z1c - z0 (mod Z)
である。以下のその変換と整理の内容を示す。
【0075】
(式1の第一項)x2y2c4
= (q1z2+r1)c4 (式(x2 y2 = q1 z2 + r1)、即ち、r1=x2y2 modz2とq1=x2y2/z2を利用)
= -q1(z1c + z0)c2 + r1c4 (式(z2c2 = -z1c -z0 (mod Z))を利用)
= (-q1z1+r1c)c3 - q1z0c2 …(式2)
上記展開式の第一式と第二式において、x2 y2 = q1 z2+r1が成り立つ。上記の式を満たすq1とr1は、(式a)と(式b)の関係式から、(x2 y2 / z2)の値を持つ整数をq1、(x2 y2 mod(z2))の値を持つ整数をr1とすればよい。従って、上記アルゴリズム10のステップ1
q1←x2 y2 / z2
r1←x2 y2 mod(z2)
が導けた。
【0076】
(式1)の第一項を展開した(式2)と、式1の他の項の共通項を探す。すると、(式2)の第一項と(式1)の第二項が共通項c3でまとめられる。すなわち、
(式2)の第一項+ (式1)の第二項
= (-q1z1+r1c)c3 +(x2y1+x1y2)c3
= ((-q2+q3+q4+q5)z2+(-r2+r3+r4+r5))c3
= (q' z2+r')c3 (q'=-q2+q3+q4+q5 かつ r'=-r2+r3+r4+r5 と整理)
= - q' z1c2 - q'z0c+r'c3 …(式3) (式(z2c2 = -z1c -z0 (mod Z))を利用)
となる。
【0077】
ステップ1を導いた場合と同様、(式a)と(式b)の関係式から、上記展開式の第一式と第二式において、q1z1=q2z2+r2、r1c=q3z2+r3、x2y1=q4z2+r4、x1y2=q5z2+r5が成り立つ。
従って、
ステップ2. q2 ← q1 z1 / z2 and r2 ← q1 z1 mod(z2)
ステップ3. q3 ← r1 c /z2 and r3 ← r1 c mod(z2)
ステップ4. q4 ← x2 y1 /z2 and r4 ← x2 y1 mod(z2)
ステップ5. q5 ← x1 y2 /z2 and r5 ← x1 y2 mod(z2)
のように、上記アルゴリズム10のステップ2からステップ5が導けた。
【0078】
(式1)の第一項を展開した(式2)の第一項を含む展開式である(式3)と、(式2)の他の項と、(式1)の残りの項の共通項を探す。そうすると、(式1)の第三項と(式2)の第二項と(式3)の第一項と第三項が共通項c2でまとめられる。すなわち、
(式1)の第三項+(式2)の第二項+(式3)の第一項+(式3)の第三項
= (x2y0+x1y1+x0y2)c2 - q1z0c2 - q'z1c2+r'c3
= ((-q6-q7+q8+q9+q10+q11)z2+(-r6-r7+r8+r9+r10+r11))c2
= q''z2c2 + r''c2
(q''=-q6-q7+q8+q9+q10+q11かつ r''=-r6-r7+r8+r9+r10+r11と整理)
= - q''z1c - q''z0+ r''c2…(式4) (式(z2c2=-z1c-z0(mod Z))を利用)
である。
【0079】
ステップ1からステップ5を導いた場合と同様、(式a)と(式b)の関係式から、上記展開式の第一式と第二式において、q1z0=q6z2+r6、(-q2+q3+q4+q5)z1=q7z2+r7、(-r2+r3+r4+r5)c=q8z2+r8、x2y0=q9z2+r9、x1y1=q10z2+r10、x0y2=q11z2+r11が成り立つ。従って、
ステップ6. q6 ← q1 z0/ z2 and r6← q1 z0 mod(z2)
ステップ7. q7 ← (-q2+q3+q4+q5) z1 / z2 and r7 ← (-q2+q3+q4+q5) z1 mod(z2)
ステップ8. q8 ← (-r2+r3+r4+r5)c / z2 and r8 ←(-r2+r3+r4+r5) c mod(z2)
ステップ9. q9 ← x2 y0 / z2 and r9 ← x2 y0 mod(z2)
ステップ10. q10 ← x1 y1 / z2 and r10 ← x1 y1 mod(z2)
ステップ11. q11 ← x0 y2 / z2 and r11 ← x0 y2 mod(z2)
のように、上記アルゴリズム10のステップ6からステップ11が導けた。
【0080】
共通項c2および共通項cでまとめるよう、共通項でくくれない各式の項に対し、cを法とする乗算を計算する。従って、下記の式が導ける。すなわち、
(式1)の第四項+(式3)の第二項+(式4)の第一項
= (x1y0+x0y1)c - q'z0c - q' z1c
= (-q12-q13+q14+q15)c2 + (-r12-r13+r14+r15)c…(式5)
(式1)の第五項+(式4)の第二項
= -q''z0 + x0y0
= (-q16+q17)c + (-r16+r17) …(式6)
である。
【0081】
ステップ1からステップ11を導いた場合と同様、(式a)と(式b)の関係式から、 (-q2+q3+q4+q5)z0=q12c+r12、(-q6-q7+q8+q9+q10+q11)z1=q13c+r13、x1y0=q14c+r14、x0y1=q15c+r15、(-q6-q7+q8+q9+q10+q11)c=q16c+r16、x0y0=q17c+r17が成り立つ。従って、
ステップ12. q12 ← (-q2+q3+q4+q5) z0 / c and r12 ← (-q2+q3+q4+q5) z0 mod(c)
ステップ13. q13 ← (-q6-q7+q8+q9+q10+q11) z1 / c and r13 ← (-q6-q7+q8+q9+q10+q11) z1 mod(c)
ステップ14. q14 ← x1 y0 / c and r14 ← x1 y0 mod(c)
ステップ15. q15 ← x0 y1 / c and r15 ← x0 y1 mod(c)
ステップ16. q16 ← (-q6-q7+q8+q9+q10+q11) z0 / c and r16 ← (-q6-q7+q8+q9+q10+q11) z0 mod(c)
ステップ17. q17 ← x0 y0 / c and r17 ← x0 y0 mod(c)
のように、上記アルゴリズム10のステップ12からステップ17が導けた。
【0082】
以上の式を全て整理すると、(式1)は、(式4)の第三項と(式5)の第一項と(式5)の第二項と(式6)の第一項と(式6)の第二項の和で表せる。従って、以下の式
(式1)
= (式4)の第三項+(式5)の第一項+(式5)の第二項+(式6)の第一項+(式6)の第二項
= (-q12-q13+q14+q15+r'')c2+(-r12-r13+r14+r15-q16+q17)c+(-r16+r17)・・・(式7)
が成り立つ。(式7)の値は0未満または法Z以上の値となり得る。そこで、0未満の場合は法Zを加算し、法Z以上の場合は法Zの減算を繰返して、0以上法Z未満の値を得る。これによって上記アルゴリズムのステップ18が導けた。
【0083】
なお、上記の(式0)の展開方法を記載したプログラムをプログラム用メモリ305で管理し、剰余乗算ユニットにおける制御回路303が、前記プログラムに従って、上記展開式を計算しても良い。また、ROM605やRAM606、またはEEPROM607で前記プログラムを管理し、マイクロコンピュータにおける、CPU603が前記プログラムに従って、展開式を計算してもよい。
【0084】
上記アルゴリズム10は、前記の剰余乗算専用器のビット長の最大3倍の剰余乗算を計算する場合に利用できる。上記アルゴリズム10を汎用化した、前記の剰余乗算専用器のビット長の整数倍(2倍、3倍、4倍、5倍、6倍・・・)の剰余乗算を計算する処理フローを図7に示す。図7の処理フローに従い、前記コプロのビット長の整数倍の剰余乗算が計算できる。
【0085】
まず、前記の剰余乗算専用器のビット長にあわせ、剰余乗算に必要なパラメータ(乗数X、被乗数Y、法Z)を分解する。分解式は、特に制限されないが、例えば次式で表せる。
X=Σ(i=0)[k/w]xici、Y=Σ(i=0)[k/w]yici、Z=Σ(i=0)[k/w]zici・・・(式8)
ただし、kは各整数のビット長とし、[k/w]はビット長kを前記の剰余乗算専用器のビット長wで割った値を切り下げた整数とする。
【0086】
例えば、上記アルゴリズム10の(式0)も(式8)と同様の分解ステップにあたる(S701)。分解したパラメータを展開し、各パラメータ毎の乗算を構成する。この展開ステップでは、単純な展開式や、Karatsubaアルゴリズム、Tom-Cook乗算アルゴリズム、高速フーリエ変換アルゴリズム等の計算手法が利用できる。例えば、上記アルゴリズム10の(式1)が上記の展開ステップにあたる(S702)。展開された方程式において、最高次ビットまたは最低次ビットの項目から処理を始める。(式1)で最高次ビットから始める場合、第一項が6wビット、第二項が5wビット、第三項が4wビット、第四項が3wビット、第五項が2wビットである。従って、(式1)では第一項x2y2c4が最高ビット長である(S703)。上記項目に対して、剰余乗算を計算する。このとき、(式8)の法Zにおける最高次の整数z[k/w]を剰余乗算の法とする。例えば、上記アルゴリズム10では、最高次の項目であるx2y2c4に対し、整数z2が剰余乗算の法である(S704)。各項目を一括して計算できないか、整理するために、共通項をまとめる。上記アルゴリズム10の場合では、(式2)の第一項と(式1)の第二項の計算において、z2c2を被乗数とする各整数q2、q3、q4、q5と、c3を被乗数とする各整数r2、r3、r4、r5をそれぞれq'とr'にまとめている(S705)。
(式8)を変形すると、次式が得られる。
z[k/w] = -Σ(i=0)[k/w]-1 zici (mod Z)・・・(式9)
(式9)を用い、S704で計算した剰余乗算の商に関わる項目の次数を減らす、リダクション処理を行う。例えば、上記アルゴリズム10の場合では、(式1の第一項)x2y2c4の変形式の第二式から、6wビットの整数q1z2c4を5wビットの整数q1z1c3と4wビットの整数q1z0c2に、(式9)を用いて変形している(S706)。
【0087】
各項目の最高ビット長が法Zのビット用とほぼ等しいかそれ以下ならば、S708へ進み、そうでなければ、S702に戻る(S707)。
【0088】
各項目の値を合計する。合計値が負または法Z以上の場合、0以上法Z未満となるよう、法Zの加減算を行う。例えば、上記アルゴリズム10では、(式7)以降の処理がこれにあたる(S708)。
【0089】
実施の形態1と同様に、剰余乗算の商と剰余を計算するMM演算器101、加算を計算するADD演算器102、減算を計算するSUB演算器103の3種類の演算器を用いて、図7に記す処理フロー(上記のアルゴリズム10を含む)を処理できる。
【0090】
実施の形態1と同様に、図3で概略を記したブロック図における剰余乗算ユニット3は、図7の処理フローが実行可能である。また、図3に示される全ての機能ブロックは、単結晶シリコン基板のような、一個の半導体基板で形成できる。
【0091】
実施の形態1と同様に、図4に概略を示した処理フローを用い、図7の処理フローが実行できる。また、図4における処理フローにて、MM演算器101における剰余乗算の計算方法は問わず、剰余乗算の商と剰余を計算できる仮定したMM演算器101の代わりに、例えば、古典的な剰余乗算やモンゴメリ乗算を実装するMM演算器101であってもよい。また、MM演算器101の代わりに、他の演算器を用いても、同様に計算できる。例えば、図1中の(B)に示すような剰余乗算の剰余を出力するMM2演算器151を用いてもよい。さらに、MM演算器101が剰余乗算だけでなく、加算や減算も計算できる場合、ADD演算器102やSUB演算器103を用いなくても良く、剰余乗算ユニットの回路規模を削減できる。また、MM演算器101の代わりに、乗算を計算するMU演算器152と割算を計算するDIV演算器153を用いてもよい。特に、実施の形態1と同様に、剰余乗算に加え、乗算を計算できる場合は、剰余乗算に代えて乗算を計算してもよい。また、演算器を利用する代わりに、各演算結果を予めメモリに書き込み、入力値から、適切にメモリの値を参照し、演算結果を得るように変更しても良い。
【0092】
実施の形態1と同様に、図6に概略を記したブロック図に示されるマイクロコンピュータにおいて、図4における処理フローは実行可能である。また、図6に示すマイクロコンピュータ601は、単結晶シリコン基板のような、一個の半導体基板で形成できる。さらに、図6に示すマイクロコンピュータ601は一つの実装例であり、例えば、RFIDや、PDA、携帯電話等の、他の機器でも実装可能である。
【0093】
暗号アルゴリズムでは、べき乗の剰余乗算を要求するRSA暗号など、繰り返しの剰余乗算を処理する場合がある。図8において、剰余乗算ユニットを備えたマイクロコンピュータ601の処理フローの概略を示す。剰余乗算ユニットが備える演算機能を繰り返し用い、それらの剰余乗算に対応できる。なお、剰余乗算の計算手順は、特に図8の処理フローに制限されない。例えば、図8におけるS801からS805の処理はCPU603が、S851からS854の処理は剰余乗算ユニットが担当するが、担当区分を変更しても良い。例えば、全ての処理を剰余乗算ユニットが担当しても良い。
【0094】
まず、CPU603は剰余乗算ユニットに入力するデータX、データY、データZを指定する(S801)。既に入力データが剰余乗算ユニットに設定される場合は、既に設定済みのデータを省いても良く、また、剰余乗算ユニットにより、剰余乗算の演算に必要な変数、剰余乗算のビット長等を入力するデータに指定しても良い。指定したデータの値またはアドレス(直接アドレス、または間接的にデータを参照できるアドレスでもよい)はCPU603から剰余乗算ユニットに通知される(D801)。剰余乗算ユニットは指定されたデータを用い、剰余乗算の入力値を設定する(S851)CPU603は、剰余乗算ユニットに演算開始を指示する制御信号を送信する(S802)。剰余乗算の演算開始に必要な変数がある場合、S802にて剰余乗算ユニットに送信してもよい。演算開始を意味する前記制御信号がCPU603から剰余乗算ユニットに通知される(D802)。剰余乗算ユニットは前記制御信号を受信すると、剰余乗算を計算する(S852)。剰余乗算ユニットが剰余乗算を計算中、CPU603は剰余乗算ユニットの演算終了を待つ、または他の演算を実行する(S803)。剰余乗算ユニットは剰余乗算を出力する(S853)。剰余乗算ユニットは、CPU603に演算終了を通知する(S854)。剰余乗算ユニットの演算過程または出力過程等でエラーが発生した場合、エラーを意味する信号をS854にてCPU603に送信してもよい(D803)。CPU603は、上記信号を受信し、演算終了を確認する(S804)。エラーを意味する信号が受信された場合は、CPU603は演算過程でのエラー発生を確認する。以上の過程で、CPU603と剰余乗算ユニットは、剰余乗算の商と剰余、または剰余乗算の剰余が計算できた。べき乗の剰余乗算を実行するアルゴリズムなどに従い、CPU603は処理の繰り返しの是非を判断する(S806)。上記の処理を繰り返す場合は、S801へ戻り、繰り返さない場合は終了する。
【0095】
なお、上記手順は、剰余乗算の剰余、または剰余乗算の商と剰余を計算する場合であったが、加算や減算等の他の演算を実施する場合でも同様である。また、制御信号の送受信は、システムバス300を経由しても良い。
【0096】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。本発明は、ICカードだけではなく、暗号機能を備えた種々の組込機器、情報セキュリティ技術に用いる演算器に、広く適用することができる。
【図面の簡単な説明】
【0097】
【図1】図1は本発明の実施の形態の形態1における、剰余乗算ユニットが備える、または備えてもよい演算器を示す説明図である。
【図2】図2は本発明の実施の形態1における、処理フローの概略を示すフローチャートである。
【図3】図3は本発明の実施の形態1において、図2に示した処理フローを実行可能な剰余乗算ユニットの構成を例示するブロック図である。
【図4】図4は本発明の実施の形態1において、図2に示した処理フローを実行するためのデータ処理手順を例示するフローチャートである。
【図5】図5は、本発明の実施の形態2において、剰余乗算ユニットにおける制御レジスタ307内のレジスタ値の一例、剰余乗算ユニットにおける管理レジスタ304とアキュムレータ312の伝達手続きの一例、アルゴリズム3のステップ1とステップ6において剰余乗算の代わりに乗算を実行する場合に乗算の結果から剰余乗算の商と剰余の相当箇所、の夫々を示した説明図である。
【図6】図6は剰余乗算ユニットの商と剰余を計算する上記アルゴリズム3を実行可能なマイクロコンピュータ601の構成を例示するブロック図である。
【図7】図7は剰余乗算を計算できる演算器が1回当たりに計算できるビット長の整数倍のビット長の剰余乗算を計算する処理フローを例示するフローチャートである。
【図8】図8は剰余乗算ユニットを備えたマイクロコンピュータ601のデータ処理フローを概略的に示すフローチャートである。
【符号の説明】
【0098】
101 MM演算器
102 ADD演算器
103 SUB演算器
152 MM2演算器
152 MU演算器
153 DIV演算器
301 クロック発生器
302 入出力ポート
303 制御回路
305 プログラム用メモリ305
304 管理レジスタ
306 データの格納用メモリ
307 制御レジスタ
308 セレクタ
601 マイクロコンピュータ
602 クロック発生器
603 CPU
604 入出力ポート
605 ROM
606 RAM
607 EEPROM

【特許請求の範囲】
【請求項1】
剰余乗算のための演算部と制御部を有し、
前記演算部は剰余乗算の演算処理を行い、
前記制御部は前記剰余乗算の演算処理を再帰的に複数回繰り返してwビットの剰余乗算の剰余と商から、2wビットの剰余乗算の商と剰余を計算するとき、先の剰余乗算の演算処理で求めたwビットの剰余乗算の剰余と商を、次の剰余乗算の演算処理に振り分ける制御を行う、データ処理装置。
【請求項2】
剰余乗算のための演算部と制御部を有し、
前記演算部は、wを演算値のビット数を表す正の整数、
x、y、zを0≦x、y、z<2wを満たすwビットの非負の整数、
X、Y、Zを0≦X、Y、Z<22wを満たす2wビットの非負の整数、
m、nを非負の整数とするとき、
剰余乗算の演算式xy = qz+r2nを満たす整数qと整数rを出力するための演算処理を行ない、
前記制御部は、前記演算処理を再帰的に繰り返すとき、前記剰余乗算専用器が出力する前記整数qと前記整数rを、乗算の演算式XY = QZ + R22mを満たす整数Qと整数Rを得るための次の演算処理に振り分ける処理を制御する、データ処理装置。
【請求項3】
前記演算部は、剰余乗算器、加算器、及び減算器を有する、請求項2記載のデータ処理装置。
【請求項4】
前記演算部は、データメモリと、
アキュムレータと、
前記データメモリ又は前記アキュムレータから前記剰余乗算器、前記加算器、又は前記減算器へのデータ経路を選択するセレクタと、を更に有し、
前記アキュムレータは、前記剰余乗算器、前記加算器、又は前記減算器の出力を累積し、累積されたデータをセレクタ又はデータメモリに出力する、請求項3記載のデータ処理装置。
【請求項5】
前記制御部は、前記処理の手順を記述した演算制御プログラムを保持するプログラムメモリと、
前記プログラムメモリから読み出される演算命令を解読して前記演算部に前記演算処理を実行させるための制御信号を生成する制御回路と、を有する請求項2記載のデータ処理装置。
【請求項6】
前記制御部に暗号化又は復号のための剰余乗算処理の指示を与える中央処理装置とを更に備え、1個の半導体基板に形成された、請求項2記載のデータ処理装置。
【請求項7】
前記中央処理装置のアドレス空間に配置されたRAMを更に有し、
前記制御部は前記RAMを前記演算部のワークメモリとして用いことが可能とされる、請求項6記載のデータ処理装置。
【請求項8】
剰余乗算のための演算部と制御部を有し、
前記演算部は剰余乗算の演算処理を行い、
前記制御部は、wビットの剰余乗算の剰余乗算の剰余と商から、kwビット(k>2)の剰余乗算の商と剰余を計算するとき、kwビットの乗算をwビットの乗算に分割する分割演算処理と、分割処理された乗算の積から剰余乗算を計算するためのリダクション処理を前記演算部に実行させる、データ処理装置。
【請求項9】
剰余乗算のための演算部と制御部を有し、
前記演算部は剰余乗算の演算処理を行い、
前記制御部は、X、Y、Zを0≦X、Y、Z<2kwを満たすkwビットの非負の整数とし、剰余乗算の演算式R=XY2-kw mod Zを満たす非負の整数Rを得るとき、
kwビットの整数同士の乗算の積XYを小さいビット数の乗算の積に分割する分割演算処理と、
前記の整数Zに基づいて前記分割処理された前記乗算の積XYに対して次数を低くするリダクション処理と、を前記演算部に実行させる、データ処理装置。
【請求項10】
前記リダクション処理は、前記分割処理された前記乗算の積XYに対して、最終的に0以上Z未満の値を求める処理である、請求項9記載のデータ処理装置。
【請求項11】
前記演算部は、剰余乗算器、加算器、及び減算器を有する、請求項10記載のデータ処理装置。
【請求項12】
前記演算部は、データメモリと、
アキュムレータと、
前記データメモリ又は前記アキュムレータから前記剰余乗算器、前記加算器、又は前記減算器へのデータ経路を選択するセレクタと、を更に有し、
前記アキュムレータは、前記剰余乗算器、前記加算器、又は前記減算器の出力を累積し、累積されたデータをセレクタ又はデータメモリに出力する、請求項11記載のデータ処理装置。
【請求項13】
前記制御部は、前記処理の手順を記述した演算制御プログラムを保持するプログラムメモリと、
前記プログラムメモリから読み出される演算命令を解読して前記演算部に前記分割演算処理及びリダクション処理を実行させるための制御信号を生成する制御回路と、を有する請求項9記載のデータ処理装置。
【請求項14】
前記制御部に暗号化又は復号のための剰余乗算処理の指示を与える中央処理装置を更に備え、1個の半導体基板に形成された、請求項9記載のデータ処理装置。
【請求項15】
前記中央処理装置のアドレス空間に配置されたRAMを更に有し、
前記制御部は前記RAMを前記演算部のワークメモリとして用いことが可能とされる、請求項14記載のデータ処理装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate


【公開番号】特開2010−91913(P2010−91913A)
【公開日】平成22年4月22日(2010.4.22)
【国際特許分類】
【出願番号】特願2008−263670(P2008−263670)
【出願日】平成20年10月10日(2008.10.10)
【出願人】(503121103)株式会社ルネサステクノロジ (4,790)
【Fターム(参考)】