(57)【特許請求の範囲】
【請求項１】
複数のバッファを含むバッファ部と、
前記バッファ部に接続され、前記バッファ部に含まれるいずれのバッファともデータを入出力可能であり、前記バッファ部に含まれるいずれかのバッファより処理対象のブロックデータを読込み、暗号演算処理または復号演算処理を実行し、いずれかのバッファに処理結果を書込む演算器と、
前記バッファ部に接続され、前記バッファ部に含まれるいずれかのバッファに処理対象のブロックデータを書込み、いずれかのバッファから前記演算器での演算結果を読込むデータ制御部と、
前記バッファ部、前記演算器および前記データ制御部に接続され、前記演算器がデータを読込むバッファ、前記演算器がデータを書込むバッファ、前記データ制御部がデータを読込むバッファおよび前記データ制御部がデータを書込むバッファとが重ならないように、前記演算器および前記データ制御部の入出力の対象となるバッファを指定するバッファ指定部とを含み、
前記バッファ部は、３つ以上のバッファにより構成され、
前記演算器は、
データを保持するレジスタと、
前記レジスタに接続され、前記レジスタに保持されたデータに対して暗号化演算または復号化演算を施し、演算結果を前記レジスタに書込む演算処理部と、
前記レジスタに接続され、前記モードがCipher Block Chainingモードでかつ現在行なっている処理が暗号処理の場合に前記レジスタに保持された値を出力し、それ以外の場合に０を出力する第１の選択回路と、
前記第１の選択回路、前記バッファ部および前記レジスタに接続され、前記第１の選択回路の出力および前記バッファ部を構成するいずれかのバッファに保持された値の排他的論理和を求め、それを暗号化演算対象の入力とする、第１の排他的論理和回路と、
前記バッファ部に接続され、暗号モードがCipher Block Chainingモードでかつ現在行なっている処理が復号処理の場合に前記バッファ部を構成するいずれかのバッファに保持された値とを出力し、それ以外の場合に０を出力する第２の選択回路と、
前記第２の選択回路、前記バッファ部および前記レジスタに接続され、前記第２の選択回路の出力および前記レジスタに保持された値の排他的論理和を求め、前記バッファ部を構成するいずれかのバッファに書込む第２の排他的論理和回路とを含む、データ暗号化回路。
【請求項２】
前記バッファ指定部は、
前記バッファ部に含まれる複数のバッファの取る状態をそれぞれ保持する複数の状態レジスタと、
前記複数の状態レジスタに接続され、前記複数の状態レジスタの値に応じた信号を、前記バッファ部を構成する複数のバッファ、前記演算器および前記データ制御部に供給するデコーダとを含み、
前記演算器および前記データ制御部は、前記デコーダより供給される信号に基づいて動作する、請求項１に記載のデータ暗号化回路。
【請求項３】
前記複数の状態レジスタの各々は、対応するバッファに、演算前のデータを書込み可能な状態、演算前のデータが記憶されている状態、演算結果が記憶されている状態、および記憶されていたデータが演算中の状態のいずれかを示すデータを記憶している、請求項２に記載のデータ暗号化回路。
【請求項４】
前記デコーダは、前記複数のバッファの各々に、前記データ制御部がブロックデータを書込み可能か否かを示す第１の信号、前記データ制御部が演算結果を読込み可能か否かを示す第２の信号、前記演算器が演算待ちの入力データを取り出し可能か否かを示す第３の信号、および前記演算器が演算結果を書込み可能か否かを示す第４の信号を供給する、請求項２または３に記載のデータ暗号化回路。
【請求項５】
前記デコーダは、前記演算器がブロックデータを取出したのと同じバッファに演算結果を書込むように、前記第３および第４の信号を供給する、請求項４に記載のデータ暗号化回路。
【請求項６】
前記バッファ指定部は、前記演算器がデータを書込むバッファと、前記データ制御部がデータを読込むバッファとが重ならないように指定する、請求項１に記載のデータ暗号化回路。
【請求項７】
前記バッファ指定部は、前記バッファ部をリングバッファとして機能させる、請求項１〜６のいずれかに記載のデータ暗号化回路。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、データ暗号化回路に関し、特に、データをブロックに分解し、その分解したブロック単位に暗号処理または復号処理を行なうデータ暗号化回路に関する。
【０００２】
【従来の技術】
インターネットに代表される近年のネットワーク技術の進歩に伴ない、様々な情報がネットワーク上を流れるようになってきた。そのため、情報の秘匿性を保つ目的で種々の暗号化手法が提案されている。
【０００３】
特許第３０８８３３７号公報に開示されているように、暗号化処理にはデータを６４ビット等の所定の大きさのブロックに分解し、ブロック単位で暗号化が行なわれるブロック暗号化処理がある。ブロック暗号化処理には、ＥＣＢモードとＣＢＣモードとがある。ＥＣＢモードは、共通鍵暗号法で用いられる基本的なモードである。ＣＢＣモードは、ブロック単位で似たようなデータを暗号化すると解読されるおそれがあるので、前後のブロックとの関連で暗号結果が異なるようにして解読しづらくした方法である。
【０００４】
図２１を参照して、ＥＣＢモードにおける暗号化処理および復号化処理の概要について説明する。図２１（Ａ）を参照して、暗号化では、通常のデータ（メッセージ）Ｍが６４ビットごとに分解され、ブロックＭｎ（ｎ＝１，２，３…）が生成される。送信者および受信者のみが共通に持つ秘密の「鍵」と呼ばれるある６４ビットのデータＫを用いて、各ブロックごとにＥＣＢコアが暗号化処理を行ない、６４ビットの暗号文Ｃｎ（ｎ＝１，２，３…）を生成する（式（１）参照）。
【０００５】
Ｃｎ＝Ｋ（Ｍｎ）  （ｎ＝１，２，３，…）                …（１）
図２１（Ｂ）を参照して、復号化では、暗号文Ｃｎ（ｎ＝１，２，３，…）より、暗号化に用いたものと同じ鍵Ｋを用いてメッセージＭｎが生成される（式（２）参照）。
【０００６】
Ｍｎ＝Ｋ（Ｃｎ）  （ｎ＝１，２，３，…）                …（２）
図２２を参照して、ＣＢＣモードにおける暗号化処理および復号化処理の概要について説明する。図２２（Ａ）を参照して、暗号化は、１つ前のブロックＭｎ−１の暗号文ブロックＣｎ−１と、現在のブロックＭｎとの排他的論理和を求め、これをＥＣＢコアの入力とし、暗号文ブロックＣｎを求める。これを繰返して次々と連鎖させる（式（３）および式（４）参照）。
【０００７】
Ｃ１＝Ｋ（Ｍ１＋ＩＶ）                                  …（３）
Ｃｎ＝Ｋ（Ｍｎ＋（Ｃｎ−１））  （ｎ＝２，３，…）      …（４）
ここで、ＩＶ（Initial Value）は初期値であり、最初の暗号化および復号化の際に用いられる。ＩＶは復号化時と暗号化時とで同一の値を用いる。ＩＶの値は第三者に知られてもよいので、ＩＶは送信者と受信者との間で秘密にしておく必要はない。ＩＶの値を変えると、同じメッセージから異なった暗号文が生成される。
【０００８】
図２２（Ｂ）を参照して、復号化は、暗号文ブロックＣｎをＥＣＢモードと同様に復号化した結果と、１つ前の暗号文ブロックＣｎ−１との排他的論理和を出力メッセージブロックＭｎとする。これを繰返して次々と連鎖させる（式（５）および式（６）参照）。式（５）および式（６）において記号「＋」は排他的論理和を表わす。
【０００９】
Ｍ１＝Ｋ（Ｃ１）＋ＩＶ                                  …（５）
Ｍｎ＝Ｋ（Ｃｎ）＋（Ｃｎ−１）  （ｎ＝２，３，…）      …（６）
このような暗号化処理においては、バッファリングの手法を用いることにより処理速度を向上させることができる。
【００１０】
図２３は、バッファリングがない場合の暗号化処理の時間的な流れを示している。ＣＰＵ（Central Processing Unit）は暗号回路（ＥＣＢコア）に入力を与え、演算が完了するのを待つ。演算が完了すると、演算が完了したデータを読出し、次のデータを暗号回路に与える。このような一連の処理をブロックごとに繰返す。しかし、この方法では、ＣＰＵが演算が完了したデータの読出しや暗号回路へ入力するデータの準備を行なっている段階では、暗号回路は演算を実行することができない。このため、暗号回路を１００％動作させることは困難である。
【００１１】
一方、図２４は、バッファリングの手法を用いた場合の暗号化処理の時間的な流れを示している。ＣＰＵは、入力データを暗号回路に与え、暗号回路が演算中になったＡ状態で次の入力データを準備し、暗号回路の入力用バッファに設定する。暗号回路は演算完了後、演算結果を出力用バッファに書込む。暗号回路は引き続き入力バッファに設定済みの入力データを取り出し、すぐに、次の演算を開始する。ＣＰＵは、演算完了を確認したＢ状態で、出力バッファより演算結果を取出し、必要な処理を実施する。ＣＰＵは、次の入力データを準備して、入力バッファに設定する。これらの操作が繰返されることにより、短時間で多くのデータの暗号化を実現している。
【００１２】
特開平１１−８８３２０号公報には、入力バッファおよび出力バッファを暗号回路ごとに設けたデータ暗号化回路が開示されている。このため、このデータ暗号化回路は、高速にデータの暗号化を行なうことができる。
【００１３】
【発明が解決しようとする課題】
しかし、従来のデータ暗号化回路は、各暗号回路ごとに入力バッファおよび出力バッファを設けていた。このため、回路規模が大きくなってしまう。近年、ＩＣ（Integrated Circuit）カードの普及に伴ない、回路規模が小さく、かつ高速に処理できるデータ暗号化回路の需要が高まっている。
【００１４】
本発明は、上述の課題を解決するためになされたもので、その目的は、回路規模が小さく、かつ高速処理が可能なデータ暗号化回路を提供することである。
【００１５】
本発明の他の目的は、ＥＣＢモードの暗号化処理および復号化処理、ならびにＣＢＣモードでの暗号化処理および復号化処理を実行でき、回路規模が少なく、かつ高速処理が可能な暗号化回路を提供することである。
【００１６】
【課題を解決するための手段】
本発明のある局面に従うデータ暗号化回路は、複数のバッファを含むバッファ部と、バッファ部に接続され、バッファ部に含まれるいずれのバッファともデータを入出力可能であり、バッファ部に含まれるいずれかのバッファより処理対象のブロックデータを読込み、暗号演算処理または復号演算処理を実行し、いずれかのバッファに処理結果を書込む演算器と、バッファ部に接続され、バッファ部に含まれるいずれかのバッファに処理対象のブロックデータを書込み、いずれかのバッファから演算器での演算結果を読込むデータ制御部と、バッファ部、演算器およびデータ制御部に接続され、演算器がデータを読込むバッファ、演算器がデータを書込むバッファ、データ制御部がデータを読込むバッファおよびデータ制御部がデータを書込むバッファとが重ならないように、演算器およびデータ制御部の入出力の対象となるバッファを指定するバッファ指定部とを含む。
【００１７】
演算器は、バッファ部に含まれるいずれのバッファとも入出力可能である。このため、１つのバッファを入力データ用のバッファおよび出力用データのバッファとして兼用できる。また、バッファは複数用意されている。このため、演算器が演算途中であるにも関わらず、次に演算される入力データをあらかじめバッファに用意しておくことができ、データ暗号化回路の処理性能が向上する。また、バッファも少なくてすむため、回路規模が小さく、高速処理が可能なデータ暗号化回路を実現することができる。
【００１８】
好ましくは，バッファ指定部は、バッファ部に含まれる複数のバッファの取る状態をそれぞれ保持する複数の状態レジスタと、複数の状態レジスタに接続され、複数の状態レジスタの値に応じた信号を、バッファ部を構成する複数のバッファ、演算器およびデータ制御部に供給するデコーダとを含み、演算器およびデータ制御部は、デコーダより供給される信号に基づいて動作する。
【００１９】
さらに好ましくは、複数の状態レジスタの各々は、対応するバッファに、演算前のデータを書込み可能な状態、演算前のデータが記憶されている状態、演算結果が記憶されている状態、および記憶されていたデータが演算中の状態のいずれかを示すデータを記憶している。
【００２０】
さらに好ましくは、デコーダは、複数のバッファの各々に、データ制御部がブロックデータを書込み可能か否かを示す第１の信号、データ制御部が演算結果を読込み可能か否かを示す第２の信号、演算器が演算待ちの入力データを取り出し可能か否かを示す第３の信号、および演算器が演算結果を書込み可能か否かを示す第４の信号を供給する。
【００２１】
さらに好ましくは，デコーダは、演算器がブロックデータを取出したのと同じバッファに演算結果を書込むように、第３および第４の信号を供給する。
【００２２】
このような信号の制御を行なうことにより、ＥＣＢモードでの暗号化処理および復号化処理を行なうことができるようになる。
【００２３】
前記バッファ指定部は、前記演算器がデータを書込むバッファと、前記データ制御部がデータを読込むバッファとが重ならないように指定する。
【００２４】
さらに好ましくは、バッファ部は、３つ以上のバッファにより構成される。
３つのバッファを用いることにより、入力データ用のバッファ、出力データ用のバッファの他に、１つ前のブロックに関する入力データ用のバッファを用意することができる。このため、ＣＢＣモードの暗号処理および復号処理を実行することができる。
【００２５】
さらに好ましくは、演算器は、データを保持するレジスタと、レジスタに接続され、レジスタに保持されたデータに対して暗号化演算または復号化演算を施し、演算結果をレジスタに書込む演算処理部と、レジスタに接続され、モードがCipher Block Chainingモードでかつ現在行なっている処理が暗号処理の場合にレジスタに保持された値を出力し、それ以外の場合に０を出力する第１の選択回路と、第１の選択回路、バッファ部およびレジスタに接続され、第１の選択回路の出力およびバッファ部を構成するいずれかのバッファに保持された値の排他的論理和を求め、それを暗号化演算対象の入力とする、第１の排他的論理和回路と、バッファ部に接続され、暗号モードがCipher Block Chainingモードでかつ現在行なっている処理が復号処理の場合にバッファ部を構成するいずれかのバッファに保持された値とを出力し、それ以外の場合に０を出力する第２の選択回路と、第２の選択回路、バッファ部およびレジスタに接続され、第２の選択回路の出力およびレジスタに保持された値の排他的論理和を求め、バッファ部を構成するいずれかのバッファに書込む第２の排他的論理和回路とを含む。
【００２６】
さらに好ましくは、バッファ指定部は、バッファ部をリングバッファとして機能させる。
【００２７】
【発明の実施の形態】
［第１の実施形態］
図１を参照して、本発明の第１の実施形態に係るデータ暗号化回路は、暗号化処理または復号化処理を行なうための演算器１２と、各々演算器１２に接続され、演算器１２へ入力するブロックデータを保持し、演算器１２での演算結果を保持するバッファ２および４と、バッファ２および４の状態をそれぞれ保持する状態レジスタ６および８と、バッファ２および４に接続され、バッファ２および４に暗号化処理を行なうブロックデータを書込み、バッファ２および４に保持された演算器１２での演算結果を読込むＣＰＵ１と、状態レジスタ６および８、バッファ２および４、演算器１２ならびにＣＰＵ１に接続され、状態レジスタ６および８の状態に従い、バッファ２および４、演算器１２ならびにＣＰＵ１に各種信号を供給するデコーダ１０とを含む。
【００２８】
バッファ２は、ＣＰＵ１とデータバスＤＢ、書込み信号ＷＲおよび読出し信号ＲＤにより接続されている。書込み信号ＷＲが活性化すると、ＣＰＵ１からバッファ２へのデータの書込みが可能となる。読出し信号ＲＤが活性化すると、ＣＰＵ１によるバッファ２のデータの読出しが可能となる。バッファ４に関しても、バッファ２と同様の状態を取る。このため、その詳細な説明はここでは繰返さない。
【００２９】
バッファ２は、演算器１２と、ロード信号ＬＤ、ストア信号ＳＴ、データ入力信号ＤＩおよびデータ出力信号ＤＯにより接続されている。ロード信号ＬＤが活性化すると、バッファ２からのデータの読出しが可能となる。このため、演算器１２は、データ出力信号ＤＯを介して、バッファ２よりブロックデータを読出す。ストア信号ＳＴが活性化すると、バッファ２へのデータの書込みが可能となる。このため、演算器１２は、データ入力信号ＤＩを介して、演算結果をバッファ２に書込む。バッファ４に関しても、バッファ２と同様の動作をする。このため、その詳細な説明はここでは繰返さない。
【００３０】
バッファ２および４は、それぞれ以下に示すＡからＤまでの４つの状態を取り得る。その状態は、状態レジスタ６および８にそれぞれ格納されている。状態Ａは、データがバッファにデータが格納されていないことを示す。状態Ｂは、ＣＰＵ１からブロックデータが書込まれ、演算待ちのデータがあることを示す。状態Ｃは、ブロックデータが演算器１２に入力され、演算中であることを示す。状態Ｄは、演算器１２での演算結果を保持していることを示す。
【００３１】
それぞれのバッファは、状態Ａ、状態Ｂ、状態Ｃ、状態Ｄの順で遷移し、状態Ｄまで達すると、状態Ａに戻る。
【００３２】
デコーダ１０は、状態レジスタ６および８にそれぞれ保持されたバッファ２および４の値に応じて、以下に述べる信号をバッファ２および４、演算器１２ならびにＣＰＵ１に供給する。バッファ２には、ＣＰＵ１からのデータの書込みの可否を示す信号ＷＲ＿ＥＮ２、ＣＰＵ１によるデータの読出しの可否を示す信号ＲＤ＿ＥＮ２、演算器１２によるデータの読出しの可否を示す信号ＬＤ＿ＥＮ２、演算器１２による演算結果の書込みの可否を示す信号ＳＴ＿ＥＮ２が供給される。バッファ４にも同様の信号ＷＲ＿ＥＮ４、ＲＤ＿ＥＮ４、ＬＤ＿ＥＮ４およびＳＴ＿ＥＮ４を供給する。
【００３３】
また、デコーダ１０は、バッファ２および４のいずれかにデータを書込むことができることを示す信号ＷＲ＿ＲＤＹおよびいずれかのバッファからデータを読み出すことができることを示す信号ＲＤ＿ＲＤＹを、ＣＰＵ１に送信する。信号ＷＲ＿ＲＤＹの示す値は、信号ＷＲ＿ＥＮ２およびＷＲ＿ＥＮ４の論理和となる。信号ＲＤ＿ＲＤＹの示す値は、信号ＲＤ＿ＥＮ２およびＲＤ＿ＥＮ４の論理和となる。
【００３４】
さらに、デコーダ１０は、演算器１２へ、演算すべきデータがあるか否かを示す信号ＬＤ＿ＲＤＹを供給する。信号ＬＤ＿ＲＤＹの値は、信号ＬＤ＿ＥＮ２およびＬＤ＿ＥＮ４の論理和となる。信号ＬＤ＿ＲＤＹに応答して、演算器１２は、暗号化処理を実行する。
【００３５】
ＣＰＵ１から供給される信号ＷＲは、デコーダ１０より出力される信号ＷＲ＿ＥＮ２またはＷＲ＿ＥＮ４により定められるバッファに受け入れられる。デコーダ１０は、信号ＷＲ＿ＥＮ２およびＷＲ＿ＥＮ４が同時にバッファ２および４に供給されることがないように制御を行なう。信号ＲＤも同様に、デコーダ１０より出力される信号ＲＤ＿ＥＮ２またはＲＤ＿ＥＮ４により定められるバッファに受け入れられる。デコーダ１０は、信号ＲＤ＿ＥＮ２およびＲＤ＿ＥＮ４が同時にバッファ２および４に供給されることがないように制御を行なう。このように、ＣＰＵ１がバッファを選択するのではなく、デコーダ１０からの信号により自動的にＣＰＵ１から出力される信号が受け入れられるか否かが決定される。
【００３６】
演算器１２から供給される信号ＬＤは、デコーダ１０より出力される信号ＬＤ＿ＥＮ２またはＬＤ＿ＥＮ４により定められるバッファに受け入れられる。デコーダ１０は、信号ＬＤ＿ＥＮ２およびＬＤ＿ＥＮ４が同時にバッファ２および４に供給されることがないように制御を行なう。信号ＳＴも同様に、デコーダ１０より出力される信号ＳＴ＿ＥＮ２またはＳＴ＿ＥＮ４により定められるバッファに受け入れられる。デコーダ１０は、信号ＳＴ＿ＥＮ２およびＳＴ＿ＥＮ４が同時にバッファ２および４に供給されることがないように制御を行なう。このように、演算器１２がバッファを選択するのではなく、デコーダ１０からの信号により自動的に演算器１２から出力される信号が受け入れられるか否かが決定される。
【００３７】
図２を参照し、演算器１２は、ＥＣＢモードの暗号処理および復号処理を行う処理装置であり、ＥＣＢモードの暗号化または復号化のための演算を行う演算処理部２１と、演算処理部２１、バッファ２および４に接続され、バッファ２または４から読込まれた入力データまたは演算処理部２１で演算処理された結果を保持するレジスタ２２とを含む。
【００３８】
図３を参照して、演算器１２は、入力データが入力されると演算を実行し、その後、データを出力する。
【００３９】
図４を参照して、バッファ２および４と、信号ＷＲ＿ＥＮ２、ＷＲ＿ＥＮ４、ＲＤ＿ＥＮ２、ＲＤ＿ＥＮ４、ＬＤ＿ＥＮ２、ＬＤ＿ＥＮ４、ＳＴ＿ＥＮ２、ＳＴ＿ＥＮ４、ＷＲ＿ＲＤＹ、ＲＤ＿ＲＤＹおよびＬＤ＿ＲＤＹとの関係について説明する。
【００４０】
図中、ＷＲ＿ＰＯＳとあるのは、次にＣＰＵ１が書込み可能となったときにデータを書込むバッファの番号を示しており、ＷＲ＿ＰＯＳの値が「２」および「４」の場合には、ＣＰＵ１がバッファ２および４にそれぞれデータを書込むことを示している。ＷＲ＿ＰＯＳは、ＣＰＵ１からバッファ２または４にデータが書込まれるごとに変化し、「２」および「４」の値を交互に取る。
【００４１】
ＲＤ＿ＰＯＳとあるのは、次にＣＰＵ１に読み出しが可能となったときにデータを読み出すバッファの番号を示しており、ＲＤ＿ＰＯＳの値が「２」および「４」の場合には、ＣＰＵ１がバッファ２および４からそれぞれデータを読込むことを示している。ＲＤ＿ＰＯＳは、ＣＰＵ１がバッファ２または４からデータを読込むごとに変化し、「２」および「４」の値を交互に取る。
【００４２】
ＷＲ＿ＥＮの欄の数字はＷＲ＿ＰＯＳの値と同じであり、「２」の場合には、バッファ２にＣＰＵ１からデータの書込みが可能であることを示しており、ＷＲ＿ＥＮの欄が「４」の場合には，バッファ４にＣＰＵ１からデータの書込みが可能であることを示している。ＷＲ＿ＥＮに示されている値は、ＷＲ＿ＰＯＳの値で特定されるバッファが状態Ａである場合の、ＷＲ＿ＰＯＳの値である。
【００４３】
ＲＤ＿ＥＮの欄の数字はＲＤ＿ＰＯＳの値と同じであり、「２」の場合には、バッファ２からＣＰＵ１にデータの読出しが可能であることを示しており、ＲＤ＿ＥＮの欄が「４」の場合には、バッファ４からＣＰＵ１にデータの読出しが可能であることを示している。ＲＤ＿ＥＮに示されている値は、ＲＤ＿ＰＯＳの値で特定されるバッファが状態Ｄである場合の、ＲＤ＿ＰＯＳの値である。
【００４４】
ＬＤ＿ＥＮの欄が「２」の場合には、演算器１２がバッファ２からデータ読出し可能であることを示しており、ＬＤ＿ＥＮの欄が「４」の場合には、演算器１２がバッファ４からデータ読出し可能であることを示している。ＬＤ＿ＥＮの値は、着目しているバッファの状態が状態Ｂである場合のバッファの番号を示している。なお、すべてのバッファが状態Ｂである場合には、ＲＤ＿ＰＯＳ（またはＷＲ＿ＰＯＳ）の値を示す。また、状態Ｂのバッファから演算器１２へデータが読み出されると、そのバッファの状態はＢからＣへ遷移する。
【００４５】
ＳＴ＿ＥＮの欄が「２」の場合には、バッファ２に演算器１２の演算結果の書込みが可能であることを示しており、ＳＴ＿ＥＮの欄が「４」の場合には、バッファ４に演算器１２の演算結果の書込みが可能であることを示している。ＳＴ＿ＥＮの値は、着目しているバッファの状態が状態Ｃである場合のバッファの番号を示している。また、状態Ｃのバッファへ演算器１２からデータが書込まれると、そのバッファの状態はＣからＤへ遷移する。
【００４６】
ＷＲ＿ＲＤＹの値は、いずれかのバッファが状態Ａであるときに「Ｈ」となり、それ以外の場合には「Ｌ」となる。ＷＲ＿ＲＤＹの欄が「Ｈ」の場合には、ＣＰＵ１がバッファ２および４のいずれかにデータを書込み可能なことを示している。ＷＲ＿ＲＤＹの欄が「Ｌ」の場合には、バッファ２および４のいずれにもデータを書込むことができないことを示している。なお、ＣＰＵ１がいずれかのバッファにデータを書込むと、そのバッファの状態はＡからＢへ遷移する。
【００４７】
ＲＤ＿ＲＤＹの値は、いずれかのバッファが状態Ｄであるときに「Ｈ」となり、それ以外の場合には「Ｌ」となる。ＲＤ＿ＲＤＹの欄が「Ｈ」の場合には、ＣＰＵ１がバッファ２および４のいずれかからデータを読出し可能なことを示しており、ＲＤ＿ＲＤＹの欄が「Ｌ」の場合には、バッファ２および４のいずれかからもデータを読み出すことができないことを示している。なお、ＣＰＵ１がいずれかのバッファからデータを読込むと、そのバッファの状態はＤからＡへ遷移する。
【００４８】
ＬＤ＿ＲＤＹの値は、いずれかのバッファが状態Ｂであるとき、すなわちＬＤ＿ＥＮの値が「２」または「４」のときに「Ｈ」となり、それ以外の場合には「Ｌ」となる。ＬＤ＿ＲＤＹの欄が「Ｈ」の場合には、演算器１２が演算すべきデータがあることを示しており、ＬＤ＿ＲＤＹの欄が「Ｌ」の場合には、演算器４６が演算すべきデータがないことを示している。
【００４９】
図４の空欄は、各信号の意味する処理をいずれのバッファにも指示しないことを意味する。
【００５０】
図５および図６を参照して、このような動作をするデータ暗号化回路で暗号化処理を行った場合の処理について説明する。なお、各ブロックの右端に示されているローマ字「Ａ」〜「Ｄ」は、バッファ２および４の状態を示している。初期状態では、バッファ２および４ともにデータが存在しない状態を示している（Ｓ１）。ＣＰＵ１がこれから暗号化するデータをバッファ２に書込むと、バッファ２に入力データがある状態になる（Ｓ２）。演算器１２が入力データをバッファ２から読込み、演算が開始される（Ｓ３）。演算の途中に、ＣＰＵ１は入力データをバッファ４に書込む（Ｓ４）。演算が完了すると、演算器１２が結果をバッファ２に書込む（Ｓ５）。
【００５１】
演算器１２は、すぐに入力データをバッファ４から読込み、演算を開始する（Ｓ６）。ＣＰＵ１は、演算器１２が演算している間に、演算結果をバッファ２から読込む（Ｓ７）。図６を参照して、ＣＰＵ１は、次に演算すべき入力があるか否かを判断する（Ｓ８）。次に演算すべきデータがなければ（Ｓ８でＮＯ）、演算が完了した時点で、演算器１２が結果をバッファ４に書込む（Ｓ１６）。ＣＰＵ１がバッファ４からデータを読込み、処理を終了する（Ｓ１５）。
【００５２】
次に演算すべきデータがあれば（Ｓ８でＹＥＳ）、演算の途中に、ＣＰＵ１は、入力データをバッファ２に書込む（Ｓ９）。演算が完了すると、演算器１２が結果をバッファ４に書込む（Ｓ１０）。演算器１２は、入力データをバッファ２から読込み、演算を開始する（Ｓ１１）。ＣＰＵ１は、演算器１２が演算している間に、演算結果を読込む（Ｓ１２）。
【００５３】
ＣＰＵ１は、次に演算すべき入力があるか否かを判断する（Ｓ１３）。次に演算すべきデータがなければ（Ｓ１３でＮＯ）、演算が完了した時点で、演算器１２が結果をバッファ２に書込む（Ｓ１４）。ＣＰＵ１がバッファ２からデータを読込み、処理を終了する（Ｓ１５）。次に演算すべきデータがあれば、ＣＰＵが入力データをバッファ４に書込む（図５のＳ４）。その後、Ｓ５以降の処理を繰り返す。
【００５４】
以上説明したように、本実施の形態によると、図１に示すように２つのバッファで構成されるリングバッファを用いて入力データ用バッファと出力データ用バッファとを兼用した。このため、演算器が演算途中であるにも関わらず、次に演算される入力データをあらかじめ用意しておくことができ、データ暗号化回路の処理性能が向上する。また、バッファも少なくてすむため、高速処理が可能なデータ暗号化回路を実現することができる。
【００５５】
なお、演算器の処理時間は一定であるが、バッファへの読出し、書込みを含むＣＰＵ１の処理時間は、一般的にその時に何を実行しているかにより、まちまちである。このため、リングバッファをさらに多段のバッファにより構成することにより、暗号処理および復号処理を高速に実行することができるようになる。
【００５６】
［第２の実施形態］
図７を参照して、本発明の第２の実施形態に係るデータ暗号化回路は、暗号化処理または復号化処理を行なうための演算器４６と、各々演算器４６に接続され、演算器４６へ入力するブロックデータを保持し、演算器４６での演算結果を保持するバッファ３２、３４および３６と、バッファ３２、３４および３６の状態をそれぞれ保持する状態レジスタ３８、４０および４２と、バッファ３２、３４および３６、ならびに演算器４６に接続され、バッファ３２、３４および３６に暗号化処理を行なうブロックデータを書込み、演算器４６内に設けられた後述するレジスタ６０に初期値を書込み、バッファ３２、３４および３６に保持された演算器４６での演算結果を読込むＣＰＵ３１と、状態レジスタ３８、４０および４２、バッファ３２、３４および３６、演算器４６ならびにＣＰＵ３１に接続され、状態レジスタ３８、４０および４２の状態に従い、バッファ３２、３４および３６、演算器４６ならびにＣＰＵ３１に各種信号を供給するデコーダ４４とを含む。
【００５７】
バッファ３２、３４および３６は、各々、ＣＰＵ３１とデータバスＤＢ、書込み信号ＷＲおよび読出し信号ＲＤにより接続されている。これらの信号の値によりバッファ３２、３４および３６が取り得る状態は、第１の実施形態で説明したバッファ２および４と同様である。このため、その詳細な説明はここでは繰り返さない。
【００５８】
また、バッファ３２、３４および３６は、各々、演算器４６と、ロード信号ＬＤ、ストア信号ＳＴ、データ入力信号ＤＩおよびデータ出力信号ＤＯにより接続されている。これらの信号の値によりバッファ３２、３４および３６が取り得る状態は、第１の実施形態で説明したバッファ２および４と同様である。このため、その詳細な説明はここでは繰り返さない。
【００５９】
バッファ３２、３４および３６は、状態Ａから状態Ｄまでの４つの状態を取り得る。状態Ａおよび状態Ｄについては、第１の実施形態に示したものと同様である。このため、その詳細な説明はここでは繰り返さない。
【００６０】
デコーダ４４は、状態レジスタ３８、４０および４２にそれぞれ保持されたバッファ３２、３４および３６の値に応じて、以下に述べる信号をバッファ３２、３４および３６、演算器４６ならびにＣＰＵ３１に供給する。バッファ３２には、ＣＰＵ３１からのデータの書込みの可否を示す信号ＷＲ＿ＥＮ３２、ＣＰＵ３１によるデータの読出しの可否を示す信号ＬＤ＿ＥＮ３２、演算器４６による演算結果の書込みの可否を示す信号ＳＴ＿ＥＮ３２が供給される。バッファ３４にも同様の信号ＷＲ＿ＥＮ３４、ＲＤ＿ＥＮ３４、ＬＤ＿ＥＮ３４およびＳＴ＿ＥＮ３４を供給する。バッファ３６にも同様の信号ＷＲ＿ＥＮ３６、ＲＤ＿ＥＮ３６、ＬＤ＿ＥＮ３６およびＳＴ＿ＥＮ３６を供給する。
【００６１】
また、デコーダ４４は、バッファ３２、３４および３６のいずれかにデータを書込むことができることを示す信号ＷＲ＿ＲＤＹおよびいずれかのバッファからデータを読み出すことができることを示す信号ＲＤ＿ＲＤＹを、ＣＰＵ３１に送信する。信号ＷＲ＿ＲＤＹの示す値は、信号ＷＲ#ＥＮ３２、ＷＲ＿ＥＮ３４およびＷＲ＿ＥＮ３６の論理和となる。信号ＲＤ＿ＲＤＹの示す値は、ＲＤ＿ＥＮ３２、ＲＤ＿ＥＮ３４およびＲＤ＿ＥＮ３６の論理和となる。
【００６２】
さらに、デコーダ４４は、演算器４６へ、演算すべきデータがあるか否かを示す信号ＬＤ＿ＲＤＹを供給する。信号ＬＤ＿ＲＤＹの値は、信号ＬＤ＿ＥＮ３２、ＬＤ＿ＥＮ３４およびＬＤ＿ＥＮ３６の論理和となる。信号ＬＤ＿ＲＤＹに応答して、演算器４６は、暗号化処理を実行する。
【００６３】
ＣＰＵ３１から供給される信号ＷＲは、デコーダ４４より出力される信号ＷＲ＿ＥＮ３２、ＷＲ＿ＥＮ３４またはＷＲ＿ＥＮ３６により定められるバッファに受け入れられる。デコーダ４４は、信号ＷＲ＿ＥＮ３２、ＷＲ＿ＥＮ３４およびＷＲ＿ＥＮ３６のいずれか２つ以上の信号が同時にバッファに供給されることがないように制御を行なう。信号ＲＤも同様に、デコーダ４４より出力される信号ＲＤ＿ＥＮ３２、ＲＤ＿ＥＮ３４またはＲＤ＿ＥＮ３６により定められるバッファに受け入れられる。デコーダ４４は、信号ＲＤ＿ＥＮ３２、ＲＤ＿ＥＮ３４およびＲＤ＿ＥＮ３６のいずれか２つ以上が同時にバッファに供給されることがないように制御を行なう。このように、ＣＰＵ３１がバッファを選択するのではなく、デコーダ４４からの信号により自動的にＣＰＵ３１から出力される信号が受け入れられるか否かが決定される。
【００６４】
演算器４６から供給される信号ＬＤは、デコーダ４４より出力される信号ＬＤ＿ＥＮ３２、ＬＤ＿ＥＮ３４または信号ＬＤ＿ＥＮ３６により定められるバッファに受け入れられる。デコーダ４４は、信号ＬＤ＿ＥＮ３２、ＬＤ＿ＥＮ３４およびＬＤ＿ＥＮ３６のいずれか２つ以上の信号が同時にバッファに供給されることがないように制御を行なう。信号ＳＴも同様に、デコーダ４４より出力される信号ＳＴ＿ＥＮ３２、ＳＴ＿ＥＮ３４またはＳＴ＿ＥＮ３６により定められるバッファに受け入れられる。デコーダ１０は、信号ＳＴ＿ＥＮ３２、ＳＴ＿ＥＮ３４およびＳＴ＿ＥＮ３６のいずれか２つ以上の信号が同時にバッファに供給されることがないように制御を行なう。このように、演算器４６がバッファを選択するのではなく、デコーダ４４からの信号により自動的に演算器４６から出力される信号が受け入れられるか否かが決定される。
【００６５】
図８を参照して、演算器４６は、ＥＣＢモードの暗号化または復号化のための演算、ならびにＣＢＣモードの暗号化または復号化のための演算を実行する演算処理部６２と、演算処理部６２に接続され、演算処理部６２に入力される入力データおよび演算処理部６２の実行結果を保持するレジスタ６０と、レジスタ６０に保持された値と、ＣＢＣモードでかつ暗号処理の場合に１となる信号との論理積演算を実行するＡＮＤ回路５６と、ＡＮＤ回路５６およびレジスタ６０に接続され、ＡＮＤ回路５６の出力と入力データとの排他的論理和を求め、レジスタ６０に書込むＥＸＯＲ（exclusive-OR）回路５８と、入力データとＣＢＣモードでかつ復号処理の場合に１となる信号との論理積演算を実行するＡＮＤ回路５４と、レジスタ６０およびＡＮＤ回路５４に接続され、レジスタ６０に保持された値とＡＮＤ回路５４の出力との排他的論理和を出力するＥＸＯＲ回路５２とを含む。上述したようにレジスタ６０にはＣＰＵ３１から直接初期値が書込まれる場合がある。
【００６６】
ＥＣＢモードの場合には、ＡＮＤ回路５４およびＡＮＤ回路５６の出力は０となる。このため、ＥＸＯＲ回路５８は入力データをレジスタ６０に書込み、ＥＸＯＲ回路５２はレジスタ６０に保持された出力データを出力する。
【００６７】
ＣＢＣモードの暗号処理の場合には、ＡＮＤ回路５６は、レジスタ６０に保持された１つ前のブロックの暗号データを出力する。ＥＸＯＲ回路５８では、現在着目しているブロックの入力データと１つ前のブロックの暗号データとの排他的論理和を取り、レジスタ６０に保持する。演算処理部６２は、レジスタ６０に保持された値を暗号処理し、レジスタ６０に書込む。レジスタ６０に書込まれたデータは、次のブロックの暗号化に用いられるデータとしてＥＸＯＲ回路５８に与えられるとともに、ＥＸＯＲ回路５２を介して出力される。
【００６８】
ＣＢＣモードの復号処理の場合には、入力データがレジスタ６０に一旦保持され、演算処理部６２で復号された後、演算結果がレジスタ６０に保持される。ＥＸＯＲ回路５２は、レジスタ６０に保持された演算結果と（第２データとしてバッファから読み出した）１つ前の入力データとの排他的論理和を取り、出力する。
【００６９】
図９は、ＣＢＣモードにおける暗号処理のタイムチャートを示す。第２入力データと１つ前の演算結果である第１出力データとの間で排他的論理和が計算され、第１入力データが生成される。その後、演算処理部６２で第１入力データについての暗号化演算が実行され、演算結果がレジスタ６０に保持される。演算処理後、演算結果が第１出力データおよび第２出力データとして出力される。
【００７０】
図１０は、ＣＢＣモードにおける復号処理のタイムチャートを示す。第１入力データおよび第２入力データとして、復号対象のブロックデータがレジスタ６０に書込まれる。演算処理部６２では、レジスタ６０に保持されたブロックについての復号化演算が実行され、演算結果がレジスタ６０に保持される。１つ前の入力データである第２入力データと演算結果である第１出力データとの間で排他的論理和演算が実行され、演算結果が第２出力データとして出力される。
【００７１】
図１１を参照して、バッファ３２、３４および３６と、信号ＷＲ＿ＥＮ３２、ＷＲ＿ＥＮ３４、ＷＲ＿ＥＮ３６、ＲＤ＿ＥＮ３２、ＲＤ＿ＥＮ３４、ＲＤ＿ＥＮ３６、ＬＤ＿ＥＮ３２、ＬＤ＿ＥＮ３４、ＬＤ＿ＥＮ３６、ＳＴ＿ＥＮ３２、ＳＴ＿ＥＮ３４、ＳＴ＿ＥＮ３６、ＷＲ＿ＲＤＹ、ＲＤ＿ＲＤＹおよびＬＤ＿ＲＤＹとの関係について説明する。
【００７２】
図中、ＷＲ＿ＥＮの欄が「３２」、「３４」および「３６」の場合には、それぞれバッファ３２、３４および３６にＣＰＵ３１からデータの書込みが可能であることを示している。ＷＲ＿ＥＮに示されている値は、着目しているバッファの状態がＡで、そのバッファよりも１つ前のバッファの状態がＡでないときの、着目しているバッファの番号を示す。なお、着目しているバッファの状態がＡであり、それ以外の状態がすべてＢである場合を除く。バッファ３６にとっての１つ前のバッファとは、バッファ３４を示す。バッファ３４にとっての１つ前のバッファとは、バッファ３２を示す。バッファ３２にとっての１つ前のバッファとは、バッファ３６を示す。なお、ＣＰＵ３１がバッファにデータを書込むと、そのバッファの状態はＡからＢへ遷移する。
【００７３】
ＲＤ＿ＥＮの欄が「３２」、「３４」および「３６」の場合には、それぞれバッファ３２、３４および３６からＣＰＵ３１にデータの読出しが可能であることを示している。ＲＤ＿ＥＮに示されている値は、着目しているバッファの状態がＤで、そのバッファよりも１つ前のバッファの状態がＤでないときの、着目しているバッファの番号を示す。なお、ＣＰＵ３１がバッファからデータを読み出すと、そのバッファの状態はＤからＡへ遷移する。
【００７４】
ＬＤ＿ＥＮの欄が「３２」、「３４」および「３６」の場合には、演算器４６が、それぞれバッファ３２、３４および３６からデータ読出し可能であることを示している。ＬＤ＿ＥＮの値は、着目しているバッファおよびその１つ前のバッファの状態がＢで、さらに１つ前のバッファの状態がＢでないときの、着目しているバッファの番号を示す。なお、演算器４６へのデータの読み出しにより、１つ前のバッファの状態がＢからＣへ遷移する。
【００７５】
ＳＴ＿ＥＮの欄が「３２」、「３４」および「３６」の場合には、それぞれバッファ３２、３４および３６に演算器４６の演算結果の書込みが可能であることを示している。ＳＴ＿ＥＮの値は、状態がＣであるバッファの番号を示している。なお、演算器４６からそのバッファへデータが書込まれることにより、そのバッファの状態はＣからＤへ遷移する。
【００７６】
ＷＲ＿ＲＤＹの値は、ＷＲ＿ＥＮに値が設定されている場合に「Ｈ」となり、それ以外の場合には「Ｌ」となる。ＷＲ＿ＲＤＹの欄が「Ｈ」の場合には、ＣＰＵ３１がバッファ３２、３４および３６のいずれかにデータが書込み可能なことを示している。ＷＲ＿ＲＤＹの欄が「Ｌ」の場合には、バッファ３２、３４および３６のいずれにもデータを書込むことができないことを示している。
【００７７】
ＲＤ＿ＲＤＹの値は、いずれかのバッファが状態Ｄであるとき、すなわちＲＤ＿ＥＮに値が設定されているときに「Ｈ」となり、それ以外の場合には「Ｌ」となる。ＲＤ＿ＲＤＹの欄が「Ｈ」の場合には、ＣＰＵ３１がバッファ３２、３４および３６のいずれかからデータを読出し可能なことを示しており、ＲＤ＿ＲＤＹの欄が「Ｌ」の場合には、バッファ３２、３４および３６のいずれかからもデータを読み出すことができないことを示している。
【００７８】
ＬＤ＿ＲＤＹの値は、いずれかのバッファが状態Ｂであるとき、すなわちＬＤ＿ＥＮに値が設定されているときに「Ｈ」となり、それ以外の場合には「Ｌ」となる。ＬＤ＿ＲＤＹの欄が「Ｈ」の場合には、演算器４６が演算すべきデータがあることを示しており、ＬＤ＿ＲＤＹの欄が「Ｌ」の場合には、演算器４６が演算すべきデータがないことを示している。
【００７９】
図１１の空欄は、各信号の意味する処理をいずれのバッファにも指示しないことを意味する。
【００８０】
以下、図１２〜図２０を参照して、このような動作をするデータ暗号化回路で暗号処理および復号処理を行なった場合のバッファ３２、３４および３６の状態について説明する。なお、各ブロックの右端に示されているローマ字「Ａ」〜「Ｄ」は、バッファ２および４の状態を示している。
【００８１】
ＣＢＣ復号においてはバッファにＩＶデータを設定しておくことが必要で、ＣＢＣ暗号においてはバッファではなくレジスタ６０にＩＶデータを設定しておくことが必要で、ＥＣＢにおいてはいずれも必要がない。
【００８２】
しかし、処理を共通化するためにＩＶデータの必要性の有無にかかわらず最初のデータは常にバッファ３２およびレジスタ６０に書込まれ、その結果、バッファ３２はＢ状態となるようにしてもよい。
【００８３】
この場合、ＥＣＢでは最初のデータは使用されないダミーのＩＶデータとなる。もちろん初期データの設定方法はこれに限られるものではなく、他の方法であってもよい。
【００８４】
図１２〜図１４を参照して、データ暗号化回路でＥＣＢモードの暗号処理または復号処理を行なった場合について説明する。以下の説明では、入力データ（１）〜（４）の順に４つのブロックデータが入力される場合について説明するが、入力データは４つに限定されるものではなく、それ以上の個数であっても、それ以下の個数であってもよいのは言うまでもない。
【００８５】
図１２を参照して、ＣＰＵ３１がダミーのＩＶデータをバッファ３２に書込むと、バッファ３２に入力データがある状態になる（Ｓ２２）。また、この状態ではバッファ３４および３６には入力データは保持されていない。ＣＰＵ３１が次に処理するデータをバッファ３４に書込むと、バッファ３４に入力データがある状態になる（Ｓ２４）。演算器４６が入力データをバッファ３４から読込み、演算を開始する（Ｓ２６）。次に、ＣＰＵ３１が入力データをバッファ３６に書込む（Ｓ２８）。演算が完了すると、演算器４６は、演算結果をバッファ３２に書込む（Ｓ３０）。
【００８６】
図１３を参照して、演算器４６は、入力データをバッファ３６から読込み、演算を開始する（Ｓ３２）。演算の間に、ＣＰＵ３１が演算結果データをバッファ３２から読込む（Ｓ３４）。ＣＰＵ３１は、入力データをバッファ３２に書込む（Ｓ３６）。演算が完了すると、演算器４６が結果データをバッファ３４に書込む（Ｓ３８）。演算器４６が入力データをバッファ３２から読込み、演算を開始する（Ｓ４０）。ＣＰＵ３１が演算結果データをバッファ３４から読込む（Ｓ４２）。
【００８７】
図１４を参照して、ＣＰＵ３１が入力データをバッファ３４に書込む（Ｓ４４）。演算が完了し、演算器４６が結果データをバッファ３６に書込む（Ｓ４６）。演算器４６が入力データをバッファ３４から読込み、演算を開始する（Ｓ４８）。ＣＰＵ３１が演算結果データをバッファ３６から読込む（Ｓ５０）。演算が完了すると、演算器４６が結果データをバッファ３２に書込む（Ｓ５２）。ＣＰＵ３１が演算結果データをバッファ３２から読込む（Ｓ５４）。以上説明したような処理を繰り返すことにより、ＥＣＢモードでの暗号処理および復号処理が実現される。
【００８８】
図１５〜図１７を参照して、データ暗号化回路でＣＢＣモードの暗号処理を行なった場合について説明する。以下の説明では、入力データ（１）〜（４）の順に４つのブロックデータが入力される場合について説明するが、入力データは４つに限定されるものではなく、それ以上の個数であっても、それ以下の個数であってもよいのは言うまでもない。
【００８９】
図１５を参照して、初期状態では、バッファ３２、３４および３６ともにデータが存在しない状態を示している（Ｓ６２）。ＣＰＵ３１がＩＶデータをバッファ３２および演算器４６内のレジスタ６０に書込む（Ｓ６４）。ＣＰＵ３１が入力データをバッファ３４に書込む（Ｓ６６）。演算器４６が入力データをバッファ３４から読込み、演算器４６内のレジスタ６０に書込まれたＩＶデータとの排他的論理和を取った後、演算を開始する（Ｓ６８）。ＣＰＵ３１が入力データをバッファ３６に書込む（Ｓ７０）。演算が完了すると、演算器４６が結果データをバッファ３２に書込む（Ｓ７２）。
【００９０】
図１６を参照して、演算器４６は、入力データをバッファ３６から読込み、演算器４６内に残っている１つ前の結果データと排他的論理和を取った後、演算を開始する（Ｓ７４）。ＣＰＵ３１が演算結果データをバッファ３２から読込む（Ｓ７６）。ＣＰＵ３１が入力データをバッファ３２に書込む（Ｓ７８）。演算が完了すると、演算器４６が結果データをバッファ３４に書込む（Ｓ８０）。演算器４６は、入力データをバッファ３２から読込み、演算器４６内に残っている１つ前の結果データと排他的論理和を取った後，演算を開始する（Ｓ８２）。ＣＰＵ３１が入力データをバッファ３４から読込む（Ｓ８４）。
【００９１】
図１７を参照して、ＣＰＵ３１が入力データをバッファ３４に書込む（Ｓ８６）。演算が完了し、演算器４６が結果データをバッファ３６に書込む（Ｓ８８）。演算器４６が入力データをバッファ３４から読込み、演算器４６内に残っている１つ前の結果データと排他的論理和を取った後、演算を開始する（Ｓ９０）。ＣＰＵ３１が演算結果データをバッファ３４から読込む（Ｓ９２）。演算が完了すると、演算器４６が結果データをバッファ３２に書込む（Ｓ９４）。ＣＰＵ３１は、演算結果データをバッファ３２から読込む（Ｓ９６）。
【００９２】
以上説明したような一連の処理を繰り返すことにより、ＣＢＣモードの暗号化処理が実現される。
【００９３】
図１８〜図２０を参照して、データ暗号化回路でＣＢＣモードの復号処理を行なった場合について説明する。以下の説明では、入力データ（１）〜（４）の順に４つのブロックデータが入力される場合について説明するが、入力データは４つに限定されるものではなく、それ以上の個数であっても、それ以下の個数であってもよいのは言うまでもない。
【００９４】
図１８を参照して、初期状態では、バッファ３２、３４および３６ともにデータが存在しない状態を示している（Ｓ１０２）。ＣＰＵ３１がＩＶデータをバッファ３２および演算器４６内のレジスタ６０に書込む（Ｓ１０４）。ＣＰＵ３１が入力データをバッファ３４に書込む（Ｓ１０６）。演算器４６が入力データをバッファ３４から読込み、演算を開始する（Ｓ１０８）。ＣＰＵ３１が入力データを３６に書込む（Ｓ１１０）。演算が完了すると、演算器４６が、結果データとバッファ３２に保持されたＩＶデータとの排他的論理和を取り、バッファ３２に書込む（Ｓ１１２）。
【００９５】
図１９を参照して、演算器４６が入力データをバッファ３６から読込み、演算を開始する（Ｓ１１４）。ＣＰＵ３１が演算結果データをバッファ３２から読込む（Ｓ１１６）。ＣＰＵ３１が入力データをバッファ３２に書込む（Ｓ１１８）。演算が完了すると、演算器４６は、結果データとバッファ３４に保持されている１つ前の入力データとの排他的論理和を求め，バッファ３４に書込む（Ｓ１２０）。演算器４６は、入力データをバッファ３２から読込み、演算を開始する（Ｓ１２２）。ＣＰＵ３１は、演算結果データをバッファ３４から読込む（Ｓ１２４）。
【００９６】
図２０を参照して、ＣＰＵ３１は入力データをバッファ３４に書込む（Ｓ１２６）。演算が完了すると、演算器４６は、結果データとバッファ３６に保持されている１つ前の入力データとの排他的論理和を求め、バッファ３６に書込む（Ｓ１２８）。演算器４６は、入力データをバッファ３４から読込み、演算を開始する（Ｓ１３０）。ＣＰＵ３１は、演算結果データをバッファ３６から読込む（Ｓ１３２）。演算が完了すると、演算器４６は、結果データとバッファ３２に残っている１つ前の入力データとの排他的論理和を求め、バッファ３２に書込む（Ｓ１３４）。ＣＰＵ３１が演算結果データをバッファ２から読込む（Ｓ１３６）。
【００９７】
１つ前の入力データのバッファの番号は、結果を書込むバッファの番号と同じであり、ＳＴ＿ＥＮ３２、３４、３６を用いて１つ前の入力データのバッファを特定することができる。
【００９８】
以上説明したような一連の処理を繰り返すことにより、ＣＢＣモードの復号化処理が実現される。
【００９９】
以上説明したように、本実施の形態によると、図７に示すように３つのバッファで構成されるリングバッファを用いて入力データ用バッファと出力データ用バッファとを兼用した。このため、演算器が演算途中であるにも関わらず、次に演算される入力データをあらかじめ用意しておくことができ、データ暗号化回路の処理性能が向上する。また、バッファも少なくてすむため，回路規模が小さく、高速処理が可能なデータ暗号化回路を実現することができる。
【０１００】
なお、演算器の処理時間は一定であるが、バッファへの読み出し、書込みを含むＣＰＵ３１の処理時間は、一般的にその時に何を実行しているかにより、まちまちである。このため、リングバッファをさらに多段のバッファにより構成することにより、暗号処理および復号処理を高速に実行することができるようになる。
【０１０１】
また、本実施の形態では、ＥＣＢモードにおける暗号化処理および復号化処理、ならびにＣＢＣモードにおける暗号化処理および復号化処理を１つの回路で実現することができる。
【０１０２】
なお、図２を参照して、入力データは、レジスタ２２を介さず、直接、演算処理部２１に入力してもよい。また、レジスタ２２には、演算処理部２１の中間データを一時的に保持してもよい。
【０１０３】
また、図８を参照して、第２入力データは、レジスタ６０を介さず、直接演算処理部６２に入力してもよい。また、レジスタ６０には、演算処理部６２の中間データを一時的に保持していもよい。
【０１０４】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【０１０５】
【発明の効果】
回路規模が小さく、かつ高速処理が可能なデータ暗号化回路を実現することができる。
【図面の簡単な説明】
【図１】  第１の実施形態に係るデータ暗号化回路の構成を示すブロック図である。
【図２】  第１の実施形態に係る演算器の構成を示すブロック図である。
【図３】  第１の実施形態に係る演算器のタイムチャートである。
【図４】  バッファとデコーダより出力される各種信号との関係を示した表である。
【図５】  データ暗号化回路による暗号化処理のフローチャートである。
【図６】  データ暗号化回路による暗号化処理のフローチャートである。
【図７】  第２の実施形態に係るデータ暗号化回路の構成を示すブロック図である。
【図８】  第２の実施形態に係る演算器の構成を示すブロック図である。
【図９】  第２の実施形態に係る演算器によるＣＢＣモードの暗号化時におけるタイムチャートである。
【図１０】  第２の実施形態に係る演算器によるＣＢＣモードの復号化時におけるタイムチャートである。
【図１１】  バッファとデコーダより出力される各種信号との関係を示した表である。
【図１２】  ＥＣＢモードにおける暗号化処理または復号化処理のフローチャートである。
【図１３】  ＥＣＢモードにおける暗号化処理または復号化処理のフローチャートである。
【図１４】  ＥＣＢモードにおける暗号化処理または復号化処理のフローチャートである。
【図１５】  ＣＢＣモードにおける暗号化処理のフローチャートである。
【図１６】  ＣＢＣモードにおける暗号化処理のフローチャートである。
【図１７】  ＣＢＣモードにおける暗号化処理のフローチャートである。
【図１８】  ＣＢＣモードにおける暗号化処理のフローチャートである。
【図１９】  ＣＢＣモードにおける暗号化処理のフローチャートである。
【図２０】  ＣＢＣモードにおける暗号化処理のフローチャートである。
【図２１】  ＥＣＢモードにおける暗号化処理および復号化処理の概要を示す図である。
【図２２】  ＣＢＣモードにおける暗号化処理および復号化処理の概要を示す図である。
【図２３】  バッファリングがない場合の暗号化処理のタイムチャートである。
【図２４】  バッファリングがある場合の暗号化処理のタイムチャートである。
【符号の説明】
１，３１  ＣＰＵ、４，３２，３４，３６  バッファ、６，８，３８，４０，４２  状態レジスタ、１０，４４  デコーダ、１２，４６  演算器、２１，６２演算処理部、２２，６０  レジスタ、５２，５８  ＥＸＯＲ回路、５４，５６ＡＮＤ回路。
【図１】
0004761652.tif 000002
【図２】
0004761652.tif 000003
【図３】
0004761652.tif 000004
【図４】
0004761652.tif 000005
【図５】
0004761652.tif 000006
【図６】
0004761652.tif 000007
【図７】
0004761652.tif 000008
【図８】
0004761652.tif 000009
【図９】
0004761652.tif 000010
【図１０】
0004761652.tif 000011
【図１１】
0004761652.tif 000012
【図１２】
0004761652.tif 000013
【図１３】
0004761652.tif 000014
【図１４】
0004761652.tif 000015
【図１５】
0004761652.tif 000016
【図１６】
0004761652.tif 000017
【図１７】
0004761652.tif 000018
【図１８】
0004761652.tif 000019
【図１９】
0004761652.tif 000020
【図２０】
0004761652.tif 000021
【図２１】
0004761652.tif 000022
【図２２】
0004761652.tif 000023
【図２３】
0004761652.tif 000024
【図２４】
0004761652.tif 000025