(57)【特許請求の範囲】
【請求項１】
モンゴメリのアルゴリズムを用いて乗算剰余計算を行う装置において、
積和演算を行いその演算結果を上位ｋビットと下位ｋビットとに分けて出力する第１積和回路と、積和演算を行いその演算結果を上位ｋビットと下位ｋビットとに分けて出力する第２積和回路と、乗算される２数を保持する第１及び第２レジスタと、前記第２積和回路の下位ｋビット出力を保持し、前記第２積和回路のその次の回の下位ｋビット出力を格納する第３レジスタと、前記第１積和回路の上位ｋビット出力を保持し、前記第１積和回路のその次の回の上位ｋビット出力を格納する第４レジスタと、剰余の法を保持する第５レジスタと、モンゴメリのアルゴリズムにおけるパラメータの値を保持する第６レジスタと、前記第２積和回路の上位ｋビット出力を保持し、前記第２積和回路のその次の回の上位ｋビット出力を格納する第７レジスタとを備え、
前記第１積和回路は、前記第１及び第２レジスタに保持された２数の所定ビットの値を乗算し、その乗算結果に前記第３レジスタに保持された数の所定ビットの値及び前記第４レジスタに保持された値を加算する演算を行い、
前記第２積和回路は、前記第５レジスタに保持された数の所定ビットの値と前記第６レジスタに保持された値とを乗算し、その乗算結果に前記第１積和回路の下位ｋビット出力及び前記第７レジスタに保持された値を加算する演算を行うように構成したことを特徴とするモンゴメリ法による乗算剰余計算装置。
【請求項２】
前記第１積和回路は、前記第１及び第２レジスタに保持された２数の所定ビットの値を乗算し、その乗算結果に前記第３レジスタに保持された数の所定ビットの値を加算し、その加算結果に前記第４レジスタに保持された値を加算するように構成した請求項１記載のモンゴメリ法による乗算剰余計算装置。
【請求項３】
前記第１積和回路は、前記第１及び第２レジスタに保持された２数の所定ビットの値を乗算し、その乗算結果に前記第４レジスタに保持された値を加算し、その加算結果に前記第３レジスタに保持された数の所定ビットの値を加算するように構成した請求項１記載のモンゴメリ法による乗算剰余計算装置。
【請求項４】
前記第２積和回路は、前記第５レジスタに保持された数の所定ビットの値と前記第６レジスタに保持された値とを乗算し、その乗算結果に前記第１積和回路の下位ｋビット出力を加算し、その加算結果に前記第７レジスタに保持された値を加算するように構成した請求項１記載のモンゴメリ法による乗算剰余計算装置。
【請求項５】
前記第２積和回路は、前記第５レジスタに保持された数の所定ビットの値と前記第６レジスタに保持された値とを乗算し、その乗算結果に前記第７レジスタに保持された値を加算し、その加算結果に前記第１積和回路の下位ｋビット出力を加算するように構成した請求項１記載のモンゴメリ法による乗算剰余計算装置。
【請求項６】
前記第２積和回路による演算中に、前記第１積和回路によりその次の回の演算を行うように構成した請求項１〜５の何れかに記載のモンゴメリ法による乗算剰余計算装置。
【請求項７】
暗号化／復号化のためのモンゴメリ法による乗算剰余計算を行う装置において、２つのｋビットの数を乗算し、その乗算結果に２つのｋビットの数を加算する積和演算を行う第１積和手段と、２つのｋビットの数を乗算し、その乗算結果に２つのｋビットの数を加算する積和演算を行う第２積和手段とを備え、前記第１積和手段及び第２積和手段は、演算結果を上位ビットと下位ビットとに分けて出力し、各自身の上位ビットの出力を各自身の次の回の加算用の入力とする構成を有し、前記第１積和手段の下位ビットの出力を前記第２積和手段の加算用の入力とする構成を有し、前記第２積和手段が演算を行う間、前記第１積和手段で次の回の演算を行うように、パイプライン処理すべく構成したことを特徴とするモンゴメリ法による乗算剰余計算装置。
【請求項８】
前記第１積和手段及び第２積和手段が演算するビット数が等しい請求項７記載のモンゴメリ法による乗算剰余計算装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、例えば公開鍵暗号系のＲＳＡ暗号処理において、モンゴメリのアルゴリズム（Ｍｏｄｕｌｏ  Ｍｕｌｔｉｐｌｉｃａｔｉｏｎ  Ｗｉｔｈｏｕｔ  Ｔｒｉａｌ  Ｄｉｖｉｓｉｏｎ，  Ｐｅｔｅｒ  Ｌ．  Ｍｏｎｔｇｏｍｅｒｙ，  Ｍａｔｈｅｍａｔｉｃｓ  ｏｆ  Ｃｏｍｐｕｔａｔｉｏｎ，  Ｖｏｌｕｍｅ  ４４，  Ｎｕｍｂｅｒ  １７０，  Ａｐｒｉｌ  １９８５  ｐｐ．  ５１９〜５２８  参照）を用いて乗算剰余計算を高速に行う乗算剰余計算装置に関する。
【０００２】
【従来の技術】
近年におけるコンピュータネットワークの発達により、データベースを検索する機会、電子メール，電子ニュース等の電子化された情報をネットワークを経由して送受する機会が急速に増加してきている。更に、これらを利用して、オンラインショッピング等のサービスも提供されつつある。しかし、それに伴って、ネットワーク上の電子化されたデータを盗聴する、改竄する、他人になりすましてサービスを無償で受ける等の問題も指摘されている。特に無線を利用したネットワークにおいては、傍受が容易なためにこれらの問題を防止する対策が望まれている。
【０００３】
これらの問題に対して暗号技術を応用した暗号化電子メール，利用者認証システムが提案され、種々のネットワークにも導入されつつある。この意味でコンピュータネットワークにおいては暗号化が必須の技術であるといえる。このような暗号技術の中の一つにディジタル署名即ち認証に適した公開鍵暗号方式があるが、暗号化／復号に大量の処理が必要なために高速化が望まれており、様々な高速化アルゴリズムが発表されている。
【０００４】
暗号化方式は、大別すると秘密鍵暗号系と公開鍵暗号系との二つに分類できる。秘密鍵暗号系は、送信者と受信者とが同じ暗号鍵を持つことにより暗号通信を行う方式である。即ち、秘密鍵暗号系では、あるメッセージを秘密の暗号鍵に基づいて暗号化して相手に送り、受け手はこの暗号鍵を用いて暗号文を復号して元のメッセージに戻して情報を入手する。
【０００５】
公開鍵暗号系は、送信者が公開されている受信者の公開鍵でメッセージを暗号化して送信し、受信者が自分の秘密鍵でその暗号化メッセージを復号することにより通信を行う方式である。即ち、公開鍵暗号系では、公開鍵は暗号化のための鍵、秘密鍵は公開鍵により暗号化された暗号を復号するための鍵であり、公開鍵で暗号化した暗号は秘密鍵でのみ復号することができる。
【０００６】
秘密鍵暗号系では、個人が秘密に保管しなければならない鍵が通信相手の数だけ必要であり、必要な総鍵数はｎ人のネットワークの場合（ｎ−１）／２個である。また、初めて通信する相手に対しては、何らかの方法で秘密鍵の配送が必要であるという欠点がある。この欠点を解消するために、大規模なネットワークでは鍵管理センタを設置し、センタとの間の秘密鍵のみを保管し、暗号通信を行う場合はセンタから送信相手との秘密鍵を得る方法が用いられる。この場合、秘密鍵の総数はｎ個となる。
【０００７】
一方、公開鍵暗号系では、個人が秘密に保管する鍵は自分の秘密鍵のみであり、必要な総秘密鍵数もｎ人のネットワークの場合ｎ個である。また、初めて通信する相手に対しては、公開鍵の配送を行えば良く、鍵管理センタを設置して、ユーザの公開鍵をｎ個公開簿に登録し、センタから送信相手の公開鍵を得る方法が用いられる。この場合、センタは公開鍵の改竄を防ぐだけで、秘密に保管する必要がない。但し、公開鍵方式は秘密鍵方式に比べて鍵のビット数が大きいため保管に要するファイルサイズは大きくなる。
【０００８】
また、認証の場合、秘密鍵暗号系では、例えば送信するメッセージを秘密鍵で圧縮変換し、送信文に付加して送り、受信側では同様に圧縮変換して比較する方式がとられている。しかし、送受信が同じ鍵であるため、受信者は認証データを偽造することができる。これに対して、公開鍵暗号系では、秘密鍵で暗号化することができるのは本人だけであるという特徴を利用する。送信者はメッセージを圧縮変換して秘密鍵で暗号化し、送信文に付加して送り、受信者は送信者の公開鍵で付加されたデータを復号し、同様に圧縮変換したものと比較する方式がとられている。この場合、受信者は不正ができない。
【０００９】
このように認証系では公開鍵暗号系の技術は必要不可欠であるといえる。しかし、公開鍵暗号系には、暗号化／復号に大量の処理が必要であるという大きな欠点があるため、一般には処理が速い秘密鍵暗号系をメッセージの暗号化に、公開鍵暗号系は認証用にというように組み合わせて用いられる場合が多い。
【００１０】
公開鍵暗号系の中で、現在最も有力なものが１９７７年にリヴェスト（Ｒｉｖｅｓｔ），シャミア（Ｓｈａｍｉｒ）及びエイドルマン（Ａｄｌｍａｎ）の三人によって発明されたＲＳＡ暗号である。このＲＳＡ暗号の基本原理は次のようなものである。
【００１１】
（ＲＳＡの基本アルゴリズム）
暗号鍵（ｅ，Ｎ）と対応する復号鍵（ｄ，Ｎ）とにおいて、ｅとＮとは公開鍵であり、ｄは秘密鍵である。平文をＭ，暗号文をＣとすると、暗号化Ｅと復号Ｄとのアルゴリズムは次のようにあらわされる。
Ｃ＝Ｅ（Ｍ）＝Ｍｅ  ｍｏｄ  Ｎ
Ｍ＝Ｄ（Ｃ）＝Ｃｄ  ｍｏｄ  Ｎ
但し、ｄ・ｅ＝１ｍｏｄ  ＬＣＭ｛（ｐ−１），（ｑ−１）｝
Ｎ＝ｐ・ｑ
ＬＣＭ：最小公倍数（ｌｏｗｅｓｔ  ｃｏｍｍｏｎ  ｍｕｌｔｉｐｌｅ）
ｐ，ｑは大きな素数
【００１２】
通常、ｅ，ｄ，Ｍ，Ｎなどは１０２４ビット程度の大きな整数が用いられているので、高速指数計算法を使用しても１回のＲＳＡ演算で平均１５００回程度の多重精度乗算と剰余算とを行わなければならない。特に剰余計算は、近似法，剰余テーブル方式，モンゴメリのアルゴリズム等、多くの高速化手法が提案されている。このような、ＲＳＡ暗号に代表される公開鍵暗号系の多くで利用される、べき乗剰余アルゴリズムを高速に処理するためには、１回あたりの剰余アルゴリズムの高速化が要求される。
【００１３】
この剰余演算の高速化を実現する一方法であるモンゴメリのアルゴリズムについて説明する。
（モンゴメリのアルゴリズム）
モンゴメリのアルゴリズムは、剰余の法Ｎ（Ｎ＞１）と、剰余の法Ｎと互いに素である基数Ｒ（Ｒ＞Ｎ）とを用いると、被剰余数ＴからＴＲ−１ｍｏｄ  Ｎの計算が基数Ｒによる除算のみで行えることを利用して、Ｎによる除算を用いることなく剰余計算を行うアルゴリズムである。ここで、Ｎ，Ｎ′，Ｒ，Ｒ−１及びＴは整数であり、被剰余数Ｔは０≦Ｔ＜Ｒ・Ｎ、Ｒ−１は剰余の法Ｎの上での基数Ｒの逆数であり、Ｒ・Ｒ−１−Ｎ・Ｎ′＝１（０≦Ｒ−１＜Ｎ，０≦Ｎ′＜Ｒ）の関係を満たす。
【００１４】
更に、この基数Ｒに２のベキ乗数を使用した場合、基数Ｒによる除算をシフト操作に置き換えることができるため、Ｔ→ＴＲ−１ｍｏｄ  Ｎの計算の高速処理が可能となる。次に、アルゴリズム１として、Ｔ→ＴＲ−１ｍｏｄ  ＮのアルゴリズムＲＥＤＣ（Ｔ）を示す。但し、アルゴリズム１において（Ｔ＋ｍ・Ｎ）／Ｒは必ず割り切れることが証明されている。
【００１５】
（アルゴリズム１）
Ｔ→ＴＲ−１ｍｏｄ  ＮのアルゴリズムＹ＝ＲＥＤＣ（Ｔ）は次のようにあらわされる。
0003616897.tif 000002
【００１６】
１回のＲＥＤＣでは、剰余Ｔｍｏｄ  ＮではなくＴＲ−１ｍｏｄ  Ｎが求められるだけである。よって、剰余Ｔｍｏｄ  Ｎを求めるためには、次に示すようにＲＥＤＣ（Ｔ）と予め求めておいたＲ２  ｍｏｄ  Ｎとの積で、再びＲＥＤＣを行えば良い。
0003616897.tif 000003
このようにして、剰余Ｔｍｏｄ  Ｎを求めることができる。
【００１７】
（ＲＥＤＣの多重精度計算への拡張）
次に、剰余の法Ｎまたは基数Ｒが多倍長即ち多重精度である場合について、ＲＥＤＣのアルゴリズムを拡張する。剰余の法Ｎ，基数Ｒが多重精度である場合、ＲＥＤＣの（Ｔｍｏｄ  Ｒ）・Ｎ′及びＭ・Ｎの計算は、多重精度×多重精度の処理となり、汎用の計算機では非常に大きな処理量と処理時間とが必要となる。そこで、この部分を多重精度×単精度の処理で行えるように拡張したアルゴリズム２を示す。
【００１８】
（アルゴリズム２）
ＲＥＤＣを多重精度へ拡張したアルゴリズムは次に示すようになる。
被剰余数Ｔ，パラメータＮ′，出力用変数Ｙが何れもｒ進数で、
Ｔ＝（ｔ２ｇ−１，ｔ２ｇ−２，…，ｔ０  ）ｒ  ，
Ｎ′＝（ｎ′ｇ−１  ，ｎ′ｇ−２  ，…，ｎ′０  ）ｒ  ，
Ｙ＝（ｙｇ  ，ｙｇ−１  ，…，ｙ０  ）ｒ  ，
Ｒ＝ｒｇ  ，
ｒ＝２ｋ  
とあらわされる場合、次に示すｊ＝０〜ｇ−１の繰り返し処理によりＴＲ−１ｍｏｄ  Ｎを多重精度×単精度として求めることができる。ここで単精度とはｒ進数１桁のこととし、同じ文字を使用した場合、基本的に大文字を多重精度、小文字を単精度、小文字の添字を多重精度での桁の位置とする。
【００１９】
0003616897.tif 000004
このようにして得られるＴＲ−１ｍｏｄ  Ｎと、上述したように予め求めておいたＲ２  ｍｏｄ  Ｎとの積で再びＲＥＤＣを行うことにより、ＴＲ−１ｍｏｄ  Ｎを求めることができる。
【００２０】
（ＲＥＤＣの多重精度乗算剰余への拡張）
次に、ＲＥＤＣのアルゴリズムを乗算剰余演算に拡張する。上記のアルゴリズムにおいて、入力Ｔは０≦Ｔ＜Ｒ・Ｎを満たす値であるが、実際のＲＳＡ演算では、入力Ｔが整数Ａ，Ｂ（０≦Ａ，Ｂ＜Ｎ）の乗算結果であることが多い。その場合、整数Ａ，Ｂの乗算も多重精度整数演算であるため、多重精度拡張ＲＥＤＣと同様の繰り返し計算が行われる。この場合、乗算とＲＥＤＣとを別々に繰り返し計算すると、繰り返し計算制御によるロスが２倍になってしまう。そこで、乗算とＲＥＤＣとを同一の繰り返しループで行えるように拡張したアルゴリズム３を示す。
【００２１】
（アルゴリズム３）
ＲＥＤＣを多重精度乗算剰余へ拡張したアルゴリズムＲＥＤＣ（Ａ×Ｂ）は次に示すようになる。乗算する２数Ａ，Ｂ，パラメータＮ′，出力用変数Ｙが何れもｒ進数で、
Ａ＝（ａｇ−１  ，ａｇ−２  ，…，ａ０  ）ｒ  ，
Ｂ＝（ｂｇ−１  ，ｂｇ−２  ，…，ｂ０  ）ｒ  ，
Ｎ′＝（ｎ′ｇ−１  ，ｎ′ｇ−２  ，…，ｎ′０  ）ｒ  ，
Ｙ＝（ｙｇ  ，ｙｇ−１  ，…，ｙ０  ）ｒ  ，
Ｒ＝ｒｇ  ，
ｒ＝２ｋ  
とあらわされる場合、次に示すｊ＝０〜ｇ−１の繰り返し処理により、ＡＢＲ−１ｍｏｄ  Ｎを多重精度×単精度の計算として求めることができる。
【００２２】
0003616897.tif 000005
このようにして得られるＡＢＲ−１ｍｏｄ  Ｎと、上述したように予め求めておいたＲ２  ｍｏｄ  Ｎとの積で再びＲＥＤＣを行うことにより、ＡＢＲ−１ｍｏｄ  Ｎを求めることができる。
【００２３】
（ＲＥＤＣの単精度×単精度処理への拡張）
アルゴリズム３では、多重精度のモンゴメリ乗算剰余を多重精度×単精度で実現可能としているが、この多重精度×単精度の計算部分をさらに単精度×単精度の計算を組み合わせて行えるよう拡張する。この場合、Ａ×ｂｉ  の計算部分とｍ×Ｎの計算部分とが繰り返し計算となり、上述の場合と同様に２つの乗算を別々に繰り返し計算すると、繰り返し計算制御によるロスが２倍になってしまう。そこで、２つの乗算を同一の繰り返しループで行えるようにすれば、ロスの低減が可能である。２つの乗算を同一の繰り返しループで行えるように拡張したアルゴリズム４を示す。
【００２４】
（アルゴリズム４）
ＲＥＤＣを単精度×単精度へ拡張したアルゴリズムＲＥＤＣ（Ａ×Ｂ）は次に示すようになる。乗算する２数Ａ，Ｂ，パラメータＮ′，出力用変数Ｙ，キャリー変数Ｃが何れもｒ進数で、
Ａ＝（ａｇ−１  ，ａｇ−２  ，…，ａ０  ）ｒ  ，
Ｂ＝（ｂｇ−１  ，ｂｇ−２  ，…，ｂ０  ）ｒ  ，
Ｎ′＝（ｎ′ｇ−１  ，ｎ′ｇ−２  ，…，ｎ′０  ）ｒ  ，
Ｙ＝（ｙｇ  ，ｙｇ−１  ，…，ｙ０  ）ｒ  ，
Ｃ＝（ｃ１  ，ｃ０  ）ｒ  ，
Ｒ＝ｒｇ  ，
ｒ＝２ｋ  
とあらわされ、ｒ進１桁の一時変数ｔｍｐ１，ｔｍｐ２，ｔｍｐ３，ｔｍｐ４とする場合、次に示すｉ，ｊの繰り返し処理によりＡＢＲ−１ｍｏｄ  Ｎを単精度×単精度の計算で求めることができる。
【００２５】
0003616897.tif 000006
【００２６】
ここで、（  ）ｒ  は、括弧内のｒ進数１桁の変数を多重精度として扱うことを示している。ｔｍｐ３，ｃ１  はｒ進数１桁で表現しているが、内容は１ビットの値である。出力用変数Ｙについて、計算に使用する値がｙｉ  のとき、出力がｙｉ−１  に格納されるのは、アルゴリズム３におけるＹ＝Ｙ／ｒの機能をこれにより実現しているためである。また、便宜上、外側のループをｊループ、内側のループをｉループと呼び、ｊループの始めからｉループまでをコア前処理、ｉループ内の処理をコア処理、ｉループの終わりからｊループの終わりまでをコア後処理と呼ぶこととする。
【００２７】
図１１は、上述したアルゴリズム４のコア処理を実行する乗算剰余計算装置の構成図である。図１１に示す乗算剰余計算装置は、内部で乗算及び加算を行うα積和回路５１及びβ積和回路５２と、乗算する一方の数Ａ：（ａｇ−１  ，ａｇ−２  ，…，ａ０  ）を保持するＡレジスタ５３と、乗算する一方の数Ｂ：（ｂｇ−１  ，ｂｇ−２  ，…，ｂ０  ）を保持するＢレジスタ５４と、剰余の法Ｎ：（ｎｇ−１  ，ｎｇ−２  ，…，ｎ０  ）を保持するＮレジスタ５５と、β積和回路５２の出力の下位ｋビットを格納するＹレジスタ５６と、モンゴメリのパラータｍを保持するｍレジスタ５７と、α積和回路５１の出力の上位（ｋ＋１）ビット及びβ積和回路５２の出力の上位ｋビットを加算するキャリー計算部としての加算回路５８と、加算回路５８の加算結果を格納するＣレジスタ５９と、ｊの値と０とを比較して出力を選択する選択回路６０とを有する。
【００２８】
また、α積和回路５１，β積和回路５２の内部構成を図１２（ａ），（ｂ）に夫々示す。α積和回路５１は、Ａレジスタ５３及びＢレジスタ５４からの出力を乗算するｋビット乗算器５１１  と、ｋビット乗算器５１１  の出力及び選択回路６０（Ｙレジスタ５６）の出力を加算する２ｋビット加算器５１２  と、２ｋビット加算器５１２  の出力及びＣレジスタ５９の出力を加算する２ｋ＋１ビット加算器５１３  とを有する。β積和回路５２は、Ｎレジスタ５５及びｍレジスタ５７からの出力を乗算するｋビット乗算器５２１  と、ｋビット乗算器５２１  の出力及びα積和回路５１からの下位ｋビットの出力を加算する２ｋビット加算器５２２  とを有する。
【００２９】
図１３は、アルゴリズム４のコア処理の内容を示す説明図である。α積和回路５１内にて、Ａレジスタ５３の出力ａｉ  （ｋビット）とＢレジスタ５４の出力ｂｊ  （ｋビット）とを乗算し、その乗算結果（２ｋビット）に、選択回路６０（Ｙレジスタ５６）の出力（ｋビット）とＣレジスタ５９の出力（ｋ＋１ビット）とを加算する。なお、選択回路６０は、ｊの値と０とを比較し、ｊの値が０である場合にはα積和回路５１へ０を出力し、ｊの値が０でない場合にはＹレジスタ５６の格納値ｙｉ  をα積和回路５１へ出力する。α積和回路５１は、その演算結果（２ｋ＋１ビット）の上位（ｋ＋１）ビットを加算回路５８へ出力し、その下位ｋビットをβ積和回路５２へ出力する。
【００３０】
β積和回路５２内にて、Ｎレジスタ５５の出力ｎｉ  （ｋビット）とｍレジスタ５７の出力（ｋビット）とを乗算し、その乗算結果（２ｋビット）にα積和回路５１からの下位ｋビット出力を加算する。β積和回路５２は、その演算結果（２ｋビット）の上位ｋビットを加算回路５８へ出力し、その下位ｋビットをＹレジスタ５６へ出力する。Ｙレジスタ５６は、そのｋビットのデータを値ｙｉ−１  として格納する。
【００３１】
加算回路５８は、α積和回路５１からの出力（ｋ＋１ビット）とβ積和回路５２からの出力（ｋビット）とを加算し、その加算結果（ｋ＋１ビット）をＣレジスタ５９へ出力する。Ｃレジスタ５９は、これを格納する。
【００３２】
【発明が解決しようとする課題】
上述したような従来の乗算剰余計算装置の構成では、２つの乗算を同一の繰り返しループで行えるが、Ｃレジスタ５９から出力される次ループへのキャリーが（ｋ＋１）ビットとなり、そのためα積和回路５１の出力が（２ｋ＋１）ビットとなってしまっており、１つ目の積和回路（α積和回路５１）の構成を単純化できないという問題がある。
【００３３】
また、キャリー計算部である加算回路５８において、次回演算用のキャリーが２つのα積和回路５１及びβ積和回路５２での演算結果に基づいて計算されるため、２つ目の積和回路（β積和回路５２）での演算が終了しなければ、次回の１つ目の積和回路（α積和回路５１）での演算を行うことができず、処理能率が悪いという問題がある。
【００３４】
本発明は斯かる事情に鑑みてなされたものであり、キャリーの伝搬を各積和回路でのループ内に押さえることにより、２つの積和回路での演算を独立して行え、つまり、２つ目の積和回路での積和を行っている間に１つ目の積和回路で次回の積和を行え、これによりパイプライン処理が可能になるモンゴメリ法による乗算剰余計算装置を提供することを目的とする。
【００３６】
【課題を解決するための手段】
請求項１に係るモンゴメリ法による乗算剰余計算装置は、モンゴメリのアルゴリズムを用いて乗算剰余計算を行う装置において、積和演算を行いその演算結果を上位ｋビットと下位ｋビットとに分けて出力する第１積和回路と、積和演算を行いその演算結果を上位ｋビットと下位ｋビットとに分けて出力する第２積和回路と、乗算される２数を保持する第１及び第２レジスタと、前記第２積和回路の下位ｋビット出力を保持し、前記第２積和回路のその次の回の下位ｋビット出力を格納する第３レジスタと、前記第１積和回路の上位ｋビット出力を保持し、前記第１積和回路のその次の回の上位ｋビット出力を格納する第４レジスタと、剰余の法を保持する第５レジスタと、モンゴメリのアルゴリズムにおけるパラメータの値を保持する第６レジスタと、前記第２積和回路の上位ｋビット出力を保持し、前記第２積和回路のその次の回の上位ｋビット出力を格納する第７レジスタとを備え、前記第１積和回路は、前記第１及び第２レジスタに保持された２数の所定ビットの値を乗算し、その乗算結果に前記第３レジスタに保持された数の所定ビットの値及び前記第４レジスタに保持された値を加算する演算を行い、前記第２積和回路は、前記第５レジスタに保持された数の所定ビットの値と前記第６レジスタに保持された値とを乗算し、その乗算結果に前記第１積和回路の下位ｋビット出力及び前記第７レジスタに保持された値を加算する演算を行うように構成したことを特徴とする。
【００４０】
請求項２に係るモンゴメリ法による乗算剰余計算装置は、請求項１において、前記第１積和回路は、前記第１及び第２レジスタに保持された２数の所定ビットの値を乗算し、その乗算結果に前記第３レジスタに保持された数の所定ビットの値を加算し、その加算結果に前記第４レジスタに保持された値を加算するように構成したことを特徴とする。
【００４１】
請求項３に係るモンゴメリ法による乗算剰余計算装置は、請求項１において、前記第１積和回路は、前記第１及び第２レジスタに保持された２数の所定ビットの値を乗算し、その乗算結果に前記第４レジスタに保持された値を加算し、その加算結果に前記第３レジスタに保持された数の所定ビットの値を加算するように構成したことを特徴とする。
【００４２】
請求項４に係るモンゴメリ法による乗算剰余計算装置は、請求項１において、前記第２積和回路は、前記第５レジスタに保持された数の所定ビットの値と前記第６レジスタに保持された値とを乗算し、その乗算結果に前記第１積和回路の下位ｋビット出力を加算し、その加算結果に前記第７レジスタに保持された値を加算するように構成したことを特徴とする。
【００４３】
請求項５に係るモンゴメリ法による乗算剰余計算装置は、請求項１において、前記第２積和回路は、前記第５レジスタに保持された数の所定ビットの値と前記第６レジスタに保持された値とを乗算し、その乗算結果に前記第７レジスタに保持された値を加算し、その加算結果に前記第１積和回路の下位ｋビット出力を加算するように構成したことを特徴とする。
【００４４】
請求項６に係るモンゴメリ法による乗算剰余計算装置は、請求項１〜５の何れかにおいて、前記第２積和回路による演算中に、前記第１積和回路によりその次の回の演算を行うように構成したことを特徴とする。
【００４５】
請求項７に係るモンゴメリ法による乗算剰余計算装置は、暗号化／復号化のためのモンゴメリ法による乗算剰余計算を行う装置において、２つのｋビットの数を乗算し、その乗算結果に２つのｋビットの数を加算する積和演算を行う第１積和手段と、２つのｋビットの数を乗算し、その乗算結果に２つのｋビットの数を加算する積和演算を行う第２積和手段とを備え、前記第１積和手段及び第２積和手段は、演算結果を上位ビットと下位ビットとに分けて出力し、各自身の上位ビットの出力を各自身の次の回の加算用の入力とする構成を有し、前記第１積和手段の下位ビットの出力を前記第２積和手段の加算用の入力とする構成を有し、前記第２積和手段が演算を行う間、前記第１積和手段で次の回の演算を行うように、パイプライン処理すべく構成したことを特徴とする。
【００４７】
請求項８に係るモンゴメリ法による乗算剰余計算装置は、請求項７において、前記第１積和手段及び第２積和手段が演算するビット数が等しいことを特徴とする。
【００５０】
本発明の乗算剰余計算装置では、２つの積和回路から出力される上位データを加算するのではなく、各積和回路におけるキャリー用のレジスタを各別に設けて自身の積和回路にキャリーを戻す構成とすることにより、第１発明と同様に１つ目の積和回路の構成の単純化を図れると共に、更に各積和回路のキャリー処理が閉じているので、２つ目の積和回路の動作中に、１つ目の積和回路の次回の動作が可能となる。
【００５１】
【発明の実施の形態】
以下、本発明をその実施の形態を示す図面を参照して具体的に説明する。
（第１発明）
１つ目の積和回路へのキャリーをｋビットにした第１発明について説明する。第１発明では、１つ目の積和回路の出力と２つ目の積和回路の出力との加算結果である（ｋ＋１）ビットのキャリーを上位１ビットと下位ｋビットとに分離し、その下位ｋビットはキャリー変数ｃ１  として１つ目の積和回路に戻し、その上位１ビットはもう１つのキャリー変数ｃ２  として、キャリー計算用の加算回路に戻す。この場合のアルゴリズム５を以下に示す。
【００５２】
（アルゴリズム５）
乗算する２数Ａ，Ｂ，パラメータＮ′，出力用変数Ｙが何れもｒ進数で、
Ａ＝（ａｇ−１  ，ａｇ−２  ，…，ａ０  ）ｒ  ，
Ｂ＝（ｂｇ−１  ，ｂｇ−２  ，…，ｂ０  ）ｒ  ，
Ｎ′＝（ｎ′ｇ−１  ，ｎ′ｇ−２  ，…，ｎ′０  ）ｒ  ，
Ｙ＝（ｙｇ  ，ｙｇ−１  ，…，ｙ０  ）ｒ  ，
Ｒ＝ｒｇ  ，
ｒ＝２ｋ  
とあらわされ、ｒ進１桁の一時変数ｔｍｐ１，ｔｍｐ２，ｔｍｐ４，キャリー変数ｃ１  ，ｃ２  とする場合、次に示すｉ，ｊの繰り返し処理によりＡＢＲ−１ｍｏｄ  Ｎを単精度×単精度の計算として求めることができる。
【００５３】
0003616897.tif 000007
ここで、（  ）ｒ  は、括弧内のｒ進数１桁の変数を多重精度として扱うことを示している。またキャリー変数ｃ２  はｒ進数１桁で表現しているが、内容は１ビットの値である。
【００５４】
図１は、上述したアルゴリズム５のコア処理を実行する乗算剰余計算装置の構成図である。図１に示す乗算剰余計算装置は、内部で乗算及び加算を行う第１積和回路１及び第２積和回路２と、乗算する一方の数Ａ：（ａｇ−１  ，ａｇ−２  ，…，ａ０  ）を保持する第１レジスタとしてのＡレジスタ３と、乗算する一方の数Ｂ：（ｂｇ−１  ，ｂｇ−２  ，…，ｂ０  ）を保持する第２レジスタとしてのＢレジスタ４と、第２積和回路２の前回の下位ｋビット出力を保持し次回の下位ｋビット出力を格納する第３レジスタとしてのＹレジスタ５と、キャリー変数ｃ１  を保持する第４レジスタとしてのｃ１  レジスタ６と、剰余の法Ｎ：（ｎｇ−１  ，ｎｇ−２  ，…，ｎ０  ）を保持する第５レジスタとしてのＮレジスタ７と、モンゴメリアルゴリズムにおけるパラータｍを保持する第６レジスタとしてのｍレジスタ８と、キャリー変数ｃ２  を保持する第７レジスタとしてのｃ２  レジスタ９と、第１積和回路１の上位ｋビット出力，第２積和回路２の上位ｋビット出力及びｃ２  レジスタ９の出力を加算するキャリー計算部としての加算回路１０と、ｊの値と０とを比較してその出力を選択する選択回路１１とを有する。
【００５５】
また、第１積和回路１，第２積和回路２の内部構成を図２（ａ），（ｂ）に夫々示す。第１積和回路１は、ｋビット乗算器１０１  と２ｋビット加算器１０２  と２ｋビット加算器１０３  とを有する。ｋビット乗算器１０１  は、Ａレジスタ３及びＢレジスタ４からの出力を乗算し、２ｋビット加算器１０２  は、ｋビット乗算器１０１  の出力と選択回路１１（Ｙレジスタ５）の出力とを加算し、２ｋビット加算器１０３  は、２ｋビット加算器１０２  の出力とｃ１  レジスタ６の出力とを加算する。なお、図２（ａ）に示す構成例では、乗算結果に選択回路１１（Ｙレジスタ５）の出力を先に加算し、その後にｃ１  レジスタ６の出力を加算するようになっているが、これとは逆に、先にｃ１  レジスタ６の出力、その後に選択回路１１（Ｙレジスタ５）の出力を加算するように構成しても良い。
【００５６】
第２積和回路２は、Ｎレジスタ７及びｍレジスタ８からの出力を乗算するｋビット乗算器２０１  と、ｋビット乗算器２０１  の出力及び第１積和回路１からの下位ｋビットの出力を加算する２ｋビット加算器２０２  とを有する。
【００５７】
図３は、アルゴリズム５のコア処理の内容を示す説明図である。第１積和回路１内にて、Ａレジスタ３の出力ａｉ  （ｋビット）とＢレジスタ４の出力ｂｊ  （ｋビット）とを乗算し、その乗算結果（２ｋビット）に、選択回路１１（Ｙレジスタ５）の出力（ｋビット）とｃ１  レジスタ６の出力（ｋビット）とを加算する。なお、選択回路１１は、ｊの値と０とを比較し、ｊの値が０である場合には第１積和回路１へ０を出力し、ｊの値が０でない場合にはＹレジスタ５の格納値ｙｉ  を第１積和回路１へ出力する。第１積和回路１は、その演算結果（２ｋビット）の上位ｋビットを加算回路１０へ出力し、その下位ｋビットを第２積和回路２へ出力する。
【００５８】
第２積和回路２内にて、Ｎレジスタ７の出力ｎｉ  （ｋビット）とｍレジスタ８の出力（ｋビット）とを乗算し、その乗算結果（２ｋビット）に、第１積和回路１からの出力下位ｋビットを加算する。第２積和回路２は、その演算結果（２ｋビット）の上位ｋビットを加算回路１０へ出力し、その下位ｋビットをＹレジスタ５へ出力する。Ｙレジスタ５は、そのｋビットのデータを値ｙｉ−１  として格納する。
【００５９】
加算回路１０は、第１積和回路１からの出力（ｋビット）と第２積和回路２からの出力（ｋビット）とｃ２  レジスタ９からの出力（１ビット）とを加算する。そして、次回の演算用として、その加算結果（ｋ＋１ビット）の上位１ビットをｃ２  レジスタ９へ、その下位ｋビットをｃ１  レジスタ６へ夫々出力する。各ｃ１  レジスタ６，ｃ２  レジスタ９は、これを格納する。
【００６０】
（第２発明）
キャリー用のレジスタを各積和回路毎に設けた第２発明について説明する。第２発明では、各積和回路におけるキャリー用のレジスタを各別に設けて自身の積和回路にキャリー変数を戻す構成とする。このアルゴリズム６を以下に示す。
【００６１】
（アルゴリズム６）
乗算する２数Ａ，Ｂ，パラメータＮ′，出力用変数Ｙが何れもｒ進数で、
Ａ＝（ａｇ−１  ，ａｇ−２  ，…，ａ０  ）ｒ  ，
Ｂ＝（ｂｇ−１  ，ｂｇ−２  ，…，ｂ０  ）ｒ  ，
Ｎ′＝（ｎ′ｇ−１  ，ｎ′ｇ−２  ，…，ｎ′０  ）ｒ  ，
Ｙ＝（ｙｇ  ，ｙｇ−１  ，…，ｙ０  ）ｒ  ，
Ｒ＝ｒｇ  ，
ｒ＝２ｋ  
とあらわされ、ｒ進１桁の一時変数ｔｍｐ１，キャリー変数ｃ３  ，ｃ４  とする場合、次に示すｉ，ｊの繰り返し処理によりＡＢＲ−１ｍｏｄ  Ｎを単精度×単精度の計算として求めることができる。
【００６２】
0003616897.tif 000008
【００６３】
図４は、上述したアルゴリズム６のコア処理を実行する乗算剰余計算装置の構成図である。図４に示す乗算剰余計算装置は、内部で乗算及び加算を行う第３積和回路２１及び第４積和回路２２と、図１に示すものと同様の第１レジスタとしてのＡレジスタ３，第２レジスタとしてのＢレジスタ４，第３レジスタとしてのＹレジスタ５，第５レジスタとしてのＮレジスタ７，第６レジスタとしてのｍレジスタ８及び選択回路１１と、キャリー変数ｃ３  を保持する第４レジスタとしてのｃ３  レジスタ２６と、キャリー変数ｃ４  を保持する第７レジスタとしてのｃ４  レジスタ２９とを有する。
【００６４】
なお、第３積和回路２１及び第４積和回路２２の内部構成は、図２（ａ）に示す第１積和回路１の内部構成と同じであり、各積和回路２１及び２２は、ｋビット乗算器１０１  と２ｋビット加算器１０２  と２ｋビット加算器１０３  とから構成されている。
【００６５】
第３積和回路２１のｋビット乗算器１０１  は、Ａレジスタ３及びＢレジスタ４からの出力を乗算し、２ｋビット加算器１０２  は、ｋビット乗算器１０１  の出力と選択回路１１（Ｙレジスタ５）の出力とを加算し、２ｋビット加算器１０３  は、２ｋビット加算器１０２  の出力とｃ３  レジスタ２６の出力とを加算する。なお、図２（ａ）に示す構成例では、乗算結果に選択回路１１（Ｙレジスタ５）の出力を先に加算し、その後にｃ３  レジスタ２６の出力を加算するようになっているが、これとは逆に、先にｃ３  レジスタ２６の出力、その後に選択回路１１（Ｙレジスタ５）の出力を加算するように構成しても良い。
【００６６】
一方、第４積和回路２２のｋビット乗算器１０１  は、Ｎレジスタ７及びｍレジスタ８からの出力を乗算し、２ｋビット加算器１０２  は、ｋビット乗算器１０１  の出力と第３積和回路２１からの下位ｋビットの出力とを加算し、２ｋビット加算器１０３  は、２ｋビット加算器１０２  の出力とｃ４  レジスタ２９の出力とを加算する。なお、図２（ａ）に示す構成例では、乗算結果に第３積和回路２１からの下位ｋビットの出力を先に加算し、その後にｃ４  レジスタ２９の出力を加算するようになっているが、これとは逆に、先にｃ４  レジスタ２９の出力、その後に第３積和回路２１からの下位ｋビットの出力を加算するように構成しても良い。
【００６７】
図５は、アルゴリズム６のコア処理の内容を示す説明図である。第３積和回路２１内にて、Ａレジスタ３の出力ａｉ  （ｋビット）とＢレジスタ４の出力ｂｊ  （ｋビット）とを乗算し、その乗算結果（２ｋビット）に、選択回路１１（Ｙレジスタ５）の出力（ｋビット）とｃ３  レジスタ２６の出力（ｋビット）とを加算する。なお、選択回路１１は、ｊの値と０とを比較し、ｊの値が０である場合には第３積和回路２１へ０を出力し、ｊの値が０でない場合には第３Ｙレジスタ５の格納値ｙｉ  を積和回路２１へ出力する。第３積和回路２１は、その演算結果（２ｋビット）の上位ｋビットをｃ３  レジスタ２６へ出力し、その下位ｋビットを第４積和回路２２へ出力する。ｃ３  レジスタ２６は、このｋビットを次回の演算用のキャリー変数として格納する。
【００６８】
第４積和回路２２内にて、Ｎレジスタ７の出力ｎｉ  （ｋビット）とｍレジスタ８の出力ｍ（ｋビット）とを乗算し、その乗算結果（２ｋビット）に、第３積和回路２１からの下位ｋビット出力を加算する。第４積和回路２２は、その演算結果（２ｋビット）の上位ｋビットをｃ４  レジスタ２９へ出力し、その下位ｋビットをＹレジスタ５へ出力する。ｃ４  レジスタ２９は、このｋビットを次回の演算用のキャリー変数として格納する。また、Ｙレジスタ５は、そのｋビットのデータを値ｙｉ−１  として格納する。
【００６９】
図６は、モンゴメリ法による乗算剰余処理の一例を示すフローチャートである。このフローチャートにおいて、ｊループが（アルゴリズム３）のループ処理に当たる。ｊループの内側では、Ａ×ｂｊ  及びｍ×Ｎの多重精度×単精度の部分乗算を行っている。ｉループは、Ａ×ｂｊ  及びｍ×Ｎの多重精度×単精度の計算を単精度×単精度の部分乗算で行っている部分である。ｉループの内部ではａｉ  ×ｂｊ  とｍ×ｎｉ  との部分乗算を行っている。
【００７０】
次に、第２発明における更なる具体例について説明する。
以下の例では、Ｎ，Ａ，Ｂのビット長を１０２４ビット、ｇ＝３２、処理単位ｋ＝３２、Ｒ＝２１０２４、ｒ＝２３２とする。
【００７１】
（コア前処理）
図７は、コア前処理を行う構成の一例を示す図である。３１はモンゴメリ計算用のパラメータｎ′０  を保持するレジスタ、３２は第３積和回路２１の出力とレジスタ３１の出力とを乗算する乗算回路である。
【００７２】
このコア前処理では、コア処理で使用するｃ３  レジスタ２６，ｃ４  レジスタ２９及びｍレジスタ８の初期化を行っている。第３積和回路２１は、まず、Ａレジスタ３，Ｂレジスタ４からの入力ａ０  ，ｂｊ  を乗算し、その乗算結果とＹレジスタ５からの入力ｙｉ  とを加算する。なお、コア処理と同じ積和回路を使用する場合は、更にその結果と０とを加算する。そして、結果の上位３２ビットをｃ３  レジスタ２６に格納し、下位３２ビットを第３積和回路２１とパラメータｍを計算するための乗算回路３２とへ出力する。乗算回路３２は、第３積和回路２１の出力とレジスタ３１の出力ｎ′０  とを乗算し、その乗算結果の下位３２ビットをｍレジスタへに出力する。
【００７３】
第４積和回路２２は、Ｎレジスタ７からの入力ｎ０  とｍレジスタ８の値とを乗算し、その乗算結果と第３積和回路２１からの出力とを加算する。なお、コア処理と同じ積和回路を使用する場合は、更にその結果と０とを加算する。そして、結果の上位３２ビットをｃ４  レジスタ２９に格納する。下位３２ビットは使用しない。
【００７４】
（コア処理）
図８は、ｉループ内部処理であるコア処理を行う構成の一例を示す図である。Ｙレジスタ５は前回の処理結果の保持及び今回の処理結果の出力用レジスタである。選択回路１１は、（アルゴリズム３）でＹ＝０の処理に相当するものである。
【００７５】
第３積和回路２１は、まず、Ａレジスタ３，Ｂレジスタ４からの入力ａｉ  ，ｂｊ  を乗算し、その乗算結果とＹレジスタ５からの入力ｙｉ  とを加算し、更にその加算結果とｃ３  レジスタ２６の値とを加算する。そして、結果の上位３２ビットをｃ３  レジスタ２６に格納し、下位３２ビットを第４積和回路２２へ出力する。
【００７６】
第４積和回路２２は、まず、Ｎレジスタ７からの入力ｎｉ  とｍレジスタ８の値とを乗算し、その乗算結果と第３積和回路２１からの出力とを加算し、更にその加算結果とｃ４  レジスタ２９の値とを加算する。そして、結果の上位３２ビットをｃ４  レジスタ２９に格納し、下位３２ビットをＹレジスタ５のｙｉ−１  に格納する。（アルゴリズム３）のＹ＝Ｙ／ｒの処理は、ｉ回目の計算結果をｙｉ−１  に格納することで実現している。
【００７７】
（コア後処理）
図９は、コア後処理を行う構成の一例を示す図である。３３はｃ３  レジスタ２６の出力とｃ４  レジスタ２９の出力と選択回路１１の出力とを加算する加算回路、３４は加算回路３３からのキャリー出力を０，１と比較し、０であれば０を、１であれば１を、Ｙレジスタ５へ出力する選択回路である。
【００７８】
このコア後処理では、コア処理終了後のキャリー変数ｃ３  ，ｃ４  の値の処理を行っている。ｃ３  レジスタ２６，ｃ４  レジスタ２９の値及びＹレジスタ５からの入力ｙ３２を加算回路３３に入力し、その加算結果をＹレジスタ５のｙ３１に出力し、キャリーを処理単位である３２ビットの値に変換してＹレジスタ５のｙ３２に出力する。ここで、出力からもわかるように、ｙ３２の値はＹレジスタ５では３２ビットとして扱われているが、実際は１ビットの値であるので、加算結果は３２ビット＋キャリーの範囲で収まる。
【００７９】
（積和回路の構成）
図１０は、上述の構成例で用いた積和回路の構成の一例を示す図である。ここでは、全ての処理単位を３２ビットになるように構成している。積和回路は、１個の３２ビット乗算器４１と、４個の３２ビット加算器４２，４３，４４，４５とを有する。
【００８０】
Ａ，Ｂの入力値は３２ビット乗算器４１で乗算され、上位３２ビットと下位３２ビットとの２つで出力される。３２ビット加算器４３は、３２ビット乗算器４１の出力下位３２ビットと入力Ｒの値とを加算し、その加算結果の出力３２ビットを３２ビット加算器４５へ、キャリーを３２ビット加算器４２へそれぞれ出力する。３２ビット加算器４２は、３２ビット乗算器４１の出力上位３２ビットと３２ビット加算器４３のキャリー出力とを加算し、その加算結果の出力３２ビットを３２ビット加算器４４へ出力する。この加算ではキャリーが発生しないことが理論的に証明されている。
【００８１】
３２ビット加算器４５は、３２ビット加算器４３の出力と入力Ｃの値とを加算し、その加算結果の出力３２ビットは積和回路のＬ出力（下位３２ビット）となり、キャリーは３２ビット加算器４４へ出力される。３２ビット加算器４４は、３２ビット加算器４２の出力と３２ビット加算器４５のキャリー出力とを加算し、その加算結果の出力３２ビットは積和回路のＨ出力（上位３２ビット）となる。この加算ではキャリーが発生しないことが理論的に証明されている。
【００８２】
なお、本発明の乗算剰余計算装置は、ハードウェアに限らず、同様の機能構成の少なくとも一部をソフトウェアで実現することもでき、そのような場合にも処理の高速化を達成することができる。例えば、ソフトウェアで第２発明の乗算剰余計算装置を実現し、パイプライン処理が可能な３２ビットプロセッサ上で実行した場合、乗算剰余処理時間を比較すれば、従来の方式の約半分の時間で処理が可能となり、その効果が明らかである。
【００８３】
【発明の効果】
以上説明したように、本発明によれば、モンゴメリ法を用いた乗算剰余計算について、全ての処理を処理単位内で行えるので、ＤＳＰ，マイクロコントローラ等の上のソフトウェアとして実現が容易になる。
【００８４】
また、本発明によれば、キャリー伝搬を各積和毎に制限でき、一方の積和処理中にもう一方の積和処理も可能となるので、パイプライン処理などによって、高速に乗算剰余計算を行うことが可能である。
【図面の簡単な説明】
【図１】本発明の乗算剰余計算装置（第１発明）の構成図である。
【図２】積和回路の構成図である。
【図３】本発明の乗算剰余計算装置（第１発明）の動作説明図である。
【図４】本発明の乗算剰余計算装置（第２発明）の構成図である。
【図５】本発明の乗算剰余計算装置（第２発明）の動作説明図である。
【図６】モンゴメリ法による乗算剰余処理の一例を示すフローチャートである。
【図７】コア前処理を行うための構成図である。
【図８】コア処理を行うための構成図である。
【図９】コア後処理を行うための構成図である。
【図１０】積和回路の構成図である。
【図１１】従来の乗算剰余計算装置の構成図である。
【図１２】従来の積和回路の構成図である。
【図１３】従来の乗算剰余計算装置の動作説明図である。
【符号の説明】
１  第１積和回路
２  第２積和回路
３  Ａレジスタ
４  Ｂレジスタ
５  Ｙレジスタ
６  ｃ１  レジスタ
７  Ｎレジスタ
８  ｍレジスタ
９  ｃ２  レジスタ
１０  加算回路
２１  第３積和回路
２２  第４積和回路
２６  ｃ３  レジスタ
２９  ｃ４  レジスタ
【図１】
0003616897.tif 000009
【図２】
0003616897.tif 000010
【図３】
0003616897.tif 000011
【図４】
0003616897.tif 000012
【図５】
0003616897.tif 000013
【図６】
0003616897.tif 000014
【図７】
0003616897.tif 000015
【図８】
0003616897.tif 000016
【図９】
0003616897.tif 000017
【図１０】
0003616897.tif 000018
【図１１】
0003616897.tif 000019
【図１２】
0003616897.tif 000020
【図１３】
0003616897.tif 000021