(57)【要約】【課題】  １ポートＲＡＭのみを用いてモンゴメリ乗算を行うことを可能にするモンゴメリ乗算のための演算回路を提供する。【解決手段】  ａ［ｓ−１：０］及びｂ［ｓ−１：０］を格納する同期式１ポートＲＡＭのメモリＭ２からｂ［ｉ］を読み出してレジスタＲ１に格納する第１読み出し処理と、メモリＭ２からａ［ｊ］を、ｔ［ｓ−１：０］を格納する同期式１ポートＲＡＭのメモリＭ１からｔ［ｊ］を、レジスタＲ１からｂ［ｉ］を、レジスタＲ２から値ＲＣを夫々読み出し、ｔ［ｊ］＋ａ［ｊ］＊ｂ［ｊ］＋ＲＣを演算する積和演算処理を行う積和演算回路１０に入力する第２読み出し処理と、レジスタＲ２に演算結果データＦＨを、メモリＭ１にｔ［ｊ］として演算結果データＦＬを書き込む書き込み処理と、を実行可能であり、第２読み出し処理、積和演算処理及び書き込み処理を繰り返し実行する第１サブループ処理を、第１読み出し処理の実行後に実行する。【選択図】        図３
2010164721.tif 000002
【特許請求の範囲】
【請求項１】
ビット幅ｒの第１変数、第２変数、第３変数、第４変数を受け付け、前記第３変数と、前記第１変数と前記第２変数の積算結果と、前記第４変数の和を演算してビット幅２ｒの演算結果データを出力する積和演算処理を行う積和演算回路と、
ビット幅ｒ、要素数ｓの中間結果格納用配列を格納する記憶領域を備えた同期式１ポートＲＡＭで構成され、前記中間結果格納用配列の各要素を前記第３変数として前記積和演算回路に出力する第１メモリと、
ビット幅ｒ、要素数ｓの第１配列及び第２配列を格納する記憶領域を備えた同期式１ポートＲＡＭで構成され、前記第１配列の各要素を前記第１変数として前記積和演算回路に出力する第２メモリと、
前記第２メモリから前記第２配列を要素単位で受け付けて記憶し、前記第２変数として前記積和演算回路に出力する被乗数格納用レジスタと、
前記演算結果データの内の上位ｒビットからなる上位ビット側データを受け付けて記憶し、前記第４変数として前記積和演算回路に出力するキャリーレジスタと、を備えて構成され、
前記第２メモリから、所定の第１ループカウンタ値で示される前記第２配列の要素を読み出して前記被乗数格納用レジスタに格納する第１読み出し処理と、
前記第２メモリから所定の第２ループカウンタ値で示される前記第１配列の要素を読み出し、前記第１メモリから前記第２ループカウンタ値で示される前記中間結果格納用配列の要素を読み出し、前記被乗数格納用レジスタの値を読み出し、前記キャリーレジスタの値を読み出し、夫々、前記積和演算回路に入力する第２読み出し処理と、
前記キャリーレジスタに前記上位ビット側データを書き込むと共に、前記第１メモリに、前記演算結果データの内の下位ｒビットからなる下位ビット側データを、前記第２ループカウンタ値で示される前記中間結果格納用配列の要素として書き込む書き込み処理と、を実行可能に構成され、
前記第２読み出し処理、前記積和演算処理、前記書き込み処理、及び、前記第２ループカウンタ値の更新を繰り返し実行する第１サブループ処理を、前記第１読み出し処理の実行後に実行することを特徴とするモンゴメリ乗算のための演算回路。
【請求項２】
前記第２メモリが、更に、ビット幅ｒ、要素数ｓの第３配列と、ビット幅ｒの被乗算変数を格納する記憶領域を備え、前記第３配列の各要素を対応する前記第１配列の各要素として前記積和演算回路に出力し、前記被乗算変数を前記第２配列の各要素として前記被乗数格納用レジスタに出力するように構成されていることを特徴とする請求項１に記載のモンゴメリ乗算のための演算回路。
【請求項３】
前記第３配列の各要素を対応する前記第１配列の各要素として用いた前記第２読み出し処理、前記積和演算処理、前記書き込み処理、及び、前記第２ループカウンタ値の更新を繰り返し実行する第２サブループ処理を実行可能に構成され、
少なくとも、通常の前記第１読み出し処理、前記第１サブループ処理、前記被乗算変数を前記第２配列の各要素として用いた前記第１読み出し処理、前記第２サブループ処理、及び、前記第１ループカウンタ値の更新を、この順に繰り返し実行するメインループ処理を実行することを特徴とする請求項２に記載のモンゴメリ乗算のための演算回路。
【請求項４】
請求項１〜３の何れか１項に記載のモンゴメリ乗算のための演算回路を用い、ＲＳＡ暗号の暗号化処理または復号化処理の少なくとも何れか一方を行うことを特徴とするＲＳＡ暗号回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、モンゴメリ乗算のための演算回路、及び、モンゴメリ乗算のための演算回路を用いて暗号化処理及び復号化処理を行う暗号回路に関する。
【背景技術】
【０００２】
インターネット等のネットワークを利用して契約や決済を行う電子商取引には、例えば、ネットワーク上で商品を販売する電子商店による商取引（企業と消費者間の商取引）があり、消費者は、電子商店のＷｅｂサイトを閲覧して商品を選択し、決済方法を指定して購入することができる。
【０００３】
このような電子商取引では、成りすましや盗聴、改ざんの防止等のセキュリティの確保が課題となっており、例えば、成りすましを防止するための認証技術の一つとして、公開鍵暗号が利用されている。ここで、公開鍵暗号は、暗号化のための暗号化鍵と復号化のための復号化鍵の異なる２つの鍵を用いるものであり、暗号化鍵からの復号化鍵の推測、及び、暗号文の解読は、極めて困難、或いは、不可能となっている。鍵の所有者は、暗号化鍵（公開鍵）を公開し、復号化鍵（秘密鍵）を第３者に知られないように管理することにより、公開鍵を利用する相手側の情報が第３者に知られないようにすることができる。
【０００４】
例えば、上述した電子商店と消費者の間の商取引では、電子商店が、暗号化鍵（公開鍵）を一般に公開し、復号化鍵（秘密鍵）を第３者に知られないように管理する。消費者は、電子商店側が公開している暗号化鍵（公開鍵）を利用して、商取引に関する情報を暗号化して電子商店に送信する。電子商店は、消費者から受け取った暗号文を復号化鍵（秘密鍵）で復号化し、消費者に対し商品の販売を行う。鍵の所有者である電子商店は、復号化鍵（秘密鍵）を第３者に知られないように管理することにより、商取引に関する情報が第３者に知られるのを防止でき、消費者の個人情報等が第３者に知られるのを防止することができる。
【０００５】
公開鍵暗号としては、例えば、ＲＳＡ（Ｒｉｖｅｓｔ  Ｓｈａｍｉｒ  Ａｄｌｅｍａｎ）暗号がある。ＲＳＡ暗号は、解読するために、非常に大きな整数の素因数分解が必要であり、コンピュータによる解読であっても、現実的な計算時間での解読は困難となっている。
【０００６】
以下、ＲＳＡ暗号の暗号化方法及び復号化方法について簡単に説明する。
公開鍵（ｅ、ｎ）を用いて平文Ｍを暗号化し、暗号文Ｃを生成する場合、暗号文Ｃは、以下の数１により生成される。
【０００７】
［数１］
Ｃ＝Ｍｅｍｏｄｎ
（但し、０≦Ｍ＜ｎ）
【０００８】
秘密鍵（ｄ、ｎ）を用いて暗号文Ｃを復号化し、平文Ｍを生成する場合、平文Ｍは、以下の数２により生成される。
【０００９】
［数２］
Ｍ＝Ｃｄｍｏｄｎ
【００１０】
尚、公開鍵（ｅ、ｎ）、秘密鍵（ｄ、ｎ）には、以下の数３の関係がある。
【００１１】
［数３］
ｎ＝ｐ×ｑ（ｐ、ｑは素数）
ｅ×ｄ≡１ｍｏｄ（ｐ−１）（ｑ−１）
【００１２】
具体的には、例えば、ｐ＝３、ｑ＝１１、ｅ＝３、ｄ＝７とすると、平文Ｍ＝７を暗号化して得られる暗号文Ｃは、数１より、Ｃ＝７3ｍｏｄ（３×１１）＝３４３ｍｏｄ３３＝１３となる。
【００１３】
また、暗号文Ｃ＝１３を復号化して得られる平文Ｍは、数２より、Ｍ＝１３７ｍｏｄ３３＝６２７４８５１７ｍｏｄ３３＝７となる。従って、数１及び数２による暗号化及び復号化は、正しく行われることが分かる。
【００１４】
ところで、上述したＲＳＡ暗号では、数１及び数２に示すように、べき乗演算、剰余演算を行っている。一般的に、鍵や平文は、１０２４ビット以上の非常に大きな桁数となるため、演算装置上で数１及び数２をそのまま用いて暗号化及び復号化を行うと、桁あふれを起こす可能性がある。
【００１５】
このため、ＲＳＡ暗号の暗号化及び復号化では、例えば、桁あふれしない剰余演算の手法の一例であるモンゴメリ乗算が用いられる。モンゴメリ乗算では、Ｎビットの剰余算をＮビットのメモリ空間で行うことができる。
【００１６】
以下、モンゴメリ乗算について簡単に説明する。
ＲＳＡ暗号の数１式Ｃ＝Ｍｅｍｏｄｎの右辺は、Ｍ２ｍｏｄｎ＝Ｍ×Ｍｍｏｄｎ、Ｍ３ｍｏｄｎ＝Ｍ×Ｍ２ｍｏｄｎ、…Ｍｅｍｏｄｎ＝Ｍ×Ｍｅ−１ｍｏｄｎのように、逐次計算で求められる。即ち、γ＝α×βｍｏｄｎを繰り返し行うことで計算できる。
【００１７】
ここで、モンゴメリ乗算では、コンピュータ上における乗算のため、定数Ｒ＝２Ｎを用いる。γ＝α×βｍｏｄｎの両辺にＲをかけてｍｏｄｎをとると、γＲｍｏｄｎ＝αＲ×βＲ×Ｒ−１ｍｏｄｎとなる。ここで、Ｚ＝γＲｍｏｄｎ、Ａ＝αＲｍｏｄｎ、Ｂ＝βＲｍｏｄｎとすると、モンゴメリ乗算の演算式は、以下の数４で表される。
【００１８】
［数４］
Ｚ＝Ａ×Ｂ×Ｒ−１ｍｏｄｎ
【００１９】
ここで、図９は、数４に示すモンゴメリ乗算を、演算装置上で演算する場合におけるプログラムコード（疑似コード）の一例を示している。
【００２０】
尚、ＲＳＡ暗号において、例えば、平文Ｍのビット数は非常に大きい（例えば１０２４ビット等）ため、ＲＳＡ暗号の暗号化処理等で用いるモンゴメリ乗算の各変数Ａ、Ｂ、ｎのビット数も大きい。従って、モンゴメリ乗算を演算装置上で行うためには、変数Ａ、Ｂ、ｎを演算装置が計算可能なビット幅ｒで分割する必要がある。具体的には、変数Ａ、Ｂ、ｎが同じビット幅の場合、分割数をｓとすると、Ａ＝｛ａ［ｓ−１］、ａ［ｓ−２］、・・・、ａ［０］｝、Ｂ＝｛ｂ［ｓ−１］、ｂ［ｓ−２］、・・・、ｂ［０］｝、ｎ＝｛ｎ［ｓ−１］、ｎ［ｓ−２］、・・・、ｎ［０］｝、Ｎ＝ｒ×ｓとなる。
【００２１】
また、図９において、（Ｃ，Ｓ）は計算結果を格納する変数を示しており、変数Ｃは（Ｃ，Ｓ）の上位ｒビットを、変数Ｓは（Ｃ，Ｓ）の下位ｒビットを夫々示している。ｔ［ｓ＋１］、ｔ［ｓ］、・・・、ｔ［０］、ｍは夫々、ビット幅ｒのテンポラリ変数である。
【００２２】
図９から分かるように、（Ｃ，Ｓ）：＝ｔ［ｊ］＋ａ［ｊ］＊ｂ［ｉ］＋Ｃの演算式は、メインループ内のサブループ内にあり、演算回数（（ｓ−１）×（ｓ−１））が最も多くなっている。従って、ＲＳＡ暗号の暗号化及び復号化の高速化のために、モンゴメリ演算における（Ｃ，Ｓ）：＝ｔ［ｊ］＋ａ［ｊ］＊ｂ［ｉ］＋Ｃの演算を高速に行うことが求められている。尚、図９中の＊は、積算（×）を示している。
【００２３】
ここで、モンゴメリ乗算を高速に行う演算装置としては、例えば、ビット幅ｒの変数ｘ１、ｘ２、ｘ３、ｘ４を夫々格納する第１乃至第４レジスタと、２ポートＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）で構成されるメモリＡと、２ポートＲＡＭまたは１ポートＲＡＭで構成されるメモリＢと、第１乃至第４レジスタから変数ｘ１、ｘ２、ｘ３、ｘ４を受け付けて、変数ｘ１と、変数ｘ２と変数ｘ３の積算結果と、変数ｘ４の和を算出し、ビット幅２ｒまたは２ｒ＋１の演算結果Ｑを出力するパイプライン処理を実行可能な演算器と、を備え、パイプライン処理の実行後、演算結果Ｑの下位ｒビットからなるデータＱＬをメモリＡに、演算結果Ｑの上位ｒビットからなるデータＱＨを第４レジスタに書き込むメモリ書き込み処理と、メモリＡから変数ｘ１を読み出して第１レジスタに出力し、メモリＢから変数ｘ３を読み出して第３レジスタに出力するメモリ読み出し処理を実行する演算回路が提案されている（例えば、特許文献１参照）。
【００２４】
ここで、図１０は、上記特許文献１に記載の演算回路の概略構成例を示している。また、図１１（ａ）は、メモリ読み出し処理（メモリリードサイクル）及びメモリ書き込み処理（メモリライトサイクル）をシリアルに行う場合の処理の流れを、図１１（ｂ）は、上記特許文献１において、メモリＢが２ポートＲＡＭで構成され、メモリ読み出し処理及びメモリ書き込み処理をパイプラインで行う場合の処理の流れを示している。
【００２５】
図１１から分かるように、特許文献１に記載の演算回路では、メモリ読み出し処理及びメモリ書き込み処理をパイプラインで行えるので、メモリ読み出し処理及びメモリ書き込み処理をシリアルに行う場合に比べ、高速化できる。
【先行技術文献】
【特許文献】
【００２６】
【特許文献１】特開２００２−２０７５８９号公報
【発明の概要】
【発明が解決しようとする課題】
【００２７】
しかしながら、一般的に、モンゴメリ乗算を演算回路で行う場合において、例えば、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ、特定用途向け集積回路）で演算回路を実現する場合、２ポートＲＡＭは、標準のＡＳＩＣライブラリでサポートされていない場合が多い。また、２ポートＲＡＭがサポートされている場合でも、２リード２ライト方式による面積の大きな２ポートＲＡＭしかサポートされていない場合がある。回路設計の標準化やＩＰ（ｉｎｔｅｌｌｅｃｔｕａｌ  ｐｒｏｐｅｒｔｙ）化の観点からは、確実にサポートされていない場合が多い２ポートＲＡＭを用いることは好ましくない。
【００２８】
本発明は上記の問題に鑑みてなされたものであり、その目的は、１ポートＲＡＭのみを用いてモンゴメリ乗算を行うことを可能にするモンゴメリ乗算のための演算回路を提供する点にある。また、１ポートＲＡＭのみを用いてモンゴメリ乗算を行うことが可能なＲＳＡ暗号回路を提供する。
【課題を解決するための手段】
【００２９】
上記目的を達成するための本発明に係るモンゴメリ乗算のための演算回路は、ビット幅ｒの第１変数、第２変数、第３変数、第４変数を受け付け、前記第３変数と、前記第１変数と前記第２変数の積算結果と、前記第４変数の和を演算してビット幅２ｒの演算結果データを出力する積和演算処理を行う積和演算回路と、ビット幅ｒ、要素数ｓの中間結果格納用配列を格納する記憶領域を備えた同期式１ポートＲＡＭで構成され、前記中間結果格納用配列の各要素を前記第３変数として前記積和演算回路に出力する第１メモリと、ビット幅ｒ、要素数ｓの第１配列及び第２配列を格納する記憶領域を備えた同期式１ポートＲＡＭで構成され、前記第１配列の各要素を前記第１変数として前記積和演算回路に出力する第２メモリと、前記第２メモリから前記第２配列を要素単位で受け付けて記憶し、前記第２変数として前記積和演算回路に出力する被乗数格納用レジスタと、前記演算結果データの内の上位ｒビットからなる上位ビット側データを受け付けて記憶し、前記第４変数として前記積和演算回路に出力するキャリーレジスタと、を備えて構成され、前記第２メモリから、所定の第１ループカウンタ値で示される前記第２配列の要素を読み出して前記被乗数格納用レジスタに格納する第１読み出し処理と、前記第２メモリから所定の第２ループカウンタ値で示される前記第１配列の要素を読み出し、前記第１メモリから前記第２ループカウンタ値で示される前記中間結果格納用配列の要素を読み出し、前記被乗数格納用レジスタの値を読み出し、前記キャリーレジスタの値を読み出し、夫々、前記積和演算回路に入力する第２読み出し処理と、前記キャリーレジスタに前記上位ビット側データを書き込むと共に、前記第１メモリに、前記演算結果データの内の下位ｒビットからなる下位ビット側データを、前記第２ループカウンタ値で示される前記中間結果格納用配列の要素として書き込む書き込み処理と、を実行可能に構成され、前記第２読み出し処理、前記積和演算処理、前記書き込み処理、及び、前記第２ループカウンタ値の更新をこの順に繰り返し実行する第１サブループ処理を、前記第１読み出し処理の実行後に実行することを第１の特徴とする。
【００３０】
上記特徴の本発明に係るモンゴメリ乗算のための演算回路は、前記第２メモリが、更に、ビット幅ｒ、要素数ｓの第３配列と、ビット幅ｒの被乗算変数を格納する記憶領域を備え、前記第３配列の各要素を対応する前記第１配列の各要素として前記積和演算回路に出力し、前記被乗算変数を前記第２配列の各要素として前記被乗数格納用レジスタに出力するように構成されていることを第２の特徴とする。
【００３１】
上記特徴の本発明に係るモンゴメリ乗算のための演算回路は、前記第３配列の各要素を対応する前記第１配列の各要素として用いた前記第２読み出し処理、前記積和演算処理、前記書き込み処理、及び、前記第２ループカウンタ値の更新をこの順に繰り返し実行する第２サブループ処理を実行可能に構成され、少なくとも、通常の前記第１読み出し処理、前記第１サブループ処理、前記被乗算変数を前記第２配列の各要素として用いた前記第１読み出し処理、前記第２サブループ処理、及び、前記第１ループカウンタ値の更新を、この順に繰り返し実行するメインループ処理を実行することを第３の特徴とする。
【００３２】
上記目的を達成するための本発明に係るＲＳＡ暗号回路は、上記第１〜第３の特徴のモンゴメリ乗算のための演算回路を用い、ＲＳＡ暗号の暗号化処理または復号化処理の少なくとも何れか一方を行うことを特徴とする。
【発明の効果】
【００３３】
上記第１の特徴のモンゴメリ乗算のための演算回路によれば、２ポートＲＡＭを用いずに１ポートＲＡＭのみを用いて構成されているので、例えば、ＡＳＩＣで暗号化及び復号化を行う暗号回路を構成する場合等において、ＡＳＩＣライブラリに依存しない汎用性の高い回路を実現できる。これにより、上記第１の特徴のモンゴメリ乗算のための演算回路は、よりモンゴメリ乗算のための演算回路の標準化やＩＰ化に有用である。
【００３４】
また、上記特徴のモンゴメリ乗算のための演算回路によれば、書き込み処理において、積和演算回路から出力される演算結果データの内、上位ビット側データを前記キャリーレジスタに、下位ビット側データを前記第１メモリに書き込むように構成されているので、積和演算処理と書き込み処理を並行して実行するように制御すれば、回路全体で、演算速度を高速にすることができる。
【図面の簡単な説明】
【００３５】
【図１】本発明に係るモンゴメリ乗算のための演算回路を用いて構成されたＲＳＡ暗号回路を搭載したＩＣカードの概略部分構成例を示す概略部分ブロック図である。
【図２】本発明に係るＲＳＡ暗号回路の処理アルゴリズムを示すフローチャートである。
【図３】本発明に係るモンゴメリ乗算のための演算回路の概略構成例を示す概略ブロック図である。
【図４】同期式１ポートＲＡＭの概略構成例を示す概略ブロック図である。
【図５】同期式１ポートＲＡＭの動作を説明するためのタイミング図である。
【図６】本発明に係るモンゴメリ乗算のための演算回路の処理アルゴリズムの内、第１サブループ処理の処理アルゴリズムを示すフローチャートである。
【図７】本発明に係るモンゴメリ乗算のための演算回路の処理アルゴリズムの内、第１サブループ処理の動作を説明するためのタイミング図である。
【図８】本発明に係るモンゴメリ乗算のための演算回路の処理アルゴリズムの内、第１サブループ処理の流れを模式的に示す模式図である。
【図９】モンゴメリ演算を演算装置で行う場合における演算装置の動作を説明するためのプログラムコードを示す図である。
【図１０】従来技術に係る演算回路の概略構成例を示す概略ブロック図である。
【図１１】従来技術に係る演算回路において、メモリ読み出し処理とメモリ書き込み処理をシリアルに行う場合とパイプラインで行う場合の処理の流れを模式的に示す模式図である。
【発明を実施するための形態】
【００３６】
以下、本発明に係るモンゴメリ乗算のための演算回路（以下、適宜「本発明回路」と略称する）、及びＲＳＡ暗号回路の実施形態を図面に基づいて説明する。
【００３７】
本発明回路及び本発明回路を用いたＲＳＡ暗号回路の一実施形態について、図１〜図８を基に説明する。
【００３８】
ここで、図１は、本発明回路１を用いて構成されたＲＳＡ暗号回路１０３を搭載したＩＣカード１００の概略部分構成例を、図３は、本発明回路１の概略構成例を、夫々示している。
【００３９】
ＩＣカード１００は、本実施形態では、接触型ＩＣカードであり、図１に示すように、ＩＣカードリーダとデータ通信を行うためのＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）１０１、ＩＣカード１００内の各機能を制御するＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０２、ＩＣカード１００の各種機能を実現するプログラム等を格納したＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１０４、ＲＡＭ１０５、フラッシュメモリ等の不揮発性メモリ１０６、及び、ＲＳＡ暗号による暗号化処理等を行うＲＳＡ暗号回路１０３を備えて構成されている。尚、本実施形態では、接触型ＩＣカードを想定しているが、非接触型ＩＣカードであっても良い。
【００４０】
また、ＩＣカード１００は、本実施形態では、ＩＣカードリーダとのデータ通信において、ＩＣカードリーダに対し、個人情報等のセキュリティ情報を含む送信データを送信する場合に、ＲＳＡ暗号回路１０３を用いて送信データを暗号化する。
【００４１】
ＲＳＡ暗号回路１０３は、本実施形態では、ＡＳＩＣで実現されており、本発明回路１及びループカウンタ回路１０３ａを備え、セキュリティ情報を含む送信データの暗号化処理を行うように構成されている。ループカウンタ回路１０３ａは、本実施形態では、図９に示すプログラムコードで用いられるカウント値の内、メインループ処理の処理回数を制御する第１ループカウント値ｉを生成する第１カウンタ回路（図示せず）と、図９に示すプログラムコードで用いられるカウント値の内、サブループ処理の処理回数を制御する第２ループカウント値ｊを生成する第２カウンタ回路（図示せず）を備えて構成されている。
【００４２】
ここで、図２は、本実施形態におけるＲＳＡ暗号回路１０３の処理アルゴリズムを示している。具体的には、ＲＳＡ暗号回路１０３は、先ず、平文Ｍ、定数Ｒ＝２Ｎを用いてモンゴメリ変換を行い（ステップ＃１０１）、暗号化鍵ｅ＝Ｋ［ｋ−１：０］を読み出し（＃１０２）、変数ｉの値をｋ−１に初期化する（ステップ＃１０３）。その後、本発明回路１が、Ａ＝ＡＡＲ−１ｍｏｄｎで表される２乗算のモンゴメリ乗算を行い（ステップ＃１０４）、Ｋ［ｉ］＝１の場合は（ステップ＃１０５で「ＹＥＳ」分岐）、本発明回路１が、Ａ＝ＡＢＲ−１ｍｏｄｎで表される掛け算のモンゴメリ乗算を行う（ステップ＃１０６）。変数ｉ≠０の場合は（ステップ＃１０７で「ＮＯ」分岐）、ｉを１減算して（ステップ＃１０８）ステップ＃１０４に移行する。変数ｉ＝０の場合は（ステップ＃１０７で「ＹＥＳ」分岐）、Ｃ＝ＡＲ−１ｍｏｄｎで表されるモンゴメリ逆変換を行い（ステップ＃１０９）、処理を終了する。
【００４３】
本発明回路１は、図９のプログラムコードで示される処理を行うように構成されており、図３に示すように、ビット幅ｒの第１変数Ｘ、第２変数Ｙ、第３変数Ｚ、第４変数Ｃを受け付け、第３変数Ｚと、第１変数Ｘと第２変数Ｙの積算結果と、第４変数Ｃの和（Ｆ＝Ｚ＋Ｘ＊Ｙ＋Ｃ）を演算してビット幅２ｒの演算結果データＦを出力する積和演算処理を行う積和演算回路１０と、ビット幅ｒ、要素数ｓの中間結果格納用配列ｔを格納する記憶領域を備えた同期式１ポートＲＡＭで構成され、中間結果格納用配列ｔの各要素を第３変数Ｚとして積和演算回路１０に出力する第１メモリＭ１と、ビット幅ｒ、要素数ｓの第１配列ａ［ｓ−１：０］及び第２配列ｂ［ｓ−１：０］を格納する記憶領域を備えた同期式１ポートＲＡＭで構成され、第１配列ａ［ｓ−１：０］の各要素を第１変数Ｘとして積和演算回路１０に出力する第２メモリＭ２と、第２メモリＭ２から第２配列ｂ［ｓ−１：０］を要素単位で受け付けて記憶し、第２変数Ｙとして積和演算回路１０に出力する被乗数格納用レジスタＲ１と、演算結果データＦの内の上位ｒビットからなる上位ビット側データＦＨを受け付けて記憶し、第４変数Ｃとして積和演算回路１０に出力するキャリーレジスタＲ２と、を備えて構成されている。
【００４４】
尚、本実施形態では、本発明回路１が、図９に示す第１サブループ処理及び第２サブループ処理を含むメインループ処理を実行可能に構成されている場合を想定して説明するが、サブループ処理毎に本発明回路１を構成しても良い。
【００４５】
より具体的には、第１メモリＭ１は、本実施形態では、要素数がｓ＋２の中間結果格納用配列ｔ［ｓ＋１：０］を記憶可能な記憶領域を備えている。本実施形態では、中間結果格納用配列ｔの内、ｔ［ｓ−１：０］を第１サブループ処理及び第２サブループ処理のために、ｔ［ｓ］、ｔ［ｓ＋１］をメインループ処理の実行のために用いるように構成されている。
【００４６】
ここで、図４は、本実施形態の第１メモリＭ１及び第２メモリＭ２の概略構成例を示している。また、図５（ａ）は、本実施形態の第１メモリＭ１及び第２メモリＭ２の読み出し処理における動作タイミングを、図５（ｂ）は、本実施形態の第１メモリＭ１及び第２メモリＭ２の書き込み処理における動作タイミングを、夫々示している。同期式１ポートＲＡＭである第１メモリＭ１は、図５（ａ）に示すように、読み出し処理において、クロック信号ＣＬＫに同期して動作し、チップイネーブル信号ＣＥ＃がＬレベルの場合に、アドレス信号ＡＤによって示される記憶領域に記憶されたデータＤを、出力端子ＤＯＵＴから出力する。同様に、第１メモリＭ１は、図５（ｂ）に示すように、書き込み処理において、クロック信号ＣＬＫに同期して動作し、チップイネーブル信号ＣＥ＃がＬレベルの場合に、アドレス信号ＡＤによって示される記憶領域に、データ入力端子ＤＩＮから入力されたデータＤを書き込む。
【００４７】
尚、本実施形態では、メインループ処理のために、中間結果格納用配列ｔの要素数をｓ＋２としているが、本発明回路をサブループ処理のみを行うように構成した場合等には、中間結果格納用配列ｔの要素数をｓとしても良い。また、第１メモリＭ１には、中間結果格納用配列ｔ以外の変数を格納可能に構成しても良い。
【００４８】
第２メモリＭ２は、本実施形態では、第１サブループ処理を実行するための第１配列ａ［ｓ−１：０］及び第２配列ｂ［ｓ−１：０］を記憶するための記憶領域に加え、図９に示す第２サブループ処理を実行するために、更に、ビット幅ｒ、要素数ｓの第３配列ｎ［ｓ−１：０］と、ビット幅ｒの被乗算変数ｍを格納する記憶領域を備えている。
【００４９】
第２メモリＭ２は、第２サブループ処理では、第３配列ｎ［ｓ−１：０］の各要素を対応する第１配列ａ［ｓ−１：０］の各要素として積和演算回路１０に出力し、被乗算変数ｍを第２配列ｂ［ｓ−１：０］の各要素として被乗数格納用レジスタＲ１に出力するように構成されている。尚、第２メモリＭ２は、第１メモリＭ１と同じ構成（図４）であり、同じ動作タイミング（図５）で動作する。
【００５０】
本発明回路１は、第２メモリＭ２から、第１ループカウンタ値ｉで示される第２配列ｂ［ｓ−１：０］の要素を読み出して被乗数格納用レジスタＲ１に格納する第１読み出し処理と、第２メモリＭ２から第２ループカウンタ値ｊで示される第１配列ａ［ｓ−１：０］の要素を読み出し、第１メモリＭ１から第２ループカウンタ値ｊで示される中間結果格納用配列ｔの要素を読み出し、被乗数格納用レジスタＲ１の値ＲＸを読み出し、キャリーレジスタＲ２の値ＲＣを読み出し、夫々、積和演算回路１０に入力する第２読み出し処理と、キャリーレジスタＲ２に上位ビット側データＦＨを書き込むと共に、第１メモリＭ１に、演算結果データＦの内の下位ｒビットからなる下位ビット側データＦＬを、第２ループカウンタ値ｊで示される中間結果格納用配列ｔの要素として書き込む書き込み処理と、を実行可能に構成され、第２読み出し処理、積和演算処理、書き込み処理、及び、第２ループカウンタ値ｊの更新を繰り返し実行する第１サブループ処理を、第１読み出し処理の実行後に実行するように構成されている。
【００５１】
更に、本発明回路１は、第３配列ｎ［ｓ−１：０］の各要素を対応する第１配列ａ［ｓ−１：０］の各要素として用いた第２読み出し処理、積和演算処理、書き込み処理、及び、第２ループカウンタ値ｊの更新を繰り返し実行する第２サブループ処理を実行可能に構成されている。
【００５２】
本発明回路１は、図９に示すプログラムコードの実行のために、少なくとも、通常の第１読み出し処理、第１サブループ処理、被乗算変数ｍを第２配列ｂ［ｓ−１：０］の各要素として用いた第１読み出し処理、第２サブループ処理、及び、第１ループカウンタ値ｉの更新を、この順に繰り返し実行するメインループ処理を実行するように構成されている。
【００５３】
ここで、図６は、図９に示すプログラムコードの内、実行回数が最も多い第１サブループ処理の処理アルゴリズムについて示しており、図７は、第１サブループ処理を実行したときの本発明回路１を構成する各回路の動作タイミングを示している。尚、図７において、Ｍｎ＿ＣＥ＃（ｎ＝１、２）は、第１メモリＭ１、第２メモリＭ２夫々のチップイネーブル信号を、Ｍｎ＿ＷＥ＃は、第１メモリＭ１、第２メモリＭ２夫々のライトイネーブル信号を、Ｍｎ＿ＤＯＵＴは第１メモリＭ１、第２メモリＭ２夫々の出力信号の値を示している。
【００５４】
本発明回路１は、第１サブループ処理を開始すると、先ず、第１メモリＭ１の中間結果格納用配列ｔの内、ｔ［ｓ−１：０］を初期化し、キャリーレジスタＲ２の値ＲＣを０に初期化する（ステップ＃２１０）。続いて、第２カウンタ回路を初期化して第２ループカウンタ値ｊの値を０に設定する（ステップ＃２２０）。引き続き、本発明回路１は、第２メモリＭ２からｂ［ｉ］を読み出して被乗数格納用レジスタＲ１に格納する（ステップ＃２３０、第１読み出し処理）。
【００５５】
引き続き、本発明回路１は、第１メモリＭ１からｔ［ｊ］を読み出し（ステップ＃２４１）、第２メモリＭ２からａ［ｊ］を読み出し（ステップ＃２４２）、被乗数格納用レジスタＲ１の値ＲＸ（＝ｂ［ｉ］）を読み出し（ステップ＃２４３）、キャリーレジスタＲ２の値ＲＣを読み出し（ステップ＃２４４）、夫々、積和演算回路１０に入力する（ステップ＃２４０、第２読み出し処理）。尚、ステップ＃２４１〜ステップ＃２４４は、ここでは、並行して実行する。
【００５６】
ステップ＃２４０の第２読み出し処理の実行後、本発明回路１の積和演算回路１０が、ステップ＃２４０で入力された各値を用いて、ｔ［ｊ］＋ａ［ｊ］＊ｂ［ｊ］＋ＲＣを演算し、その結果を２ｒビットの結果データＦとして出力する（ステップ＃２５０、積和演算処理）。更に、本発明回路１は、キャリーレジスタＲ２に前回の上位ビット側データＦＨ（ｉ＝０、ｊ＝０の場合は初期値０）を書き込み（ステップ＃２６１）、並行して、第１メモリＭ１に、下位ビット側データＦＬ（ｉ＝０、ｊ＝０の場合は初期値０）をｔ［ｊ］として書き込む（ステップ＃２６２）ことにより、書き込み処理（ステップ＃２６０）を実行する。尚、ステップ＃２５０の積和演算処理とステップ＃２６０の書き込み処理は並行して実行する。
【００５７】
引き続き、本発明回路１は、第２ループカウンタ値ｊの値がｓ−１でない場合（ステップ＃２７０で「ＮＯ」分岐）、第２ループカウンタ値ｊの値を１つインクリメントし（ステップ＃２８０）、ステップ＃２４０に移行する。本発明回路１は、第２ループカウンタ値ｊの値がｓ−１である場合（ステップ＃２７０で「ＹＥＳ」分岐）、第１サブループ処理を終了する。
【００５８】
ここで、図８は、本発明回路１の第１サブループ処理の流れを示している。図７及び図８から分かるように、本発明回路１は、積和演算回路１０による積和演算処理と、第１メモリＭ１及びキャリーレジスタＲ２に対する書き込み処理を並行して実行できる。従って、積和演算回路１０に各変数を入力する第２読み出し処理を実行するメモリリードサイクルと、前回の積和演算回路１０における演算結果を第１メモリＭ１及びキャリーレジスタＲ２に書き込む書き込み処理及び積和演算処理を実行するメモリライトサイクルの２つのサイクルで１つのループサイクルを構成することができ、図１１に示す従来技術のように、３つまたは４つのサイクルで１つのループサイクルを構成する場合に比べ、演算処理時間の高速化を図ることができる。
【００５９】
尚、図２から分かるように、本実施形態のＲＳＡ暗号回路１０３では、モンゴメリ乗算が繰り返し行われており、本発明回路１によりモンゴメリ乗算を行うように構成すれば、１ポートＲＡＭのみを用いてモンゴメリ乗算を行うことが可能になり、ＡＳＩＣライブラリに依存しない汎用性の高いＲＳＡ暗号回路１０３を実現できる。また、上述したように、本発明回路１では、従来のモンゴメリ乗算のための演算回路に比べ、演算処理時間の高速化を図ることができることから、モンゴメリ乗算を繰り返し実行するＲＳＡ暗号回路１０３の高速化を図ることができる。即ち、本発明回路１は、モンゴメリ乗算の繰り返し回数が多い暗号回路や演算回路に特に有用である。
【００６０】
〈別実施形態〉
〈１〉上記実施形態では、ＲＳＡ暗号回路１０３がＩＣカード１００に搭載されており、本発明回路１を用いて暗号化処理を行う場合について説明したが、例えば、ＩＣカードリーダ等に搭載されるＲＳＡ暗号回路１０３等では、本発明回路１を用いて復号化処理を行うように構成しても良い。
【００６１】
〈２〉上記実施形態では、本発明回路１をＲＳＡ暗号回路１０３に用いる場合について説明したが、モンゴメリ乗算を利用する他の暗号回路や演算回路で用いても良い。
【符号の説明】
【００６２】
１                本発明に係るモンゴメリ乗算のための演算回路
１０              積和演算回路
１００            ＩＣカード
１０１            Ｉ／Ｏ
１０２            ＣＰＵ
１０３            本発明に係るＲＳＡ暗号回路
１０３ａ          ループカウンタ回路
１０４            ＲＯＭ
１０５            ＲＡＭ
１０６            不揮発性メモリ
Ｍ１              第１メモリ
Ｍ２              第２メモリ
Ｒ１              被乗数格納用レジスタ
Ｒ２              キャリーレジスタ
ａ［ｓ−１：０］  第１配列
ｂ［ｓ−１：０］  第２配列
ｔ［ｓ＋１：０］  中間結果格納用配列
ｎ［ｓ−１：０］  第３配列
ｍ                被乗算変数
【図１】
2010164721.tif 000003
【図２】
2010164721.tif 000004
【図３】
2010164721.tif 000005
【図４】
2010164721.tif 000006
【図５】
2010164721.tif 000007
【図６】
2010164721.tif 000008
【図７】
2010164721.tif 000009
【図８】
2010164721.tif 000010
【図９】
2010164721.tif 000011
【図１０】
2010164721.tif 000012
【図１１】
2010164721.tif 000013