JP2005250481A - 多重精度を支援する拡張型モンゴメリモジュラ掛け算器 - Google Patents

多重精度を支援する拡張型モンゴメリモジュラ掛け算器 Download PDF

Info

Publication number
JP2005250481A
JP2005250481A JP2005056659A JP2005056659A JP2005250481A JP 2005250481 A JP2005250481 A JP 2005250481A JP 2005056659 A JP2005056659 A JP 2005056659A JP 2005056659 A JP2005056659 A JP 2005056659A JP 2005250481 A JP2005250481 A JP 2005250481A
Authority
JP
Japan
Prior art keywords
modulus
bit
multiplier
multiplicand
register
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.)
Granted
Application number
JP2005056659A
Other languages
English (en)
Other versions
JP4870932B2 (ja
Inventor
Hee-Kwan Son
▲ヒー▼寛 孫
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Samsung Electronics Co Ltd
Original Assignee
Samsung Electronics Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Samsung Electronics Co Ltd filed Critical Samsung Electronics Co Ltd
Publication of JP2005250481A publication Critical patent/JP2005250481A/ja
Application granted granted Critical
Publication of JP4870932B2 publication Critical patent/JP4870932B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/60Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
    • G06F7/72Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic
    • G06F7/728Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic using Montgomery reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • G06F7/533Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even
    • G06F7/5334Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even by using multiple bit scanning, i.e. by decoding groups of successive multiplier bits in order to select an appropriate precalculated multiple of the multiplicand as a partial product
    • G06F7/5336Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even by using multiple bit scanning, i.e. by decoding groups of successive multiplier bits in order to select an appropriate precalculated multiple of the multiplicand as a partial product overlapped, i.e. with successive bitgroups sharing one or more bits being recoded into signed digit representation, e.g. using the Modified Booth Algorithm

Landscapes

  • Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Complex Calculations (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

【課題】 多重精度を支援する拡張型モンゴメリモジュラ掛け算器を提供する。
【解決手段】 本発明の掛け算器は、−M、0、M、2Mと以前行の結果SIのnビットモジュラス数のうちの一つをモジュラス積に選択するモジュラス積発生器と、−2A、−A、0、+A、および+2Aの被乗数のうちの一つを部分積の被乗数で選択する部分積発生器と、選択された前記モジュラス積と前記部分積とを累算する累算器とを含むことを特徴とする。
【選択図】図8

Description

本発明はデータ保安のための暗号化(cryptography)システムに係り、特に暗号化システムでのモジュラ掛け算演算のための装置および方法に関する。
コンピュータネットワーク、または有無線通信を介して各種のデータを取り交わす情報通信環境では、データの安全性を維持するための暗号化システムの重要性が大きくなっている。特に、電子決済または認証システムでは符号化(encrytion)および復号化(decryption)技術を適用して安全性を確保することが必須である。暗号化技術は大きく秘密キー(対称キーまたは共通キー、secret key、symmetric key、private key、common key)方式と公開キー(非対称キー、public key、asymmetric key)方式とに分類することができる。
秘密キー方式は米国商務省の国立標準国(NBS)によるDES(Data Encryption System)暗号アルゴリズムが代表的な例であり、その外にUSSIのGOST(GOvernment STandard)、スイスのIDEA(International Data Encryption Algorithm)などがある。秘密キー暗号化方式では情報交換当事者間で同一の秘密キーを共有しなければならないので、別途の安全なチャンネルが必要であり、特に多数人との情報交換時には、一人の使用者が多数の秘密キーチャンネルを維持および管理しなければならないという短所がある。
一方、公開キー暗号化方式は暗号化するキーと復号化するキーとが互いに異なるので、いずれか一つが分かってもそれに対応するキーが分かりにくくするシステムである。公開キー暗号化方式では、一つの秘密キーと他の一つの公開キーとを使用して情報をスクランブル(scramble)/逆スクランブル(descramble)する。公開キー暗号化方式は、キーを共有するための別途のチャンネルは必要ではなく、キー管理が容易で秘密キー方式に比べて安全性は向上するが、二つの互いに異なるキーを生成して、これを介して情報を復元するための数学的な演算過程が複雑で高速処理に制限があることが知られている。
モンゴメリアルゴリズムはハードウェア実現が難しい任意の数に対するモジュラ演算を単純に掛け算および寄せ算演算とシフト(shift)演算とに変換して解決するので、公開キー暗号化アルゴリズムをハードウェアで実現する方式や、またはソフトウェアで実現する方式のいずれでも非常に有用である。モンゴメリアルゴリズムでは掛け算演算の前後に被演算子変換(operand transformation)過程が必要である。したがって、単一掛け算演算では他の一般的なモジュラ掛け算器に比べて処理性能が遅いことがあるが、RSAアルゴリズムのように同一のモジュラに対して繰り返し的な掛け算演算を行う応用領域では毎度の被演算子変換作業が不要であるので、他のモジュラ掛け算器に比べて高速で暗号化作業を処理することができる。
掛け算演算の速度を高める方法のうちの一つが基数(radix)の値をふやすことである。基数値が増加すれば、掛け算演算過程で実行される累算(accumulation)の繰り返しの回数がそのだけ減る。しかし、基数値が増加すれば、一回の累算のために必要な過程がそのだけ複雑になり、一回の累算に消耗される時間がそれだけ増加する。例えば、基数2演算アルゴリズムはハードウェアで実現することが容易であるが、基数4演算アルゴリズムに比べて累算の繰り返しの回数が2倍になる。しかし、基数4演算方式は基本的に基数2演算アルゴリズムに比べてハードウェア実現が複雑で各繰り返しの実行の遅延時間が増加するという弱点がある。
したがって、ハードウェアのサイズを増加させず、より複雑にせず、かつモジュラ演算の速度を増加させることができる適正な設計が重要である。
一方、コンピュータの演算能力が向上することによって、暗号化システムの安全度を保障するために暗号化キーの長さを長くしなければならない。そして、応用分野に従って要求される暗号化キーの長さを異ならせることもできる。したがって、キーの長さが長くても、同一の応用で続いて使用することができ、また多様な暗号化キーの長さにも対応することができるハードウェアが要求される。
したがって、本発明の基数4論理演算を基づいて多重精度(multiple preciSIon)を支援する拡張可能型モンゴメリ掛け算器を提供することにある。
本発明の一特徴によると、モンゴメリ掛け算器は−M、0、M、2Mと以前行の結果 SIのnビットモジュラス数のうちの一つをモジュラス積に選択するモジュラス積発生器と −2A、−A、0、+A、および+2Aの被乗数のうちの一つを部分積の被乗数に選択する部分積発生器と、選択された前記モジュラス積と前記部分積とを累算する累算器とを含む。例えば、モンゴメリ演算装置はメモリと被乗数A、乗数Bおよびモジュラス数Mをメモリに貯蔵するホストと前記モンゴメリ掛け算器とを含む。前記モンゴメリ掛け算器はホストの制御に応じて貯蔵された被乗数、乗数およびモジュラス数でモンゴメリ掛け算演算を実行し、モンゴメリ掛け算演算から得られた演算結果を前記メモリに貯蔵する。
本発明の他の特徴によると、累算器はキャリ加算モードで動作し、各々がモジュラス積、部分積、第1値および第2値を受け入れ、対応する次の和、対応する次のキャリおよび対応する次の下位値を発生する複数のコンプレッサと前記複数のコンプレッサの各々から前記対応する次の和を受け入れ、対応する更新された現在和を出力する和レジスタと前記複数のコンプレッサから前記対応する次のキャリを受け入れ、対応する更新された現在キャリを出力するキャリレジスタと、前記複数のコンプレッサから前記対応する次の下位値を受け入れ、対応する更新された現在下位値を出力する下位値レジスタとを含む。
本発明の他の特徴によると、演算装置はn/c部分で構成されたnビット被乗数とn/c部分で構成されたnビット乗数、n/c部分で構成されたnビットモジュラス数、乗数の派生された部分とモジュラス数の派生された部分とに対する(n/c)*(n/c)回の単位掛け算演算を順次に実行する掛け算器とを含む。ここで、n>cであり、nとcはプラスの整数である。
本発明の他の特徴によると、モンゴメリ掛け算器は多数の選択可能なnビットモジュラス数のうちの現在入力された派生された部分から形成された与えられたモジュラス数Mからモジュラス積を選択するモジュラス積発生器と多数の選択可能なnビット被乗数のうちの現在入力された派生された部分から形成された与えられた被乗数Aから部分積を選択する部分積発生器と、選択された前記モジュラス積と掛け算結果で生成された部分積とを累算する累算器とを含む。例えば、前記モンゴメリ掛け算器はメモリとホストとを含む演算装置の一部にすることもできる。
本発明の他の特徴によると、モンゴメリ掛け算器はモンゴメリ掛け算演算を実行し、そこに入力制御信号の論理状態に基づいてノーマル掛け算演算が適用される。
本発明によると、限定されたサイズのモンゴメリ掛け算器を利用して多重精度の掛け算演算を実行することができる。さらに、本発明の掛け算器は強制モジュラス積制御信号を利用してモンゴメリ掛け算だけではなく、ノーマル掛け算演算を実行することができ、強制部分積制御信号を利用してモンゴメリレジデュー数字をノーマルレジデュー数字に転換する作業を実行することができる。
本発明の実施形態では、基数4論理演算を基づいてモンゴメリ掛け算アルゴリズムを適用し、これを基数4インタリブモンゴメリ掛け算アルゴリズム(Radix−4 Interleaved Montgomery Multiplication Algorithm)といい、R4IMMと略称する。
本発明の実施形態に示す掛け算装置の論理演算体系は公開キー方式の暗号化アルゴリズムを適用するコンピュータシステムまたは通信網に適用することができ、また携帯可能な集積回路カード(またはスマートカード)に内蔵して運用することができる。
本発明の実施形態を説明する前に、本発明に適用されるモジュラ掛け算アルゴリズムR4IMMで参照されるパラメータ(parameters)を次のように定義する。
Mはモジュラス(mudulus)として2より大きいプラスの整数(integer)として奇数値(例えば、3、7など)を有する。
M’は条件式(−M*M’)mod4=1を満足する整数である。
Aは、被乗数(multiplicand)として、0≦A<Mの条件を満足する整数である。
Bは、乗数(multiplier)として、0≦B<Mの条件を満足する整数である。ここで、
Figure 2005250481
∈{0、1、2、3}である。 bは2ビットである。
oはオペランド(operand) すなわち、被乗数、乗数およびモジュラスの各々の長さである。cは単位掛け算が実行されるチャンク(chunk)の長さとして、ハードウェアの内部に存在するデータパス(data path)の幅である。wはメモリデータバス幅であるワード(word)の長さであり、dは基数(radix)すなわち、デジット(digit)の長さである。データバス幅が32ビットであるメモリが使用される場合、ワードの長さwは32であり、基数4掛け算器でデジットの長さdは2になる。
本発明に適用されるR4IMM基本アルゴリズムは次のとおりである。
:=0
for I:=0 to (n/2−1)
:=(((S+bA)mod 4)*M')mod 4
I+1:=(S+bA+qM)/4
endfor
if(S≧M)S:=S−M
R4IMM基本アルゴリズムで、Iはデジットインデックスまたは演算の繰り返しの回数を示す。このアルゴリズムで商qは‘SI+bA+qMの下位2ビットが“00”になれるように足すMの個数'を示す。残り数体系(residue number system、RNS)でどんな数にでも係数Mの整数倍を足した数は元々の数と同様であるので、係数Mの整数倍であるモジュラス積qM(以下、MM、 multiple of modulus)を足した数は元々の数と同様である。また、S+bA+qMの下位2ビットを“00”で作った後に、基数値4で割ると(すなわち、2ビットずつ右側にシフトする)有效桁の数字はそのまま保存されるので情報が遺失されない。
このようなR4IMMアルゴリズムをハードウェア的に実現するためには、部分積PPとモジュラス積MMを求めなければならない。単位乗数bと商qが2ビットであるので、部分積PPとモジュラス積MMは次のように四つの場合の可能値を各々有するように設定することができるであろう(ここで、b∈{0、1、2、3}であり、 q∈{0、1、2、3}とする)。
Figure 2005250481
しかし、数2のように部分積PPとモジュラス積MMとを設定するようになれば、値3Aと3Mとを計算するとき、AまたはMを1ビットシフトした値と元々の値との和を求めなければならない(2A+A、2M+M)。これをハードウェアに実現するためには、このような値を計算する独立した加算器(adder)を使用するか、またはこの値をあらかじめ計算してメモリなどに貯蔵しておいて、必要時に参照する方法を使用しなければならない。そのような方法はハードウェアの無駄使いをもたらし、また、その値3A、3Mを求める時間(あらかじめ計算しておくか、リアルタイムに計算する)を追加的に考慮してハードウェアを設計しなければならないので、性能低下の要因になる可能性がある。
本発明では二つの再符号化(recoding)方法を使用して部分積PPとモジュラス積MMとを求めることによりハードウェア負担を減らし、同時に処理性能を高めようとする。
また、本発明の掛け算器は一度にcビット掛け算演算を実行し、繰り返された演算を通じてn(nはcの整数倍)ビット掛け算演算を実行することができる。本発明による多重精度R4IMMアルゴリズムは次のとおりである。
for row_idx=0 to row_idx=(n/c−1)
begin
for col_idx=0 to col_idx=(o/c−1)
begin
do_ini()、
for wrd_idx=0 to wrd_idx=(c/w−1)
begin
for dgt_idx=0 to dgt_idx=(w/d−1)
begin
do_acc()、
endfor
endfor
endfor
for wrd_idx=0 to wrd_idx=(c/w−1)
begin
do_cpa()、
endfor
endfor
このアルゴリズムでdo_ini()関数は以前行(row)の演算結果値Sで現在列(column)のような位置のチャンクを累算器内の現在値に累積する関数である。すなわち、列ループ(column loop)を始めるとき、累算器の初期値を変更する。このような過程は本発明のモンゴメリ掛け算器が多重精度を支援するので必要なのである。do_acc()関数はサイクルごとに発生される部分積PPとモジュラス積MMという二つのベクタを累算器で累積する過程である。そして、本発明の累算器は基本的にキャリ貯蔵寄せ算器CSA構造になっているので、寄せ算の結果値がキャリベクタと和ベクタ、および本発明の独特な形態である下位値ベクタなどの3種のベクタで分離して示し、したがって、累算器の内部に存在するキャリと和、および下位値を貯蔵するためのレジスタに各々貯蔵される。do_cpa()関数は各行の最後の段階で累算結果であるキャリ値と和値、および下位値をCPA(carry−porpagation adder)を使用して足す関数である。
図1は4倍精度(quadruple precision)演算を実行するための演算マトリックス構造を例示的に示す。
4倍精度演算を実行する場合、被乗数A、乗数B、およびモジュラスMは各々4個のチャンクで分割され、これらは各々A={A}、B={B}、およびモジュラス M={M}で表現することができる。チャンクの長さ、すなわちcビット長さ掛け算器でc*4ビット長さ掛け算演算を実行するためにはA*B、A*B、A*B、A*B…などのようなチャンク単位演算を順次に実行し、各々の演算結果を貯蔵して最終掛け算演算結果を得ることができる。本明細書で、A、A、AおよびA、そしてB、B、BおよびBは各々のチャンクcの長さであり、A*B、A*B、A*B、A*B…演算の各々は単位掛け算演算(またはボックス(box))と呼ぶ。被乗数Aと乗数Bとの単位掛け算演算の各々はCSA(Carry Save Add)方式の累算器を介して行われ、各行の最後の単位掛け算演算が完了した後、累算器内の三つの結果値(キャリ、和および下位値)を足して単一数字表現に転換するためのCPA(Carry Propagate Add)実行段階がある。図2は図1に示した4倍精度演算が実行される単位掛け算演算手順を示す。
図3は本発明の望ましい実施形態による暗号化システムを概略的に示すブロック図である。暗号化システム1はモンゴメリ掛け算器10、ホスト20、メモリアクセスアービタ30、およびメモリ40を含む。ホスト20はモンゴメリ掛け算器10と、入/出力装置のような周辺装置との通信のための周辺装置インターフェース21と、メモリ40との通信のためのメモリインターフェース22とを含む。
掛け算器10はホストとの通信のためのホストインターフェース11、およびメモリ40との通信のためのメモリインターフェース12を含む。掛け算器10、およびホスト20とメモリ40との間の通信はメモリアクセスアービタ30によって仲裁される。掛け算器10のホストインターフェース11は制御および状態お知らせ用レジスタ(Special Function Register、SFR)13を含む。掛け算器10は以下説明される制御信号FORCE_RI[2:0]、SEL_RDO[1:0]、FORCE_PP[1:0]、FORCE_MM[1:0]、USE_X_REG、SEL_CPA_IN[2:0]、IS_1ST_CPA_WORD、IS_ODD_PREC、UDP_SIGN_S、UPD_MS1B_S、SFT_BI_PISO、SFT_QI_PISO、STO_BR_ROW、USE_BR_ROW、SHIFT_ACCなどを発生するコントローラをさらに含む。
ホスト20はオペランド(被乗数A、乗数B、およびモジュラスM)をメモリ40に貯蔵し、ホストインターフェース11内のSFR13に動作モードと動作開始指示とを記録して演算実行を指示する。掛け算器10は演算の結果値Sをホスト20が指定したメモリ40の所定領域に貯蔵した後、演算が終わったことをホストインターフェース11のSFR13に記録することによってホストに知らせる。また、SFR13には符号ビットがさらに貯蔵される。SFR13に貯蔵される符号ビットは以下詳細に説明される。
メモリ40は一定のサイズのセグメントに分割されており、入力値と結果値とが貯蔵されるセグメントは各セグメントに割り当てられたインデックスを利用してホストが指定する。したがって、一度の掛け算演算が終わった後の結果を次の掛け算演算の入力値として使用すれば、RSAのような共有キー方式暗号化システムで使用される冪法演算であるデータの移動なしに簡単に入力値と出力値のためのセグメントのインデックスだけ変えた後に、次の掛け算演算を実行させればよいので、性能面で非常に有利である。
図4は本発明の望ましい実施形態によるモンゴメリ掛け算器データパス(Montgomery Multiplier data path)を示しており、図5は図3に示したモンゴメリ掛け算器のメモリインターフェース12を示す。メモリインターフェース12はマルチプレクサ12_1、12_3とレジスタ12_2、12_4とを含む。マルチプレクサ12_1は制御信号FORCE_RI[2:0]に応答して入力信号のうちの一つを出力する。制御信号FORCE_RI[2:0]の状態に応じてマルチプレクサ12_1が選択する信号が図6に整理されている。マルチプレクサ12_1とレジスタ12_2とを介して出力されるデータ信号REG_DI[31:0]は以下説明されるモンゴメリ掛け算器100に提供される。マルチプレクサ12_3は制御信号SEL_RDO[1:0]に応答して入力信号のうちの一つを出力する。制御信号SEL_RDO[1:0]の状態に応じてマルチプレクサ12_3が選択する信号が図7に整理されている。マルチプレクサ12_3とレジスタ12_4とを介して出力されるデータ信号RAM_DO[31:0]はメモリ40に貯蔵される。
図8はモンゴメリ掛け算器データパス100の全体的な構成を示す。
図8のモンゴメリ掛け算器データパス100はモジュラスレジスタMY_REG、102およびMX_REG、103)に貯蔵されたモジュラスM、被乗数レジスタ(AY_REG、104およびAX_REG、105)に貯蔵された被乗数A、乗数レジスタ(B_REG、106)に貯蔵された乗数B、以前結果値レジスタ(SI_REG、101)に貯蔵された以前行結果値SI、モンゴメリリコーダ(Montgomery recoder、110)、ブースリコーダ(Booth recoder、140)、モジュラス積(multiple modulus、MM)を発生するマルチプルモジュラス発生器120、部分積(partial product、PP)を発生する部分積発生器130、モンゴメリ掛け算演算を実行する累算器150、および累算器内の三つの結果値(キャリ、和、下位値)を足すためのCPAブロック160を含む。
レジスタ101−105に貯蔵されたオペランドの各々の長さは(c+w/2)+1である。このレジスタはPIPO(Parallel Input parallel)レジスタで構成され、符号を入れる1ビットのフリップフロップと2*(c/w)+1個のサブレジスタとで分割されて制御される。各サブレジスタの長さはw/2である。レジスタ105の詳細な構成を図9に示す。
5個のレジスタ101−105は全部同一の構造で構成されている。図9に示したレジスタ105はc=256であり、w=32である場合を例として使用し、この場合にレジスタは17個のサブレジスタ200−216と符号レジスタ220とを含む。c=256であり、w=32であるとき、サブレジスタ200−216の各々の大きさは16ビット(half−word)であり、レジスタ220の大きさは1ビットである。偶数番目のサブレジスタ200、202、204、…、216はメモリインターフェース12から入力される32ビットデータのうちの下位16ビットREG_DI[15:0]が入力され、奇数番目のサブレジスタ201、203、205、…、215はメモリインターフェース12から入力される32ビットデータのうちの上位16ビットREG_DI[31:16]が入力される。
元々のオペランドのビット長さnはチャンクのビット長さcの整数倍であるが、ブースリコーティングとモングコメリリコーティングとを適用することによってオペランドに符号が追加される。したがって、モンゴメリ掛け算器データパス100の内部で使用するオペランドのビット長さはc'=c+kであり、kの最小値は1である。ここで使用されたc'を拡張チャンクのビット長さという。しかし、入力データをメモリから読み出されねばならず、データバス幅w=32である場合、データ伝送単位がワード(32ビット)、ハーフワード(16ビット)、またはクオーターワード(8ビット)であるので、kの値として可能なのは各々w、w/2またはw/4である。kが小さいほど各単位掛け算演算(図1のCSA演算)内で実行しなければならない繰り返し(interation)回数が少なくなり、ハードウェアの大きさも少なくなって性能、面積、電力などのすべての面で有利である。しかし、k=w/2の場合よりk=wの場合に、そして k=w/4よりk=w/2である場合にハードウェアの構造が単純になる。kの値はw、w/2またはw/4のうちのいずれでも可能であり、特別に本発明ではk=w/2である場合を使用して説明する。したがって、チャンクのビット長さc=256、w=32、k=32/2=16であるとき、c'=272である。上述のSFR13に貯蔵された符号ビットSIGN_Sはメモリインターフェース12を介して符号レジスタ220に貯蔵される。
各サブレジスタはゲート−クロック(gated−clock)、またはロード−イネーブル(load−enable)制御信号によって選択的にデータ積載(data loading)が行われる。レジスタ105から出力される被乗数AX_PIPO_REG[272:0]は273ビットである。レジスタ101−105の構造は全部同一であるので、残りのレジスタ101−104に対する説明は省略する。レジスタ101−105に入力されるデータはREG_DI[31:0]であり、これはメモリインターフェース12から入力され、メモリインターフェース12がメモリから入力されるワード長さデータRAM_DI[31:0]と演算子の符号ビットSIGN_A、SIGN_B、SIGN_S、および以前行結果値の二番目の最上位ビットMS1B_Sなどを組み合わせて作ったデータであり、どの瞬間に、どんな組合を使用してREG_DI[31:0]を作るかは制御信号FORCE_RI[2:0]によって決められる。
以前結果値レジスタ101は以前行の結果値Sを現在行の計算に反映するために使用される。被乗数AとモジュラスMとを貯蔵するためのレジスタが各々2個ずつ使用された理由は処理速度を向上させるためである。すなわち、被乗数Aを貯蔵している二つのレジスタ104、105のうちの一つはモンゴメリ掛け算器データパス100で現在単位掛け算演算中である被乗数を貯蔵しており、他の一つは次の単位掛け算演算で使用される被乗数を貯蔵する。同様に、モジュラスMを貯蔵している二つのレジスタ102、103のうちの一つは掛け算器データパス100で現在単位掛け算演算中であるモジュラスを貯蔵しており、他の一つは次の単位掛け算演算に使用されるモジュラスを貯蔵する。したがって、現在の単位掛け算演算が完了してから、メモリから被乗数およびモジュラスを読み出すために必要な遅延なしに次の単位掛け算演算をすぐ開始する事ができる。
掛け算器10は繰り返し的なプロセスでモンゴメリ掛け算の解答を捜す。モンゴメリリコーダ110およびモジュラス積発生器120はモジュラス積MMを選択するために使用される。モジュラス積MMを選択するために、モンゴメリリコーダ110は累算器150から繰り返し的なデータを受け入れる。本発明の実施形態で繰り返し的なデータSPP[1:0]は累算器150に貯蔵された和ACC_S_REGI[1:0]とキャリーACC_C_REGI[1:0]、下位値ACC_L_REGI[2:0]、部分積PP[1:0]、および累算器帰還入力のシフト制御信号SHIFT_ACCを根拠とする。本発明の実施形態による上述の説明において、ビットの大きさは限定されない。SPPは2ビット以上でありうる。この場合、本発明の他の構成は変更されるであろう。
図10はモジュラス積MMを発生するためのモジュラス積発生器を詳細に示す。モジュラス積発生器120はマルチプレクサ301−303とAND ゲート304とを含む。マルチプレクサ301はレジスタ選択信号USE_X_REGに応答してレジスタ102、103からのモジュラスMY_PIPO_REG[272:0]、MX_PIPO_REG[272:0]のうちの一つをM[272:0]として出力する。
マルチプレクサ303はモンゴメリリコーダ110からのモジュラス積選択信号SEL_MM[1:0]に応答して以前値SI_PIPO_REG[272:0]、M、2M および−Mのうちの一つを選択して出力する。2Mはマルチプレクサ302から出力されるMを1ビット左側にシフトし、最下位ビットに‘0’を挿入して得ることができる。そして−MはMマルチプレクサ302から出力されるMをビット反転(bit−inversion)して得ることができる。
ANDゲート304はモンゴメリリコーダ110からのモジュラス積イネーブル信号EN_MMとマルチプレクサ303からの出力とを結合してモジュラス積MMを出力する。モジュラス積MMは(c + w/2)+2ビットである。c=256、w=16であるとき、MMは266ビットである。モジュラス積イネーブル信号EN_MMはモジュラス積MMを0とするために使用される。モジュラス積MMは累算器150に入力される。
図11は本発明の望ましい実施形態によるモンゴメリリコーダ110のコーディングスキームを示す。図11にはモンゴメリリコーダ110に入力される三つの入力M[1]およびSPP[1:0]を示しているが、本発明は入力および出力を多様に変更することができる。
上述のように、典型的な基数4システムの場合に、モジュラス積MMは0、M、2Mおよび3Mである。3Mを求めるためには1Mに2Mを足すための付加的な加算器またはメモリ素子が必要である。付加的な加算器および/またはメモリ素子はハードウェアの大きさおよび/または計算遅延などをもたらし、これは計算速度および電力消耗に影響を及ぼす。図11のコーディングスキームはMMの値を得るために付加的な加算器またはメモリ素子なしにビット反転およびビットシフトを利用する。モンゴメリリコーダ110はモジュラスMの二番目の最下位ビットM[1]とSPPの最下位2ビットSPP[1:0]とが入力される。モンゴメリリコーダ110はモジュラス積選択信号SEL_MM[1:0]、モジュラス積イネーブル信号EM_MM、および符号反転を知らせる(すなわち、−Mが選択されたことを知らせる)信号NEG_MMを出力する。
減少したハードウェアの大きさ、増加した計算速度、および電力減少のための類似の方法を図13および図14に示したような部分積発生器130とブースリコーダ140に使用することができる。上述の掛け算器データパス100はモジュラス積MMおよび部分積PPを累算器150に入力して繰り返し的なプロセスにモジュラ掛け算を実行する。
図12は乗数Bを貯蔵するレジスタB_REG、106を詳細に示す。レジスタ106はメモリ40から入力される乗数Bを貯蔵し、累算器初期値修正サイクルを除いた残りのサイクルごとに乗数Bの最下位2ビット(B1とB0)と直前サイクルの最下位2ビットのうちの上位ビットBRを右側に一回シフトして出力する。レジスタ106はシフトレジスタ401、マルチプレクサ402、405、およびフリップフロップ403、404を含む。
シフトレジスタ401はワード長さ(w=32)と同一の大きさを有し、シフト選択信号SFT_BI_PISOに応答して動作する。シフトレジスタ401はシフト選択信号SFT_BI_PISOが論理‘0’であるとき、乗数データの一ワード(word)をメモリインターフェース12からREG_DI[31:0]を介して新しく受け入れ、シフト選択信号SFT_BI_PISOが論理‘1’であるとき、2ビットずつ右側にシフトする。シフトレジスタ401の最下位2ビットB1、B0はブースリコーダ140に出力される。
信号STO_BR_ROWは行の最後の単位掛け算演算の最後のサイクルに使用されたB1を貯蔵するように制御する信号である。マルチプレクサ402は信号STO_BR_ROWに応答してフリップフロップ403に貯蔵された値、またはシフトレジスタ202の二番目の最下位ビットB1を選択的に出力する。フリップフロップ403はマルチプレクサ402の出力を貯蔵し、フリップフロップ404はシフトレジスタ401の二番目の最下位ビットB1を貯蔵する。信号USE_BR_ROWは各単位掛け算演算で二番目のサイクルすなわち、累算器初期値を修正した後、次のサイクルでフリップフロップ403に貯蔵された値BR_ROWが値BRとして選択されるように制御する。ビットBRはブースリコーダ140に提供される。
ブースリコーダ140および部分積選択器130は累算器150に提供される部分積 PPの値0、A、2Aおよび2Aを選択するために使用される。図8に示したようにブースリコーダ140はレジスタ106から乗数B1、B0およびBRが入力され、部分積選択信号SEL_PP[1:0]、部分積イネーブル信号EN_PPおよび部分積反転表示信号NEG_PPを部分積発生器130に入力する。
図13は部分積発生器130の回路構成例を示す。
部分積発生器130はマルチプレクサ501−503とANDゲート504とを含む。マルチプレクサ501はレジスタ選択信号USE_X_REGに応答してレジスタ104、105からの被乗数AY_PIPO_REG[272:0]、AX_PIPO_REG[272:0]のうちの一つをA[272:0]として出力する。マルチプレクサ501はレジスタ選択信号USE_X_REGに応答してレジスタ104、105からの被乗数AY_PIPO_REG[272:0]、AX_PIPO_REG[272:0]のうちの一つをA[272:0]として出力する。
マルチプレクサ503はブースリコーダ140からのモジュラス積選択信号SEL_PP[1:0]に応答して2A、A、2A およびAのうちの一つを選択して出力する。2Aはマルチプレクサ501から出力されるAを1ビット左側にシフトし、最下位ビットに‘1’を挿入して得る。2Aはマルチプレクサ502から出力されるAを1ビット左側にシフトし、最下位ビットに‘0’を挿入して得る。
ANDゲート504はブースリコーダ140からの部分積イネーブル信号EN_PPとマルチプレクサ503からの出力を結合して部分積PPを出力する。部分積イネーブル信号EN_PPは部分積PPを0とするために使用される。部分積PPは(c + w/2)+2ビットである。c=256、w=32であるとき、PPは274ビットである。部分積PPは累算器150に入力される。
図14は本発明の望ましい実施形態によるブースリコーダ140のコーディングスキームを示す。図14はブースリコーダ140に入力される三つの入力B1、B0およびBRを示すが、本発明は入力および出力を多様に変更することができる。
再び図8を参照すれば、モジュラス積発生器120からのモジュラス積MM[273:0]と部分積発生器130からの部分積 PP[273:0]とは累算器150に出力される。
本発明の望ましい実施形態による累算器150を図15に示す。累算器150は直列に連結されたc'(=c + w/2 + 5)個の4−2コンプレッサ610−617で構成される。上述の図10および図13で説明したように、モジュラス積MMと部分積PPは各々(c + w/2) +2ビットである。
累算器150は演算結果を和レジスタ620、キャリレジスタ630、および下位値レジスタ650で割って貯蔵する。和レジスタ620は(c + w/2)+3個のフリップフロップドルで構成されており、キャリレジスタ630は(c + w/2)+4個のフリップフロップで構成されており、下位値レジスタ650は三つのフリップフロップで構成されている。和レジスタ620とキャリレジスタ630の出力のうちの各々下位(c + 1)個のビットACC_S_REG[c:0]とACC_C_REG[c:0]と下位値レジスタ650の出力のうちの最上位ビットACC_L_REG[2]とは図8に示したCPAブロック160に入力される。また、下位レジスタ650の下位の二つのビットACC_L_REG[1:0]は結果値出力用シフトレジスタ180であるSO_SIPO_REG[31:0]に入力される。
この実施形態において、累算器150への入力はモジュラス積MM、部分積PP、モジュラス積反転信号NEG_MM、部分積反転信号NEG_PP、および帰還入力のシフト制御信号SHIFT_ACCである。本発明の望ましい実施形態による累算器150はCSA(Carry Save Add) 構造で設計されてキャリ伝播遅延時間(carry propagation delay time)による性能低下を防止する。また、コンプレッサ610−617は各々4−2コンプレッサで実現される。図18は4−2 コンプレッサの一例を示す。コンプレッサ612は複数の入力を有する。コンプレッサの入力値はループインデックスIを有し、出力値はループインデックスI+1を有する。
本発明の実施形態において、コンプレッサ612は二つの全加算器701、702を含む。第1全加算器701にはC、S およびPPが入力され、第1全加算器キャリCOおよび第1全加算器和SOが出力される。第1全加算器キャリCOは出力キャリCNに出力されて、次の高いポジションコンプレッサk+1の入力CPになる。第2全加算器702には第1全加算器の和SOとモジュラス積MM、および1ビット低いポジションコンプレッサからのキャリCPが入力されて第2全加算器キャリCOおよび第2全加算器和SOが出力される。第2全加算器キャリCOは次のキャリビット値CI+1として出力されて、1ビット低いポジションコンプレッサに入力されるキャリCとして使用される。第2全加算器和SOは2ビット低いポジションコンプレッサに入力される和Sとして使用される。最下位ポジションコンプレッサ610にはキャリCP入力として部分積反転信号NEG_PPが入力される。
4−2コンプレッサ612の入出力の間の関係は数3のとおりである。
Figure 2005250481
再び図15を参照すれば、全加算器640には一番目のコンプレッサ610から出力される和S[0]、モジュラス積の最下位ビットMM[0]、およびモジュラス積反転信号NEG_MMが入力される。全加算器641には二番目のコンプレッサ611から出力される和ビット、一番目のコンプレッサ610から出力されるキャリビット、および全加算器640から出力されるキャリビットが入力される。全加算器640の和と全加算器641の和およびキャリは下位値レジスタ650に貯蔵される。
累算器150は単位掛け算演算の一番目のサイクルで以前行の演算結果のうちの現在単位掛け算演算と対応する演算結果を累算器レジスタの値に累積しなければならない。このような過程を累算器の初期値修正サイクルといい、このような過程を支援するためにマルチプレクサ600−609が提供される。
一つのコンプレッサの入力端には二つのマルチプレクサが各々連結される。モジュラス積および部分積の最下位ビット(すなわち、MM[0]および PP[0]に対応する一番目のコンプレッサ610と連結されたマルチプレクサ600、601のうちの第1マルチプレクサ600は2ビット高いコンプレッサからの和ビットACC_S_REG[0]と下位値ビットACC_L_REG[0]とを第1入力と第2入力として各々入力を受ける。第2マルチプレクサ601は1ビット高いコンプレッサ611のキャリビットACC_C_REG[0]と下位値ビットACC_L_REG[2]とを第1入力と第2入力として各々入力を受ける。
二番目のコンプレッサ611と連結されたマルチプレクサ602、603のうちの第1マルチプレクサ602は2ビット高いコンプレッサからの和ビットとACC_L_REG[1]と下位値ビットACC_L_REG[1]とを第1入力と第2入力として各々入力を受ける。第2マルチプレクサ603は1ビット高いコンプレッサ612のキャリビットACC_C_REG[1]と下位値ビットACC_L_REG[2]とを第1入力と第2入力として各々入力を受ける。
三番目のコンプレッサ612に連結されたマルチプレクサ604、605のうちの第1マルチプレクサ604は2ビット高いコンプレッサからの和ビットACC_S_REG[2]と自分と連結されたコンプレッサ612の和ビットACC_S_REG[0]を第1入力と第2入力として各々入力を受ける。第2マルチプレクサ605は1ビット高いコンプレッサのキャリビットACC_C_REG[2]と1ビット低いコンプレッサのキャリビットACC_C_REG[0]を第1入力と第2入力として各々入力を受ける。三番目のコンプレッサ612から最後のコンプレッサ617に各々連結された第1および第2マルチプレクサは同一の構造を取る。ただ、最上位コンプレッサ617に連結された第1マルチプレクサ608の第1入力は自分と連結されたコンプレッサの和ビットを入力として受け、第2マルチプレクサ609の第1入力は自分と連結されたコンプレッサ617のキャリビットが入力として受ける。また、最上位で一ポジション低いコンプレッサ616に連結された第1マルチプレクサ606の第1入力は1ビット高いコンプレッサ617の和ビットを入力として受ける。最上位4個のコンプレッサ617、616、615、614に入力されるPPとMMとは同一であり、全部PPとMMの最上位ビットである。
累算器初期値修正サイクル直後の一サイクルで、シフト信号SHIFT_ACCは論理‘0’であり、残りのサイクルでシフト信号SHIFT_ACCは論理‘1’である。シフト信号SHIFT_ACCが論理‘1’であるとき、第1マルチプレクサ600、602、…、608と第2マルチプレクサ601、602、…、609の各々は自分の第1入力を出力に送る。図16は累算器帰還入力のシフト制御信号SHIFT_ACCが論理‘1’であるとき、コンプレッサ610−617に入力される信号を示している。
累算器初期値修正サイクルを除いた残りのサイクルでレジスタ650に貯蔵された和SO[1:0]が出力される。コンプレッサ612−617から出力されるキャリ、和、および下位値は各々キャリレジスタ630、和レジスタ620、および下位値レジスタ650に貯蔵され、次のサイクルでコンプレッサ610−617に帰還される(feedback)。次のサイクルで累積しなければならない部分積とモジュラス積とは以前サイクルの部分積およびモジュラスより2ビットだけ高い値なので、以前サイクルに貯蔵された位置より2ビット低い位置に帰還入力されなければならない。
累算器帰還入力のシフト制御信号SHIFT_ACCが論理‘0’であるとき、第1マルチプレクサ600、602、…、608と第2マルチプレクサ601、602、…、609の各々は自分の第2入力を出力に送る。図17は累算器帰還入力のシフト制御信号SHIFT_ACCが論理‘0’であるとき、コンプレッサ610−617に入力される信号を示している。
各boxの累算器初期値修正サイクルでは累算器150bのレジスタに貯蔵されている値に以前行の結果値のうちのポジションが一致する部分を累積して累算器初期値を修正する作業が実行される。この際には、和レジスタ620、キャリレジスタ630および下位値レジスタ650に貯蔵された値をポジション移動なしに累算器の入力に帰還する。
上述のように、部分積PP={−2A、−A、0、+A、+2A}であり、モジュラス積MM={SI、−M、0、+M、+2M}である。累算器初期値修正サイクルでは0とSIとが各々部分積PPとモジュラス積MMとして選択される。累算器初期値修正サイクルを除いた残りのサイクルで部分積PPとモジュラス積MMとは図11および図14に示したようなコーディングスキームによって選択される。
部分積とモジュラス積として選択される−Aと−Mとはビット反転(bit−inverSIon)によって得られ、+2Aと+2MとはAとMとを各々1ビット左側シフトして得られ、−2AはAを1ビット左側シフトとビット反転をして得られる。このように、ビット反転とビットシフトとを通じて求められた部分積とモジュラス積とは1の補数(1‘s complement number)である。本発明の望ましい実施形態による掛け算器データパス100は2の補数(2‘s complement number) 体系である。2の補数は1の補数に1を足したのと同様である。部分積反転信号NEG_PPおよびモジュラス積反転信号NEG_MMは1の補数で表現された−A、−2Aまたは−Mを2の補数として表現するために使用される。すなわち、部分積反転信号NEG_PPは部分積PPが−Aまたは−2Aであるとき、‘1 ’であり、部分積PPが0、+Aまたは+2Aであるとき、‘0’である。モジュラス積反転信号NEG_MMはモジュラス積MMが−Mであるとき、‘1’であり、モジュラス積MMが SI、0、+Mまたは+2Mであるとき、‘0’である。
本発明の望ましい実施形態によるモンゴメリ掛け算器は多重精度演算を実行するために図1に示したような演算マトリックス形態で動作する。本発明のモンゴメリ掛け算器の内部のデータは演算の進行中にデータのオーバーフローが発生せず、同時に不要に多くのビットが割り当てられないように最適のビット長さに表現されなければならない。次の数学的分析を通じて演算メトリックスの各行の演算結果値が有する範囲を求め、それによって、各行の演算結果値を表現するために必要なビット数を正確に決めることができる。図1に示した演算マトリックスの行のうちの最後の行を除いた残りの三つの行で使用される被乗数A、乗数BおよびモジュラスMは次のとおりである。
Figure 2005250481
一番目の行で発生される中間結果(intermediate result)Sは数5のように表わされる。
Figure 2005250481
上の数式において、Rは2c+w/2という整数である。本発明のモンゴメリ掛け算器は基数4構造なので、サイクルごとに乗数Bの2ビットを処理する。そして、各サイクルごとに使用されるQの値は{−1、0、+1、+2}のうちの一つである。したがって、一つの行で使用されたQの最大値と最小値とは次のように表わされる。
Figure 2005250481
以上の条件を使用して内部結果Sの最大値と最小値とを求めれば、次のようになる。
Figure 2005250481
モジュラスMがnビットで構成されているので、上の範囲(boundary)を有する数を表現するのに必要なビット数は符号ビットを含んでn+2ビットである。
二番目の行で発生される内部結果Sは一番目の行の内部結果Sを初期値として有して計算を実行する。したがって、Sの算式は次のようになる。
Figure 2005250481
の最大値と最小値とは次のようになる。
Figure 2005250481
上のような値の範囲を有する数を表現するのに必要なビット数もn+2ビットである。
同一の方法で三番目の行の中間結果Sもn+2個のビットで表現することができる。
しかし、多重精度の最後の行の結果値と行とがただ一つだけ存在する単一精度の結果値は符号を含んでn+1ビットに表現することができる。これを証明すれば、次のとおりである。
被乗数A、乗数BおよびモジュラスMの値の範囲は次のとおりである。
Figure 2005250481
そして、最終結果Sは次のとおりである。
Figure 2005250481
数11において、Rは2(c+w/2)pである常数である。数11に示したQの最大値と最小値とは次のとおりである。
Figure 2005250481
したがって、最終結果Sの最大値と最小値とは次のとおりである。
Figure 2005250481
上のような値の範囲を有する数を表現するのに必要なビット数はn+1である。
上述のように、多重精度の場合、最後の行を除いた他の行(内部行)で作られる中間結果が最大値の方に近付く条件が使われる場合に、+Mを越すデータオーバーフロー状況が発生する。このような状況はサイクルごとに選択されるQの値が上位ポジションの方で大部分+2であり、また乗数Aの符号と該当の内部行で使用される被乗数Bのチャンクの符号とが同一の場合である。
各行の結果はn+2ビットで表現される。ところで、nがwの整数倍であり、メモリはwの整数倍の大きさを有するので、追加された二つのビットをメモリに貯蔵することは非常に非効率的である。したがって、本発明ではn+2ビットのうちの下位nビットはメモリに貯蔵し、残りの2ビット(すなわち、最上位にある符号ビットと二番目の最上位ビット)はモンゴメリ掛け算器の内部のレジスタに貯蔵する。これら最上位2ビットは各々SIGN_S とMS1B_Sと名付ける。
最後の行まで処理を終わらせたとき、レジスタに入られている符号ビットSIGN_Sと二番目の最上位ビットMS1B_Sとは常に同一の値を有する。しかし、内部行の処理を終わらせたとき、符号ビットが0の場合に、二番目の最上位ビットは1になることができる。
本発明の望ましい実施形態によるモンゴメリ掛け算器データパス100は、シフトレジスタ106、115、116、180を含む。シフトレジスタ106、115、116、180の各々の長さはwであり、クロックに応答して一サイクルに2ビットずつ右側にシフトする。レジスタ106、115は並列入力直列出力シフトレジスタであり、レジスタ116、180は直列入力並列出力シフトレジスタである。
サイクルごとに作られるモジュラス積MMは累算器初期値修正サイクルの場合以前結果SIであり、残りのサイクルでは図11に示したようなリコーティング表によって決められる値であり、qMである。この際、qは{−1、0、1、2] のうちの一つである。
図1に示した行で一番目の単位掛け算演算CSA0,0、CSA1,0、CSA2,0、CSA3,0(以下、Gen−Q Box)ではqを計算して使用し、同一の行にある単位掛け算演算でqを再使用するようにメモリに貯蔵する。図8に示したモンゴメリリコーダ110は各行の一番目の単位掛け算演算Gen−Q Boxの累算器初期値修正サイクルを除いた残りのサイクルごとに2ビットに符号化されたQO[1:0]を生成し、生成されたQO[1:0]をシフトレジスタ116に貯蔵する。
図19はシフトレジスタ116QO_SIPO_REG[31:0]を詳細に示す。シフトレジスタ116はクロックに反応して一サイクルに2ビットずつ右側にシフトし、モンゴメリリコーダ110からのQO[1:0]を最上位2ビットに貯蔵する。シフトレジスタ116は新しいワード長さデータが満たされた都度自分のデータをメモリ40に貯蔵する。
図20はシフトレジスタ115QI_SIPO_REG[31:0]を示す。メモリに貯蔵されたQOはワード長さw単位にシフトレジスタ115に入力される。シフトレジスタ115の最下位2ビットQI[1:0]はモンゴメリリコーダ110に入力され、シフトレジスタ115はクロックに反応してシフト制御信号SFT_QI_PISOが ‘0’であるとき、メモリ40から新しいデータを受け入れ、シフト制御信号SFT_QI_PISOが‘1’であるとき、2ビットずつ右側にシフトする。
各行の一番目の単位掛け算演算Gen−Q Boxを除いた残りの単位掛け算演算CSA0,1− CSA0,3、CSA1,1−CSA1,3 CSA2,1−CSA2,3、CSA3,1−CSA3,3(以下、Gen−S Box)で、累算器初期値修正サイクルを除いた残りのサイクルごとに2ビット掛け算結果SO[1:0]が生成されてシフトレジスタ180に順次に貯蔵される。
図21は累算器150の和SO[1:0]が入力されて貯蔵するシフトレジスタ180SO_SIPO_REG[31:0]を示す。レジスタ180はクロックに応答して一サイクルに2ビットずつ右側にシフトし、累算器150からのSO[1:0]を最上位2ビットに貯蔵する。シフトレジスタ180は新しいワード長さデータが満たされた都度、自分のデータをメモリ40に貯蔵する。
図22はモンゴメリリコーダ110で使用されるSPP[1:0]を発生する回路を示す。本発明の実施形態で繰り返しな的データSPP[1:0]は、累算器150に貯蔵された和とキャリレジスタの最下位2ビットACC_S_REG[1:0]、ACC_C_REG[1:0]、[L]下位値レジスタの値ACC_L_REGI[2:0]、部分積の最下位2ビットPP[1:0]、およびシフト制御信号SHIFT_ACCに依拠する。ACC_S_REG[1:0]、ACC_C_REG[1:0]、およびACC_L_REG[2]は2ビット加算器801で合算される。合算された信号は2ビット加算器802でPP[1:0]と合算される。2ビット加算器803はPP[1:0]とACC_L_REG[1:0]とを合算する。マルチプレクサ804はシフト制御信号SHIFT_ACCが論理‘0’であるとき、加算器802の出力を選択し、累算器帰還入力のシフト制御信号SHIFT_ACCが論理‘1’であるとき、加算器803の出力を選択してSPP[1:0]を出力する。SPP[1:0]はモンゴメリリコーダ110に提供される。本発明の実施形態による上述の説明でビットの大きさは限定されない。SPPは2ビット以上でありうる。この場合、本発明の他の構成は変更されるであろう。
図23は本発明の望ましい実施形態によるCPA演算ブロック160を示す。図23はc=256、w=32である例を使用した。CPA演算ブロック160では図1に示したCPA、CPA、CPAおよびCPAが順次に演算される。累算器150のキャリレジスタ630に貯蔵されたキャリビットのうちのチャンクの長さだけの下位部分ACC_C_REG[255:0]はマルチプレクサ901に入力される。累算器150の和レジスタ620に貯蔵された和S[255:0]はマルチプレクサ902に入力される。マルチプレクサ901、902は入力選択信号SEL_CPA_IN[2:0]に応答して256ビット入力のうちの最下位ビットから32ビットずつ順次に選択する。マルチプレクサ901、902の出力はレジスタ903、904に各々貯蔵される。入力選択信号SEL_CPA_IN[2:0]は‘000’から‘111’まで変化する。したがって、CPAブロック160は32ビットずつ8回繰り返してCPA演算を実行して、256ビット演算を実行することができる。
キャリ伝播加算器905はレジスタ903、904に貯蔵された値CPA_A_REG[31:0]、CPA_B_REG[31:0]とマルチプレクサ920からのキャリ入力C_INとを加える。各行のCSA演算が終わった後、累算器に残っている演算結果値はACC_S_REG[256:0]+ACC_C_REG[256:0]+ACC_L_REG[2]であり、この結果値をCPAを通じて合わせて単一数字表現に変換してメモリに貯蔵しなければならない。したがって、CPA演算の一番目のサイクルSEL_CPA_IN[2:0]=‘000’でキャリ入力C_INはACC_L_REG[2]であり、残りのサイクル(SEL_CPA_IN[2:0]=‘001’からSEL_CPA_IN[2:0]=‘111’まで)でキャリ入力C_INは以前演算サイクルのキャリ出力C_OUTである。キャリ伝播加算器905からのキャリ出力C_OUTはレジスタ906に貯蔵される。
CPAブロック150で、繰り返し(iteration)によってキャリACC_C_REG[255:0]と和ACC_S_REG[255:0]とを加える動作を終えた後作られるC_OUTをACC_C_REG[256]、ACC_S_REG[256] とXORさせることによって行結果値の新しい符号ビットSIGN_Sが計算され、符号ビットSIGN_Sを新たに計算された値に変更することを制御する信号としてUPD_SIGN_Sが存在する。制御信号UPD_MS1B_Sは結果値Sの二番目の最上位ビットMS1B_Sが新たに計算された値に変更されるように制御する信号である。
偶数倍多重精度すなわち、2倍精度(double precision)または4倍精度(quadruple preciSIon)などの場合、各行の最後のCSA演算が実行された後、CPA演算に行くとき、累算器の出力のうちの最後のハーフワード(すなわち、w=32である場合、16ビット)はメモリ40に伝送することができなかったままレジスタ180に残るようになる。このような現象を図24で示している。図24のように、4倍精度に実現された掛け算器でCSA単位演算は4回繰り返される。各単位掛け算演算のデータ長さは数14のとおりである(c=256、w=32)。
Figure 2005250481
二番目の単位演算CSAの最後のハーフワード(16 ビット)の出力は三番目の単位演算CSAの一番目のハーフワードとともに一つのプルワードに構成されてメモリ40に貯蔵される。しかし、四番目の単位演算CSAの最後のハーフワード出力はこれ以上の単位演算ブロックがなく、メモリに伝送することができず、レジスタ180に残される。このように、一行に対する累算動作が終わってからもメモリ40に貯蔵することができなかったまま残っているハーフワードデータをCPA演算過程でメモリ40に貯蔵するために制御信号IS_1ST_CPA_WORD、IS_ODD_PRECが使用される。
再び図23を参照すれば、偶数倍精度であるとき(IS_ODD_PEC=‘0’)、CPA演算の一番目のサイクル(IS_1ST_CPA_WORD=‘1’)でキャリ伝播加算器905から出力される結果の下位16ビットCPA_S_OUT[15:0]はレジスタ180に貯蔵された上位16ビットSO_SIPO_REG[31:16]と結合して1ワード(32ビット)で構成され、レジスタ925に貯蔵される。キャリー伝播加算器905から出力される結果の上位16ビットCPA_S_OUT[31:16]はレジスタ922に貯蔵される。
残りのサイクルで、キャリ伝播加算器905の出力のうちの下位16ビットは以前サイクルでレジスタ922に貯蔵された上位16ビットと結合してレジスタ925に貯蔵される。レジスタ925のデータはサイクルごとにメモリ40に貯蔵される。
上述のブースリコーダ140は組み合わせ回路(combinational circuit)で構成される。ブースリコーダ140の入出力信号間の論理式は図25のように異なって実現することができる。
図25において、A[1]とA[0]とは現在処理中である単位掛け算演算で使用する被乗数Aの最下位2ビットである。したがって、−Aの最下位2ビット{A[1]xor A[0]、A[0]}であり、 +2Aと−2Aの最下位2ビット{A[0]、0}になる。
強制部分積制御信号FORCE_PP[1:0]が‘11’であるときには、部分積PPの値が乗数B1、B0、BRによって決められる。しかし、強制部分積制御信号FORCE_PP[1:0]が‘01’であるときには +A に、‘10’であるときには−Aに、‘00’であるときには0に強制選択される。
図1に示したような単位掛け算演算の各々の累算器初期値修正サイクルで以前行の結果値SIは累算器に累積しなければならない。この際、部分積PPは0に選択し、モジュラス積MMの値は以前行の結果値SIに選択しなければならない。累算器初期値修正サイクルで部分積PPの値を0に強制するためには強制部分積制御信号FORCE_PP[1:0]を‘11’に設定すれば良い。
本発明の望ましい実施形態によるモンゴメリ掛け算器10を利用してモジュラ冪法(modular exponentiation)を実現すれば、結果はモンゴメリレジデュー数字(Montgomery residue number)であり、“XR mod M”で表現される。しかし、窮極的に願う結果はノーマルレジデュー数字(normal residue number)である“X mod M”である。モンゴメリレジデュー数をノーマルレジデュー数字に変換しようとするときに強制部分積制御信号FORCE_PP[1:0]を使うことができる。 例えば、被乗数Bを‘+1’に設定し、乗数Aを以前モンゴメリ掛け算の結果値に設定してモンゴメリ掛け算をもう一度実行すれば、ノーマルレジデュー数字を得ることができる。このような動作のために図1に示した演算マトリックスの一番目の行にある各単位演算で累算器初期値修正サイクルの以後の一サイクルでだけ強制部分積制御信号FORCE_PP[1:0]を‘01’に設定して部分積PPの値が+Aになるようにし、他のすべてのサイクルで強制部分積制御信号FORCE_PP[1:0]を‘11’に設定して部分積PPの値が0になるようにする。
ブースリコーダ140の入力であるB1、B0、BRはレジスタ106から入力され、入力A[1:0]はAX_PIPO_REG[1:0]とAY_PIPO_REG[1:0]とのうちで選択された値であり、入力SEL_PP_D[1:0]は遅延器141内のラッチFF1によって選択信号SEL_PPが一サイクル遅延された信号である。ブースリコーダ140の出力SEL_PP[1:0]および部分積イネーブル信号EN_PPは部分積発生器130に提供され、部分積反転信号NEG_PPは累算器150に提供され、部分積PP[1:0]はSPP発生器170に提供される。
モンゴメリリコーダ110は組み合わせ回路で構成される。モンゴメリリコーダ110の新しい入出力信号間の論理式を図26に示す。図26で、q(QI[1:0]とQO[1:0]とのコーディングは数15のとおりである。
Figure 2005250481
図26において、M1はモジュラスMの二番目の最下位ビットである。強制モジュラス積制御信号FORCE_MM[1:0]が‘11’であるとき、モジュラス積MMの値はSPP[1:0]とM1によって決められる。しかしモジュラス積MMは、強制モジュラス積制御信号FORCE_MM[1:0]が‘10’であるとき、以前行の結果値SIに、‘01’であるとき、QI[1:0]によって選択される値に、‘00’であるとき、0に強制選択される。
演算マトリックスのすべての単位演算で累算器初期値修正サイクルにはモジュラス積MMの値は以前行の結果値SIに選択しなければならない。演算マトリックスの各行の一番目の単位演算(すなわち、Gen−Q Box)ではSPP[1:0]とM1に適するモジュラス積MMを決めなければならないので、累算器初期値修正サイクルを除いた残りのサイクルで強制モジュラス積制御信号FORCE_MM[1:0]は‘00’に設定されなければならない。この際、qを計算してQO[1:0]に出力し、出力されたQO[1:0]がレジスタ116を介してメモリ40に貯蔵される。
演算マトリックスの各行の一番目を除いた単位演算(すなわち、Gen−S Box)では累算器初期値修正サイクルを除いた残りのサイクルで強制モジュラス積制御信号FORCE_MM[1:0]を‘01’に設定し、一番目の単位演算でメモリに貯蔵しておいたq(すなわち、入力QI[1:0])を再使用してモジュラス積MMを選択しなければならない。
また、本発明の望ましい実施形態による掛け算器データパス100はモンゴメリ掛け算だけではなく、ノーマル掛け算まで支援することができる。このために、強制モジュラス積制御信号FORCE_MM[1:0]が使用される。モンゴメリ掛け算と異なり、ノーマル掛け算ではモジュラスが不要であるので、モジュラス積MMがない。したがって、各単位演算の累算器初期値修正サイクルでだけ強制モジュラス積制御信号FORCE_MM[1:0]を‘10’に設定してモジュラス積MMが以前行の結果値SIになるようにし、残りのサイクルでは強制モジュラス制御信号FORCE_MM[1:0]を‘00’に設定してモジュラス積MMの値が0になるようにする。
モンゴメリリコーダ110の入力SPP[1:0]はSPP発生器170から入力され、M1はレジスタ102に貯蔵されたモジュラスの二番目の最下位ビットとレジスタ103に貯蔵された二番目の最下位ビットのうちで各行の一番目の単位演算(すなわち、Gen−Q Box)で使用される。そして、QI[1:0]はレジスタ115に貯蔵された最下位2ビットである。また入力SEL_MM_D[1:0]はフリップフロップ111によってSEL_MM[1:0]が一サイクルだけ遅延された信号である。モンゴメリリコーダ110の出力QO[1:0]はレジスタ116に提供され、モジュラス積選択信号SEL_MM[1:0]とモジュラス積イネーブル信号EN_MMとはモジュラス積発生器120に提供され、モジュラス積反転信号NEG_MMは累算器150に提供される。
再び、図8を参照すれば、グリッチ除去器(glitch remover、114)はモンゴメリリコーダ110の出力信号SEL_MM[1:0]、EN_MM、NEG_MMに示すグリッチを除去して消耗電力を低下させる。グリッチ除去器114はラッチ、またはフリップフロップで構成され、モンゴメリ掛け算器内の他のレジスタやフリップフロップが使用するクロックと反転された位相のクロックを使用する。消耗電力よりは動作速度が重要な応用ではグリッチ除去器110を使用しないことによって、臨界経路(critical path)の長さを縮めることができる。パイプラインレジスタ141は2段パイプラインレジスタで実現してハードウェアの動作周波数を高めるためのものである。レジスタ106とブースリコーダ140との動作は残りのブロックの動作より一サイクルの先に発生する。ブースリコーダの入力信号A[1:0]を選択するマルチプレクサ142、モジュラス積発生器120、部分積発生器130、およびモンゴメリリコーダ110に入力される信号M1を選択するマルチプレクサ113とフリップフロップ112とは共通の制御信号USE_X_REGによって制御される。しかし、パイプライン動作なので、ブースリコーダ140の入力信号A[1:0]を選択する回路142だけ制御信号USE_X_REGをそのまま使用し、他の回路142、120、130、112は遅延素子を介して1サイクル遅延された制御信号USE_X_REGを受け入れる。
4倍精度演算を実行するための演算マトリックス構造を例示的に示す図である。 図1に示した4倍精度演算が実行される単位掛け算演算手順を示す図である。 本発明の望ましい実施形態による暗号化システムを概略的に示すブロック図である。 本発明の望ましい実施形態によるモンゴメリ掛け算器である。 図3に示したモンゴメリ掛け算器のメモリインターフェースを示す図である。 制御信号の状態に応じてマルチプレクサが選択する信号を示す図表である。 制御信号の状態に応じてマルチプレクサが選択する信号を示す図表である。 モンゴメリ掛け算器の全体的な構成を示す図である。 被乗数を貯蔵するレジスタの詳細な構成を示す図である。 モジュラス積(MMI)を発生するためのモジュラス積発生器を詳細に示す図である。 本発明の望ましい実施形態によるモンゴメリリコーダのコーディングスキームである。 乗数Bを貯蔵するレジスタである。 部分積発生器の回路構成例である。 本発明の望ましい実施形態によるブースリコーダのコーディングスキームである。 本発明の望ましい実施形態による累算器である。 シフト信号(SHIFT_ACC)が論理‘1’であるとき、コンプレッサに入力される信号を示す図である。 シフト信号(SHIFT_ACC)が論理‘0’であるとき、コンプレッサに入力される信号を示す図である。 4−2コンプレッサの一例を示す図である。 シフトレジスタ(116)を詳細に示す図である。 シフトレジスタ(115)を詳細に示す図である。 累算器(150)の和(SO[1:0])が入力されて貯蔵するシフトレジスタ(180)を示す図である。 モンゴメリリコーダ(110)で使用されるSPP[1:0]を発生する回路を示す図である。 本発明の望ましい実施形態によるCPA演算ブロック(160)を示す図である。 偶数倍多重精度の場合、各行の最後のCSA演算が実行された後、CPA 演算に行くとき、累算器の最上位ハーフワードがレジスタ(180)に残る現象を示す図である。 ブースリコーダ(140)の入出力信号間の異なる論理式を示す図である。 モンゴメリリコーダ(110)の入出力信号間の異なる論理式を示す図である。

Claims (76)

  1. −M、0、M、2Mと以前行の結果SIのnビットモジュラス数のうちの一つをモジュラス積に選択するモジュラス積発生器と、
    −2A、−A、0、+A、および+2Aの被乗数のうちの一つを部分積の被乗数で選択する部分積発生器と、
    選択された前記モジュラス積と前記部分積とを累算する累算器とを含むことを特徴とする掛け算器。
  2. 前記Mはnビットモジュラス数のうちの現在入力された派生された部分から形成され、
    前記Aはnビット被乗数のうちの現在入力された派生された部分から形成されることを特徴とする請求項1に記載の掛け算器。
  3. 前記以前行の結果は前記累算器の以前行の掛け算結果のうちの前記被乗数と前記モジュラス数の現在入力された派生された部分に対応するビットから形成されることを特徴とする請求項2に記載の掛け算器。
  4. 前記モジュラス積発生器は、
    前記累算器の初期値修正サイクルで前記以前行の結果をモジュラス積に選択することを特徴とする請求項2に記載の掛け算器。
  5. 前記部分積発生器は、
    前記累算器の初期値修正サイクルで前記部分積を‘0’に設定することを特徴とする請求項4に記載の掛け算器。
  6. 前記初期値修正サイクルは、
    前記nビット被乗数と前記nビットモジュラス数のうちの現在入力された派生された部分のビットとを使用した基本掛け算演算の最初サイクルを示すことを特徴とする請求項4に記載の掛け算器。
  7. 前記初期値修正サイクルは、
    前記nビット被乗数と前記nビットモジュラス数のうちの現在入力された派生された部分のビットとを使用した基本掛け算演算の最初サイクルを示すことを特徴とする請求項5に記載の掛け算器。
  8. 前記モジュラス数−Mは前記モジュラス数Mを反転させることによって求められることを特徴とする請求項1に記載の掛け算器。
  9. 前記モジュラス数2Mは前記モジュラス数Mをシフトすることによって求められることを特徴とする請求項1に記載の掛け算器。
  10. 前記nビットモジュラス数(M)のうちの現在入力されたビットを貯蔵するためのモジュラスレジスタと、
    前記nビット被乗数(A)のうちの現在入力されたビットを貯蔵するための被乗数レジスタと、
    前記nビット乗数(B)のうちの現在入力されたビットを貯蔵するための乗数レジスタとをさらに含むことを特徴とする請求項2に記載の掛け算器。
  11. 前記モジュラスレジスタと前記被乗数レジスタとはc'+1ビットレジスタで各々構成され、
    c'はnと同一、またはnより小さい前記nビット被乗数と前記nビットモジュラス数のうちの少なくとも一つの派生された部分のビットとを示すプラスの整数であることを特徴とする請求項10に記載の掛け算器。
  12. 前記モジュラスレジスタはハーフワードの大きさの多数のサブレジスタと1ビット符号レジスタとをさらに含むことを特徴とする請求項10に記載の掛け算器。
  13. ワード長さのデータを貯蔵するメモリインターフェースブロックをさらに含み、
    前記モジュラスレジスタの多数のサブレジスタは偶数番目のサブレジスタと奇数番目ののサブレジスタとを含み、
    前記偶数番目のサブレジスタは前記メモリインターフェースブロックから供給されたワード長さのデータのうちの下位ハーフワードを貯蔵し、
    前記奇数番目のサブレジスタは前記メモリインターフェースブロックから供給されたワード長さのデータのうちの上位ハーフワードを貯蔵することを特徴とする請求項12に記載の掛け算器。
  14. 前記被乗数レジスタはハーフワード大きさの多数のサブレジスタと1ビット符号レジスタとをさらに含むことを特徴とする請求項10に記載の掛け算器。
  15. ワード長さのデータを貯蔵するメモリインターフェースブロックをさらに含み、
    前記被乗数レジスタの多数のサブレジスタは偶数番目のサブレジスタと奇数番目のサブレジスタとを含み、
    前記偶数番目のサブレジスタは前記メモリインターフェースブロックから供給されたワード長さのデータのうちの下位ハーフワードを貯蔵し、
    前記奇数番目のサブレジスタは前記メモリインターフェースブロックから供給されたワード長さのデータのうちの上位ハーフワードを貯蔵することを特徴とする請求項14に記載の掛け算器。
  16. ワード長さ(w)が派生された部分の長さ(c)と同一、または派生された部分の長さ(c)より小さい、w <= c <= n、前記nビット乗数のうちの入力ビットを貯蔵し、データを2ビットずつシフトするシフトレジスタをさらに含むことを特徴とする請求項10に記載の掛け算器。
  17. 前記部分積発生器は、
    前記nビット乗数のうちの現在入力されたビットの三つのビット(B0、B1、BR)から部分積選択信号を発生し、前記nビット被乗数の入力されたビットのうちのA、2A、−Aおよび−2Aのうちの一つを前記部分積に選択することを特徴とする請求項16に記載の掛け算器。
  18. 前記被乗数2Aは前記被乗数Aをシフトすることによって求められることを特徴とする請求項17に記載の掛け算器。
  19. 前記被乗数−Aは前記被乗数Aを反転させることによって求められることを特徴とする請求項17に記載の掛け算器。
  20. 前記被乗数−2Aは前記被乗数Aを反転させ、シフトすることによって求められることを特徴とする請求項17に記載の掛け算器。
  21. メモリと、
    被乗数A、乗数Bおよびモジュラス数Mを前記メモリに貯蔵するホストと、
    前記ホストの制御に応じて貯蔵された被乗数、乗数およびモジュラス数でモンゴメリ掛け算演算を実行し、モンゴメリ掛け算演算から得られた演算結果を前記メモリに貯蔵することを特徴とする請求項1に記載の掛け算器を含む演算装置。
  22. Mは前記nビットモジュラス数のうちの現在入力された派生された部分から形成され、Aはnビット被乗数のうちの現在入力された派生された部分から形成され、
    前記以前行の結果は前記累算器の以前列の掛け算結果のうちの前記被乗数と前記モジュラス数の現在入力された派生された部分に対応するビットとから形成されることを特徴とする請求項21に記載の演算装置。
  23. 前記モジュラス積発生器は前記メモリから前記以前行の結果であるSIと前記nビットモジュラス数の一部とを読み出し、SI、−M、0、Mおよび2Mのうちの一つを前記モジュラス積に選択し、
    前記部分積発生器はnビット被乗数のうちの一部を読み出し、−2A、−A、0、+A および2Aのうちの一つを前記部分積に選択し、前記選択されたモジュラス積と部分積とを累算する累算器を含むことを特徴とする請求項21に記載の演算装置。
  24. 前記メモリから前記被乗数、乗数およびモジュラス全体を読み出すまで前記掛け算を繰り返して実行することを特徴とする請求項21に記載の演算装置。
  25. 前記被乗数、乗数、およびモジュラス数が各々nビットであり、
    前記掛け算器が一回にc' ビットずつ掛け算演算を実行することができるとき、前記掛け算器は前記被乗数、乗数、およびモジュラス数を c' ビットずつ読み出し、ここで c'は前記被乗数、乗数、およびモジュラス数のビットのうちの派生された部分のビット長さを示すことを特徴とする請求項21に記載の演算装置。
  26. 前記掛け算器は、
    前記被乗数はワード長さを示すwビット大きさのレジスタに貯蔵されたwビットのうちの一ブロックを前記メモリから読み出し、
    前記wビットレジスタに貯蔵された前記被乗数は根の長さであるdビットずつ順次に処理され、
    前記wビットレジスタに貯蔵された前記wビットを処理した後、前記メモリから前記被乗数の次のwビットを読み出すことを特徴とする請求項25に記載の演算装置。
  27. 前記掛け算器は、
    強制部分積制御信号を発生するコントローラをさらに含むことを特徴とする請求項26に記載の演算装置。
  28. 前記部分積発生器は、
    部分積選択信号と前記強制部分積制御信号とが第1値を有するとき、前記現在入力された乗数の三つのビット(B0、B1、BR)から部分積印加信号を生成し、前記被乗数(A)の入力ビットに基づいてA、2A、−A、−2Aおよび0のうちの一つを前記部分積に選択することを特徴とする請求項27に記載の演算装置。
  29. 前記部分積発生器は、
    ノーマルレジデュー数を得るために前記強制部分積制御信号が第2値を有するとき、前記被乗数(A)を前記部分積に選択することを特徴とする請求項27に記載の演算装置。
  30. 前記部分積発生器は、
    前記強制部分積制御信号が第3値を有するとき、前記被乗数(A)に基づいて引いた前記部分積に選択することを特徴とする請求項27に記載の演算装置。
  31. 前記初期値修正サイクルで、前記強制部分積制御信号は第4値を有し、前記強制部分積制御信号が前記第4値を有するとき、前記部分積発生器は0を前記部分積に選択することを特徴とする請求項27に記載の演算装置。
  32. 前記部分積発生器は、
    前記強制部分積制御信号が第3値を有するとき、前記被乗数(A)に基づいて引いた前記部分積に選択することを特徴とする請求項29に記載の演算装置。
  33. 前記累算器の初期値修正サイクルで前記強制部分積制御信号は第4値を有することを特徴とする請求項32に記載の演算装置。
  34. 前記強制積制御信号が前記第4値を有するとき、前記部分積発生器は0を前記部分積に選択することを特徴とする請求項32に記載の演算装置。
  35. 前記掛け算器は、
    前記累算器に貯蔵されたキャリ、和と最下位値、前記部分積、および前記累算器の入力帰還シフト制御信号に応答して繰り返し的な部分積データSPPを発生することを特徴とする請求項27に記載の演算装置。
  36. 前記コントローラは、
    強制モジュラス積制御信号をさらに発生することを特徴とする請求項35に記載の演算装置。
  37. 前記モジュラス積発生器は、
    前記強制モジュラス積制御信号が第1値を有するとき、前記繰り返し的なデータSPPとモジュラス(M)の二番目の最下位ビットとから前記−M、0、M、2Mのうちの一つを選択するためのモジュラス積選択信号を発生することを特徴とする請求項36に記載の演算装置。
  38. 前記累算器の前記初期値修正サイクルで、前記強制モジュラス積制御信号は第2値を有することを特徴とする請求項36に記載の演算装置。
  39. 前記モジュラス積発生器は、
    前記強制モジュラス積制御信号が第2値であるとき、前記以前結果を前記モジュラス積に選択することを特徴とする請求項38に記載の演算装置。
  40. 前記強制モジュラス積制御信号が第3値を有するとき、QIに基づいて前記モジュラス積選択信号を発生することを特徴とする請求項39に記載の演算装置。
  41. 前記初期値修正サイクルを除いた残りのサイクルで、前記強制モジュラス積制御信号は第4値を有することを特徴とする請求項40に記載の演算装置。
  42. 前記モジュラス積発生器は、
    ノーマルレジデュー数を得るために前記強制部分積制御信号が第2値を有するとき、前記被乗数(A)を前記部分積に選択することを特徴とする請求項41に記載の演算装置。
  43. 前記被乗数、乗数、およびモジュラス数が各々c'ビットずつ掛け算演算をすれば、すべての演算サイクルに対して(n/c)*(n/c)回の単位掛け算演算を実行することを特徴とする請求項26に記載の演算装置。
  44. 前記掛け算器は、
    wビット単位の前記メモリから前記nビット被乗数とモジュラス数とを読み出し、
    c'ビット大きさのc'ビットレジスタに前記wビットを貯蔵し、
    前記全体c'ビットレジスタのc'ビットが処理されることを特徴とする請求項43に記載の演算装置。
  45. 前記単位掛け算演算の各々の一番目の演算サイクルは前記累算器の初期値修正サイクルであることを特徴とする請求項44に記載の演算装置。
  46. 前記モジュラス積発生器は、
    前記初期値修正サイクルで前記以前結果を前記モジュラス積に選択することを特徴とする請求項45に記載の演算装置。
  47. 前記部分積発生器は、
    前記初期値修正サイクルで前記部分積を‘0’に設定することを特徴とする請求項46に記載の演算装置。
  48. 前記モジュラス(M)のうちの現在入力された派生された部分の長さがc'であるビットを貯蔵するためのモジュラスレジスタと、
    前記被乗数(A)のうちの現在入力された派生された部分の長さがc'であるビットを貯蔵するための被乗数レジスタと、
    前記乗数(B)のうちの現在入力された派生された部分の長さがwであるビットを貯蔵するための乗数レジスタとをさらに含むことを特徴とする請求項44に記載の演算装置。
  49. 前記モジュラスレジスタと前記被乗数レジスタとはc'+1ビットレジスタで各々構成され、
    c'はnと同一、またはnより小さい前記nビット被乗数と前記nビットモジュラス数のうちの少なくとも一つの派生された部分のビットとを示すプラスの整数であることを特徴とする請求項48に記載の演算装置。
  50. 前記モジュラスレジスタと前記被乗数レジスタとは多数のサブレジスタとクロック信号やローディング印加信号のうちの一つに応答して新しい値を選択的にローディングする1ビット符号レジスタとをさらに含むことを特徴とする請求項48に記載の演算装置。
  51. 前記被乗数レジスタはワード長さwビットを貯蔵し、
    前記被乗数レジスタはクロックや制御信号のうちの一つに応答して新しい値をロードするか、データを右側にシフトさせることを特徴とする請求項48に記載の演算装置。
  52. キャリ加算モードで動作し、各々がモジュラス積、部分積、第1値および第2値を受け入れ、対応する次の和、対応する次のキャリおよび対応する次の下位値を発生する複数のコンプレッサと、
    前記複数のコンプレッサの各々から前記対応する次の和を受け入れ、対応する更新された現在和を出力する和レジスタと、
    前記複数のコンプレッサから前記対応する次のキャリを受け入れ、対応する更新された現在キャリを出力するキャリレジスタと、
    前記複数のコンプレッサから前記対応する次の下位値を受け入れ、対応する更新された現在下位値を出力する下位値レジスタとを含むことを特徴とする累算器。
  53. 前記複数のコンプレッサの各々は初期値修正サイクルで自分から出力される前記対応する次の和、次のキャリおよび次の下位値を前記第1値および前記第2値に各々受け入れることを特徴とする請求項52に記載の累算器。
  54. 前記初期値修正サイクルを除いた残りのサイクルで前記コンプレッサの各々は2ビット高いコンプレッサからの和と1ビット高いコンプレッサからのキャリとを前記第1値および前記第2値に各々受け入れることを特徴とする請求項53に記載の累算器。
  55. 前記複数のコンプレッサのうちの最下位ビットコンプレッサの和は第1追加全加算器に供給され、
    最下位コンプレッサのキャリ、第2下位コンプレッサの和と第1追加全加算器のキャリとは第2追加全加算器に供給され、
    第1追加全加算器の和と第2追加全加算器の和とキャリとは次の下位値を示すことを特徴とする請求項54に記載の累算器。
  56. 前記累算器の初期値修正サイクルを示す信号に応答して前記第1値および前記第2値を選択するためのマルチプレクサをさらに含むことを特徴とする請求項53に記載の累算器。
  57. 前記モジュラス積はnビットモジュラス数から生成され、
    前記部分積はnビット被乗数とnビット乗数とから生成され、
    前記部分積と前記モジュラス積の各々はc+k+2=c'+2ビットであり、ここで、kは8の倍数である整数、cはビットのうちの一部分の長さを示し、c'はビットのうちの付け加えられた一部分の長さ、そしてnはcの倍数である整数、c<=n 、および c'=c+kであることを特徴とする請求項52に記載の累算器。
  58. 前記複数のコンプレッサは直列に連結され、少なくともc+k+5=c'+5個のコンプレッサを有することを特徴とする請求項55に記載の累算器。
  59. 前記複数のコンプレッサは各々4;2コンプレッサであることを特徴とする請求項52に記載の累算器。
  60. 前記の複数のコンプレッサの各々は二つの全加算器で構成されることを特徴とする請求項52に記載の累算器。
  61. 前記複数のコンプレッサの最下位コンプレッサは前記部分積反転信号と前記モジュラス積反転信号とのうちの一つを受け入れることを特徴とする請求項52に記載の累算器。
  62. 掛け算器はn/c部分で構成されたnビット被乗数と、n/c部分で構成されたnビット乗数と、n/c部分で構成されたnビットモジュラス数と、乗数の派生された部分とモジュラス数の派生された部分に対する(n/c)*(n/c)回の単位掛け算演算を順次に実行し、ここで、n>cであり、nとcとはプラスの整数であることを特徴とする演算装置。
  63. 前記掛け算器は、
    −M、0、M、2Mと以前行の結果SIのnビットモジュラス数のうちの一つをモジュラス積に選択するモジュラス積発生器と、
    −2A、−A、0、+A、および+2Aの被乗数のうちの一つを部分積の被乗数に選択する部分積発生器と、
    選択された前記モジュラス積と前記部分積とを累算する累算器とをさらに含むことを特徴とする請求項62に記載の演算装置。
  64. 前記Mはnビットモジュラス数のうちのc' (c'=c+k)ビットの現在入力された派生された部分であり、kは整数であり、
    前記Aはnビット被乗数のうちのc'ビットの現在入力された派生された部分であることを特徴とする請求項63に記載の演算装置。
  65. 前記以前行の結果は前記累算器の以前行の掛け算結果のうちの前記被乗数と前記モジュラス数の現在入力された派生された部分に対応するビットとから形成されることを特徴とする請求項63に記載の演算装置。
  66. 前記掛け算器は複数の行に対する単位掛け算演算を実行して各行の最後に掛け算結果を生成し、
    最後の行の掛け算結果を除いたすべての行に対する掛け算結果はn+2長さのビットを有することを特徴とする請求項62に記載の演算装置。
  67. 最後の行に対する掛け算結果はn+1長さのビットを有することを特徴とする請求項66に記載の演算装置。
  68. nは前記被乗数、乗数およびモジュラス数のうちの一つの以上に構成される被演算子のビット長さを示すことを特徴とする請求項62に記載の演算装置。
  69. cはビットのうちの一部分のビット長さを示し、nはcの倍数である整数であることを特徴とする請求項68に記載の演算装置。
  70. c'はビットのうちの付け加えられた一部分のビット長さを示し、c'=c+kであり、kは整数であることを特徴とする請求項69に記載の演算装置。
  71. 前記掛け算器でデータパスはc'に比例するサイズであることを特徴とする請求項70に記載の演算装置。
  72. nとcとはプラスの整数であり、n/c個の行を有する各行は繰り返し的にn/c回の単位モンゴメリ掛け算演算を実行し、キャリ伝達加算演算をすることに係わるマトリックス演算器と、
    前記単位掛け算演算を繰り返して実行して加算構造に貯蔵されるキャリを有する累算器と、
    キャリ伝達加算演算を実行する追加的なキャリ伝達加算器とを含むことを特徴とする掛け算装置。
  73. 前記モンゴメリ掛け算演算は前記単位掛け算演算を一度完了し、前記キャリ伝達加算演算をマトリックスのn/c個行に対して完了することを特徴とする請求項72に記載の掛け算装置。
  74. 多数の選択可能なnビットモジュラス数のうちの現在入力された派生された部分から形成された与えられたモジュラス数Mからモジュラス積を選択するモジュラス積発生器と、
    多数の選択可能なnビット被乗数のうちの現在入力された派生された部分から形成された与えられた被乗数Aから部分積を選択する部分積発生器と、
    選択された前記モジュラス積と掛け算結果とで生成された部分積を累算する累算器とを含むことを特徴とする掛け算器。
  75. メモリと、
    被乗数A、乗数Bおよびモジュラス数Mをメモリに貯蔵するホストと、
    ホストの制御に応じて貯蔵された被乗数、乗数およびモジュラス数にモンゴメリ掛け算演算を実行し、モンゴメリ掛け算演算から得られた演算結果をメモリに貯蔵する請求項74に記載の前記掛け算器を含む演算装置。
  76. モンゴメリ掛け算演算を実行し、そこに入力制御信号の論理状態に基づいてノーマル掛け算演算が適用されることを特徴とするモンゴメリ掛け算器。
JP2005056659A 2004-03-02 2005-03-01 多重精度を支援する拡張型モンゴメリモジュラ掛け算器 Active JP4870932B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR1020040013855A KR20050088506A (ko) 2004-03-02 2004-03-02 다중 세정도를 지원하는 확장형 몽고메리 모듈러 곱셈기
KR2004-013855 2004-03-02

Publications (2)

Publication Number Publication Date
JP2005250481A true JP2005250481A (ja) 2005-09-15
JP4870932B2 JP4870932B2 (ja) 2012-02-08

Family

ID=34909984

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005056659A Active JP4870932B2 (ja) 2004-03-02 2005-03-01 多重精度を支援する拡張型モンゴメリモジュラ掛け算器

Country Status (6)

Country Link
US (1) US7805478B2 (ja)
JP (1) JP4870932B2 (ja)
KR (1) KR20050088506A (ja)
CN (1) CN1702613A (ja)
DE (1) DE102005010764A1 (ja)
FR (1) FR2867579B1 (ja)

Families Citing this family (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100458031B1 (ko) * 2003-03-14 2004-11-26 삼성전자주식회사 몽고메리 유형의 모듈라 곱셈 장치 및 방법
US8073892B2 (en) * 2005-12-30 2011-12-06 Intel Corporation Cryptographic system, method and multiplier
DE102007014808A1 (de) * 2007-03-28 2008-10-02 Texas Instruments Deutschland Gmbh Multiplizier- und Multiplizier- und Addiereinheit
EP2208165A4 (en) * 2007-11-02 2010-11-24 Certicom Corp MONTGOMERY ARITHMETIC SIGNED
KR100946256B1 (ko) * 2007-12-26 2010-03-08 대구대학교 산학협력단 다정도 캐리 세이브 가산기를 이용한 듀얼필드상의확장성있는 몽고매리 곱셈기
KR101590322B1 (ko) * 2009-05-15 2016-02-19 삼성전자주식회사 연산임계경로가 감소된 모듈러 곱셈기 및 연산임계경로 감소방법
KR101248912B1 (ko) * 2009-12-31 2013-03-29 한양대학교 산학협력단 항혈관신생 활성을 가지는 재조합 아데노바이러스
KR20110105555A (ko) * 2010-03-19 2011-09-27 삼성전자주식회사 효율적인 하드웨어 구성을 갖는 몽고메리 승산기
KR101929984B1 (ko) 2012-05-17 2018-12-18 삼성전자주식회사 모듈러 곱셈기 및 그것의 모듈러 곱셈 방법
KR101925868B1 (ko) 2012-05-17 2018-12-06 삼성전자주식회사 모듈러 계산 유닛 및 그것을 포함하는 보안 시스템
CN103645883A (zh) * 2013-12-18 2014-03-19 四川卫士通信息安全平台技术有限公司 基于fpga的高基模乘器
US9535656B2 (en) * 2014-03-14 2017-01-03 International Business Machines Corporation Pipelined modular reduction and division
KR102132261B1 (ko) * 2014-03-31 2020-08-06 삼성전자주식회사 비교 연산이 필요없이 최종 모듈러 감소를 하는 몽고메리 곱셈 방법 및 곱셈기
CN103970504B (zh) * 2014-05-07 2017-03-29 广东顺德中山大学卡内基梅隆大学国际联合研究院 在ecc中实现位数自适应模乘运算的方法及模乘运算器
CN104090737B (zh) * 2014-07-04 2017-04-05 东南大学 一种改进型部分并行架构乘法器及其处理方法
KR102338863B1 (ko) 2015-09-09 2021-12-13 삼성전자주식회사 연산을 제어하기 위한 장치 및 방법
IL244842A0 (en) * 2016-03-30 2016-07-31 Winbond Electronics Corp Efficient non-modular multiplexing is protected against side-channel attacks
CN106528046B (zh) * 2016-11-02 2019-06-07 上海集成电路研发中心有限公司 长位宽时序累加乘法器
KR102594656B1 (ko) * 2016-11-25 2023-10-26 삼성전자주식회사 보안 프로세서, 이를 포함하는 어플리케이션 프로세서 및 보안 프로세서의 동작 방법
CN108242994B (zh) * 2016-12-26 2021-08-13 阿里巴巴集团控股有限公司 密钥的处理方法和装置
CN108241481B (zh) * 2016-12-26 2022-08-23 航天信息股份有限公司 一种适用于rsa算法的部分求余乘法器设备
CN108564169B (zh) * 2017-04-11 2020-07-14 上海兆芯集成电路有限公司 硬件处理单元、神经网络单元和计算机可用介质
RU2653263C1 (ru) * 2017-07-24 2018-05-07 федеральное государственное автономное образовательное учреждение высшего образования "Северо-Кавказский федеральный университет" Арифметико-логическое устройство для умножения чисел по модулю
CN109857368B (zh) * 2018-12-20 2022-07-26 上海大学 一种位数众多、可分组、可重构的多值电子运算器及方法
CN109669670B (zh) * 2018-12-26 2020-09-22 贵州华芯通半导体技术有限公司 用于蒙哥马利模乘中的不均等分块的数据处理方法及装置
EP4080350A4 (en) * 2020-04-01 2022-12-28 Huawei Technologies Co., Ltd. MULTIMODE FUSION MULTIPLIER
CN112328962B (zh) * 2020-11-27 2021-12-31 深圳致星科技有限公司 矩阵运算优化方法、装置、设备和可读存储介质
CN112506468B (zh) * 2020-12-09 2023-04-28 上海交通大学 支持高吞吐多精度乘法运算的risc-v通用处理器
CN113032845B (zh) * 2021-03-31 2022-02-11 郑州信大捷安信息技术股份有限公司 一种用于资源受限芯片的EdDSA签名实现方法和装置
CN113296733A (zh) * 2021-04-25 2021-08-24 阿里巴巴新加坡控股有限公司 数据处理方法以及装置
TWI802095B (zh) 2021-11-22 2023-05-11 財團法人工業技術研究院 模數乘法電路與對應之計算模數乘法之方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08263316A (ja) * 1994-11-08 1996-10-11 Sgs Thomson Microelectron Sa モンゴメリ法によるモジュラ乗算の実施方法
JP2002236581A (ja) * 2001-02-08 2002-08-23 Matsushita Electric Ind Co Ltd 演算回路、演算方法、及びプログラム記録媒体
JP2003216034A (ja) * 2002-01-23 2003-07-30 Ail Kk べき乗剰余演算器
JP2003216411A (ja) * 2002-01-23 2003-07-31 Sony Corp 多倍長演算処理装置およびicデバイス

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1988005189A1 (en) 1986-12-30 1988-07-14 Hughes Aircraft Co N-bit sum-carry accumulator
KR100257124B1 (ko) 1997-05-16 2000-05-15 문상재 공통 피승수 모듈라 곱셈을 이용한 고속 멱승 방법
US6356636B1 (en) * 1998-07-22 2002-03-12 Motorola, Inc. Circuit and method for fast modular multiplication
GB2352309B (en) * 1999-07-21 2004-02-11 Advanced Risc Mach Ltd A system and method for performing modular multiplication
FR2822260A1 (fr) 2001-03-14 2002-09-20 Bull Sa Procedes et dispositifs pour accelerer le temps de calcul d'un produit de montgomery d'un multiplication et d'une exponentiation modulaire
US20020172355A1 (en) * 2001-04-04 2002-11-21 Chih-Chung Lu High-performance booth-encoded montgomery module
JP2004258141A (ja) * 2003-02-24 2004-09-16 Fujitsu Ltd モンゴメリ乗算剰余の多倍長演算のための演算装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08263316A (ja) * 1994-11-08 1996-10-11 Sgs Thomson Microelectron Sa モンゴメリ法によるモジュラ乗算の実施方法
JP2002236581A (ja) * 2001-02-08 2002-08-23 Matsushita Electric Ind Co Ltd 演算回路、演算方法、及びプログラム記録媒体
JP2003216034A (ja) * 2002-01-23 2003-07-30 Ail Kk べき乗剰余演算器
JP2003216411A (ja) * 2002-01-23 2003-07-31 Sony Corp 多倍長演算処理装置およびicデバイス

Also Published As

Publication number Publication date
FR2867579B1 (fr) 2008-04-18
US20050198093A1 (en) 2005-09-08
FR2867579A1 (fr) 2005-09-16
DE102005010764A1 (de) 2005-09-29
JP4870932B2 (ja) 2012-02-08
US7805478B2 (en) 2010-09-28
KR20050088506A (ko) 2005-09-07
CN1702613A (zh) 2005-11-30

Similar Documents

Publication Publication Date Title
JP4870932B2 (ja) 多重精度を支援する拡張型モンゴメリモジュラ掛け算器
US7424504B2 (en) Arithmetic processor for accomodating different field sizes
EP0801345B1 (en) Circuit for modulo multiplication and exponentiation arithmetic
US6920473B2 (en) Method and apparatus for modular multiplying and calculating unit for modular multiplying
JP3605181B2 (ja) 掛け算累算命令を使用したデータ処理
US7543011B2 (en) Montgomery modular multiplier and method thereof using carry save addition
KR100591761B1 (ko) 몽고메리 모듈러 곱셈기 및 캐리 저장 가산을 이용한몽고메리 모듈러 곱셈 방법
JPH07253949A (ja) モジュラ・乗算およびモジュラ・べき乗を遂行する超小形電子系装置ならびにその遂行方法
WO1993002413A1 (en) High-speed modulo exponentiator device
JP4408712B2 (ja) 多倍長データ積和演算処理回路及びモンゴメリ積和剰余演算回路
US5528529A (en) Electronic multiplying and adding apparatus and method
Savas et al. Multiplier architectures for GF (p) and GF (2n)
Shieh et al. A new algorithm for high-speed modular multiplication design
Gutub et al. Efficient scalable VLSI architecture for Montgomery inversion in GF (p)
US7240204B1 (en) Scalable and unified multiplication methods and apparatus
US8533246B2 (en) Carry bucket-aware multiplication having bits with most significant bits set to zero
JP2006023647A (ja) 乗算剰余演算器及び情報処理装置
JP2006508464A (ja) ルックアップテーブルを備える乗算器
KR100836737B1 (ko) 중국인 나머지 정리(crt)와 캐리 저장 가산 기반의모듈러 곱셈 장치 및 방법
KR100946256B1 (ko) 다정도 캐리 세이브 가산기를 이용한 듀얼필드상의확장성있는 몽고매리 곱셈기
KR100858559B1 (ko) 잉여 이진수의 덧셈 방법, 잉여 이진수의 곱셈 방법, 잉여이진수 덧셈기 및 잉여 이진수 곱셈기
EP4095827A1 (en) Secure square root computation system, secure normalization system, methods for same, secure computation device, and program
US20230038504A1 (en) Secure inverse square root computation system, secure normalization system, methods therefor, secure computation apparatus, and program
Wei New residue signed-digit addition algorithm
Wong et al. Speeding up the Montgomery Exponentiation with CMM-SDR Over GPU with Maxwell and Pascal Architecture

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080227

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110308

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110608

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110705

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111004

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20111025

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20111118

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 4870932

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20141125

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250