JP2003177669A - 冪乗剰余演算装置及び冪乗剰余演算方法 - Google Patents
冪乗剰余演算装置及び冪乗剰余演算方法Info
- Publication number
- JP2003177669A JP2003177669A JP2001374904A JP2001374904A JP2003177669A JP 2003177669 A JP2003177669 A JP 2003177669A JP 2001374904 A JP2001374904 A JP 2001374904A JP 2001374904 A JP2001374904 A JP 2001374904A JP 2003177669 A JP2003177669 A JP 2003177669A
- Authority
- JP
- Japan
- Prior art keywords
- register
- value
- digit
- modf
- adic
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Abstract
(57)【要約】
【課題】 RSA暗号化処理に必要な冪乗剰余演算速度
の向上を図る。 【解決手段】 公開鍵Eを上位データEuと下位データ
Edに分割し、レジスタ(11,12)に格納する。こ
こで、上位データEuの下位データEdに対応する桁は
全て0とする。冪乗剰余演算回路(20)はレジスタ
(11,12,13,14)から上位データEu、下位
データEd、剰余基数F、平分Mを読み取り、(M^E
u)modF、及び(M^Ed)modFの剰余演算を
並列的に行い、各々の演算結果から、C=(((M^E
u)modF)×((M^Ed)modF))modF
として暗号文Cを算出する。
の向上を図る。 【解決手段】 公開鍵Eを上位データEuと下位データ
Edに分割し、レジスタ(11,12)に格納する。こ
こで、上位データEuの下位データEdに対応する桁は
全て0とする。冪乗剰余演算回路(20)はレジスタ
(11,12,13,14)から上位データEu、下位
データEd、剰余基数F、平分Mを読み取り、(M^E
u)modF、及び(M^Ed)modFの剰余演算を
並列的に行い、各々の演算結果から、C=(((M^E
u)modF)×((M^Ed)modF))modF
として暗号文Cを算出する。
Description
【0001】
【発明の属する技術分野】本発明はRSA暗号方式、E
POC暗号方式、ラビン暗号方式、エルガマル暗号方
式、ディフィー・ヘルマン鍵配送方式等の冪乗剰余演算
を必要とする公開鍵暗号化/復号化処理の高速演算技術
に関する。
POC暗号方式、ラビン暗号方式、エルガマル暗号方
式、ディフィー・ヘルマン鍵配送方式等の冪乗剰余演算
を必要とする公開鍵暗号化/復号化処理の高速演算技術
に関する。
【0002】
【従来の技術】近年の電子商取引においては、インター
ネット等のオープンネットワークを経由して情報の送受
信が行われるため、通信文書等のセキュリティを確保す
るべく、RSA公開鍵暗号を利用した電子署名が利用さ
れている。電子署名を利用することにより、インターネ
ット上の情報を保護するだけでなく、情報発信者の身元
保証も可能となる。RSA公開鍵暗号化方式は大きな数
の素因数分解が困難であることを利用した暗号化方式で
あり、解読が極めて困難であるため、暗号化方式として
は大変有効である。
ネット等のオープンネットワークを経由して情報の送受
信が行われるため、通信文書等のセキュリティを確保す
るべく、RSA公開鍵暗号を利用した電子署名が利用さ
れている。電子署名を利用することにより、インターネ
ット上の情報を保護するだけでなく、情報発信者の身元
保証も可能となる。RSA公開鍵暗号化方式は大きな数
の素因数分解が困難であることを利用した暗号化方式で
あり、解読が極めて困難であるため、暗号化方式として
は大変有効である。
【0003】RSA公開鍵暗号を利用した暗号化/復号
化処理の手順を簡単に説明すると、以下のようになる。
公開鍵を(E,F)、平文をM、秘密鍵を(D,F)、
暗号文をCとすれば、C=(M^E)modF、M=
(C^D)modFとなる。ここで、x^yはxのy乗
を意味するものとする。 [C=(M^E)modFの計算アルゴリズム] 変数 i,j,k,P,Q 2^k進SD数系数列の桁数 n Eの2^k進SD数展開でのj桁目の値 Ej(0≦Ej≦(2^k)−1 ) Step1.1 C=1 Step1.2 j=n−1 Step1.3 i=k Step1.4 Q=C Step1.5 P=(Q×C)modF Step1.6 C=P Step1.7 i=i−1 Step1.8 if(i>0) then goto Step1.4 Step1.9 if(Ej=0) then goto Step1.13 Step1.10 Q=(M^Ej)modF Step1.11 P=(Q×C)modF Step1.12 C=P Step1.13 if(j>0) then j=j−1 goto Step1.3 Step1.14 if(C<0) then C=C+F ここで、Step1.10の剰余演算処理は、Mの0〜
(2^k)−1の累乗演算と剰余演算を施したメモリテ
ーブル((M^0)modF〜(M^((2^k)−
1)modFの値を記憶したテーブル)から、Ejをア
ドレスとして読み出す処理である。また、Step1.
5、Step1.11におけるP=(Q×C)modF
の計算アルゴリズムは以下のようになる。 [P=(Q×C)modFの計算アルゴリズム] 変数 j,k,P,G,R 2^k進SD数系数列の桁数 n Cの2^k進SD数展開でのj桁目の値 Cj 但し、−(2^k)+1≦Cj≦(2^k)−1とする。
化処理の手順を簡単に説明すると、以下のようになる。
公開鍵を(E,F)、平文をM、秘密鍵を(D,F)、
暗号文をCとすれば、C=(M^E)modF、M=
(C^D)modFとなる。ここで、x^yはxのy乗
を意味するものとする。 [C=(M^E)modFの計算アルゴリズム] 変数 i,j,k,P,Q 2^k進SD数系数列の桁数 n Eの2^k進SD数展開でのj桁目の値 Ej(0≦Ej≦(2^k)−1 ) Step1.1 C=1 Step1.2 j=n−1 Step1.3 i=k Step1.4 Q=C Step1.5 P=(Q×C)modF Step1.6 C=P Step1.7 i=i−1 Step1.8 if(i>0) then goto Step1.4 Step1.9 if(Ej=0) then goto Step1.13 Step1.10 Q=(M^Ej)modF Step1.11 P=(Q×C)modF Step1.12 C=P Step1.13 if(j>0) then j=j−1 goto Step1.3 Step1.14 if(C<0) then C=C+F ここで、Step1.10の剰余演算処理は、Mの0〜
(2^k)−1の累乗演算と剰余演算を施したメモリテ
ーブル((M^0)modF〜(M^((2^k)−
1)modFの値を記憶したテーブル)から、Ejをア
ドレスとして読み出す処理である。また、Step1.
5、Step1.11におけるP=(Q×C)modF
の計算アルゴリズムは以下のようになる。 [P=(Q×C)modFの計算アルゴリズム] 変数 j,k,P,G,R 2^k進SD数系数列の桁数 n Cの2^k進SD数展開でのj桁目の値 Cj 但し、−(2^k)+1≦Cj≦(2^k)−1とする。
【0004】
Step2.1 P=0, j=n
Step2.2 j=j−1
Step2.3 if(Cj≧0) then
G=(Q×Cj)modF
else
G=F−(Q×(−Cj))modF
Step2.4 R=P×2^k+G
Step2.5 P=RmodF
Step2.6 if(j>0) then
goto Step2.2
ここで、Step2.3の剰余演算処理は、Qの値が決
定する毎にQと0〜(2^k)−1との乗算と、剰余演
算を施したメモリテーブル((Q×0)modF〜(Q
×((2^k)−1))modF)から、Cjをアドレ
スとして読み出す処理である。また、Step2.5の
P=RmodFの演算処理は後述する並列方式又は予測
メモリテーブル方式により実行するものである。
定する毎にQと0〜(2^k)−1との乗算と、剰余演
算を施したメモリテーブル((Q×0)modF〜(Q
×((2^k)−1))modF)から、Cjをアドレ
スとして読み出す処理である。また、Step2.5の
P=RmodFの演算処理は後述する並列方式又は予測
メモリテーブル方式により実行するものである。
【0005】公開鍵暗号方式では暗号化/復号化処理に
おいて、多ビットからなる値の冪乗剰余演算が必要とな
る。これらの計算処理は加算と減算によって実現される
が、加算及び減算の処理速度を向上し、さらに加算/減
算回数を減らすことが暗号化/復号化処理を高速化する
ための課題となっている。しかしながら、実用的な演算
速度を実現する暗号プロセッサは未だ開発されておら
ず、国内の暗号プロセッサにおいても、10数キロビッ
ト毎秒程度の処理速度が限界である。このため、通信文
書を圧縮したものや、共通鍵方式での鍵をソフトウエア
によりRSA暗号方式により暗号化しているのが現状で
ある。
おいて、多ビットからなる値の冪乗剰余演算が必要とな
る。これらの計算処理は加算と減算によって実現される
が、加算及び減算の処理速度を向上し、さらに加算/減
算回数を減らすことが暗号化/復号化処理を高速化する
ための課題となっている。しかしながら、実用的な演算
速度を実現する暗号プロセッサは未だ開発されておら
ず、国内の暗号プロセッサにおいても、10数キロビッ
ト毎秒程度の処理速度が限界である。このため、通信文
書を圧縮したものや、共通鍵方式での鍵をソフトウエア
によりRSA暗号方式により暗号化しているのが現状で
ある。
【0006】このような事情を背景として、情報通信分
野ではRSA公開鍵暗号化方式における乗算剰余演算の
高速化の研究が続けられており、「冗長2進剰余テーブ
ルに基づく高速暗号プロセッサの構成方法」(電子情報
通信学会論文誌2001/5Vol.J84−D−1
No.5)や、「多進SD(Signed Digit)数系にける
RSA暗号の高速化処理の提案」(パーソナルコンピュ
ータユーザ利用技術協会論文誌Vol.10 No.1
(2000))等のように、RSA公開鍵暗号化方式に
おける演算処理の高速化を実現する論文が発表されてい
る。特に、後者の論文発表者からは、同論文に掲載され
ている剰余演算の並列方式の他に、他の論文誌におい
て、予測テーブル方式が提案されている。
野ではRSA公開鍵暗号化方式における乗算剰余演算の
高速化の研究が続けられており、「冗長2進剰余テーブ
ルに基づく高速暗号プロセッサの構成方法」(電子情報
通信学会論文誌2001/5Vol.J84−D−1
No.5)や、「多進SD(Signed Digit)数系にける
RSA暗号の高速化処理の提案」(パーソナルコンピュ
ータユーザ利用技術協会論文誌Vol.10 No.1
(2000))等のように、RSA公開鍵暗号化方式に
おける演算処理の高速化を実現する論文が発表されてい
る。特に、後者の論文発表者からは、同論文に掲載され
ている剰余演算の並列方式の他に、他の論文誌におい
て、予測テーブル方式が提案されている。
【0007】
【発明が解決しようとする課題】しかし、同論文に掲載
されている剰余演算の並列方式では、SD数1桁同士の
(k+1)ビット加算器を1個とすると、n桁2^k進
SD数同士の加算では、n×((2^k)−1)個の加
算器を常備し、選択回路を付加する必要がある。これで
は、ゲート数が膨大となり、現実的ではない。また、予
測テーブル方式では、RmodFの剰余演算を計算する
準備として、Fの値の0〜(2^k)倍までのメモリテ
ーブルを用意し、Rの値から何倍のFの値を減算すれば
よいかを決定する方式であるため、上記の剰余演算をす
るには、上記メモリテーブルの他、Rの値によるアドレ
ス変換用のメモリテーブルをも必要とする。さらに、同
方式では、剰余基数Fを変更する都度にこれらのメモリ
テーブルを作成し直す必要がある。また、同方式では、
剰余演算の結果を検証する必要があり、通信文書が短い
程、パフォーマンスが低下するという問題があった。
されている剰余演算の並列方式では、SD数1桁同士の
(k+1)ビット加算器を1個とすると、n桁2^k進
SD数同士の加算では、n×((2^k)−1)個の加
算器を常備し、選択回路を付加する必要がある。これで
は、ゲート数が膨大となり、現実的ではない。また、予
測テーブル方式では、RmodFの剰余演算を計算する
準備として、Fの値の0〜(2^k)倍までのメモリテ
ーブルを用意し、Rの値から何倍のFの値を減算すれば
よいかを決定する方式であるため、上記の剰余演算をす
るには、上記メモリテーブルの他、Rの値によるアドレ
ス変換用のメモリテーブルをも必要とする。さらに、同
方式では、剰余基数Fを変更する都度にこれらのメモリ
テーブルを作成し直す必要がある。また、同方式では、
剰余演算の結果を検証する必要があり、通信文書が短い
程、パフォーマンスが低下するという問題があった。
【0008】このような問題点に鑑み、本発明者は、上
記論文誌に述べられている、「鍵の長さによって加算処
理の処理回数が最小となる最適な多進SD数系が存在す
る」ということを確認した上で、剰余演算に使用する多
進SD数系に工夫を加えることにより、公開鍵暗号化方
式に必要となる乗算剰余演算処理を高速に行うことので
きる新たな演算方式を見出した。そこで、本発明は、回
路規模を大きくすることなく、高速演算可能な冪乗剰余
演算技術を提案することを課題とする。
記論文誌に述べられている、「鍵の長さによって加算処
理の処理回数が最小となる最適な多進SD数系が存在す
る」ということを確認した上で、剰余演算に使用する多
進SD数系に工夫を加えることにより、公開鍵暗号化方
式に必要となる乗算剰余演算処理を高速に行うことので
きる新たな演算方式を見出した。そこで、本発明は、回
路規模を大きくすることなく、高速演算可能な冪乗剰余
演算技術を提案することを課題とする。
【0009】
【課題を解決するための手段】上記の課題を解決するべ
く、本発明の冪乗剰余演算装置は、多数桁の整数E,
M,Fに対してC=(M^E)modFなる冪乗剰余演
算を行う冪乗剰余演算装置において、E,M,Fを各桁
が正の2^k進SD数に変換して演算を行っている従来
の方式に加えて、更にEを分割して並列に行う方法であ
る。
く、本発明の冪乗剰余演算装置は、多数桁の整数E,
M,Fに対してC=(M^E)modFなる冪乗剰余演
算を行う冪乗剰余演算装置において、E,M,Fを各桁
が正の2^k進SD数に変換して演算を行っている従来
の方式に加えて、更にEを分割して並列に行う方法であ
る。
【0010】前記整数Eのn桁の2^k進SD数に対し
て、E=E1+E2+…+Ep(pはnより十分小さい
値)なる関係を満たし、Mのそれぞれの値による累乗演
算とFでの剰余演算を合わせた処理時間が同程度の2^
k進SD数の集合E1,E2,…,Epを記憶する記憶手
段と、前記記憶手段に記憶されているE1,E2,…,E
pの値を読取り、(M^E1)modF、(M^E2)mo
dF、…、(M^Ep)modFの冪乗剰余演算を並列的
に行い、各々の演算結果から、C=(((M^E1)mo
dF)×((M^E2)modF)×…×((M^Ep)m
odF))modFとしてCを算出する乗算剰余演算手
段とを備える。かかる構成により、集積回路のゲート数
の多寡に依るが、整数Eを複数に分割してそれぞれを平
行して冪乗剰余演算を行うことで演算速度を向上するこ
とができる。
て、E=E1+E2+…+Ep(pはnより十分小さい
値)なる関係を満たし、Mのそれぞれの値による累乗演
算とFでの剰余演算を合わせた処理時間が同程度の2^
k進SD数の集合E1,E2,…,Epを記憶する記憶手
段と、前記記憶手段に記憶されているE1,E2,…,E
pの値を読取り、(M^E1)modF、(M^E2)mo
dF、…、(M^Ep)modFの冪乗剰余演算を並列的
に行い、各々の演算結果から、C=(((M^E1)mo
dF)×((M^E2)modF)×…×((M^Ep)m
odF))modFとしてCを算出する乗算剰余演算手
段とを備える。かかる構成により、集積回路のゲート数
の多寡に依るが、整数Eを複数に分割してそれぞれを平
行して冪乗剰余演算を行うことで演算速度を向上するこ
とができる。
【0011】本発明の加減算装置は、少なくとも一方が
−(2^(k−1)+1)以上、2^(k−1)以下の
範囲にあるn桁の圧縮2^k進SD数とn桁の(圧縮)
2^k進SD数に展開された整数を各桁毎に並列して加
減算を行うn個の圧縮SD数加減算器から構成される加
減算装置であって、前記圧縮SD数加減算器は、当該桁
での2^k進SD数同士の加減算結果が2^(k−1)
以上であれば、桁上げを示すキャリー信号を上位桁へ出
力し、前記加減算結果が−2^(k−1)未満であれ
ば、桁借りをするキャリー信号を上位桁へ出力すること
により、桁上げ桁借りした元の計算結果はサインビット
を反転させるだけで2の補数となる。この結果と下位桁
の圧縮SD数加減算器からの桁上げ若しくは桁借りを示
すキャリー信号とを再計算した結果、当該桁での最終演
算結果が取り得る値の範囲を−(2^(k−1)+1)
以上、2^(k−1)以下とする。2^k進SD数の加
減算結果を−(2^(k−1)+1)以上、2^(k−
1)以下とすることにより、従来の2^k進SD数の加
算器、減算器がキャリーの伝播を2桁以上に及ぼさない
為だけであり、取り得る整数範囲が−(2^k)+1以
上、(2^k)−1以下であったものをおよそ半分とし
データ量の削減を図り、装置全体の演算速度の向上を図
ることができる。また、加減算器内部のデコード回路が
簡単になることにより、回路規模を小さくすることがで
き、n桁2^k進SD数の正負判定回路を組み込み自動
的に正の値を保持することが出来る。整数Mを各桁が正
の2^k進SD数に展開された状態から圧縮2^k進S
D数と変換しておく必要があるが、この圧縮SD数加算
器を用い、2^k進SD数に展開されたMに0(各桁が
0のn桁の2^k進SD数)を一度加えることにより変
換する。
−(2^(k−1)+1)以上、2^(k−1)以下の
範囲にあるn桁の圧縮2^k進SD数とn桁の(圧縮)
2^k進SD数に展開された整数を各桁毎に並列して加
減算を行うn個の圧縮SD数加減算器から構成される加
減算装置であって、前記圧縮SD数加減算器は、当該桁
での2^k進SD数同士の加減算結果が2^(k−1)
以上であれば、桁上げを示すキャリー信号を上位桁へ出
力し、前記加減算結果が−2^(k−1)未満であれ
ば、桁借りをするキャリー信号を上位桁へ出力すること
により、桁上げ桁借りした元の計算結果はサインビット
を反転させるだけで2の補数となる。この結果と下位桁
の圧縮SD数加減算器からの桁上げ若しくは桁借りを示
すキャリー信号とを再計算した結果、当該桁での最終演
算結果が取り得る値の範囲を−(2^(k−1)+1)
以上、2^(k−1)以下とする。2^k進SD数の加
減算結果を−(2^(k−1)+1)以上、2^(k−
1)以下とすることにより、従来の2^k進SD数の加
算器、減算器がキャリーの伝播を2桁以上に及ぼさない
為だけであり、取り得る整数範囲が−(2^k)+1以
上、(2^k)−1以下であったものをおよそ半分とし
データ量の削減を図り、装置全体の演算速度の向上を図
ることができる。また、加減算器内部のデコード回路が
簡単になることにより、回路規模を小さくすることがで
き、n桁2^k進SD数の正負判定回路を組み込み自動
的に正の値を保持することが出来る。整数Mを各桁が正
の2^k進SD数に展開された状態から圧縮2^k進S
D数と変換しておく必要があるが、この圧縮SD数加算
器を用い、2^k進SD数に展開されたMに0(各桁が
0のn桁の2^k進SD数)を一度加えることにより変
換する。
【0012】本発明の剰余演算装置は、圧縮2^k進S
D数R,各桁が正の2^k進SD数Fに対してP=Rm
odFなる剰余演算をツリー(樹状)方式で行う剰余演
算装置であって、本発明の圧縮2^k進SD数加減算器
を用いる。レジスタA、レジスタB、レジスタC、レジ
スタj、及びレジスタPを備え、下記の第1ステップか
ら第7ステップを順次実行することによりレジスタPの
値を解とする。
D数R,各桁が正の2^k進SD数Fに対してP=Rm
odFなる剰余演算をツリー(樹状)方式で行う剰余演
算装置であって、本発明の圧縮2^k進SD数加減算器
を用いる。レジスタA、レジスタB、レジスタC、レジ
スタj、及びレジスタPを備え、下記の第1ステップか
ら第7ステップを順次実行することによりレジスタPの
値を解とする。
【0013】第1ステップ:レジスタAにRの値を代入
し、レジスタBにF×(2^k)を代入し、レジスタj
にkの値を代入する。
し、レジスタBにF×(2^k)を代入し、レジスタj
にkの値を代入する。
【0014】第2ステップ:レジスタCにレジスタAの
値からレジスタBの値を減じた値を代入する。
値からレジスタBの値を減じた値を代入する。
【0015】第3ステップ:レジスタCの値が0である
場合にはエラー処理をして第7ステップに移行する。
場合にはエラー処理をして第7ステップに移行する。
【0016】第4ステップ:レジスタCの値が正であっ
て、レジスタjの値がkに等しい場合には、レジスタC
の値をレジスタAに代入して第7ステップに移行する。
て、レジスタjの値がkに等しい場合には、レジスタC
の値をレジスタAに代入して第7ステップに移行する。
【0017】第5ステップ:レジスタCの値が正である
場合には、レジスタAにレジスタCの値を代入する。
場合には、レジスタAにレジスタCの値を代入する。
【0018】第6ステップ:レジスタjの値が0より大
きい場合には、レジスタBの値を1/2にし、レジスタ
jの値を1デクリメントして、第2ステップに移行す
る。
きい場合には、レジスタBの値を1/2にし、レジスタ
jの値を1デクリメントして、第2ステップに移行す
る。
【0019】第7ステップ:レジスタAの値をレジスタ
Pに代入し、終了処理をする。
Pに代入し、終了処理をする。
【0020】ここで、レジスタを加減算器に対応させれ
ば、レジスタAが減算される値、レジスタBが減算する
値で、レジスタCが加減算結果の値であり正負判定回路
により自動的にレジスタAの値となる。
ば、レジスタAが減算される値、レジスタBが減算する
値で、レジスタCが加減算結果の値であり正負判定回路
により自動的にレジスタAの値となる。
【0021】本発明の乗算剰余演算装置は、各桁の値が
−(2^(k−1)+1)以上、2^(k−1)以下に
制限されたn桁の圧縮2^k進SD数Q、C、及び各桁
が正の2^k進SD数Fに対してP=(Q×C)mod
Fなる乗算剰余演算を行う乗算剰余演算装置であって、
レジスタP、レジスタG、レジスタR、レジスタj、及
びレジスタCを備え、CjをCのj桁目の値とし、下記
の第1ステップから第6ステップを順次実行することに
よりレジスタPの値を解とする。
−(2^(k−1)+1)以上、2^(k−1)以下に
制限されたn桁の圧縮2^k進SD数Q、C、及び各桁
が正の2^k進SD数Fに対してP=(Q×C)mod
Fなる乗算剰余演算を行う乗算剰余演算装置であって、
レジスタP、レジスタG、レジスタR、レジスタj、及
びレジスタCを備え、CjをCのj桁目の値とし、下記
の第1ステップから第6ステップを順次実行することに
よりレジスタPの値を解とする。
【0022】第1ステップ:レジスタPに0を代入し、
レジスタjにnを代入する。
レジスタjにnを代入する。
【0023】第2ステップ:レジスタjにj−1を代入
する。
する。
【0024】第3ステップ:Cjの値が0以上であると
きには、Cjの値とQとの積にFを法とする剰余演算結
果をレジスタGに代入し、Cjの値が負であるときに
は、Cjの値の絶対値とQとの積にFを法とする剰余演
算結果に(−1)を乗じた値をレジスタGに代入する。
きには、Cjの値とQとの積にFを法とする剰余演算結
果をレジスタGに代入し、Cjの値が負であるときに
は、Cjの値の絶対値とQとの積にFを法とする剰余演
算結果に(−1)を乗じた値をレジスタGに代入する。
【0025】第4ステップ:レジスタPの値に(2^
k)を乗じ、この値にレジスタGの値を加算した値をレ
ジスタRに代入する。
k)を乗じ、この値にレジスタGの値を加算した値をレ
ジスタRに代入する。
【0026】第5ステップ:レジスタRの値が負である
ときには、レジスタRの値とFとを加算した値をレジス
タPに代入し、レジスタRの値が0以上であるときに
は、レジスタRの値にFを法とする剰余演算結果をレジ
スタPに代入する。 第6ステップ:レジスタjの値が正であるときには、第
2ステップに移行する。
ときには、レジスタRの値とFとを加算した値をレジス
タPに代入し、レジスタRの値が0以上であるときに
は、レジスタRの値にFを法とする剰余演算結果をレジ
スタPに代入する。 第6ステップ:レジスタjの値が正であるときには、第
2ステップに移行する。
【0027】ここで、第3ステップの乗算剰余演算処理
は、Qの値が決定する毎にQと0〜(2^(k−1) +
1)の乗算と、剰余演算を施したメモリテーブル((Q
×0)modF〜(Q×(2^(k−1)+1))mo
dF)から、Cjの絶対値をアドレスとして読み出す処
理である。第4ステップでPの値に(2^k)を乗じる
のは桁上げを行っているものである。第5ステップでの
剰余演算は前述したツリー方式剰余演算を行う。
は、Qの値が決定する毎にQと0〜(2^(k−1) +
1)の乗算と、剰余演算を施したメモリテーブル((Q
×0)modF〜(Q×(2^(k−1)+1))mo
dF)から、Cjの絶対値をアドレスとして読み出す処
理である。第4ステップでPの値に(2^k)を乗じる
のは桁上げを行っているものである。第5ステップでの
剰余演算は前述したツリー方式剰余演算を行う。
【0028】
【発明の実施の形態】以下、各図を参照して本実施の形
態について説明する。
態について説明する。
【0029】図1は暗号化鍵E(復号化鍵D)を2分割
した暗号処理プロセッサのブロック構成図である。同図
において、符号10はデータバスを介して外部モジュー
ルとの間でデータの送受信を行うホストインタフェース
回路である。符号11は取得した鍵E(D)を各桁が正
の2^k進SD数系に変換し(2^k進数列に分割する
だけでも可能)、上位データEu(Du)を記憶するレ
ジスタ、符号12はその鍵の下位データEd(Dd)を
記憶するレジスタである。
した暗号処理プロセッサのブロック構成図である。同図
において、符号10はデータバスを介して外部モジュー
ルとの間でデータの送受信を行うホストインタフェース
回路である。符号11は取得した鍵E(D)を各桁が正
の2^k進SD数系に変換し(2^k進数列に分割する
だけでも可能)、上位データEu(Du)を記憶するレ
ジスタ、符号12はその鍵の下位データEd(Dd)を
記憶するレジスタである。
【0030】但し、EuのEdに対応する桁は0とし、
E=Eu+Edの関係が成立するものとする。例えば、
E=「1011110011」であるとき、Ed=「1
10011」とすれば、Euの下位6桁は全て0である
ため、Eu=「1011000000」となる。符号1
3は取得した鍵(剰余基数)Fを各桁が正の2^k進S
D数系で記憶するレジスタ、符号14は取得した平分M
(解読では暗号文C)を2^k進SD数系で記憶するレ
ジスタである。
E=Eu+Edの関係が成立するものとする。例えば、
E=「1011110011」であるとき、Ed=「1
10011」とすれば、Euの下位6桁は全て0である
ため、Eu=「1011000000」となる。符号1
3は取得した鍵(剰余基数)Fを各桁が正の2^k進S
D数系で記憶するレジスタ、符号14は取得した平分M
(解読では暗号文C)を2^k進SD数系で記憶するレ
ジスタである。
【0031】暗号化鍵E(復号化鍵D)はそれぞれの暗
号化処理時間が同程度(1024ビットの鍵では2^k
進SD数のkが5で、上位有効桁が404ビット下位桁
は620ビット程度となる。)の上位データEu(D
u)と、下位データEd(Dd)に分割され、レジスタ
11,12に格納された後、M×Mテーブル・リード・
コントロール回路19へ出力され、平分M及び剰余基数
Fは冪乗剰余演算回路20へ出力されて、メイン・コン
トロール回路15の制御下において、M×Mテーブル1
8の作成を待ち、C1=(M^Eu)modF、C2=
(M^Ed)modFの冪乗剰余演算処理が行われる。
冪乗剰余演算回路20ではさらに、C=(C1×C2)
modFの乗算剰余演算を行い、暗号文C(解読文M)
を求める。暗号文C(解読文M)はSD数系デコード回
路32にて2進数のビット列に変換され、FIFOバッ
ファ33を介しホストインタフェース回路10を通して
出力される。
号化処理時間が同程度(1024ビットの鍵では2^k
進SD数のkが5で、上位有効桁が404ビット下位桁
は620ビット程度となる。)の上位データEu(D
u)と、下位データEd(Dd)に分割され、レジスタ
11,12に格納された後、M×Mテーブル・リード・
コントロール回路19へ出力され、平分M及び剰余基数
Fは冪乗剰余演算回路20へ出力されて、メイン・コン
トロール回路15の制御下において、M×Mテーブル1
8の作成を待ち、C1=(M^Eu)modF、C2=
(M^Ed)modFの冪乗剰余演算処理が行われる。
冪乗剰余演算回路20ではさらに、C=(C1×C2)
modFの乗算剰余演算を行い、暗号文C(解読文M)
を求める。暗号文C(解読文M)はSD数系デコード回
路32にて2進数のビット列に変換され、FIFOバッ
ファ33を介しホストインタフェース回路10を通して
出力される。
【0032】ここで、冪乗剰余演算回路20におけるC
1及びC2を求めるアルゴリズムを記述すると、以下の
ようになる。 [C1=(M^Eu)modFの計算アルゴリズム] 変数 ai,bi,aj,bj,k 変数 P1,P2,Q1,Q2 Euを2^k進SD数系数列に変換したときの桁数 n (Euの桁数は、Eを2^k進SD数系数列に変換したときの桁数と同じ。) Edを2^k進SD数系数列に変換したときの桁数 m Euの2^k進数展開でのaj桁目の値 Eu[aj] Edの2^k進数展開でのbj桁目の値 Ed[bj] 但し、0≦Eu[aj]≦2^k−1、0≦Ed[b
j]≦2^k−1とする。
1及びC2を求めるアルゴリズムを記述すると、以下の
ようになる。 [C1=(M^Eu)modFの計算アルゴリズム] 変数 ai,bi,aj,bj,k 変数 P1,P2,Q1,Q2 Euを2^k進SD数系数列に変換したときの桁数 n (Euの桁数は、Eを2^k進SD数系数列に変換したときの桁数と同じ。) Edを2^k進SD数系数列に変換したときの桁数 m Euの2^k進数展開でのaj桁目の値 Eu[aj] Edの2^k進数展開でのbj桁目の値 Ed[bj] 但し、0≦Eu[aj]≦2^k−1、0≦Ed[b
j]≦2^k−1とする。
【0033】
Step3.1 C1=1
Step3.2 aj=n−1
Step3.3 if(Eu[aj]>0) then
C1=(M^Eu[aj])modF,aj=aj−1
goto Step3.5
Step3.4 if(aj>0) then
aj=aj−1 goto Step3.3
Step3.5 ai=k
Step3.6 Q1=C1
Step3.7 P1=(Q1×C1)modF
Step3.8 C1=P1
Step3.9 ai=ai−1
Step3.10 if(aj>0) then
goto Step3.6
Step3.11 if(Eu[aj]=0) then
goto Step3.15
Step3.12 Q1=(M^Eu[aj])modF
Step3.13 P1=(Q1×C1)modF
Step3.14 C1=P1
Step3.15 if(aj>0) then
aj=aj−1 goto Step3.5
[C2=(M^Ed)modFの計算アルゴリズム]
Step4.1 C2=1
Step4.2 bj=m−1
Step4.3 if(Ed[bj]>0) then
C2=(M^Ed[bj])modF,bj=bj−1
goto Step4.5
Step4.4 if(bj>0) then
bj=bj−1 goto Step4.3
Step4.5 bi=k
Step4.6 Q2=C2
Step4.7 P2=(Q2×C2)modF
Step4.8 C2=P2
Step4.9 bi=bi−1
Step4.10 if(bj>0) then
goto Step4.6
Step4.11 if(Ed[bj]=0) then
goto Step4.15
Step4.12 Q2=(M^Ed[bj])modF
Step4.13 P2=(Q2×C2)modF
Step4.14 C2=P2
Step4.15 if(bj>0) then
bj=bj−1 goto Step4.5
ここで、Step3.11によりEu(Du)の下位E
d(Dd)m桁に相当する部分は0であるので、Ste
p3.12〜Step3.14をスキップすることがで
き、下位Ed(Dd)の演算時間と同等となるので短い
鍵で処理をしたのと同様となる。上述したC=(C1×
C2)modF、Step3.7のP1=(Q1×C
1)modF、Step4.7のP2=(Q2×C2)
modFの乗算剰余演算を求める式をP=(Q×C)m
odFとして計算するアルゴリズムを以下に記述する。 [P=(Q×C)modFの計算アルゴリズム] 変数 j,k,P,G,R Cを2^k進SD数系数列に変換したときの桁数 n Cの2^k進SD数系数列のj桁目の値 Cj 但し、Cjの採り得る整数範囲を−(2^(k−1)+
1)≦Cj≦2^(k−1)とする。
d(Dd)m桁に相当する部分は0であるので、Ste
p3.12〜Step3.14をスキップすることがで
き、下位Ed(Dd)の演算時間と同等となるので短い
鍵で処理をしたのと同様となる。上述したC=(C1×
C2)modF、Step3.7のP1=(Q1×C
1)modF、Step4.7のP2=(Q2×C2)
modFの乗算剰余演算を求める式をP=(Q×C)m
odFとして計算するアルゴリズムを以下に記述する。 [P=(Q×C)modFの計算アルゴリズム] 変数 j,k,P,G,R Cを2^k進SD数系数列に変換したときの桁数 n Cの2^k進SD数系数列のj桁目の値 Cj 但し、Cjの採り得る整数範囲を−(2^(k−1)+
1)≦Cj≦2^(k−1)とする。
【0034】
Step5.1 P=0,j=n
Step5.2 j=j−1
Step5.3 if(Cj≧0) then
G=(Q×Cj)modF
else
G=−(Q×(−Cj))modF
Step5.4 R=P×(2^k)+G
Step5.5 if(R<0) then
P=R+F
else
P=RmodF
Step5.6 if(j>0) then goto Step5.2
ここで、Step5.4でRの値を求めるにあたり、C
jが負である場合には、その絶対値をアドレスとするメ
モリテーブルの値を、R=P×(2^k)+Gとして、
桁上げ処理したPにより直接減算している。この結果、
従来のアルゴリズムにおけるFからの減算処理を削減で
き、剰余演算を省略することが可能な場合が生じるた
め、処理スピードの向上を図ることができる。Step
5.5のP=RmodFの計算アルゴリズムを以下に記
述する。 [P=RmodFの計算アルゴリズム] 変数 j,k,P,R,A,B,C 変数 ERR,END 右シフト演算子 >> Step6.1 A=R,B=F×(2^k),j=k ERR=0,END=0 Step6.2 C=A−B Step6.3 if(C=0) then ERR=1 goto Step6.6 Step6.4 if((C>0)AND(j=k)) then A=C goto Step6.7 Step6.5 if(C>0) then A=C Step6.6 if(j>0) then B>>1,j=j−1 goto Step6.2 Step6.7 P=A,END=1 尚、Step6.1〜Step6.7に記述する演算処
理が可能であるのは、Rの値が0以上、F×(2^k+
1)未満である場合に限られるが、Step5.4にお
いて、Rの値が0以上、F×(2^k+1)未満である
ことが保証されている。このため、上記のアルゴリズム
において、Aの値がF×(2^k)以上のときは以降の
減算処理をすることなく、剰余演算を終了することがで
きる。剰余基数Fは各桁が正の2^k進SD数であるた
め、剰余演算の1回毎の減算で引く値Bはシフト演算を
用いることで簡単に生成することができる。また、後述
するように、加減算器には正負判定機能が付加されてお
り、被減算数Aは減算される毎に減算結果が正であれ
ば、Step6.5において、AにCを自動的に代入す
るように選択回路(マルチプレクサ)が設けられてい
る。
jが負である場合には、その絶対値をアドレスとするメ
モリテーブルの値を、R=P×(2^k)+Gとして、
桁上げ処理したPにより直接減算している。この結果、
従来のアルゴリズムにおけるFからの減算処理を削減で
き、剰余演算を省略することが可能な場合が生じるた
め、処理スピードの向上を図ることができる。Step
5.5のP=RmodFの計算アルゴリズムを以下に記
述する。 [P=RmodFの計算アルゴリズム] 変数 j,k,P,R,A,B,C 変数 ERR,END 右シフト演算子 >> Step6.1 A=R,B=F×(2^k),j=k ERR=0,END=0 Step6.2 C=A−B Step6.3 if(C=0) then ERR=1 goto Step6.6 Step6.4 if((C>0)AND(j=k)) then A=C goto Step6.7 Step6.5 if(C>0) then A=C Step6.6 if(j>0) then B>>1,j=j−1 goto Step6.2 Step6.7 P=A,END=1 尚、Step6.1〜Step6.7に記述する演算処
理が可能であるのは、Rの値が0以上、F×(2^k+
1)未満である場合に限られるが、Step5.4にお
いて、Rの値が0以上、F×(2^k+1)未満である
ことが保証されている。このため、上記のアルゴリズム
において、Aの値がF×(2^k)以上のときは以降の
減算処理をすることなく、剰余演算を終了することがで
きる。剰余基数Fは各桁が正の2^k進SD数であるた
め、剰余演算の1回毎の減算で引く値Bはシフト演算を
用いることで簡単に生成することができる。また、後述
するように、加減算器には正負判定機能が付加されてお
り、被減算数Aは減算される毎に減算結果が正であれ
ば、Step6.5において、AにCを自動的に代入す
るように選択回路(マルチプレクサ)が設けられてい
る。
【0035】図1において、M×Mテーブル18には、
平文M(解読では暗号文C)のデータをもとにして累乗
演算コントロール回路17とC1×C2コントロール回
路27を除いた冪乗剰余演算回路20全体で演算した
(M^0)modF〜(M^((2^k)−1))mo
dFの値が記憶されており、指定された0〜(2^k)
−1までのアドレスに対応する累乗剰余演算結果が出力
されるように構成されている。M×Mテーブル・リード
・コントロール回路19はレジスタ11,12から供給
される暗号鍵上位データEu、及び暗号鍵下位データE
dを取得し、Eu[aj]及びEd[bj]をアドレス
として、(M^Eu[aj])modF、及びM^Ed
[bj])modFの値をM×Mテーブル18から読み
出し、冪乗剰余演算回路20に出力する(Step3.
3、Step3.12、Step4.3、Step4.
12)。累乗演算コントロール回路17はM×Mテーブ
ル18、M×Mテーブル・リード・コントロール回路1
9、冪乗剰余演算回路20を制御し、M×Mテーブル1
8の作成終了を示すステータス信号を取得すると、メイ
ン・コントロール回路15にその旨を通知する。この時
点で次の平文M(解読では暗号文C)のデータを受け付
けることが出来る。
平文M(解読では暗号文C)のデータをもとにして累乗
演算コントロール回路17とC1×C2コントロール回
路27を除いた冪乗剰余演算回路20全体で演算した
(M^0)modF〜(M^((2^k)−1))mo
dFの値が記憶されており、指定された0〜(2^k)
−1までのアドレスに対応する累乗剰余演算結果が出力
されるように構成されている。M×Mテーブル・リード
・コントロール回路19はレジスタ11,12から供給
される暗号鍵上位データEu、及び暗号鍵下位データE
dを取得し、Eu[aj]及びEd[bj]をアドレス
として、(M^Eu[aj])modF、及びM^Ed
[bj])modFの値をM×Mテーブル18から読み
出し、冪乗剰余演算回路20に出力する(Step3.
3、Step3.12、Step4.3、Step4.
12)。累乗演算コントロール回路17はM×Mテーブ
ル18、M×Mテーブル・リード・コントロール回路1
9、冪乗剰余演算回路20を制御し、M×Mテーブル1
8の作成終了を示すステータス信号を取得すると、メイ
ン・コントロール回路15にその旨を通知する。この時
点で次の平文M(解読では暗号文C)のデータを受け付
けることが出来る。
【0036】冪乗剰余演算回路20は大きく2つのブロ
ックに分割することができる。1つは、C1=(M^E
u)modFの演算を行うブロックで、乗算コントロー
ル回路21、M×Nテーブル22、剰余演算コントロー
ル回路23、及び圧縮SD数系加減算器24から成る
(以下、C1ブロックと称する)。もう1つはC2=
(M^Ed)modFの演算を行うブロックで、乗算コ
ントロール回路28、M×Nテーブル29、剰余演算コ
ントロール回路30、及び圧縮SD数系加減算器31か
ら成る(以下、C2ブロックと称する)。乗算コントロ
ール回路21,28は、Qの値が決定される毎に、(Q
×0)modF〜(Q×(2^(k−1)+1))mo
dFの演算を圧縮SD数系加減算器24,31を使用し
て行って、その演算結果をM×Nテーブル22,29に
書込む。ここでは、圧縮2^k進SD数系列の冗長性を
利用して、Cjの採り得る整数範囲を−(2^(k−
1)+1)≦Cj≦(2^(k−1))としているた
め、M×Nテーブル22,29のデータ容量、及びテー
ブル作成時間を従来と比較して、(2^(k−1)+
1)/((2^k)−1)倍にし(kの値が大きい場合
には、およそ1/2となる)、並列で演算を行うため記
憶回路は同等となるが作成時間の大幅な短縮を実現する
ことができる。また、圧縮2^k進SD数の範囲を上記
の範囲に制限しても、SD数系デコード回路32におい
て、完全な整数に戻せることが確認できている。M×N
テーブル・リード・コントロール回路26は、Step
5.3のG=(Q×Cj)modFまたは、G=−(Q
×(−Cj))modFにおいて、M×Nテーブル2
2,29に書込まれた乗算剰余演算結果を、Cjをアド
レスとして読み出す。C1×C2コントロール回路27
はC1ブロック及びC2ブロックの演算の監視を行うと
ともに、早く演算が終了したブロックからのデータによ
り(Eの上位有効桁404ビット下位桁620ビット分
割ではC1ブロックが僅かに早く終了する。)あらかじ
めM×Nテーブル(M×Nテーブル22)を作成し、作
成終了と他ブロックからの算出した値(C2)から、C
=(C1×C2)modFの乗算剰余演算を行い、暗号
文Cを求める。また、アービタ回路25は冪乗剰余演算
回路20内の演算処理の流れを監視し、M×Mテーブル
18作成時はM×Nテーブル22,29及び、M×Nテ
ーブル・リード・コントロール回路26をコントロール
し(両方のM×Nテーブルが必要)、M×Mテーブルか
らの読み出しではM×Mテーブル・リード・コントロー
ル回路19にC1,C2ブロックの情報を送る。乗算剰
余演算コントロール回路16は冪乗剰余演算回路20を
制御し、演算終了を示すステータス信号を取得すると、
メイン・コントロール回路15にその旨を通知する。剰
余演算コントロール回路23及び圧縮SD数系加減算器
24、剰余演算コントロール回路30及び圧縮SD数系
加減算器31はそれぞれC1、C2の乗算剰余演算にお
いて、Step5.5のP=RmodFの演算処理を行
う。
ックに分割することができる。1つは、C1=(M^E
u)modFの演算を行うブロックで、乗算コントロー
ル回路21、M×Nテーブル22、剰余演算コントロー
ル回路23、及び圧縮SD数系加減算器24から成る
(以下、C1ブロックと称する)。もう1つはC2=
(M^Ed)modFの演算を行うブロックで、乗算コ
ントロール回路28、M×Nテーブル29、剰余演算コ
ントロール回路30、及び圧縮SD数系加減算器31か
ら成る(以下、C2ブロックと称する)。乗算コントロ
ール回路21,28は、Qの値が決定される毎に、(Q
×0)modF〜(Q×(2^(k−1)+1))mo
dFの演算を圧縮SD数系加減算器24,31を使用し
て行って、その演算結果をM×Nテーブル22,29に
書込む。ここでは、圧縮2^k進SD数系列の冗長性を
利用して、Cjの採り得る整数範囲を−(2^(k−
1)+1)≦Cj≦(2^(k−1))としているた
め、M×Nテーブル22,29のデータ容量、及びテー
ブル作成時間を従来と比較して、(2^(k−1)+
1)/((2^k)−1)倍にし(kの値が大きい場合
には、およそ1/2となる)、並列で演算を行うため記
憶回路は同等となるが作成時間の大幅な短縮を実現する
ことができる。また、圧縮2^k進SD数の範囲を上記
の範囲に制限しても、SD数系デコード回路32におい
て、完全な整数に戻せることが確認できている。M×N
テーブル・リード・コントロール回路26は、Step
5.3のG=(Q×Cj)modFまたは、G=−(Q
×(−Cj))modFにおいて、M×Nテーブル2
2,29に書込まれた乗算剰余演算結果を、Cjをアド
レスとして読み出す。C1×C2コントロール回路27
はC1ブロック及びC2ブロックの演算の監視を行うと
ともに、早く演算が終了したブロックからのデータによ
り(Eの上位有効桁404ビット下位桁620ビット分
割ではC1ブロックが僅かに早く終了する。)あらかじ
めM×Nテーブル(M×Nテーブル22)を作成し、作
成終了と他ブロックからの算出した値(C2)から、C
=(C1×C2)modFの乗算剰余演算を行い、暗号
文Cを求める。また、アービタ回路25は冪乗剰余演算
回路20内の演算処理の流れを監視し、M×Mテーブル
18作成時はM×Nテーブル22,29及び、M×Nテ
ーブル・リード・コントロール回路26をコントロール
し(両方のM×Nテーブルが必要)、M×Mテーブルか
らの読み出しではM×Mテーブル・リード・コントロー
ル回路19にC1,C2ブロックの情報を送る。乗算剰
余演算コントロール回路16は冪乗剰余演算回路20を
制御し、演算終了を示すステータス信号を取得すると、
メイン・コントロール回路15にその旨を通知する。剰
余演算コントロール回路23及び圧縮SD数系加減算器
24、剰余演算コントロール回路30及び圧縮SD数系
加減算器31はそれぞれC1、C2の乗算剰余演算にお
いて、Step5.5のP=RmodFの演算処理を行
う。
【0037】図2はC1ブロックのSD数系加減算器2
4に乗算コントロール回路21、及び剰余演算コントロ
ール回路24からのコマンドによる制御回路を加えた圧
縮SD数系加減算器の回路構成図例である。C2ブロッ
クにおいても同様の回路を構成する。同図に示す入力
R,Fは、有効桁数に桁上げ処理や加算による桁あふれ
を考慮したn桁圧縮2^k進SD数系の値である。剰余
演算コントロール回路23(剰余演算コントロール回路
30)による剰余演算コマンドでの演算は加減算コマン
ドとの協調により、加減算回路全体の主制御を行う制御
回路41からのSEL−A信号により、圧縮2^k進S
D数n桁のRをn個のセレクタ430,431,…,43
n-1選択し、n個のレジスタ440,441,…,44n-1
で加減算器の一方の入力(アルゴリズムではA)に取り
込み、FをSEL−B信号によりn個のセレクタ4
70,471,…,47n-1で選択し、シフトレジスタ4
2で2^k倍して加減算器の他方の入力(アルゴリズム
ではB)へ取り込む。セレクタ43は1回の減算毎にn
桁の減算結果が正であればその結果を選択し、レジスタ
44で保持する。また、シフトレジスタ42は1回の減
算毎に右シフト(1/2倍)する。
4に乗算コントロール回路21、及び剰余演算コントロ
ール回路24からのコマンドによる制御回路を加えた圧
縮SD数系加減算器の回路構成図例である。C2ブロッ
クにおいても同様の回路を構成する。同図に示す入力
R,Fは、有効桁数に桁上げ処理や加算による桁あふれ
を考慮したn桁圧縮2^k進SD数系の値である。剰余
演算コントロール回路23(剰余演算コントロール回路
30)による剰余演算コマンドでの演算は加減算コマン
ドとの協調により、加減算回路全体の主制御を行う制御
回路41からのSEL−A信号により、圧縮2^k進S
D数n桁のRをn個のセレクタ430,431,…,43
n-1選択し、n個のレジスタ440,441,…,44n-1
で加減算器の一方の入力(アルゴリズムではA)に取り
込み、FをSEL−B信号によりn個のセレクタ4
70,471,…,47n-1で選択し、シフトレジスタ4
2で2^k倍して加減算器の他方の入力(アルゴリズム
ではB)へ取り込む。セレクタ43は1回の減算毎にn
桁の減算結果が正であればその結果を選択し、レジスタ
44で保持する。また、シフトレジスタ42は1回の減
算毎に右シフト(1/2倍)する。
【0038】各々の桁についてn個の加減算器450,
451,…,45n-1を用いて、Step6.1〜Ste
p6.7の計算アルゴリズムに従って減算を施すことに
より、P=RmodFの演算処理を行って、圧縮2^k
進SD数系n桁のP(2^k,0),P(2^k,
1),…,P(2^k,n−1)を出力する演算回路を
構成することができる。同図に示すように、入力データ
R,Fの各々の桁について減算を行うn個の加減算器4
50,451,…,45n-1の各々から出力される加減算
結果(アルゴリズムではC)はセレクタ430,431,
…,43n-1にフィードバックされ、加減算結果の正負
の極性を示すサイン信号S(2^k,0),S(2^
k,1),…,S(2^k,n−1)、及び加減算結果
が0であるか否かを示すノンゼロ信号NON_ZERO
(2^k,0),NON_ZERO(2^k,1),
…,NON_ZERO(2^k,n−1)、最上位桁の
加減算器からのキャリーを示すCA(2^k,n−
1)、を取得して、正負を判定する正負判定回路46を
備えている。
451,…,45n-1を用いて、Step6.1〜Ste
p6.7の計算アルゴリズムに従って減算を施すことに
より、P=RmodFの演算処理を行って、圧縮2^k
進SD数系n桁のP(2^k,0),P(2^k,
1),…,P(2^k,n−1)を出力する演算回路を
構成することができる。同図に示すように、入力データ
R,Fの各々の桁について減算を行うn個の加減算器4
50,451,…,45n-1の各々から出力される加減算
結果(アルゴリズムではC)はセレクタ430,431,
…,43n-1にフィードバックされ、加減算結果の正負
の極性を示すサイン信号S(2^k,0),S(2^
k,1),…,S(2^k,n−1)、及び加減算結果
が0であるか否かを示すノンゼロ信号NON_ZERO
(2^k,0),NON_ZERO(2^k,1),
…,NON_ZERO(2^k,n−1)、最上位桁の
加減算器からのキャリーを示すCA(2^k,n−
1)、を取得して、正負を判定する正負判定回路46を
備えている。
【0039】乗算剰余演算では前提となるM×Nテーブ
ル22,29のデータを作成するため加減算コマンドに
より加算と減算を繰り返すことにより行う。RをMと
し、Nを0から2^(k−1)+1とするとNが0と1
の場合はそれぞれ0とRをテーブルへ書き込むだけであ
るのでR×2より説明する。制御回路41からのSEL
−A,SEL−B信号により加減算器に与える値を両方
ともRとし、制御回路41からのPLUS_MINUS
信号を加算とし加算結果のR+Rをセレクタ43で選択
後、レジスタ44にて保持する。一方セレクタ47はF
を選択しシフトレジスタ42でFを保持する。次に加減
算器を減算モードとし演算することにより(2R)mo
dFを計算したことになる(R≦F)。この結果をM×
Nテーブル22,29に書き込むと同時に再びセレクタ
43で選択しレジスタ44で保持し、セレクタ47では
Rを選択しシフトレジスタ42でこれを保持する。
ル22,29のデータを作成するため加減算コマンドに
より加算と減算を繰り返すことにより行う。RをMと
し、Nを0から2^(k−1)+1とするとNが0と1
の場合はそれぞれ0とRをテーブルへ書き込むだけであ
るのでR×2より説明する。制御回路41からのSEL
−A,SEL−B信号により加減算器に与える値を両方
ともRとし、制御回路41からのPLUS_MINUS
信号を加算とし加算結果のR+Rをセレクタ43で選択
後、レジスタ44にて保持する。一方セレクタ47はF
を選択しシフトレジスタ42でFを保持する。次に加減
算器を減算モードとし演算することにより(2R)mo
dFを計算したことになる(R≦F)。この結果をM×
Nテーブル22,29に書き込むと同時に再びセレクタ
43で選択しレジスタ44で保持し、セレクタ47では
Rを選択しシフトレジスタ42でこれを保持する。
【0040】加減算器を加算モードとし(2R)mod
F+Rを行う。この結果はレジスタ44に保持され、次
にシフトレジスタ42にはFを保持し減算することによ
り(3R)modFを実行したことになる。この結果
は、M×Nテーブル22,29に書き込むと同時に再び
セレクタ43で選択されレジスタ44に戻される。のよ
うに加算と減算を交互に繰り返すことによりテーブルを
完成させることができる。
F+Rを行う。この結果はレジスタ44に保持され、次
にシフトレジスタ42にはFを保持し減算することによ
り(3R)modFを実行したことになる。この結果
は、M×Nテーブル22,29に書き込むと同時に再び
セレクタ43で選択されレジスタ44に戻される。のよ
うに加算と減算を交互に繰り返すことによりテーブルを
完成させることができる。
【0041】冪乗剰余演算もこの二つの方法、剰余演算
と乗算剰余演算を組み合わせることにより実行すること
ができる。また、このようにP=RmodFの剰余演算
処理をする場合においては、加減算器450,451,
…,45n-1は1組でよく、しかもメモリを一切必要と
しないので、回路規模の縮小を実現できる。また、減算
回数は(k+1)回になるが、結果のチェックは必要な
く、剰余演算が終了したことが判明すればよい。剰余演
算の終了はStep6.7において、END=1となっ
た時点で判明できる。また、剰余演算のための予備的な
処理のオーバーヘッドがなく、パフォーマンスの向上が
期待できる。
と乗算剰余演算を組み合わせることにより実行すること
ができる。また、このようにP=RmodFの剰余演算
処理をする場合においては、加減算器450,451,
…,45n-1は1組でよく、しかもメモリを一切必要と
しないので、回路規模の縮小を実現できる。また、減算
回数は(k+1)回になるが、結果のチェックは必要な
く、剰余演算が終了したことが判明すればよい。剰余演
算の終了はStep6.7において、END=1となっ
た時点で判明できる。また、剰余演算のための予備的な
処理のオーバーヘッドがなく、パフォーマンスの向上が
期待できる。
【0042】図3は圧縮2^k進SD数加減算器45の
回路構成図である。ここでは、加減算の対象となる整数
A,Bを少なくとも一方が圧縮2^k進SD数系である
2^6進SD数に変換して演算を行う場合を説明する。
加減算器45は2^6進SD数に変換されたA,B、及
び下位桁からのキャリー信号CA_Iを入力として、制
御回路41(図2)からのPLUS_MINUS信号に
対応して加減算を行い、キャリー信号CA_O、サイン
符号C(S)、演算結果C(5)〜C(0)、及びNO
N_ZERO信号を出力する。加減算器45はA、Bの
加減算結果が−(2^(k−1)+1)以上、2^(k
−1)以下となるように工夫してある。同図において、
A(S)はAの正負を表す符号であり、「0」は
「正」、「1」は「負」を表すものとする。B(S)、
C(S)、Q(S)についても同様である。また、A
(5)〜A(0)、B(5)〜B(0)、C(5)〜C
(0)はそれぞれA,B,Cの6桁の2^6進SD数、
Q(6)〜Q(0)は7桁の桁上がりを考慮した2^6
進SD数同士の加減算結果である。また、以降の説明に
おいて、下位桁から桁上げ(キャリー)があるときは、
CA_I=01、下位桁から桁借り(ボロー)があると
きは、CA_I=11、下位桁から桁上げ/桁借りの何
れも生じないときはCA_I=00とする。上位桁への
出力であるCA_Oについても同様とする。
回路構成図である。ここでは、加減算の対象となる整数
A,Bを少なくとも一方が圧縮2^k進SD数系である
2^6進SD数に変換して演算を行う場合を説明する。
加減算器45は2^6進SD数に変換されたA,B、及
び下位桁からのキャリー信号CA_Iを入力として、制
御回路41(図2)からのPLUS_MINUS信号に
対応して加減算を行い、キャリー信号CA_O、サイン
符号C(S)、演算結果C(5)〜C(0)、及びNO
N_ZERO信号を出力する。加減算器45はA、Bの
加減算結果が−(2^(k−1)+1)以上、2^(k
−1)以下となるように工夫してある。同図において、
A(S)はAの正負を表す符号であり、「0」は
「正」、「1」は「負」を表すものとする。B(S)、
C(S)、Q(S)についても同様である。また、A
(5)〜A(0)、B(5)〜B(0)、C(5)〜C
(0)はそれぞれA,B,Cの6桁の2^6進SD数、
Q(6)〜Q(0)は7桁の桁上がりを考慮した2^6
進SD数同士の加減算結果である。また、以降の説明に
おいて、下位桁から桁上げ(キャリー)があるときは、
CA_I=01、下位桁から桁借り(ボロー)があると
きは、CA_I=11、下位桁から桁上げ/桁借りの何
れも生じないときはCA_I=00とする。上位桁への
出力であるCA_Oについても同様とする。
【0043】加減算器51は2^6進SD数A,Bの加
減算を行い、Q(S)、Q(6)〜Q(0)を出力す
る。この加減算器の結果のみにより上位桁への桁上げ/
桁借りのキャリーとサイン符号をデコーダ52で生成
し、サインゼネレータ53、及び加減算器54は、下位
桁からの桁上げ/桁借りを考慮した上で当該桁の加減算
結果と正負のサインビットとを生成する。上位桁への桁
上げ/桁借りが生じていても加減算器51の結果からの
2^kを差し引く処理や、2^kを加える処理を当該桁
のサインビットの生成方法のみで不要としている。
減算を行い、Q(S)、Q(6)〜Q(0)を出力す
る。この加減算器の結果のみにより上位桁への桁上げ/
桁借りのキャリーとサイン符号をデコーダ52で生成
し、サインゼネレータ53、及び加減算器54は、下位
桁からの桁上げ/桁借りを考慮した上で当該桁の加減算
結果と正負のサインビットとを生成する。上位桁への桁
上げ/桁借りが生じていても加減算器51の結果からの
2^kを差し引く処理や、2^kを加える処理を当該桁
のサインビットの生成方法のみで不要としている。
【0044】デコーダ52はキャリー信号CA_Oと下
位からのキャリーを考慮しないサイン符号を出力するた
めの回路であり、Q(S),Q(6),Q(5)が0,
1,xである場合には、CA_O=01,S=0を出力
する。ここで、xは0又は1の何れかとする。同様に、
Q(S),Q(6),Q(5)が0,0,1である場合
には、CA_O=01,S=1を出力し、Q(S),Q
(6),Q(5)が0,0,0である場合には、CA_
O=00,S=0を出力し、Q(S),Q(6),Q
(5)が1,1,1である場合には、CA_O=00,
S=1を出力し、Q(S),Q(6),Q(5)が1,
1,0である場合には、CA_O=11,S=0を出力
し、Q(S),Q(6),Q(5)が1,0,xである
場合には、CA_O=11,S=1を出力する。
位からのキャリーを考慮しないサイン符号を出力するた
めの回路であり、Q(S),Q(6),Q(5)が0,
1,xである場合には、CA_O=01,S=0を出力
する。ここで、xは0又は1の何れかとする。同様に、
Q(S),Q(6),Q(5)が0,0,1である場合
には、CA_O=01,S=1を出力し、Q(S),Q
(6),Q(5)が0,0,0である場合には、CA_
O=00,S=0を出力し、Q(S),Q(6),Q
(5)が1,1,1である場合には、CA_O=00,
S=1を出力し、Q(S),Q(6),Q(5)が1,
1,0である場合には、CA_O=11,S=0を出力
し、Q(S),Q(6),Q(5)が1,0,xである
場合には、CA_O=11,S=1を出力する。
【0045】サインゼネレータ53はA,Bの加減算結
果と下位からのキャリーによって当該桁の正負を判別す
るための回路であり、CA_I=01、Q(5)〜Q
(0)=3FHである場合には、C(S)=0、CA_
I=11、Q(5)〜Q(0)=0である場合には、C
(S)=1とし、その他では、C(S)=Sとする。加
減算器54は下位からの桁上げ/桁借りを考慮してC
(5)〜C(0)を出力するための回路であり、CA_
I=00である場合には、C=Qとし、CA_I=01
である場合には、C=Q+1とし、CA_I=11であ
る場合には、C=Q−1とする。OR回路55はC
(5)〜C(0)の論理和をとり、Cが0であるか否か
を示すNON_ZERO信号を出力する。C=0である
場合には、NON_ZERO=0となり、C≠0である
場合には、NON_ZERO=1となる。
果と下位からのキャリーによって当該桁の正負を判別す
るための回路であり、CA_I=01、Q(5)〜Q
(0)=3FHである場合には、C(S)=0、CA_
I=11、Q(5)〜Q(0)=0である場合には、C
(S)=1とし、その他では、C(S)=Sとする。加
減算器54は下位からの桁上げ/桁借りを考慮してC
(5)〜C(0)を出力するための回路であり、CA_
I=00である場合には、C=Qとし、CA_I=01
である場合には、C=Q+1とし、CA_I=11であ
る場合には、C=Q−1とする。OR回路55はC
(5)〜C(0)の論理和をとり、Cが0であるか否か
を示すNON_ZERO信号を出力する。C=0である
場合には、NON_ZERO=0となり、C≠0である
場合には、NON_ZERO=1となる。
【0046】従来では桁数の多い整数の加減算における
キャリー及びボローの伝播に起因する処理時間の増大を
抑止するため、キャリーやボローが2桁以上に伝播しな
いSD数系を利用しており、従来の方式では、2^k進
SD数の演算において、演算結果が2より大きければキ
ャリーを上位に上げて演算結果から2^kを引き、演算
結果が2より小さければボローを上げて演算結果に2^
kを加えており、加減算器から出力されるSD数の範囲
は−(2^k)+1以上、(2^k)−1以下である。
これに対し、本実施形態では、圧縮2^k進SD数加減
算器から出力される2^k進SD数の範囲は−(2^
(k−1)+1)以上、2^(k−1)以下とし、従来
のキャリーやボローが2桁以上に伝播しないことと同時
にSD数の採り得る範囲をおよそ1/2とすることで、
演算結果を格納するメモリテーブルの容量を大幅に削減
している。
キャリー及びボローの伝播に起因する処理時間の増大を
抑止するため、キャリーやボローが2桁以上に伝播しな
いSD数系を利用しており、従来の方式では、2^k進
SD数の演算において、演算結果が2より大きければキ
ャリーを上位に上げて演算結果から2^kを引き、演算
結果が2より小さければボローを上げて演算結果に2^
kを加えており、加減算器から出力されるSD数の範囲
は−(2^k)+1以上、(2^k)−1以下である。
これに対し、本実施形態では、圧縮2^k進SD数加減
算器から出力される2^k進SD数の範囲は−(2^
(k−1)+1)以上、2^(k−1)以下とし、従来
のキャリーやボローが2桁以上に伝播しないことと同時
にSD数の採り得る範囲をおよそ1/2とすることで、
演算結果を格納するメモリテーブルの容量を大幅に削減
している。
【0047】また、従来では加減算におけるキャリー及
びボローの発生を調べるには、サイン符号を含め、加減
算結果の全ての桁(2^k桁〜2^0桁)をチェックす
る必要があったが、上記のデコーダ52によれば、サイ
ン符号と2^k桁、2^(k−1)桁、つまり、Q
(S),Q(6),Q(5)のみをチェックすれば足り
るため、演算の遅延時間を短くすることができ、処理速
度の向上を実現することができる。
びボローの発生を調べるには、サイン符号を含め、加減
算結果の全ての桁(2^k桁〜2^0桁)をチェックす
る必要があったが、上記のデコーダ52によれば、サイ
ン符号と2^k桁、2^(k−1)桁、つまり、Q
(S),Q(6),Q(5)のみをチェックすれば足り
るため、演算の遅延時間を短くすることができ、処理速
度の向上を実現することができる。
【0048】本実施形態の暗号処理プロセッサによれ
ば、鍵のビット数が1024ビットの場合、40Kビッ
ト毎秒(40MHzクロック)以上で演算処理が可能で
あることが確認できた。ホストコンピュータ側の処理能
力の範囲内で、暗号処理プロセッサを複数並べて並列処
理すると、暗号化処理スピードはプロセッサの数だけさ
らに倍化できる。
ば、鍵のビット数が1024ビットの場合、40Kビッ
ト毎秒(40MHzクロック)以上で演算処理が可能で
あることが確認できた。ホストコンピュータ側の処理能
力の範囲内で、暗号処理プロセッサを複数並べて並列処
理すると、暗号化処理スピードはプロセッサの数だけさ
らに倍化できる。
【0049】尚、上記の説明では暗号鍵Eを2分割して
並列処理する場合を説明したが、これに限らず、例え
ば、n桁2^k進SD数暗号鍵EをE1、E2、…E
j…、Epのようにp分割し(pはnより十分小さい
値)、C=(((M^E1)modF)×((M^E2)m
odF)×…×((M^Ej)modF)×…×((M^
Ep)modF))modFより暗号文Cを求めること
もできる。この場合、Ejの桁のうちEj-1に対応する桁
は全て0となる(2≦j<<n)。また、上記の説明は平
分の暗号化を例に説明したが、これと双対をなす暗号文
の復号化についても同様に適用することができる。
並列処理する場合を説明したが、これに限らず、例え
ば、n桁2^k進SD数暗号鍵EをE1、E2、…E
j…、Epのようにp分割し(pはnより十分小さい
値)、C=(((M^E1)modF)×((M^E2)m
odF)×…×((M^Ej)modF)×…×((M^
Ep)modF))modFより暗号文Cを求めること
もできる。この場合、Ejの桁のうちEj-1に対応する桁
は全て0となる(2≦j<<n)。また、上記の説明は平
分の暗号化を例に説明したが、これと双対をなす暗号文
の復号化についても同様に適用することができる。
【0050】
【発明の効果】本発明によれば、整数Eを複数に分割し
てそれぞれを平行して冪乗剰余演算を行うことができる
ため、演算速度を向上することができる。また、2^k
進SD数の加減算結果を−(2^(k−1)+1)以
上、2^(k−1)以下とすることにより、2^k進S
D数の採り得る整数範囲を従来のおよそ半分とし、デー
タ量の削減を図り回路規模を小さくすることができ、演
算速度の向上を図ることができる。
てそれぞれを平行して冪乗剰余演算を行うことができる
ため、演算速度を向上することができる。また、2^k
進SD数の加減算結果を−(2^(k−1)+1)以
上、2^(k−1)以下とすることにより、2^k進S
D数の採り得る整数範囲を従来のおよそ半分とし、デー
タ量の削減を図り回路規模を小さくすることができ、演
算速度の向上を図ることができる。
【図1】暗号処理プロセッサのブロック構成図である。
【図2】剰余演算回路の回路構成図である。
【図3】加減算回路の回路構成図である。
10…ホスト・インターフェース回路、11…暗号鍵上
位レジスタ、12…暗号鍵下位レジスタ、13…剰余基
数レジスタ、14…平文レジスタ、15…メイン・コン
トロール回路、16…乗算剰余演算演算コントロール回
路、17…累乗演算コントロール回路、18…M×Mテ
ーブル、19…M×Mテーブル・リードコントロール回
路、20…冪乗剰余演算回路、21…乗算コントロール
回路、22…M×Nテーブル、23…剰余演算コントロ
ール回路、24…SD数系加減算器、25…アービタ回
路、26…M×Nテーブル・リード・コントロール回
路、27…C1×C2コントロール回路、28…乗算コ
ントロール回路、29…M×Nテーブル、30…剰余演
算コントロール回路、31…SD数系加減算器、32…
SD数系デコード回路、33…FIFOバッファ
位レジスタ、12…暗号鍵下位レジスタ、13…剰余基
数レジスタ、14…平文レジスタ、15…メイン・コン
トロール回路、16…乗算剰余演算演算コントロール回
路、17…累乗演算コントロール回路、18…M×Mテ
ーブル、19…M×Mテーブル・リードコントロール回
路、20…冪乗剰余演算回路、21…乗算コントロール
回路、22…M×Nテーブル、23…剰余演算コントロ
ール回路、24…SD数系加減算器、25…アービタ回
路、26…M×Nテーブル・リード・コントロール回
路、27…C1×C2コントロール回路、28…乗算コ
ントロール回路、29…M×Nテーブル、30…剰余演
算コントロール回路、31…SD数系加減算器、32…
SD数系デコード回路、33…FIFOバッファ
─────────────────────────────────────────────────────
【手続補正書】
【提出日】平成13年12月11日(2001.12.
11)
11)
【手続補正1】
【補正対象書類名】明細書
【補正対象項目名】0031
【補正方法】変更
【補正内容】
【0031】暗号化鍵E(復号化鍵D)はそれぞれの暗
号化処理時間が同程度の上位データEu(Du)と、下
位データEd(Dd)に分割され、レジスタ11,12
に格納された後、M×Mテーブル・リード・コントロー
ル回路19へ出力され、平分M及び剰余基数Fは冪乗剰
余演算回路20へ出力されて、メイン・コントロール回
路15の制御下において、M×Mテーブル18の作成を
待ち、C1=(M^Eu)modF、C2=(M^Ed)
modFの冪乗剰余演算処理が行われる。冪乗剰余演算
回路20ではさらに、C=(C1×C2)modFの乗
算剰余演算を行い、暗号文C(解読文M)を求める。暗
号文C(解読文M)はSD数系デコード回路32にて2
進数のビット列に変換され、FIFOバッファ33を介
しホストインタフェース回路10を通して出力される。
号化処理時間が同程度の上位データEu(Du)と、下
位データEd(Dd)に分割され、レジスタ11,12
に格納された後、M×Mテーブル・リード・コントロー
ル回路19へ出力され、平分M及び剰余基数Fは冪乗剰
余演算回路20へ出力されて、メイン・コントロール回
路15の制御下において、M×Mテーブル18の作成を
待ち、C1=(M^Eu)modF、C2=(M^Ed)
modFの冪乗剰余演算処理が行われる。冪乗剰余演算
回路20ではさらに、C=(C1×C2)modFの乗
算剰余演算を行い、暗号文C(解読文M)を求める。暗
号文C(解読文M)はSD数系デコード回路32にて2
進数のビット列に変換され、FIFOバッファ33を介
しホストインタフェース回路10を通して出力される。
【手続補正2】
【補正対象書類名】明細書
【補正対象項目名】0036
【補正方法】変更
【補正内容】
【0036】冪乗剰余演算回路20は大きく2つのブロ
ックに分割することができる。1つは、C1=(M^E
u)modFの演算を行うブロックで、乗算コントロー
ル回路21、M×Nテーブル22、剰余演算コントロー
ル回路23、圧縮SD数系加減算器24から成る(以
下、C1ブロックと称する)。もう1つはC2=(M^
Ed)modFの演算を行うブロックで、乗算コントロ
ール回路28、M×Nテーブル29、剰余演算コントロ
ール回路30、圧縮SD数系加減算器31から成る(以
下、C2ブロックと称する)。乗算コントロール回路2
1,28は、Qの値が決定される毎に、(Q×0)mo
dF〜(Q×(2^(k−1)+1))modFの演算
を圧縮SD数系加減算器24,31を使用して行って、
その演算結果をM×Nテーブル22,29に書込む。こ
こでは、圧縮2^k進SD数系列の冗長性を利用して、
Cjの採り得る整数範囲を−(2^(k−1)+1)≦
Cj≦(2^(k−1))としているため、M×Nテー
ブル22,29のデータ容量、及びテーブル作成時間を
従来と比較して、(2^(k−1)+1)/((2^
k)−1)倍にし(kの値が大きい場合には、およそ1
/2となる)、並列で演算を行うため記憶回路は同等と
なるが作成時間の大幅な短縮を実現することができる。
また、圧縮2^k進SD数の範囲を上記の範囲に制限し
ても、SD数系デコード回路32において、完全な整数
に戻せることが確認できている。M×Nテーブル・リー
ド・コントロール回路26は、Step5.3のG=
(Q×Cj)modFまたは、G=−(Q×(−C
j))modFにおいて、M×Nテーブル22,29に
書込まれた乗算剰余演算結果を、Cjをアドレスとして
読み出す。C1×C2コントロール回路27はC1ブロ
ック及びC2ブロックの演算の監視を行うとともに、早
く演算が終了したブロックからのデータによりあらかじ
めM×Nテーブル(M×Nテーブル22)を作成し、作
成終了と他ブロックからの算出した値(C2)から、C
=(C1×C2)modFの乗算剰余演算を行い、暗号
文Cを求める。また、アービタ回路25は冪乗剰余演算
回路20内の演算処理の流れを監視し、M×Mテーブル
18作成時はM×Nテーブル22,29及び、M×Nテ
ーブル・リード・コントロール回路26をコントロール
し(両方のM×Nテーブルが必要)、M×Mテーブルか
らの読み出しではM×Mテーブル・リード・コントロー
ル回路19にC1,C2ブロックの情報を送る。冪乗剰
余演算コントロール回路16は冪乗剰余演算回路20を
制御し、演算終了を示すステータス信号を取得すると、
メイン・コントロール回路15にその旨を通知する。剰
余演算コントロール回路23及び圧縮SD数系加減算器
24、剰余演算コントロール回路30及び圧縮SD数系
加減算器31はそれぞれC1、C2の乗算剰余演算にお
いて、Step5.5のP=RmodFの演算処理を行
う。 ─────────────────────────────────────────────────────
ックに分割することができる。1つは、C1=(M^E
u)modFの演算を行うブロックで、乗算コントロー
ル回路21、M×Nテーブル22、剰余演算コントロー
ル回路23、圧縮SD数系加減算器24から成る(以
下、C1ブロックと称する)。もう1つはC2=(M^
Ed)modFの演算を行うブロックで、乗算コントロ
ール回路28、M×Nテーブル29、剰余演算コントロ
ール回路30、圧縮SD数系加減算器31から成る(以
下、C2ブロックと称する)。乗算コントロール回路2
1,28は、Qの値が決定される毎に、(Q×0)mo
dF〜(Q×(2^(k−1)+1))modFの演算
を圧縮SD数系加減算器24,31を使用して行って、
その演算結果をM×Nテーブル22,29に書込む。こ
こでは、圧縮2^k進SD数系列の冗長性を利用して、
Cjの採り得る整数範囲を−(2^(k−1)+1)≦
Cj≦(2^(k−1))としているため、M×Nテー
ブル22,29のデータ容量、及びテーブル作成時間を
従来と比較して、(2^(k−1)+1)/((2^
k)−1)倍にし(kの値が大きい場合には、およそ1
/2となる)、並列で演算を行うため記憶回路は同等と
なるが作成時間の大幅な短縮を実現することができる。
また、圧縮2^k進SD数の範囲を上記の範囲に制限し
ても、SD数系デコード回路32において、完全な整数
に戻せることが確認できている。M×Nテーブル・リー
ド・コントロール回路26は、Step5.3のG=
(Q×Cj)modFまたは、G=−(Q×(−C
j))modFにおいて、M×Nテーブル22,29に
書込まれた乗算剰余演算結果を、Cjをアドレスとして
読み出す。C1×C2コントロール回路27はC1ブロ
ック及びC2ブロックの演算の監視を行うとともに、早
く演算が終了したブロックからのデータによりあらかじ
めM×Nテーブル(M×Nテーブル22)を作成し、作
成終了と他ブロックからの算出した値(C2)から、C
=(C1×C2)modFの乗算剰余演算を行い、暗号
文Cを求める。また、アービタ回路25は冪乗剰余演算
回路20内の演算処理の流れを監視し、M×Mテーブル
18作成時はM×Nテーブル22,29及び、M×Nテ
ーブル・リード・コントロール回路26をコントロール
し(両方のM×Nテーブルが必要)、M×Mテーブルか
らの読み出しではM×Mテーブル・リード・コントロー
ル回路19にC1,C2ブロックの情報を送る。冪乗剰
余演算コントロール回路16は冪乗剰余演算回路20を
制御し、演算終了を示すステータス信号を取得すると、
メイン・コントロール回路15にその旨を通知する。剰
余演算コントロール回路23及び圧縮SD数系加減算器
24、剰余演算コントロール回路30及び圧縮SD数系
加減算器31はそれぞれC1、C2の乗算剰余演算にお
いて、Step5.5のP=RmodFの演算処理を行
う。 ─────────────────────────────────────────────────────
【手続補正書】
【提出日】平成14年12月27日(2002.12.
27)
27)
【手続補正1】
【補正対象書類名】明細書
【補正対象項目名】0033
【補正方法】変更
【補正内容】
【0033】
Step3.1 C1=1
Step3.2 aj=n−1
Step3.3 if(Eu[aj]>0) then
C1=(M^Eu[aj])modF,aj=aj−1
goto Step3.5
Step3.4 if(aj>0) then
aj=aj−1 goto Step3.3
Step3.5 ai=k
Step3.6 Q1=C1
Step3.7 P1=(Q1×C1)modF
Step3.8 C1=P1
Step3.9 ai=ai−1
Step3.10 if(ai>0) then
goto Step3.6
Step3.11 if(Eu[aj]=0) then
goto Step3.15
Step3.12 Q1=(M^Eu[aj])modF
Step3.13 P1=(Q1×C1)modF
Step3.14 C1=P1
Step3.15 if(aj>0) then
aj=aj−1 goto Step3.5
[C2=(M^Ed)modFの計算アルゴリズム]
Step4.1 C2=1
Step4.2 bj=m−1
Step4.3 if(Ed[bj]>0) then
C2=(M^Ed[bj])modF,bj=bj−1
goto Step4.5
Step4.4 if(bj>0) then
bj=bj−1 goto Step4.3
Step4.5 bi=k
Step4.6 Q2=C2
Step4.7 P2=(Q2×C2)modF
Step4.8 C2=P2
Step4.9 bi=bi−1
Step4.10 if(bi>0) then
goto Step4.6
Step4.11 if(Ed[bj]=0) then
goto Step4.15
Step4.12 Q2=(M^Ed[bj])modF
Step4.13 P2=(Q2×C2)modF
Step4.14 C2=P2
Step4.15 if(bj>0) then
bj=bj−1 goto Step4.5
ここで、Step3.11によりEu(Du)の下位E
d(Dd)m桁に相当する部分は0であるので、Ste
p3.12〜Step3.14をスキップすることがで
き、下位Ed(Dd)の演算時間と同等となるので短い
鍵で処理をしたのと同様となる。上述したC=(C1×
C2)modF、Step3.7のP1=(Q1×C
1)modF、Step4.7のP2=(Q2×C2)
modFの乗算剰余演算を求める式をP=(Q×C)m
odFとして計算するアルゴリズムを以下に記述する。 [P=(Q×C)modFの計算アルゴリズム] 変数 j,k,P,G,R Cを2^k進SD数系数列に変換したときの桁数 n Cの2^k進SD数系数列のj桁目の値 Cj 但し、Cjの採り得る整数範囲を−(2^(k−1)+
1)≦Cj≦2^(k−1)とする。
d(Dd)m桁に相当する部分は0であるので、Ste
p3.12〜Step3.14をスキップすることがで
き、下位Ed(Dd)の演算時間と同等となるので短い
鍵で処理をしたのと同様となる。上述したC=(C1×
C2)modF、Step3.7のP1=(Q1×C
1)modF、Step4.7のP2=(Q2×C2)
modFの乗算剰余演算を求める式をP=(Q×C)m
odFとして計算するアルゴリズムを以下に記述する。 [P=(Q×C)modFの計算アルゴリズム] 変数 j,k,P,G,R Cを2^k進SD数系数列に変換したときの桁数 n Cの2^k進SD数系数列のj桁目の値 Cj 但し、Cjの採り得る整数範囲を−(2^(k−1)+
1)≦Cj≦2^(k−1)とする。
Claims (5)
- 【請求項1】 多数桁の整数E,M,Fに対してC=
(M^E)modFなる冪乗剰余演算を行う冪乗剰余演
算装置において、 E,M,Fを各桁が正の2^k進SD数に変換する変換
手段と、 n桁の2^k進SD数に変換された整数Eに対して、E
=E1+E2+…+Epなる関係を満たし、Mのそれぞれ
の値による累乗演算とFでの剰余演算を合わせた処理時
間が同程度の2^k進SD数の集合E1,E2,…,Ep
を記憶する記憶手段と、 前記記憶手段に記憶されているE1,E2,…,Epの値
を読取り、(M^E1)modF、(M^E2)modF、
…、(M^Ep)modFの冪乗剰余演算を並列的に行
い、各々の演算結果から、C=(((M^E1)mod
F)×((M^E2)modF)×…×((M^Ep)mo
dF))modFとしてCを算出する乗算剰余演算手段
とを備える、冪乗剰余演算装置。 - 【請求項2】 各桁の範囲が−(2^(k−1)+1)
以上、2^(k−1)以下の範囲に制限されたn桁の圧
縮2^k進SD数同士、若しくはn桁の圧縮2^k進S
D数とn桁の2^k進SD数同士の加減算を各桁毎に並
列して演算処理を行うためのn個の圧縮SD数加減算器
から構成される加減算装置であって、前記圧縮SD数加
減算器は、当該桁での加減算結果が2^(k−1)以上
であれば、桁上げを示すキャリー信号を上位桁へ出力
し、前記加減算結果が−2^(k−1)未満であれば、
桁借りをするキャリー信号を上位桁へ出力することによ
り、桁上げ/桁借りした元の計算結果はサインビットを
反転させるだけで2の補数とし、この結果と下位桁の圧
縮SD数加減算器からの桁上げ若しくは桁借りを示すキ
ャリー信号とを再計算した結果、当該桁での最終演算結
果が取り得る値の範囲を−(2^(k−1)+1)以
上、2^(k−1)以下とする、加減算装置。 - 【請求項3】 各桁の範囲が−(2^(k−1)+1)
以上、2^(k−1)以下の範囲に制限されたn桁の圧
縮2^k進SD数同士、若しくはn桁の圧縮2^k進S
D数とn桁の2^k進SD数同士の加減算を各桁毎に並
列して演算処理を行うための加減算方法であって、 当該桁での加減算結果が2^(k−1)以上であれば、
桁上げを示すキャリー信号を上位桁へ出力し、前記加減
算結果が−2^(k−1)未満であれば、桁借りをする
キャリー信号を上位桁へ出力することにより、桁上げ/
桁借りした元の計算結果はサインビットを反転させるだ
けで2の補数とし、この結果と下位桁の圧縮SD数加減
算器からの桁上げ若しくは桁借りを示すキャリー信号と
を再計算した結果、当該桁での最終演算結果が取り得る
値の範囲を−(2^(k−1)+1)以上、2^(k−
1)以下とする、加減算方法。 - 【請求項4】 圧縮2^k進SD数R,各桁が正の2^
k進SD数Fに対してP=RmodFなる剰余演算をツ
リー方式で行う剰余演算装置であって、 レジスタA、レジスタB、レジスタC、レジスタj、及
びレジスタPを備え、請求項3に記載の加減算方法を用
いて、下記の第1ステップから第7ステップを順次実行
することによりレジスタPの値を解とする。 第1ステップ:レジスタAにRの値を代入し、レジスタ
BにF×(2^k)を代入し、レジスタjにkの値を代
入する。 第2ステップ:レジスタCにレジスタAの値からレジス
タBの値を減じた値を代入する。 第3ステップ:レジスタCの値が0である場合にはエラ
ー処理をして第7ステップに移行する。 第4ステップ:レジスタCの値が正であって、レジスタ
jの値がkに等しい場合には、レジスタCの値をレジス
タAに代入して第7ステップに移行する。 第5ステップ:レジスタCの値が正である場合には、レ
ジスタAにレジスタCの値を代入する。 第6ステップ:レジスタjの値が0より大きい場合に
は、レジスタBの値を1/2にし、レジスタjの値を1
デクリメントして、第2ステップに移行する。 第7ステップ:レジスタAの値をレジスタPに代入し、
終了処理をする。 - 【請求項5】 各桁の値が−(2^(k−1)+1)以
上、2^(k−1)以下に制限されたn桁の圧縮2^k
進SD数Q、C、及び各桁が正の2^k進SD数Fに対
して、P=(Q×C)modFなる乗算剰余演算を行う
乗算剰余演算装置であって、レジスタP、レジスタG、
レジスタR、レジスタj、及びレジスタCを備え、Cj
をCのj桁目の値とし、下記の第1ステップから第6ス
テップを順次実行することによりレジスタPの値を解と
する。 第1ステップ:レジスタPに0を代入し、レジスタjに
nを代入する。 第2ステップ:レジスタjにj−1を代入する。 第3ステップ:Cjの値が0以上であるときには、Cj
の値とQとの積にFを法とする剰余演算結果をレジスタ
Gに代入し、Cjの値が負であるときには、Cjの値の
絶対値とQとの積にFを法とする剰余演算結果に(−
1)を乗じた値をレジスタGに代入する。 第4ステップ:レジスタPの値に(2^k)を乗じ、こ
の値にレジスタGの値を加算した値をレジスタRに代入
する。 第5ステップ:レジスタRの値が負であるときには、レ
ジスタRの値とFとを加算した値をレジスタPに代入
し、レジスタRの値が0以上であるときには、レジスタ
Rの値にFを法とする剰余演算結果をレジスタPに代入
する。 第6ステップ:レジスタjの値が正であるときには、第
2ステップに移行する。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001374904A JP2003177669A (ja) | 2001-12-07 | 2001-12-07 | 冪乗剰余演算装置及び冪乗剰余演算方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001374904A JP2003177669A (ja) | 2001-12-07 | 2001-12-07 | 冪乗剰余演算装置及び冪乗剰余演算方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2003177669A true JP2003177669A (ja) | 2003-06-27 |
Family
ID=19183380
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001374904A Pending JP2003177669A (ja) | 2001-12-07 | 2001-12-07 | 冪乗剰余演算装置及び冪乗剰余演算方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2003177669A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010171622A (ja) * | 2009-01-21 | 2010-08-05 | Canon Inc | 画像拡大方法、画像拡大装置および画像形成装置 |
-
2001
- 2001-12-07 JP JP2001374904A patent/JP2003177669A/ja active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010171622A (ja) * | 2009-01-21 | 2010-08-05 | Canon Inc | 画像拡大方法、画像拡大装置および画像形成装置 |
US8379268B2 (en) | 2009-01-21 | 2013-02-19 | Canon Kabushiki Kaisha | Image enlargement method, image enlargement apparatus, and image forming apparatus |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6795553B1 (en) | Method and apparatus for modular inversion for information security and recording medium with a program for implementing the method | |
US8504602B2 (en) | Modular multiplication processing apparatus | |
US8209369B2 (en) | Signal processing apparatus and method for performing modular multiplication in an electronic device, and smart card using the same | |
JP7067633B2 (ja) | 秘密右シフト演算システム、秘密除算システム、それらの方法、秘密計算装置、およびプログラム | |
US7024560B2 (en) | Power-residue calculating unit using Montgomery algorithm | |
CN113467750A (zh) | 用于基数为4的srt算法的大整数位宽除法电路及方法 | |
JP4351987B2 (ja) | モンゴメリ変換装置、演算装置、icカード、暗号装置、復号装置及びプログラム | |
JP3542278B2 (ja) | モンゴメリ・リダクション装置及び記録媒体 | |
KR100508092B1 (ko) | 저전력 모듈로 곱셈을 수행하는 연산장치 | |
JP4690819B2 (ja) | 楕円曲線暗号におけるスカラー倍計算方法およびスカラー倍計算装置 | |
JP2004258141A (ja) | モンゴメリ乗算剰余の多倍長演算のための演算装置 | |
JP4423900B2 (ja) | 楕円曲線暗号におけるスカラー倍計算方法と、その装置およびそのプログラム | |
US7113593B2 (en) | Recursive cryptoaccelerator and recursive VHDL design of logic circuits | |
CN113467752B (zh) | 用于隐私计算的除法运算装置、数据处理系统及方法 | |
JP2003177669A (ja) | 冪乗剰余演算装置及び冪乗剰余演算方法 | |
CN115270155A (zh) | 一种获取大数拓展最大公约数的方法及硬件架构 | |
JP4692022B2 (ja) | 楕円曲線暗号におけるスカラー倍計算装置、及び、そのプログラム | |
JP5179933B2 (ja) | データ処理装置 | |
KR102348797B1 (ko) | Rsa 암호화 시스템의 rsa 회로 모듈 | |
JP2005316038A (ja) | 楕円曲線暗号におけるスカラー倍計算方法と、その装置およびプログラム | |
CN111201559B (zh) | 置换装置、置换方法、以及记录介质 | |
Rodriguez-Henriquez | New algorithms and architectures for arithmetic in GF (2 (m)) suitable for elliptic curve cryptography | |
CN114444707A (zh) | 数据处理方法、装置、设备及存储介质 | |
JP2007212768A (ja) | 楕円曲線暗号における事前計算テーブル作成装置 | |
CN114444706A (zh) | 数据处理方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050915 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20060123 |