(57)【要約】【課題】暗号化や復号化に要する時間が短く、かつ、論理ゲート数の少ない暗号化・復号化装置および暗号化・復号化方法を提供する。【解決手段】演算部２１は、実質的に次式　Ｘｋｉ＝１＋Σ（（ｊ＝１，ｉ）ｉＣｊ・Ｘｋ−１ｊ）に基づいて、当該式における１つのｋについてのｉ＝１ないしｍに対応する一群のべき乗値Ｘｋｉを、ｋ−１＝ｋ０についてのｊ＝１ないしｍに対応する一群のべき乗値Ｘｋ０ｊを初期値として、係数記憶部１７に記憶されている２項係数を用いて、ｋ＝ｋ０＋１からｋ＝ｋ１まで順に計算してゆくことにより、第２の文Ｙｋ１を求める。したがって、所定の整数ｎおよび整数ｍに対応する２項係数を一度記憶させておけば、以後、同一の整数ｎおよび整数ｍに関する暗号化または復号化の時間を短縮することができる。【選択図】　　図１
2004101846.tif 000002
【特許請求の範囲】
【請求項１】
正の整数ｎを法とする体系において、次式
Ｘｋ＝Ｘｋ−１＋１（１＜＝ｋ＜＝ｎ−１，Ｘ０＝０）
を満足する任意の正の整数Ｘｋ＝Ｘｋ１を第１の文とするとき、当該第１の文Ｘｋ１に基づいて、次式
Ｙｋ１＝Ｘｋ１ｍ（ｍは正の整数）
で定義される第２の文Ｙｋ１を求める暗号化・復号化装置であって、
実質的に２項係数ｉＣｊ（１＜＝ｉ＜＝ｍ、１＜＝ｊ＜＝ｉ）の全部を記憶する係数記憶部と、
実質的に次式
Ｘｋｉ＝１＋Σ（（ｊ＝１，ｉ）ｉＣｊ・Ｘｋ−１ｊ）
に基づいて、当該式における１つのｋについてのｉ＝１ないしｍに対応する一群のべき乗値Ｘｋｉを、ｋ−１＝ｋ０についてのｊ＝１ないしｍに対応する一群のべき乗値Ｘｋ０ｊを初期値として、前記係数記憶部に記憶されている２項係数を用いて、ｋ＝ｋ０＋１からｋ＝ｋ１まで順に計算してゆくことにより、前記第２の文Ｙｋ１を求める演算部と、
を備えた暗号化・復号化装置。
【請求項２】
請求項１の暗号化・復号化装置において、
前記演算部は、
１つのｋについてのｊ＝１ないしｍに対応する一群のべき乗値Ｘｋ−１ｊを記憶する、べき乗値記憶部を備え、
当該演算部は、前記係数記憶部に記憶されている２項係数と、前記べき乗値記憶部に記憶されている前記一群のべき乗値Ｘｋ−１ｊとを用いて、実質的に前記式
Ｘｋｉ＝１＋Σ（（ｊ＝１，ｉ）ｉＣｊ・Ｘｋ−１ｊ）
に基づいて、前記１つのｋについてのｉ＝１ないしｍに対応する一群のべき乗値Ｘｋｉを算出し、その後、前記べき乗値記憶部の記憶内容を当該新たに算出した一群のべき乗値Ｘｋｉに更新すること、
を特徴とするもの。
【請求項３】
請求項２の暗号化・復号化装置において、
前記演算部は、
１つのｋおよび１つのｉに対応する１つのべき乗値Ｘｋｉを算出するために必要な１または２以上の２項係数を、前記係数記憶部に記憶されている２項係数の中から選択する係数選択部と、
前記係数選択部で選択された２項係数と、前記べき乗値記憶部に記憶されている前記一群のべき乗値Ｘｋ−１ｊのうち当該選択された２項係数に対応する１または２以上のべき乗値Ｘｋ−１ｊと、の積をそれぞれ求める乗算部と、
前記乗算部で得られた１または２以上の前記積および数値「１」の和を求める加算部と、
前記加算部で得られた前記和を前記１つのｋおよび１つのｉに対応する１つのべき乗値Ｘｋｉとしてラッチするラッチ部と、
前記係数選択部、乗算部、加算部、ラッチ部、べき乗値記憶部の動作を制御することにより、前記１つのｋについてのｉ＝１ないしｍに対応する複数のべき乗値Ｘｋｉを順次算出して、これらを前記ラッチ部に順次ラッチし、前記１つのｋについてのｉ＝１ないしｍに対応する一群のべき乗値Ｘｋｉが全てラッチされた後、当該ラッチされた一群のべき乗値Ｘｋｉを前記べき乗値記憶部に転送して記憶させることにより前記べき乗値記憶部の記憶内容を当該新たに算出した一群のべき乗値Ｘｋｉに更新し、更新されたべき乗値Ｘｋｉを新たなべき乗値Ｘｋ−１ｊとして、順次計算を行うことにより第２の文Ｙｋ１を得る制御部と、
を備えたこと、
を特徴とするもの。
【請求項４】
請求項１ないし３のいずれかの暗号化・復号化装置において、
当該暗号化・復号化装置は、
入力された前記整数ｍに基づいて、実質的に前記２項係数ｉＣｊ（１＜＝ｉ＜＝ｍ、１＜＝ｊ＜＝ｉ）の全部を取得し、取得した当該２項係数を前記係数記憶部に記憶させる係数取得部を、さらに備えたこと、
を特徴とするもの。
【請求項５】
請求項１ないし４のいずれかの暗号化・復号化装置において、
当該暗号化・復号化装置は、
入力された複数の第１の文を、昇順で並べ替えて前記演算部に与える入力整列部と、
前記演算部で算出された複数の第２の文を、対応する第１の文の入力順に対応させて並べ戻す出力整列部と、
をさらに備え、
前記演算部は、直前の第２の文を算出するときに得られた前記一群のべき乗値を利用して、つぎの第２の文を算出すること、
を特徴とするもの。
【請求項６】
正の整数ｎを法とする体系において、次式
Ｘｋ＝Ｘｋ−１＋１（１＜＝ｋ＜＝ｎ−１，Ｘ０＝０）
を満足する任意の正の整数Ｘｋ＝Ｘｋ１を第１の文とするとき、当該第１の文Ｘｋ１に基づいて、次式
Ｙｋ１＝Ｘｋ１ｍ（ｍは正の整数）
で定義される第２の文Ｙｋ１を、記憶装置と演算装置とを用いて求める暗号化・復号化方法であって、
２項係数ｉＣｊ（１＜＝ｉ＜＝ｍ、０＜＝ｊ＜＝ｉ）の全部または一部を、前記記憶装置に記憶させる係数記憶ステップと、
前記記憶装置に記憶されている２項係数を用いて、前記演算装置に、実質的に次式
Ｘｋｉ＝Σ（（ｊ＝０，ｉ）ｉＣｊ・Ｘｋ−１ｊ）
に基づいて、当該式における１つのｋについてのｉ＝１ないしｍに対応する一群のべき乗値Ｘｋｉを、ｋ−１＝ｋ０についてのｊ＝１ないしｍに対応する一群のべき乗値Ｘｋ０ｊを含む与えられた定数と、前記記憶装置に記憶されている２項係数とを用いて、ｋ＝ｋ０＋１からｋ＝ｋ１まで順に計算させることにより、前記第２の文Ｙｋ１を求める演算ステップと、
を備えた暗号化・復号化方法。
【請求項７】
請求項６の暗号化・復号化方法において、
前記演算ステップの実行に先立ち、入力された複数の第１の文を昇順で並べ替える入力整列ステップと、
前記演算ステップの実行後に、算出された複数の第２の文を、対応する第１の文の入力順に対応させて並べ戻す出力整列ステップと、
をさらに備え、
前記演算ステップにおいて、直前の第２の文を算出するときに得られた前記一群のべき乗値を利用して、つぎの第２の文を算出すること、
を特徴とするもの。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は暗号化・復号化装置および暗号化・復号化方法に関し、とくに、正の整数ｎを法とする体系において、次式　Ｘｋ＝Ｘｋ−１＋１（１＜＝ｋ＜＝ｎ−１，Ｘ０＝０）を満足する任意の正の整数Ｘｋ＝Ｘｋ１を第１の文とするとき、当該第１の文Ｘｋ１に基づいて、次式　Ｙｋ１＝Ｘｋ１ｍ（ｍは正の整数）で定義される第２の文Ｙｋ１を求める技術に関する。
【０００２】
【従来の技術】
暗号のひとつとしてＲＳＡ暗号が知られている。ＲＳＡ暗号の処理過程においては、任意の２つの素数ｐ，ｑの積であるｎと、素数ｐ，ｑに対して所定の制限を満足する任意の数ｅとを公開鍵（ｎ，ｅ）として、次式にしたがって平文Ｍを暗号化して暗号文Ｃを得る。
【０００３】
Ｃ＝Ｍｅ（ｍｏｄ　ｎ）
【０００４】
また、上記ｅ、素数ｐおよびｑから一義的に導かれる数ｄ、ならびに上記ｎを秘密鍵（ｎ，ｄ）として、次式にしたがって暗号文Ｃを復号化して平文Ｍを得る。
【０００５】
Ｍ＝Ｃｄ（ｍｏｄ　ｎ）
【０００６】
この場合、第三者が公開鍵（ｎ，ｅ）のうちｎを素因数分解して素数ｐ，ｑを求めることができれば、これらとｅとに基づいて容易にｄを知ることができ、秘密鍵（ｎ，ｄ）を得ることができる。
【０００７】
しかし、上述のｎの値を大きくすれば素数ｐ，ｑを求めるための素因数分解に膨大な時間が必要となるため、暗号の解読は事実上不可能となる。このように、ＲＳＡ暗号においては、ｎの値を大きくすることで、暗号の安全性を確保している。
【０００８】
【発明が解決しようとする課題】
しかしながら、従来のＲＳＡ暗号には次のような問題があった。すなわち、暗号化においては、平文Ｍについてｅ回のかけ算を行う必要がある。また、復号化においては、暗号文Ｃについてｄ回のかけ算を行う必要がある。したがって、安全性を確保するためにｎを大きくすればするほど、暗号化や復号化に時間がかかるという問題があった。
【０００９】
このような問題を解決するために、たとえばハードウェアのみで構成した暗号化回路を用いることも考えられる。図２１は、ｂビットの平文をｂビットの暗号文に変換するための暗号化回路のうち暗号文１ビット分に相当する回路１を示す図面である。
【００１０】
回路１は、２ｂ−１個のｂ入力ＡＮＤゲート３と１個の２ｂ−１入力ＯＲゲート５により構成されている。したがって、暗号化回路全体では、このｂ倍の論理ゲートが必要となる。このような暗号化回路を用いると、暗号化に要する時間を短くすることができるものの、膨大な数の論理ゲートが必要となる。復号化についても、同様の問題がある。
【００１１】
一方、全ての平文を予め暗号化して記憶しておく方法も考えられる。この方法を用いれば、平文が入力される都度計算を行う場合に比較し暗号化に要する時間を短くできる上、ハードウェアのみで構成した暗号化回路を用いる場合のように膨大な数の論理ゲートを必要とすることもない。しかしながら、ｎが大きくなれば、膨大な数の記憶素子が必要となるため、やはり限界がある。
【００１２】
この発明は、このような従来の暗号化方法や復号化方法の問題点を解消し、暗号化や復号化に要する時間が短く、かつ、膨大な数の記憶素子や論理ゲートを必要としない暗号化・復号化装置および暗号化・復号化方法を提供することを目的とする。
【００１３】
【課題を解決するための手段、発明の作用および効果】
請求項１の暗号化・復号化装置は、正の整数ｎを法とする体系において、次式Ｘｋ＝Ｘｋ−１＋１（１＜＝ｋ＜＝ｎ−１，Ｘ０＝０）を満足する任意の正の整数Ｘｋ＝Ｘｋ１を第１の文とするとき、当該第１の文Ｘｋ１に基づいて、次式　Ｙｋ１＝Ｘｋ１ｍ（ｍは正の整数）で定義される第２の文Ｙｋ１を求める暗号化・復号化装置であって、実質的に２項係数ｉＣｊ（１＜＝ｉ＜＝ｍ、１＜＝ｊ＜＝ｉ）の全部を記憶する係数記憶部と、実質的に次式　Ｘｋｉ＝１＋Σ（（ｊ＝１，ｉ）ｉＣｊ・Ｘｋ−１ｊ）に基づいて、当該式における１つのｋについてのｉ＝１ないしｍに対応する一群のべき乗値Ｘｋｉを、ｋ−１＝ｋ０についてのｊ＝１ないしｍに対応する一群のべき乗値Ｘｋ０ｊを初期値として、係数記憶部に記憶されている２項係数を用いて、ｋ＝ｋ０＋１からｋ＝ｋ１まで順に計算してゆくことにより、第２の文Ｙｋ１を求める演算部と、を備えている。
【００１４】
請求項６の暗号化・復号化方法は、正の整数ｎを法とする体系において、次式Ｘｋ＝Ｘｋ−１＋１（１＜＝ｋ＜＝ｎ−１，Ｘ０＝０）を満足する任意の正の整数Ｘｋ＝Ｘｋ１を第１の文とするとき、当該第１の文Ｘｋ１に基づいて、次式　Ｙｋ１＝Ｘｋ１ｍ（ｍは正の整数）で定義される第２の文Ｙｋ１を、記憶装置と演算装置とを用いて求める暗号化・復号化方法であって、２項係数ｉＣｊ（１＜＝ｉ＜＝ｍ、０＜＝ｊ＜＝ｉ）の全部または一部を、記憶装置に記憶させる係数記憶ステップと、記憶装置に記憶されている２項係数を用いて、演算装置に、実質的に次式Ｘｋｉ＝Σ（（ｊ＝０，ｉ）ｉＣｊ・Ｘｋ−１ｊ）に基づいて、当該式における１つのｋについてのｉ＝１ないしｍに対応する一群のべき乗値Ｘｋｉを、ｋ−１＝ｋ０についてのｊ＝１ないしｍに対応する一群のべき乗値Ｘｋ０ｊを含む与えられた定数と、記憶装置に記憶されている２項係数とを用いて、ｋ＝ｋ０＋１からｋ＝ｋ１まで順に計算させることにより、第２の文Ｙｋ１を求める演算ステップと、を備えている。
【００１５】
したがって、請求項１の暗号化・復号化装置または請求項６の暗号化・復号化方法においては、ｋ−１＝ｋ０についてのｊ＝１ないしｍに対応する一群のべき乗値Ｘｋ０ｊを初期値として記憶させておくとともに、所定の２項係数を係数記憶部に記憶させておき、これらの数値を用いて、１つのｋについてのｉ＝１ないしｍに対応する一群のべき乗値Ｘｋｉを、ｋ＝ｋ０＋１からｋ＝ｋ１まで順に計算してゆくことにより、第２の文Ｙｋ１を求めることができる。
【００１６】
このため、全ての第１の文を予め第２の文に変換して記憶しておく場合に比較して、必要な記憶素子の数が少なくて済む。また、暗号化・復号化装置をハードウェアのみで構成する場合に比較して、論理ゲートの数が少なくて済む。さらに、所定の整数ｎおよび整数ｍに対応する２項係数を一度記憶させておけば、以後、同一の整数ｎおよび整数ｍに関する暗号化または復号化の時間を短縮することができる。
【００１７】
すなわち、暗号化や復号化に要する時間が短く、かつ、膨大な数の記憶素子や論理ゲートを必要としない暗号化・復号化装置および暗号化・復号化方法を実現することができる。
【００１８】
請求項２の暗号化・復号化装置においては、演算部は、１つのｋについてのｊ＝１ないしｍに対応する一群のべき乗値Ｘｋ−１ｊを記憶する、べき乗値記憶部を備え、当該演算部は、係数記憶部に記憶されている２項係数と、べき乗値記憶部に記憶されている一群のべき乗値Ｘｋ−１ｊとを用いて、実質的に式　Ｘｋｉ＝１＋Σ（（ｊ＝１，ｉ）ｉＣｊ・Ｘｋ−１ｊ）に基づいて、１つのｋについてのｉ＝１ないしｍに対応する一群のべき乗値Ｘｋｉを算出し、その後、べき乗値記憶部の記憶内容を当該新たに算出した一群のべき乗値Ｘｋｉに更新すること、を特徴とする。
【００１９】
したがって、１つのｋについてのｉ＝１ないしｍに対応する一群のべき乗値Ｘｋｉを記憶できる記憶容量のべき乗記憶部を設けておけば、べき乗記憶部の記憶内容を順次書き換えて行くことで、一群のべき乗値Ｘｋｉをｋ＝ｋ０＋１からｋ＝ｋ１まで順に計算することができる。このため、第２の文Ｙｋ１を算出するのに必要なべき乗値Ｘｋｉを記憶するための記憶素子が少なくて済む。
【００２０】
請求項３の暗号化・復号化装置においては、演算部は、１つのｋおよび１つのｉに対応する１つのべき乗値Ｘｋｉを算出するために必要な１または２以上の２項係数を、係数記憶部に記憶されている２項係数の中から選択する係数選択部と、係数選択部で選択された２項係数と、べき乗値記憶部に記憶されている一群のべき乗値Ｘｋ−１ｊのうち当該選択された２項係数に対応する１または２以上のべき乗値Ｘｋ−１ｊと、の積をそれぞれ求める乗算部と、乗算部で得られた１または２以上の積および数値「１」の和を求める加算部と、加算部で得られた和を１つのｋおよび１つのｉに対応する１つのべき乗値Ｘｋｉとしてラッチするラッチ部と、係数選択部、乗算部、加算部、ラッチ部、べき乗値記憶部の動作を制御することにより、１つのｋについてのｉ＝１ないしｍに対応する複数のべき乗値Ｘｋｉを順次算出して、これらをラッチ部に順次ラッチし、１つのｋについてのｉ＝１ないしｍに対応する一群のべき乗値Ｘｋｉが全てラッチされた後、当該ラッチされた一群のべき乗値Ｘｋｉをべき乗値記憶部に転送して記憶させることによりべき乗値記憶部の記憶内容を当該新たに算出した一群のべき乗値Ｘｋｉに更新し、更新されたべき乗値Ｘｋｉを新たなべき乗値Ｘｋ−１ｊとして、順次計算を行うことにより第２の文Ｙｋ１を得る制御部と、を備えたこと、を特徴とする。
【００２１】
つまり、１つのｋについてのｉ＝１ないしｍに対応する一群のべき乗値Ｘｋｉを計算するにあたり、１つのｋおよび１つのｉに対応する１つのべき乗値Ｘｋｉを単位として順次、計算を繰り返すようにしている。このため、１つのｋについてのｉ＝１ないしｍに対応する一群のべき乗値Ｘｋｉを一度に計算する場合に比べて、乗算部などの数を少なくすることができる。したがって、装置に必要な論理ゲートの数を少なくすることができる。
【００２２】
請求項４の暗号化・復号化装置においては、当該暗号化・復号化装置は、入力された整数ｍに基づいて、実質的に前記２項係数ｉＣｊ（１＜＝ｉ＜＝ｍ、１＜＝ｊ＜＝ｉ）の全部を取得し、取得した当該２項係数を係数記憶部に記憶させる係数取得部を、さらに備えたこと、を特徴とする。
【００２３】
したがって、たとえば、ＲＳＡ暗号システムにおいて公開鍵として整数ｎおよび整数ｍが与えられた場合、これに基づいて所定の２項係数を、計算などにより取得することができる。このため、公開鍵を変更した場合であっても、暗号化に必要な２項係数を容易に取得することができる。復号化の場合も同様である。
【００２４】
請求項５の暗号化・復号化装置においては、当該暗号化・復号化装置は、入力された複数の第１の文を、昇順で並べ替えて演算部に与える入力整列部と、演算部で算出された複数の第２の文を、対応する第１の文の入力順に対応させて並べ戻す出力整列部と、をさらに備え、演算部は、直前の第２の文を算出するときに得られた一群のべき乗値を利用して、つぎの第２の文を算出すること、を特徴とする。
【００２５】
したがって、直前の第２の文を算出するときに得られた一群のべき乗値を利用して、つぎの第２の文を算出することで、当該つぎの第２の文を算出するための演算時間を短縮することができる。このため、複数の第１の文を暗号化または復号化する場合の全体の処理時間を短縮することができる。
【００２６】
なお、この明細書（請求の範囲を含む）において、「ａ＜＝ｂ」は、「ａは、ｂより小さいか、または、ｂに等しい」ことを表す。また、「Σ（（ｊ＝ａ，ｂ）ｆ（ｊ））」は、「ｆ（ａ）＋ｆ（ａ＋１）＋ｆ（ａ＋２）＋…＋ｆ（ｂ−１）＋ｆ（ｂ）」を表す。「ｉＣｊ」は、「コンビネーション」、すなわち、「ｉ・（ｉ−１）・（ｉ−２）・…・（ｉ−ｊ＋１）／ｊ！」を表す。また、「００＝１」と定義する。なお、とくに断らないかぎり、演算は、正の整数ｎを法とする体系において定義されるものとし、（ｍｏｄ　ｎ）の記載は省略する。
【００２７】
【発明の実施の形態】
図１は、この発明の一実施形態による暗号化・復号化装置１１の構成を示すブロック図である。暗号化・復号化装置１１は、正の整数ｎを法とする体系において、次式　Ｘｋ＝Ｘｋ−１＋１（１＜＝ｋ＜＝ｎ−１，Ｘ０＝０）を満足する任意の正の整数Ｘｋ＝Ｘｋ１を第１の文とするとき、当該第１の文Ｘｋ１に基づいて、次式　Ｙｋ１＝Ｘｋ１ｍ（ｍは正の整数）で定義される第２の文Ｙｋ１を求める装置であって、たとえば、ＲＳＡ暗号の暗号化および／または復号化を行うために用いることができる。
【００２８】
この実施形態においては、ＲＳＡ暗号の暗号化および／または復号化を行う場合を例に、暗号化・復号化装置１１を説明する。暗号化・復号化装置１１は、入力部１３，係数取得部１５，記憶装置である係数記憶部１７、入力整列部１９，演算装置である演算部２１，出力整列部２３，出力部２５を備えている。
【００２９】
入力部１３は、所定の整数ｎおよびｍならびに第１の文Ｘｋ１を入力するために用いられる。係数取得部１５は、入力部１３から入力された整数ｎおよびｍに基づいて、実質的に２項係数ｉＣｊ（１＜＝ｉ＜＝ｍ、１＜＝ｊ＜＝ｉ）の全部を取得し、取得した当該２項係数を係数記憶部１７に記憶させる。
【００３０】
入力整列部１９は、入力部１３から入力された複数の第１の文Ｘｋ１を、昇順で並べ替えて演算部２１に与える。
【００３１】
演算部２１は、実質的に次式　Ｘｋｉ＝１＋Σ（（ｊ＝１，ｉ）ｉＣｊ・Ｘｋ−１ｊ）に基づいて、当該式における１つのｋについてのｉ＝１ないしｍに対応する一群のべき乗値Ｘｋｉを、ｋ−１＝ｋ０についてのｊ＝１ないしｍに対応する一群のべき乗値Ｘｋ０ｊを初期値として、係数記憶部１７に記憶されている２項係数を用いて、ｋ＝ｋ０＋１からｋ＝ｋ１まで順に計算してゆくことにより、第２の文Ｙｋ１を求める。演算部２１は、直前の第２の文を算出するときに得られた一群のべき乗値を利用して、つぎの第２の文を算出する。
【００３２】
出力整列部２３は、演算部２１で算出された複数の第２の文Ｙｋ１を、対応する第１の文Ｘｋ１の入力順に対応させて並べ戻す。出力部２５は、出力整列部２３により並べ戻された第２の文Ｙｋ１を出力する。
【００３３】
上記演算部２１は、制御部２７，係数選択部２９，乗算部３１，加算部３３，ラッチ部３５，べき乗値記憶部３７を備えている。
【００３４】
係数選択部２９は、１つのｋおよび１つのｉに対応する１つのべき乗値Ｘｋｉを算出するために必要な１または２以上の２項係数を、係数記憶部１７に記憶されている２項係数の中から選択する。
【００３５】
べき乗値記憶部３７は、ｊ＝１ないしｍに対応する一群のべき乗値Ｘｋ−１ｊを記憶する。
【００３６】
乗算部３１は、係数選択部２９で選択された２項係数と、べき乗値記憶部３７に記憶されている一群のべき乗値Ｘｋ−１ｊのうち当該選択された２項係数に対応する１または２以上のべき乗値Ｘｋ−１ｊと、の積をそれぞれ求める。
【００３７】
加算部３３は、乗算部３１で得られた１または２以上の積および数値「１」の和を求める。ラッチ部３５は、加算部３３で得られた和を１つのｋおよび１つのｉに対応する１つのべき乗値Ｘｋｉとしてラッチする。
【００３８】
制御部２７は、係数選択部２９、乗算部３１、加算部３３、ラッチ部３５、べき乗値記憶部３７の動作を制御する。すなわち、制御部２７は、１つのｋについてのｉ＝１ないしｍに対応する複数のべき乗値Ｘｋｉを順次算出して、これらをラッチ部３５に順次ラッチする。１つのｋについてのｉ＝１ないしｍに対応する一群のべき乗値Ｘｋｉが全てラッチされた後、制御部２７は、当該ラッチされた一群のべき乗値Ｘｋｉをべき乗値記憶部３７に転送して記憶させることにより、べき乗値記憶部３７の記憶内容を、当該新たに算出した一群のべき乗値Ｘｋｉに更新する。制御部２７は、このようにして更新されたべき乗値Ｘｋｉを新たなべき乗値Ｘｋ−１ｊとして順次計算を行うことにより、第２の文Ｙｋ１を得る。
【００３９】
つぎに図２は、図１に示す暗号化・復号化装置１１を、コンピュータを用いて実現した場合のハードウェア構成の一例を示すブロック図である。図２において、暗号化・復号化装置１１は、コンピュータを暗号化・復号化装置１１として機能させるためのプログラムを記録した記録媒体であるハードディスク５０（記憶手段）、メインメモリ５２，ハードディスク５０に記録されたプログラムを実行する制御手段であるＣＰＵ４２，表示手段であるＣＲＴ４４，入力手段であるキーボード４６およびマウス４８，演算部２１および係数記憶部１７を備えている。
【００４０】
図２のキーボード４６、マウス４８、ハードディスク５０，ＣＰＵ４２およびメインメモリ５２が、図１の入力部１３に対応する。ＣＲＴ４４、ハードディスク５０，ＣＰＵ４２およびメインメモリ５２が、出力部２５に対応する。また、ＣＰＵ４２およびメインメモリ５２が、係数取得部１５、入力整列部１９および出力整列部２３に対応する。
【００４１】
図３は、図２の係数記憶部１７および演算部２１の構成の一例を示すブロック図である。係数記憶部１７および演算部２１は、たとえば、１または２以上のＬＳＩ（大規模集積回路）として回路基板（図示せず）に装着されコンピュータに組み込まれる。図３に示すように、演算部２１は、係数選択部２９、乗算部３１、加算部３３、ラッチ部３５、べき乗値記憶部３７および制御部２７を備えている。
【００４２】
係数選択部２９は、たとえば、アドレスデコーダー回路として実現される。乗算部３１は、たとえば、整数ｎを次式　ｎ≒２ｂで表現した場合、少なくともｍ個のｂビット乗算器３１ａ（乗算回路）（以下、単に「乗算器３１ａ」と言うことがある。）により構成される。加算部３３は、たとえば、少なくともｍ個のｂビット加算器３３ａ（加算回路）（以下、単に「加算器３３ａ」と言うことがある。）により構成される。
【００４３】
ラッチ部３５およびべき乗値記憶部３７は、たとえば、少なくともそれぞれｍ個のｂビットＲＡＭ（ランダムアクセスメモリ）回路（以下、それぞれ、「ラッチ用ＲＡＭ３５ａ」、「記憶用ＲＡＭ３７ａ」と言うことがある。）により構成される。制御部２７は、ハードウェアロジックおよび／またはソフトウェアにより構成されている。
【００４４】
図４は、図３の係数記憶部１７の構成の一例の一部を示す図面である。この例では、係数記憶部１７は、複数のメモリセルＭＣ００，ＭＣ０１，…を行列配置した構成を備えている。たとえば、メモリセルＭＣ００は、記憶素子を用いてデータを記憶する回路であり、記憶素子である強誘電体コンデンサＣＦ、およびメモリ選択用素子であるトランジスタＭ３を備えている。他のメモリセルもこれと同様の構成である。このように強誘電体記憶素子を用いたメモリセルはＦｅＲＡＭ（強誘電体ランダムアクセスメモリ）と呼ばれることがある。
【００４５】
係数記憶部１７は、さらに、複数の列選択線であるビットラインＢＬ０，ＢＬ１，…、複数のメモリ用行選択線であるメモリ用ワードラインＷＬＭ０，ＷＬＭ１，…、複数の行選択プレート線であるプレートラインＰＬ０，ＰＬ１，…、複数の規格電位発生回路であるセンスアンプＳＡ０，ＳＡ１，…を備えている。
【００４６】
ビットラインＢＬ０，ＢＬ１、…は、係数記憶部１７の同一列に属するメモリセルを選択するために係数記憶部１７の各列に対応して設けられている。メモリ用ワードラインＷＬＭ０，ＷＬＭ１、…は、係数記憶部１７の同一行に属するメモリセルを選択するために係数記憶部１７の各行に対応して設けられている。
【００４７】
プレートラインＰＬ０，ＰＬ１，…は、係数記憶部１７の同一行に属するメモリセルを構成する強誘電体コンデンサのみに接続するために、係数記憶部１７の各行に対応して設けられている。
【００４８】
たとえば、プレートラインＰＬ０は、強誘電体コンデンサＣＦに対するデータの書き込みおよび読み出し動作の際に、強誘電体コンデンサＣＦに所定の電位である、“Ｈ”電位（電源電位ＶＤＤ）および“Ｌ”電位（接地電位ＧＮＤ）が交互にあらわれる矩形信号を印加する。他のプレートラインもこれと同様の構成である。
【００４９】
センスアンプＳＡ０，ＳＡ１、…は、各ビットラインＢＬ０，ＢＬ１、…にそれぞれ接続され、強誘電体コンデンサＣＦに対するデータの読み出し動作の際に、当該データに対応する規格電位を発生させる。
【００５０】
たとえば、センスアンプＳＡ０は、ビットラインＢＬ０に接続されている。センスアンプＳＡ０は、強誘電体コンデンサＣＦに対するデータの読み出し動作の際に、当該データに対応する規格電位である“Ｈ”電位（電源電位ＶＤＤ）または“Ｌ”電位（接地電位ＧＮＤ）を発生させる。他のセンスアンプもこれと同様の構成である。
【００５１】
係数記憶部１７を構成するメモリセルの個数はとくに限定されるものではないが、実質的に２項係数ｉＣｊ（１＜＝ｉ＜＝ｍ、１＜＝ｊ＜＝ｉ）の全部を記憶できる個数であれば問題ない。
【００５２】
すなわち、メモリセルの個数としては、ｂビットの２項係数をｍ・（ｍ＋１）／２個記憶できる個数、つまり、ｂ・ｍ・（ｍ＋１）／２個あれば十分であるが、これより少ない個数でも、実質的に２項係数ｉＣｊ（１＜＝ｉ＜＝ｍ、１＜＝ｊ＜＝ｉ）の全部を記憶できる個数であれば問題ない。
【００５３】
たとえば、メモリセルの個数が、ｂ・ｍ・（ｍ−１）／４個程度でも問題はない。これは、値が「１」となる２項係数ｉＣｉ用の記憶領域を必ずしも全て設ける必要がないことや、互いに同一値となる２項係数ｉＣｊおよびｉＣｉ−ｊのための記憶領域をいずれか一方の分だけ設けるようにすることができるからである。
【００５４】
つぎに、図５に、暗号化・復号化装置１１を用いて、ＲＳＡ暗号システムにおける暗号化処理を行う場合の処理手順の一例を表すフローチャートを示す。なお、ＲＳＡ暗号システムにおける暗号化処理における平文Ｍ、暗号文Ｃ、公開鍵（ｎ，ｅ）を構成する整数ｅは、それぞれ、上述の第１の文Ｘ、第２の文Ｙ、整数ｍに対応する。
【００５５】
図２に示すＣＰＵ４２は、まず、入力処理を行う（ステップＳ１）。このステップにおいて、ＣＰＵ４２は、ＲＳＡ暗号の公開鍵（ｎ，ｅ）を構成する整数ｎおよび整数ｅがキーボード４６やマウス４８を用いて入力されると、これらを、メインメモリ５２に記憶させる。
【００５６】
また、キーボード４６やマウス４８を用いて暗号化の対象となる文字列などが入力されると、これらを所定の数字列、すなわち、１または２以上の平文Ｍｋ１に置き換えて、メインメモリ５２に記憶させる。もちろん、キーボード４６やマウス４８から、直接、平文Ｍｋ１である数字列を入力するようにしてもよい。
【００５７】
図１９Ａは、メインメモリ５２における平文Ｍｋ１の記憶状態の一例を模式的に表した図面である。この図から分かるように、平文Ｍｋ１をメインメモリ５２に記憶する際、入力された順番を表す入力番号と関連付けて記憶するようにしている。この例では、複数の平文「５」、「７」、「５」、「３」、…が、それぞれ、入力番号「１」、「２」、「３」、「４」、…と関連付けて記憶されている。
【００５８】
なお、メインメモリ５２への入力は、キーボード４６やマウス４８から行われる場合に限定されるものではない。たとえば、ハードディスク５０から読み込んだり、通信網（図示せず）を介して読み込んだりするようにしてもよい。
【００５９】
つぎに、ＣＰＵ４２は、新たな公開鍵（ｎ，ｅ）が入力されたか否かを判断する（ステップＳ２）。
【００６０】
新たな公開鍵（ｎ，ｅ）が入力された場合、ＣＰＵ４２は、入力された公開鍵（ｎ，ｅ）に基づいて、実質的に２項係数ｉＣｊ（１＜＝ｉ＜＝ｅ、１＜＝ｊ＜＝ｉ）の全部を計算し、計算結果を係数記憶部１７に記憶させる（ステップＳ３）。なお、この場合、値が「１」となる２項係数ｉＣｉは、必ずしも計算させる必要はない。また、互いに同一値となる２項係数ｉＣｊおよびｉＣｉ−ｊについては、いずれか一方のみを計算させるようにしてもよい。このステップＳ３が係数記憶ステップに対応する。
【００６１】
なお、ステップＳ２において、新たな公開鍵（ｎ，ｅ）が入力されたかったと判断した場合、ＣＰＵ４２は、ステップＳ３を実行せずに、制御をステップＳ４に移す。
【００６２】
つぎに、ＣＰＵ４２は、後述のステップＳ５〜ステップＳ７の処理をまだ行っていない平文Ｍｋ１がメインメモリ５２にあるか否かを判断する（ステップＳ４）。
【００６３】
ステップＳ４において、未処理の平文Ｍｋ１があると判断した場合、ＣＰＵ４２は、未処理の平文Ｍｋ１のうち入力番号の順に所定個数の平文Ｍｋ１を取り出し、これらを昇順で並べ替える（ステップＳ５）。
【００６４】
上記並び替えの対象となる所定個数は、とくに限定されるものではなく、たとえば、入力された全ての平文Ｍｋ１を並べ替えの対象としてもよい。ただし、並べ替えの対象となる平文Ｍｋ１の個数があまり多すぎると、並べ替えに要する時間が長くなりすぎて全体の処理時間が長くなってしまうおそれがある。このような場合は、一度に並べ替えを行う平文Ｍｋ１の個数を制限し、２回以上に分けて処理するのが好ましい。
【００６５】
図１９Ｂは、メインメモリ５２における、並べ替え後の平文Ｍｋ１の記憶状態の一例を模式的に表した図面である。この図から分かるように、所定個数の平文が「３」、「５」、「５」、「７」、…というように、昇順で並べ替えて記憶されている。この場合、各平文と入力番号との関係は失われずに記憶されている。このステップＳ５が入力整列ステップに対応する。
【００６６】
つぎに、ＣＰＵ４２は、並べ替えられた所定個数の平文Ｍｋ１に対し、順番に暗号演算処理を施こす（ステップＳ６）。図６は、ステップＳ６の暗号演算処理の詳細を示すフローチャートの一例である。図７〜図１８は、暗号演算処理における演算部２１の状態の遷移の一例を示す図面である。図１９Ｂに示す並べ替えられた所定個数の平文を例に、図６〜図１８に基づいて、暗号演算処理を詳述する。
【００６７】
図６に示すように、演算部２１の制御部２７は、ＣＰＵ４２から暗号演算処理開始の信号を受け取ると、演算部２１の初期化を行う（ステップＳ１１）。図７に示すように、初期化処理において、制御部２７は、演算部２１を構成するべき乗値記憶部３７およびカウンター部（図示せず）の初期化を行う。
【００６８】
べき乗値記憶部３７の初期化は、べき乗値記憶部３７を構成する複数個の記憶用ＲＡＭ３７ａ（ｂビットＲＡＭ）のうち、ｊ＝１ないしｅに対応する一群のべき乗値Ｍｋ−１ｊを記憶するためのｅ個の記憶用ＲＡＭ３７ａを初期化することにより行う。
【００６９】
具体的には、上記初期化は、ｅ個の記憶用ＲＡＭ３７ａに、ｋ−１＝ｋ０についてのｊ＝１ないしｅに対応する一群のべき乗値Ｍｋ−１ｊをそれぞれセットすることにより行う。この実施形態では　ｋ０＝１であるから、べき乗値記憶部３７を構成するｅ個の記憶用ＲＡＭ３７ａには、ｊ＝１ないしｅに対応する一群のべき乗値Ｍ１ｊ（＝１）がセットされる。
【００７０】
なお、べき乗値記憶部３７の初期化処理において、べき乗値記憶部３７を構成する全ての記憶用ＲＡＭ３７ａを初期化するよう構成することもできる。
【００７１】
カウンター部の初期化は、ｋカウンター（図示せず）を　ｋ＝ｋ０にセットすることにより行う。この実施形態においてはｋ０＝１としている。したがって、ｋカウンターはｋ＝１にセットされる。
【００７２】
初期化処理を終了すると、制御部２７は、平文Ｍｋ１を取り込むとともに、平文Ｍｋ１の添字であるｋ１の値（すなわち、Ｍｋ１の値そのもの）を記憶する（ステップＳ１２）。ここでは、図８に示すように、最初の平文「３」が取り込まれるとともに、ｋ１＝３が記憶される。
【００７３】
制御部２７は、つぎに、ｋカウンターの値ｋがｋ１以上であるか否かを判断し（ステップＳ１３）、ｋ＞＝ｋ１でなければ、ｋ＝ｋ＋１とするとともに、カウンター部のｉカウンター（図示せず）を　ｉ＝０にセットする（ステップＳ１４）。
【００７４】
制御部２７は、つぎに、ｉカウンターの値ｉがｅ以上であるか否かを判断し（ステップＳ１５）、ｉ＞＝ｅでなければ、ｉ＝ｉ＋１とする（ステップＳ１６）。
【００７５】
制御部２７は、つぎに、現在のｋカウンターおよびｉカウンターの示すｋおよびｉにより規定される１つのべき乗値Ｍｋｉを次式　Ｍｋｉ＝１＋Σ（（ｊ＝１，ｉ）ｉＣｊ・Ｍｋ−１ｊ）　に基づいて算出するとともに、算出したべき乗値Ｍｋｉをラッチ部３５の第ｉラッチ用ＲＡＭ３５ａ（図８では、左からｉ番目のラッチ用ＲＡＭ３５ａ）にラッチする（ステップＳ１７）。
【００７６】
ステップＳ１７の処理を詳述する。制御部２７は、係数記憶部１７に記憶されている複数の２項係数のうちｊ＝１ないしｉに対応する第１ないし第ｉのｉ個の２項係数ｉＣｊを選択し、選択したｉ個の２項係数を、乗算部３１を構成する複数の乗算器３１ａのうちｊ＝１ないしｉに対応する第１ないし第ｉ乗算器３１ａ（図８では、左端からｉ番目までのｉ個の乗算器３１ａ）に、それぞれ送る。
【００７７】
同時に、制御部２７は、べき乗値記憶部３７を構成する複数の記憶用ＲＡＭ３７ａ（ｂビットＲＡＭ）のうちｊ＝１ないしｉに対応する第１ないし第ｉ記憶用ＲＡＭ３７ａ（図８では、左から１番目からｉ番目までのｉ個の記憶用ＲＡＭ３７ａ）に記憶されているＭｋ−１１ないしＭｋ−１ｉを読み出して、乗算部３１のうち対応する第１ないし第ｉ乗算器３１ａに送る。
【００７８】
乗算部３１の第１ないし第ｉ乗算器３１ａは、係数記憶部１７から選択されたｉ個の２項係数と、べき乗値記憶部３７から送られてきたｉ個のべき乗値に基づいて、制御部２７の制御下で、ｊ＝１ないしｉに対応する　ｉＣ１・Ｍｋ−１ないし　ｉＣｉ・Ｍｋ−１ｉの値を、それぞれ算出する。
【００７９】
つぎに、加算部３３の第ｉ加算器３３ａ（図８では、左端からｉ番目の加算器３３ａ）は、乗算部３１において計算されたｉ個の計算結果と数値「１」との和を、制御部２７の制御下で、計算する。これにより、１つのｋおよび１つのｉに対応する１つのべき乗値　Ｍｋｉ＝１＋Σ（（ｊ＝１，ｉ）ｉＣｊ・Ｍｋ−１ｊ）　が得られる。
【００８０】
このようにして得られた１つのべき乗値　Ｍｋｉは、制御部２７の制御下で、ラッチ部３５の第ｉラッチ用ＲＡＭ３５ａにラッチされる。
【００８１】
ここでは、図８に示すように、ｋ＝２，ｉ＝１であるから、べき乗値Ｍｋｉ＝Ｍ２が次式　Ｍ２＝１＋１Ｃ１・Ｍ１　に基づいて算出されるとともに、算出されたべき乗値Ｍ２＝２がラッチ部３５の第１ラッチ用ＲＡＭ３５ａ（図８では、左端のラッチ用ＲＡＭ３５ａ）にラッチされる。
【００８２】
図６に戻って、制御部２７は、ステップＳ１５〜ステップＳ１７の処理をｉ＝ｅまで繰り返す。
【００８３】
図９は、ｉ＝２におけるステップＳ１７の処理を説明するための図面である。ここでは、ｋ＝２，ｉ＝２であるから、べき乗値Ｍｋｉ＝Ｍ２２が次式　Ｍ２２＝１＋２Ｃ１・Ｍ１＋２Ｃ２・Ｍ１２　に基づいて算出されるとともに、算出されたべき乗値Ｍ２２＝４がラッチ部３５の第２ラッチ用ＲＡＭ３５ａ（図９では、左から２番目のラッチ用ＲＡＭ３５ａ）にラッチされる。
【００８４】
図１０は、ｉ＝ｅにおけるステップＳ１７の処理を説明するための図面である。ここでは、ｋ＝２，ｉ＝ｅであるから、べき乗値Ｍｋｉ＝Ｍ２ｅが次式　Ｍ２ｅ＝１＋ｅＣ１・Ｍ１＋ｅＣ２・Ｍ１２＋…＋ｅＣｅ・Ｍ１ｅ　に基づいて算出されるとともに、算出されたべき乗値Ｍ２ｅがラッチ部３５の第ｅラッチ用ＲＡＭ３５ａ（図１０では、左からｅ番目のラッチ用ＲＡＭ３５ａ）にラッチされる。
【００８５】
このようにして、１つのｋについて、ｉ＝１ないしｅに対応する一群（ｅ個）のべき乗値Ｍｋｉが算出され、ラッチ部３５の第１ないし第ｅラッチ用ＲＡＭ３５ａにラッチされると、図１１に示すように、制御部２７は、ラッチ部３５にラッチされた当該一群のべき乗値Ｍｋｉを、べき乗値記憶部３７を構成する複数の記憶用ＲＡＭ３７ａのうち、対応する第１ないし第ｅ記憶用ＲＡＭ３７ａにそれぞれ転送して記憶させる（図６、ステップＳ１８）。
【００８６】
ここでは、図１１に示すように、ｋ＝２であるから、ｉ＝１ないしｅに対応するｅ個のべき乗値Ｍ２ｉ、すなわち、Ｍ２＝２、Ｍ２２＝４、…、Ｍ２ｅが、べき乗値記憶部３７に記憶される。
【００８７】
図６に示すように、制御部２７は、ステップＳ１３〜ステップＳ１８の処理をｋ＝ｋ１まで繰り返す。
【００８８】
図１２は、ｋ＝３，ｉ＝１におけるステップＳ１７の処理を説明するための図面である。ここでは、ｋ＝３，ｉ＝１であるから、べき乗値記憶部３７に記憶されている一群（ｅ個）のべき乗値のうち１個のべき乗値Ｍ２に基づいて、べき乗値Ｍｋｉ＝Ｍ３が次式　Ｍ３＝１＋１Ｃ１・Ｍ２　にしたがって算出されるとともに、算出されたべき乗値Ｍ３＝３がラッチ部３５の第１ラッチ用ＲＡＭ３５ａにラッチされる。
【００８９】
図１３は、ｋ＝３、ｉ＝ｅにおけるステップＳ１７の処理を説明するための図面である。ここでは、ｋ＝３，ｉ＝ｅであるから、べき乗値記憶部３７に記憶されている一群（ｅ個）のべき乗値Ｍ２、Ｍ２２、…、Ｍ２ｅに基づいて、べき乗値Ｍｋｉ＝Ｍ３ｅが次式　Ｍ３ｅ＝１＋ｅＣ１・Ｍ２＋ｅＣ２・Ｍ２２＋…＋ｅＣｅ・Ｍ２ｅ　にしたがって算出されるとともに、算出されたべき乗値Ｍ３ｅがラッチ部３５の第ｅラッチ用ＲＡＭ３５ａにラッチされる。
【００９０】
ｋ＝２の場合と同様に、ｋ＝３について、ｉ＝１ないしｅに対応する一群（ｅ個）のべき乗値Ｍｋｉが算出され、ラッチ部３５の第１ないし第ｅラッチ用ＲＡＭ３５ａにラッチされると、図１４に示すように、制御部２７は、ラッチ部３５にラッチされた当該一群のべき乗値Ｍｋｉを、べき乗値記憶部３７を構成する複数の記憶用ＲＡＭ３７ａのうち、対応する第１ないし第ｅ記憶用ＲＡＭ３７ａにそれぞれ転送して記憶させる（ステップＳ１８）。
【００９１】
図６に示すように、ステップＳ１３において、ｋ＝ｋ１（＝３）であると判断すると、図１４に示すように、制御部２７は、べき乗値記憶部３７の第ｅ記憶用ＲＡＭ３７ａに記憶されているべき乗値Ｍｋｅ＝Ｍｋ１ｅを、暗号文Ｃｋ１として出力する（ステップＳ１９）。ここでは、ｋ１＝３であるから、暗号文Ｃｋ１＝Ｃ３が出力される。
【００９２】
図６に示すように、制御部２７は、つぎに、ステップＳ５（図５参照）において並べ替えられた１個または２個以上の平文Ｍｋ１の取り込みが全て終了したか否かを判断する（ステップＳ２０）。
【００９３】
取り込みべき平文Ｍｋ１が残っている場合、制御部２７は残りの平文Ｍｋ１全てについて、ステップＳ１２〜ステップＳ２０の処理を繰り返す。
【００９４】
図１５は、ｋ１＝５，ｋ＝４，ｉ＝１におけるステップＳ１７の処理を説明するための図面である。ここでは、ｋ＝４，ｉ＝１であるから、べき乗値記憶部３７に記憶されている一群（ｅ個）のべき乗値のうち１個のべき乗値Ｍ３に基づいて、べき乗値Ｍｋｉ＝Ｍ４が次式　Ｍ４＝１＋１Ｃ１・Ｍ３　にしたがって算出されるとともに、算出されたべき乗値Ｍ４＝４がラッチ部３５の第１ラッチ用ＲＡＭ３５ａにラッチされる。
【００９５】
図１６は、ｋ１＝５におけるステップＳ１９の処理を説明するための図面である。ｋ１＝３の場合と同様に、制御部２７は、べき乗値記憶部３７の第ｅ記憶用ＲＡＭ３７ａに記憶されているべき乗値Ｍｋｅ＝Ｍｋ１ｅを、暗号文Ｃｋ１として出力する。ここでは、ｋ１＝５であるから、暗号文Ｃｋ１＝Ｃ５が出力される。
【００９６】
図１７は、同じ値の平文Ｍｋ１が連続して取り込まれた場合の処理を説明するための図面である。ステップＳ１２において新たに取り込んだ平文Ｍｋ１が、直前に暗号演算処理をすませた平文Ｍｋ１と同じであるから、ｋ１＝ｋである。したがって、ステップＳ１３の判断を経て、制御部２７は、べき乗値記憶部３７の第ｅ記憶用ＲＡＭ３７ａに記憶されているべき乗値Ｍｋｅ＝Ｍｋ１ｅを、そのまま、暗号文Ｃｋ１として出力する（ステップＳ１９）。
【００９７】
ここでは、新たに取り込んだ平文Ｍｋ１＝５であるから、暗号文Ｃｋ１＝Ｃ５が出力されることになる。
【００９８】
図１８は、ｋ１＝７，ｋ＝６，ｉ＝１におけるステップＳ１７の処理を説明するための図面である。ここでは、ｋ＝６，ｉ＝１であるから、べき乗値記憶部３７に記憶されている一群（ｅ個）のべき乗値のうち１個のべき乗値Ｍ５に基づいて、べき乗値Ｍｋｉ＝Ｍ６が次式　Ｍ６＝１＋１Ｃ１・Ｍ５　にしたがって算出されるとともに、算出されたべき乗値Ｍ６＝６がラッチ部３５の第１ラッチ用ＲＡＭ３５ａにラッチされる。
【００９９】
このように、複数の平文Ｍｋ１を昇順で並べ替えたあと暗号演算を実行するようにしておけば、新たな平文Ｍｋ１の暗号演算を行う際、前に行った平文Ｍｋ１についての暗号演算の結果や経過を次々と利用できるので、全体としての暗号演算の時間を短縮することができる。
【０１００】
このようにして、ステップＳ５（図５参照）において並べ替えられた１個または２個以上の平文Ｍｋ１全てについての暗号演算処理が終了すると、制御部２７は、ステップＳ６（図５参照）の処理を終了し（ステップＳ２０）、制御をＣＰＵ４２に戻す。このステップＳ６が演算ステップに対応する。
【０１０１】
図５に戻って、ＣＰＵ４２は、ステップＳ６で出力された暗号文Ｃｋ１の並べ戻しを行う（ステップＳ７）。なお、上述のステップＳ６で出力された暗号文Ｃｋ１は、図２０Ａに示すように、上述の入力番号との関連付けを維持したまま、出力順にメインメモリ５２に記憶されている。この実施形態においては、図１９Ｂに示す平文の記憶領域が、対応する暗号文で上書きされ、図２０Ａのようになっている。
【０１０２】
ステップＳ７において、ＣＰＵ４２は、図２０Ａで表される複数の暗号文を、対応する入力番号の順に並べ戻す。入力番号順に並べ戻された複数の暗号文を図２０Ｂに示す。このステップＳ７が出力整列ステップに対応する。
【０１０３】
つぎに、ＣＰＵ４２は、まだ並べ替えを行っていない未処理の平文があるか否かを判断し（ステップＳ４）、未処理の平文が残っている場合は、ステップＳ４〜ステップＳ７の処理を繰り返す。
【０１０４】
ステップＳ４において、未処理の平文が残っていないと判断した場合、ＣＰＵ４２は、メインメモリ５２に記憶されている図２０Ｂに示す暗号文を入力番号順に出力する（ステップＳ８）。出力形式はとくに限定されるものではなく、図２０Ｂに示す暗号文を入力番号順に、たとえば、ＣＲＴ４４に表示したり、ハードディスク５０に転送したり、プリンタ（図示せず）を介して紙に印刷したり、通信網（図示せず）を介して外部に出力したりすればよい。
【０１０５】
なお、図５に示すステップＳ１〜ステップＳ２およびステップＳ４が、図１に示す入力部１３に対応する。ステップＳ３が計数取得部１５および計数記憶部１７に対応する。ステップＳ５が入力整列部１９に対応する。ステップＳ６が演算部２１に対応する。ステップＳ７が出力整列部２３に対応する。ステップＳ８が出力部２５に対応する。
【０１０６】
また、図６に示すステップＳ１１〜ステップＳ１６およびステップＳ１９〜ステップＳ２０が、図１の制御部２７に対応する。ステップＳ１７が、係数選択部２９，乗算部３１，加算部３３およびラッチ部３５に対応する。ステップＳ１８が、べき乗値記憶部３７に対応する。
【０１０７】
なお、上述の実施形態においては、ｋ０＝１とした場合の一群のべき乗値Ｘｋ０ｊを初期値として暗号化・復号化の演算を行うようにしたが、この発明はこれに限定されるものではない。たとえば、ｋ０＝０とした場合の一群のべき乗値Ｘｋ０ｊを初期値として暗号化・復号化の演算を行うようにしてもよい。
【０１０８】
また、上述の実施形態においては、１つのｋについてのｉ＝１ないしｍに対応する一群のべき乗値Ｘｋｉを計算するにあたり、１つのｋおよび１つのｉに対応する１つのべき乗値Ｘｋｉを単位として順次、計算を繰り返すようにしているが、この発明はこれに限定されるものではない。
【０１０９】
たとえば、１つのｋについてのｉ＝１ないしｍに対応する一群のべき乗値Ｘｋｉを一度に計算するよう構成することもできる。ただし、前者のように構成すれば、乗算部などの数を少なくすることができるので、装置に必要な論理ゲートの数を少なくすることができる。
【０１１０】
また、上述の実施形態においては、べき乗値記憶部が、１つのｋについてのｊ＝１ないしｍに対応する一群のべき乗値Ｘｋ−１ｊを記憶するよう構成したが、べき乗値記憶部は、このような構成に限定されるものではない。
【０１１１】
たとえば、べき乗値記憶部が、２つ以上のｋについてのｊ＝１ないしｍに対応する一群のべき乗値Ｘｋ−１ｊを記憶するよう構成することもできる。しかし、前者のように構成することで、必要な記憶素子の数を少なくすることができる。
【０１１２】
また、上述の実施形態においては、係数取得部は、整数ｎおよびｍに対応した必要な２項係数を計算により取得し、係数記憶部に記憶させるようにしたが、この発明はこれに限定されるものではない。たとえば、暗号化・復号化装置の内部または外部に設けた記憶領域に多数の２項係数を予め記憶しておき、必要な２項係数を当該記憶領域から係数記憶部に転送するようにしてもよい。
【０１１３】
また、上述の実施形態においては、係数記憶部のメモリセルを構成する記憶素子として強誘電体コンデンサを用いた場合を例に説明したが、メモリセルを構成する記憶素子は、これに限定されるものではない。メモリセルを構成する記憶素子として、たとえば、強誘電体トランジスタなど他の強誘電体記憶素子を用いることもできる。
【０１１４】
また、メモリセルを構成する記憶素子として、強誘電体記憶素子以外の不揮発性の記憶素子、たとえば、Ｅ２ＰＲＯＭを用いることもできる。さらに、メモリセルを構成する記憶素子として、揮発性の記憶素子、たとえば、クロスカップルドフリップフロップ等を用いることもできる。
【０１１５】
しかしながら、メモリセルを構成する記憶素子として、強誘電体記憶素子を用いることで、バックアップ電源や特別の書き込み装置が不要で、かつ高速の読み書き動作が可能となるため、好都合である。
【０１１６】
また、上述の実施形態においては、係数記憶部が、実質的に２項係数ｉＣｊ（１＜＝ｉ＜＝ｅ、１＜＝ｊ＜＝ｉ）の全部を記憶するよう構成したが、この発明はこれに限定されるものではない。たとえば、係数記憶部が、２項係数ｉＣｊ（１＜＝ｉ＜＝ｅ、０＜＝ｊ＜＝ｉ）の全部または一部を記憶するよう構成することもできる。
【０１１７】
すなわち、係数記憶部に、たとえば、ｉＣ０（１＜＝ｉ＜＝ｅ）をも記憶させるようにすることができる。この場合、演算部においては、たとえば、次式　Ｘｋｉ＝Σ（（ｊ＝０，ｉ）ｉＣｊ・Ｘｋ−１ｊ）　に基づいて、一群のべき乗値Ｘｋｉを計算させることもできる。
【０１１８】
一方、係数記憶部に、たとえば、実質的に２項係数ｉＣｊ（１＜＝ｉ＜＝ｅ、１＜＝ｊ＜＝ｉ）一部のみをを記憶するよう構成することもできる。この場合、係数記憶部に記憶されていないが演算部において必要な２項係数は、その都度、計算などにより取得するようにすればよい。
【０１１９】
また、上述の実施形態においては、暗号化・復号化装置が、入力部１３，係数取得部１５，入力整列部１９，出力整列部２３および出力部２５の機能全てを備えた場合を例に説明したが、この発明はこれに限定されるものではない。たとえば、暗号化・復号化装置が、これらの全部または一部の機能を持たないよう構成することもできる。この場合、外部機器にこれらの全部または一部の機能を持たせるようにすることもできる。
【０１２０】
また、上述の実施形態においては、暗号化・復号化装置がＲＳＡ暗号システムにおける暗号化処理を行う場合を例に説明したが、この発明はこれに限定されるものではない。暗号化・復号化装置がＲＳＡ暗号システムにおける復号化処理を行う場合にも、この発明を適用することができる。この場合、ＲＳＡ暗号システムにおける復号化処理における暗号文Ｃ、平文Ｍ、秘密鍵（ｎ，ｄ）を構成する整数ｄが、それぞれ、上述の第１の文Ｘ、第２の文Ｙ、整数ｍに対応することになる。
【０１２１】
また、上述の実施形態においては、暗号化・復号化装置が、ＲＳＡ暗号の暗号化・復号化に用いられる場合を例に説明したが、この発明はこれに限定されるものではない。この発明は、ＲＳＡ暗号以外の暗号の暗号化・復号化に用いることもできる。
【図面の簡単な説明】
【図１】この発明の一実施形態による暗号化・復号化装置１１の構成を示すブロック図である。
【図２】図１に示す暗号化・復号化装置１１を、コンピュータを用いて実現した場合のハードウェア構成の一例を示すブロック図である。
【図３】図２の係数記憶部１７および演算部２１の構成の一例を示すブロック図である。
【図４】図３の係数記憶部１７の構成の一例の一部を示す図面である。
【図５】暗号化・復号化装置１１を用いて、ＲＳＡ暗号システムにおける暗号化処理を行う場合の処理手順の一例を表すフローチャートである。
【図６】図５の暗号演算処理の詳細を示すフローチャートの一例である。
【図７】暗号演算処理における演算部２１の状態の遷移の一例を示す図面である。
【図８】暗号演算処理における演算部２１の状態の遷移の一例を示す図面である。
【図９】暗号演算処理における演算部２１の状態の遷移の一例を示す図面である。
【図１０】暗号演算処理における演算部２１の状態の遷移の一例を示す図面である。
【図１１】暗号演算処理における演算部２１の状態の遷移の一例を示す図面である。
【図１２】暗号演算処理における演算部２１の状態の遷移の一例を示す図面である。
【図１３】暗号演算処理における演算部２１の状態の遷移の一例を示す図面である。
【図１４】暗号演算処理における演算部２１の状態の遷移の一例を示す図面である。
【図１５】暗号演算処理における演算部２１の状態の遷移の一例を示す図面である。
【図１６】暗号演算処理における演算部２１の状態の遷移の一例を示す図面である。
【図１７】暗号演算処理における演算部２１の状態の遷移の一例を示す図面である。
【図１８】暗号演算処理における演算部２１の状態の遷移の一例を示す図面である。
【図１９】図１９Ａは、メインメモリ５２における、並べ替え前の複数の平文Ｍｋ１の一例を模式的に表した図面である。図１９Ｂは、メインメモリ５２における、並べ替え後の複数の平文Ｍｋ１の一例を模式的に表した図面である。
【図２０】図２０Ａは、出力順にメインメモリ５２に記憶されている複数の暗号文Ｃｋ１の一例を模式的に表した図面である。図２０Ｂは、入力番号順に並べ戻された複数の暗号文Ｃｋ１の一例を模式的に表した図面である。
【図２１】ハードウェアのみで構成した暗号化回路を示す図面である。
【符号の説明】
１７・・・・・・係数記憶部
２１・・・・・・演算部
【図１】
2004101846.tif 000003
【図２】
2004101846.tif 000004
【図３】
2004101846.tif 000005
【図４】
2004101846.tif 000006
【図５】
2004101846.tif 000007
【図６】
2004101846.tif 000008
【図７】
2004101846.tif 000009
【図８】
2004101846.tif 000010
【図９】
2004101846.tif 000011
【図１０】
2004101846.tif 000012
【図１１】
2004101846.tif 000013
【図１２】
2004101846.tif 000014
【図１３】
2004101846.tif 000015
【図１４】
2004101846.tif 000016
【図１５】
2004101846.tif 000017
【図１６】
2004101846.tif 000018
【図１７】
2004101846.tif 000019
【図１８】
2004101846.tif 000020
【図１９】
2004101846.tif 000021
【図２０】
2004101846.tif 000022
【図２１】
2004101846.tif 000023