JP5179933B2 - データ処理装置 - Google Patents
データ処理装置 Download PDFInfo
- Publication number
- JP5179933B2 JP5179933B2 JP2008108462A JP2008108462A JP5179933B2 JP 5179933 B2 JP5179933 B2 JP 5179933B2 JP 2008108462 A JP2008108462 A JP 2008108462A JP 2008108462 A JP2008108462 A JP 2008108462A JP 5179933 B2 JP5179933 B2 JP 5179933B2
- Authority
- JP
- Japan
- Prior art keywords
- storage area
- value
- mod
- storing
- result
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Description
y=2(J−1)m・e[J−1]+2(J−2)m・e[J−2]+…+2m・e[1]+e[0] (式1)
を満たす。m−ary法の手順は例えば、
result:= 1;
for i:=J−1 downTo 0 do
for j:=1 to m do
result:=result2 mod N
end for
result:=result * x^(e[i]) mod N
end for
return result
とされる。
N−1=2(J−1)m・e[J−1]+…+2m・e[1]+e[0] (式2)
を満たすものとする。
result:=R mod N
for i:=J−1 downTo 0 do
for j:=1 to m do
result:=result2 ・R−1mod N
end for
result:=result・2e[i]・R−1 mod N
result:=result・R2・R−1 mod N
end for
result:=result・1・R−1 mod N
return result
である。
a^(2m)=2n (式3)
を満たす補正値aを乗ずればよい。
a=2^(n/(2m)) (式4)
でaは与えられる。nが2のベキ数の場合は、mの定義より2m=nであるので、直ちに
a=2 (式5)
が求まる。
a=2・2^(n・(2m)−1) (式6)
となり、2(n/(2^m)−1)は整数ではないため、そのまま補正値に用いることはできない。そこで、補正をm回の剰余自乗算の前に行う部分a’と、m回の剰余自乗算の後に行う部分bの2つに分ける。ここでは、a’=2とする。すなわち、剰余自乗算前に2で補正を行い、剰余自乗算後の補正値として(式7)
b=(2^(n/(2m)−1))^(2m) (式7)
を満たすbを考える。
b=2^(n−2m) (式8)
となる。したがって、nが2のベキ数でない場合の補正値 a’・b は、
a’・b=2・2^(n−2m)=2^(1+n−2m) (式9)
となる。nが2のベキ数の場合は、n−2m=0であるので、(式9)は(式5)と等しくなる。また、(式7)はb=1となる。
2^(e[i]+1+n−2m) (式10)
を乗じることになる。e[i]はmビットの値なので、最大値は2m−1となる。この値を(式10)に代入すると、2nとなる。これは、n+1ビット長の値であり、コプロのビット長nを超えてしまう。こうしたビット溢れが生ずるのは、e[i]が最大値である2m−1となる場合のみで、それ以外の場合は、(式10)の値は2n未満となり、nビット以下の値であるので、nビット長のコプロセッサで計算ができる。
2^(e[1]+n−2m) (式11)
を乗じる。e[1]+n−2^mの値は、必ず2n未満となるため、2nとの比較は必要ない。この値を乗じた後、m回の自乗演算を行うと、被演算数にはRが乗じられている状態になるので、最後の最下位の指数e[0]を処理する際に、
2^(e[0]) (式12)
を乗じることで、最終結果はモンゴメリ形式ではなく、通常の数値表現になる。以上の手順をアルゴリズム表現すると、以下の如く、
result:=R2 mod N
if e[J−1]+1<2n then
result:=result・2^(e[i]+1)・R−1mod N
else
result:=result・(R mod N)・R−1mod N
end if
for i:=J−2 downTo 2 do
for j:=1 to m do
result:=result2 ・R−1mod N
end for
if e[i]+1+n−2m<2n then
result:=result・2^(e[i]+1+n−2m)・R−1mod N
else
result:=result・(R mod N)・R−1mod N
end if
end for
for j:=1 to m do
result:=result2 ・R−1mod N
end for
result:=result・2^(e[1]+n−2m)・R−1 mod N
for j:=1 to m do
result:=result2 ・R−1mod N
end for
result:=result・2^(e[0])・R−1 mod N
return result
と、表すことができる。
N ± 2^(e[i]+1+n−2m) (式13)
を使用することができる。しかし、(式13)では加減算によるキャリーが発生し、キャリーの伝版によるディレイや、最上位ビットからのキャリーの発生による桁あふれが発生する可能性がある。そこで、
N xor 2^(e[i]+1+n−2m) (式14)
の形式にすることで、キャリーは発生しなくなる。(式14)はNの(e[i]+1+n−2m)ビット目のビットが1であるか0であるかにより、加減算のいずれかが行われることと等価で、Nの該当ビットが1であった場合は減算、Nの該当ビットが0であった場合は加算が行われる。排他的論理和(xor)演算ではキャリーの伝播が発生せず、キャリーの伝播に伴うディレイもない上、回路も小さくて済む。
result:=R2 mod N
if e[J−1]+1<2n then
result:=result・(N xor 2^(e[J−1]+1))・R−1mod N
else
result:=result・(R mod N)・R−1mod N
end if
for i:=J−2 downTo 2 do
for j:=1 to m do
result:=result2 ・R−1mod N
end for
if e[i]+1+n−2m<2n then
result:=result・(N xor 2^(e[i]+1+n−2m))・R−1 mod N
else
result:=result・(R mod N)・R−1 mod N
end if
end for
for j:=1 to m do
result:=result2 ・R−1mod N
end for
result:=result・2^(e[1]+n−2m)・R−1 mod N
for j:=1 to m do
result:=result2 ・R−1mod N
end for
result:=result・2^(e[0])・R−1 mod N
return result
と、表すことができる。
N xor 2^(e[i]) (式15)
の値を演算数に用いる。
result:=N xor 2^(e[J−1])
for i:=J−2 downTo 1 do
for j:=1 to m do
result:=result2 mod N
end for
result:=result・(N xor 2^(e[i])) mod N
end for
for j:=1 to m do
result:=result2 mod N
end for
result:=result・2^(e[0]) mod N
return result
と、表すことができる。
先ず、本願において開示される発明の代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
前記素数候補Nを記憶する処理と、
Nのビット長nを記憶する処理と、
log2(n)を超えない最大の整数mを計算して(図9のステップ7010)記憶する処理と、
前記素数候補Nから、N−1を計算し、JをJ≧n/mとなる最小の整数としたときに(図9のステップ7020)、(N−1)を最下位からmビットごとにJ個の区間に区切り、(N−1)=2(J−1)m・e[J−1]+2(J−2)m・e[J−2]+…+2m・e[1]+e[0]なる式を満たすように(N−1)を部分指数e[0],e[1],…,e[J−1]に分割する指数部切り出し処理と (図9のステップ7030)、
前記指数部切り出し処理により切り出されたmビットの値e[i]から2^(e[i]+1+n−2m)を生成する2のベキ乗生成処理と(図9のステップ7060の一部分)、
前記指数部切り出し処理で切り出された部分指数の最上位の値に1を加えたe[J−1]+1が2nと等しい場合は(図9のステップ7050)、R mod N=2n mod Nの演算結果と、R2 mod N=22n mod Nの演算結果との前記素数候補Nを法とするモンゴメリ剰余乗算を行ってその演算結果を第1記憶領域に格納する第1処理と (図9のステップ7070)、
前記e[J−1]+1が2n未満の場合は、前記2のベキ乗生成手段により計算した2^(e[J−1]+1)と、前記R2modN=22n mod Nの演算結果との前記Nを法とするモンゴメリ剰余乗算を行ってその演算結果を前記第1の記憶領域に格納する第2処理と (図9のステップ7060)、
前記第1処理又は前記第2処理のいずれか一方の処理の後に内部の状態変数iをJ−2とする第3処理と(図9のステップ7080)、
前記第3処理の後に、前記素数候補Nを法とし、前記第1記憶領域に記憶された値同士のモンゴメリ剰余乗算を行ってその演算結果を前記第1記憶領域に書き戻す動作をm回繰り返す第4処理と(図10のステップ7090)、
前記第4処理の後に、前記指数部切り出し処理で切り出された部分指数e[i]が2m−1未満の場合は(図10のステップ7100)、前記2のベキ乗生成処理により生成された2^(e[i]+1+n−2m)と前記第1の記憶領域に格納された値との前記Nを法とするモンゴメリ剰余乗算を行ってその演算結果を前記第1記憶領域に格納する第5処理と(図10のステップ7110)、
前記第5処理の後に、前記内部状態変数iから1を引いた値を前記内部状態変数iに格納し(図10のステップ7130)、前記iの値が2以上の場合は前記第4処理に戻り、前記iの値が1以下になるまでそれを繰り返す第6処理と、
前記第6処理の後に、前記素数候補Nを法とし、前記第1記憶領域に記憶された値同士のモンゴメリ剰余乗算を行ってその演算結果を前記第1記憶領域に書き込む動作をm回繰り返す第7処理と(図11のステップ7150)、
前記第7処理の後、前記2のベキ乗生成処理により計算された2^(e[1]+n−2m)と、前記第1記憶領域に格納された値との前記素数候補Nを法とするモンゴメリ剰余乗算を行ってその演算結果を前記第1記憶領域に格納する第8処理と(図11のステップ7160)、
前記第8処理の後、前記モンゴメリ剰余乗算装置により、前記素数候補Nを法とし、前記第1記憶領域に格納された値同士のモンゴメリ剰余乗算を行ってその演算結果を前記第1記憶領域に格納する動作をm回繰り返す第9処理と(図11のステップ7170)、
前記第9処理の後、前記2のベキ乗生成処理により計算された2^(e[0])と、前記第1記憶領域に格納された値との前記素数候補Nを法とするモンゴメリ剰余乗算を行って(図11のステップ7180)、その演算結果をフェルマーテスト結果として出力する第10処理とを含む。
前記素数候補Nを記憶する処理と、
Nのビット長nを記憶する処理と、
log2(n)を超えない最大の整数mを計算して(図12のステップ7010)記憶する処理と、
前記素数候補Nから、N−1を計算し、JをJ≧n/mとなる最小の整数としたときに(図12のステップ7020)、(N−1)を最下位からmビットごとにJ個の区間に区切り、(N−1)=2(J−1)m・e[J−1]+2(J−2)m・e[J−2]+…+2m・e[1]+e[0]なる式を満たすように(N−1)を部分指数e[0],e[1],…,e[J−1]に分割する指数部切り出し処理と(図12のステップ7030)、
前記指数部切り出し処理により切り出されたmビットの値e[i]から2^(e[i]+1+n−2m)
を生成する2のベキ乗生成処理と、
前記指数部切り出し処理により切り出された部分指数の最上位の値に1を加えたe[J−1]+1が2nと等しい場合は(図12のステップ7050)、R mod N=2n mod Nの演算結果と、R2 mod N=22n mod Nの演算結果との前記素数候補Nを法とするモンゴメリ剰余乗算を行って(図12のステップ7070)、その演算結果を第1記憶領域に格納する第1処理と、
前記e[J−1]+1が2n未満の場合は、前記2のベキ乗生成手段により計算した2^(e[J−1]+1)と前記素数候補Nとの排他的論理和(図4の3032)を取った値と、前記R2 mod N=22n mod Nの演算結果との前記Nを法とするモンゴメリ剰余乗算を行ってその演算結果を前記第1記憶領域に格納する第2処理と(図12のステップ8060)、
前記第1処理又は第2処理のいずれか一方の処理の後に内部の状態変数iをJ−2とする第3処理と (図12のステップ7080)、
前記第3処理の後に、前記素数候補Nを法とし、前記第1記憶領域に格納された値同士のモンゴメリ剰余乗算を行ってその4演算結果を前記第1記憶領域に格納する動作をm回繰り返す第4処理と(図12のステップ7090)、
前記第4処理の後に、前記指数部切り出し処理で切り出された部分指数e[i]が2m−1未満の場合は(図13のステップ7100)、前記2のベキ乗生成処理により生成された2^(e[i]+1+n−2m)と前記素数候補Nとの排他的論理和(図4の3032)が採られた値と、前記第1記憶領域に格納されている値との前記素数候補Nを法とするモンゴメリ剰余乗算を行って(図13のステップ8110)その演算結果を前記第1記憶領域に格納する第5処理と、
前記第4処理の後に、前記指数部切り出し処理で切り出された部分指数e[i]が2m−1と等しい場合は、前記R mod N=2n mod Nと、前記第1記憶領域に格納された値との前記素数候補Nを法とするモンゴメリ剰余乗算を行って(図13のステップ7120)その演算結果を前記第1記憶領域に格納する第6処理と、
前記第5処理又は第6処理のいずれか一方の処理の後に前記内部状態変数iから1を引いた値を前記内部状態変数iに格納し(図13のステップ7130)、前記iの値が2以上の場合は、前記第3処理に戻り(図13のステップ7140)、前記iの値が1以下になるまでそれを繰り返す第7処理と、
前記第7処理の後に前記素数候補Nを法とし、前記第1記憶領域に記憶された値同士のモンゴメリ剰余乗算を行ってその演算結果を前記第1記憶領域に格納する動作をm回繰り返す第8処理と(図14のステップ7150)、
前記第8処理の後、前記2のベキ乗生成処理で生成された2^(e[1]+n−2m)と、前記第1記憶領域に格納された値との前記素数候補Nを法とするモンゴメリ剰余乗算を行ってその演算結果を前記第1記憶領域に格納する第9処理と(図14のステップ7160)、
前記第9処理の後、前記素数候補Nを法とし、前記第1記憶領域に格納された値同士のモンゴメリ剰余乗算を行ってその演算結果を前記第1記憶領域に格納する動作をm回繰り返す第10処理と(図14のステップ7170)、
前記第10処理の後、前記2のベキ乗生成処理により生成された2^(e[0])と前記第1記憶領域に格納された値との前記Nを法とするモンゴメリ剰余乗算を行って(図14のステップ7180)、その演算結果をフェルマーテスト結果として出力する第11処理とを含む。
前記素数候補Nを記憶する処理と、
Nのビット長nを記憶する処理と、
log2(n)を超えない最大の整数mを計算して(図12のステップ7010)記憶する処理と、
前記素数候補Nから、N−1を計算し、JをJ≧n/mとなる最小の整数としたときに(図12のステップ7020)、(N−1)を最下位からmビットごとにJ個の区間に区切り、(N−1)=2(J−1)m・e[J−1]+2(J−2)m・e[J−2]+…+2m・e[1]+e[0]なる式を満たすように(N−1)を部分指数e[0],e[1],…,e[J−1]に分割する指数部切り出し処理と(図12のステップ7030)、
前記指数部切り出し処理により切り出されたmビットの値e[i]から2^(e[i]+1+n−2m)を生成する2のベキ乗生成処理と、
前記指数部切り出し処理により切り出された部分指数の最上位の値に1を加えたe[J−1]+1が2nと等しい場合は(図12のステップ7050)、R mod N=2n mod Nの演算結果と、R2 mod N=22n mod Nの演算結果との前記素数候補Nを法とするモンゴメリ剰余乗算を行って(図12のステップ7070)その演算結果を第1記憶領域に格納する第1処理と、
前記e[J−1]+1が2n未満の場合は、前記Nのe[J−1]+1ビット目の値を指定ビット反転器(3020)により反転した値と前記R2 mod N=22n mod Nの演算結果との前記素数候補Nを法とするモンゴメリ剰余乗算を行ってその演算結果を前記第1記憶領域に格納する第2処理と(図12のステップ8086)、
前記第1処理又は第2処理のいずれか一方の処理の後に内部の状態変数iをJ−2とする第3処理と(図12のステップ7080)、
前記第3処理の後に、前記素数候補Nを法とし、前記第1記憶領域に記憶された値同士のモンゴメリ剰余乗算を行ってその演算結果を前記第1記憶領域に格納する動作をm回繰り返す第4処理と (図13のステップ7090)、
前記第4処理の後に、前記指数部切り出し処理によって切り出された部分指数e[i]が2m−1未満の場合は(図13のステップ7100)、前記Nのe[i]+1+n−2mビット目の値を前記指定ビット反転器(3020)により反転した値と前記第1記憶領域に格納された値との前記素数候補Nを法とするモンゴメリ剰余乗算を行ってその演算結果を前記第1記憶領域に記憶する第5処理と (図13のステップ8110)、
前記第4処理の後に、前記指数部切り出し処理によって切り出された部分指数e[i]が2m−1と等しい場合は、前記R mod N=2n mod Nの演算結果と前記第1記憶領域に格納された値との前記素数候補Nを法とするモンゴメリ剰余乗算を行ってその演算結果を前記第1記憶領域に格納する第6処理と(図13のステップ7120)、
前記第5処理又は第6処理のいずれか一方の処理の後に、前記内部状態変数iから1を引いた値を前記内部状態変数iに格納し(図13のステップ7130)、前記iの値が2以上の場合は、前記第3処理に戻り(図13のステップ7140)、前記iの値が1以下になるまでそれを繰り返す第7処理と、
前記第7処理の後に、前記素数候補Nを法とし、前記第1記憶領域に記憶された値同士のモンゴメリ剰余乗算を行ってその演算結果を前記第1記憶領域に格納する動作をm回繰り返す第8処理と(図14のステップ7150)、
前記第8処理の後、前記2のベキ乗生成手段により計算した2^(e[1]+n−2m)と前記第1記憶領域に格納された値との前記素数候補Nを法とするモンゴメリ剰余乗算をおこなってその演算結果を前記第1記憶領域に格納する第9処理と(図14のステップ7160)、
前記第9処理の後、前記素数候補Nを法とし、前記第1記憶領域に記憶された値同士のモンゴメリ剰余乗算を行ってその演算結果を前記第1記憶領域に格納する動作をm回繰り返す第10処理と(図14のステップ7170)、
前記第10処理の後、前記2のベキ乗生成処理により生成された2^(e[0])と、前記第1記憶領域に格納された値との前記素数候補Nを法とするモンゴメリ剰余乗算を行って(図14のステップ7180)その演算結果をフェルマーテスト結果として出力する第11処理とを含む、データ処理装置。
実施の形態について更に詳述する。以下、本発明を実施するための形態を図面に基づいて詳細に説明する。なお、発明を実施するための形態を説明するための全図において、同一の機能を有する要素には同一の符号を付して、その繰り返しの説明を省略する。
図1はフェルマーテストを実行する本発明に係るデータ処理装置1を機能ブロックダイヤグラムで示すものであり、図9、図10及び図11に示される本発明によるフェルマーテスト高速演算手順を実現する。データ処理装置1は、図7に例示されるモンゴメリ剰余乗算器(6050)及び演算レジスタ(6060,6070,6080)等を備えたモンゴメリ乗算コプロセッサ(6040)と共に、プログラムを実行してモンゴメリ乗算コプロセッサ6040等を制御する中央処理装置(6010)とメモリ(6020)等を有し、相互にバス6030で接続される。メモリ(6020)はプログラム(PGM)を格納する電気的に書換え可能な不揮発性メモリと、変数やデータ(DAT)等の格納に利用されるSRAM等のランダムアクセスメモリから成る。このデータ処理装置1は例えば、図17に示されるような1個の半導体基板に形成されたICカード用マイクロコンピュータ107として実現される。図17ではICカード用マイクロコンピュータ107はICカード基板108に搭載されている。ICカード用マイクロコンピュータ107は、プログラムや重要な情報がオンチップのメモリに格納されており、外部からそれらの情報に直接アクセスすることができない。ようになっている。外部との通信は、I/Oピン(106)のみを介して、完全にICカードチップの制御下で行われ、通常情報は暗号化した状態で送受信され、情報の秘匿性が実現されている。暗号通信を行うためには、通信する相手と暗号鍵の共有を行う必要がある。事前に鍵を通信相手と共有しておく方法もあるが、一度鍵が判明してしまうと、暗号化した通信内容が復号化されてしまう。そこで、通信に用いる暗号鍵をランダムに生成し、相手に鍵を送信し、その鍵を用いて通信するという方法が一般的に用いられている。外部インタフェース端子として、Vccピン101、リセットピン102、クロック入力ピン103、グランドピン104、不揮発メモリプログラム用電源ピン105、及びI/Oピン106を有する。
n0:=n
m:=0
while n0>1
m:=m+1
n0:=n0>>1
end while
としてもよい。この処理は、図9の7010のステップに相当する。1030で求められたmはmを格納するレジスタ(1020)に格納される。整数除算器(1040)により、n/mの小数点以下を切り上げた値が求められ、セレクタ(1050)により1040の出力が選択され、カウンタi(1060)にセットされる。この処理は、図9のステップ7020に相当する。カウンタiは、mビットごとに分割された(N−1)の何番目の部分ビットを取り出すのかを指定するために用いられる。一方、演算器(1100)により、R2 mod N=22n mod Nが計算され、結果レジスタ(1160)に格納される。図1においてその格納パスは図示が省略されている。この処理は図9のステップ7040に相当する。図9の“result”は前記結果レジスタ’1160)を意味する。つぎに、R mod N=2n mod Nが計算され、レジスタ(1110)に格納される。この処理は、図9のステップ7070で用いるRmodNの準備に相当する。iの値にしたがって、指数切り出し部(1080)により、(N−1)の最上位が切り出され、演算数生成装置(1090)により、2^(e[i]+1)が生成される。つぎに、mビット長の値すべてのビットが1である値を生成する2m−1生成器(1120)の値と1090により切り出された指数との比較が比較器(1130)により行われ、等しい場合はセレクタ(1140)はレジスタ(1110)を選択し、そうでない場合は演算数生成装置(1090)の出力が選択される。モンゴメリ剰余乗算器(1150)により、結果レジスタ(1160)の値とセレクタ(1140)に選択された値とのモンゴメリ剰余乗算が行われ、結果レジスタ(1160)に格納される。この処理は、図9のステップ7050、7060,7070に相当する。減算器(1070)により、カウンタi(1060)の値はデクリメントされ、デクリメントされた結果がセレクタ(1050)に選択され、カウンタi(1070)が更新される。この処理は図9のステップ7080に相当する。
図3はフェルマーテストを実行する本発明に係るデータ処理装置2を機能ブロックダイヤグラムで示すものであり、図12、図13及び図14に示される本発明によるフェルマーテスト高速演算手順を実現する。データ処理装置1は図7で説明したのと同様にモンゴメリ剰余乗算器(6050)及び演算レジスタ(6060,6070,6080)等を備えたモンゴメリ乗算コプロセッサ(6040)と共に、プログラムを実行してモンゴメリ乗算コプロセッサ6040等を制御する中央処理装置(6010)とメモリ(6020)等を有し、例えば図17に例示されるようなICカード用マイクロコンピュータ107として実現される。データ処理装置2で構成されたICカード用マイクロコンピュータ107はオンチップのメモリ等の限られた演算リソースを用いて暗号通信に使用する暗号鍵を生成する機能を備え、暗号鍵と種いて用いる乱数の素数性を判定する演算処理の第2の例について説明する。
図4はフェルマーテストを実行する本発明に係るデータ処理装置3を機能ブロックダイヤグラムで示すものであり、図12、図13及び図14に示される本発明によるフェルマーテスト高速演算手順を実現する。図3のデータ処理装置2では指定ビット反転器(3020)を用いたが、図4ではそれに代えて2のベキ数演算器(3031)と排他的論理和回路(3032)を用いた点が相違され、その他の構成については同じ参照符号を付してその詳細な説明を省略する。2のベキ数演算器(3031)は指数切り出し部(1080)で切り出された指数を2のベキ乗に形態にする。排他的論理和回路(3032)は2のべき乗演算器(3031)の出力とセレクタ(3010)の出力に対して排他的論理和を採る。その演算結果は図3の指定ビット反転器(3020)の出力と同じである。
図5はフェルマーテストを実行する本発明に係るデータ処理装置4を機能ブロックダイヤグラムで示すものであり、図15に示されるフェルマーテスト高速演算手順を実現する。この例ではモンゴメリ剰余乗算装置を用いない。データ処理装置4は、図8に例示される剰余乗算器(6150)及び演算レジスタ(6160,6170,6180)等を備えた剰余乗算コプロセッサ(6140)と共に、プログラムを実行して剰余乗算コプロセッサ6140等を制御する中央処理装置(6010)とメモリ(6020)等を有し、相互にバス6030で接続される。メモリ(6020)はプログラム(PGM)を格納する電気的に書換え可能な不揮発性メモリと、変数やデータ(DAT)等の格納に利用されるSRAM等のランダムアクセスメモリから成る。このデータ処理装置4は例えば、前記図17に示されるような1個の半導体基板に形成されたICカード用マイクロコンピュータ107として実現される。
図6はフェルマーテストを実行する本発明に係るデータ処理装置5を機能ブロックダイヤグラムで示すものであり、図16に示されるフェルマーテスト高速演算手順を実現する。この例ではモンゴメリ剰余乗算装置を用いない。データ処理装置4は、前記図8に例示される剰余乗算器(6150)及び演算レジスタ(6160,6170,6180)等を備えた剰余乗算コプロセッサ(6140)と共に、プログラムを実行して剰余乗算コプロセッサ6140等を制御する中央処理装置(6010)とメモリ(6020)等を有し、相互にバス6030で接続される。このデータ処理装置5は例えば、前記図17に示されるような1個の半導体基板に形成されたICカード用マイクロコンピュータ107として実現される。
1000:法Nを格納するレジスタ
1010:法Nのビット長を格納するレジスタ
1020:指数を切り出すビット長mを格納するレジスタ
1030:入力された値のlog2を超えない最大の整数を与えるlog2計算装置
1040:整数除算器
1050:整数除算器と減算器の出力を選択するセレクタ
1060:カウンタiを格納するレジスタ
1070:減算器
1080:N−1をmビット毎に区切り、下位側からi番目の値を出力する指数切り出し部
1090:入力値のビット位置のみを1としその他のビットを0とする演算数を生成する演算数生成装置
1100:R mod NもしくはR2modNを計算する演算器
1110:演算器が計算したRもしくはR2を格納するレジスタ
1120:mビット長の値すべてのビットが1である値を生成する2m−1生成器
1130:比較器
1150:モンゴメリ剰余乗算器
1160:剰余乗算の結果を格納する結果レジスタ
1180:カウンタ値jを格納するレジスタ
1190:減算器
1200:モンゴメリ剰余乗算モード制御装置
2010:法Nと法Nのビット長Nから、2n+1modNを計算する演算器
2020:2n+1modNをか苦悩するレジスタ
2030:演算途中の値を格納する演算数レジスタ
2060:モンゴメリ剰余乗算器
3020:指定されたビットのみを反転して出力する指定ビット反転器
3032:排他的論理和回路
4010:剰余乗算器
4020:結果を格納するレジスタ
4030:剰余乗算器の演算モードを制御する制御装置
6010:CPU
6020:メモリ
6030:バス
6040:剰余乗算コプロセッサ
6050:モンゴメリ剰余乗算器
6060:演算数を格納するレジスタ
6070:演算数を格納するレジスタ
6080:法Nを格納するレジスタ
6140:剰余乗算コプロセッサ
6150:剰余乗算器
6160:演算数を格納するレジスタ
6170:演算数を格納するレジスタ
6180:法Nを格納するレジスタ
7010:log2(n)を超えない最大の整数をmに代入するステップ
7020:n/mの少数点以下を切り上げた値をJに代入するステップ
7030:N−1をmビットごとに区切りe[0]…e[J−1]に代入するステップ
7040:R2modNをresultに代入するステップ
7050:e[J−1]+1がnと等しいか条件判定するステップ
7060:最上位の指数が2m−1未満の場合に最上位の指数に相当する演算数を剰余乗算するステップ
7070:最上位の指数が2m−1と等しい場合に最上位の指数に相当する演算数を剰余乗算するステップ
7080:カウンタiにJ−2を代入するステップ
7090:resultをm回剰余二乗算してresultに代入するステップ
7100:e[i]+n−2mがnと等しいか条件判断するステップ
7110:e[i]+n−2mがn未満のときi番目のmビットの指数に相当する演算数を剰余乗算するステップ
7120:e[i]+n−2mがnと等しいときi番目のmビットの指数に相当する演算数を剰余乗算するステップ
7130:カウンタiの値を1だけ減算するステップ
7140:iが1より大きいか条件判断し条件分岐するステップ
7150:resultをm回剰余二乗算してresultに代入するステップ
7160:最下位の1つ前のmビットの指数に相当する演算数を剰余乗算するステップ
7170:resultをm回剰余二乗算してresultに代入するステップ
7180:最下位の1つ前のmビットの指数に相当する演算数を剰余乗算するステップ
7190:結果を出力するステップ
8060:最上位の指数が2m−1未満の場合に最上位の指数に相当する演算数を法Nでマスクしながら剰余乗算するステップ
8110:e[i]+n−2mがn未満の場合にi番目のmビットの指数に相当する演算数を法Nでマスクしながら剰余乗算するステップ
9010:log2(n)を超えない最大の整数をmに代入するステップ
9020:n/mの少数点以下を切り上げた値をJに代入するステップ
9030:N−1をmビットごとに区切りe[0]…e[J−1]に代入するステップ
9040:最上位の指数に相当する演算数をresultに代入するステップ
9050はカウンタiにJ−2を代入するステップ
9060:resultをm回剰余二乗算してresultに代入するステップ
9070:i番目のmビットの指数に相当する演算数を剰余乗算するステップ
9080:カウンタiの値を1だけ減算するステップ
9090:カウンタiが0以上かを判定し条件分岐するステップ
9100:結果を出力するステップ
10070:i番目のmビットの指数に相当する演算数を法Nでマスクしながら剰余乗算するステップ
10090:カウンタiが1以上かを判定し条件分岐するステップ
10100:最下位のmビットの指数に相当する演算数を剰余乗算するステップ
Claims (6)
- モンゴメリ剰余乗算を行うモンゴメリ剰余乗算器を備えたコプロセッサと、プログラムを実行し前記コプロセッサを制御する中央処理装置とを有し、前記中央処理装置の制御によってデータ処理を行なうことにより、外部より与えられた素数候補Nに対して、2(N−1)mod Nを計算してフェルマーテストを実行するデータ処理装置であって、前記データ処理は、
前記素数候補Nを記憶する処理と、
Nのビット長nを記憶する処理と、
log2(n)を超えない最大の整数mを計算して記憶する処理と、
前記素数候補Nから、N−1を計算し、JをJ≧n/mとなる最小の整数としたときに、(N−1)を最下位からmビットごとにJ個の区間に区切り、(N−1)=2(J−1)m・e[J−1]+2(J−2)m・e[J−2]+…+2m・e[1]+e[0]なる式を満たすように(N−1)を部分指数e[0],e[1],…,e[J−1]に分割する指数部切り出し処理と、
前記指数部切り出し処理により切り出されたmビットの値e[i]から2^(e[i]+1+n−2m)を生成する2のベキ乗生成処理と、
前記指数部切り出し処理で切り出された部分指数の最上位の値に1を加えたe[J−1]+1が2nと等しい場合は、R mod N=2n mod Nの演算結果と、R2 mod N=22n mod Nの演算結果との前記素数候補Nを法とするモンゴメリ剰余乗算を行ってその演算結果を第1記憶領域に格納する第1処理と、
前記e[J−1]+1が2n未満の場合は、前記2のベキ乗生成手段により計算した2^(e[J−1]+1)と、前記R2modN=22n mod Nの演算結果との前記Nを法とするモンゴメリ剰余乗算を行ってその演算結果を前記第1の記憶領域に格納する第2処理と、
前記第1処理又は前記第2処理のいずれか一方の処理の後に内部の状態変数iをJ−2とする第3処理と、
前記第3処理の後に、前記素数候補Nを法とし、前記第1記憶領域に記憶された値同士のモンゴメリ剰余乗算を行ってその演算結果を前記第1記憶領域に書き戻す動作をm回繰り返す第4処理と、
前記第4処理の後に、前記指数部切り出し処理で切り出された部分指数e[i]が2m−1未満の場合は、前記2のベキ乗生成処理により生成された2^(e[i]+1+n−2m)と前記第1の記憶領域に格納された値との前記Nを法とするモンゴメリ剰余乗算を行ってその演算結果を前記第1記憶領域に格納する第5処理と、
前記第5処理の後に、前記内部状態変数iから1を引いた値を前記内部状態変数iに格納し、前記iの値が2以上の場合は前記第4処理に戻り、前記iの値が1以下になるまでそれを繰り返す第6処理と、
前記第6処理の後に、前記素数候補Nを法とし、前記第1記憶領域に記憶された値同士のモンゴメリ剰余乗算を行ってその演算結果を前記第1記憶領域に書き込む動作をm回繰り返す第7処理と、
前記第7処理の後、前記2のベキ乗生成処理により計算された2^(e[1]+n−2m)と、前記第1記憶領域に格納された値との前記素数候補Nを法とするモンゴメリ剰余乗算を行ってその演算結果を前記第1記憶領域に格納する第8処理と、
前記第8処理の後、前記モンゴメリ剰余乗算装置により、前記素数候補Nを法とし、前記第1記憶領域に格納された値同士のモンゴメリ剰余乗算を行ってその演算結果を前記第1記憶領域に格納する動作をm回繰り返す第9処理と、
前記第9処理の後、前記2のベキ乗生成処理により計算された2^(e[0])と、前記第1記憶領域に格納された値との前記素数候補Nを法とするモンゴメリ剰余乗算を行って、その演算結果をフェルマーテスト結果として出力する第10処理とを含む、データ処理装置。 - 前記プログラムを格納したメモリを更に有し、1個の半導体基板に形成された、請求項1記載のデータ処理装置。
- モンゴメリ剰余乗算を行うモンゴメリ剰余乗算器を備えたコプロセッサと、プログラムを実行し前記コプロセッサを制御する中央処理装置とを有し、前記中央処理装置の制御によってデータ処理を行なうことにより、外部より与えられた素数候補Nに対して、2(N−1)mod Nを計算してフェルマーテストを実行するデータ処理装置であって、前記データ処理は、
前記素数候補Nを記憶する処理と、
Nのビット長nを記憶する処理と、
log2(n)を超えない最大の整数mを計算して記憶する処理と、
前記素数候補Nから、N−1を計算し、JをJ≧n/mとなる最小の整数としたときに、(N−1)を最下位からmビットごとにJ個の区間に区切り、(N−1)=2(J−1)m・e[J−1]+2(J−2)m・e[J−2]+…+2m・e[1]+e[0]なる式を満たすように(N−1)を部分指数e[0],e[1],…,e[J−1]に分割する指数部切り出し処理と、
前記指数部切り出し処理により切り出されたmビットの値e[i]から2^(e[i]+1+n−2m)
を生成する2のベキ乗生成処理と、
前記指数部切り出し処理により切り出された部分指数の最上位の値に1を加えたe[J−1]+1が2nと等しい場合は、R mod N=2n mod Nの演算結果と、R2 mod N=22n mod Nの演算結果との前記素数候補Nを法とするモンゴメリ剰余乗算を行って、その演算結果を第1記憶領域に格納する第1処理と、
前記e[J−1]+1が2n未満の場合は、前記2のベキ乗生成手段により計算した2^(e[J−1]+1)と前記素数候補Nとの排他的論理和を取った値と、前記R2 mod N=22n mod Nの演算結果との前記Nを法とするモンゴメリ剰余乗算を行ってその演算結果を前記第1記憶領域に格納する第2処理と、
前記第1処理又は第2処理のいずれか一方の処理の後に内部の状態変数iをJ−2とする第3処理と、
前記第3処理の後に、前記素数候補Nを法とし、前記第1記憶領域に格納された値同士のモンゴメリ剰余乗算を行ってその4演算結果を前記第1記憶領域に格納する動作をm回繰り返す第4処理と、
前記第4処理の後に、前記指数部切り出し処理で切り出された部分指数e[i]が2m−1未満の場合は、前記2のベキ乗生成処理により生成された2^(e[i]+1+n−2m)と前記素数候補Nとの排他的論理和が採られた値と、前記第1記憶領域に格納されている値との前記素数候補Nを法とするモンゴメリ剰余乗算を行ってその演算結果を前記第1記憶領域に格納する第5処理と、
前記第4処理の後に、前記指数部切り出し処理で切り出された部分指数e[i]が2m−1と等しい場合は、前記R mod N=2n mod Nと、前記第1記憶領域に格納された値との前記素数候補Nを法とするモンゴメリ剰余乗算を行ってその演算結果を前記第1記憶領域に格納する第6処理と、
前記第5処理又は第6処理のいずれか一方の処理の後に前記内部状態変数iから1を引いた値を前記内部状態変数iに格納し、前記iの値が2以上の場合は、前記第3処理に戻り、前記iの値が1以下になるまでそれを繰り返す第7処理と、
前記第7処理の後に前記素数候補Nを法とし、前記第1記憶領域に記憶された値同士のモンゴメリ剰余乗算を行ってその演算結果を前記第1記憶領域に格納する動作をm回繰り返す第8処理と、
前記第8処理の後、前記2のベキ乗生成処理で生成された2^(e[1]+n−2m)と、前記第1記憶領域に格納された値との前記素数候補Nを法とするモンゴメリ剰余乗算を行ってその演算結果を前記第1記憶領域に格納する第9処理と、
前記第9処理の後、前記素数候補Nを法とし、前記第1記憶領域に格納された値同士のモンゴメリ剰余乗算を行ってその演算結果を前記第1記憶領域に格納する動作をm回繰り返す第10処理と、
前記第10処理の後、前記2のベキ乗生成処理により生成された2^(e[0])と前記第1記憶領域に格納された値との前記Nを法とするモンゴメリ剰余乗算を行って、その演算結果をフェルマーテスト結果として出力する第11処理とを含む、データ処理装置。 - 前記プログラムを格納したメモリを更に有し、1個の半導体基板に形成された、請求項2記載のデータ処理装置。
- モンゴメリ剰余乗算を行うモンゴメリ剰余乗算器を備えたコプロセッサと、プログラムを実行し前記コプロセッサを制御する中央処理装置とを有し、前記中央処理装置の制御によってデータ処理を行なうことにより、外部より与えられた素数候補Nに対して、2(N−1)mod Nを計算してフェルマーテストを実行するデータ処理装置であって、前記データ処理は、
前記素数候補Nを記憶する処理と、
Nのビット長nを記憶する処理と、
log2(n)を超えない最大の整数mを計算して記憶する処理と、
前記素数候補Nから、N−1を計算し、JをJ≧n/mとなる最小の整数としたときに、(N−1)を最下位からmビットごとにJ個の区間に区切り、(N−1)=2(J−1)m・e[J−1]+2(J−2)m・e[J−2]+…+2m・e[1]+e[0]なる式を満たすように(N−1)を部分指数e[0],e[1],…,e[J−1]に分割する指数部切り出し処理と、
前記指数部切り出し処理により切り出されたmビットの値e[i]から2^(e[i]+1+n−2m)を生成する2のベキ乗生成処理と、
前記指数部切り出し処理により切り出された部分指数の最上位の値に1を加えたe[J−1]+1が2nと等しい場合は、R mod N=2n mod Nの演算結果と、R2 mod N=22n mod Nの演算結果との前記素数候補Nを法とするモンゴメリ剰余乗算を行ってその演算結果を第1記憶領域に格納する第1処理と、
前記e[J−1]+1が2n未満の場合は、前記Nのe[J−1]+1ビット目の値を指定ビット反転器により反転した値と前記R2 mod N=22n mod Nの演算結果との前記素数候補Nを法とするモンゴメリ剰余乗算を行ってその演算結果を前記第1記憶領域に格納する第2処理と、
前記第1処理又は第2処理のいずれか一方の処理の後に内部の状態変数iをJ−2とする第3処理と、
前記第3処理の後に、前記素数候補Nを法とし、前記第1記憶領域に記憶された値同士のモンゴメリ剰余乗算を行ってその演算結果を前記第1記憶領域に格納する動作をm回繰り返す第4処理と、
前記第4処理の後に、前記指数部切り出し処理によって切り出された部分指数e[i]が2m−1未満の場合は、前記Nのe[i]+1+n−2mビット目の値を前記指定ビット反転器により反転した値と前記第1記憶領域に格納された値との前記素数候補Nを法とするモンゴメリ剰余乗算を行ってその演算結果を前記第1記憶領域に記憶する第5処理と、
前記第4処理の後に、前記指数部切り出し処理によって切り出された部分指数e[i]が2m−1と等しい場合は、前記R mod N=2n mod Nの演算結果と前記第1記憶領域に格納された値との前記素数候補Nを法とするモンゴメリ剰余乗算を行ってその演算結果を前記第1記憶領域に格納する第6処理と、
前記第5処理又は第6処理のいずれか一方の処理の後に、前記内部状態変数iから1を引いた値を前記内部状態変数iに格納し、前記iの値が2以上の場合は、前記第3処理に戻り、前記iの値が1以下になるまでそれを繰り返す第7処理と、
前記第7処理の後に、前記素数候補Nを法とし、前記第1記憶領域に記憶された値同士のモンゴメリ剰余乗算を行ってその演算結果を前記第1記憶領域に格納する動作をm回繰り返す第8処理と、
前記第8処理の後、前記2のベキ乗生成手段により計算した2^(e[1]+n−2m)と前記第1記憶領域に格納された値との前記素数候補Nを法とするモンゴメリ剰余乗算をおこなってその演算結果を前記第1記憶領域に格納する第9処理と、
前記第9処理の後、前記素数候補Nを法とし、前記第1記憶領域に記憶された値同士のモンゴメリ剰余乗算を行ってその演算結果を前記第1記憶領域に格納する動作をm回繰り返す第10処理と、
前記第10処理の後、前記2のベキ乗生成処理により生成された2^(e[0])と、前記第1記憶領域に格納された値との前記素数候補Nを法とするモンゴメリ剰余乗算を行ってその演算結果をフェルマーテスト結果として出力する第11処理とを含む、データ処理装置。 - 前記プログラムを格納したメモリを更に有し、1個の半導体基板に形成された、請求項5記載のデータ処理装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008108462A JP5179933B2 (ja) | 2008-04-18 | 2008-04-18 | データ処理装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008108462A JP5179933B2 (ja) | 2008-04-18 | 2008-04-18 | データ処理装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2009258460A JP2009258460A (ja) | 2009-11-05 |
JP5179933B2 true JP5179933B2 (ja) | 2013-04-10 |
Family
ID=41385963
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008108462A Expired - Fee Related JP5179933B2 (ja) | 2008-04-18 | 2008-04-18 | データ処理装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP5179933B2 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE102011117236A1 (de) | 2011-10-28 | 2013-05-02 | Giesecke & Devrient Gmbh | Effiziente Primzahlprüfung |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3626340B2 (ja) * | 1996-12-26 | 2005-03-09 | 株式会社東芝 | 暗号装置及び暗号鍵生成方法、並びに素数生成装置及び素数生成方法 |
JP2002229445A (ja) * | 2001-01-30 | 2002-08-14 | Mitsubishi Electric Corp | べき乗剰余演算器 |
JP3950638B2 (ja) * | 2001-03-05 | 2007-08-01 | 株式会社日立製作所 | 耐タンパーモジュラ演算処理方法 |
JP3904421B2 (ja) * | 2001-10-04 | 2007-04-11 | 株式会社ルネサステクノロジ | 剰余乗算演算装置 |
JP4662802B2 (ja) * | 2005-03-30 | 2011-03-30 | 富士通株式会社 | 計算方法、計算装置及びコンピュータプログラム |
JP5328186B2 (ja) * | 2008-03-21 | 2013-10-30 | ルネサスエレクトロニクス株式会社 | データ処理システム及びデータ処理方法 |
-
2008
- 2008-04-18 JP JP2008108462A patent/JP5179933B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2009258460A (ja) | 2009-11-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7904498B2 (en) | Modular multiplication processing apparatus | |
CN109039640B (zh) | 一种基于rsa密码算法的加解密硬件系统及方法 | |
US7835517B2 (en) | Encryption processing apparatus, encryption processing method, and computer program | |
Großschädl | A bit-serial unified multiplier architecture for finite fields GF (p) and GF (2 m) | |
US6480606B1 (en) | Elliptic curve encryption method and system | |
Harb et al. | FPGA implementation of the ECC over GF (2m) for small embedded applications | |
CN111092718A (zh) | 加密方法、装置及电子设备 | |
JP2003098962A (ja) | 楕円曲線スカラー倍計算方法及び装置並びに記録媒体 | |
JP4351987B2 (ja) | モンゴメリ変換装置、演算装置、icカード、暗号装置、復号装置及びプログラム | |
KR100508092B1 (ko) | 저전력 모듈로 곱셈을 수행하는 연산장치 | |
Großschädl | High-speed RSA hardware based on Barret’s modular reduction method | |
JP2009505148A (ja) | 暗号化演算における反転操作を行うための回路配置及び方法 | |
JP5179933B2 (ja) | データ処理装置 | |
US7113593B2 (en) | Recursive cryptoaccelerator and recursive VHDL design of logic circuits | |
TWI630545B (zh) | 非模數乘法器、用於非模數乘法的方法及計算裝置 | |
EP1600852A2 (en) | Method and apparatus for calculating a modular inverse | |
Huynh et al. | An efficient cryptographic accelerators for IoT system based on elliptic curve digital signature | |
JP3779479B2 (ja) | Icカード | |
TWI403952B (zh) | A large integer modulus index chip structure for signature cryptography | |
US7472154B2 (en) | Multiplication remainder calculator | |
Poomagal et al. | Modular multiplication algorithm in cryptographic processor: A review and future directions | |
JP2005316038A (ja) | 楕円曲線暗号におけるスカラー倍計算方法と、その装置およびプログラム | |
Patel et al. | High speed elliptic curve cryptography architecture for NIST recommended Galois field | |
Maurya et al. | FPGA Implementation of a Fast Scalar Point Multiplier for an Elliptic Curve Crypto-Processor | |
KR100399048B1 (ko) | 타원곡선 암호화 장치 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A712 Effective date: 20100527 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20110406 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20121203 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20121227 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20130110 |
|
S531 | Written request for registration of change of domicile |
Free format text: JAPANESE INTERMEDIATE CODE: R313531 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
LAPS | Cancellation because of no payment of annual fees |