(57)【要約】      （修正有）【課題】Ｓボックス変換部の構成を、安全性を保持しつつ簡単な構成とする。【解決手段】データを非線形変換する非線形データ変換部のＳボックス変換部２１は、変換するデータを入力し、入力したデータをある体（ｆｉｅｌｄ）の元と見なし、その部分体を用いた逆元回路を用いて変換し、変換したデータを出力する部分体変換部１８と、部分体変換部１８に接続される線形変換部８５，８７（アフィン変換部）であって、変換するＧＦ（２n）上のデータをＧＦ（２）nの元とみなして、ＧＦ（２n）上のデータをＧＦ（２）n上のデータに変換するＧＦ（２）上のベクトル空間ＧＦ（２）nの線形変換部８５，８７（アフィン変換部）とを備えた。【選択図】図１３
2011018065.tif 000002
【特許請求の範囲】
【請求項１】
鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部を備えたデータ変換装置において、
上記データ処理部は、変換するデータを入力し、入力したデータをある体（ｆｉｅｌｄ）の元と見なし、その部分体を用いた逆元回路を用いて変換し、変換したデータを出力する部分体変換部と、
上記部分体変換部の前段と後段との少なくともいずれか一方に変換するＧＦ（２n ）上のデータを自然な対応ＧＦ（２）nの元とみなし、ＧＦ（２）上のベクトル空間ＧＦ（２）n のアフィン変換部を備えたことを特徴とするデータ変換装置。
【請求項２】
上記部分体変換部は、Ｎ（Ｎは偶数）ビットのデータＸをＸ＝Ｘ0 ＋βＸ1 （Ｘ0，Ｘ1 ：部分体の元、β：もとの体の元）となる上位のＮ／２ビットのデータＸ1 と下位のＮ／２ビットのデータＸ0に等分して、Ｙ＝Ｙ0 ＋βＹ1 ＝１／（Ｘ0 ＋βＸ1 ）（但し、Ｘ＝０のときＹ＝０）となる上位のＮ／２ビットのデータＹ1と下位のＮ／２ビットのデータＹ0 をそれぞれＮ／２ビット単位で演算してデータＹを求める複数のＮ／２ビット演算器のみを有することを特徴とする請求項１記載のデータ変換装置。
【請求項３】
鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部と、
上記データ処理部が用いる鍵データを生成してデータ処理部に供給する鍵生成部と
を備えたデータ変換装置において、
上記データ処理部は、各段ごとに拡大鍵を入力して非線形変換をする多段に接続された複数段の非線形データ変換部を有し、
上記鍵生成部は、上記複数段の非線形データ変換部の各段毎に対して供給する拡大鍵を生成するにあたり、鍵データと鍵データから生成された鍵データに依存するデータとの少なくともいずれかを入力して予め定められたビット数Ｚ1，Ｚ2 ，・・・，Ｚm （ここで、ｉ，ｊ，ｋは、１〜ｍのいずれか１つの値とし、Ｚk −Ｚj＝Ｉ×（Ｚi+1 −Ｚi ）＝Ｉ×Ｂ（Ｉは整数、Ｂ＝Ｚi+1 −Ｚi ））だけ、巡回シフトして、この巡回シフトした鍵データから各段の非線形データ変換部の拡大鍵を生成する鍵シフト部を有するとともに、
上記鍵シフト部は、
１回の動作で（Ｚi+1 −Ｚi ）ビット（Ｂビット）の巡回シフトをする巡回シフトレジスタと、
Ｚi ビット巡回シフトされた鍵データに対して巡回シフトレジスタを１回動作させて（Ｚi+1 −Ｚi）ビット（Ｂビット）の巡回シフトを行わせることにより、巡回シフトレジスタにＺi+1 ビット巡回シフトされた鍵データを生成させ、Ｚi+1ビット巡回シフトされた鍵データに対して巡回シフトレジスタをＩ回動作させてＩ×（Ｚi+1 −Ｚi ）ビット（Ｉ×Ｂビット）の巡回シフトを行わせることにより、巡回シフトレジスタにＺi+2ビット巡回シフトされた鍵データを生成させる制御部と
を有することを特徴とするデータ変換装置。
【請求項４】
上記巡回シフトレジスタは、巡回シフトレジスタを動作させるために供給されている動作クロックの１クロックサイクルでＺi+1−Ｚi ビット（Ｂビット）の巡回シフトをする回路であることを特徴とする請求項３記載のデータ変換装置。
【請求項５】
上記巡回シフト回路は、（Ｚi+1 −Ｚi ）ビット（Ｂビット）の値として、Ｂ1＝８×Ｊ1 ＋１（Ｊ1 ＝０以上の整数）ビットと、Ｂ2 ＝８×Ｊ2 −１（Ｊ2＝１以上の整数、Ｊ1 とＪ2 は無関係、即ち、Ｊ1≠Ｊ2 又はＪ1＝Ｊ2 ）ビットとのいずれかの値を選択するセレクタを備えたことを特徴とする請求項３記載のデータ変換装置。
【請求項６】
鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部と、
上記データ処理部が用いる鍵データを生成してデータ処理部に供給する鍵生成部と
を備えたデータ変換装置において、
上記データ処理部は、各段ごとに拡大鍵を入力して非線形変換をする多段に接続された複数段の非線形データ変換部を有し、
上記鍵生成部は、上記複数段の非線形データ変換部の各段毎に対して供給する拡大鍵を生成するにあたり、ある鍵データを予め定められたビット数（Ｂビット）だけ順に巡回シフトして、この巡回シフトした鍵データから各段の非線形データ変換部の拡大鍵を生成す
る鍵シフト部を有するとともに、
上記鍵シフト部は、Ｂビットだけ順に巡回シフトしたデータのうち、一部のデータを無視して拡大鍵を生成せず、残りの他のデータから拡大鍵を生成することを特徴とするデータ変換装置。
【請求項７】
鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部と、
上記データ処理部が用いる鍵データを生成してデータ処理部に供給する鍵生成部と
を備えたデータ変換装置において、
上記鍵生成部は、
ＧビットのＧビット鍵データを入力して変換し、Ｇビットの第１のＧビット変換鍵データを出力する第１のＧビット鍵変換部と、
上記第１のＧビット鍵変換部から出力された第１のＧビット変換鍵データを入力し、更に変換してＧビットの第２のＧビット変換鍵データを出力する第２のＧビット変換部と
を備え、  上記鍵生成部がＧビット鍵データＫを入力した場合は、Ｇビット鍵データＫを第１のＧビット鍵変換部に入力して変換し、第１のＧビット鍵変換部により出力された第１のＧビット変換鍵データＫ1を変換されたＧビット鍵データとして出力し、
上記鍵生成部が２Ｇビット鍵データＫを入力した場合は、２Ｇビット鍵データＫからＧビット鍵データを生成して生成したＧビット鍵データを第１のＧビット鍵変換部に入力して変換して第１のＧビット変換鍵データＫ1を出力し、第１のＧビット変換鍵データＫ1 を第２のＧビット変換部に入力して変換して第２のＧビット変換鍵データＫ2 を出力し、第１のＧビット鍵変換部により出力された第１のＧビット変換鍵データＫ1と、第２のＧビット変換部により出力された第２のＧビット変換鍵データＫ2 とを連結して、変換された２Ｇビット鍵データ（Ｋ1，Ｋ2 ）として出力することを特徴とするデータ変換装置。
【請求項８】
上記第１のＧビット鍵変換部は、
Ｇビット鍵データを非線形変換する２段の非線形データ変換部と、
２段目の非線形データ変換部から出力された変換途中のＧビット鍵データと、
第１のＧビット鍵変換部が入力したＧビット鍵データとの論理演算を行う論理演算部とを備えたことを特徴とする請求項７記載のデータ変換装置。
【請求項９】
上記鍵生成部は、更に、Ｑビット（Ｇ＜Ｑ＜２Ｇ）の鍵データを入力した場合、Ｑビットの鍵データを２Ｇビットの鍵データにするビット長変換部を備えたことを特徴とする請求項７記載のデータ変換装置。
【請求項１０】
鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部と、
上記データ処理部が用いる鍵データを生成してデータ処理部に供給する鍵生成部と
を備えたデータ変換装置において、
データ変換を行うデータと鍵データとを論理演算する鍵関数部と、
データ変換を行うデータを他のデータへ置換変換するＳ関数部と、
データ変換を行うデータ同士で論理演算するＰ関数部と
を有する非線形関数部（Ｆ）を備え、
非線形関数部（Ｆ）は、鍵関数部をＳ関数部とＰ関数部の間に配置したことを特徴とするデータ変換装置。
【請求項１１】
鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部と、
上記データ処理部が用いる鍵データを生成してデータ処理部に供給する鍵生成部と
を備えたデータ変換装置において、
データ変換を行うデータと鍵データとを論理演算する鍵関数部と、
データ変換を行うデータを他のデータへ置換変換するＳ関数部と、
データ変換を行うデータ同士で論理演算するＰ関数部と
を有する非線形関数部（Ｆ）を備え、
非線形関数部（Ｆ）は、鍵関数部をＳ関数部とＰ関数部との両者の前と両者の後とのい
ずれかに配置したことを特徴とするデータ変換装置。
【請求項１２】
上記Ｓ関数部は、
変換するデータの一部分のデータを第１部分データとして入力して、入力したデータの値を他の値に変換して出力する変換テーブルＴを用いて第１部分データを変換し、変換したデータを出力する第１変換部（ｓ1）と、
変換するデータの少なくとも他の一部分のデータを第２部分データとして入力して、上記変換テーブルＴを用いた変換と第２部分用演算とを用いて第２部分データを変換し、変換したデータを出力する第２変換部（ｓ2）と
を備えたことを特徴とする請求項１０記載のデータ変換装置。
【請求項１３】
少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部を備えたデータ変換装置において、データ変換を行うデータ同士で論理演算するＰ関数部を有する非線形関数部（Ｆ）を備え、
上記Ｐ関数部は、ｚ1 ，ｚ2 ，・・・，ｚ8 の８個の４ｎ（ｎは１以上の整数）ビットデータを入力し、
上記ｚ1 ，ｚ2 ，ｚ3 ，ｚ4 の４個のデータのうち、少なくとも２個以上のデータの排他的論理和演算を行って４ｎビットの結果Ｕ1を得る回路と、
上記ｚ5 ，ｚ6 ，ｚ7 ，ｚ8 の４個のデータのうち、少なくとも２個以上のデータの排他的論理和演算を行って４ｎビットの結果Ｕ2を得る回路と、
Ｕ1 とＵ2 との排他的論理和演算を行って４ｎビットの結果Ｕ3 を得る回路と、
Ｕ1 に対して巡回シフトをする巡回回路と、
上記巡回回路の出力とＵ3 との排他的論理和演算を行って４ｎビットの結果Ｕ4 を得る回路と
を備え、
上記Ｕ3 ，Ｕ4 をそれぞれ４個に分割してｚ1'，ｚ2'，・・・，ｚ8'の８個のｎビットのデータとして出力することを特徴とする請求項１０記載のデータ変換装置。
【請求項１４】
鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理を実行するデータ変換方法において、
上記データ処理は、変換するデータを入力し、入力したデータをある体（ｆｉｅｌｄ）の元と見なし、その部分体を用いた逆元回路を用いて変換し、変換したデータを出力する部分体変換処理と、
上記部分体変換処理の前段処理と後段処理との少なくともいずれか一方に変換するＧＦ（２n ）上のデータを自然な対応でＧＦ（２）nの元とみなし、ＧＦ（２）上のベクトル空間ＧＦ（２）n のアフィン変換処理を備えたことを特徴とするデータ変換方法。
【請求項１５】
鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理と、
上記データ処理が用いる鍵データを生成してデータ処理に供給する鍵生成処理と
を実行するデータ変換方法において、
上記データ処理は、各段ごとに拡大鍵を入力して非線形変換をする多段に接続された複数段の非線形データ変換処理を有し、
上記鍵生成処理は、上記複数段の非線形データ変換処理の各段毎に対して供給する拡大鍵を生成するにあたり、鍵データと鍵データから生成された鍵データに依存するデータとの少なくともいずれかを入力して予め定められたビット数Ｚ1，Ｚ2 ，・・・，Ｚm （ここで、ｉ，ｊ，ｋは、１〜ｍのいずれか１つの値とし、Ｚk −Ｚj＝Ｉ×（Ｚi+1 −Ｚi ）（Ｉは整数、Ｂ＝Ｚi+1 −Ｚi））だけ、巡回シフトして、この巡回シフトした鍵データから各段の非線形データ変換処理へ供給する拡大鍵を生成する鍵シフト処理を有するとともに、
上記鍵シフト処理は、
１回の動作で（Ｚi+1 −Ｚi ）ビット（Ｂビット）の巡回シフトをする巡回シフト処理と、
Ｚi ビット巡回シフトされた鍵データに対して巡回シフト処理を１回動作させて（Ｚi+1 −Ｚi）ビット（Ｂビット）の巡回シフトを行わせることにより、巡回シフト処理によりＺi+1 ビット巡回シフトされた鍵データを生成させ、Ｚi+1ビット巡回シフトされた鍵データに対して巡回シフト処理をＩ回動作させてＩ×（Ｚi+1 −Ｚi ）ビット（Ｉ×Ｂビット）の巡回シフトを行わせることにより、巡回シフト処理によりＺi+2ビット巡回シフトされた鍵データを生成させる制御処理と
を有することを特徴とするデータ変換方法。
【請求項１６】
鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理と、
上記データ処理が用いる鍵データを生成してデータ処理に供給する鍵生成処理と
を実行するデータ変換方法において、
上記データ処理は、各段ごとに拡大鍵を入力して非線形変換をする多段に接続された複数段の非線形データ変換処理を有し、
上記鍵生成処理は、上記複数段の非線形データ変換処理の各段毎に対して供給する拡大鍵を生成するにあたり、ある鍵データを予め定められたビット数（Ｂビット）だけ順に巡回シフトして、この巡回シフトした鍵データから各段の非線形データ変換処理へ供給する拡大鍵を生成する鍵シフト処理を有するとともに、
上記鍵シフト処理は、Ｂビットだけ順に巡回シフトしたデータのうち、一部のデータを無視して拡大鍵を生成せず、残りの他のデータから拡大鍵を生成することを特徴とするデータ変換方法。
【請求項１７】
鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理と、
上記データ処理が用いる鍵データを生成してデータ処理に供給する鍵生成処理と
を実行するデータ変換方法において、
上記鍵生成処理は、
ＧビットのＧビット鍵データを入力して変換し、Ｇビットの第１のＧビット変換鍵データを出力する第１のＧビット鍵変換処理と、
上記第１のＧビット鍵変換処理から出力された第１のＧビット変換鍵データを入力し、更に変換してＧビットの第２のＧビット変換鍵データを出力する第２のＧビット変換処理と
を備え、
上記鍵生成部がＧビット鍵データＫを入力した場合は、Ｇビット鍵データＫを第１のＧビット鍵変換部に入力して変換し、第１のＧビット鍵変換処理により出力された第１のＧビット変換鍵データＫ1を変換されたＧビット鍵データとして出力し、
上記鍵生成部が２Ｇビット鍵データＫを入力した場合は、２Ｇビット鍵データＫからＧビット鍵データを生成して生成したＧビット鍵データを第１のＧビット鍵変換部に入力して変換して第１のＧビット変換鍵データＫ1を出力し、第１のＧビット変換鍵データＫ1 を第２のＧビット変換処理に入力して変換して第２のＧビット変換鍵データＫ2を出力し、第１のＧビット鍵変換処理により出力された第１のＧビット変換鍵データＫ1 と、第２のＧビット変換処理により出力された第２のＧビット変換鍵データＫ2とを連結して
、変換された２Ｇビット鍵データ（Ｋ1 ，Ｋ2 ）として出力することを特徴とするデータ変換方法。
【請求項１８】
鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理と、
上記データ処理が用いる鍵データを生成してデータ処理に供給する鍵生成処理と
を実行するデータ変換方法において、
データ変換を行うデータと鍵データとを論理演算する鍵関数処理と、
データ変換を行うデータを他のデータへ置換変換するＳ関数処理と、
データ変換を行うデータ同士で論理演算するＰ関数処理と
を有する非線形関数処理（Ｆ）を備え、
非線形関数処理（Ｆ）は、鍵関数をＳ関数処理とＰ関数処理の間に動作させることを特徴とするデータ変換方法。
【請求項１９】
鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理と、
上記データ処理が用いる鍵データを生成してデータ処理に供給する鍵生成処理と
を実行するデータ変換方法において、
データ変換を行うデータと鍵データとを論理演算する鍵関数処理と、
データ変換を行うデータを他のデータへ置換変換するＳ関数処理と、
データ変換を行うデータ同士で論理演算するＰ関数処理と
を有する非線形関数処理（Ｆ）を備え、
非線形関数処理（Ｆ）は、鍵関数処理をＳ関数処理とＰ関数処理との両者の前と両者の後とのいずれかで動作させることを特徴とするデータ変換方法。
【請求項２０】
鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部と、
上記データ処理部が用いる鍵データを生成してデータ処理部に供給する鍵生成部と
を備えたデータ変換装置において、
上記データ処理部は、データ変換を行うデータを非線形変換する非線形関数部（Ｆ）を備え、
上記鍵生成部は、非線形関数部（Ｆ）に供給する鍵データを加工して、加工した鍵データをデータ処理部の非線形関数部（Ｆ）以外の部分に供給してデータと演算させることを特徴とするデータ変換装置。
【請求項２１】
鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理と、
上記データ処理が用いる鍵データを生成してデータ処理に供給する鍵生成処理と
を実行するデータ変換方法において、
上記データ処理は、データ変換を行うデータを非線形変換する非線形関数処理（Ｆ）を備え、
上記鍵生成処理は、非線形関数処理（Ｆ）に供給する鍵データを加工して、加工した鍵データをデータ処理の非線形関数処理（Ｆ）以外の処理に供給してデータと演算させることを特徴とするデータ変換方法。
【請求項２２】
上記請求項１４記載のデータ変換方法をコンピュータに実行させるプログラム又は上記プログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項２３】
上記請求項１５記載のデータ変換方法をコンピュータに実行させるプログラム又は上記プログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項２４】
上記請求項１６記載のデータ変換方法をコンピュータに実行させるプログラム又は上記プログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項２５】
上記請求項１７記載のデータ変換方法をコンピュータに実行させるプログラム又は上記プログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項２６】
上記請求項１８記載のデータ変換方法をコンピュータに実行させるプログラム又は上記プログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項２７】
上記請求項１９記載のデータ変換方法をコンピュータに実行させるプログラム又は上記プログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項２８】
上記請求項２１記載のデータ変換方法をコンピュータに実行させるプログラム又は上記プログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報通信等において、デジタル情報を保護する暗号化と復号及びデータ拡散等のためのデータ変換装置とデータ変換方法及びデータ変換方法を記録した記録媒体に関するものである。
【背景技術】
【０００２】
図２５は、「現代暗号理論」（社団法人電子情報通信学会、平成９年１１月１５日発行、４６頁）に記載された従来のＤＥＳ暗号に用いられる暗号関数を示す図である。
【０００３】
図２５に示すように、８個のＳボックスが設けられている。この８個のＳボックスは、それぞれ異なるテーブルである。各テーブルは、６ビットの入力データから４ビットの出力データを出力するものである。
【０００４】
図２６は、「Ｓｐｅｃｉｆｉｃａｔｉｏｎ  ｏｆ  Ｅ２  −  ａ  １２８−ｂｉｔ  Ｂｌｏｃｋ  Ｃｉｐｈｅｒ」（Ｎｉｐｐｏｎ  Ｔｅｌｅｇｒａｐｈ  ａｎｄ  Ｔｅｌｅｐｈｏｎｅ  Ｃｏｒｐｏｒａｉｏｎ，Ｊｕｎｅ  １４，１９９８、１０頁）に記載された非線形変換関数を示す図である。
【０００５】
図２６に示すように、各Ｓ関数部には、８個のＳボックスが設けられている。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】Ｂｒｕｃｅ  Ｓｃｈｎｅｉｅｒ，「Ｄｅｓｃｒｉｐｔｉｏｎ  ｏｆ  ａ  Ｎｅｗ  Ｖａｒｉａｂｌｅ−Ｌｅｎｇｈ  Ｋｅｙ，  ６４−Ｂｉｔ  Ｂｌｏｃｋ  Ｃｉｐｈｅｒ  （Ｂｌｏｗｆｉｓｈ）」，  Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ，  Ｖｏｌ．８０９，  ｐ．１９１−２０４，  １９９４年７月２１日ＪＩＣＳＴ受入，引用非特許０３−００４１７０
【発明の概要】
【発明が解決しようとする課題】
【０００７】
従来の暗号装置においては、複数のＳボックスが設けられている。ある暗号では、それぞれ異なるテーブルが用意されているため、記憶容量が１つのＳボックスを使う場合に比べて増大し、また、別の暗号では、１つのＳボックスしか使っていないため、安全性が低下するという問題がある。
【０００８】
また、図７に示すように、暗号化部にデータ正変換部（ＦＬ）２５０を設けた場合には、復号部にデータ逆変換部（ＦＬ-1）２７０を設けなければ復号することができない。データ正変換部（ＦＬ）２５０とデータ逆変換部（ＦＬ-1）２７０は、一般には、異なる回路であるため、暗号化部と復号部を同一の構成にすることができないという課題があった。
【０００９】
また、拡大鍵を生成する場合に、より安全性の高い拡大鍵を生成するために複雑なオペレーションが必要であった。また、拡大鍵を生成するに当たり、初期値として入力される鍵データのビット数が一定値でなければならないという課題があった。
【００１０】
この発明は、暗号化用と復号用の回路を同一にするとともに、非線形関数計算のために用いられる回路規模、プログラムサイズ、メモリ容量を削減し、拡大鍵を生成する場合に、簡単な構成で生成できるシステムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
この発明に係るデータ変換装置は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部を備えたデータ変換装置において、
上記データ処理部は、データ変換を行うデータを第１のデータ（Ｌ）と第２のデータ（Ｒ）に分割してデータ変換するとともに、
上記データ処理部は、
第１のデータ（Ｌ）を変換するデータ正変換部（ＦＬ）と、
第２のデータ（Ｒ）を上記データ正変換部（ＦＬ）の変換とは逆の変換をするデータ逆変換部（ＦＬ-1）と
を備えたことを特徴とする。
【００１２】
上記データ処理部は、第１の入力と第２の入力と、第１の出力と第２の出力とを有し、
上記データ正変換部（ＦＬ）は、変換したデータをデータ処理部の第１の入力へ出力し、
上記データ逆変換部（ＦＬ-1）は、データ処理部の第２の出力から出力されたデータを変換して出力することを特徴とする。
【００１３】
上記データ処理部は、第１の入力と第２の入力と、第１の出力と第２の出力とを有し、
上記データ正変換部（ＦＬ）は、変換したデータをデータ処理部の第２の入力へ出力し、
上記データ逆変換部（ＦＬ-1）は、データ処理部の第１の出力から出力されたデータを変換して出力することを特徴とする。
【００１４】
この発明に係るデータ変換装置は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部を備えたデータ変換装置において、
上記データ処理部は、データを非線形変換する非線形変換部を備え、
非線形変換部は、
変換するデータの一部分のデータを第１部分データとして入力して、入力したデータの値を他の値に変換して出力する変換テーブルＴを用いて第１部分データを変換し、変換したデータを出力する第１変換部（ｓ1）と、
変換するデータの少なくとも他の一部分のデータを第２部分データとして入力して上記変換テーブルＴを用いた変換と第２部分用演算とを用いて第２部分データを変換し、変換したデータを出力する第２変換部（ｓ2）と
を備えたことを特徴とする。
【００１５】
上記第１変換部（ｓ1 ）は、変換テーブルＴにデータｙ1 を入力してデータｓ1 （ｙ1）を出力させ、このデータをデータｚ1 ＝ｓ1 （ｙ1 ）として出力し、
上記第２変換部（ｓ2 ）は、変換テーブルＴにデータｙ2 を入力してデータｓ1 （ｙ2）を出力させ、データｓ1 （ｙ2 ）を巡回シフト処理したデータ（ｒｏｔ（ｓ1 （ｙ2）））をデータｚ2 ＝ｒｏｔ（ｓ1 （ｙ2 ））として出力することを特徴とする。
【００１６】
上記データ処理部は、更に、
変換するデータの第１部分データと第２部分データとは異なる一部分のデータを第３部分データとして入力し、第１部分データと第２部分データと第３部分データとは異なる一部分のデータを第４部分データとしてそれぞれ入力して、上記変換テーブルＴを用いた変換と、第２変換部（ｓ2）の第２部分用演算とはそれぞれ異なる第３部分用演算と第４部分用演算とにより、第３部分データと第４部分データとをそれぞれ変換し、変換したデータを出力する第３変換部（ｓ3）と第４変換部（ｓ4 ）とを備えたことを特徴とする。
【００１７】
この発明に係るデータ変換装置は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部を備えたデータ変換装置において、
上記データ処理部は、変換するデータを入力し、入力したデータをある体（ｆｉｅｌｄ）の元と見なし、その部分体を用いた逆元回路を用いて変換し、変換したデータを出力する部分体変換部と、
上記部分体変換部の前段と後段との少なくともいずれか一方に変換するＧＦ（２n ）上のデータを自然な対応でＧＦ（２）nの元とみなし、ＧＦ（２）上のベクトル空間ＧＦ（２）n のアフィン変換部を備えたことを特徴とする。
【００１８】
上記部分体変換部は、Ｎ（Ｎは偶数）ビットのデータＸをＸ＝Ｘ0 ＋βＸ1 （Ｘ0 ，Ｘ1：部分体の元、β：もとの体の元）となる上位のＮ／２ビットのデータＸ1 と下位のＮ／２ビットのデータＸ0 に等分して、Ｙ＝Ｙ0＋βＹ1 ＝１／（Ｘ0 ＋βＸ1 ）（但し、Ｘ＝０のときＹ＝０）となる上位のＮ／２ビットのデータＹ1と下位のＮ／２ビットのデータＹ0 をそれぞれＮ／２ビット単位で演算してデータＹを求める複数のＮ／２ビット演算器のみを有することを特徴とする。
【００１９】
この発明に係るデータ変換装置は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部と、
上記データ処理部が用いる鍵データを生成してデータ処理部に供給する鍵生成部と
を備えたデータ変換装置において、
上記データ処理部は、各段ごとに拡大鍵を入力して非線形変換をする多段に接続された複数段の非線形データ変換部を有し、
上記鍵生成部は、上記複数段の非線形データ変換部の各段毎に対して供給する拡大鍵を生成するにあたり、鍵データと鍵データから生成された鍵データに依存するデータとの少なくともいずれかを入力して予め定められたビット数Ｚ1，Ｚ2 ，・・・，Ｚm （ここで、ｉ，ｊ，ｋは１〜ｍのいずれか１つの値とし、Ｚk −Ｚj＝Ｉ×（Ｚi+1 −Ｚi ）＝Ｉ×Ｂ（Ｉは整数、Ｂ＝Ｚi+1 −Ｚi ））だけ、巡回シフトして、この巡回シフトした鍵データから各段の非線形データ変換部の拡大鍵を生成する鍵シフト部を有するとともに、
上記鍵シフト部は、
１回の動作で（Ｚi+1 −Ｚi ）ビット（Ｂビット）の巡回シフトをする巡回シフトレジスタと、
Ｚi ビット巡回シフトされた鍵データに対して巡回シフトレジスタを１回動作させて（Ｚi+1 −Ｚi）ビット（Ｂビット）の巡回シフトを行わせることにより、巡回シフトレジスタにＺi+1 ビット巡回シフトされた鍵データを生成させ、Ｚi+1ビット巡回シフトされた鍵データに対して巡回シフトレジスタをＩ回動作させてＩ×（Ｚi+1 −Ｚi ）ビット（Ｉ×Ｂビット）の巡回シフトを行わせることにより、巡回シフトレジスタにＺi+2ビット巡回シフトされた鍵データを生成させる制御部と
を有することを特徴とする。
【００２０】
上記巡回シフトレジスタは、巡回シフトレジスタを動作させるために供給されている動作クロックの１クロックサイクルでＺi+1 −Ｚiビット（Ｂビット）の巡回シフトをする回路であることを特徴とする。
【００２１】
上記巡回シフト回路は、（Ｚi+1 −Ｚi ）ビット（Ｂビット）の値として、Ｂ1 ＝８×Ｊ1＋１（Ｊ1 ＝０以上の整数）ビットと、Ｂ2 ＝８×Ｊ2 −１（Ｊ2 ＝１以上の整数、Ｊ1とＪ2 は無関係、即ち、Ｊ1 ≠Ｊ2 又はＪ1 ＝Ｊ2）ビットとのいずれかの値を選択するセレクタを備えたことを特徴とする。
【００２２】
この発明に係るデータ変換装置は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部と、
上記データ処理部が用いる鍵データを生成してデータ処理部に供給する鍵生成部と
を備えたデータ変換装置において、
上記データ処理部は、各段ごとに拡大鍵を入力して非線形変換をする多段に接続された複数段の非線形データ変換部を有し、
上記鍵生成部は、上記複数段の非線形データ変換部の各段毎に対して供給する拡大鍵を生成するにあたり、ある鍵データを予め定められたビット数（Ｂビット）だけ順に巡回シフトして、この巡回シフトした鍵データから各段の非線形データ変換部の拡大鍵を生成する鍵シフト部を有するとともに、
上記鍵シフト部は、Ｂビットだけ順に巡回シフトしたデータのうち、一部のデータを無視して拡大鍵を生成せず、残りの他のデータから拡大鍵を生成することを特徴とする。
【００２３】
この発明に係るデータ変換装置は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部と、
上記データ処理部が用いる鍵データを生成してデータ処理部に供給する鍵生成部と
を備えたデータ変換装置において、
上記鍵生成部は、
ＧビットのＧビット鍵データを入力して変換し、Ｇビットの第１のＧビット変換鍵データを出力する第１のＧビット鍵変換部と、
上記第１のＧビット鍵変換部から出力された第１のＧビット変換鍵データを入力し、更に変換してＧビットの第２のＧビット変換鍵データを出力する第２のＧビット変換部と
を備え、
上記鍵生成部がＧビット鍵データＫを入力した場合は、Ｇビット鍵データＫを第１のＧビット鍵変換部に入力して変換し、第１のＧビット鍵変換部により出力された第１のＧビット変換鍵データＫ1を変換されたＧビット鍵データとして出力し、
上記鍵生成部が２Ｇビット鍵データＫを入力した場合は、２Ｇビット鍵データＫからＧビット鍵データを生成して生成したＧビット鍵データを第１のＧビット鍵変換部に入力して変換して第１のＧビット変換鍵データＫ1を出力し、第１のＧビット変換鍵データＫ1 を第２のＧビット変換部に入力して変換して第２のＧビット変換鍵データＫ2 を出力し、第１のＧビット鍵変換部により出力された第１のＧビット変換鍵データＫ1と、第２のＧビット変換部により出力された第２のＧビット変換鍵データＫ2 とを連結して、変換された２Ｇビット鍵データ（Ｋ1，Ｋ2 ）として出力することを特徴とする。
【００２４】
上記第１のＧビット鍵変換部は、
Ｇビット鍵データを非線形変換する２段の非線形データ変換部と、
２段目の非線形データ変換部から出力された変換途中のＧビット鍵データと、
第１のＧビット鍵変換部が入力したＧビット鍵データとの論理演算を行う論理演算部と
を備えたことを特徴とする。
【００２５】
上記鍵生成部は、更に、Ｑビット（Ｇ＜Ｑ＜２Ｇ）の鍵データを入力した場合、Ｑビットの鍵データを２Ｇビットの鍵データにするビット長変換部を備えたことを特徴とする。
【００２６】
この発明に係るデータ変換装置は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部と、
上記データ処理部が用いる鍵データを生成してデータ処理部に供給する鍵生成部と
を備えたデータ変換装置において、
データ変換を行うデータと鍵データとを論理演算する鍵関数部と、
データ変換を行うデータを他のデータへ置換変換するＳ関数部と、
データ変換を行うデータ同士で論理演算するＰ関数部と
を有する非線形関数部（Ｆ）を備え、
非線形関数部（Ｆ）は、鍵関数部をＳ関数部とＰ関数部の間に配置したことを特徴とする。
【００２７】
この発明に係るデータ変換装置は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部と、
上記データ処理部が用いる鍵データを生成してデータ処理部に供給する鍵生成部と
を備えたデータ変換装置において、
データ変換を行うデータと鍵データとを論理演算する鍵関数部と、
データ変換を行うデータを他のデータへ置換変換するＳ関数部と、
データ変換を行うデータ同士で論理演算するＰ関数部と
を有する非線形関数部（Ｆ）を備え、
非線形関数部（Ｆ）は、鍵関数部をＳ関数部とＰ関数部との両者の前と両者の後とのいずれかに配置したことを特徴とする。
【００２８】
上記Ｓ関数部は、
変換するデータの一部分のデータを第１部分データとして入力して、入力したデータの値を他の値に変換して出力する変換テーブルＴを用いて第１部分データを変換し、変換したデータを出力する第１変換部（ｓ1）と、
変換するデータの少なくとも他の一部分のデータを第２部分データとして入力して、上記変換テーブルＴを用いた変換と第２部分用演算とを用いて第２部分データを変換し、変換したデータを出力する第２変換部（ｓ2）と
を備えたことを特徴とする。
【００２９】
この発明に係るデータ変換装置は、少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部を備えたデータ変換装置において、データ変換を行うデータ同士で論理演算するＰ関数部を有する非線形関数部（Ｆ）を備え、
上記Ｐ関数部は、ｚ1 ，ｚ2 ，・・・，ｚ8 の８個の４ｎ（ｎは１以上の整数）ビットデータを入力し、
上記ｚ1 ，ｚ2 ，ｚ3 ，ｚ4 の４個のデータのうち、少なくとも２個以上のデータ排他的論理和演算を行って４ｎビットの結果Ｕ1を得る回路と、
上記ｚ5 ，ｚ6 ，ｚ7 ，ｚ8 の４個のデータのうち、少なくとも２個以上のデータ排他的論理和演算を行って４ｎビットの結果Ｕ2を得る回路と、
Ｕ1 とＵ2 との排他的論理和演算を行って４ｎビットの結果Ｕ3 を得る回路と、
Ｕ1 に対して巡回シフトをする巡回回路と、
上記巡回回路の出力とＵ3 との排他的論理和演算を行って結果Ｕ4 を得る回路と
を備え、
上記Ｕ3 ，Ｕ4 をｚ1'，ｚ2'，・・・，ｚ8'として出力することを特徴とする。
【００３０】
この発明に係るデータ変換方法は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理を実行するデータ変換方法において、
上記データ処理は、データ変換を行うデータを第１のデータ（Ｌ）と第２のデータ（Ｒ）に分割するとともに、
上記データ処理は、第１のデータ（Ｌ）を変換するデータ正変換処理（ＦＬ）と、
第２のデータ（Ｒ）を上記データ正変換処理（ＦＬ）の変換とは逆の変換をするデータ逆変換処理（ＦＬ-1）と
を備えたことを特徴とする。
【００３１】
この発明に係るデータ変換方法は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理を実行するデータ変換方法において、
上記データ処理は、データを非線形変換する非線形変換処理を備え、
非線形変換処理は、
変換するデータの一部分のデータを第１部分データとして入力して、入力したデータの値を他の値に変換して出力する変換テーブルＴを用いて第１部分データを変換し、変換したデータを出力する第１変換処理（ｓ1）と、
変換するデータの少なくとも他の一部分のデータを第２部分データとして入力して、上記変換テーブルＴを用いた変換と第２部分用演算とを用いて第２部分データを変換し、変換したデータを出力する第２変換処理（ｓ2）とを備えたことを特徴とする。
【００３２】
この発明に係るデータ変換方法は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理を実行するデータ変換方法において、
上記データ処理は、変換するデータを入力し、入力したデータをある体（ｆｉｅｌｄ）の元と見なし、その部分体を用いた逆元回路を用いて変換し、変換したデータを出力する部分体変換処理と、
上記部分体変換処理の前段処理と後段処理との少なくともいずれか一方に変換するＧＦ（２n ）上のデータを自然な対応でＧＦ（２）nの元とみなし、ＧＦ（２）上のベクトル空間ＧＦ（２）n のアフィン変換処理とのいずれかを備えたことを特徴とする。
【００３３】
この発明に係るデータ変換方法は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理と、
上記データ処理が用いる鍵データを生成してデータ処理に供給する鍵生成処理と
を実行するデータ変換方法において、
上記データ処理は、各段ごとに拡大鍵を入力して非線形変換をする多段に接続された複数段の非線形データ変換処理を有し、
上記鍵生成処理は、上記複数段の非線形データ変換処理の各段毎に対して供給する拡大鍵を生成するにあたり、鍵データと鍵データから生成された鍵データに依存するデータとの少なくともいずれかを入力して予め定められたビット数Ｚ1，Ｚ2 ，・・・，Ｚm （ここで、ｉ，ｊ，ｋは、１〜ｍのいずれか１つの値とし、Ｚk −Ｚj＝Ｉ×（Ｚi+1 −Ｚi ）（Ｉは整数、Ｂ＝Ｚi+1 −Ｚi ））だけ、巡回シフトして、この巡回シフトした鍵データから各段の非線形データ変換処理へ供給する拡大鍵を生成する鍵シフト処理を有するとともに、
上記鍵シフト処理は、
１回の動作で（Ｚi+1 −Ｚi ）ビット（Ｂビット）の巡回シフトをする巡回シフト処理と、
Ｚi ビット巡回シフトされた鍵データに対して巡回シフト処理を１回動作させて（Ｚi+1 −Ｚi）ビット（Ｂビット）の巡回シフトを行わせることにより、巡回シフト処理によりＺi+1 ビット巡回シフトされた鍵データを生成させ、Ｚi+1ビット巡回シフトされた鍵データに対して巡回シフト処理をＩ回動作させてＩ×（Ｚi+1 −Ｚi ）ビット（Ｉ×Ｂビット）の巡回シフトを行わせることにより、巡回シフト処理によりＺi+2ビット巡回シフトされた鍵データを生成させる制御処理と
を有することを特徴とする。
【００３４】
この発明に係るデータ変換方法は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理と、
上記データ処理が用いる鍵データを生成してデータ処理に供給する鍵生成処理と
を実行するデータ変換方法において、
上記データ処理は、各段ごとに拡大鍵を入力して非線形変換をする多段に接続された複数段の非線形データ変換処理を有し、
上記鍵生成処理は、上記複数段の非線形データ変換処理の各段毎に対して供給する拡大鍵を生成するにあたり、ある鍵データを予め定められたビット数（Ｂビット）だけ順に巡回シフトして、この巡回シフトした鍵データから各段の非線形データ変換処理へ供給する拡大鍵を生成する鍵シフト処理を有するとともに、
上記鍵シフト処理は、Ｂビットだけ順に巡回シフトしたデータのうち、一部のデータを無視して拡大鍵を生成せず、残りの他のデータから拡大鍵を生成することを特徴とする。
【００３５】
この発明に係るデータ変換方法は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理と、
上記データ処理が用いる鍵データを生成してデータ処理に供給する鍵生成処理と
を実行するデータ変換方法において、
上記鍵生成処理は、
ＧビットのＧビット鍵データを入力して変換し、Ｇビットの第１のＧビット変換鍵データを出力する第１のＧビット鍵変換処理と、
上記第１のＧビット鍵変換処理から出力された第１のＧビット変換鍵データを入力し、更に変換してＧビットの第２のＧビット変換鍵データを出力する第２のＧビット変換処理と
を備え、
上記鍵生成部がＧビット鍵データＫを入力した場合は、Ｇビット鍵データＫを第１のＧビット鍵変換部に入力して変換し、第１のＧビット鍵変換処理により出力された第１のＧビット変換鍵データＫ1を変換されたＧビット鍵データとして出力し、
上記鍵生成部が２Ｇビット鍵データＫを入力した場合は、２Ｇビット鍵データＫからＧビット鍵データを生成して生成したＧビット鍵データを第１のＧビット鍵変換部に入力して変換して第１のＧビット変換鍵データＫ1を出力し、第１のＧビット変換鍵データＫ1 を第２のＧビット変換部に入力して変換して第２のＧビット変換鍵データＫ2 を出力し、第１のＧビット鍵変換処理により出力された第１のＧビット変換鍵データＫ1と、第２のＧビット変換処理により出力された第２のＧビット変換鍵データＫ2 とを連結して、変換された２Ｇビット鍵データ（Ｋ1，Ｋ2 ）として出力することを特徴とする。
【００３６】
この発明に係るデータ変換方法は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理と、
上記データ処理が用いる鍵データを生成してデータ処理に供給する鍵生成処理と
を実行するデータ変換方法において、
データ変換を行うデータと鍵データとを論理演算する鍵関数処理と、
データ変換を行うデータを他のデータへ置換変換するＳ関数処理と、
データ変換を行うデータ同士で論理演算するＰ関数処理と
を有する非線形関数処理（Ｆ）を備え、
非線形関数処理（Ｆ）は、鍵関数をＳ関数処理とＰ関数処理の間に動作させることを特徴とする。
【００３７】
この発明に係るデータ変換方法は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理と、
上記データ処理が用いる鍵データを生成してデータ処理に供給する鍵生成処理と
を実行するデータ変換方法において、
データ変換を行うデータと鍵データとを論理演算する鍵関数処理と、
データ変換を行うデータを他のデータへ置換変換するＳ関数処理と、
データ変換を行うデータ同士で論理演算するＰ関数処理と
を有する非線形関数処理（Ｆ）を備え、
非線形関数処理（Ｆ）は、鍵関数処理をＳ関数処理とＰ関数処理との両者の前と両者の後とのいずれかで動作させることを特徴とする。
【００３８】
この発明に係るデータ変換装置は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部を備えたデータ変換装置において、
上記データ処理部は、
第１の入力部と、
第２の入力部と、
第１の出力部と、
第２の出力部と
データの暗号化とデータの復号とを同一のアルゴリズムで行う非線形変換部と、
第１の入力部に入力されるデータを変換する第１入力データ正変換部と、
第２の出力部から出力されるデータを入力して上記第１入力データ正変換部の変換とは逆の変換をする第２出力データ逆変換部と
を備えたことを特徴とする。
【００３９】
上記非線形変換部は、
第１の入力データを第１の入力部から入力し、
第２の入力データを第２の入力部から入力し、
第１の入力データと第２の入力データとを暗号化用鍵データを用いて非線形変換し、第１の変換データと第２の変換データとを生成し、
第１の変換データを第１の出力部から出力し、
第２の変換データを第２の出力部から出力し、
上記第１の変換データを第２の入力部から入力し、
上記第２の変換データを第１の入力部から入力し、第１の変換データと第２の変換データとを復号用鍵データを用いて非線形変換し、第１の出力データと第２の出力データとを生成し、
第１の出力データを第２の出力部から出力し、
第２の出力データを第１の出力部から出力した場合に、
第１の入力データと第２の出力データとが同一となり、第２の入力データと第１の出力データとが同一となるアルゴリズムを備えたことを特徴とする。
【００４０】
上記データ処理部は、更に、
第２の入力部に入力されるデータを変換する第２入力データ正変換部と、
第１の出力部から出力されるデータを入力して、上記第２入力データ正変換部の変換とは逆の変換をする第１出力データ逆変換部と
を備えたことを特徴とする。
【００４１】
この発明に係るデータ変換装置は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部と、
上記データ処理部が用いる鍵データを生成してデータ処理部に供給する鍵生成部と
を備えたデータ変換装置において、
上記データ処理部は、データ変換を行うデータを非線形変換する非線形関数部（Ｆ）を備え、
上記鍵生成部は、非線形関数部（Ｆ）に供給する鍵データを加工して、加工した鍵データをデータ処理部の非線形関数部（Ｆ）以外の部分に供給してデータと演算させることを特徴とする。
【００４２】
この発明に係るデータ変換方法は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理と、
上記データ処理が用いる鍵データを生成してデータ処理に供給する鍵生成処理と
を実行するデータ変換方法において、
上記データ処理は、データ変換を行うデータを非線形変換する非線形関数処理（Ｆ）を備え、
上記鍵生成処理は、非線形関数処理（Ｆ）に供給する鍵データを加工して、加工した鍵データをデータ処理の非線形関数処理（Ｆ）以外の処理に供給してデータと演算させることを特徴とする。
【００４３】
また、この発明は、上記データ変換方法をコンピュータに実行させるプログラムを記録したコンピュータ読み取り可能な記録媒体であることを特徴とする。
【００４４】
また、この発明は、上記データ変換方法をコンピュータに実行させるプログラムであることを特徴とする。
【発明の効果】
【００４５】
この発明の実施の形態によれば、暗号化と復号とが同一のアルゴリズムで行えるように、データ正変換部（ＦＬ）２５１とデータ逆変換部（ＦＬ-1）２７１を備えているので、暗号化部２００と復号部５００を兼用して用いることができる。
【００４６】
また、この発明の実施の形態によれば、変換テーブルＴを兼用してＳボックス第１変換部１３とＳボックス第２変換部１４を構成しているので、構成が簡単になるという効果がある。
【００４７】
また、この発明の実施の形態によれば、部分体変換部１８を用いているので、構成が簡単になるとともに、線形変換部８５と線形変換部８７を設けているので、部分体変換部１８を用いた場合でも安全性が向上する。
【００４８】
また、この発明の実施の形態によれば、シフト制御部３４５がシフトレジスタを整数回動作させることにより１５ビットや１７ビットのみの一定値でないシフト数（例えば、３０ビットや３４ビット）を用いた鍵データのシフトを行うことができ、安全性を向上させることができる。
【００４９】
また、この発明の実施の形態によれば、シフトレジスタにおいてシフトされたデータから拡大鍵として使用しない場合を設けているので、更に、安全性を向上させることができる。
【００５０】
また、この発明の実施の形態によれば、ビット数の異なる鍵データが入力された場合でも、ビット長変換部３１０により一定長の鍵データに変換するので、柔軟性のある鍵生成オペレーションが行える。
【００５１】
また、この発明の実施の形態によれば、第１のＧビット鍵変換部３２０の中で２段の非線形変換を用いていることにより、Ｋ1 について等価鍵が存在しないことが証明でき、安全性を向上させることができる。
【００５２】
また、この発明の実施の形態によれば、鍵関数部２５の配置位置を変更したので、高速処理が可能になる。
【図面の簡単な説明】
【００５３】
【図１】暗号化用データ変換装置１００と復号用データ変換装置４００を示す図。
【図２】符号及び記号の説明図。
【図３】暗号化部２００又は復号部５００の構成図。
【図４】暗号化部２００又は復号部５００の他の構成図。
【図５】データ正変換部（ＦＬ）２５１の構成図。
【図６】データ逆変換部（ＦＬ-1）２７１の構成図。
【図７】従来の暗号化部と復号部の一部を示す図。
【図８】暗号化部２００と復号部５００の一部を示す図。
【図９】点対称におかれたデータ正変換部（ＦＬ）２５１とデータ逆変換部（ＦＬ-1）２７１を示す図。
【図１０】点対称となるデータ正変換部（ＦＬ）とデータ逆変換部（ＦＬ-1）の関係を示す図。
【図１１】非線形関数部Ｆを示す図。
【図１２】Ｓボックス第１変換部１３とＳボックス第２変換部１４の構成図。
【図１３】Ｓボックス変換部２１の構成図。
【図１４】線形変換部８５の構成図。
【図１５】線形変換部８７の構成図。
【図１６】鍵生成部３００又は鍵生成部６００の構成図。
【図１７】ビット長変換部３１０の動作説明図。
【図１８】シフトレジスタＡ３４１の構成図。
【図１９】シフト制御部３４５の制御テーブルの構成図。
【図２０】シフトレジスタＡ３４１とシフトレジスタＢ３４２の動作説明図。
【図２１】シフトレジスタＡ３４１とシフトレジスタＢ３４２と拡大鍵の対応図。
【図２２】シフトレジスタＡ３４１〜シフトレジスタＤ３４４の動作説明図。
【図２３】シフトレジスタＡ３４１〜シフトレジスタＤ３４４と拡大鍵の対応図。
【図２４】暗号化用データ変換装置１００と復号用データ変換装置４００が実装されたコンピュータを示す図。
【図２５】従来のＤＥＳの暗号関数の構成図。
【図２６】従来の１２８ビットブロック暗号Ｅ２の非線形関数を示す図。
【図２７】Ｓボックス変換部の他の例を示す図。
【図２８】Ｓボックス第１〜第４変換部を用いた非線形関数部Ｆを示す図。
【図２９】鍵関数部２５の配置を変更した図。
【図３０】鍵関数部２５の配置を変更した他の図。
【図３１】Ｐ関数部３０の他の構成図。
【図３２】Ｐ関数部３０の他の構成図。
【図３３】図３１のＳ１〜Ｓ４の構成と動作を示す図。
【図３４】等価鍵の非存在証明の説明図。
【図３５】等価鍵の非存在証明の説明図。
【図３６】暗号化部２００又は復号部５００の他の構成図。
【図３７】暗号化部２００又は復号部５００の他の構成図。
【図３８】暗号化部２００又は復号部５００の他の構成図。
【図３９】暗号化部２００又は復号部５００の他の構成図。
【図４０】暗号化部２００又は復号部５００の他の構成図。
【図４１】暗号化部２００又は復号部５００の他の構成図。
【図４２】図３９と図４０とを併せた場合を示す図。
【図４３】図３に示した暗号化部２００又は復号部５００に対して図２８に示した非線形関数部Ｆを用いた場合の構成図。
【図４４】図４３に示した非線形関数部Ｆの中から鍵関数部２５を削除した非線形関数部Ｆ’を用いる場合を示す図。
【図４５】図４４の構成に対して更にホワイトニング拡大鍵の演算を拡大鍵とともに行う場合を示す図。
【図４６】非線形関数部Ｆが図２９に示したような構成をとる場合に、非線形関数部Ｆから鍵関数部２５を削除し、代わりに、拡大鍵ｋをＸＯＲ回路２９８に供給する場合を示す図。
【図４７】非線形関数部Ｆが図３０に示したような構成をとる場合、非線形関数部Ｆから鍵関数部２５を削除し、代わりに、非線形変換された拡大鍵ｋ'をＸＯＲ回路２９８に供給する場合を示す図。
【発明を実施するための形態】
【００５４】
実施の形態１．
図１は、この実施の形態の暗号化用データ変換装置１００と復号用データ変換装置４００を示す図である。
【００５５】
暗号化用データ変換装置１００は、例えば、１２８ビットの平文を入力し、１２８ビットの暗号文を出力する暗号装置である。復号用データ変換装置４００は、１２８ビットの暗号文を入力し、１２８ビットの平文を出力する復号装置である。暗号化用データ変換装置１００は、暗号化部２００と鍵生成部３００から構成されている。暗号化部２００は、平文の暗号化を行う暗号化用データ処理部である。鍵生成部３００は、１２８ビット又は１９２ビット又は２５６ビットの鍵データを入力し、定数Ｖiを用いて複数（ｎ個）の６４ビット又は１２８ビットの拡大鍵を生成して暗号化部２００に供給する。復号用データ変換装置４００は、復号部５００と鍵生成部６００を備えている。復号部５００は、暗号文を入力し、暗号文の復号を行う復号用データ処理部である。鍵生成部６００は、前述した鍵生成部３００と同じもの又は同様のものである。また、暗号化部２００と復号部５００は、同一のものを用いることができ、図においては、暗号化部２００と復号部５００に分けて図示しているが、１つの回路又は１つのプログラムで兼用することができる。同様に、鍵生成部３００と鍵生成部６００も１つの回路又は１つのプログラムで兼用することができる。即ち、暗号化用データ変換装置１００と復号用データ変換装置４００は、同一の回路又は同一のプログラムで兼用することができる。
【００５６】
図２は、以下の図及び説明において用いる記号の意味を示している。
【００５７】
以下、図３以降の各図において、左側のデータを左データＬと呼び、図において、右側のデータを右データＲと呼ぶものとする。また、非線形データ変換部２１０，２２０，２３０，２４０へ入力するデータを入力データと呼び、非線形データ変換部２１０，２２０，２３０，２４０の内部のデータを中間データと呼び、非線形データ変換部２１０，２２０，２３０，２４０から出力するデータを出力データと呼ぶものとする。
【００５８】
図３は、暗号化部２００又は復号部５００の一例を示す図である。
【００５９】
図３は、６段の非線形データ変換部２１０と６段の非線形データ変換部２２０と６段の非線形データ変換部２３０が縦続接続されている場合を示している。６段の非線形データ変換部２１０と６段の非線形データ変換部２２０の間には、データ正変換部（ＦＬ）２５１とデータ逆変換部（ＦＬ-1）２７１が設けられている。また、６段の非線形データ変換部２２０と６段の非線形データ変換部２３０の間には、データ正変換部（ＦＬ）２５３とデータ逆変換部（ＦＬ-1）２７３が設けられている。６段の非線形データ変換部２１０の中には、６段の非線形データ変換部が設けられている。例えば、１つの非線形データ変換部２８０は、非線形関数部ＦとＸＯＲ（排他的論理和）回路２９０から構成されている。このようにして、図３においては、全部で１８段の非線形データ変換部が設けられている。
【００６０】
非線形データ変換部２１０は、任意の２つの右入力データＲ0 と左入力データＬ0 に対し、上記左入力データＬ0を第１の拡大鍵ｋ1 を用いて第１の非線形変換し、該第１の非線形変換された出力データと上記右入力データＲ0 との排他的論理和を第１の左中間データＬ1として出力し、上記左入力データＬ0 を第１の右中間データＲ1 として出力する第１の非線形データ変換部２８０と、上記第１の左中間データＲ1を第２の拡大鍵ｋ2 を用いて第２の非線形変換し、該第２の非線形変換された出力データと上記第１の右中間データＲ1 との排他的論理和を第２の左中間データＬ2として出力し、上記第１の左中間データＬ1 を第２の右中間データＲ2 として出力する第２の非線形データ変換部２８１とを備え、第１の非線形データ変換部２８０から第６の非線形データ変換部２８５を縦続接続して、最終の右中間データＲ6と左中間データＬ6 を変換後の出力データとするものである。
【００６１】
図４は、図３の暗号化部２００に対して更にデータ正変換部（ＦＬ）２５５とデータ逆変換部（ＦＬ-1）２７５と６段の非線形データ変換部２４０を追加し、全部で２４段の非線形データ変換部により変換を行う場合を示している。
【００６２】
図５は、データ正変換部（ＦＬ）２５１を示す図である。
【００６３】
図５においては、データ正変換部（ＦＬ）２５１の入力データを左入力データ５１と右入力データ５２に分け、論理演算を行った後、左出力データ６０と右出力データ６１により出力データを作成している場合を示している。左入力データ５１は、ＡＮＤ回路５４において、拡大鍵５３との論理積がとられ、その後、１ビット巡回左シフト部５５において、左方向への１ビットの巡回シフト（サーキュラシフトともいう）が行われる。シフト後は、右入力データ５２との排他的論理和がＸＯＲ回路５６により演算される。ＸＯＲ回路５６の出力は、右出力データ６１になるとともに、ＯＲ回路５８において、拡大鍵５７との論理和がとられ、その結果は、更に、ＸＯＲ回路５９において左入力データ５１と排他的論理和の演算が行われ、左出力データ６０となる。
【００６４】
図６は、データ逆変換部（ＦＬ-1）２７１を示す図である。
【００６５】
図６においては、入力データを左入力データ７１と右入力データ７２に分け、論理演算を行った後、左出力データ８０と右出力データ８１により出力データを作成している場合を示している。
【００６６】
右入力データ７２は、ＯＲ回路７４において、拡大鍵７３との論理和がとられ、更に、ＸＯＲ回路７５において、左入力データ７１との排他的論理和がとられる。その結果、ＸＯＲ回路７５からの出力は左出力データ８０になるとともに、ＡＮＤ回路７７において、拡大鍵７６との論理積がとられ、１ビット巡回左シフト部７８において、左方向への１ビットの巡回左シフトが行われ、その結果は、更に、ＸＯＲ回路７９において右入力データ７２と排他的論理和がとられ、右出力データ８１となる。
【００６７】
図５に示したデータ正変換部（ＦＬ）２５１と図６に示したデータ逆変換部（ＦＬ-1）２７１は、正逆反対のオペレーションをするものである。従って、同一の拡大鍵のもとで図５の出力データＹを図６の入力データＹにすることにより、図６の出力データＸとして図５の入力データＸを得ることができる。
【００６８】
このように、一方の出力データを他方の入力データとすることにより、一方の入力データを他方の出力データとして得ることができる関係を正変換と逆変換の関係にあるという。データ正変換部（ＦＬ）２５１とデータ逆変換部（ＦＬ-1）２７１は、このような正変換と逆変換を行う回路である。
【００６９】
なお、図５の１ビット巡回左シフト部５５と図６の１ビット巡回左シフト部７８はともに左シフトをするが、両方とも右シフトを行うようにしてもよい。また、データ正変換部（ＦＬ）２５１とデータ逆変換部（ＦＬ-1）２７１は、正変換と逆変換を行うのであれば、他の構成でもよい。例えば、巡回のシフト数を変えてもよい。また、ｎｏｔを含んだＡＮＤ回路、ｎｏｔを含んだＯＲ回路、ｎｏｔを含んだＸＯＲ回路を、更に付加してもよい。即ち、ｎｏｔを含んだＡＮＤ回路、ｎｏｔを含んだＯＲ回路、ｎｏｔを含んだＸＯＲ回路を、それぞれａｎｄｎ，ｏｒｎ，ｘｏｒｎと表した場合、定義は以下の通りである。
【００７０】
ｘ  ａｎｄｎ  ｙ：（ｎｏｔ  ｘ）ａｎｄ  ｙ
ｘ  ｏｒｎ  ｙ：（ｎｏｔ  ｘ）ｏｒ  ｙ
ｘ  ｘｏｒｎ  ｙ：（ｎｏｔ  ｘ）ａｎｄ  ｙ
最近のいくつかのＣＰＵでは、ｎｏｔも含んだａｎｄ，ｏｒ，ｘｏｒ命令を備えているものがある。これらの命令は、ａｎｄ，ｏｒ，ｘｏｒ命令と同様のコストで実行可能である。
【００７１】
図７は、従来の暗号化部２０１と従来の復号部５０１を示している。
【００７２】
従来の暗号化部２０１においては、２つのデータ正変換部ＦＬが設けられている。このため、この逆のオペレーションをするためには、復号部に２つのデータ逆変換部ＦＬ-1をおかなければならない。従って、暗号化部と復号部の構成が一般的には異なってしまい、暗号化部と復号部を同一回路にすることができない。
【００７３】
一方、図８に示すように、この実施の形態では、暗号化部２００において、データ正変換部（ＦＬ）２５１とデータ逆変換部（ＦＬ-1）２７１を隣り合わせに配置しているため、復号部５００においても全く同じ構成で復号を行うことができる。例えば、右データＲをデータ正変換部（ＦＬ）２５１で変換して左データＬ’を得、左データＬをデータ逆変換部（ＦＬ-1）２７１で変換して右データＲ’を得た場合、左データＬ’をデータ逆変換部（ＦＬ-1）２７１に入力させてやることにより右データＲを得ることができ、右データＲ’をデータ正変換部（ＦＬ）２５１に入力させてやることにより左データＬを得ることができる。
【００７４】
このようにして、暗号化部２００と復号部５００は、全く同じ構成で実現することができ、暗号化部２００と復号部５００を兼用して用いることができる。
【００７５】
図９は、データ正変換部（ＦＬ）２５１とデータ逆変換部（ＦＬ-1）２７１を非線形データ変換部２８０を中心にして点対称となる位置においた場合を示している。
【００７６】
このように、非線形データ変換部２８０を中心にしてデータ正変換部（ＦＬ）２５１とデータ逆変換部（ＦＬ-1）２７１を点対称の位置においた場合に、同一構成により暗号化と復号を行うことができる。
【００７７】
図１０は、点対称の位置におかれたデータ正変換部（ＦＬ）とデータ逆変換部（ＦＬ-1）との対応を示している。
【００７８】
図１０に示すように、図３においてはデータ正変換部（ＦＬ）２５１とデータ逆変換部（ＦＬ-1）２７３が６段の非線形データ変換部２２０を中心とした点対称の位置に配置されていることを示している。
【００７９】
なお、図３，図４，図８，図９において、データ正変換部（ＦＬ）とデータ逆変換部（ＦＬ-1）の位置は逆でもよい。また、図３，図４，図８，図９において、右データＲと左データＬは逆でもよい。
【００８０】
図３６は、６段の非線形データ変換部２１０と６段の非線形データ変換部２２０と６段の非線形データ変換部２３０とを用いて暗号化部２００を構成した場合を示している。
【００８１】
６段の非線形データ変換部２１０と６段の非線形データ変換部２２０と６段の非線形データ変換部２３０とは、暗号化と復号との両方に用いることができる回路である。
【００８２】
ここで、６段の非線形データ変換部２１０とデータ正変換部（ＦＬ）２５０とデータ逆変換部（ＦＬ-1）２７１とにより正逆データ変換部２１１を構成している。ここで、正逆データ変換部とは、暗号化と復号との両方に用いることができる回路のことをいうものとする。即ち、正逆データ変換部は、一方の出力データを他方の入力データとすることにより、一方の入力データを他方の出力データとして得ることができる正変換と逆変換とを行う１つの回路である。
【００８３】
また、６段の非線形データ変換部２２０とデータ正変換部（ＦＬ）２５１とデータ逆変換部（ＦＬ-1）２７３とにより正逆データ変換部２２１を構成している。
【００８４】
また、６段の非線形データ変換部２３０とデータ正変換部（ＦＬ）２５３とデータ逆変換部（ＦＬ-1）２７５とにより正逆データ変換部２３１を構成している。
【００８５】
これら正逆データ変換部２１１と正逆データ変換部２２１と正逆データ変換部２３１とを縦列に接続して暗号化部２００が構成されている。そして、この暗号化部２００は、復号部５００としても用いることができる。
【００８６】
また、６段の非線形データ変換部２１０と６段の非線形データ変換部２２０とデータ正変換部（ＦＬ）２５１とデータ逆変換部（ＦＬ-1）２７１とを非線形データ変換部１２１０と見なせば、非線形データ変換部１２１０は、暗号化と復号との両方に用いることができる回路である。ここで、非線形データ変換部１２１０とデータ正変換部（ＦＬ）２５０とデータ逆変換部（ＦＬ-1）２７３とにより正逆データ変換部１２１１を構成している。
【００８７】
また、６段の非線形データ変換部２２０と６段の非線形データ変換部２３０とデータ正変換部（ＦＬ）２５３とデータ逆変換部（ＦＬ-1）２７３とを非線形データ変換部１２２０と見なせば、非線形データ変換部１２２０とデータ正変換部（ＦＬ）２５１とデータ逆変換部（ＦＬ-1）２７５とにより正逆データ変換部１２２１を構成している。
【００８８】
正逆データ変換部１２１１と正逆データ変換部１２２１とは、復号部５００にも用いることができる。
【００８９】
また、６段の非線形データ変換部２１０から６段の非線形データ変換部２３０までを非線形データ変換部２２１０と見なせば、非線形データ変換部２２１０は、暗号化と復号との両方に用いることができる回路である。
【００９０】
ここで、非線形データ変換部２２１０とデータ正変換部（ＦＬ）２５０とデータ逆変換部（ＦＬ-1）２７５とにより正逆データ変換部２２１１を構成している。
【００９１】
正逆データ変換部２２１１は、復号部５００にも用いることができる。
【００９２】
以上のように、暗号化部２００又は復号部５００は、正逆データ変換部を複数縦続接続することにより構成することができる。
【００９３】
また、暗号化部２００又は復号部５００は、正逆データ変換部の中に正逆データ変換部を含ませることにより、正逆データ変換部を階層化して構成することができる。
【００９４】
図３７は、６段の非線形データ変換部２１０を備えた暗号化部２００と復号部５００とが同一構成となる例を示している。
【００９５】
図３７の６段の非線形データ変換部２１０は、図３，図４に示すように、偶数段の非線形データ変換部２８０を有している。データＡは、第１入力データ正変換部２５６により変換されデータＡ’となり、第１の入力部２６１に入力され、第１の入力部２６１から入力されたデータＡ’は、第１の出力部２６３からデータＡ1’として出力される。また、第２の入力部２６２から入力されたデータＢは、第２の出力部２６４からデータＢ1として出力される。第２の出力部２６４から出力されたデータＢ1 は、第２出力データ逆変換部２７９により変換されデータＢ1’として出力される。
【００９６】
暗号化部２００の第１の出力部２６３から出力されたデータＡ1’は、復号部５００の第２の入力部２６２にデータＡ1’として入力される。暗号化部２００の第２出力データ逆変換部２７９から出力されたデータＢ1’は、復号部５００の第１入力データ正変換部２５６にデータＢ1’として入力され、データＢ1として出力される。
【００９７】
非線形データ変換部２１０は、データＢ1 を入力してデータＢを出力する。また、非線形データ変換部２１０は、データＡ1’を入力してデータＡ’を出力する。第２出力データ逆変換部２７９は、データＡ’を入力してデータＡを出力する。
【００９８】
図３８では、奇数段の非線形データ変換部２１９が奇数段の非線形データ変換部２８０を有している。従って、第１の入力部２６１から入力されたデータＡ’は、第２の出力部２６４からデータＡ1’として出力され、第２出力データ逆変換部２７９により変換され、データＡ1”として出力される。また、第２の入力部２６２から入力したデータＢは、第１の出力部２６３からデータＢ1として出力される。
【００９９】
暗号化部２００の第１の出力部２６３から出力されたデータＢ1 は、復号部５００の第２の入力部２６２にデータＢ1 として入力される。暗号化部２００の第２出力データ逆変換部２７９から出力されたデータＡ1”は、復号部５００のデータＡ1”として入力され、第１入力データ正変換部２５６に入力される。
【０１００】
図３７，図３８の場合は、いずれも、暗号化部２００と復号部５００とが同一構成で、暗号化、復号ができる。
【０１０１】
図３９は、第２の入力部２６２に第２入力データ正変換部２５７を設け、第１の出力部２６３に第１出力データ逆変換部２７８を設けた場合を示している。
【０１０２】
図４０は、第１の入力部２６１に第１入力データ逆変換部２７６を設け、第２の出力部２６４に第２出力データ正変換部２５９を設けた場合を示している。
【０１０３】
図４１は、左側の入出力部２６１，２６３にデータ正変換部２５６，２５８を設け、右側の入出力部２６２，２６４にデータ逆変換部２７７，２７９を設けた場合を示している。
【０１０４】
図４２は、図３９と図４０とを併せた場合を示している。
【０１０５】
図示していないが、図３７と図３９を併せてもよい。また、図３８と図３９とを併せてもよい。また、図示していないが、図３７，図３９から図４２の６段（偶数段）の非線形データ変換部２１０を奇数段の非線形データ変換部２１９としてもよい。図３９から図４２の場合も、暗号化部２００と復号部５００との同一構成で実現できる。
【０１０６】
実施の形態２．
図１１は、非線形データ変換部２８０の非線形関数部Ｆの構成図である。
【０１０７】
非線形関数部Ｆは、Ｆ関数入力データ１０を入力し、非線形変換を行ってＦ関数出力データ４０を出力する。６４ビットのＦ関数入力データ１０は、８つのデータに分けられ、８ビットのデータとして処理される。各８ビットのデータは、鍵関数部２５の８個のＸＯＲ回路１２に入力され、拡大鍵１１との排他的論理和がとられ、Ｓ関数部２０において、置換を用いた非線形変換を受ける。その後、Ｐ関数部３０において、８ビットのデータ同士で図に示すような１６個のＸＯＲ回路８１５により演算が行われ、６４ビットのＦ関数出力データ４０が出力される。Ｓ関数部２０には、４個のＳボックス第１変換部１３と４個のＳボックス第２変換部１４が設けられている。
【０１０８】
図１２は、Ｓボックス第１変換部１３とＳボックス第２変換部１４の実現例を示す図である。
【０１０９】
Ｓボックス第１変換部１３の内部には、変換テーブルＴが設けられている。変換テーブルＴは、０〜２５５の値に対して任意に（ランダムに）対応させた０〜２５５の値を予め記憶しておくものであり、０〜２５５の値を入力し、各値に対応した値（０〜２５５の値）を出力するテーブルである。例えば、１が入力された場合には、変換テーブルＴから７が出力される。変換テーブルＴは、全単射であるかどうか、最大差分確率が十分に小さいかなどの安全性が考慮された非線形変換を行うものである。
【０１１０】
Ｓボックス第２変換部１４は、Ｓボックス第１変換部１３を含むとともに、１ビット巡回左シフト部２２（図の「＜＜＜１」の「＜＜＜」は巡回左シフトを示し、「１」は１ビットを示す）を有している。１ビット巡回左シフト部２２は、Ｓボックス第１変換部１３の出力に対して１ビットの巡回左シフトを行う。例えば、１が入力された場合には、Ｓボックス第１変換部１３から７が出力され、１ビット巡回左シフト部２２から１４が出力される。
【０１１１】
Ｓボックス第１変換部１３とＳボックス第２変換部１４を図１２のように構成すると、変換テーブルＴを２種類持つ必要がないにも関わらず、２種類の変換テーブルＴを設けた場合と同じような効果を得ることができる。変換テーブルＴを１つしか持たないことにより、変換テーブルＴを記憶するメモリ容量を少なくし、回路全体を小さくすることができる。
【０１１２】
また、図２７に示すように、１ビット巡回左シフト部２２の代わりに、或いは、１ビット巡回左シフト部２２の他に１ビット巡回右シフト部（図２７のＳボックス第３変換部１５の「＞＞＞１」）を設けることにより、更に異なる変換テーブルＴを設けた場合と同じ効果を得ることができる。また、入力されたデータｙに対して１ビット巡回左シフト部（図２７のＳボックス第４変換部１６の「＜＜＜１」）を設けて、入力されたデータｙを先にシフトしてから変換テーブルＴにより変換してもよい。図２７においては、ｓ（ｙ），ｓ（ｙ）＜＜＜１，ｓ（ｙ）＞＞＞１，ｓ（ｙ＜＜＜１）の場合を示したが、ｓ（ｙ＞＞＞１）でもよいし、ｓ（ｙ＜＜＜１）＜＜＜１，ｓ（ｙ＜＜＜１）＞＞＞１，ｓ（ｙ＞＞＞１）＜＜＜１，ｓ（ｙ＞＞＞１）＞＞＞１の場合でもよい。シフト量を１ビットにすることにより、例えば、１ビットシフト命令しか持たないＣＰＵ等においては、３ビットや５ビットシフトするよりも、高速処理を行うことが可能な場合がある。また、このシフト処理を１ビットシフトしかできないハードウェアを用いて行う場合にも、同様に、高速処理を適用することができる場合がある。更には、１ビットシフトではなく、２ビット、３ビット等の任意ビットのシフトでもよく、任意ビットのシフトを行うことにより、更に、異なる種類のテーブルを付加したのと同じ効果を得ることができる場合がある。
【０１１３】
図２８は、図２７に示した４つのＳボックス第１〜第４変換部１３，１４，１５，１６を用いたＳ関数部２０を示す図である。
【０１１４】
また、Ｐ関数部３０の他の構成を図３１に示す。
【０１１５】
８ビットの入力データｙ1 ，ｙ2 ，ｙ3 ，ｙ4 から、それぞれＳ１，Ｓ２，Ｓ３，Ｓ４を参照して３２ビットのデータＺ1，Ｚ2 ，Ｚ3 ，Ｚ4 を求め、これらの排他的論理和を回路９１３で求め、また、８ビットの入力データｙ5，ｙ6 ，ｙ7 ，ｙ8 から、それぞれＳ２，Ｓ３，Ｓ４，Ｓ１を参照して３２ビットのデータＺ5，Ｚ6 ，Ｚ7 ，Ｚ8 を求め、これらの排他的論理和を回路９１６により求め、これらの排他的論理和演算結果Ｕ2と前記排他的論理和演算結果Ｕ1 との排他的論理和が回路９１７でとられてｚ1'，ｚ2'，ｚ3'，ｚ4'として出力され、また、回路９１３よりの排他的論理和演算結果Ｕ1に対し、左に１バイト巡回シフト（この図３１では、「＜＜＜１」は１ビットではなく、１バイトの巡回シフトを示す）が回路９１８で行われ、回路９１７の出力と回路９１９で排他的論理和演算が行われてｚ5'，ｚ6'，ｚ7'，ｚ8'が得られる。
【０１１６】
ここで、図３３の（ａ）〜（ｄ）に示すように、Ｓ１はＳボックス第１変換部１３を、Ｓ２はＳボックス第２変換部１４を、Ｓ３はＳボックス第３変換部１５を、Ｓ４はＳボックス第４変換部１６を用いて構成されており、それぞれの変換部からの８ビット出力データを４つコピーして３２ビットデータとし、更に、そのうち３つのデータ（２４ビット分）だけを出力するように、マスクをかけて３２ビットデータを出力する。
【０１１７】
なお、上記回路９１８の１バイトの巡回シフトは、Ｓボックスが処理するビット長（８ビット＝１バイト）単位でシフトするものである。
【０１１８】
図３２は、図３１と等価な構成であるが、実装方法が異なるＰ関数部３０を示している。
【０１１９】
８ビットの入力データｙ1 ，ｙ2 ，ｙ3 ，ｙ4 から、それぞれＳ５，Ｓ６，Ｓ７，Ｓ８をそれぞれ参照して３２ビットのデータＺ1，Ｚ2 ，Ｚ3 ，Ｚ4 が出力され、これらは回路９３３により排他的論理和演算が行われ、その演算結果Ａが回路９３３から出力される。また、８ビットの入力データｙ5，ｙ6 ，ｙ7 ，ｙ8 から、それぞれＳ９，ＳＡ，ＳＢ，ＳＣを参照して３２ビットのデータＺ5，Ｚ6 ，Ｚ7 ，Ｚ8 が出力され、これらが回路９３６により排他的論理和演算が行われ、その演算結果Ｂが回路９３６から出力される。演算結果Ｂは、回路９３７により右に１バイト巡回シフト（この図３２では、図３１と同じく、１ビット単位ではなく、Ｓボックスが処理するビット長単位（１バイト単位）のシフトをする）されるとともに、回路９３８で演算結果Ａと排他的論理和演算される。この演算結果Ｃは、回路９３９により上（左）に１バイト巡回されるとともに、回路９３７の出力との排他的論理和演算が回路９４０で行われる。その演算結果Ｄは、回路９４１により上（左）に２バイト巡回されるとともに、回路９３９の出力と排他的論理和演算が回路９４２で行われる。その演算結果Ｅは、回路９４３により（右）に１バイト巡回されるとともに、回路９４１の出力と排他的論理和演算が回路９４４で行われる。回路９４４の出力Ｆがｚ1'，ｚ2'，ｚ3'，ｚ4'として、回路９４３の出力がｚ5'，ｚ6'，ｚ7'，ｚ8'として出力される。
【０１２０】
ここで、Ｓ５，ＳＣはＳボックス第１変換部１３と論理シフトを、Ｓ６，Ｓ９はＳボックス第２変換部１４と論理シフトを、Ｓ７，ＳＡはＳボックス第３変換部１５と論理シフトを、Ｓ８，ＳＢはＳボックス第４変換部１６と論理シフトを用いて構成されている。論理シフトは、各変換部からの８ビット出力データを３２ビット出力データ中の所定の位置に出力するために利用され、Ｓ５，ＳＡでは０，Ｓ６，ＳＢでは１バイト、Ｓ７，ＳＣでは２バイト、Ｓ８，Ｓ９では３バイト左シフトするように設定されている。即ち、変換部における８ビットの出力をｚとすると、３２ビットの出力は、Ｓ５，ＳＡでは［０，０，０，ｚ］（０は８つの各ビットが０であることを示す）、Ｓ６，ＳＢでは［０，０，ｚ，０］、Ｓ７，ＳＣでは［０，ｚ，０，０］、Ｓ８，Ｓ９では［ｚ，０，０，０］となる。
【０１２１】
なお、実装上は、直接所定の出力を出すように計算された８ビット入力、３２ビット出力の置換表を用意してもよい。
【０１２２】
図３１，図３２の場合は、図２６に示した従来のＥ２暗号で使われていた置換処理よりも高速で、かつ、柔軟な実装が可能となる装置を提供できる。
【０１２３】
図１１において、Ｓ関数部２０にあるＳボックスを全種類異なるＳボックスで個別に構成した場合には、８個の変換テーブルＴが必要になるのに対し、図１２のような構成にすることにより、少なくとも変換テーブルＴを記憶する全体の記憶容量を１／２にすることができる。
【０１２４】
また、図１２に示したＳボックス第１変換部１３、Ｓボックス第２変換部１４に対して、８個の８ビットデータを時分割に入力させることにより、従来の個別の８個のＳボックスを、図１２に示したＳボックス第１変換部１３とＳボックス第２変換部１４のみで代替えすることができる。
【０１２５】
図１３は、Ｓ関数部２０のＳボックスの他の例を示す図である。
【０１２６】
具体的な構成に関しては、松井，桜井「ガロア体除算回路及び乗除算共用回路」（特許登録番号２６４１２８５［Ｈ９．５．２］）に詳しく述べられている。
【０１２７】
Ｓボックス変換部２１には、８ビットのデータが入力され、８ビットのデータが出力される。Ｓボックス変換部２１は、Ｎ（ここでは、Ｎ＝８）ビット線形変換部１７と部分体変換部１８とＮビット線形変換部１９から構成されている。Ｎビット線形変換部１７は、８ビットのオペレーションを行う。部分体変換部１８は、ガロア体ＧＦ（２4）の元である４ビットのみのオペレーションを行う。Ｎビット線形変換部１９は、８ビットのオペレーションを行う。Ｎビット線形変換部１７の線形変換部８５は、図１４に示すような線形変換を行う回路である。また、線形変換部８７は、図１５に示すような線形変換を行う回路である。
【０１２８】
なお、線形変換部８５の代わりに、アフィン変換（なお、線形変換は、アフィン変換の一態様であると考えられる）を行う回路を用いても構わない。或いは、線形変換部８７の代わりに、アフィン変換を行う回路を用いても構わない。線形変換部８５は、８ビットのデータ（Ｘ）に変換を行い、得られた８ビットのデータ（Ｘ’）をガロア体ＧＦ（２8）の元とみなし、Ｘ’から上位４ビットと下位４ビットのデータ（Ｘ1 とＸ0 ）を、それぞれ部分体ＧＦ（２4）の元とみなし、部分体変換部１８に出力する。ここで、例えば、ＧＦ（２8 ）の元βを既約多項式Ｘ8 ＋Ｘ6＋Ｘ5 ＋Ｘ3 ＋１＝０の元とし、α＝β238 とすると、部分体ＧＦ（２4）の基底は、［１，α，α2 ，α3 ］と表され、これを用いてＧＦ（２4 ）の元Ｘ0，Ｘ1 と表すと、Ｘ’＝Ｘ0 ＋βＸ1 という関係になる（詳細は、「ガロア体除算回路及び乗除算共用回路」（特許登録番号２６４１２８５［Ｈ９．５．２］参照）。部分体変換部１８は、４ビットの演算を行う演算器のみで構成されている。
【０１２９】
ここで、「部分体」のとり方としてはＧＦ（２n ）に対して、ｎ＝２ｍとなる部分体ＧＦ（２m ）が考えられ、ここでの例は、ｎ＝８，ｍ＝４となる。
【０１３０】
部分体変換部１８は、「ガロア体除算回路及び乗除算共用回路」（特許登録番号２６４１２８５［Ｈ９．５．２］で示されたｎ＝８，ｍ＝４の時の回路を基に構成される部分体を用いた逆元回路である。この逆元回路の演算結果として、各々ＧＦ（２4）の元とみなせる上位４ビットのデータと下位４ビットのデータ（Ｙ1 とＹ0 ）が、ＧＦ（２8 ）上の元とみなせる８ビットのデータＹとして線形変換部８７に出力される。ここで、Ｙ＝Ｙ0＋βＹ1 である。以上より、この逆元回路は、Ｙ＝Ｙ0 ＋βＹ1 ＝１／（Ｘ0＋βＸ1 ）を演算する回路である。また、この逆元回路の「有限体」の元の表し方（基底の取り方）には「多項式基底」や「正規基底」というように、「基底」の取り方はいくつか考えられる。
【０１３１】
図１３のＳボックス変換部２１において特徴となる点は、非線形変換を行うために入力されたデータのビット幅（８ビット）の半分のビット幅（４ビット）で演算を行う点である。即ち、逆元回路においては、４ビットのオペレーションのみが行われている点が特徴である。
【０１３２】
このように、４ビットのみオペレーションを行うことにより演算速度は遅くなるかもしれないが、回路全体の規模は、８ビットの演算素子を用いるよりも遙かに小さくすることができるという利点がある。
【０１３３】
そして、Ｓボックス変換部２１の次の特徴は、前述した部分体変換部１８の両側にＮ＝８ビットのＮビット線形変換部１７とＮビット線形変換部１９を設けている点である。Ｓボックス変換部２１を部分体変換部１８を用いて実現すると、ランダムな値を記憶した変換テーブルＴを用いる場合に比べて、回路全体の規模が小さくなったり、構造が簡単になるという利点があるが、逆に、安全性が低下する可能性がある。そこで、部分体変換部１８の両側で線形変換又はアフィン変換を行い、部分体変換部１８を採用したことによる安全性の低下をなくすようにしている。
【０１３４】
なお、図１３において、部分体変換部１８の両側において線形変換を行っているが、片側だけに設けても構わない。或いは、片側で線形変換し、別側でアフィン変換を行っても構わない。
【０１３５】
図２９は、図１１に示した鍵関数部２５を、即ち、Ｓ関数部２０とＰ関数部３０の前にある鍵関数部２５を、Ｓ関数部２０とＰ関数部３０の後に配置したものである。
【０１３６】
また、図３０は、鍵関数部２５をＳ関数部２０とＰ関数部３０の間に配置したものである。
【０１３７】
図２９又は図３０のような構成にすることにより、図１１に示した構成に比べて、実装上高速になることが多いという効果が得られる。更に、拡大鍵の生成を補正することにより、図２９又は図３０の構成で、同一の入力から図１１の構成と同一の出力を得ることができる。図２６に示した従来のＦ関数においては、２つのＳ関数があり、それぞれ最初に拡大鍵との演算を行い、次に、Ｓ関数による演算を行っている。それに対し、図２９に示す場合は、ひとつの鍵関数部２５をＦ関数の最後に配置している。また、図３０の場合は、ひとつの鍵関数部２５をＳ関数部２０とＰ関数部３０の間に配置している。
【０１３８】
図４３は、図３に示した暗号化部２００又は復号部５００に対して図２８に示した非線形関数部Ｆを用いた場合の構成図である。
【０１３９】
左データがＦ関数入力データ１０として非線形関数部Ｆに入力され、Ｆ関数出力データ４０が出力される。Ｆ関数出力データ４０は、右データと排他的論理和演算が行われ、その結果が次の段の左データとなる。また、左データは、Ｆ関数入力データ１０として非線形関数部Ｆに入力されるとともに、次の段の右データとして用いられる。図４３に示す構成においては、非線形関数部Ｆの中で鍵関数部２５とＳ関数部２０とＰ関数部３０との演算が行われるため、非線形関数部Ｆにおける演算の負荷が大きなものとなる。この非線形関数部Ｆにおける演算の負荷を分散させて実行することにより、処理の高速化を図る例について、以下に図を用いて説明する。
【０１４０】
図４４は、図４３に示した非線形関数部Ｆの中から鍵関数部２５を削除した非線形関数部Ｆ’を用いる場合を示している。拡大鍵ｋ1 は、ＸＯＲ回路８９１において左データＬ0と排他的論理和演算が行われる。また、拡大鍵ｋ2 は、ＸＯＲ回路２９７において右データＲ0 と排他的論理和演算が行われる。左データは、Ｆ関数入力データ１０として非線形関数部Ｆ’に入力され、Ｓ関数部２０とＰ関数部３０との変換を受ける。ＸＯＲ回路２９７の出力とＦ関数出力データ４０とは、ＸＯＲ回路２９０において排他的論理和演算が行われ、左データＬ1を出力する。
【０１４１】
一方、鍵生成部３００，６００は、拡大鍵ｋ1 とｋ3 との排他的論理和演算を行い、この加工された拡大鍵ｋ1＋ｋ3 を出力する。ＸＯＲ回路８９１の出力Ｒ1 と拡大鍵ｋ1 ＋ｋ3 とが、ＸＯＲ回路２９８において排他的論理和演算が行われ、右データを出力する。鍵生成部３００，６００は、拡大鍵を加工して、ｋ1＋ｋ3 ，ｋ2 ＋ｋ4 ，ｋ3 ＋ｋ5 ，・・・，ｋ16＋ｋ18を生成して出力する。鍵生成部３００，６００は、加工された拡大鍵を、非線形関数処理（Ｆ）以外の処理に供給してデータと演算させる。この結果、左データＬ18と右データＲ18とは、図４３の場合と同じものが得られる。
【０１４２】
加工された拡大鍵を、非線形関数処理（Ｆ）以外の処理に供給してデータと演算させることにより、非線形関数部Ｆ’において、Ｓ関数部２０とＰ関数部３０との計算をしている間に、非線形関数部Ｆ’の外部、即ち、ＸＯＲ回路２９７，２９８で鍵データとの計算ができ、鍵関数部２５の計算が非線形関数部Ｆからなくなり、非線形関数部Ｆの負荷が分散され、高速実装が可能となる。
【０１４３】
図４５は、図４４の構成に対して更にホワイトニング拡大鍵ｋｗ1 の演算を拡大鍵とともに行う場合を示している。図４５においては、鍵生成部がホワイトニング拡大鍵の一部ｋｗ1highと第１の拡大鍵ｋ1との排他的論理和演算を予め行い（即ち、鍵生成部が拡大鍵を加工して）、ＸＯＲ回路８９１に供給している場合を示している。
また、鍵生成部がホワイトニング拡大鍵の一部ｋｗ1lowと第２の拡大鍵ｋ2 との排他的論理和演算を予め行い（即ち、鍵生成部が拡大鍵を加工して）、ＸＯＲ回路２９７に供給している場合を示している。
【０１４４】
このようにして、図４４に示したＸＯＲ回路２９３の演算をなくすことができる。また、図４５の場合は、鍵生成部がホワイトニング拡大鍵ｋｗ2 の一部ｋｗ2lowと拡大鍵ｋ17との排他的論理和演算を行い（即ち、鍵生成部が拡大鍵を加工して）、ＸＯＲ回路２９９に供給している。また、鍵生成部がホワイトニング拡大鍵の他の部分ｋｗ2highと拡大鍵ｋ18との排他的論理和演算を行い（即ち、鍵生成部が拡大鍵を加工して）、ＸＯＲ回路８９２に供給している。
【０１４５】
このようにして、図４４に示したＸＯＲ回路２９６の演算をなくしている。
【０１４６】
図４６は、非線形関数部Ｆが図２９に示したような構成をとる場合に、非線形関数部Ｆから鍵関数部２５を削除し、代わりに、鍵生成部が拡大鍵ｋをＸＯＲ回路２９８に供給する場合を示している。
【０１４７】
また、図４７は、非線形関数部Ｆが図３０に示したような構成をとる場合、非線形関数部Ｆから鍵関数部２５を削除し、代わりに、鍵生成部が非線形変換された拡大鍵ｋ'＝Ｐ（ｋ）をＸＯＲ回路２９８に供給する場合を示している。図４７の場合は、Ｐ関数処理による演算と同一の演算を鍵データに対して施して非線形変換された鍵データを生成し、非線形変換された鍵データを上記データ処理が用いる鍵データとして、データ処理の非線形関数処理（Ｆ）以外の処理に供給してデータと演算させる場合を示している。  図４６及び図４７のいずれの場合も、鍵関数部２５を非線形関数部Ｆから削除しているので、非線形関数部Ｆの演算負荷が減少し、非線形関数部Ｆの演算と平行して非線形関数部Ｆの外にあるＸＯＲ回路２９８の演算を行うことができるため、高速処理を行うことが可能になる。
【０１４８】
実施の形態３．
図１６は、図１に示した鍵生成部３００（又は鍵生成部６００）の構成図である。
【０１４９】
鍵生成部３００は、ビット長変換部３１０と第１のＧビット鍵変換部３２０と第２のＧビット鍵変換部３３０と鍵シフト部３４０から構成されている。鍵生成部３００には、１２８ビット又は１９２ビット又は２５６ビットの鍵データが入力され、１２８ビットの鍵データＫ1と１２８ビットの鍵データＫ2 が生成され、複数の６４ビットの拡大鍵が出力される。ビット長変換部３１０において、ビット数の異なる鍵データが入力されても、出力される鍵データのビット長が一定になるように変換している。即ち、ビット長変換部３１０は、内部において上位１２８ビットの鍵データＳＫhighと下位１２８ビットの鍵データＳＫlowを生成し、前者を第１のＧビット鍵変換部３２０と鍵シフト部３４０に出力する。また、後者を第２のＧビット鍵変換部３３０と鍵シフト部３４０に出力する。また、前者と後者の排他的論理和をとった１２８ビットの鍵データを第１のＧビット鍵変換部３２０に出力する。
【０１５０】
図１７は、ビット長変換部３１０の内部動作を示す図である。
【０１５１】
ビット長変換部３１０に１２８ビットの鍵データが入力された場合には、その入力された鍵データがそのまま上位１２８ビットの鍵データＳＫhighとして出力される。また、下位１２８ビットの鍵データＳＫlowは、０に設定されて出力される。
【０１５２】
次に、ビット長変換部３１０に１９２ビットの鍵データが入力された場合には、入力された鍵データの上位１２８ビットのデータがそのまま上位１２８ビットの鍵データＳＫhighとして出力される。また、入力された１９２ビットの鍵データの下位６４ビットのデータと、その下位６４ビットのデータが反転された６４ビットの反転データとが連結され、下位１２８ビットの鍵データＳＫlowが生成され出力される。
【０１５３】
次に、２５６ビットの鍵データが入力された場合には、入力された鍵データの上位１２８ビットがＳＫhighとして、下位１２８ビットがＳＫlowとして出力される。
【０１５４】
第１のＧビット鍵変換部３２０には、ビット長変換部３１０から１２８ビットの鍵データＳＫhighとＳＫlow の排他的論理和が入力され、２段の非線形変換を受けた後、上位１２８ビットの鍵データＳＫhighと排他的論理和がとられ、更に２段の非線形変換を受け、１２８ビットの鍵データＫ1が出力される。
【０１５５】
ビット長変換部３１０に入力された鍵データの長さが１２８ビットの場合には、第１のＧビット鍵変換部３２０から出力された１２８ビットの鍵データと入力された元の鍵データとを用いて鍵シフト部３４０が拡大鍵を生成する。ビット長変換部３１０に入力された鍵データの長さが１９２ビット又は２５６ビットの場合には、第１のＧビット鍵変換部３２０から出力された１２８ビットの鍵データを更に第２のＧビット鍵変換部３３０に入力し、下位１２８ビットの鍵データＳＫlowと排他的論理和をとり、２段の非線形変換を行った後、１２８ビットの鍵データＫ2 を出力する。鍵シフト部３４０には、第１のＧビット鍵変換部３２０と第２のＧビット鍵変換部３３０の両方から出力された２つの１２８ビットの鍵データが出力され、両者と入力された元の鍵データとを用いて鍵シフト部３４０が拡大鍵を生成する。
【０１５６】
鍵シフト部３４０は、シフトレジスタＡ３４１とシフトレジスタＢ３４２とシフトレジスタＣ３４３とシフトレジスタＤ３４４とシフト制御部３４５を備えている。シフト制御部３４５からは、セレクト信号３４６が各シフトレジスタに出力され、シフトレジスタの動作を制御している。
【０１５７】
図１８は、シフトレジスタＡ３４１の構成を示す図である。
【０１５８】
シフトレジスタＡ３４１は、１２８ビット分のスイッチ群を持ったセレクタＡ３４７と、１２８ビットのレジスタＡ３４８を有している。セレクト信号３４６は、セレクタＡ３４７の各スイッチをＡ側又はＢ側のいずれかに全て同時に接続することを指示するスイッチ信号を含んでいる。図においては、セレクト信号３４６によりセレクタＡ３４７のスイッチ群がＡを選択した場合を示しており、この場合には、レジスタＡ３４８が１７ビット左側に巡回シフトする場合を示している。また、スイッチ群がＢを接続した場合には、レジスタＡが左側に１５ビット巡回シフトすることを示している。この１５ビットシフト、或いは、１７ビットシフトは、１クロックサイクルで行われる。
【０１５９】
なお、巡回シフトのシフト数（１５，１７）は一例であり、他のシフト数でも構わない。
【０１６０】
図１９は、シフト制御部３４５に記憶されている制御テーブルの一部分を示す図である。
【０１６１】
この制御テーブルは、各クロック毎にレジスタを何ビットシフトさせるかを記憶しているテーブルである。例えば、レジスタＡ制御テーブルにおいては、１クロック目で１５ビットシフトさせることを示している。また、２クロック目で更に１５ビットシフトさせることを示している。同様に、３クロック目、４クロック目も１５ビットシフトさせることを示している。５クロック目〜８クロック目は、それぞれ１７ビットシフトさせることを示している。
【０１６２】
図２０は、１２８ビットの鍵データから拡大鍵を生成する場合に、シフト制御部３４５が図１９に示すテーブルを用いて各シフトレジスタを制御した結果を示す図である。
【０１６３】
シフトレジスタＡ３４１には、ビット長変換部３１０から入力した上位１２８ビットの鍵データＳＫhighが設定される。シフトレジスタＢ３４２には、第１のＧビット鍵変換部３２０から出力した１２８ビットの鍵データＫ1が設定される。このような状態で、図１９に示す制御テーブルに従って、シフトレジスタＡ３４１とシフトレジスタＢ３４２が動作する。図２０において、斜線を引いた部分は無視され、出力されないことを示している。それ以外の斜線が引かれていない部分は、図２１に示すように、拡大鍵として出力されるものである。
【０１６４】
図２１は、レジスタの値と拡大鍵の対応を示す図である。
【０１６５】
図２０においては、１クロック毎に１５ビットずつ４回シフトし、５クロック目からは１クロック毎に１７ビットシフトする場合を示している。シフトレジスタＡ３４１とシフトレジスタＢ３４２から上位６４ビット及び下位６４ビットを拡大鍵として出力するかしないかの判断、或いは、その出力する順番は、図示していない制御テーブルに記載されているものとし、その制御テーブルに基づいて、セレクト信号３４６に出力指示信号を含ませてシフトレジスタに出力することにより、各シフトレジスタから拡大鍵が６４ビットずつ出力されることになる。
【０１６６】
図２２は、１９２ビット又は２５６ビットの鍵データから拡大鍵を生成する場合を示している。
【０１６７】
即ち、シフトレジスタＡ３４１にビット長変換部３１０から入力した上位１２８ビットの鍵データＳＫhighをセットし、シフトレジスタＢ３４２に下位１２８ビットの鍵データＳＫlowをセットし、シフトレジスタＣ３４３に第１のＧビット鍵変換部３２０から出力した１２８ビットの鍵データＫ1 をセットし、シフトレジスタＤ３４４に第２のＧビット鍵変換部３３０から出力した１２８ビットの鍵データＫ2をセットする場合を示している。
【０１６８】
斜線部分は、拡大鍵として使用しない鍵を示している。
【０１６９】
図２３は、レジスタの値と拡大鍵の対応を示す図である。
【０１７０】
拡大鍵として使用しない鍵や図２３に示すレジスタの値と拡大鍵との対応も前述した制御部にある制御テーブルが記憶しているものとする。
【０１７１】
図１９に示すように、シフト制御部３４５は、シフトレジスタＡ３４１に設定された鍵データをシフトするビット数を記憶している。即ち、シフトレジスタＡ制御テーブルに示すように、シフトレジスタＡ３４１に設定された鍵データをＺ0＝０ビット、Ｚ1 ＝１５ビット、Ｚ2 ＝４５ビット、Ｚ3 ＝６０ビット、Ｚ4＝７７ビット、Ｚ5 ＝９４ビット、Ｚ6 ＝１１１ビット、Ｚ7 ＝１２８ビット移動させることにより、拡大鍵を次々と生成することになる。
【０１７２】
各シフト数の和は、１５＋１５＋１５＋１５＋１７＋１７＋１７＋１７＝１２８となり、１２８ビットのレジスタを１２８ビット巡回シフトすることにより、レジスタは初期状態に戻ることになる。
【０１７３】
このように、シフト数の総和を１２８ビット（レジスタのビット数）として初期状態に戻す理由は、初期状態のレジスタに対して次の処理があった場合に、そのまま次の処理が開始できるからである。また、逆変換処理（復号）を行う場合にも、拡大鍵を生成するための処理の開始が同じく初期状態のままから開始するため、初期状態をセットすることにより、変換処理（暗号化）と逆変換処理（復号）のどちらも行うことができる。また、シフト数の総和を１２８ビット（レジスタのビット数）より大きくしていないのは、例えば、１２８ビット（レジスタのビット数）以下の２ビット巡回シフトと１２８ビット（レジスタのビット数）より大きい１３０ビット巡回シフトは同一値になってしまい、一巡回以上のシフト（１２８ビット以上のシフト数）としてしまうことによるシフトレジスタ内の状態として、同じ値の発生を防止するためである。レジスタＡ制御テーブルは、レジスタを一巡回させるに当たり、その途中でできるだけ不規則なシフト数になる値を設定することが望ましい。しかし、シフトレジスタの構成を簡単にするには、なるべく限られたシフト数でシフトするようにしたい。そこで、レジスタを１個（１クロック）で１５ビットと１７ビットとの２種類のシフトができるように構成し、この２種類のシフトを用いて、更に、以下のようにして、異なる数のシフトを実現している。
【０１７４】
Ｚ1 −Ｚ0 ＝１５（ここで、Ｚ1 −Ｚ0 ＝Ｂ1とする）、Ｚ2 −Ｚ1 ＝３０（即ち、Ｚ2 −Ｚ1 ＝２Ｂ1）であり、Ｚ2 −Ｚ1 ＝２（Ｚ1 −Ｚ0 ）という関係にする。また、シフトレジスタＢ制御テーブルに示すように、Ｚ5−Ｚ4 ＝３４（ここで、Ｚ5 −Ｚ4 ＝２Ｂ2 とする）、Ｚ6−Ｚ5 ＝１７（即ち、Ｚ6 −Ｚ5 ＝Ｂ2 ）であり、Ｚ5−Ｚ4 ＝２（Ｚ6 −Ｚ5 ）という関係にする。即ち、シフト数の差分を１５ビットと３０ビット又は１７ビットと３４ビットとし、１回のシフト数（１５ビットと１７ビット）の整数倍（２倍＝Ｉ倍）となるシフト数（３０ビット又は３４ビット）とする。
【０１７５】
このように、シフト数の差分を１回のシフト数又は１回のシフト数の２倍以上の整数倍（Ｉ倍、Ｉは２以上の整数）のいずれかとすることにより、シフトレジスタＡ３４１を１回又は２回（Ｉ回）動作させることにより、制御テーブルに記憶したシフト数のオペレーションを容易に実現することができる。２回（Ｉ回）動作させるということは、シフトレジスタＡ３４１を動作させるために供給されている動作クロックの２クロック（Ｉクロック）サイクルでシフト動作が終了することを意味している。
【０１７６】
ここで、Ｉ回（２回）シフトさせる場合、Ｉ−１回（２−１＝１回）目までのシフトしたデータは上位のデータも下位のデータもともに無視し、拡大鍵として使用しない。例えば、図１９のＺ1＝１５からＺ2 ＝４５へシフトする場合は、Ｉ＝（Ｚ2 −Ｚ1 ）／（１回のシフト数）＝（４５−１５）／１５＝２となり、Ｉ−１回目（２−１＝１回目）のシフト後のデータは、上位のデータも下位のデータもともに無視し、拡大鍵として使用しない。これは、図２０では、ｋｅｙ［８］とｋｅｙ［９］に斜線が引かれている通り、拡大鍵として使用しないとして示されている。そして、Ｉ回目（２回目）のシフト後のデータの上位のデータと下位のデータのいずれか又は両方を拡大鍵として用いる。これは、図２０では、ｋｅｙ［１２］とｋｅｙ［１３］とが拡大鍵として出力されることが示されている。
【０１７７】
このように、２以上の整数倍のシフトを行うのは、１５ビット又は１７ビットのみのシフトだけでなく、３０（＝１５×２）ビット又は３４（＝１７×２）ビット（又は、４５（＝１５×３）ビット又は５１（＝１７×３）ビット等）のシフトも行えるようにし、シフト数を変化させ、安全性をより高めるためである。また、前述した拡大鍵として使用しない場合を設けているのも、同様に、より安全性を高めるためである。
【０１７８】
拡大鍵として使用しないデータ（図２０と図２２において、斜線を引かれた拡大鍵として使用しない鍵）は、例えば、ハードウェアの処理、或いは、プログラムの処理が一連に連続して行われないような場合に発生させることが望ましい。例えば、図３において、データ正変換部（ＦＬ）とデータ逆変換部（ＦＬ-1）のオペレーションを行うとき、或いは、その前後、或いは、プログラムにおいて関数呼び出し、或いは、サブルーチンコール、或いは、割り込み処理を行う場合等の処理の切れ目、或いは、処理の変化時に行うようにするのが望ましい。
【０１７９】
また、図１９に示した制御テーブルの特徴は、Ｂ1 ＝８×２−１＝１５（Ｂ1 ＝８×Ｊ1 −１、ここで、Ｊ1は１以上の整数）ビットのシフト数と、Ｂ2 ＝８×２＋１＝１７（Ｂ2 ＝８×Ｊ2 ＋１、ここで、Ｊ2は０以上の整数、Ｊ1 ＝Ｊ2 又はＪ1 ≠Ｊ2 ）ビットのシフト数を指定していることである。シフトの量を８の倍数に±１とすることにより、奇数ビットのシフトを行うことになり、拡大鍵のデータ処理部への作用が８ビット単位、即ち、偶数単位であることから、偶数ビットだけシフトするよりも安全性が高まる。また、シフト量として８の倍数に１ビットの±を行っているだけなので、例えば、１ビットシフト命令しか持たないＣＰＵ等においては、３ビットや５ビットシフトするよりも、高速処理を行うことが可能な場合がある。また、このシフト処理を１ビットシフトしかできないハードウェアを用いて行う場合にも、同様に、高速処理を適用することができる場合がある。
【０１８０】
前述したビット長変換部３１０の説明においては、３種類のビット幅の鍵データを入力する場合を示したが、１２８ビット（Ｇビット）と２５６ビット（２Ｇビット）の間のビット長Ｑ（Ｇ＜Ｑ＜２Ｇ）を持つ鍵データが入力された場合も、何等かのアルゴリズムを用いて２５６ビットの鍵データが入力された場合と同様のサイズに鍵データを伸長させることができる。即ち、Ｇビットと２Ｇビットの間の長さＱを持つ鍵データが入力された場合、ビット長変換部３１０によってＱビットの鍵データを２Ｇビットの鍵データに変換することができる。
【０１８１】
次に、図３４を用いて等価鍵の非存在証明の説明をする。
【０１８２】
以下の図３４の説明では、「＋」で排他的論理和演算を意味するとする。
【０１８３】
ここで、２つの１２８ビットの鍵データＳＫ１とＳＫ２（ＳＫ１≠ＳＫ２）とを入力するものとし、ビット長変換部３１０が、ＳＫ１からＳＫ１high＝ＳＫ１＝（ＳＫＨ１｜ＳＫＬ１）を、また、ＳＫ２からＳＫ２high＝ＳＫ２＝（ＳＫＨ２｜ＳＫＬ２）を出力するものとする。ここで、ＳＫＨｉ（ｉ＝１，２）はＳＫｉの上位６４ビットのデータであり、ＳＫＬｉ（ｉ＝１，２）はＳＫｉの下位６４ビットのデータである。
【０１８４】
ＳＫＨ１とＳＫＨ２との排他的論理和をΔＡとし、ＳＫＬ１とＳＫＬ２との排他的論理和をΔＢとすると、ＳＫ１≠ＳＫ２であるから、「少なくとも、ΔＡ≠０又はΔＢ≠０」が成り立つ。
【０１８５】
図３４に示すように、このΔＡとΔＢが２段の非線形変換を受けていくことによって、ΔＡ＋ΔＤ，ΔＢ＋ΔＣに変化する。このことは、ＳＫ１highとＳＫ２highとの排他的論理和（ΔＡ｜ΔＢ）が、ＳＫ１highから２段の非線形変換を受けたデータとＳＫ２highから２段の非線形変換を受けたデータとの排他的論理和（ΔＡ＋ΔＤ｜ΔＢ＋ΔＣ）に変化したことを意味する。従って、この２段の非線形変換を受けたデータが、排他的論理和回路９９９でそれぞれＳＫ１high，ＳＫ２highと排他的論理和演算されると、この２つのデータの排他的論理和は（ΔＤ｜ΔＣ）になる。さて、ここで、非線形変換が全単射関数であれば、ΔＸ≠０の入力に対して、ΔＹ≠０を出力することから、「少なくとも、ΔＡ≠０又はΔＢ≠０」であるならば、「少なくとも、ΔＣ≠０又はΔＤ≠０」となる。故に、２段の非線形変換によってＳＫ１highとＳＫ２highから同じデータを出力することはあり得ないことを意味しており、等価鍵の非存在証明となる。
【０１８６】
一方、図３５に示すように、２段の非線形変換ではなく、３段の非線形変換を行う場合について考えてみる。「少なくとも、ΔＡ≠０又はΔＢ≠０」が成り立つのであるから、ΔＡかΔＢのいずれかが０である場合があり得る。もし、ΔＡ＝０であるとするとΔＣ＝０となり、また、上記と同じ議論により、ＳＫ１highとＳＫ２highとの排他的論理和（０｜ΔＢ）が、ＳＫ１highから３段の非線形変換を受けたデータと、ＳＫ２highから３段の非線形変換を受けたデータとの排他的論理和（ΔＢ＋ΔＥ｜ΔＤ）に変化する。従って、この３段の非線形変換を受けたデータが、排他的論理和回路９９９でそれぞれＳＫ１high，ＳＫ２highと排他的論理和演算されると、この２つのデータの排他的論理和は（ΔＢ＋ΔＥ｜ΔＢ＋ΔＤ）になる。さて、ここで、ΔＢ＝ΔＤ＝ΔＥ≠０が成り立つと仮定すると、（ΔＢ＋ΔＥ｜ΔＢ＋ΔＤ）＝（０｜０）となる。つまり、この３段の非線形変換を受けたデータが、それぞれＳＫ１high，ＳＫ２highと排他的論理和演算すると、その演算結果が一致することを意味する。即ち、ＳＫ１highとＳＫ２highから同じデータを出力することを意味し、暗号の安全性上問題が多い等価鍵が存在することになる。
【０１８７】
以上述べた３段の非線形変換のみならず、一般的な非線形変換では異なるＳＫ１とＳＫ２から等価なＫ1 を出力する、即ち、等価鍵が存在する可能性があるが、本実施の形態で述べる２段の非線形変換なら等価鍵が存在しないことを証明できる。
【０１８８】
また、等価鍵の非存在証明が付けられるのは、この２段の非線形変換以外にもあると思われるが、２段の非線形変換を行う場合は、等価鍵の非存在証明を付けることができる上、簡単な構成であるため、２段の非線形変換をするのが望ましい構成である。
【０１８９】
図２４は、暗号化用データ変換装置１００又は復号用データ変換装置４００が実装されるコンピュータを示す図である。
【０１９０】
暗号化用データ変換装置１００又は／及び復号用データ変換装置４００は、プリントサーキットボードとしてバスに接続される。このプリントサーキットボードには、ＣＰＵやメモリや論理回路素子が備えられており、前述してきた動作を行うことによりＣＰＵから供給される平文を暗号文にし、ＣＰＵに返送する。或いは、ＣＰＵから送られてきた暗号文を平文に復号し、ＣＰＵに返送する。
【０１９１】
暗号化用データ変換装置１００又は復号用データ変換装置４００は、このように、全てハードウェアを用いて実現することが可能である。また、暗号化用データ変換装置１００又は復号用データ変換装置４００は、全てソフトウェアを用いてデータ変換方法としても実現することも可能である。即ち、磁気ディスク装置やフレキシブルディスク装置に記憶されたプログラムを用いて前述した動作を行わせることができる。或いは、図示していないが、ハードウェアとソフトウェアを組み合わせて前述した動作を実現させるようにしても構わない。また、図示していないが、１台のコンピュータで前述した動作全てを実現する必要はなく、サーバとクライアント、或いは、ホストコンピュータと端末コンピュータのように、分散されたシステムで前述した動作を達成するようにしても構わない。
【０１９２】
前述した図１〜図４７の図中に矢印が記載されている図面は、矢印の方向が動作の流れを示しており、前述した図１〜図４７の図中に矢印が記載されている図面は、データ変換装置のブロック図でもあり、かつ、フローチャート図でもある。そして、前述したブロック図における「何々部」と記載されている部分は、「何々工程」又は「何々処理」と読み換えることにより、データ変換方法を示す動作フローチャート又はプログラムフローチャートとなる。
【０１９３】
なお、前述した実施の形態では、１２８ビットの平文と暗号文の場合を示したが、２５６ビットの平文と暗号文やその他のビット数の平文と暗号文の場合でもよい。
【０１９４】
また、前述した実施の形態では、１２８，１９２，２５６ビットの鍵データと６４ビットの拡大鍵の場合を示したが、その他のビット数の場合でもよい。
【０１９５】
平文と暗号文と鍵データと拡大鍵のビット長が変わった場合には、もちろん、そのビット長に対応して、各部や各工程や各処理の処理するビット長も変わる。
【図１】
2011018065.tif 000003
【図２】
2011018065.tif 000004
【図３】
2011018065.tif 000005
【図４】
2011018065.tif 000006
【図５】
2011018065.tif 000007
【図６】
2011018065.tif 000008
【図７】
2011018065.tif 000009
【図８】
2011018065.tif 000010
【図９】
2011018065.tif 000011
【図１０】
2011018065.tif 000012
【図１１】
2011018065.tif 000013
【図１２】
2011018065.tif 000014
【図１３】
2011018065.tif 000015
【図１４】
2011018065.tif 000016
【図１５】
2011018065.tif 000017
【図１６】
2011018065.tif 000018
【図１７】
2011018065.tif 000019
【図１８】
2011018065.tif 000020
【図１９】
2011018065.tif 000021
【図２０】
2011018065.tif 000022
【図２１】
2011018065.tif 000023
【図２２】
2011018065.tif 000024
【図２３】
2011018065.tif 000025
【図２４】
2011018065.tif 000026
【図２５】
2011018065.tif 000027
【図２６】
2011018065.tif 000028
【図２７】
2011018065.tif 000029
【図２８】
2011018065.tif 000030
【図２９】
2011018065.tif 000031
【図３０】
2011018065.tif 000032
【図３１】
2011018065.tif 000033
【図３２】
2011018065.tif 000034
【図３３】
2011018065.tif 000035
【図３４】
2011018065.tif 000036
【図３５】
2011018065.tif 000037
【図３６】
2011018065.tif 000038
【図３７】
2011018065.tif 000039
【図３８】
2011018065.tif 000040
【図３９】
2011018065.tif 000041
【図４０】
2011018065.tif 000042
【図４１】
2011018065.tif 000043
【図４２】
2011018065.tif 000044
【図４３】
2011018065.tif 000045
【図４４】
2011018065.tif 000046
【図４５】
2011018065.tif 000047
【図４６】
2011018065.tif 000048
【図４７】
2011018065.tif 000049
【手続補正書】
【提出日】平成22年8月27日(2010.8.27)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
入力鍵データに基づいて少なくともデータの暗号化とデータの復号とのいずれかを実行するデータ処理部を備えるデータ変換装置において、
上記データ処理部は、
変換するデータが入力され、入力されたデータをある体（ｆｉｅｌｄ）の元とみなし、その体の部分体を用いた逆元回路を用いて変換し、変換されたデータを出力する部分体変換部と、
上記部分体変換部に接続される、変換するＧＦ（２n ）上のデータが入力され、入力されたＧＦ（２n ）上のデータをＧＦ（２）nの元とみなして、ＧＦ（２n ）上のデータをＧＦ（２）n 上のデータに変換するＧＦ（２）上のベクトル空間ＧＦ（２）n のアフィン変換部と
を備えたことを特徴とするデータ変換装置。
【請求項２】
上記部分体変換部は、Ｎ（Ｎは偶数）ビットのデータＸをＸ＝Ｘ0 ＋βＸ1 （Ｘ0，Ｘ1 ：部分体の元、β：もとの体の元）となる上位のＮ／２ビットのデータＸ1 と下位のＮ／２ビットのデータＸ0に等分して、Ｙ＝Ｙ0 ＋βＹ1 ＝１／（Ｘ0 ＋βＸ1 ）（但し、Ｘ＝０のときＹ＝０）となる上位のＮ／２ビットのデータＹ1と下位のＮ／２ビットのデータＹ0 をそれぞれＮ／２ビット単位で演算してデータＹを求める複数のＮ／２ビット演算器のみを有することを特徴とする請求項１記載のデータ変換装置。
【請求項３】
鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部と、
上記データ処理部が用いる鍵データを生成してデータ処理部に供給する鍵生成部と
を備えたデータ変換装置において、
上記データ処理部は、各段ごとに拡大鍵を入力して非線形変換をする多段に接続された複数段の非線形データ変換部を有し、
上記鍵生成部は、上記複数段の非線形データ変換部の各段毎に対して供給する拡大鍵を生成するにあたり、鍵データと鍵データから生成された鍵データに依存するデータとの少なくともいずれかを入力して予め定められたビット数Ｚ1，Ｚ2 ，・・・，Ｚm （ここで、ｉ，ｊ，ｋは、１〜ｍのいずれか１つの値とし、Ｚk −Ｚj＝Ｉ×（Ｚi+1 −Ｚi ）＝Ｉ×Ｂ（Ｉは整数、Ｂ＝Ｚi+1 −Ｚi ））だけ、巡回シフトして、この巡回シフトした鍵データから各段の非線形データ変換部の拡大鍵を生成する鍵シフト部を有するとともに、
上記鍵シフト部は、
１回の動作で（Ｚi+1 −Ｚi ）ビット（Ｂビット）の巡回シフトをする巡回シフトレジスタと、
Ｚi ビット巡回シフトされた鍵データに対して巡回シフトレジスタを１回動作させて（Ｚi+1 −Ｚi）ビット（Ｂビット）の巡回シフトを行わせることにより、巡回シフトレジスタにＺi+1 ビット巡回シフトされた鍵データを生成させ、Ｚi+1ビット巡回シフトされた鍵データに対して巡回シフトレジスタをＩ回動作させてＩ×（Ｚi+1 −Ｚi ）ビット（Ｉ×Ｂビット）の巡回シフトを行わせることにより、巡回シフトレジスタにＺi+2ビット巡回シフトされた鍵データを生成させる制御部と
を有することを特徴とするデータ変換装置。
【請求項４】
上記巡回シフトレジスタは、巡回シフトレジスタを動作させるために供給されている動作クロックの１クロックサイクルでＺi+1−Ｚi ビット（Ｂビット）の巡回シフトをする回路であることを特徴とする請求項３記載のデータ変換装置。
【請求項５】
上記巡回シフト回路は、（Ｚi+1 −Ｚi ）ビット（Ｂビット）の値として、Ｂ1＝８×Ｊ1 ＋１（Ｊ1 ＝０以上の整数）ビットと、Ｂ2 ＝８×Ｊ2 −１（Ｊ2＝１以上の整数、Ｊ1 とＪ2 は無関係、即ち、Ｊ1≠Ｊ2 又はＪ1＝Ｊ2 ）ビットとのいずれかの値を選択するセレクタを備えたことを特徴とする請求項３記載のデータ変換装置。
【請求項６】
鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部と、
上記データ処理部が用いる鍵データを生成してデータ処理部に供給する鍵生成部と
を備えたデータ変換装置において、
上記データ処理部は、各段ごとに拡大鍵を入力して非線形変換をする多段に接続された複数段の非線形データ変換部を有し、
上記鍵生成部は、上記複数段の非線形データ変換部の各段毎に対して供給する拡大鍵を生成するにあたり、ある鍵データを予め定められたビット数（Ｂビット）だけ順に巡回シフトして、この巡回シフトした鍵データから各段の非線形データ変換部の拡大鍵を生成す
る鍵シフト部を有するとともに、
上記鍵シフト部は、Ｂビットだけ順に巡回シフトしたデータのうち、一部のデータを無視して拡大鍵を生成せず、残りの他のデータから拡大鍵を生成することを特徴とするデータ変換装置。
【請求項７】
鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部と、
上記データ処理部が用いる鍵データを生成してデータ処理部に供給する鍵生成部と
を備えたデータ変換装置において、
上記鍵生成部は、
ＧビットのＧビット鍵データを入力して変換し、Ｇビットの第１のＧビット変換鍵データを出力する第１のＧビット鍵変換部と、
上記第１のＧビット鍵変換部から出力された第１のＧビット変換鍵データを入力し、更に変換してＧビットの第２のＧビット変換鍵データを出力する第２のＧビット変換部と
を備え、  上記鍵生成部がＧビット鍵データＫを入力した場合は、Ｇビット鍵データＫを第１のＧビット鍵変換部に入力して変換し、第１のＧビット鍵変換部により出力された第１のＧビット変換鍵データＫ1を変換されたＧビット鍵データとして出力し、
上記鍵生成部が２Ｇビット鍵データＫを入力した場合は、２Ｇビット鍵データＫからＧビット鍵データを生成して生成したＧビット鍵データを第１のＧビット鍵変換部に入力して変換して第１のＧビット変換鍵データＫ1を出力し、第１のＧビット変換鍵データＫ1 を第２のＧビット変換部に入力して変換して第２のＧビット変換鍵データＫ2 を出力し、第１のＧビット鍵変換部により出力された第１のＧビット変換鍵データＫ1と、第２のＧビット変換部により出力された第２のＧビット変換鍵データＫ2 とを連結して、変換された２Ｇビット鍵データ（Ｋ1，Ｋ2 ）として出力することを特徴とするデータ変換装置。
【請求項８】
上記第１のＧビット鍵変換部は、
Ｇビット鍵データを非線形変換する２段の非線形データ変換部と、
２段目の非線形データ変換部から出力された変換途中のＧビット鍵データと、
第１のＧビット鍵変換部が入力したＧビット鍵データとの論理演算を行う論理演算部とを備えたことを特徴とする請求項７記載のデータ変換装置。
【請求項９】
上記鍵生成部は、更に、Ｑビット（Ｇ＜Ｑ＜２Ｇ）の鍵データを入力した場合、Ｑビットの鍵データを２Ｇビットの鍵データにするビット長変換部を備えたことを特徴とする請求項７記載のデータ変換装置。
【請求項１０】
鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部と、
上記データ処理部が用いる鍵データを生成してデータ処理部に供給する鍵生成部と
を備えたデータ変換装置において、
データ変換を行うデータと鍵データとを論理演算する鍵関数部と、
データ変換を行うデータを他のデータへ置換変換するＳ関数部と、
データ変換を行うデータ同士で論理演算するＰ関数部と
を有する非線形関数部（Ｆ）を備え、
非線形関数部（Ｆ）は、鍵関数部をＳ関数部とＰ関数部の間に配置したことを特徴とするデータ変換装置。
【請求項１１】
鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部と、
上記データ処理部が用いる鍵データを生成してデータ処理部に供給する鍵生成部と
を備えたデータ変換装置において、
データ変換を行うデータと鍵データとを論理演算する鍵関数部と、
データ変換を行うデータを他のデータへ置換変換するＳ関数部と、
データ変換を行うデータ同士で論理演算するＰ関数部と
を有する非線形関数部（Ｆ）を備え、
非線形関数部（Ｆ）は、鍵関数部をＳ関数部とＰ関数部との両者の前と両者の後とのい
ずれかに配置したことを特徴とするデータ変換装置。
【請求項１２】
上記Ｓ関数部は、
変換するデータの一部分のデータを第１部分データとして入力して、入力したデータの値を他の値に変換して出力する変換テーブルＴを用いて第１部分データを変換し、変換したデータを出力する第１変換部（ｓ1）と、
変換するデータの少なくとも他の一部分のデータを第２部分データとして入力して、上記変換テーブルＴを用いた変換と第２部分用演算とを用いて第２部分データを変換し、変換したデータを出力する第２変換部（ｓ2）と
を備えたことを特徴とする請求項１０記載のデータ変換装置。
【請求項１３】
少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部を備えたデータ変換装置において、データ変換を行うデータ同士で論理演算するＰ関数部を有する非線形関数部（Ｆ）を備え、
上記Ｐ関数部は、ｚ1 ，ｚ2 ，・・・，ｚ8 の８個の４ｎ（ｎは１以上の整数）ビットデータを入力し、
上記ｚ1 ，ｚ2 ，ｚ3 ，ｚ4 の４個のデータのうち、少なくとも２個以上のデータの排他的論理和演算を行って４ｎビットの結果Ｕ1を得る回路と、
上記ｚ5 ，ｚ6 ，ｚ7 ，ｚ8 の４個のデータのうち、少なくとも２個以上のデータの排他的論理和演算を行って４ｎビットの結果Ｕ2を得る回路と、
Ｕ1 とＵ2 との排他的論理和演算を行って４ｎビットの結果Ｕ3 を得る回路と、
Ｕ1 に対して巡回シフトをする巡回回路と、
上記巡回回路の出力とＵ3 との排他的論理和演算を行って４ｎビットの結果Ｕ4 を得る回路と
を備え、
上記Ｕ3 ，Ｕ4 をそれぞれ４個に分割してｚ1'，ｚ2'，・・・，ｚ8'の８個のｎビットのデータとして出力することを特徴とする請求項１０記載のデータ変換装置。
【請求項１４】
入力鍵データに基づいて少なくともデータの暗号化とデータの復号とのいずれかのデータ変換処理を実行するデータ処理部を備えるデータ変換装置のデータ変換方法において、
上記データ変換処理は、
部分体変換部が、変換するデータを入力し、入力されたデータをある体（ｆｉｅｌｄ）の元とみなし、その体の部分体を用いた逆元回路を用いて変換し、変換されたデータを出力する部分体変換処理と、
上記部分体変換部に接続されるアフィン変換部が、変換するＧＦ（２n ）上のデータを入力し、入力されたＧＦ（２n ）上のデータをＧＦ（２）nの元とみなして、ＧＦ（２n ）上のデータをＧＦ（２）n 上のデータに変換するＧＦ（２）上のベクトル空間ＧＦ（２）n のアフィン変換処理と
を備えたことを特徴とするデータ変換装置のデータ変換方法。
【請求項１５】
鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理と、
上記データ処理が用いる鍵データを生成してデータ処理に供給する鍵生成処理と
を実行するデータ変換方法において、
上記データ処理は、各段ごとに拡大鍵を入力して非線形変換をする多段に接続された複数段の非線形データ変換処理を有し、
上記鍵生成処理は、上記複数段の非線形データ変換処理の各段毎に対して供給する拡大鍵を生成するにあたり、鍵データと鍵データから生成された鍵データに依存するデータとの少なくともいずれかを入力して予め定められたビット数Ｚ1，Ｚ2 ，・・・，Ｚm （ここで、ｉ，ｊ，ｋは、１〜ｍのいずれか１つの値とし、Ｚk −Ｚj＝Ｉ×（Ｚi+1 −Ｚi ）＝Ｉ×Ｂ（Ｉは整数、Ｂ＝Ｚi+1 −Ｚi））だけ、巡回シフトして、この巡回シフトした鍵データから各段の非線形データ変換処理へ供給する拡大鍵を生成する鍵シフト処理を有するとともに、
上記鍵シフト処理は、
１回の動作で（Ｚi+1 −Ｚi ）ビット（Ｂビット）の巡回シフトをする巡回シフト処理と、
Ｚi ビット巡回シフトされた鍵データに対して巡回シフト処理を１回動作させて（Ｚi+1 −Ｚi）ビット（Ｂビット）の巡回シフトを行わせることにより、巡回シフト処理によりＺi+1 ビット巡回シフトされた鍵データを生成させ、Ｚi+1ビット巡回シフトされた鍵データに対して巡回シフト処理をＩ回動作させてＩ×（Ｚi+1 −Ｚi ）ビット（Ｉ×Ｂビット）の巡回シフトを行わせることにより、巡回シフト処理によりＺi+2ビット巡回シフトされた鍵データを生成させる制御処理と
を有することを特徴とするデータ変換方法。
【請求項１６】
鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理と、
上記データ処理が用いる鍵データを生成してデータ処理に供給する鍵生成処理と
を実行するデータ変換方法において、
上記データ処理は、各段ごとに拡大鍵を入力して非線形変換をする多段に接続された複数段の非線形データ変換処理を有し、
上記鍵生成処理は、上記複数段の非線形データ変換処理の各段毎に対して供給する拡大鍵を生成するにあたり、ある鍵データを予め定められたビット数（Ｂビット）だけ順に巡回シフトして、この巡回シフトした鍵データから各段の非線形データ変換処理へ供給する拡大鍵を生成する鍵シフト処理を有するとともに、
上記鍵シフト処理は、Ｂビットだけ順に巡回シフトしたデータのうち、一部のデータを無視して拡大鍵を生成せず、残りの他のデータから拡大鍵を生成することを特徴とするデータ変換方法。
【請求項１７】
鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理と、
上記データ処理が用いる鍵データを生成してデータ処理に供給する鍵生成処理と
を実行するデータ変換方法において、
上記鍵生成処理は、
ＧビットのＧビット鍵データを入力して変換し、Ｇビットの第１のＧビット変換鍵データを出力する第１のＧビット鍵変換処理と、
上記第１のＧビット鍵変換処理から出力された第１のＧビット変換鍵データを入力し、更に変換してＧビットの第２のＧビット変換鍵データを出力する第２のＧビット変換処理と
を備え、
上記鍵生成処理がＧビット鍵データＫを入力した場合は、Ｇビット鍵データＫを第１のＧビット鍵変換処理に入力して変換し、第１のＧビット鍵変換処理により出力された第１のＧビット変換鍵データＫ1を変換されたＧビット鍵データとして出力し、
上記鍵生成処理が２Ｇビット鍵データＫを入力した場合は、２Ｇビット鍵データＫからＧビット鍵データを生成して生成したＧビット鍵データを第１のＧビット鍵変換処理に入力して変換して第１のＧビット変換鍵データＫ1を出力し、第１のＧビット変換鍵データＫ1 を第２のＧビット変換処理に入力して変換して第２のＧビット変換鍵データＫ2を出力し、第１のＧビット鍵変換処理により出力された第１のＧビット変換鍵データＫ1 と、第２のＧビット変換処理により出力された第２のＧビット変換鍵データＫ2とを連結して
、変換された２Ｇビット鍵データ（Ｋ1 ，Ｋ2 ）として出力することを特徴とするデータ変換方法。
【請求項１８】
鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理と、
上記データ処理が用いる鍵データを生成してデータ処理に供給する鍵生成処理と
を実行するデータ変換方法において、
データ変換を行うデータと鍵データとを論理演算する鍵関数処理と、
データ変換を行うデータを他のデータへ置換変換するＳ関数処理と、
データ変換を行うデータ同士で論理演算するＰ関数処理と
を有する非線形関数処理（Ｆ）を備え、
非線形関数処理（Ｆ）は、鍵関数をＳ関数処理とＰ関数処理の間に動作させることを特徴とするデータ変換方法。
【請求項１９】
鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理と、
上記データ処理が用いる鍵データを生成してデータ処理に供給する鍵生成処理と
を実行するデータ変換方法において、
データ変換を行うデータと鍵データとを論理演算する鍵関数処理と、
データ変換を行うデータを他のデータへ置換変換するＳ関数処理と、
データ変換を行うデータ同士で論理演算するＰ関数処理と
を有する非線形関数処理（Ｆ）を備え、
非線形関数処理（Ｆ）は、鍵関数処理をＳ関数処理とＰ関数処理との両者の前と両者の後とのいずれかで動作させることを特徴とするデータ変換方法。
【請求項２０】
鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部と、
上記データ処理部が用いる鍵データを生成してデータ処理部に供給する鍵生成部と
を備えたデータ変換装置において、
上記データ処理部は、データ変換を行うデータを非線形変換する非線形関数部（Ｆ）を備え、
上記鍵生成部は、非線形関数部（Ｆ）に供給する鍵データを加工して、加工した鍵データをデータ処理部の非線形関数部（Ｆ）以外の部分に供給してデータと演算させることを特徴とするデータ変換装置。
【請求項２１】
鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理と、
上記データ処理が用いる鍵データを生成してデータ処理に供給する鍵生成処理と
を実行するデータ変換方法において、
上記データ処理は、データ変換を行うデータを非線形変換する非線形関数処理（Ｆ）を備え、
上記鍵生成処理は、非線形関数処理（Ｆ）に供給する鍵データを加工して、加工した鍵データをデータ処理の非線形関数処理（Ｆ）以外の処理に供給してデータと演算させることを特徴とするデータ変換方法。
【請求項２２】
上記請求項１４記載のデータ変換装置のデータ変換方法をコンピュータであるデータ変換装置に実行させるプログラム又は上記プログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項２３】
上記請求項１５記載のデータ変換方法をコンピュータに実行させるプログラム又は上記プログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項２４】
上記請求項１６記載のデータ変換方法をコンピュータに実行させるプログラム又は上記プログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項２５】
上記請求項１７記載のデータ変換方法をコンピュータに実行させるプログラム又は上記プログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項２６】
上記請求項１８記載のデータ変換方法をコンピュータに実行させるプログラム又は上記プログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項２７】
上記請求項１９記載のデータ変換方法をコンピュータに実行させるプログラム又は上記プログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項２８】
上記請求項２１記載のデータ変換方法をコンピュータに実行させるプログラム又は上記プログラムを記録したコンピュータ読み取り可能な記録媒体。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報通信等において、デジタル情報を保護する暗号化と復号及びデータ拡散等のためのデータ変換装置とデータ変換方法及びデータ変換方法を記録した記録媒体に関するものである。
【背景技術】
【０００２】
図２５は、「現代暗号理論」（社団法人電子情報通信学会、平成９年１１月１５日初版第６刷発行、４６頁）に記載された従来のＤＥＳ暗号に用いられる暗号関数を示す図である。
【０００３】
図２５に示すように、８個のＳボックスが設けられている。この８個のＳボックスは、それぞれ異なるテーブルである。各テーブルは、６ビットの入力データから４ビットの出力データを出力するものである。
【０００４】
図２６は、「Ｓｐｅｃｉｆｉｃａｔｉｏｎ  ｏｆ  Ｅ２  −  ａ  １２８−ｂｉｔ  Ｂｌｏｃｋ  Ｃｉｐｈｅｒ」（Ｎｉｐｐｏｎ  Ｔｅｌｅｇｒａｐｈ  ａｎｄ  Ｔｅｌｅｐｈｏｎｅ  Ｃｏｒｐｏｒａｉｏｎ，Ｊｕｎｅ  １４，１９９８、１０頁）に記載された非線形変換関数を示す図である。
【０００５】
図２６に示すように、各Ｓ関数部には、８個のＳボックスが設けられている。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】Ｂｒｕｃｅ  Ｓｃｈｎｅｉｅｒ，「Ｄｅｓｃｒｉｐｔｉｏｎ  ｏｆ  ａ  Ｎｅｗ  Ｖａｒｉａｂｌｅ−Ｌｅｎｇｈ  Ｋｅｙ，  ６４−Ｂｉｔ  Ｂｌｏｃｋ  Ｃｉｐｈｅｒ  （Ｂｌｏｗｆｉｓｈ）」，  Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ，  Ｖｏｌ．８０９，  ｐ．１９１−２０４，  １９９４年７月２１日ＪＩＣＳＴ受入，引用非特許０３−００４１７０
【発明の概要】
【発明が解決しようとする課題】
【０００７】
従来の暗号装置においては、複数のＳボックスが設けられている。ある暗号では、それぞれ異なるテーブルが用意されているため、記憶容量が１つのＳボックスを使う場合に比べて増大し、また、別の暗号では、１つのＳボックスしか使っていないため、安全性が低下するという問題がある。
【０００８】
また、図７に示すように、暗号化部にデータ正変換部（ＦＬ）２５０を設けた場合には、復号部にデータ逆変換部（ＦＬ-1）２７０を設けなければ復号することができない。デ
ータ正変換部（ＦＬ）２５０とデータ逆変換部（ＦＬ-1）２７０は、一般には、異なる回路であるため、暗号化部と復号部を同一の構成にすることができないという課題があった。
【０００９】
また、拡大鍵を生成する場合に、より安全性の高い拡大鍵を生成するために複雑なオペレーションが必要であった。また、拡大鍵を生成するに当たり、初期値として入力される鍵データのビット数が一定値でなければならないという課題があった。
【００１０】
この発明は、暗号化用と復号用の回路を同一にするとともに、非線形関数計算のために用いられる回路規模、プログラムサイズ、メモリ容量を削減し、拡大鍵を生成する場合に、簡単な構成で生成できるシステムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
この発明に係るデータ変換装置は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部を備えたデータ変換装置において、
上記データ処理部は、データを非線形変換する非線形変換部を備え、
非線形変換部は、
変換するデータの一部分のデータを第１部分データとして入力して、入力したデータの値を他の値に変換して出力する変換テーブルＴを用いて第１部分データを変換し、変換したデータを出力する第１変換部（ｓ1）と、
変換するデータの少なくとも他の一部分のデータを第２部分データとして入力して上記変換テーブルＴを用いた変換と第２部分用演算とを用いて第２部分データを変換し、変換したデータを出力する第２変換部（ｓ2）と
を備えたことを特徴とする。
【００１２】
上記第１変換部（ｓ1 ）は、変換テーブルＴにデータｙ1 を入力してデータｓ1 （ｙ1）を出力させ、このデータをデータｚ1＝ｓ1 （ｙ1 ）として出力し、
上記第２変換部（ｓ2 ）は、変換テーブルＴにデータｙ2 を入力してデータｓ1 （ｙ2）を出力させ、データｓ1（ｙ2 ）を巡回シフト処理したデータ（ｒｏｔ（ｓ1 （ｙ2）））をデータｚ2＝ｒｏｔ（ｓ1 （ｙ2 ））として出力することを特徴とする。
【００１３】
上記データ処理部は、更に、
変換するデータの第１部分データと第２部分データとは異なる一部分のデータを第３部分データとして入力し、第１部分データと第２部分データと第３部分データとは異なる一部分のデータを第４部分データとしてそれぞれ入力して、上記変換テーブルＴを用いた変換と、第２変換部（ｓ2）の第２部分用演算とはそれぞれ異なる第３部分用演算と第４部分用演算とにより、第３部分データと第４部分データとをそれぞれ変換し、変換したデータを出力する第３変換部（ｓ3）と第４変換部（ｓ4）とを備えたことを特徴とする。
【００１４】
この発明に係るデータ変換装置は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部を備えたデータ変換装置において、
上記データ処理部は、変換するデータを入力し、入力したデータをある体（ｆｉｅｌｄ）の元と見なし、その部分体を用いた逆元回路を用いて変換し、変換したデータを出力する部分体変換部と、
上記部分体変換部の前段と後段との少なくともいずれか一方に変換するＧＦ（２n ）上のデータを自然な対応でＧＦ（２）nの元とみなし、ＧＦ（２）上のベクトル空間ＧＦ（２）nのアフィン変換部を備えたことを特徴とする。
【００１５】
上記部分体変換部は、Ｎ（Ｎは偶数）ビットのデータＸをＸ＝Ｘ0 ＋βＸ1 （Ｘ0 ，Ｘ1：部分体の元、β：もとの体の元）となる上位のＮ／２ビットのデータＸ1と下位のＮ／２ビットのデータＸ0 に等分して、Ｙ＝Ｙ0＋βＹ1 ＝１／（Ｘ0＋βＸ1 ）（但し、Ｘ＝０のときＹ＝０）となる上位のＮ／２ビットのデータＹ1と下位のＮ／２ビットのデータＹ0をそれぞれＮ／２ビット単位で演算してデータＹを求める複数のＮ／２ビット演算器のみを有することを特徴とする。
【００１６】
この発明に係るデータ変換装置は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部と、
上記データ処理部が用いる鍵データを生成してデータ処理部に供給する鍵生成部と
を備えたデータ変換装置において、
上記データ処理部は、各段ごとに拡大鍵を入力して非線形変換をする多段に接続された複数段の非線形データ変換部を有し、
上記鍵生成部は、上記複数段の非線形データ変換部の各段毎に対して供給する拡大鍵を生成するにあたり、鍵データと鍵データから生成された鍵データに依存するデータとの少なくともいずれかを入力して予め定められたビット数Ｚ1，Ｚ2，・・・，Ｚm （ここで、ｉ，ｊ，ｋは１〜ｍのいずれか１つの値とし、Ｚk −Ｚj＝Ｉ×（Ｚi+1−Ｚi ）＝Ｉ×Ｂ（Ｉは整数、Ｂ＝Ｚi+1 −Ｚi ））だけ、巡回シフトして、この巡回シフトした鍵データから各段の非線形データ変換部の拡大鍵を生成する鍵シフト部を有するとともに、
上記鍵シフト部は、
１回の動作で（Ｚi+1 −Ｚi ）ビット（Ｂビット）の巡回シフトをする巡回シフトレジスタと、
Ｚi ビット巡回シフトされた鍵データに対して巡回シフトレジスタを１回動作させて（Ｚi+1 −Ｚi）ビット（Ｂビット）の巡回シフトを行わせることにより、巡回シフトレジスタにＺi+1ビット巡回シフトされた鍵データを生成させ、Ｚi+1ビット巡回シフトされた鍵データに対して巡回シフトレジスタをＩ回動作させてＩ×（Ｚi+1−Ｚi ）ビット（Ｉ×Ｂビット）の巡回シフトを行わせることにより、巡回シフトレジスタにＺi+2ビット巡回シフトされた鍵データを生成させる制御部と
を有することを特徴とする。
【００１７】
上記巡回シフトレジスタは、巡回シフトレジスタを動作させるために供給されている動作クロックの１クロックサイクルでＺi+1 −Ｚiビット（Ｂビット）の巡回シフトをする回路であることを特徴とする。
【００１８】
上記巡回シフト回路は、（Ｚi+1 −Ｚi ）ビット（Ｂビット）の値として、Ｂ1 ＝８×Ｊ1＋１（Ｊ1＝０以上の整数）ビットと、Ｂ2 ＝８×Ｊ2 −１（Ｊ2 ＝１以上の整数、Ｊ1とＪ2は無関係、即ち、Ｊ1 ≠Ｊ2 又はＪ1 ＝Ｊ2）ビットとのいずれかの値を選択するセレクタを備えたことを特徴とする。
【００１９】
この発明に係るデータ変換装置は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部と、
上記データ処理部が用いる鍵データを生成してデータ処理部に供給する鍵生成部と
を備えたデータ変換装置において、
上記データ処理部は、各段ごとに拡大鍵を入力して非線形変換をする多段に接続された複数段の非線形データ変換部を有し、
上記鍵生成部は、上記複数段の非線形データ変換部の各段毎に対して供給する拡大鍵を生成するにあたり、ある鍵データを予め定められたビット数（Ｂビット）だけ順に巡回シフトして、この巡回シフトした鍵データから各段の非線形データ変換部の拡大鍵を生成する鍵シフト部を有するとともに、
上記鍵シフト部は、Ｂビットだけ順に巡回シフトしたデータのうち、一部のデータを無
視して拡大鍵を生成せず、残りの他のデータから拡大鍵を生成することを特徴とする。
【００２０】
この発明に係るデータ変換装置は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部と、
上記データ処理部が用いる鍵データを生成してデータ処理部に供給する鍵生成部と
を備えたデータ変換装置において、
上記鍵生成部は、
ＧビットのＧビット鍵データを入力して変換し、Ｇビットの第１のＧビット変換鍵データを出力する第１のＧビット鍵変換部と、
上記第１のＧビット鍵変換部から出力された第１のＧビット変換鍵データを入力し、更に変換してＧビットの第２のＧビット変換鍵データを出力する第２のＧビット変換部と
を備え、
上記鍵生成部がＧビット鍵データＫを入力した場合は、Ｇビット鍵データＫを第１のＧビット鍵変換部に入力して変換し、第１のＧビット鍵変換部により出力された第１のＧビット変換鍵データＫ1を変換されたＧビット鍵データとして出力し、
上記鍵生成部が２Ｇビット鍵データＫを入力した場合は、２Ｇビット鍵データＫからＧビット鍵データを生成して生成したＧビット鍵データを第１のＧビット鍵変換部に入力して変換して第１のＧビット変換鍵データＫ1を出力し、第１のＧビット変換鍵データＫ1を第２のＧビット変換部に入力して変換して第２のＧビット変換鍵データＫ2 を出力し、第１のＧビット鍵変換部により出力された第１のＧビット変換鍵データＫ1と、第２のＧビット変換部により出力された第２のＧビット変換鍵データＫ2とを連結して、変換された２Ｇビット鍵データ（Ｋ1，Ｋ2 ）として出力することを特徴とする。
【００２１】
上記第１のＧビット鍵変換部は、
Ｇビット鍵データを非線形変換する２段の非線形データ変換部と、
２段目の非線形データ変換部から出力された変換途中のＧビット鍵データと、
第１のＧビット鍵変換部が入力したＧビット鍵データとの論理演算を行う論理演算部とを備えたことを特徴とする。
【００２２】
上記鍵生成部は、更に、Ｑビット（Ｇ＜Ｑ＜２Ｇ）の鍵データを入力した場合、Ｑビットの鍵データを２Ｇビットの鍵データにするビット長変換部を備えたことを特徴とする。
【００２３】
この発明に係るデータ変換装置は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部と、
上記データ処理部が用いる鍵データを生成してデータ処理部に供給する鍵生成部と
を備えたデータ変換装置において、
データ変換を行うデータと鍵データとを論理演算する鍵関数部と、
データ変換を行うデータを他のデータへ置換変換するＳ関数部と、
データ変換を行うデータ同士で論理演算するＰ関数部と
を有する非線形関数部（Ｆ）を備え、
非線形関数部（Ｆ）は、鍵関数部をＳ関数部とＰ関数部の間に配置したことを特徴とする。
【００２４】
この発明に係るデータ変換装置は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部と、
上記データ処理部が用いる鍵データを生成してデータ処理部に供給する鍵生成部と
を備えたデータ変換装置において、
データ変換を行うデータと鍵データとを論理演算する鍵関数部と、
データ変換を行うデータを他のデータへ置換変換するＳ関数部と、
データ変換を行うデータ同士で論理演算するＰ関数部と
を有する非線形関数部（Ｆ）を備え、
非線形関数部（Ｆ）は、鍵関数部をＳ関数部とＰ関数部との両者の前と両者の後とのいずれかに配置したことを特徴とする。
【００２５】
上記Ｓ関数部は、
変換するデータの一部分のデータを第１部分データとして入力して、入力したデータの値を他の値に変換して出力する変換テーブルＴを用いて第１部分データを変換し、変換したデータを出力する第１変換部（ｓ1）と、
変換するデータの少なくとも他の一部分のデータを第２部分データとして入力して、上記変換テーブルＴを用いた変換と第２部分用演算とを用いて第２部分データを変換し、変換したデータを出力する第２変換部（ｓ2）と
を備えたことを特徴とする。
【００２６】
この発明に係るデータ変換装置は、少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部を備えたデータ変換装置において、データ変換を行うデータ同士で論理演算するＰ関数部を有する非線形関数部（Ｆ）を備え、
上記Ｐ関数部は、ｚ1 ，ｚ2 ，・・・，ｚ8 の８個の４ｎ（ｎは１以上の整数）ビットデータを入力し、
上記ｚ1 ，ｚ2 ，ｚ3 ，ｚ4 の４個のデータのうち、少なくとも２個以上のデータ排他的論理和演算を行って４ｎビットの結果Ｕ1を得る回路と、
上記ｚ5 ，ｚ6 ，ｚ7 ，ｚ8 の４個のデータのうち、少なくとも２個以上のデータ排他的論理和演算を行って４ｎビットの結果Ｕ2を得る回路と、
Ｕ1 とＵ2 との排他的論理和演算を行って４ｎビットの結果Ｕ3 を得る回路と、
Ｕ1 に対して巡回シフトをする巡回回路と、
上記巡回回路の出力とＵ3 との排他的論理和演算を行って結果Ｕ4 を得る回路と
を備え、
上記Ｕ3 ，Ｕ4 をｚ1'，ｚ2'，・・・，ｚ8'として出力することを特徴とする。
【００２７】
この発明に係るデータ変換方法は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理を実行するデータ変換方法において、
上記データ処理は、データを非線形変換する非線形変換処理を備え、
非線形変換処理は、
変換するデータの一部分のデータを第１部分データとして入力して、入力したデータの値を他の値に変換して出力する変換テーブルＴを用いて第１部分データを変換し、変換したデータを出力する第１変換処理（ｓ1）と、
変換するデータの少なくとも他の一部分のデータを第２部分データとして入力して、上記変換テーブルＴを用いた変換と第２部分用演算とを用いて第２部分データを変換し、変換したデータを出力する第２変換処理（ｓ2）とを備えたことを特徴とする。
【００２８】
この発明に係るデータ変換方法は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理を実行するデータ変換方法において、
上記データ処理は、変換するデータを入力し、入力したデータをある体（ｆｉｅｌｄ）の元と見なし、その部分体を用いた逆元回路を用いて変換し、変換したデータを出力する部分体変換処理と、
上記部分体変換処理の前段処理と後段処理との少なくともいずれか一方に変換するＧＦ（２n ）上のデータを自然な対応でＧＦ（２）nの元とみなし、ＧＦ（２）上のベクトル空間ＧＦ（２）nのアフィン変換処理とのいずれかを備えたことを特徴とする。
【００２９】
この発明に係るデータ変換方法は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理と、
上記データ処理が用いる鍵データを生成してデータ処理に供給する鍵生成処理と
を実行するデータ変換方法において、
上記データ処理は、各段ごとに拡大鍵を入力して非線形変換をする多段に接続された複数段の非線形データ変換処理を有し、
上記鍵生成処理は、上記複数段の非線形データ変換処理の各段毎に対して供給する拡大鍵を生成するにあたり、鍵データと鍵データから生成された鍵データに依存するデータとの少なくともいずれかを入力して予め定められたビット数Ｚ1，Ｚ2，・・・，Ｚm （ここで、ｉ，ｊ，ｋは、１〜ｍのいずれか１つの値とし、Ｚk −Ｚj＝Ｉ×（Ｚi+1−Ｚi ）＝Ｉ×Ｂ（Ｉは整数、Ｂ＝Ｚi+1−Ｚi ））だけ、巡回シフトして、この巡回シフトした鍵データから各段の非線形データ変換処理へ供給する拡大鍵を生成する鍵シフト処理を有するとともに、
上記鍵シフト処理は、
１回の動作で（Ｚi+1 −Ｚi ）ビット（Ｂビット）の巡回シフトをする巡回シフト処理と、
Ｚi ビット巡回シフトされた鍵データに対して巡回シフト処理を１回動作させて（Ｚi+1 −Ｚi）ビット（Ｂビット）の巡回シフトを行わせることにより、巡回シフト処理によりＺi+1ビット巡回シフトされた鍵データを生成させ、Ｚi+1ビット巡回シフトされた鍵データに対して巡回シフト処理をＩ回動作させてＩ×（Ｚi+1−Ｚi ）ビット（Ｉ×Ｂビット）の巡回シフトを行わせることにより、巡回シフト処理によりＺi+2ビット巡回シフトされた鍵データを生成させる制御処理と
を有することを特徴とする。
【００３０】
この発明に係るデータ変換方法は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理と、
上記データ処理が用いる鍵データを生成してデータ処理に供給する鍵生成処理と
を実行するデータ変換方法において、
上記データ処理は、各段ごとに拡大鍵を入力して非線形変換をする多段に接続された複数段の非線形データ変換処理を有し、
上記鍵生成処理は、上記複数段の非線形データ変換処理の各段毎に対して供給する拡大鍵を生成するにあたり、ある鍵データを予め定められたビット数（Ｂビット）だけ順に巡回シフトして、この巡回シフトした鍵データから各段の非線形データ変換処理へ供給する拡大鍵を生成する鍵シフト処理を有するとともに、
上記鍵シフト処理は、Ｂビットだけ順に巡回シフトしたデータのうち、一部のデータを無視して拡大鍵を生成せず、残りの他のデータから拡大鍵を生成することを特徴とする。
【００３１】
この発明に係るデータ変換方法は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理と、
上記データ処理が用いる鍵データを生成してデータ処理に供給する鍵生成処理と
を実行するデータ変換方法において、
上記鍵生成処理は、
ＧビットのＧビット鍵データを入力して変換し、Ｇビットの第１のＧビット変換鍵データを出力する第１のＧビット鍵変換処理と、
上記第１のＧビット鍵変換処理から出力された第１のＧビット変換鍵データを入力し、更に変換してＧビットの第２のＧビット変換鍵データを出力する第２のＧビット変換処理と
を備え、
上記鍵生成処理がＧビット鍵データＫを入力した場合は、Ｇビット鍵データＫを第１のＧビット鍵変換処理に入力して変換し、第１のＧビット鍵変換処理により出力された第１
のＧビット変換鍵データＫ1を変換されたＧビット鍵データとして出力し、
上記鍵生成処理が２Ｇビット鍵データＫを入力した場合は、２Ｇビット鍵データＫからＧビット鍵データを生成して生成したＧビット鍵データを第１のＧビット鍵変換処理に入力して変換して第１のＧビット変換鍵データＫ1を出力し、第１のＧビット変換鍵データＫ1を第２のＧビット変換処理に入力して変換して第２のＧビット変換鍵データＫ2 を出力し、第１のＧビット鍵変換処理により出力された第１のＧビット変換鍵データＫ1と、第２のＧビット変換処理により出力された第２のＧビット変換鍵データＫ2とを連結して、変換された２Ｇビット鍵データ（Ｋ1，Ｋ2 ）として出力することを特徴とする。
【００３２】
この発明に係るデータ変換方法は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理と、
上記データ処理が用いる鍵データを生成してデータ処理に供給する鍵生成処理と
を実行するデータ変換方法において、
データ変換を行うデータと鍵データとを論理演算する鍵関数処理と、
データ変換を行うデータを他のデータへ置換変換するＳ関数処理と、
データ変換を行うデータ同士で論理演算するＰ関数処理と
を有する非線形関数処理（Ｆ）を備え、
非線形関数処理（Ｆ）は、鍵関数をＳ関数処理とＰ関数処理の間に動作させることを特徴とする。
【００３３】
この発明に係るデータ変換方法は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理と、
上記データ処理が用いる鍵データを生成してデータ処理に供給する鍵生成処理と
を実行するデータ変換方法において、
データ変換を行うデータと鍵データとを論理演算する鍵関数処理と、
データ変換を行うデータを他のデータへ置換変換するＳ関数処理と、
データ変換を行うデータ同士で論理演算するＰ関数処理と
を有する非線形関数処理（Ｆ）を備え、
非線形関数処理（Ｆ）は、鍵関数処理をＳ関数処理とＰ関数処理との両者の前と両者の後とのいずれかで動作させることを特徴とする。
【００３４】
この発明に係るデータ変換装置は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部と、
上記データ処理部が用いる鍵データを生成してデータ処理部に供給する鍵生成部と
を備えたデータ変換装置において、
上記データ処理部は、データ変換を行うデータを非線形変換する非線形関数部（Ｆ）を備え、
上記鍵生成部は、非線形関数部（Ｆ）に供給する鍵データを加工して、加工した鍵データをデータ処理部の非線形関数部（Ｆ）以外の部分に供給してデータと演算させることを特徴とする。
【００３５】
この発明に係るデータ変換方法は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理と、
上記データ処理が用いる鍵データを生成してデータ処理に供給する鍵生成処理と
を実行するデータ変換方法において、
上記データ処理は、データ変換を行うデータを非線形変換する非線形関数処理（Ｆ）を備え、
上記鍵生成処理は、非線形関数処理（Ｆ）に供給する鍵データを加工して、加工した鍵データをデータ処理の非線形関数処理（Ｆ）以外の処理に供給してデータと演算させることを特徴とする。
【００３６】
また、この発明は、上記データ変換方法をコンピュータに実行させるプログラムを記録したコンピュータ読み取り可能な記録媒体であることを特徴とする。
【００３７】
また、この発明は、上記データ変換方法をコンピュータに実行させるプログラムであることを特徴とする。
【発明の効果】
【００３８】
この発明の実施の形態によれば、暗号化と復号とが同一のアルゴリズムで行えるように、データ正変換部（ＦＬ）２５１とデータ逆変換部（ＦＬ-1）２７１を備えているので、暗号化部２００と復号部５００を兼用して用いることができる。
【００３９】
また、この発明の実施の形態によれば、変換テーブルＴを兼用してＳボックス第１変換部１３とＳボックス第２変換部１４を構成しているので、構成が簡単になるという効果がある。
【００４０】
また、この発明の実施の形態によれば、部分体変換部１８を用いているので、構成が簡単になるとともに、線形変換部８５と線形変換部８７を設けているので、部分体変換部１８を用いた場合でも安全性が向上する。
【００４１】
また、この発明の実施の形態によれば、シフト制御部３４５がシフトレジスタを整数回動作させることにより１５ビットや１７ビットのみの一定値でないシフト数（例えば、３０ビットや３４ビット）を用いた鍵データのシフトを行うことができ、安全性を向上させることができる。
【００４２】
また、この発明の実施の形態によれば、シフトレジスタにおいてシフトされたデータから拡大鍵として使用しない場合を設けているので、更に、安全性を向上させることができる。
【００４３】
また、この発明の実施の形態によれば、ビット数の異なる鍵データが入力された場合でも、ビット長変換部３１０により一定長の鍵データに変換するので、柔軟性のある鍵生成オペレーションが行える。
【００４４】
また、この発明の実施の形態によれば、第１のＧビット鍵変換部３２０の中で２段の非線形変換を用いていることにより、Ｋ1 について等価鍵が存在しないことが証明でき、安全性を向上させることができる。
【００４５】
また、この発明の実施の形態によれば、鍵関数部２５の配置位置を変更したので、高速処理が可能になる。
【図面の簡単な説明】
【００４６】
【図１】暗号化用データ変換装置１００と復号用データ変換装置４００を示す図。
【図２】符号及び記号の説明図。
【図３】暗号化部２００又は復号部５００の構成図。
【図４】暗号化部２００又は復号部５００の他の構成図。
【図５】データ正変換部（ＦＬ）２５１の構成図。
【図６】データ逆変換部（ＦＬ-1）２７１の構成図。
【図７】従来の暗号化部と復号部の一部を示す図。
【図８】暗号化部２００と復号部５００の一部を示す図。
【図９】点対称におかれたデータ正変換部（ＦＬ）２５１とデータ逆変換部（ＦＬ-1）２７１を示す図。
【図１０】点対称となるデータ正変換部（ＦＬ）とデータ逆変換部（ＦＬ-1）の関係を示す図。
【図１１】非線形関数部Ｆを示す図。
【図１２】Ｓボックス第１変換部１３とＳボックス第２変換部１４の構成図。
【図１３】Ｓボックス変換部２１の構成図。
【図１４】線形変換部８５の構成図。
【図１５】線形変換部８７の構成図。
【図１６】鍵生成部３００又は鍵生成部６００の構成図。
【図１７】ビット長変換部３１０の動作説明図。
【図１８】シフトレジスタＡ３４１の構成図。
【図１９】シフト制御部３４５の制御テーブルの構成図。
【図２０】シフトレジスタＡ３４１とシフトレジスタＢ３４２の動作説明図。
【図２１】シフトレジスタＡ３４１とシフトレジスタＢ３４２と拡大鍵の対応図。
【図２２】シフトレジスタＡ３４１〜シフトレジスタＤ３４４の動作説明図。
【図２３】シフトレジスタＡ３４１〜シフトレジスタＤ３４４と拡大鍵の対応図。
【図２４】暗号化用データ変換装置１００と復号用データ変換装置４００が実装されたコンピュータを示す図。
【図２５】従来のＤＥＳの暗号関数の構成図。
【図２６】従来の１２８ビットブロック暗号Ｅ２の非線形関数を示す図。
【図２７】Ｓボックス変換部の他の例を示す図。
【図２８】Ｓボックス第１〜第４変換部を用いた非線形関数部Ｆを示す図。
【図２９】鍵関数部２５の配置を変更した図。
【図３０】鍵関数部２５の配置を変更した他の図。
【図３１】Ｐ関数部３０の他の構成図。
【図３２】Ｐ関数部３０の他の構成図。
【図３３】図３１のＳ１〜Ｓ４の構成と動作を示す図。
【図３４】等価鍵の非存在証明の説明図。
【図３５】等価鍵の非存在証明の説明図。
【図３６】暗号化部２００又は復号部５００の他の構成図。
【図３７】暗号化部２００又は復号部５００の他の構成図。
【図３８】暗号化部２００又は復号部５００の他の構成図。
【図３９】暗号化部２００又は復号部５００の他の構成図。
【図４０】暗号化部２００又は復号部５００の他の構成図。
【図４１】暗号化部２００又は復号部５００の他の構成図。
【図４２】図３９と図４０とを併せた場合を示す図。
【図４３】図３に示した暗号化部２００又は復号部５００に対して図２８に示した非線形関数部Ｆを用いた場合の構成図。
【図４４】図４３に示した非線形関数部Ｆの中から鍵関数部２５を削除した非線形関数部Ｆ'を用いる場合を示す図。
【図４５】図４４の構成に対して更にホワイトニング拡大鍵の演算を拡大鍵とともに行う場合を示す図。
【図４６】非線形関数部Ｆが図２９に示したような構成をとる場合に、非線形関数部Ｆから鍵関数部２５を削除し、代わりに、拡大鍵ｋをＸＯＲ回路２９８に供給する場合を示す図。
【図４７】非線形関数部Ｆが図３０に示したような構成をとる場合、非線形関数部Ｆから鍵関数部２５を削除し、代わりに、線形変換された拡大鍵ｋ'をＸＯＲ回路２９８に供給する場合を示す図。
【発明を実施するための形態】
【００４７】
実施の形態１．
図１は、この実施の形態の暗号化用データ変換装置１００と復号用データ変換装置４００を示す図である。
【００４８】
暗号化用データ変換装置１００は、例えば、１２８ビットの平文を入力し、１２８ビットの暗号文を出力する暗号装置である。復号用データ変換装置４００は、１２８ビットの暗号文を入力し、１２８ビットの平文を出力する復号装置である。暗号化用データ変換装置１００は、暗号化部２００と鍵生成部３００から構成されている。暗号化部２００は、平文の暗号化を行う暗号化用データ処理部である。鍵生成部３００は、１２８ビット又は
１９２ビット又は２５６ビットの鍵データを入力し、定数Ｖiを用いて複数（ｎ個）の６４ビット又は１２８ビットの拡大鍵を生成して暗号化部２００に供給する。復号用データ変換装置４００は、復号部５００と鍵生成部６００を備えている。復号部５００は、暗号文を入力し、暗号文の復号を行う復号用データ処理部である。鍵生成部６００は、前述した鍵生成部３００と同じもの又は同様のものである。また、暗号化部２００と復号部５００は、同一のものを用いることができ、図においては、暗号化部２００と復号部５００に分けて図示しているが、１つの回路又は１つのプログラムで兼用することができる。同様に、鍵生成部３００と鍵生成部６００も１つの回路又は１つのプログラムで兼用することができる。即ち、暗号化用データ変換装置１００と復号用データ変換装置４００は、同一の回路又は同一のプログラムで兼用することができる。
【００４９】
図２は、以下の図及び説明において用いる記号の意味を示している。
【００５０】
以下、図３以降の各図において、左側のデータを左データＬと呼び、図において、右側のデータを右データＲと呼ぶものとする。また、非線形データ変換部２１０，２２０，２３０，２４０へ入力するデータを入力データと呼び、非線形データ変換部２１０，２２０，２３０，２４０の内部のデータを中間データと呼び、非線形データ変換部２１０，２２０，２３０，２４０から出力するデータを出力データと呼ぶものとする。
【００５１】
図３は、暗号化部２００又は復号部５００の一例を示す図である。
【００５２】
図３は、６段の非線形データ変換部２１０と６段の非線形データ変換部２２０と６段の非線形データ変換部２３０が縦続接続されている場合を示している。６段の非線形データ変換部２１０と６段の非線形データ変換部２２０の間には、データ正変換部（ＦＬ）２５１とデータ逆変換部（ＦＬ-1）２７１が設けられている。また、６段の非線形データ変換部２２０と６段の非線形データ変換部２３０の間には、データ正変換部（ＦＬ）２５３とデータ逆変換部（ＦＬ-1）２７３が設けられている。６段の非線形データ変換部２１０の中には、６段の非線形データ変換部が設けられている。例えば、１つの非線形データ変換部２８０は、非線形関数部ＦとＸＯＲ（排他的論理和）回路２９０から構成されている。このようにして、図３においては、全部で１８段の非線形データ変換部が設けられている。
【００５３】
非線形データ変換部２１０は、任意の２つの右入力データＲ0 と左入力データＬ0 に対し、上記左入力データＬ0を第１の拡大鍵ｋ1 を用いて第１の非線形変換し、該第１の非線形変換された出力データと上記右入力データＲ0 との排他的論理和を第１の左中間データＬ1として出力し、上記左入力データＬ0 を第１の右中間データＲ1 として出力する第１の非線形データ変換部２８０と、上記第１の左中間データＬ1を第２の拡大鍵ｋ2 を用いて第２の非線形変換し、該第２の非線形変換された出力データと上記第１の右中間データＲ1との排他的論理和を第２の左中間データＬ2 として出力し、上記第１の左中間データＬ1 を第２の右中間データＲ2として出力する第２の非線形データ変換部２８１とを備え、第１の非線形データ変換部２８０から第６の非線形データ変換部２８５を縦続接続して、最終の右中間データＲ6と左中間データＬ6 を変換後の出力データとするものである。
【００５４】
図４は、図３の暗号化部２００に対して更にデータ正変換部（ＦＬ）２５５とデータ逆変換部（ＦＬ-1）２７５と６段の非線形データ変換部２４０を追加し、全部で２４段の非線形データ変換部により変換を行う場合を示している。
【００５５】
図５は、データ正変換部（ＦＬ）２５１を示す図である。
【００５６】
図５においては、データ正変換部（ＦＬ）２５１の入力データを左入力データ５１と右入力データ５２に分け、論理演算を行った後、左出力データ６０と右出力データ６１により出力データを作成している場合を示している。左入力データ５１は、ＡＮＤ回路５４において、拡大鍵５３との論理積がとられ、その後、１ビット巡回左シフト部５５において、左方向への１ビットの巡回シフト（サーキュラシフトともいう）が行われる。シフト後は、右入力データ５２との排他的論理和がＸＯＲ回路５６により演算される。ＸＯＲ回路５６の出力は、右出力データ６１になるとともに、ＯＲ回路５８において、拡大鍵５７との論理和がとられ、その結果は、更に、ＸＯＲ回路５９において左入力データ５１と排他的論理和の演算が行われ、左出力データ６０となる。
【００５７】
図６は、データ逆変換部（ＦＬ-1）２７１を示す図である。
【００５８】
図６においては、入力データを左入力データ７１と右入力データ７２に分け、論理演算を行った後、左出力データ８０と右出力データ８１により出力データを作成している場合を示している。
【００５９】
右入力データ７２は、ＯＲ回路７４において、拡大鍵７３との論理和がとられ、更に、ＸＯＲ回路７５において、左入力データ７１との排他的論理和がとられる。その結果、ＸＯＲ回路７５からの出力は左出力データ８０になるとともに、ＡＮＤ回路７７において、拡大鍵７６との論理積がとられ、１ビット巡回左シフト部７８において、左方向への１ビットの巡回左シフトが行われ、その結果は、更に、ＸＯＲ回路７９において右入力データ７２と排他的論理和がとられ、右出力データ８１となる。
【００６０】
図５に示したデータ正変換部（ＦＬ）２５１と図６に示したデータ逆変換部（ＦＬ-1）２７１は、正逆反対のオペレーションをするものである。従って、同一の拡大鍵のもとで図５の出力データＹを図６の入力データＹにすることにより、図６の出力データＸとして図５の入力データＸを得ることができる。
【００６１】
このように、一方の出力データを他方の入力データとすることにより、一方の入力データを他方の出力データとして得ることができる関係を正変換と逆変換の関係にあるという。データ正変換部（ＦＬ）２５１とデータ逆変換部（ＦＬ-1）２７１は、このような正変換と逆変換を行う回路である。
【００６２】
なお、図５の１ビット巡回左シフト部５５と図６の１ビット巡回左シフト部７８はともに左シフトをするが、両方とも右シフトを行うようにしてもよい。また、データ正変換部（ＦＬ）２５１とデータ逆変換部（ＦＬ-1）２７１は、正変換と逆変換を行うのであれば、他の構成でもよい。例えば、巡回のシフト数を変えてもよい。また、ｎｏｔを含んだＡＮＤ回路、ｎｏｔを含んだＯＲ回路、ｎｏｔを含んだＸＯＲ回路を、更に付加してもよい。即ち、ｎｏｔを含んだＡＮＤ回路、ｎｏｔを含んだＯＲ回路、ｎｏｔを含んだＸＯＲ回路を、それぞれａｎｄｎ，ｏｒｎ，ｘｏｒｎと表した場合、定義は以下の通りである。
【００６３】
ｘ  ａｎｄｎ  ｙ：（ｎｏｔ  ｘ）ａｎｄ  ｙ
ｘ  ｏｒｎ  ｙ：（ｎｏｔ  ｘ）ｏｒ  ｙ
ｘ  ｘｏｒｎ  ｙ：（ｎｏｔ  ｘ）ｘｏｒ  ｙ
最近のいくつかのＣＰＵでは、ｎｏｔも含んだａｎｄ，ｏｒ，ｘｏｒ命令を備えているものがある。これらの命令は、ａｎｄ，ｏｒ，ｘｏｒ命令と同様のコストで実行可能である。
【００６４】
図７は、従来の暗号化部２０１と従来の復号部５０１を示している。
【００６５】
従来の暗号化部２０１においては、２つのデータ正変換部ＦＬが設けられている。このため、この逆のオペレーションをするためには、復号部に２つのデータ逆変換部ＦＬ-1をおかなければならない。従って、暗号化部と復号部の構成が一般的には異なってしまい、暗号化部と復号部を同一回路にすることができない。
【００６６】
一方、図８に示すように、この実施の形態では、暗号化部２００において、データ正変換部（ＦＬ）２５１とデータ逆変換部（ＦＬ-1）２７１を隣り合わせに配置しているため、復号部５００においても全く同じ構成で復号を行うことができる。例えば、右データＲをデータ正変換部（ＦＬ）２５１で変換して左データＬ'を得、左データＬをデータ逆変換部（ＦＬ-1）２７１で変換して右データＲ'を得た場合、左データＬ'をデータ逆変換部（ＦＬ-1）２７１に入力させてやることにより右データＲを得ることができ、右データＲ'をデータ正変換部（ＦＬ）２５１に入力させてやることにより左データＬを得ることができる。
【００６７】
このようにして、暗号化部２００と復号部５００は、全く同じ構成で実現することができ、暗号化部２００と復号部５００を兼用して用いることができる。
【００６８】
図９は、データ正変換部（ＦＬ）２５１とデータ逆変換部（ＦＬ-1）２７１を非線形データ変換部２８０を中心にして点対称となる位置においた場合を示している。
【００６９】
このように、非線形データ変換部２８０を中心にしてデータ正変換部（ＦＬ）２５１とデータ逆変換部（ＦＬ-1）２７１を点対称の位置においた場合に、同一構成により暗号化と復号を行うことができる。
【００７０】
図１０は、点対称の位置におかれたデータ正変換部（ＦＬ）とデータ逆変換部（ＦＬ-1）との対応を示している。
【００７１】
図１０に示すように、図３においてはデータ正変換部（ＦＬ）２５１とデータ逆変換部（ＦＬ-1）２７３が６段の非線形データ変換部２２０を中心とした点対称の位置に配置されていることを示している。
【００７２】
なお、図３，図４，図８，図９において、データ正変換部（ＦＬ）とデータ逆変換部（ＦＬ-1）の位置は逆でもよい。また、図３，図４，図８，図９において、右データＲと左データＬは逆でもよい。
【００７３】
図３６は、６段の非線形データ変換部２１０と６段の非線形データ変換部２２０と６段の非線形データ変換部２３０とを用いて暗号化部２００を構成した場合を示している。
【００７４】
６段の非線形データ変換部２１０と６段の非線形データ変換部２２０と６段の非線形データ変換部２３０とは、暗号化と復号との両方に用いることができる回路である。
【００７５】
ここで、６段の非線形データ変換部２１０とデータ正変換部（ＦＬ）２５０とデータ逆変換部（ＦＬ-1）２７１とにより正逆データ変換部２１１を構成している。ここで、正逆データ変換部とは、暗号化と復号との両方に用いることができる回路のことをいうものとする。即ち、正逆データ変換部は、一方の出力データを他方の入力データとすることにより、一方の入力データを他方の出力データとして得ることができる正変換と逆変換とを行う１つの回路である。
【００７６】
また、６段の非線形データ変換部２２０とデータ正変換部（ＦＬ）２５１とデータ逆変換部（ＦＬ-1）２７３とにより正逆データ変換部２２１を構成している。
【００７７】
また、６段の非線形データ変換部２３０とデータ正変換部（ＦＬ）２５３とデータ逆変換部（ＦＬ-1）２７５とにより正逆データ変換部２３１を構成している。
【００７８】
これら正逆データ変換部２１１と正逆データ変換部２２１と正逆データ変換部２３１とを縦列に接続して暗号化部２００が構成されている。そして、この暗号化部２００は、復号部５００としても用いることができる。
【００７９】
また、６段の非線形データ変換部２１０と６段の非線形データ変換部２２０とデータ正変換部（ＦＬ）２５１とデータ逆変換部（ＦＬ-1）２７１とを非線形データ変換部１２１０と見なせば、非線形データ変換部１２１０は、暗号化と復号との両方に用いることができる回路である。ここで、非線形データ変換部１２１０とデータ正変換部（ＦＬ）２５０とデータ逆変換部（ＦＬ-1）２７３とにより正逆データ変換部１２１１を構成している。
【００８０】
また、６段の非線形データ変換部２２０と６段の非線形データ変換部２３０とデータ正変換部（ＦＬ）２５３とデータ逆変換部（ＦＬ-1）２７３とを非線形データ変換部１２２０と見なせば、非線形データ変換部１２２０とデータ正変換部（ＦＬ）２５１とデータ逆変換部（ＦＬ-1）２７５とにより正逆データ変換部１２２１を構成している。
【００８１】
正逆データ変換部１２１１と正逆データ変換部１２２１とは、復号部５００にも用いることができる。
【００８２】
また、６段の非線形データ変換部２１０から６段の非線形データ変換部２３０までを非線形データ変換部２２１０と見なせば、非線形データ変換部２２１０は、暗号化と復号との両方に用いることができる回路である。
【００８３】
ここで、非線形データ変換部２２１０とデータ正変換部（ＦＬ）２５０とデータ逆変換部（ＦＬ-1）２７５とにより正逆データ変換部２２１１を構成している。
【００８４】
正逆データ変換部２２１１は、復号部５００にも用いることができる。
【００８５】
以上のように、暗号化部２００又は復号部５００は、正逆データ変換部を複数縦続接続することにより構成することができる。
【００８６】
また、暗号化部２００又は復号部５００は、正逆データ変換部の中に正逆データ変換部を含ませることにより、正逆データ変換部を階層化して構成することができる。
【００８７】
図３７は、６段の非線形データ変換部２１０を備えた暗号化部２００と復号部５００とが同一構成となる例を示している。
【００８８】
図３７の６段の非線形データ変換部２１０は、図３，図４に示すように、偶数段の非線形データ変換部２８０を有している。データＡは、第１入力データ正変換部２５６により変換されデータＡ'となり、第１の入力部２６１に入力され、第１の入力部２６１から入力されたデータＡ'は、第１の出力部２６３からデータＡ1'として出力される。また、第２の入力部２６２から入力されたデータＢは、第２の出力部２６４からデータＢ1として出力される。第２の出力部２６４から出力されたデータＢ1 は、第２出力データ逆変換部２７９により変換されデータＢ1'として出力される。
【００８９】
暗号化部２００の第１の出力部２６３から出力されたデータＡ1'は、復号部５００の第２の入力部２６２にデータＡ1'として入力される。暗号化部２００の第２出力データ逆変
換部２７９から出力されたデータＢ1'は、復号部５００の第１入力データ正変換部２５６にデータＢ1'として入力され、データＢ1として出力される。
【００９０】
非線形データ変換部２１０は、データＢ1 を入力してデータＢを出力する。また、非線形データ変換部２１０は、データＡ1'を入力してデータＡ'を出力する。第２出力データ逆変換部２７９は、データＡ'を入力してデータＡを出力する。
【００９１】
図３８では、奇数段の非線形データ変換部２１９が奇数段の非線形データ変換部２８０を有している。従って、第１の入力部２６１から入力されたデータＡ'は、第２の出力部２６４からデータＡ1'として出力され、第２出力データ逆変換部２７９により変換され、データＡ1"として出力される。また、第２の入力部２６２から入力したデータＢは、第１の出力部２６３からデータＢ1として出力される。
【００９２】
暗号化部２００の第１の出力部２６３から出力されたデータＢ1 は、復号部５００の第２の入力部２６２にデータＢ1 として入力される。暗号化部２００の第２出力データ逆変換部２７９から出力されたデータＡ1"は、復号部５００のデータＡ1"として入力され、第１入力データ正変換部２５６に入力される。
【００９３】
図３７，図３８の場合は、いずれも、暗号化部２００と復号部５００とが同一構成で、暗号化、復号ができる。
【００９４】
図３９は、第２の入力部２６２に第２入力データ正変換部２５７を設け、第１の出力部２６３に第１出力データ逆変換部２７８を設けた場合を示している。
【００９５】
図４０は、第１の入力部２６１に第１入力データ逆変換部２７６を設け、第２の出力部２６４に第２出力データ正変換部２５９を設けた場合を示している。
【００９６】
図４１は、左側の入出力部２６１，２６３にデータ正変換部２５６，２５８を設け、右側の入出力部２６２，２６４にデータ逆変換部２７７，２７９を設けた場合を示している。
【００９７】
図４２は、図３９と図４０とを併せた場合を示している。
【００９８】
図示していないが、図３７と図３９を併せてもよい。また、図３８と図３９とを併せてもよい。また、図示していないが、図３７，図３９から図４２の６段（偶数段）の非線形データ変換部２１０を奇数段の非線形データ変換部２１９としてもよい。図３９から図４２の場合も、暗号化部２００と復号部５００との同一構成で実現できる。
【００９９】
この実施の形態に係るデータ変換装置は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部を備えたデータ変換装置において、
上記データ処理部は、データ変換を行うデータを第１のデータ（Ｌ）と第２のデータ（Ｒ）に分割してデータ変換するとともに、
上記データ処理部は、
第１のデータ（Ｌ）を変換するデータ正変換部（ＦＬ）と、
第２のデータ（Ｒ）を上記データ正変換部（ＦＬ）の変換とは逆の変換をするデータ逆変換部（ＦＬ-1）と
を備えたことを特徴とする。
【０１００】
上記データ処理部は、第１の入力と第２の入力と、第１の出力と第２の出力とを有し、
上記データ正変換部（ＦＬ）は、変換したデータをデータ処理部の第１の入力へ出力し、
上記データ逆変換部（ＦＬ-1）は、データ処理部の第２の出力から出力されたデータを変換して出力することを特徴とする。
【０１０１】
上記データ処理部は、第１の入力と第２の入力と、第１の出力と第２の出力とを有し、
上記データ正変換部（ＦＬ）は、変換したデータをデータ処理部の第２の入力へ出力し、
上記データ逆変換部（ＦＬ-1）は、データ処理部の第１の出力から出力されたデータを変換して出力することを特徴とする。
【０１０２】
この実施の形態に係るデータ変換方法は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理を実行するデータ変換方法において、
上記データ処理は、データ変換を行うデータを第１のデータ（Ｌ）と第２のデータ（Ｒ）に分割するとともに、
上記データ処理は、第１のデータ（Ｌ）を変換するデータ正変換処理（ＦＬ）と、
第２のデータ（Ｒ）を上記データ正変換処理（ＦＬ）の変換とは逆の変換をするデータ逆変換処理（ＦＬ-1）と
を備えたことを特徴とする。
【０１０３】
この実施の形態に係るデータ変換装置は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部を備えたデータ変換装置において、
上記データ処理部は、
第１の入力部と、
第２の入力部と、
第１の出力部と、
第２の出力部と
データの暗号化とデータの復号とを同一のアルゴリズムで行う非線形変換部と、
第１の入力部に入力されるデータを変換する第１入力データ正変換部と、
第２の出力部から出力されるデータを入力して上記第１入力データ正変換部の変換とは逆の変換をする第２出力データ逆変換部と
を備えたことを特徴とする。
【０１０４】
上記非線形変換部は、
第１の入力データを第１の入力部から入力し、
第２の入力データを第２の入力部から入力し、
第１の入力データと第２の入力データとを暗号化用鍵データを用いて非線形変換し、第１の変換データと第２の変換データとを生成し、
第１の変換データを第１の出力部から出力し、
第２の変換データを第２の出力部から出力し、
上記第１の変換データを第２の入力部から入力し、
上記第２の変換データを第１の入力部から入力し、第１の変換データと第２の変換データとを復号用鍵データを用いて非線形変換し、第１の出力データと第２の出力データとを生成し、
第１の出力データを第２の出力部から出力し、
第２の出力データを第１の出力部から出力した場合に、
第１の入力データと第２の出力データとが同一となり、第２の入力データと第１の出力データとが同一となるアルゴリズムを備えたことを特徴とする。
【０１０５】
上記データ処理部は、更に、
第２の入力部に入力されるデータを変換する第２入力データ正変換部と、
第１の出力部から出力されるデータを入力して、上記第２入力データ正変換部の変換とは逆の変換をする第１出力データ逆変換部と
を備えたことを特徴とする。
【０１０６】
また、上記データ変換方法をコンピュータに実行させるプログラム又は上記プログラムを記録したコンピュータ読み取り可能な記録媒体であることを特徴とする。
【０１０７】
実施の形態２．
図１１は、非線形データ変換部２８０の非線形関数部Ｆの構成図である。
【０１０８】
非線形関数部Ｆは、Ｆ関数入力データ１０を入力し、非線形変換を行ってＦ関数出力データ４０を出力する。６４ビットのＦ関数入力データ１０は、８つのデータに分けられ、８ビットのデータとして処理される。各８ビットのデータは、鍵関数部２５の８個のＸＯＲ回路１２に入力され、拡大鍵１１との排他的論理和がとられ、Ｓ関数部２０において、置換を用いた非線形変換を受ける。その後、Ｐ関数部３０において、８ビットのデータ同士で図に示すような１６個のＸＯＲ回路８１５により演算が行われ、６４ビットのＦ関数出力データ４０が出力される。Ｓ関数部２０には、４個のＳボックス第１変換部１３と４個のＳボックス第２変換部１４が設けられている。
【０１０９】
図１２は、Ｓボックス第１変換部１３とＳボックス第２変換部１４の実現例を示す図である。
【０１１０】
Ｓボックス第１変換部１３の内部には、変換テーブルＴが設けられている。変換テーブルＴは、０〜２５５の値に対して任意に（ランダムに）対応させた０〜２５５の値を予め記憶しておくものであり、０〜２５５の値を入力し、各値に対応した値（０〜２５５の値）を出力するテーブルである。例えば、１が入力された場合には、変換テーブルＴから７が出力される。変換テーブルＴは、全単射であるかどうか、最大差分確率が十分に小さいかなどの安全性が考慮された非線形変換を行うものである。
【０１１１】
Ｓボックス第２変換部１４は、Ｓボックス第１変換部１３を含むとともに、１ビット巡回左シフト部２２（図の「＜＜＜１」の「＜＜＜」は巡回左シフトを示し、「１」は１ビットを示す）を有している。１ビット巡回左シフト部２２は、Ｓボックス第１変換部１３の出力に対して１ビットの巡回左シフトを行う。例えば、１が入力された場合には、Ｓボックス第１変換部１３から７が出力され、１ビット巡回左シフト部２２から１４が出力される。
【０１１２】
Ｓボックス第１変換部１３とＳボックス第２変換部１４を図１２のように構成すると、変換テーブルＴを２種類持つ必要がないにも関わらず、２種類の変換テーブルＴを設けた場合と同じような効果を得ることができる。変換テーブルＴを１つしか持たないことにより、変換テーブルＴを記憶するメモリ容量を少なくし、回路全体を小さくすることができる。
【０１１３】
また、図２７に示すように、１ビット巡回左シフト部２２の代わりに、或いは、１ビット巡回左シフト部２２の他に１ビット巡回右シフト部（図２７のＳボックス第３変換部１５の「＞＞＞１」）を設けることにより、更に異なる変換テーブルＴを設けた場合と同じ効果を得ることができる。また、入力されたデータｙに対して１ビット巡回左シフト部（図２７のＳボックス第４変換部１６の「＜＜＜１」）を設けて、入力されたデータｙを先
にシフトしてから変換テーブルＴにより変換してもよい。図２７においては、ｓ（ｙ），ｓ（ｙ）＜＜＜１，ｓ（ｙ）＞＞＞１，ｓ（ｙ＜＜＜１）の場合を示したが、ｓ（ｙ＞＞＞１）でもよいし、ｓ（ｙ＜＜＜１）＜＜＜１，ｓ（ｙ＜＜＜１）＞＞＞１，ｓ（ｙ＞＞＞１）＜＜＜１，ｓ（ｙ＞＞＞１）＞＞＞１の場合でもよい。シフト量を１ビットにすることにより、例えば、１ビットシフト命令しか持たないＣＰＵ等においては、３ビットや５ビットシフトするよりも、高速処理を行うことが可能な場合がある。また、このシフト処理を１ビットシフトしかできないハードウェアを用いて行う場合にも、同様に、高速処理を適用することができる場合がある。更には、１ビットシフトではなく、２ビット、３ビット等の任意ビットのシフトでもよく、任意ビットのシフトを行うことにより、更に、異なる種類のテーブルを付加したのと同じ効果を得ることができる場合がある。
【０１１４】
図２８は、図２７に示した４つのＳボックス第１〜第４変換部１３，１４，１５，１６を用いたＳ関数部２０を示す図である。
【０１１５】
また、Ｐ関数部３０の他の構成を図３１に示す。
【０１１６】
８ビットの入力データｙ1 ，ｙ2 ，ｙ3 ，ｙ4 から、それぞれＳ１，Ｓ２，Ｓ３，Ｓ４を参照して３２ビットのデータＺ1，Ｚ2 ，Ｚ3 ，Ｚ4 を求め、これらの排他的論理和を回路９１３で求め、また、８ビットの入力データｙ5，ｙ6 ，ｙ7 ，ｙ8 から、それぞれＳ２，Ｓ３，Ｓ４，Ｓ１を参照して３２ビットのデータＺ5，Ｚ6 ，Ｚ7 ，Ｚ8 を求め、これらの排他的論理和を回路９１６により求め、これらの排他的論理和演算結果Ｕ2と前記排他的論理和演算結果Ｕ1 との排他的論理和が回路９１７でとられてｚ1'，ｚ2'，ｚ3'，ｚ4'として出力され、また、回路９１３よりの排他的論理和演算結果Ｕ1に対し、左に１バイト巡回シフト（この図３１では、「＜＜＜１」は１ビットではなく、１バイトの巡回シフトを示す）が回路９１８で行われ、回路９１７の出力と回路９１９で排他的論理和演算が行われてｚ5'，ｚ6'，ｚ7'，ｚ8'が得られる。
【０１１７】
ここで、図３３の（ａ）〜（ｄ）に示すように、Ｓ１はＳボックス第１変換部１３を、Ｓ２はＳボックス第２変換部１４を、Ｓ３はＳボックス第３変換部１５を、Ｓ４はＳボックス第４変換部１６を用いて構成されており、それぞれの変換部からの８ビット出力データを４つコピーして３２ビットデータとし、更に、そのうち３つのデータ（２４ビット分）だけを出力するように、マスクをかけて３２ビットデータを出力する。
【０１１８】
なお、上記回路９１８の１バイトの巡回シフトは、Ｓボックスが処理するビット長（８ビット＝１バイト）単位でシフトするものである。
【０１１９】
図３２は、図３１と等価な構成であるが、実装方法が異なるＰ関数部３０を示している。
【０１２０】
８ビットの入力データｙ1 ，ｙ2 ，ｙ3 ，ｙ4 から、それぞれＳ５，Ｓ６，Ｓ７，Ｓ８をそれぞれ参照して３２ビットのデータＺ1，Ｚ2 ，Ｚ3 ，Ｚ4 が出力され、これらは回路９３３により排他的論理和演算が行われ、その演算結果Ａが回路９３３から出力される。また、８ビットの入力データｙ5，ｙ6 ，ｙ7 ，ｙ8 から、それぞれＳ９，ＳＡ，ＳＢ，ＳＣを参照して３２ビットのデータＺ5，Ｚ6 ，Ｚ7 ，Ｚ8 が出力され、これらが回路９３６により排他的論理和演算が行われ、その演算結果Ｂが回路９３６から出力される。演算結果Ｂは、回路９３７により右に１バイト巡回シフト（この図３２では、図３１と同じく、１ビット単位ではなく、Ｓボックスが処理するビット長単位（１バイト単位）のシフトをする）されるとともに、回路９３８で演算結果Ａと排他的論理和演算される。この演算結果Ｃは、回路９３９により上（左）に１バイト巡回されるとともに、回路９３７の出力との排他的論理和演算が回路９４０で行われる。その演算結果Ｄは、回路９４１によ
り上（左）に２バイト巡回されるとともに、回路９３９の出力と排他的論理和演算が回路９４２で行われる。その演算結果Ｅは、回路９４３により（右）に１バイト巡回されるとともに、回路９４１の出力と排他的論理和演算が回路９４４で行われる。回路９４４の出力Ｆがｚ1'，ｚ2'，ｚ3'，ｚ4'として、回路９４３の出力がｚ5'，ｚ6'，ｚ7'，ｚ8'として出力される。
【０１２１】
ここで、Ｓ５，ＳＣはＳボックス第１変換部１３と論理シフトを、Ｓ６，Ｓ９はＳボックス第２変換部１４と論理シフトを、Ｓ７，ＳＡはＳボックス第３変換部１５と論理シフトを、Ｓ８，ＳＢはＳボックス第４変換部１６と論理シフトを用いて構成されている。論理シフトは、各変換部からの８ビット出力データを３２ビット出力データ中の所定の位置に出力するために利用され、Ｓ５，ＳＡでは０，Ｓ６，ＳＢでは１バイト、Ｓ７，ＳＣでは２バイト、Ｓ８，Ｓ９では３バイト左シフトするように設定されている。即ち、変換部における８ビットの出力をｚとすると、３２ビットの出力は、Ｓ５，ＳＡでは［０，０，０，ｚ］（０は８つの各ビットが０であることを示す）、Ｓ６，ＳＢでは［０，０，ｚ，０］、Ｓ７，ＳＣでは［０，ｚ，０，０］、Ｓ８，Ｓ９では［ｚ，０，０，０］となる。
【０１２２】
なお、実装上は、直接所定の出力を出すように計算された８ビット入力、３２ビット出力の置換表を用意してもよい。
【０１２３】
図３１，図３２の場合は、図２６に示した従来のＥ２暗号で使われていた置換処理よりも高速で、かつ、柔軟な実装が可能となる装置を提供できる。
【０１２４】
図１１において、Ｓ関数部２０にあるＳボックスを全種類異なるＳボックスで個別に構成した場合には、８個の変換テーブルＴが必要になるのに対し、図１２のような構成にすることにより、少なくとも変換テーブルＴを記憶する全体の記憶容量を１／２にすることができる。
【０１２５】
また、図１２に示したＳボックス第１変換部１３、Ｓボックス第２変換部１４に対して、８個の８ビットデータを時分割に入力させることにより、従来の個別の８個のＳボックスを、図１２に示したＳボックス第１変換部１３とＳボックス第２変換部１４のみで代替えすることができる。
【０１２６】
図１３は、Ｓ関数部２０のＳボックスの他の例を示す図である。
【０１２７】
具体的な構成に関しては、松井，桜井「ガロア体除算回路及び乗除算共用回路」（特許登録番号２６４１２８５［Ｈ９．５．２］）に詳しく述べられている。
【０１２８】
Ｓボックス変換部２１には、８ビットのデータが入力され、８ビットのデータが出力される。Ｓボックス変換部２１は、Ｎ（ここでは、Ｎ＝８）ビット線形変換部１７と部分体変換部１８とＮビット線形変換部１９から構成されている。Ｎビット線形変換部１７は、８ビットのオペレーションを行う。部分体変換部１８は、ガロア体ＧＦ（２4）の元である４ビットのみのオペレーションを行う。Ｎビット線形変換部１９は、８ビットのオペレーションを行う。Ｎビット線形変換部１７の線形変換部８５は、図１４に示すような線形変換を行う回路である。また、線形変換部８７は、図１５に示すような線形変換を行う回路である。
【０１２９】
なお、線形変換部８５の代わりに、アフィン変換（なお、線形変換は、アフィン変換の一態様であると考えられる）を行う回路を用いても構わない。或いは、線形変換部８７の代わりに、アフィン変換を行う回路を用いても構わない。線形変換部８５は、８ビットのデータ（Ｘ）に変換を行い、得られた８ビットのデータ（Ｘ'）をガロア体ＧＦ（２8）の
元とみなし、Ｘ'から上位４ビットと下位４ビットのデータ（Ｘ1 とＸ0 ）を、それぞれ部分体ＧＦ（２4）の元とみなし、部分体変換部１８に出力する。ここで、例えば、ＧＦ（２8 ）の元βを既約多項式Ｘ8 ＋Ｘ6＋Ｘ5 ＋Ｘ3 ＋１＝０を満たす元とし、α＝β238
とすると、部分体ＧＦ（２4）の基底は、［１，α，α2 ，α3 ］と表され、これを用いてＧＦ（２4 ）の元Ｘ0，Ｘ1 を表すと、Ｘ'＝Ｘ0 ＋βＸ1 という関係になる（詳細は、「ガロア体除算回路及び乗除算共用回路」（特許登録番号２６４１２８５［Ｈ９．５．２］参照）。部分体変換部１８は、４ビットの演算を行う演算器のみで構成されている。
【０１３０】
ここで、「部分体」のとり方としてはＧＦ（２n ）に対して、ｎ＝２ｍとなる部分体ＧＦ（２m ）が考えられ、ここでの例は、ｎ＝８，ｍ＝４となる。
【０１３１】
部分体変換部１８は、「ガロア体除算回路及び乗除算共用回路」（特許登録番号２６４１２８５［Ｈ９．５．２］で示されたｎ＝８，ｍ＝４の時の回路を基に構成される部分体を用いた逆元回路である。この逆元回路の演算結果として、各々ＧＦ（２4）の元とみなせる上位４ビットのデータと下位４ビットのデータ（Ｙ1 とＹ0 ）が、ＧＦ（２8 ）上の元とみなせる８ビットのデータＹとして線形変換部８７に出力される。ここで、Ｙ＝Ｙ0＋βＹ1 である。以上より、この逆元回路は、Ｙ＝Ｙ0 ＋βＹ1 ＝１／（Ｘ0＋βＸ1 ）を演算する回路である。また、この逆元回路の「有限体」の元の表し方（基底の取り方）には「多項式基底」や「正規基底」というように、「基底」の取り方はいくつか考えられる。
【０１３２】
図１３のＳボックス変換部２１において特徴となる点は、非線形変換を行うために入力されたデータのビット幅（８ビット）の半分のビット幅（４ビット）で演算を行う点である。即ち、逆元回路においては、４ビットのオペレーションのみが行われている点が特徴である。
【０１３３】
このように、４ビットのみオペレーションを行うことにより演算速度は遅くなるかもしれないが、回路全体の規模は、８ビットの演算素子を用いるよりも遙かに小さくすることができるという利点がある。
【０１３４】
そして、Ｓボックス変換部２１の次の特徴は、前述した部分体変換部１８の両側にＮ＝８ビットのＮビット線形変換部１７とＮビット線形変換部１９を設けている点である。Ｓボックス変換部２１を部分体変換部１８を用いて実現すると、ランダムな値を記憶した変換テーブルＴを用いる場合に比べて、回路全体の規模が小さくなったり、構造が簡単になるという利点があるが、逆に、安全性が低下する可能性がある。そこで、部分体変換部１８の両側で線形変換又はアフィン変換を行い、部分体変換部１８を採用したことによる安全性の低下をなくすようにしている。
【０１３５】
なお、図１３において、部分体変換部１８の両側において線形変換を行っているが、片側だけに設けても構わない。或いは、片側で線形変換し、別側でアフィン変換を行っても構わない。
【０１３６】
図２９は、図１１に示した鍵関数部２５を、即ち、Ｓ関数部２０とＰ関数部３０の前にある鍵関数部２５を、Ｓ関数部２０とＰ関数部３０の後に配置したものである。
【０１３７】
また、図３０は、鍵関数部２５をＳ関数部２０とＰ関数部３０の間に配置したものである。
【０１３８】
図２９又は図３０のような構成にすることにより、図１１に示した構成に比べて、実装上高速になることが多いという効果が得られる。更に、拡大鍵の生成を補正することによ
り、図２９又は図３０の構成で、同一の入力から図１１の構成と同一の出力を得ることができる。図２６に示した従来のＦ関数においては、２つのＳ関数があり、それぞれ最初に拡大鍵との演算を行い、次に、Ｓ関数による演算を行っている。それに対し、図２９に示す場合は、ひとつの鍵関数部２５をＦ関数の最後に配置している。また、図３０の場合は、ひとつの鍵関数部２５をＳ関数部２０とＰ関数部３０の間に配置している。
【０１３９】
図４３は、図３に示した暗号化部２００又は復号部５００に対して図２８に示した非線形関数部Ｆを用いた場合の構成図である。
【０１４０】
左データがＦ関数入力データ１０として非線形関数部Ｆに入力され、Ｆ関数出力データ４０が出力される。Ｆ関数出力データ４０は、右データと排他的論理和演算が行われ、その結果が次の段の左データとなる。また、左データは、Ｆ関数入力データ１０として非線形関数部Ｆに入力されるとともに、次の段の右データとして用いられる。図４３に示す構成においては、非線形関数部Ｆの中で鍵関数部２５とＳ関数部２０とＰ関数部３０との演算が行われるため、非線形関数部Ｆにおける演算の負荷が大きなものとなる。この非線形関数部Ｆにおける演算の負荷を分散させて実行することにより、処理の高速化を図る例について、以下に図を用いて説明する。
【０１４１】
図４４は、図４３に示した非線形関数部Ｆの中から鍵関数部２５を削除した非線形関数部Ｆ'を用いる場合を示している。拡大鍵ｋ1 は、ＸＯＲ回路８９１において左データＬ0と排他的論理和演算が行われる。また、拡大鍵ｋ2 は、ＸＯＲ回路２９７において右データＲ0 と排他的論理和演算が行われる。左データは、Ｆ関数入力データ１０として非線形関数部Ｆ'に入力され、Ｓ関数部２０とＰ関数部３０との変換を受ける。ＸＯＲ回路２９７の出力とＦ関数出力データ４０とは、ＸＯＲ回路２９０において排他的論理和演算が行われ、左データＬ1を出力する。
【０１４２】
一方、鍵生成部３００，６００は、拡大鍵ｋ1 とｋ3 との排他的論理和演算を行い、この加工された拡大鍵ｋ1＋ｋ3 を出力する。ＸＯＲ回路８９１の出力Ｒ1 と拡大鍵ｋ1 ＋ｋ3 とが、ＸＯＲ回路２９８において排他的論理和演算が行われ、右データを出力する。鍵生成部３００，６００は、拡大鍵を加工して、ｋ1＋ｋ3 ，ｋ2 ＋ｋ4 ，ｋ3 ＋ｋ5 ，・・・，ｋ16＋ｋ18を生成して出力する。鍵生成部３００，６００は、加工された拡大鍵を、非線形関数処理（Ｆ）以外の処理に供給してデータと演算させる。この結果、左データＬ18と右データＲ18とは、図４３の場合と同じものが得られる。
【０１４３】
加工された拡大鍵を、非線形関数処理（Ｆ）以外の処理に供給してデータと演算させることにより、非線形関数部Ｆ'において、Ｓ関数部２０とＰ関数部３０との計算をしている間に、非線形関数部Ｆ'の外部、即ち、ＸＯＲ回路２９７，２９８で鍵データとの計算ができ、鍵関数部２５の計算が非線形関数部Ｆからなくなり、非線形関数部Ｆの負荷が分散され、高速実装が可能となる。
【０１４４】
図４５は、図４４の構成に対して更にホワイトニング拡大鍵ｋｗ1 の演算を拡大鍵とともに行う場合を示している。図４５においては、鍵生成部がホワイトニング拡大鍵の一部ｋｗ1highと第１の拡大鍵ｋ1との排他的論理和演算を予め行い（即ち、鍵生成部が拡大鍵を加工して）、ＸＯＲ回路８９１に供給している場合を示している。
また、鍵生成部がホワイトニング拡大鍵の一部ｋｗ1lowと第２の拡大鍵ｋ2 との排他的論理和演算を予め行い（即ち、鍵生成部が拡大鍵を加工して）、ＸＯＲ回路２９７に供給している場合を示している。
【０１４５】
このようにして、図４４に示したＸＯＲ回路２９３の演算をなくすことができる。また、図４５の場合は、鍵生成部がホワイトニング拡大鍵ｋｗ2 の一部ｋｗ2lowと拡大鍵ｋ17
との排他的論理和演算を行い（即ち、鍵生成部が拡大鍵を加工して）、ＸＯＲ回路２９９に供給している。また、鍵生成部がホワイトニング拡大鍵の他の部分ｋｗ2highと拡大鍵ｋ18との排他的論理和演算を行い（即ち、鍵生成部が拡大鍵を加工して）、ＸＯＲ回路８９２に供給している。
【０１４６】
このようにして、図４４に示したＸＯＲ回路２９６の演算をなくしている。
【０１４７】
図４６は、非線形関数部Ｆが図２９に示したような構成をとる場合に、非線形関数部Ｆから鍵関数部２５を削除し、代わりに、鍵生成部が拡大鍵ｋをＸＯＲ回路２９８に供給する場合を示している。
【０１４８】
また、図４７は、非線形関数部Ｆが図３０に示したような構成をとる場合、非線形関数部Ｆから鍵関数部２５を削除し、代わりに、鍵生成部が線形変換された拡大鍵ｋ'＝Ｐ（ｋ）をＸＯＲ回路２９８に供給する場合を示している。図４７の場合は、Ｐ関数処理による演算と同一の演算を鍵データに対して施して線形変換された鍵データを生成し、線形変換された鍵データを上記データ処理が用いる鍵データとして、データ処理の非線形関数処理（Ｆ）以外の処理に供給してデータと演算させる場合を示している。  図４６及び図４７のいずれの場合も、鍵関数部２５を非線形関数部Ｆから削除しているので、非線形関数部Ｆの演算負荷が減少し、非線形関数部Ｆの演算と平行して非線形関数部Ｆの外にあるＸＯＲ回路２９８の演算を行うことができるため、高速処理を行うことが可能になる。
【０１４９】
この実施の形態に係るデータ変換装置は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部を備えたデータ変換装置において、
上記データ処理部は、データを非線形変換する非線形変換部を備え、
非線形変換部は、
変換するデータの一部分のデータを第１部分データとして入力して、入力したデータの値を他の値に変換して出力する変換テーブルＴを用いて第１部分データを変換し、変換したデータを出力する第１変換部（ｓ1 ）と、
変換するデータの少なくとも他の一部分のデータを第２部分データとして入力して上記変換テーブルＴを用いた変換と第２部分用演算とを用いて第２部分データを変換し、変換したデータを出力する第２変換部（ｓ2 ）と
を備えたことを特徴とする。
【０１５０】
上記第１変換部（ｓ1 ）は、変換テーブルＴにデータｙ1 を入力してデータｓ1 （ｙ1 ）を出力させ、このデータをデータｚ1 ＝ｓ1 （ｙ1 ）として出力し、
上記第２変換部（ｓ2 ）は、変換テーブルＴにデータｙ2 を入力してデータｓ1 （ｙ2 ）を出力させ、データｓ1 （ｙ2 ）を巡回シフト処理したデータ（ｒｏｔ（ｓ1 （ｙ2 ）））をデータｚ2 ＝ｒｏｔ（ｓ1 （ｙ2 ））として出力することを特徴とする。
【０１５１】
上記データ処理部は、更に、
変換するデータの第１部分データと第２部分データとは異なる一部分のデータを第３部分データとして入力し、第１部分データと第２部分データと第３部分データとは異なる一部分のデータを第４部分データとしてそれぞれ入力して、上記変換テーブルＴを用いた変換と、第２変換部（ｓ2 ）の第２部分用演算とはそれぞれ異なる第３部分用演算と第４部分用演算とにより、第３部分データと第４部分データとをそれぞれ変換し、変換したデータを出力する第３変換部（ｓ3 ）と第４変換部（ｓ4 ）とを備えたことを特徴とする。
【０１５２】
この実施の形態に係るデータ変換装置は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部を備えたデータ変換装置
において、
上記データ処理部は、変換するデータを入力し、入力したデータをある体（ｆｉｅｌｄ）の元と見なし、その部分体を用いた逆元回路を用いて変換し、変換したデータを出力する部分体変換部と、
上記部分体変換部の前段と後段との少なくともいずれか一方に変換するＧＦ（２n ）上のデータを自然な対応でＧＦ（２）n の元とみなし、ＧＦ（２）上のベクトル空間ＧＦ（２）n のアフィン変換部を備えたことを特徴とする。
【０１５３】
上記部分体変換部は、Ｎ（Ｎは偶数）ビットのデータＸをＸ＝Ｘ0 ＋βＸ1 （Ｘ0 ，Ｘ1 ：部分体の元、β：もとの体の元）となる上位のＮ／２ビットのデータＸ1 と下位のＮ／２ビットのデータＸ0 に等分して、Ｙ＝Ｙ0 ＋βＹ1 ＝１／（Ｘ0 ＋βＸ1 ）（但し、Ｘ＝０のときＹ＝０）となる上位のＮ／２ビットのデータＹ1 と下位のＮ／２ビットのデータＹ0 をそれぞれＮ／２ビット単位で演算してデータＹを求める複数のＮ／２ビット演算器のみを有することを特徴とする。
【０１５４】
この実施の形態に係るデータ変換装置は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部と、
上記データ処理部が用いる鍵データを生成してデータ処理部に供給する鍵生成部と
を備えたデータ変換装置において、
データ変換を行うデータと鍵データとを論理演算する鍵関数部と、
データ変換を行うデータを他のデータへ置換変換するＳ関数部と、
データ変換を行うデータ同士で論理演算するＰ関数部と
を有する非線形関数部（Ｆ）を備え、
非線形関数部（Ｆ）は、鍵関数部をＳ関数部とＰ関数部の間に配置したことを特徴とする。
【０１５５】
この実施の形態に係るデータ変換装置は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部と、
上記データ処理部が用いる鍵データを生成してデータ処理部に供給する鍵生成部と
を備えたデータ変換装置において、
データ変換を行うデータと鍵データとを論理演算する鍵関数部と、
データ変換を行うデータを他のデータへ置換変換するＳ関数部と、
データ変換を行うデータ同士で論理演算するＰ関数部と
を有する非線形関数部（Ｆ）を備え、
非線形関数部（Ｆ）は、鍵関数部をＳ関数部とＰ関数部との両者の前と両者の後とのいずれかに配置したことを特徴とする。
【０１５６】
上記Ｓ関数部は、
変換するデータの一部分のデータを第１部分データとして入力して、入力したデータの値を他の値に変換して出力する変換テーブルＴを用いて第１部分データを変換し、変換したデータを出力する第１変換部（ｓ1 ）と、
変換するデータの少なくとも他の一部分のデータを第２部分データとして入力して、上記変換テーブルＴを用いた変換と第２部分用演算とを用いて第２部分データを変換し、変換したデータを出力する第２変換部（ｓ2 ）と
を備えたことを特徴とする。
【０１５７】
この実施の形態に係るデータ変換装置は、少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部を備えたデータ変換装置において、データ変換を行うデータ同士で論理演算するＰ関数部を有する非線形関数部（Ｆ）を備え、
上記Ｐ関数部は、ｚ1 ，ｚ2 ，・・・，ｚ8 の８個の４ｎ（ｎは１以上の整数）ビット
データを入力し、
上記ｚ1 ，ｚ2 ，ｚ3 ，ｚ4 の４個のデータのうち、少なくとも２個以上のデータ排他的論理和演算を行って４ｎビットの結果Ｕ1 を得る回路と、
上記ｚ5 ，ｚ6 ，ｚ7 ，ｚ8 の４個のデータのうち、少なくとも２個以上のデータ排他的論理和演算を行って４ｎビットの結果Ｕ2 を得る回路と、
Ｕ1 とＵ2 との排他的論理和演算を行って４ｎビットの結果Ｕ3 を得る回路と、
Ｕ1 に対して巡回シフトをする巡回回路と、
上記巡回回路の出力とＵ3 との排他的論理和演算を行って結果Ｕ4 を得る回路と
を備え、
上記Ｕ3 ，Ｕ4 をｚ1'，ｚ2'，・・・，ｚ8'として出力することを特徴とする。
【０１５８】
この実施の形態に係るデータ変換方法は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理を実行するデータ変換方法において、
上記データ処理は、データを非線形変換する非線形変換処理を備え、
非線形変換処理は、
変換するデータの一部分のデータを第１部分データとして入力して、入力したデータの値を他の値に変換して出力する変換テーブルＴを用いて第１部分データを変換し、変換したデータを出力する第１変換処理（ｓ1 ）と、
変換するデータの少なくとも他の一部分のデータを第２部分データとして入力して、上記変換テーブルＴを用いた変換と第２部分用演算とを用いて第２部分データを変換し、変換したデータを出力する第２変換処理（ｓ2 ）とを備えたことを特徴とする。
【０１５９】
この実施の形態に係るデータ変換方法は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理を実行するデータ変換方法において、
上記データ処理は、変換するデータを入力し、入力したデータをある体（ｆｉｅｌｄ）の元と見なし、その部分体を用いた逆元回路を用いて変換し、変換したデータを出力する部分体変換処理と、
上記部分体変換処理の前段処理と後段処理との少なくともいずれか一方に変換するＧＦ（２n ）上のデータを自然な対応でＧＦ（２）n の元とみなし、ＧＦ（２）上のベクトル空間ＧＦ（２）n のアフィン変換処理とのいずれかを備えたことを特徴とする。
【０１６０】
この実施の形態に係るデータ変換方法は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理と、
上記データ処理が用いる鍵データを生成してデータ処理に供給する鍵生成処理と
を実行するデータ変換方法において、
データ変換を行うデータと鍵データとを論理演算する鍵関数処理と、
データ変換を行うデータを他のデータへ置換変換するＳ関数処理と、
データ変換を行うデータ同士で論理演算するＰ関数処理と
を有する非線形関数処理（Ｆ）を備え、
非線形関数処理（Ｆ）は、鍵関数をＳ関数処理とＰ関数処理の間に動作させることを特徴とする。
【０１６１】
この実施の形態に係るデータ変換方法は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理と、
上記データ処理が用いる鍵データを生成してデータ処理に供給する鍵生成処理と
を実行するデータ変換方法において、
データ変換を行うデータと鍵データとを論理演算する鍵関数処理と、
データ変換を行うデータを他のデータへ置換変換するＳ関数処理と、
データ変換を行うデータ同士で論理演算するＰ関数処理と
を有する非線形関数処理（Ｆ）を備え、
非線形関数処理（Ｆ）は、鍵関数処理をＳ関数処理とＰ関数処理との両者の前と両者の後とのいずれかで動作させることを特徴とする。
【０１６２】
この実施の形態に係るデータ変換装置は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部と、
上記データ処理部が用いる鍵データを生成してデータ処理部に供給する鍵生成部と
を備えたデータ変換装置において、
上記データ処理部は、データ変換を行うデータを非線形変換する非線形関数部（Ｆ）を備え、
上記鍵生成部は、非線形関数部（Ｆ）に供給する鍵データを加工して、加工した鍵データをデータ処理部の非線形関数部（Ｆ）以外の部分に供給してデータと演算させることを特徴とする。
【０１６３】
この実施の形態に係るデータ変換方法は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理と、
上記データ処理が用いる鍵データを生成してデータ処理に供給する鍵生成処理と
を実行するデータ変換方法において、
上記データ処理は、データ変換を行うデータを非線形変換する非線形関数処理（Ｆ）を備え、
上記鍵生成処理は、非線形関数処理（Ｆ）に供給する鍵データを加工して、加工した鍵データをデータ処理の非線形関数処理（Ｆ）以外の処理に供給してデータと演算させることを特徴とする。
【０１６４】
また、上記データ変換方法をコンピュータに実行させるプログラムを記録したコンピュータ読み取り可能な記録媒体であることを特徴とする。
【０１６５】
また、上記データ変換方法をコンピュータに実行させるプログラムであることを特徴とする。
【０１６６】
実施の形態３．
図１６は、図１に示した鍵生成部３００（又は鍵生成部６００）の構成図である。
【０１６７】
鍵生成部３００は、ビット長変換部３１０と第１のＧビット鍵変換部３２０と第２のＧビット鍵変換部３３０と鍵シフト部３４０から構成されている。鍵生成部３００には、１２８ビット又は１９２ビット又は２５６ビットの鍵データが入力され、１２８ビットの鍵データＫ1と１２８ビットの鍵データＫ2 が生成され、複数の６４ビットの拡大鍵が出力される。ビット長変換部３１０において、ビット数の異なる鍵データが入力されても、出力される鍵データのビット長が一定になるように変換している。即ち、ビット長変換部３１０は、内部において上位１２８ビットの鍵データＳＫhighと下位１２８ビットの鍵データＳＫlowを生成し、前者を第１のＧビット鍵変換部３２０と鍵シフト部３４０に出力する。また、後者を第２のＧビット鍵変換部３３０と鍵シフト部３４０に出力する。また、前者と後者の排他的論理和をとった１２８ビットの鍵データを第１のＧビット鍵変換部３２０に出力する。
【０１６８】
図１７は、ビット長変換部３１０の内部動作を示す図である。
【０１６９】
ビット長変換部３１０に１２８ビットの鍵データが入力された場合には、その入力された鍵データがそのまま上位１２８ビットの鍵データＳＫhighとして出力される。また、下
位１２８ビットの鍵データＳＫlowは、０に設定されて出力される。
【０１７０】
次に、ビット長変換部３１０に１９２ビットの鍵データが入力された場合には、入力された鍵データの上位１２８ビットのデータがそのまま上位１２８ビットの鍵データＳＫhighとして出力される。また、入力された１９２ビットの鍵データの下位６４ビットのデータと、その下位６４ビットのデータが反転された６４ビットの反転データとが連結され、下位１２８ビットの鍵データＳＫlowが生成され出力される。
【０１７１】
次に、２５６ビットの鍵データが入力された場合には、入力された鍵データの上位１２８ビットがＳＫhighとして、下位１２８ビットがＳＫlowとして出力される。
【０１７２】
第１のＧビット鍵変換部３２０には、ビット長変換部３１０から１２８ビットの鍵データＳＫhighとＳＫlow の排他的論理和が入力され、２段の非線形変換を受けた後、上位１２８ビットの鍵データＳＫhighと排他的論理和がとられ、更に２段の非線形変換を受け、１２８ビットの鍵データＫ1が出力される。
【０１７３】
ビット長変換部３１０に入力された鍵データの長さが１２８ビットの場合には、第１のＧビット鍵変換部３２０から出力された１２８ビットの鍵データと入力された元の鍵データとを用いて鍵シフト部３４０が拡大鍵を生成する。ビット長変換部３１０に入力された鍵データの長さが１９２ビット又は２５６ビットの場合には、第１のＧビット鍵変換部３２０から出力された１２８ビットの鍵データを更に第２のＧビット鍵変換部３３０に入力し、下位１２８ビットの鍵データＳＫlowと排他的論理和をとり、２段の非線形変換を行った後、１２８ビットの鍵データＫ2 を出力する。鍵シフト部３４０には、第１のＧビット鍵変換部３２０と第２のＧビット鍵変換部３３０の両方から出力された２つの１２８ビットの鍵データが出力され、両者と入力された元の鍵データとを用いて鍵シフト部３４０が拡大鍵を生成する。
【０１７４】
鍵シフト部３４０は、シフトレジスタＡ３４１とシフトレジスタＢ３４２とシフトレジスタＣ３４３とシフトレジスタＤ３４４とシフト制御部３４５を備えている。シフト制御部３４５からは、セレクト信号３４６が各シフトレジスタに出力され、シフトレジスタの動作を制御している。
【０１７５】
図１８は、シフトレジスタＡ３４１の構成を示す図である。
【０１７６】
シフトレジスタＡ３４１は、１２８ビット分のスイッチ群を持ったセレクタＡ３４７と、１２８ビットのレジスタＡ３４８を有している。セレクト信号３４６は、セレクタＡ３４７の各スイッチをＡ側又はＢ側のいずれかに全て同時に接続することを指示するスイッチ信号を含んでいる。図においては、セレクト信号３４６によりセレクタＡ３４７のスイッチ群がＡを選択した場合を示しており、この場合には、レジスタＡ３４８が１７ビット左側に巡回シフトする場合を示している。また、スイッチ群がＢを接続した場合には、レジスタＡが左側に１５ビット巡回シフトすることを示している。この１５ビットシフト、或いは、１７ビットシフトは、１クロックサイクルで行われる。
【０１７７】
なお、巡回シフトのシフト数（１５，１７）は一例であり、他のシフト数でも構わない。
【０１７８】
図１９は、シフト制御部３４５に記憶されている制御テーブルの一部分を示す図である。
【０１７９】
この制御テーブルは、各クロック毎にレジスタを何ビットシフトさせるかを記憶してい
るテーブルである。例えば、レジスタＡ制御テーブルにおいては、１クロック目で１５ビットシフトさせることを示している。また、２クロック目で更に１５ビットシフトさせることを示している。同様に、３クロック目、４クロック目も１５ビットシフトさせることを示している。５クロック目〜８クロック目は、それぞれ１７ビットシフトさせることを示している。
【０１８０】
図２０は、１２８ビットの鍵データから拡大鍵を生成する場合に、シフト制御部３４５が図１９に示すテーブルを用いて各シフトレジスタを制御した結果を示す図である。
【０１８１】
シフトレジスタＡ３４１には、ビット長変換部３１０から入力した上位１２８ビットの鍵データＳＫhighが設定される。シフトレジスタＢ３４２には、第１のＧビット鍵変換部３２０から出力した１２８ビットの鍵データＫ1が設定される。このような状態で、図１９に示す制御テーブルに従って、シフトレジスタＡ３４１とシフトレジスタＢ３４２が動作する。図２０において、斜線を引いた部分は無視され、出力されないことを示している。それ以外の斜線が引かれていない部分は、図２１に示すように、拡大鍵として出力されるものである。
【０１８２】
図２１は、レジスタの値と拡大鍵の対応を示す図である。
【０１８３】
図２０においては、１クロック毎に１５ビットずつ４回シフトし、５クロック目からは１クロック毎に１７ビットシフトする場合を示している。シフトレジスタＡ３４１とシフトレジスタＢ３４２から上位６４ビット及び下位６４ビットを拡大鍵として出力するかしないかの判断、或いは、その出力する順番は、図示していない制御テーブルに記載されているものとし、その制御テーブルに基づいて、セレクト信号３４６に出力指示信号を含ませてシフトレジスタに出力することにより、各シフトレジスタから拡大鍵が６４ビットずつ出力されることになる。
【０１８４】
図２２は、１９２ビット又は２５６ビットの鍵データから拡大鍵を生成する場合を示している。
【０１８５】
即ち、シフトレジスタＡ３４１にビット長変換部３１０から入力した上位１２８ビットの鍵データＳＫhighをセットし、シフトレジスタＢ３４２に下位１２８ビットの鍵データＳＫlowをセットし、シフトレジスタＣ３４３に第１のＧビット鍵変換部３２０から出力した１２８ビットの鍵データＫ1 をセットし、シフトレジスタＤ３４４に第２のＧビット鍵変換部３３０から出力した１２８ビットの鍵データＫ2をセットする場合を示している。
【０１８６】
斜線部分は、拡大鍵として使用しない鍵を示している。
【０１８７】
図２３は、レジスタの値と拡大鍵の対応を示す図である。
【０１８８】
拡大鍵として使用しない鍵や図２３に示すレジスタの値と拡大鍵との対応も前述した制御部にある制御テーブルが記憶しているものとする。
【０１８９】
図１９に示すように、シフト制御部３４５は、シフトレジスタＡ３４１に設定された鍵データをシフトするビット数を記憶している。即ち、シフトレジスタＡ制御テーブルに示すように、シフトレジスタＡ３４１に設定された鍵データをＺ0＝０ビット、Ｚ1 ＝１５ビット、Ｚ2 ＝４５ビット、Ｚ3 ＝６０ビット、Ｚ4＝７７ビット、Ｚ5 ＝９４ビット、Ｚ6 ＝１１１ビット、Ｚ7 ＝１２８ビット移動させることにより、拡大鍵を次々と生成することになる。
【０１９０】
各シフト数の和は、１５＋１５＋１５＋１５＋１７＋１７＋１７＋１７＝１２８となり、１２８ビットのレジスタを１２８ビット巡回シフトすることにより、レジスタは初期状態に戻ることになる。
【０１９１】
このように、シフト数の総和を１２８ビット（レジスタのビット数）として初期状態に戻す理由は、初期状態のレジスタに対して次の処理があった場合に、そのまま次の処理が開始できるからである。また、逆変換処理（復号）を行う場合にも、拡大鍵を生成するための処理の開始が同じく初期状態のままから開始するため、初期状態をセットすることにより、変換処理（暗号化）と逆変換処理（復号）のどちらも行うことができる。また、シフト数の総和を１２８ビット（レジスタのビット数）より大きくしていないのは、例えば、１２８ビット（レジスタのビット数）以下の２ビット巡回シフトと１２８ビット（レジスタのビット数）より大きい１３０ビット巡回シフトは同一値になってしまい、一巡回以上のシフト（１２８ビット以上のシフト数）としてしまうことによるシフトレジスタ内の状態として、同じ値の発生を防止するためである。レジスタＡ制御テーブルは、レジスタを一巡回させるに当たり、その途中でできるだけ不規則なシフト数になる値を設定することが望ましい。しかし、シフトレジスタの構成を簡単にするには、なるべく限られたシフト数でシフトするようにしたい。そこで、レジスタを１個（１クロック）で１５ビットと１７ビットとの２種類のシフトができるように構成し、この２種類のシフトを用いて、更に、以下のようにして、異なる数のシフトを実現している。
【０１９２】
Ｚ1 −Ｚ0 ＝１５（ここで、Ｚ1 −Ｚ0 ＝Ｂ1とする）、Ｚ2 −Ｚ1 ＝３０（即ち、Ｚ2
−Ｚ1 ＝２Ｂ1）であり、Ｚ2 −Ｚ1 ＝２（Ｚ1 −Ｚ0 ）という関係にする。また、シフトレジスタＢ制御テーブルに示すように、Ｚ5−Ｚ4 ＝３４（ここで、Ｚ5 −Ｚ4 ＝２Ｂ2
とする）、Ｚ6−Ｚ5 ＝１７（即ち、Ｚ6 −Ｚ5 ＝Ｂ2 ）であり、Ｚ5−Ｚ4 ＝２（Ｚ6 −Ｚ5 ）という関係にする。即ち、シフト数の差分を１５ビットと３０ビット又は１７ビットと３４ビットとし、１回のシフト数（１５ビットと１７ビット）の整数倍（２倍＝Ｉ倍）となるシフト数（３０ビット又は３４ビット）とする。
【０１９３】
このように、シフト数の差分を１回のシフト数又は１回のシフト数の２倍以上の整数倍（Ｉ倍、Ｉは２以上の整数）のいずれかとすることにより、シフトレジスタＡ３４１を１回又は２回（Ｉ回）動作させることにより、制御テーブルに記憶したシフト数のオペレーションを容易に実現することができる。２回（Ｉ回）動作させるということは、シフトレジスタＡ３４１を動作させるために供給されている動作クロックの２クロック（Ｉクロック）サイクルでシフト動作が終了することを意味している。
【０１９４】
ここで、Ｉ回（２回）シフトさせる場合、Ｉ−１回（２−１＝１回）目までのシフトしたデータは上位のデータも下位のデータもともに無視し、拡大鍵として使用しない。例えば、図１９のＺ1＝１５からＺ2 ＝４５へシフトする場合は、Ｉ＝（Ｚ2 −Ｚ1 ）／（１回のシフト数）＝（４５−１５）／１５＝２となり、Ｉ−１回目（２−１＝１回目）のシフト後のデータは、上位のデータも下位のデータもともに無視し、拡大鍵として使用しない。これは、図２０では、ｋｅｙ［８］とｋｅｙ［９］に斜線が引かれている通り、拡大鍵として使用しないとして示されている。そして、Ｉ回目（２回目）のシフト後のデータの上位のデータと下位のデータのいずれか又は両方を拡大鍵として用いる。これは、図２０では、ｋｅｙ［１２］とｋｅｙ［１３］とが拡大鍵として出力されることが示されている。
【０１９５】
このように、２以上の整数倍のシフトを行うのは、１５ビット又は１７ビットのみのシフトだけでなく、３０（＝１５×２）ビット又は３４（＝１７×２）ビット（又は、４５（＝１５×３）ビット又は５１（＝１７×３）ビット等）のシフトも行えるようにし、シ
フト数を変化させ、安全性をより高めるためである。また、前述した拡大鍵として使用しない場合を設けているのも、同様に、より安全性を高めるためである。
【０１９６】
拡大鍵として使用しないデータ（図２０と図２２において、斜線を引かれた拡大鍵として使用しない鍵）は、例えば、ハードウェアの処理、或いは、プログラムの処理が一連に連続して行われないような場合に発生させることが望ましい。例えば、図３において、データ正変換部（ＦＬ）とデータ逆変換部（ＦＬ-1）のオペレーションを行うとき、或いは、その前後、或いは、プログラムにおいて関数呼び出し、或いは、サブルーチンコール、或いは、割り込み処理を行う場合等の処理の切れ目、或いは、処理の変化時に行うようにするのが望ましい。
【０１９７】
また、図１９に示した制御テーブルの特徴は、Ｂ1 ＝８×２−１＝１５（Ｂ1 ＝８×Ｊ1 −１、ここで、Ｊ1は１以上の整数）ビットのシフト数と、Ｂ2 ＝８×２＋１＝１７（Ｂ2 ＝８×Ｊ2 ＋１、ここで、Ｊ2は０以上の整数、Ｊ1 ＝Ｊ2 又はＪ1 ≠Ｊ2 ）ビットのシフト数を指定していることである。シフトの量を８の倍数に±１とすることにより、奇数ビットのシフトを行うことになり、拡大鍵のデータ処理部への作用が８ビット単位、即ち、偶数単位であることから、偶数ビットだけシフトするよりも安全性が高まる。また、シフト量として８の倍数に１ビットの±を行っているだけなので、例えば、１ビットシフト命令しか持たないＣＰＵ等においては、３ビットや５ビットシフトするよりも、高速処理を行うことが可能な場合がある。また、このシフト処理を１ビットシフトしかできないハードウェアを用いて行う場合にも、同様に、高速処理を適用することができる場合がある。
【０１９８】
前述したビット長変換部３１０の説明においては、３種類のビット幅の鍵データを入力する場合を示したが、１２８ビット（Ｇビット）と２５６ビット（２Ｇビット）の間のビット長Ｑ（Ｇ＜Ｑ＜２Ｇ）を持つ鍵データが入力された場合も、何等かのアルゴリズムを用いて２５６ビットの鍵データが入力された場合と同様のサイズに鍵データを伸長させることができる。即ち、Ｇビットと２Ｇビットの間の長さＱを持つ鍵データが入力された場合、ビット長変換部３１０によってＱビットの鍵データを２Ｇビットの鍵データに変換することができる。
【０１９９】
次に、図３４を用いて等価鍵の非存在証明の説明をする。
【０２００】
以下の図３４の説明では、「＋」で排他的論理和演算を意味するとする。
【０２０１】
ここで、２つの１２８ビットの鍵データＳＫ１とＳＫ２（ＳＫ１≠ＳＫ２）とを入力するものとし、ビット長変換部３１０が、ＳＫ１からＳＫ１high＝ＳＫ１＝（ＳＫＨ１｜ＳＫＬ１）を、また、ＳＫ２からＳＫ２high＝ＳＫ２＝（ＳＫＨ２｜ＳＫＬ２）を出力するものとする。ここで、ＳＫＨｉ（ｉ＝１，２）はＳＫｉの上位６４ビットのデータであり、ＳＫＬｉ（ｉ＝１，２）はＳＫｉの下位６４ビットのデータである。
【０２０２】
ＳＫＨ１とＳＫＨ２との排他的論理和をΔＡとし、ＳＫＬ１とＳＫＬ２との排他的論理和をΔＢとすると、ＳＫ１≠ＳＫ２であるから、「少なくとも、ΔＡ≠０又はΔＢ≠０」が成り立つ。
【０２０３】
図３４に示すように、このΔＡとΔＢが２段の非線形変換を受けていくことによって、ΔＡ＋ΔＤ，ΔＢ＋ΔＣに変化する。このことは、ＳＫ１highとＳＫ２highとの排他的論理和（ΔＡ｜ΔＢ）が、ＳＫ１highから２段の非線形変換を受けたデータとＳＫ２highから２段の非線形変換を受けたデータとの排他的論理和（ΔＡ＋ΔＤ｜ΔＢ＋ΔＣ）に変化したことを意味する。従って、この２段の非線形変換を受けたデータが、排他的論理和回
路９９９でそれぞれＳＫ１high，ＳＫ２highと排他的論理和演算されると、この２つのデータの排他的論理和は（ΔＤ｜ΔＣ）になる。さて、ここで、非線形変換が全単射関数であれば、ΔＸ≠０の入力に対して、ΔＹ≠０を出力することから、「少なくとも、ΔＡ≠０又はΔＢ≠０」であるならば、「少なくとも、ΔＣ≠０又はΔＤ≠０」となる。故に、２段の非線形変換によってＳＫ１highとＳＫ２highから同じデータを出力することはあり得ないことを意味しており、等価鍵の非存在証明となる。
【０２０４】
一方、図３５に示すように、２段の非線形変換ではなく、３段の非線形変換を行う場合について考えてみる。「少なくとも、ΔＡ≠０又はΔＢ≠０」が成り立つのであるから、ΔＡかΔＢのいずれかが０である場合があり得る。もし、ΔＡ＝０であるとするとΔＣ＝０となり、また、上記と同じ議論により、ＳＫ１highとＳＫ２highとの排他的論理和（０｜ΔＢ）が、ＳＫ１highから３段の非線形変換を受けたデータと、ＳＫ２highから３段の非線形変換を受けたデータとの排他的論理和（ΔＢ＋ΔＥ｜ΔＤ）に変化する。従って、この３段の非線形変換を受けたデータが、排他的論理和回路９９９でそれぞれＳＫ１high，ＳＫ２highと排他的論理和演算されると、この２つのデータの排他的論理和は（ΔＢ＋ΔＥ｜ΔＢ＋ΔＤ）になる。さて、ここで、ΔＢ＝ΔＤ＝ΔＥ≠０が成り立つと仮定すると、（ΔＢ＋ΔＥ｜ΔＢ＋ΔＤ）＝（０｜０）となる。つまり、この３段の非線形変換を受けたデータが、それぞれＳＫ１high，ＳＫ２highと排他的論理和演算すると、その演算結果が一致することを意味する。即ち、ＳＫ１highとＳＫ２highから同じデータを出力することを意味し、暗号の安全性上問題が多い等価鍵が存在することになる。
【０２０５】
以上述べた３段の非線形変換のみならず、一般的な非線形変換では異なるＳＫ１とＳＫ２から等価なＫ1 を出力する、即ち、等価鍵が存在する可能性があるが、本実施の形態で述べる２段の非線形変換なら等価鍵が存在しないことを証明できる。
【０２０６】
また、等価鍵の非存在証明が付けられるのは、この２段の非線形変換以外にもあると思われるが、２段の非線形変換を行う場合は、等価鍵の非存在証明を付けることができる上、簡単な構成であるため、２段の非線形変換をするのが望ましい構成である。
【０２０７】
図２４は、暗号化用データ変換装置１００又は復号用データ変換装置４００が実装されるコンピュータを示す図である。
【０２０８】
暗号化用データ変換装置１００又は／及び復号用データ変換装置４００は、プリントサーキットボードとしてバスに接続される。このプリントサーキットボードには、ＣＰＵやメモリや論理回路素子が備えられており、前述してきた動作を行うことによりＣＰＵから供給される平文を暗号文にし、ＣＰＵに返送する。或いは、ＣＰＵから送られてきた暗号文を平文に復号し、ＣＰＵに返送する。
【０２０９】
暗号化用データ変換装置１００又は復号用データ変換装置４００は、このように、全てハードウェアを用いて実現することが可能である。また、暗号化用データ変換装置１００又は復号用データ変換装置４００は、全てソフトウェアを用いてデータ変換方法としても実現することも可能である。即ち、磁気ディスク装置やフレキシブルディスク装置に記憶されたプログラムを用いて前述した動作を行わせることができる。或いは、図示していないが、ハードウェアとソフトウェアを組み合わせて前述した動作を実現させるようにしても構わない。また、図示していないが、１台のコンピュータで前述した動作全てを実現する必要はなく、サーバとクライアント、或いは、ホストコンピュータと端末コンピュータのように、分散されたシステムで前述した動作を達成するようにしても構わない。
【０２１０】
前述した図１〜図４７の図中に矢印が記載されている図面は、矢印の方向が動作の流れを示しており、前述した図１〜図４７の図中に矢印が記載されている図面は、データ変換
装置のブロック図でもあり、かつ、フローチャート図でもある。そして、前述したブロック図における「何々部」と記載されている部分は、「何々工程」又は「何々処理」と読み換えることにより、データ変換方法を示す動作フローチャート又はプログラムフローチャートとなる。
【０２１１】
なお、前述した実施の形態では、１２８ビットの平文と暗号文の場合を示したが、２５６ビットの平文と暗号文やその他のビット数の平文と暗号文の場合でもよい。
【０２１２】
また、前述した実施の形態では、１２８，１９２，２５６ビットの鍵データと６４ビットの拡大鍵の場合を示したが、その他のビット数の場合でもよい。
【０２１３】
平文と暗号文と鍵データと拡大鍵のビット長が変わった場合には、もちろん、そのビット長に対応して、各部や各工程や各処理の処理するビット長も変わる。
【０２１４】
この実施の形態に係るデータ変換装置は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部と、
上記データ処理部が用いる鍵データを生成してデータ処理部に供給する鍵生成部と
を備えたデータ変換装置において、
上記データ処理部は、各段ごとに拡大鍵を入力して非線形変換をする多段に接続された複数段の非線形データ変換部を有し、
上記鍵生成部は、上記複数段の非線形データ変換部の各段毎に対して供給する拡大鍵を生成するにあたり、鍵データと鍵データから生成された鍵データに依存するデータとの少なくともいずれかを入力して予め定められたビット数Ｚ1 ，Ｚ2 ，・・・，Ｚm （ここで、ｉ，ｊ，ｋは１〜ｍのいずれか１つの値とし、Ｚk −Ｚj ＝Ｉ×（Ｚi+1 −Ｚi ）＝Ｉ×Ｂ（Ｉは整数、Ｂ＝Ｚi+1 −Ｚi ））だけ、巡回シフトして、この巡回シフトした鍵データから各段の非線形データ変換部の拡大鍵を生成する鍵シフト部を有するとともに、
上記鍵シフト部は、
１回の動作で（Ｚi+1 −Ｚi ）ビット（Ｂビット）の巡回シフトをする巡回シフトレジスタと、
Ｚi ビット巡回シフトされた鍵データに対して巡回シフトレジスタを１回動作させて（Ｚi+1 −Ｚi ）ビット（Ｂビット）の巡回シフトを行わせることにより、巡回シフトレジスタにＺi+1 ビット巡回シフトされた鍵データを生成させ、Ｚi+1 ビット巡回シフトされた鍵データに対して巡回シフトレジスタをＩ回動作させてＩ×（Ｚi+1 −Ｚi ）ビット（Ｉ×Ｂビット）の巡回シフトを行わせることにより、巡回シフトレジスタにＺi+2 ビット巡回シフトされた鍵データを生成させる制御部と
を有することを特徴とする。
【０２１５】
上記巡回シフトレジスタは、巡回シフトレジスタを動作させるために供給されている動作クロックの１クロックサイクルでＺi+1 −Ｚi ビット（Ｂビット）の巡回シフトをする回路であることを特徴とする。
【０２１６】
上記巡回シフト回路は、（Ｚi+1 −Ｚi ）ビット（Ｂビット）の値として、Ｂ1 ＝８×Ｊ1 ＋１（Ｊ1 ＝０以上の整数）ビットと、Ｂ2 ＝８×Ｊ2 −１（Ｊ2 ＝１以上の整数、Ｊ1 とＪ2 は無関係、即ち、Ｊ1≠Ｊ2 又はＪ1 ＝Ｊ2 ）ビットとのいずれかの値を選択するセレクタを備えたことを特徴とする。
【０２１７】
この実施の形態に係るデータ変換装置は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部と、
上記データ処理部が用いる鍵データを生成してデータ処理部に供給する鍵生成部と
を備えたデータ変換装置において、
上記データ処理部は、各段ごとに拡大鍵を入力して非線形変換をする多段に接続された複数段の非線形データ変換部を有し、
上記鍵生成部は、上記複数段の非線形データ変換部の各段毎に対して供給する拡大鍵を生成するにあたり、ある鍵データを予め定められたビット数（Ｂビット）だけ順に巡回シフトして、この巡回シフトした鍵データから各段の非線形データ変換部の拡大鍵を生成する鍵シフト部を有するとともに、
上記鍵シフト部は、Ｂビットだけ順に巡回シフトしたデータのうち、一部のデータを無視して拡大鍵を生成せず、残りの他のデータから拡大鍵を生成することを特徴とする。
【０２１８】
この実施の形態に係るデータ変換装置は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理部と、
上記データ処理部が用いる鍵データを生成してデータ処理部に供給する鍵生成部と
を備えたデータ変換装置において、
上記鍵生成部は、
ＧビットのＧビット鍵データを入力して変換し、Ｇビットの第１のＧビット変換鍵データを出力する第１のＧビット鍵変換部と、
上記第１のＧビット鍵変換部から出力された第１のＧビット変換鍵データを入力し、更に変換してＧビットの第２のＧビット変換鍵データを出力する第２のＧビット変換部と
を備え、
上記鍵生成部がＧビット鍵データＫを入力した場合は、Ｇビット鍵データＫを第１のＧビット鍵変換部に入力して変換し、第１のＧビット鍵変換部により出力された第１のＧビット変換鍵データＫ1 を変換されたＧビット鍵データとして出力し、
上記鍵生成部が２Ｇビット鍵データＫを入力した場合は、２Ｇビット鍵データＫからＧビット鍵データを生成して生成したＧビット鍵データを第１のＧビット鍵変換部に入力して変換して第１のＧビット変換鍵データＫ1 を出力し、第１のＧビット変換鍵データＫ1 を第２のＧビット変換部に入力して変換して第２のＧビット変換鍵データＫ2 を出力し、第１のＧビット鍵変換部により出力された第１のＧビット変換鍵データＫ1 と、第２のＧビット変換部により出力された第２のＧビット変換鍵データＫ2 とを連結して、変換された２Ｇビット鍵データ（Ｋ1 ，Ｋ2 ）として出力することを特徴とする。
【０２１９】
上記第１のＧビット鍵変換部は、
Ｇビット鍵データを非線形変換する２段の非線形データ変換部と、
２段目の非線形データ変換部から出力された変換途中のＧビット鍵データと、
第１のＧビット鍵変換部が入力したＧビット鍵データとの論理演算を行う論理演算部とを備えたことを特徴とする。
【０２２０】
上記鍵生成部は、更に、Ｑビット（Ｇ＜Ｑ＜２Ｇ）の鍵データを入力した場合、Ｑビットの鍵データを２Ｇビットの鍵データにするビット長変換部を備えたことを特徴とする。
【０２２１】
この実施の形態に係るデータ変換方法は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理と、
上記データ処理が用いる鍵データを生成してデータ処理に供給する鍵生成処理と
を実行するデータ変換方法において、
上記データ処理は、各段ごとに拡大鍵を入力して非線形変換をする多段に接続された複数段の非線形データ変換処理を有し、
上記鍵生成処理は、上記複数段の非線形データ変換処理の各段毎に対して供給する拡大鍵を生成するにあたり、鍵データと鍵データから生成された鍵データに依存するデータとの少なくともいずれかを入力して予め定められたビット数Ｚ1 ，Ｚ2 ，・・・，Ｚm （ここで、ｉ，ｊ，ｋは、１〜ｍのいずれか１つの値とし、Ｚk −Ｚj ＝Ｉ×（Ｚi+1 −Ｚi ）＝Ｉ×Ｂ（Ｉは整数、Ｂ＝Ｚi+1 −Ｚi ））だけ、巡回シフトして、この巡回シフトし
た鍵データから各段の非線形データ変換処理へ供給する拡大鍵を生成する鍵シフト処理を有するとともに、
上記鍵シフト処理は、
１回の動作で（Ｚi+1 −Ｚi ）ビット（Ｂビット）の巡回シフトをする巡回シフト処理と、
Ｚi ビット巡回シフトされた鍵データに対して巡回シフト処理を１回動作させて（Ｚi+1 −Ｚi ）ビット（Ｂビット）の巡回シフトを行わせることにより、巡回シフト処理によりＺi+1 ビット巡回シフトされた鍵データを生成させ、Ｚi+1 ビット巡回シフトされた鍵データに対して巡回シフト処理をＩ回動作させてＩ×（Ｚi+1 −Ｚi ）ビット（Ｉ×Ｂビット）の巡回シフトを行わせることにより、巡回シフト処理によりＺi+2 ビット巡回シフトされた鍵データを生成させる制御処理と
を有することを特徴とする。
【０２２２】
この実施の形態に係るデータ変換方法は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理と、
上記データ処理が用いる鍵データを生成してデータ処理に供給する鍵生成処理と
を実行するデータ変換方法において、
上記データ処理は、各段ごとに拡大鍵を入力して非線形変換をする多段に接続された複数段の非線形データ変換処理を有し、
上記鍵生成処理は、上記複数段の非線形データ変換処理の各段毎に対して供給する拡大鍵を生成するにあたり、ある鍵データを予め定められたビット数（Ｂビット）だけ順に巡回シフトして、この巡回シフトした鍵データから各段の非線形データ変換処理へ供給する拡大鍵を生成する鍵シフト処理を有するとともに、
上記鍵シフト処理は、Ｂビットだけ順に巡回シフトしたデータのうち、一部のデータを無視して拡大鍵を生成せず、残りの他のデータから拡大鍵を生成することを特徴とする。
【０２２３】
この実施の形態に係るデータ変換方法は、鍵データを入力して少なくともデータの暗号化とデータの復号とのいずれかのデータ変換を行うデータ処理と、
上記データ処理が用いる鍵データを生成してデータ処理に供給する鍵生成処理と
を実行するデータ変換方法において、
上記鍵生成処理は、
ＧビットのＧビット鍵データを入力して変換し、Ｇビットの第１のＧビット変換鍵データを出力する第１のＧビット鍵変換処理と、
上記第１のＧビット鍵変換処理から出力された第１のＧビット変換鍵データを入力し、更に変換してＧビットの第２のＧビット変換鍵データを出力する第２のＧビット変換処理と
を備え、
上記鍵生成処理がＧビット鍵データＫを入力した場合は、Ｇビット鍵データＫを第１のＧビット鍵変換処理に入力して変換し、第１のＧビット鍵変換処理により出力された第１のＧビット変換鍵データＫ1 を変換されたＧビット鍵データとして出力し、
上記鍵生成処理が２Ｇビット鍵データＫを入力した場合は、２Ｇビット鍵データＫからＧビット鍵データを生成して生成したＧビット鍵データを第１のＧビット鍵変換処理に入力して変換して第１のＧビット変換鍵データＫ1 を出力し、第１のＧビット変換鍵データＫ1 を第２のＧビット変換処理に入力して変換して第２のＧビット変換鍵データＫ2 を出力し、第１のＧビット鍵変換処理により出力された第１のＧビット変換鍵データＫ1 と、第２のＧビット変換処理により出力された第２のＧビット変換鍵データＫ2 とを連結して、変換された２Ｇビット鍵データ（Ｋ1 ，Ｋ2 ）として出力することを特徴とする。
【０２２４】
また、上記データ変換方法をコンピュータに実行させるプログラムを記録したコンピュータ読み取り可能な記録媒体であることを特徴とする。
【０２２５】
また、上記データ変換方法をコンピュータに実行させるプログラムであることを特徴とする。
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】図１３
【補正方法】変更
【補正の内容】
【図１３】
2011018065.tif 000050
【手続補正４】
【補正対象書類名】図面
【補正対象項目名】図１４
【補正方法】変更
【補正の内容】
【図１４】
2011018065.tif 000051
【手続補正５】
【補正対象書類名】図面
【補正対象項目名】図１５
【補正方法】変更
【補正の内容】
【図１５】
2011018065.tif 000052
【手続補正６】
【補正対象書類名】図面
【補正対象項目名】図３６
【補正方法】変更
【補正の内容】
【図３６】
2011018065.tif 000053