(57)【特許請求の範囲】
【請求項１】
それぞれＮビットの少なくとも２つの入力ビットストリングの標数２の乗算を実行するための、プロセッサ装置およびメモリを備えたコンピュータ装置において、
ａ）前記プロセッサ装置は、前記各入力ビットストリング（ＥＢ１，ＥＢ２）を少なくとも２つの所定の異なるマスク（Ｍ１１，Ｍ１２）とそれぞれビットごとにＡＮＤ結合することにより前記各入力ビットストリング（ＥＢ１，ＥＢ２）をマスクし、前記各入力ビットストリング（ＥＢ１，ＥＢ２）に対して少なくとも２つの第１中間ビットストリング（Ｚ１１−Ｚ１４）を生成し、ただし、前記各第１中間ビットストリング（Ｚ１１−Ｚ１４）は隣り合う１ビットを有してない、
ｂ）前記プロセッサ装置は、整数乗算により少なくとも２つの第１中間ビットストリングを結合し、少なくとも１つの第２中間ビットストリングを生成し、
ｃ）前記プロセッサ装置は、少なくとも１つの第２中間ビットストリングを第２の変換により変換し、結果ビットストリング（Ｅ）を生成する、
ことを特徴とする、コンピュータ装置。
【請求項２】
前記プロセッサ装置は、
個数Ｋ個の"０"ビットのシーケンス（Ｆ）の個数Ｋを、
前記入力ビットストリング（ＥＢ１，ＥＢ２）のビットの個数Ｎに依存して決定する、
請求項１記載のコンピュータ装置。
【請求項３】
前記プロセッサ装置は、
前記個数Ｋ個の"０"ビットを有する前記シーケンス（Ｆ）により、Ｎ個のビットを含む前記した所定の各マスク（Ｍ１１，Ｍ１２）においてそれぞれ１つのマスク窓を形成する、なお、前記Ｋは次の条件を満たす、
【数１】
0005449349.tif 000014
請求項１記載のコンピュータ装置。
【請求項４】
前記所定の異なるマスク（Ｍ１１，Ｍ１２）の個数ＭはＫ＋１に等しい（Ｍ＝Ｋ＋１）、請求項１または３記載のコンピュータ装置。
【請求項５】
ｍ番目ごとのマスク（Ｍ１１，Ｍ１２）はそれぞれ１つの"１"ビットとそれに続くＫ個の"０"ビットを含むシーケンス（Ｆ）とから成る周期的なパターンの少なくとも一部から形成され、前記ｍにつきｍ∈｛１,…,Ｍ｝である、請求項４記載のコンピュータ装置。
【請求項６】
前記プロセッサ装置は、
（ｍ＋１）番目ごとのマスク（Ｍ１２，Ｍ１１）はｍ番目ごとのマスク（Ｍ１１，Ｍ１２）を１ビットだけシフトさせて生成する、請求項５記載のコンピュータ装置。
【請求項７】
前記結果ビットストリング（Ｅ）を生成することが、
前記プロセッサ装置が更に、
−  少なくとも４つの第２中間ビットストリング（Ｚ２１−Ｚ２４）のそれぞれを、それぞれ２倍の長さの少なくとも２つの異なるマスク（Ｍ２１，Ｍ２４）とビットごとにＡＮＤ結合することによりマスクし、少なくとも４つの第３中間ビットストリングを生成し、
−  少なくとも４つの第３中間ビットストリングをＸＯＲ結合し、
−  少なくとも４つの第４中間ビットストリングをＸＯＲ結合し、結果ビットストリング（Ｅ）を生成する、
請求項１または３から５のいずれか１項記載のコンピュータ装置。
【請求項８】
請求項１から６いずれか１項記載のコンピュータ装置であって、
前記各入力ビットストリング（ＥＢ１，ＥＢ２）を少なくとも２つの異なるマスク（Ｍ１１，Ｍ１２）とそれぞれビットごとにＡＮＤ結合することにより前記各入力ビットストリング（ＥＢ１，ＥＢ２）をマスクし、前記各入力ビットストリング（ＥＢ１，ＥＢ２）に対して少なくとも２つの第１中間ビットストリング（Ｚ１１−Ｚ１４）を生成する生成装置（１１）と、ただし、前記第１中間ビットストリング（Ｚ１１−Ｚ１４）のそれぞれは隣り合う１ビットを有してない、
整数乗算により少なくとも２つの第１中間ビットストリングを結合し、少なくとも１つの第２中間ビットストリングを生成する論理結合装置（１２）と、
少なくとも１つの第２中間ビットストリングを第２の変換により変換し、結果ビットストリング（Ｅ）を生成する変換装置（１３）と、
を有するコンピュータ装置。
【請求項９】
それぞれＮビットの少なくとも２つの入力ビットストリングの標数２の乗算を実行する、プロセッサおよびメモリを備えたコンピュータ装置のためのコンピュータプログラムであって、
前記プログラムは前記プロセッサに下記ステップ、すなわち、
ａ）前記各入力ビットストリング（ＥＢ１，ＥＢ２）を少なくとも２つの異なるマスク（Ｍ１１，Ｍ１２）とそれぞれビットごとにＡＮＤ結合することにより前記各入力ビットストリング（ＥＢ１，ＥＢ２）をマスクし、前記各入力ビットストリング（ＥＢ１，ＥＢ２）に対して少なくとも２つの第１中間ビットストリング（Ｚ１１−Ｚ１４）を生成するステップと、ただし、前記第１中間ビットストリング（Ｚ１１−Ｚ１４）のそれぞれは隣り合う１ビットを有してない、
ｂ）整数乗算により少なくとも２つの第１中間ビットストリングを結合し、少なくとも１つの第２中間ビットストリングを生成するステップと、
ｃ）少なくとも１つの第２中間ビットストリングを第２の変換により変換し、結果ビットストリング（Ｅ）を生成するステップと
を実行させることを特徴とする、コンピュータプログラム。
【請求項１０】
前記コンピュータプログラムは、前記プロセッサ装置に、
個数Ｋ個の"０"ビットのシーケンス（Ｆ）の個数Ｋを、
前記入力ビットストリング（ＥＢ１，ＥＢ２）のビットの個数Ｎに依存して決定させる、
請求項９記載のコンピュータプログラム。
【請求項１１】
前記個数Ｋ個の"０"ビットを有する前記シーケンス（Ｆ）により、Ｎ個のビットを含む前記した所定の各マスク（Ｍ１１，Ｍ１２）においてそれぞれ１つのマスク窓を形成する、なお、前記Ｋは次の条件を満たす、
【数２】
0005449349.tif 000015
請求項９記載のコンピュータプログラム。
【請求項１２】
前記所定の異なるマスク（Ｍ１１，Ｍ１２）の個数ＭはＫ＋１に等しい（Ｍ＝Ｋ＋１）、請求項１０または１１記載のコンピュータプログラム。
【請求項１３】
ｍ番目ごとのマスク（Ｍ１１，Ｍ１２）はそれぞれ１つの"１"ビットとそれに続くＫ個の"０"ビットを含むシーケンス（Ｆ）とから成る周期的なパターンの少なくとも一部から形成され、前記ｍにつきｍ∈｛１,…,Ｍ｝である、請求項１２記載のコンピュータプログラム。
【請求項１４】
前記コンピュータプログラムは、前記プロセッサ装置に、
（ｍ＋１）番目ごとのマスク（Ｍ１２，Ｍ１１）はｍ番目ごとのマスク（Ｍ１１，Ｍ１２）を１ビットだけシフトさせて生成させる、請求項１３記載のコンピュータプログラム。
【請求項１５】
前記結果ビットストリング（Ｅ）を生成することが、
前記コンピュータプログラムは、前記プロセッサ装置に、
−  少なくとも４つの第２中間ビットストリング（Ｚ２１−Ｚ２４）のそれぞれを、それぞれ２倍の長さの少なくとも２つの異なるマスク（Ｍ２１，Ｍ２４）とビットごとにＡＮＤ結合することによりマスクし、少なくとも４つの第３中間ビットストリングを生成し、
−  少なくとも４つの第３中間ビットストリングをＸＯＲ結合させ、
−  少なくとも４つの第４中間ビットストリングをＸＯＲ結合し、結果ビットストリング（Ｅ）を生成させる、
請求項９から１４のいずれか１項記載のコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は少なくとも２つの入力ビットストリングの標数２の乗算を実現するための方法とプロセッサ装置とに関する。
【０００２】
標数２の乗算は多くの暗号化方法において、特に公開鍵暗号化法において、例えば楕円曲線に基づいた暗号化方法をハードウェア寄りに実現する場合などに使用される。このような標数２の算術で使用される数はプロセッサ装置、プロセッサまたはコンピュータ上でビットストリングとして効率的に表現される。このようなビットストリングはレジスタにバッファ記憶することができる。このような表現での２つの数の加算は表現ビットストリングのビットごとのＸＯＲ結合に相応する。標数２の算術における２つのビットストリングまたはオペランドの乗算は数学的にはGF(2)[x]に属する２つの多項式の積に相応する。この場合、数を表現するのに使われるビットストリングは各多項式の係数の０／１列に相当する。
【０００３】
標数２の乗算の数学的基礎は、２つの数の積を部分積の所定の集りに帰着させ、これらの部分積を加算して結果を得るということにある。例として、数１０１１と１１０１の乗算について、上記した部分積と和を以下に挙げる。
【０００４】
0005449349.tif 000002
【０００５】
結果は部分積の加算を列ごとにＸＯＲ結合することで得られる。このような乗算を実行するための基本演算として、上記テーブルの行における部分積の計算のためにシフト演算とビットごとのＡＮＤ結合が、部分積の各列和を計算するためにビットごとのＸＯＲ結合が使用される。
【０００６】
この乗法の最適化された形態として、いわゆる窓法が知られている。窓法では、特にオペランドの倍数の小さなテーブルが予め計算されるため、部分積の加算に必要な数が少なくなる。この予め計算されたテーブルを用いれば、続く各ステップにおいて、複数のビットを部分積の計算に一度に用いることができる。したがって、部分積の計算は予め計算されたテーブルを参照することに帰着される。パラメータが最適に選択されている場合には、複数のビットを一度に処理することによる部分積の加算の削減は、付加的にテーブルを予め計算する場合よりも必要コストが高くなってしまうことがありうる。
【０００７】
さらに、窓法はシフト命令と効率的に組み合わせることができる。実現のために使用されるプロセッサが所定のステップ幅で効率的なシフト命令を供給するならば、部分積を複数の部分和で加算すると有利である。例えば８ビットのバス幅のプロセッサで、４ビット幅の窓による窓法を適用した場合、２つの加算の間の累算器における中間結果は４ビットだけ左にシフトする。しかし、部分和の加算に異なる２つの累算器を使用すると、累算器の内容はそれぞれ８ビットシフトすることになる。従来のプロセッサでは、１バイト、つまり８ビットのシフトはメモリ内のデータをコピーすることで非常に効率的に実現できる。累算器の内容を４ビットだけ左にシフトしなければならないのは、次のステップにおいて、それまでに計算した２つの累算器の中間結果を加算する段になってからである。このやり方では、積を計算する際に多数のコスト集約的なシフト命令を削減することが可能である。
【０００８】
オペランドが長い場合には、例えばカラツバ乗算またはフーリエ乗算のような漸近的に速いアルゴリズムを使用して乗算の計算を行うと有利である。上記の乗算法は乗算される数の一部分にも適用できる。
【０００９】
たしかに従来のプロセッサまたはプロセッサ装置のほぼすべてはプロセッサ装置のバス幅で２つのビットストリングの整数乗算を高速に行うハードウェアを有しているが、これら従来のプロセッサのいずれも標数２の乗算をハードウェアでサポートしていない。
【００１０】
したがって、このような乗算はつねにソフトウェアで実現しなければならず、一般にハードウェア技術による整数乗算に比べて明らかに遅い。
【００１１】
それゆえ、本発明の課題は整数乗算に適したプロセッサ装置で少なくとも２つのビットストリングの標数２の乗算を可能にすることである。
【００１２】
本発明によれば、上に掲げた課題は請求項１に記載の特徴を備えた方法および／または請求項１４に記載の特徴を備えたプロセッサ装置によって解決される。
【００１３】
したがって、それぞれＮビットの少なくとも２つの入力ビットストリングの標数２の乗算をハードウェア技術的な整数乗算の実行に適したプロセッサ装置によって実現する方法が提案される。この方法は以下のステップを有する。
ａ）各入力ビットストリング内の少なくとも１つの所定の位置において各入力ビットストリングの第１の変換によってＫ個の"０"ビットからなる少なくとも１つのシーケンス（Ｋ∈｛１,…,Ｎ｝）を生成することにより、各入力ビットストリングに対して少なくとも１つの第１中間ビットストリングを生成するステップと、
ｂ）プロセッサ装置のハードウェア技術的な整数乗算により少なくとも２つの第１中間ビットストリングを結合し、少なくとも１つの第２中間ビットストリングを生成するステップと、
ｃ）少なくとも１つの第２中間ビットストリングを第２の変換により変換し、結果ビットストリングを形成するステップ。
【００１４】
さらに、それぞれＮビットの少なくとも２つの入力ビットストリングの標数２の乗算を実現するプロセッサ装置も提案される。このプロセッサ装置は以下の構成要素を有する。
【００１５】
各入力ビットストリング内の少なくとも１つの所定の位置において各入力ビットストリングの第１の変換によりＫ個の"０"ビットからなる少なくとも１つのシーケンス（Ｋ∈｛１,…,Ｎ｝）を生成することにより、各入力ビットストリングに対して少なくとも１つの第１中間ビットストリングを生成する生成装置と、
ハードウェア技術的な整数乗算により少なくとも２つの第１中間ビットストリングを結合し、少なくとも１つの第２中間ビットストリングを生成する論理結合装置と、
少なくとも１つの第２中間ビットストリングを第２の変換により変換し、結果ビットストリングを形成する変換装置。
【００１６】
本発明の利点は、２つのビットストリング、入力ビットストリングまたは数の標数２の乗算が、ハードウェア技術による整数乗算に適した従来のプロセッサまたは従来のプロセッサ装置で可能になることである。
【００１７】
標数２の乗算と従来の整数乗算はとりわけ、計算された部分積がどのように加算されるかという点で異なっている。標数２の乗算が桁上げなしの和に相当する列ごとのＸＯＲ結合を用いるのに対して、従来の整数乗算では桁上げありの列和が計算される。しかし従来、この桁上げは隣り合う列の列和に影響し、変化させてしまうことがあった。
【００１８】
それゆえ本発明によれば、乗算される数にＫ個の"０"ビットから成るシーケンスにより人為的に空白が挿入され、これらの空白に従来の整数乗算で必然的に生じる桁上げが集められる。このようにすることで、ずっと左にある列和は発生した桁上げによってもはや変化させられたり、影響されたりすることがない。
【００１９】
上ですでに述べたように、標数２の乗算の他のビット和が改竄されることなく、従来の整数乗算においてステップｂ）で必然的に生じる桁上げを集めることができる。
【００２０】
従来の多くのプロセッサは整数乗算を高速かつ効率的に行うハードウェアを有している。従来はこの他にさらに個別のアセンブラ命令が必要であった。
【００２１】
本発明による標数２の乗算方法はこのような乗算命令を実行している間に実行することができる。つまり、個別のアセンブラ命令が必要なシフト演算を含めて部分積の計算および加算を遂行することができる。一方、ソフトウェアで実現された標数２の乗算アルゴリズムは一般にプロセッサ装置のハードウェアによって提供されるような高速かつ効率的な実現を達成することができない。
【００２２】
したがって本発明は、使用されるプロセッサ装置がビットごとのシフトしか行わない、または提供されるシフト命令が長い実行時間を要する場合に特に有利である。
【００２３】
本発明の有利な実施形態は従属請求項と図面を参照した以下の説明に示されている。
【００２４】
１つの有利な実施形態によれば、シーケンスのＫ個の"０"ビットは入力ビットストリングのＮ個のビットに応じて決定される。
【００２５】
別の有利な実施形態によれば、上記方法のステップａ）は、各入力ビットストリングを少なくとも２つの異なるマスクとそれぞれビットごとにＡＮＤ結合することにより各入力ビットストリングをマスクし、少なくとも２つの第１中間ビットストリングを生成することから成る。
【００２６】
別の有利な実施形態によれば、Ｋ個の"０"ビットから成る各シーケンスは、Ｎ個のビットから成る所定の各マスクにおいてそれぞれ１つのマスク窓を形成する。ここで、Ｋは次の条件を満たす。
【００２７】
【数１】
0005449349.tif 000003
【００２８】
別の有利な実施形態によれば、所定の異なるマスクの個数ＭはＫ＋１に等しい（Ｍ＝Ｋ＋１）。
【００２９】
別の有利な実施形態によれば、ｍ番目ごとのマスクはそれぞれ１つの"１"ビットとそれに続くＫ個の"０"ビットを含むシーケンスとから成る周期的なパターンの少なくとも一部から形成される。ここで、ｍ∈｛１,…,Ｍ｝。
【００３０】
別の有利な実施形態によれば、（ｍ＋１）番目ごとのマスクはｍ番目ごとのマスクを１ビットだけシフトさせることにより形成される。
【００３１】
別の有利な実施形態によれば、上記方法のステップｃ）において、
少なくとも４つの第２中間ビットストリングのそれぞれをそれぞれ２倍の長さの少なくとも２つの異なるマスクとビットごとにＡＮＤ結合することにより、少なくとも４つの第３中間ビットストリングを生成し、
少なくとも４つの第３中間ビットストリングをＸＯＲ結合し、結果ビットストリングを生成する。
【００３２】
本発明の１つの有利な実施形態によれば、上記方法のステップａ）において、各入力ビットストリングのＮ個のすべてのビットの間にＫ個の"０"ビットから成るシーケンスを挿入することにより各入力ビットストリングを広げ、各入力ビットストリングに対してそれぞれ中間ビットストリングを生成する。
【００３３】
別の有利な実施形態によれば、Ｋ個の"０"ビットを含む各シーケンスはそれぞれの第１中間ビットストリングにおいて窓を形成する。ここで、Ｋは以下の条件を満たす。
【００３４】
【数２】
0005449349.tif 000004
【００３５】
別の有利な実施形態によれば、上記方法のステップｂ）において、２つの第１中間ビットストリングをプロセッサ装置の整数乗算により結合し、ただ１つの第２中間ビットストリングを生成する。
【００３６】
別の有利な実施形態によれば、ステップｃ）において、
生成された第２中間ビットストリングの位置０における最下位ビットから始まり、所定の位置ｉ・（Ｋ＋１）までのビットを抽出する。
【００３７】
さらに、プログラム制御された装置において本発明による上記の方法を実行させるコンピュータプログラム製品が提案される。
【００３８】
コンピュータプログラム媒体のようなコンピュータプログラム製品は、例えばメモリーカード、ＵＳＢスティック、フロッピー、ＣＤスティック、ＣＤ−ＲＯＭ、ＤＶＤのような記憶媒体またはネットワーク内のサーバからダウンロードされるデータとして提供または供給されるものであってよい。これは例えばワイヤレス通信ネットワーク内でコンピュータプログラム製品またはコンピュータプログラム媒体を含むデータの伝送によって行うことができる。
【００３９】
以下では、概略図に示されている実施例に基づいて本発明をより詳しく説明する。
【図面の簡単な説明】
【００４０】
【図１】標数２の乗算を実現する本発明による方法の第１の実施例の概略的なフローチャートを示す。
【図２】標数２の乗算を実現する本発明による方法の第２の実施例の概略的なフローチャートを示す。
【図３】図２の本発明による方法の第２の実施例の適用例を概略的に示す。
【図４】標数２の乗算を実現する本発明による方法の第３の実施例の概略的なフローチャートを示す。
【図５】図４の本発明による方法の第３の実施例の適用例を概略的に示す。
【図６】標数２の乗算を実現する本発明によるプロセッサ装置の実施例の概略的なブロック回路図を示す。
【図７】２つの第１中間ビットストリングの整数乗算の例を概略的に示す。
【００４１】
すべての図において、同じまたは同機能の手段および装置には、特にことわらない限り、同一の参照番号が付されている。
【００４２】
図１には、第１の実施例の概略的なフローチャートが示されている。第１の実施例は、それぞれＮ個のビットを有する少なくとも２つの入力ビットストリングＥＢ１，ＥＢ２の標数２の乗算を整数乗算の実行に適したプロセッサ装置１０により実現する。
【００４３】
以下では、図３および図５の例を参照して、図１のブロック回路図に基づいて本発明による方法を説明する。
【００４４】
図３および５において、参照番号ＥＢｉはｉ番目の入力ビットストリングＥＢ１，ＥＢ２のそれぞれを表している（ｉ∈｛１，２｝）。また、Ｍ１ｉは第１のマスクＭ１１，Ｍ１２のそれぞれを表す。また、Ｍ２ｉは第１のマスクＭ２１，Ｍ２２のそれぞれを表す。さらに、Ｚ１ｊは第１中間ビットストリングＺ１１，Ｚ１２，Ｚ１３およびＺ１４のそれぞれを表す（ｊ∈｛１，２，３，４｝）。さらに、Ｚ２ｊは第２中間ビットストリングＺ２１，Ｚ２２，Ｚ２３およびＺ２４のそれぞれを表す（ｊ∈｛１，２，３，４｝）。Ｅは結果ビットストリングを表し、参照番号ｒ１−ｒ６はそれぞれ図３および５の行を表しており、これらの図を参照し易くしている。
【００４５】
図１の本発明による方法は方法ステップＲ１−Ｒ３を有している。
【００４６】
方法ステップＲ１：
Ｋ個の"０"ビットを含む少なくとも１つのシーケンスＦが、各入力ビットストリングＥＢ１，ＥＢ２内の少なくとも１つの所定の位置において各入力ビットストリングの第１の変換によって生成され、少なくとも１つの第１中間ビットストリングＺ１１−Ｚ１４が生成される（Ｋ∈｛１,…,Ｎ｝）。ここで、シーケンスＦの"０"ビットの個数Ｋは有利には入力ビットストリングＥＢ１，ＥＢ２のビットの個数Ｎに応じて決まる。
【００４７】
方法ステップＲ２：
少なくとも２つの第１中間ビットストリングＺ１１−Ｚ１４がプロセッサ装置１０のハードウェア技術による整数乗算により論理結合され、少なくとも１つの第２中間ビットストリングＺ２１−Ｚ２４が生成される。
【００４８】
方法ステップＲ３：
所定の第２の変換により少なくとも１つの第２中間ビットストリングＺ２１−Ｚ２４が変換され、結果ビットストリングＥが形成される。
【００４９】
図２には、それぞれＮ個のビットを含む少なくとも２つの入力ビットストリングＥＢ１，ＥＢ２の標数２の乗算を整数乗算の実行に適したプロセッサ装置により実現する本発明による方法の第２の実施例の概略的なフローチャートが示されている。
【００５０】
図２による第２の実施例は以下の方法ステップＳ１−Ｓ４を有している。
【００５１】
方法ステップＳ１：
少なくとも２つの入力ビットストリングＥＢ１，ＥＢ２の各入力ビットストリングＥＢ１，ＥＢ２が、２つの異なるマスクＭ１１，Ｍ１２の各マスクＭ１１，Ｍ１２とのビットごとのＡＮＤ結合によりマスクされ、少なくとも２つの第１中間ビットストリングＺ１１−Ｚ１４が生成される。したがって、方法ステップＲ１に関連して図１に示されている第１の変換が図２のマスキングとして形成されている。
【００５２】
Ｋ個の"０"ビットを含む各シーケンスＦはＮ個のビットを含む所定の各マスクＭ１１，Ｍ１２においてそれぞれ１つのマスクを形成する。ここで、Ｋは次の条件を満たす。
【００５３】
【数３】
0005449349.tif 000005
所定の異なるマスクＭ１１，Ｍ１２の個数Ｍは有利にはＫ＋１に等しい（Ｍ＝Ｋ＋１）。
【００５４】
ｍ番目ごとのマスクＭ１１，Ｍ１２はそれぞれ１つの"１"ビットとそれに続くＫ個の"０"ビットから成るシーケンスＦとから成る周期的パターンの少なくとも一部から形成される（ｍ∈｛１,…,Ｎ｝）。これに関して、図３には図２による本発明の方法の第２の実施例の適用例が概略的に示されている。行ｒ１には、ＥＢ１＝"ＡＢＣＤ"かつＥＢ２＝"ＥＦＧＨ"の２つの入力ビットストリングＥＢ１，ＥＢ２が示されている。また行ｒ２には、Ｍ１１＝"０１０１"かつＭ１２＝"１０１０"の２つのマスクＭ１１およびＭ１２が示されている。図３の行ｒ２の例によれば、Ｋ＝１かつＭ＝２である。この例はまた、ｍ番目ごとのマスクＭ１１，Ｍ１２を１ビットだけシフトすることで（ｍ＋１）番目ごとのマスクＭ１２，Ｍ１１が形成されることを示している。
【００５５】
また行ｒ３には、入力ビットストリングＥＢ１，ＥＢ２をマスクＭ１１，Ｍ１２でマスキングした結果を表す第１の中間ビットストリングＺ１１−Ｚ１４が示されている。
【００５６】
また行ｒ４には、行ｒ３の抽象的な表現が示されている。行ｒ３の１６進数Ａ−Ｈはそれぞれ抽象項"*"で置き換えられている。抽象項"*"は単にそれぞれの値がゼロではないことを示しているだけである。
【００５７】
方法ステップＳ２：
行ｒ５の４つの第２の中間ビットストリングＺ２１−Ｚ２４は、行ｒ４の第１の中間ビットストリングＺ１１−Ｚ１４をプロセッサ装置１０の整数乗算によって論理結合することで得られる。このために、プロセッサ装置１０の整数乗算により積、Ｚ１１*Ｚ１３，Ｚ１１*Ｚ１４，Ｚ１２*Ｚ１３およびＺ１２*Ｚ１４が計算される。これらの計算ステップの結果が第２の中間ビットストリングＺ２１−Ｚ２４を形成する。
【００５８】
方法ステップＳ３：
さらに、４つの第２の中間ビットストリングＺ２１−Ｚ２４をビットごとのＡＮＤ結合結合により行ｒ６の２つの異なるマスクＭ２１，Ｍ２２でマスキングすることにより、少なくとも４つの第３の中間ビットストリング（図示せず）が生成される。
【００５９】
方法ステップＳ４：
さらに、少なくとも４つの第４の中間ビットストリングをビットごとにＸＯＲ結合することにより結果ビットストリングＥが生成される。
【００６０】
図４には、それぞれＮ個のビットを含む少なくとも２つの入力ビットストリングＥＢ１，ＥＢ２の標数２の乗算を整数乗算の実行に適したプロセッサ装置により実現する本発明による方法の第３の実施例の概略的なフローチャートが示されている。
【００６１】
図４の実施例は方法ステップＴ１−Ｔ３を有している。
【００６２】
方法ステップＴ１：
各入力ビットストリングＥＢ１，ＥＢ２の隣り合うすべてのビットの間にＫ個の"０"ビットから成るシーケンスＦを挿入することにより各入力ビットストリングＥＢ１，ＥＢ２を広げ、各入力ビットストリングＥＢ１，ＥＢ２に対してそれぞれ第１の中間ビットストリングＺ１１，Ｚ１２が生成される。これに関して、図５の行ｒ１には２つの異なる入力ビットストリングＥＢ１，ＥＢ２が示されており、行ｒ２には第１の中間ビットストリングＺ１１，Ｚ１２を生成するためにシーケンスＦで広げられた各入力ビットストリングＥＢ１，ＥＢ２が示されている。こうして左の第１の中間ビットストリングＺ１１は第１の入力ビットストリングＥＢ１の拡散から、右の第１の中間ビットストリングＺ１２は第２の入力ビットストリングＥＢ２の拡散から生じる。
【００６３】
図５の行ｒ２に示されているように、Ｋ個の"０"ビットを含む各シーケンスＦは第１の中間ビットストリングＺ１１，Ｚ１２のそれぞれにおいて窓を形成する。
【００６４】
さらに、各シーケンスＦの"０"ビットの個数Ｋは以下の条件を満たす。
【００６５】
【数４】
0005449349.tif 000006
【００６６】
方法ステップＴ２：
図５の行ｒ２による２つの第１の中間ビットストリングＺ１１，Ｚ１２がプロセッサ装置１０の整数乗算により論理結合され、行ｒ３によるただ１つの第２の中間ビットストリングＺ２が生成される。
【００６７】
方法ステップＴ３：
第２の中間ビットストリングＺ２の位置０における最下位ビットから始まり所定の位置ｉ・（Ｋ＋１）で、生成された第２の中間ビットストリングＺ２のビット（行ｒ４を参照）が抽出される（ｉ∈｛０,…,２Ｎ−２｝）。この抽出により、図５の行ｒ５の結果ビットストリングＥが得られる。
【００６８】
図６には、それぞれＮ個のビットを含む少なくとも２つの入力ビットストリングＥＢ１，ＥＢ２の標数２の乗算を整数乗算の実行に適したプロセッサ装置により実現する本発明によるプロセッサ装置１０の実施例の概略的なブロック回路図が示されている。
【００６９】
プロセッサ装置１０はこのために生成装置１１、論理結合装置１２および変換装置１３を有している。
【００７０】
生成装置１１は、少なくとも１つの第１の中間ビットストリングＺ１１−Ｚ１２を生成するために、各入力ビットストリングＥＢ１，ＥＢ２の少なくとも１つの所定の位置において第１の変換により各入力ビットストリングＥＢ１，ＥＢ２を変換してＫ個の"０"ビットから成るシーケンスＦを生成する（Ｋ∈｛１,…,Ｎ｝）。
【００７１】
論理結合装置１２は少なくとも２つの第１の中間ビットストリングＺ１１−Ｚ１２を整数乗算により結合し、少なくとも１つの第２の中間ビットストリングＺ２１を生成する。
【００７２】
変換装置１３は、少なくとも１つの第２の中間ビットストリングＺ２１を少なくとも１つの第２の変換により変換し、結果ビットストリングＥを形成する。
【００７３】
さらに図７には２つの第１の中間ビットストリングの整数乗算の概略的な例が示されている。これら２つの第１の中間ビットストリングは例えばビットパターン"ＡＢＣＤ"および"ＥＦＧＨ"によって与えられる。第１のステップでは、これら第１の中間ビットストリングがマスク"０１０１"および"１０１０"でマスクされる、つまりビットごとにＡＮＤ結合される。これにより４つのビットパターンまたは数"０Ｂ０Ｄ"、"Ａ０Ｃ０"、"０Ｆ０Ｈ"および"Ｅ０Ｇ０"が得られる。次に"ＡＢＣＤ"から生じたすべてのビットパターンが従来の整数乗算を使用して"ＥＦＧＨ"から生じたすべてのビットパターンと掛け合わされる。この乗算はパターン"０Ｂ０Ｄ"および"０Ｆ０Ｈ"を例として図７に示されている。
【００７４】
マスキングにより、図７の部分積のテーブルにおける０以外のエントリは必然的にエントリ間に１ビット空白を有する規則的な行および列格子を形成する。したがって、整数乗算を用いた場合に列和を加算する際に生じる桁上げはちょうどこれらマスクされた数の人為的に形成された空白に挿入される。図７の例では、生じうる桁上げ"ＢＨ ＡＮＤ ＤＦ"は"*"で表されている。この結果をマスク"１０１０１０１"とビットごとにＡＮＤ結合すると、（図３に示されているように）桁上げがなくなり、所望の標数２の乗算の結果の一部が得られる。マスクされた異なる数の間の残りの３つの積も相応のビットマスクを用いて計算され、残りの値が得られる。このようにして計算された４つの値のビットごとのＸＯＲ結合から標数２の乗算の結果が得られる。
【００７５】
全体として、本発明は数のマスキングと部分積のマスキングのためのビットごとのＡＮＤ結合、プロセッサ装置の従来の整数乗算、および複数の部分結果を加算するためのビットごとのＸＯＲ結合しか使用しない。とりわけ、本発明によればシフト命令は不要である。シフト命令は整数乗算によって暗に実行される。
【００７６】
本発明を実施するためのマスクは乗算される数または入力ビットストリングの長さ（ビットの個数Ｎ）に依存して正確に選択される。以下のテーブルには、乗算される入力ビットストリングＥＢ１，ＥＢ２または数のさまざまなビット長Ｎについて、マスク内の窓のビット幅および必要な整数乗算の回数が示されている。
【００７７】
【表１】
0005449349.tif 000007
【００７８】
以下では、ＳＳＥ２ユニットを有する３２ビットIntel Pentium 4またはAMD Athlonプロセッサの場合について、標数２の乗算を実現する本発明の実施例を説明する。これらのプロセッサは記号xmm0−xmm7で表される１２８ビット長の８つのレジスタを有している。２つのレジスタ間のまたは１つのレジスタとメモリ内容との間のビットごとのＡNDおよびXＯR結合に関するアセンブラ命令pandおよびpxorが存在している。さらに、これらのプロセッサは３２ビットオペランドと６４ビット結果とでの２回の整数乗算を並行して実行する命令pmuludqを有している。これらの命令を用いて、１２８ビットの結果を出す６４ビットの数の標数２の乗算を行う以下のアセンブラルーチンが形成される。以下のアセンブラルーチンはｎａｓｍアセンブラでコンパイルでき、ｇｃｃコンパイラで実行可能である。４つの異なるマスクが使用され、マスク窓のビット長は３である。
【００７９】
0005449349.tif 000008
【００８０】
0005449349.tif 000009
【００８１】
0005449349.tif 000010
【００８２】
0005449349.tif 000011
【００８３】
0005449349.tif 000012
【００８４】
0005449349.tif 000013
【００８５】
以上に本発明を有利な実施例に基づいて説明したが、本発明はこれらの実施例に限定されず、さまざまに変更可能である。
【図１】
0005449349.tif 000016
【図２】
0005449349.tif 000017
【図３】
0005449349.tif 000018
【図４】
0005449349.tif 000019
【図５】
0005449349.tif 000020
【図６】
0005449349.tif 000021
【図７】
0005449349.tif 000022