(57)【要約】【課題】複数の異なるＦ関数を適用した暗号処理を効率的に実行する構成を提供する。【解決手段】異なるＦ関数を選択的に適用したラウンド演算による暗号処理を実行する構成において、Ｆ関数の各々に対応する入力値と出力値または中間値とを対応付けた複数のＦ関数対応テーブルをメモリに格納し、予め規定された暗号処理シーケンスに従って、各ラウンドのＦ関数に対応するアドレスを適用してメモリからＦ関数対応テーブルを読み込み、テーブル参照に基づいて入力値に対する出力値または中間値を取得して、各Ｆ関数に従ったデータ変換結果を得る。【選択図】図８
2008058829.tif 000002
【特許請求の範囲】
【請求項１】
Ｆｅｉｓｔｅｌ型共通鍵ブロック暗号処理を実行する暗号処理装置であり、
ラウンド関数として少なくとも２種類以上の異なるＦ関数を選択的に適用して、複数ラウンドのラウンド演算を実行するデータ処理部と、
前記２種類以上の異なるＦ関数の各々に対応する入力値と出力値または中間値とを対応付けた複数のＦ関数対応テーブルを格納したメモリを有し、
前記データ処理部は、
予め規定された暗号処理シーケンスに従って、各ラウンドにおいて適用するＦ関数に対応するＦ関数対応テーブルのアクセス用アドレスを取得し、取得アドレスを適用したメモリアクセスにより、各ラウンドのＦ関数に対応するＦ関数対応テーブルを読み込み、テーブル参照に基づいて入力値に対する出力値または中間値を取得して、各Ｆ関数に従ったデータ変換結果を得る構成であることを特徴とする暗号処理装置。
【請求項２】
前記データ処理部は、
各ラウンドのＦ関数中の線形変換処理に適用する変換行列として、少なくとも２以上の異なる行列を設定した少なくとも２以上の異なるＦ関数を選択的に適用する拡散行列切り替え機構（ＤＳＭ：Ｄｉｆｆｕｓｉｏｎ  Ｓｗｉｔｃｈｉｎｇ  Ｍｅｃｈａｎｉｓｍ）を持つＦｅｉｓｔｅｌ構造に従った暗号処理を実行する構成であることを特徴とする請求項１に記載の暗号処理装置。
【請求項３】
前記データ処理部は、
暗号処理対象データを２分割したデータ系列数（分割数）ｄ＝２の設定に従って暗号処理を実行するＦｅｉｓｔｅｌ構造に基づく暗号処理を実行する構成であることを特徴とする請求項１に記載の暗号処理装置。
【請求項４】
前記データ処理部は、
暗号処理対象データを３以上に分割したデータ系列数（分割数）ｄ≧３の設定に従って暗号処理を実行する拡張型Ｆｅｉｓｔｅｌ構造に基づく暗号処理を実行する構成であることを特徴とする請求項１に記載の暗号処理装置。
【請求項５】
前記データ処理部は、
予め設定された暗号関数を実行し、該暗号関数の実行に際して、各ラウンドにおいて適用するＦ関数に対応するＦ関数対応テーブルのアクセス用アドレスを、各ラウンド毎に適宜切り替えて各ラウンドのＦ関数に対応するＦ関数対応テーブルを読み込み、テーブル参照に基づいて入力値に対する出力値または中間値を取得して、各Ｆ関数に従ったデータ変換結果を得る構成であることを特徴とする請求項１に記載の暗号処理装置。
【請求項６】
前記メモリは、
各Ｆ関数に対する入力値または入力値の構成データと、Ｆ関数の出力値または中間値、またはこれらの構成データとを対応付けたＦ関数対応テーブルを格納した構成であることを特徴とする請求項１に記載の暗号処理装置。
【請求項７】
暗号処理装置において、Ｆｅｉｓｔｅｌ型共通鍵ブロック暗号処理を実行する暗号処理方法であり、
データ処理部において、ラウンド関数として少なくとも２種類以上の異なるＦ関数を選択的に適用して、複数ラウンドのラウンド演算を実行するデータ処理ステップを有し、
前記データ処理ステップは、
予め規定された暗号処理シーケンスに従って、各ラウンドにおいて適用するＦ関数に対応するＦ関数対応テーブルのアクセス用アドレスを取得するステップと、
前記取得アドレスを適用したメモリアクセスを実行し、前記２種類以上の異なるＦ関数の各々に対応する入力値と出力値または中間値とを対応付けた複数のＦ関数対応テーブルを格納したメモリから、各ラウンドのＦ関数に対応するＦ関数対応テーブルを読み込むステップと、
メモリから読み込まれたテーブルを参照し、Ｆ関数入力値に対する出力値または中間値を取得して、各Ｆ関数に従ったデータ変換結果を得るステップと、
を有することを特徴とする暗号処理方法。
【請求項８】
暗号処理装置において、Ｆｅｉｓｔｅｌ型共通鍵ブロック暗号処理を実行させるコンピュータ・プログラムであり、
データ処理部に、ラウンド関数として少なくとも２種類以上の異なるＦ関数を選択的に適用して、複数ラウンドのラウンド演算を実行させるデータ処理ステップを有し、
前記データ処理ステップは、
予め規定された暗号処理シーケンスに従って、各ラウンドにおいて適用するＦ関数に対応するＦ関数対応テーブルのアクセス用アドレスを取得させるステップと、
前記取得アドレスを適用したメモリアクセスを実行させ、前記２種類以上の異なるＦ関数の各々に対応する入力値と出力値または中間値とを対応付けた複数のＦ関数対応テーブルを格納したメモリから、各ラウンドのＦ関数に対応するＦ関数対応テーブルを読み込ませるステップと、
メモリから読み込まれたテーブルを参照させ、Ｆ関数入力値に対する出力値または中間値を取得して、各Ｆ関数に従ったデータ変換結果を取得させるステップと、
を実行させるステップであることを特徴とするコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラムに関する。さらに詳細には、Ｆｅｉｓｔｅｌ型共通鍵ブロック暗号処理を実行する暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラムに関する。
【背景技術】
【０００２】
昨今、ネットワーク通信、電子商取引の発展に伴い、通信におけるセキュリティ確保が重要な問題となっている。セキュリティ確保の１つの方法が暗号技術であり、現在、様々な暗号化手法を用いた通信が実際に行なわれている。
【０００３】
例えばＩＣカード等の小型の装置中に暗号処理モジュールを埋め込み、ＩＣカードと、データ読み取り書き込み装置としてのリーダライタとの間でデータ送受信を行ない、認証処理、あるいは送受信データの暗号化、復号を行なうシステムが実用化されている。
【０００４】
暗号処理アルゴリズムには様々なものがあるが、大きく分類すると、暗号化鍵と復号鍵を異なる鍵、例えば公開鍵と秘密鍵として設定する公開鍵暗号方式と、暗号化鍵と復号鍵を共通の鍵として設定する共通鍵暗号方式とに分類される。
【０００５】
共通鍵暗号方式にも様々なアルゴリズムがあるが、その１つに共通鍵をベースとして複数の鍵を生成して、生成した複数の鍵を用いてブロック単位（６４ビット，１２８ビットなど）のデータ変換処理を繰り返し実行する方式がある。このような鍵生成方式とデータ変換処理を適用したアルゴリズムの代表的なものが共通鍵ブロック暗号方式である。
【０００６】
代表的な共通鍵ブロック暗号のアルゴリズムとしては、例えば過去に米国標準暗号であったＤＥＳ（Data Encryption Standard）アルゴリズム、現在の米国標準暗号であるＡＥＳ（Advanced Encryption Standard）アルゴリズムなどが知られている。
【０００７】
このような、共通鍵ブロック暗号のアルゴリズムは、主として、入力データの変換を繰り返し実行するＦ関数部を有するラウンド関数部と、ラウンド関数部の各ラウンドにおけるＦ関数部で適用するラウンド鍵を生成する鍵スケジュール部とによって構成される。鍵スケジュール部は、秘密鍵であるマスター鍵（主鍵）に基づいて、まずビット数を増加させた拡大鍵を生成し、生成した拡大鍵に基づいて、ラウンド関数部の各ラウンドのＦ関数部で適用するラウンド鍵（副鍵）を生成する。
【０００８】
このようなラウンド関数（Ｆ関数）を適用したアルゴリズムを実行する具体的な構造として、Ｆｅｉｓｔｅｌ構造が知られている。Ｆｅｉｓｔｅｌ構造は、データ変換関数としてのラウンド関数（Ｆ関数）の単純な繰り返しにより、平文を暗号文に変換する構造を持つ。Ｆｅｉｓｔｅｌ構造を適用した暗号処理について記載した文献としては、例えば非特許文献１、非特許文献２がある。
【０００９】
しかし、このＦｅｉｓｔｅｌ構造を適用する共通鍵ブロック暗号処理の問題点として、暗号解析による鍵の漏洩がある。暗号解析または攻撃手法の代表的な手法として、ある差分を持つ入力データ（平文）とその出力データ（暗号文）を多数解析することにより各ラウンド関数における適用鍵を解析する差分解析（差分解読法または差分攻撃とも呼ばれる）や、平文と対応暗号文に基づく解析を行う線形解析（線形解読法または線形攻撃とも呼ばれる）が知られている。
【００１０】
暗号解析による鍵の解析が容易であるということは、その暗号処理の安全性が低いということになる。従来の暗号アルゴリズムにおいては、ラウンド関数（Ｆ関数）部の線形変換部において適用する処理（変換行列）が、各段のラウンドにおいて等しいものであったため解析が行いやすく、結果として鍵の解析の容易性を招いていた。
【００１１】
このような問題に対処する構成として、Ｆｅｉｓｔｅｌ構造のラウンド関数（Ｆ関数）部の線形変換部に２つ以上の異なる行列を各ラウンド毎に切り替えるように配置する構成が提案された。この技術は拡散行列切り替え機構（ＤＳＭ：Ｄｉｆｆｕｓｉｏｎ  Ｓｗｉｔｃｈｉｎｇ  Ｍｅｃｈａｎｉｓｍ，以下ＤＳＭ）と呼ばれる。このＤＳＭにより、差分攻撃や線形攻撃に対する耐性を向上させることが可能となる。この拡散行列切り替え機構（ＤＳＭ）を適用した暗号処理構成については、例えば特許文献１に記載されている。
【００１２】
しかし、拡散行列切り替え機構（ＤＳＭ）を適用した暗号処理を実行する場合には、異なる行列を設定した異なるラウンド関数（Ｆ関数）を実装することが必要であり、また、複数のラウンド関数を予め定められてシーケンスに従って切り替えを行なうことが必要であり、新たな制御機構を設けることが必要であり、暗号処理装置を構成する場合に、必要となる構成が増加し、装置の小型化の妨げとなりコスト高になる。また切り替え制御に伴い処理速度が低下するという問題がある。
【特許文献１】特開２００６−７２０５４号
【非特許文献１】K. Nyberg, "Generalized Feistel networks", ASIACRYPT'96, SpringerVerlag, 1996, pp.91--104.
【非特許文献２】Yuliang Zheng, Tsutomu Matsumoto, Hideki Imai: On the Construction of Block Ciphers Provably Secure and Not Relying on Any Unproved Hypotheses. CRYPTO 1989: 461-480
【発明の開示】
【発明が解決しようとする課題】
【００１３】
本発明は、上記問題点に鑑みてなされたものであり、Ｆｅｉｓｔｅｌ構造のラウンド関数（Ｆ関数）部の線形変換部に２つ以上の異なる行列を各ラウンド毎に切り替えるように配置する拡散行列切り替え機構（ＤＳＭ）を適用した暗号処理構成を改良し、実装コストを上昇させずに高速な暗号処理を実行可能とした暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１４】
本発明の第１の側面は、
Ｆｅｉｓｔｅｌ型共通鍵ブロック暗号処理を実行する暗号処理装置であり、
ラウンド関数として少なくとも２種類以上の異なるＦ関数を選択的に適用して、複数ラウンドのラウンド演算を実行するデータ処理部と、
前記２種類以上の異なるＦ関数の各々に対応する入力値と出力値または中間値とを対応付けた複数のＦ関数対応テーブルを格納したメモリを有し、
前記データ処理部は、
予め規定された暗号処理シーケンスに従って、各ラウンドにおいて適用するＦ関数に対応するＦ関数対応テーブルのアクセス用アドレスを取得し、取得アドレスを適用したメモリアクセスにより、各ラウンドのＦ関数に対応するＦ関数対応テーブルを読み込み、テーブル参照に基づいて入力値に対する出力値または中間値を取得して、各Ｆ関数に従ったデータ変換結果を得る構成であることを特徴とする暗号処理装置にある。
【００１５】
さらに、本発明の暗号処理装置の一実施態様において、前記データ処理部は、各ラウンドのＦ関数中の線形変換処理に適用する変換行列として、少なくとも２以上の異なる行列を設定した少なくとも２以上の異なるＦ関数を選択的に適用する拡散行列切り替え機構（ＤＳＭ：Ｄｉｆｆｕｓｉｏｎ  Ｓｗｉｔｃｈｉｎｇ  Ｍｅｃｈａｎｉｓｍ）を持つＦｅｉｓｔｅｌ構造に従った暗号処理を実行する構成であることを特徴とする。
【００１６】
さらに、本発明の暗号処理装置の一実施態様において、前記データ処理部は、暗号処理対象データを２分割したデータ系列数（分割数）ｄ＝２の設定に従って暗号処理を実行するＦｅｉｓｔｅｌ構造に基づく暗号処理を実行する構成であることを特徴とする。
【００１７】
さらに、本発明の暗号処理装置の一実施態様において、前記データ処理部は、暗号処理対象データを３以上に分割したデータ系列数（分割数）ｄ≧３の設定に従って暗号処理を実行する拡張型Ｆｅｉｓｔｅｌ構造に基づく暗号処理を実行する構成であることを特徴とする。
【００１８】
さらに、本発明の暗号処理装置の一実施態様において、前記データ処理部は、予め設定された暗号関数を実行し、該暗号関数の実行に際して、各ラウンドにおいて適用するＦ関数に対応するＦ関数対応テーブルのアクセス用アドレスを、各ラウンド毎に適宜切り替えて各ラウンドのＦ関数に対応するＦ関数対応テーブルを読み込み、テーブル参照に基づいて入力値に対する出力値または中間値を取得して、各Ｆ関数に従ったデータ変換結果を得る構成であることを特徴とする。
【００１９】
さらに、本発明の暗号処理装置の一実施態様において、前記メモリは、各Ｆ関数に対する入力値または入力値の構成データと、Ｆ関数の出力値または中間値、またはこれらの構成データとを対応付けたＦ関数対応テーブルを格納した構成であることを特徴とする。
【００２０】
さらに、本発明の第２の側面は、
暗号処理装置において、Ｆｅｉｓｔｅｌ型共通鍵ブロック暗号処理を実行する暗号処理方法であり、
データ処理部において、ラウンド関数として少なくとも２種類以上の異なるＦ関数を選択的に適用して、複数ラウンドのラウンド演算を実行するデータ処理ステップを有し、
前記データ処理ステップは、
予め規定された暗号処理シーケンスに従って、各ラウンドにおいて適用するＦ関数に対応するＦ関数対応テーブルのアクセス用アドレスを取得するステップと、
前記取得アドレスを適用したメモリアクセスを実行し、前記２種類以上の異なるＦ関数の各々に対応する入力値と出力値または中間値とを対応付けた複数のＦ関数対応テーブルを格納したメモリから、各ラウンドのＦ関数に対応するＦ関数対応テーブルを読み込むステップと、
メモリから読み込まれたテーブルを参照し、Ｆ関数入力値に対する出力値または中間値を取得して、各Ｆ関数に従ったデータ変換結果を得るステップと、
を有することを特徴とする暗号処理方法にある。
【００２１】
さらに、本発明の第３の側面は、
暗号処理装置において、Ｆｅｉｓｔｅｌ型共通鍵ブロック暗号処理を実行させるコンピュータ・プログラムであり、
データ処理部に、ラウンド関数として少なくとも２種類以上の異なるＦ関数を選択的に適用して、複数ラウンドのラウンド演算を実行させるデータ処理ステップを有し、
前記データ処理ステップは、
予め規定された暗号処理シーケンスに従って、各ラウンドにおいて適用するＦ関数に対応するＦ関数対応テーブルのアクセス用アドレスを取得させるステップと、
前記取得アドレスを適用したメモリアクセスを実行させ、前記２種類以上の異なるＦ関数の各々に対応する入力値と出力値または中間値とを対応付けた複数のＦ関数対応テーブルを格納したメモリから、各ラウンドのＦ関数に対応するＦ関数対応テーブルを読み込ませるステップと、
メモリから読み込まれたテーブルを参照させ、Ｆ関数入力値に対する出力値または中間値を取得して、各Ｆ関数に従ったデータ変換結果を取得させるステップと、
を実行させるステップであることを特徴とするコンピュータ・プログラムにある。
【００２２】
なお、本発明のコンピュータ・プログラムは、例えば、様々なプログラム・コードを実行可能なコンピュータ・システムに対して、コンピュータ可読な形式で提供する記憶媒体、通信媒体、例えば、ＣＤやＦＤ、ＭＯなどの記録媒体、あるいは、ネットワークなどの通信媒体によって提供可能なコンピュータ・プログラムである。このようなプログラムをコンピュータ可読な形式で提供することにより、コンピュータ・システム上でプログラムに応じた処理が実現される。
【００２３】
本発明のさらに他の目的、特徴や利点は、後述する本発明の実施例や添付する図面に基づくより詳細な説明によって明らかになるであろう。なお、本明細書においてシステムとは、複数の装置の論理的集合構成であり、各構成の装置が同一筐体内にあるものには限らない。
【発明の効果】
【００２４】
本発明の一実施例の構成によれば、ラウンド関数として少なくとも２種類以上の異なるＦ関数を選択的に適用したラウンド演算による暗号処理を実行する構成において、Ｆ関数の各々に対応する入力値と出力値または中間値とを対応付けた複数のＦ関数対応テーブルをメモリに格納し、予め規定された暗号処理シーケンスに従って、各ラウンドのＦ関数に対応するテーブルアクセス用アドレスを適用してメモリからＦ関数対応テーブルを読み込み、テーブル参照に基づいて入力値に対する出力値または中間値を取得して、各Ｆ関数に従ったデータ変換結果を得る。本構成によれば、各ラウンドに対応して変更されるアドレスに従って各Ｆ関数対応テーブルを取得して、入力値に対応する出力値を効率的に取得または算出可能となる。例えば、１つの暗号関数を適用して引数を変更するのみで、様々な暗号処理を実行することが可能となる。
【発明を実施するための最良の形態】
【００２５】
以下、本発明の暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラムの詳細について説明する。説明は、以下の項目に従って行なう。
１．ＳＰＮ型Ｆｅｉｓｔｅｌ構造
２．２つのデータ系列を持つＦｅｉｓｔｅｌ構造に対する拡散行列切り替え機構（ＤＳＭ）の設定構成
３．拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ：Ｇｅｎｅｒａｌｉｚｅｄ  Ｆｅｉｓｔｅｌ  Ｎｅｔｗｏｒｋ）に対する拡散行列切り替え機構（ＤＳＭ）の設定構成
４．異なる線形変換行列を適用した異なるラウンド関数のテーブル実装による処理構成
５．暗号処理装置の構成例
【００２６】
［１．ＳＰＮ型Ｆｅｉｓｔｅｌ構造］
まず、ＳＰＮ（Ｓｕｂｓｔｉｔｕｔｉｏｎ  Ｐｅｒｍｕｔａｔｉｏｎ  Ｎｅｔｗｏｒｋ））型Ｆｅｉｓｔｅｌ構造について説明する。共通鍵ブロック暗号のデザインとして知られているＦｅｉｓｔｅｌ構造はラウンド関数と呼ばれる基本処理単位の繰り返しにより、平文を暗号文に変換する構造を持つ。
【００２７】
図１を参照して、Ｆｅｉｓｔｅｌ構造の基本構成について説明する。図１には、ｒラウンドのラウンド数＝ｒを持つ２つのデータ系列を持つＦｅｉｓｔｅｌ構造の例を示している。なお、ラウンド数ｒは、設計の段階で決定されるパラメータであり、例えば入力される鍵の長さに応じて変更可能な値である。
【００２８】
図１に示すＦｅｉｓｔｅｌ構造において、暗号化対象として入力される平文の長さを２ｍｎビットとする。ただし、ｍ，ｎは共に整数である。初めに、２ｍｎビットの平文を、ｍｎビットの２つの入力データＰ［０］１０１，Ｐ［１］１０２に分割し、これを入力値とする。図に示す例は、入力値を２分割する構成であり、データ系列数（分割数）＝２の構成例である。
【００２９】
Ｆｅｉｓｔｅｌ構造はラウンド関数とよばれる基本処理単位の繰り返しで表現され、各ラウンドに含まれるデータ変換関数はラウンド関数（Ｆ関数）１２０と呼ばれる。図１の構成では、ラウンド関数１２０がｒ段繰り返された構成例を示している。
【００３０】
例えば第１番目のラウンドでは、ｍｎビットの入力データＸと、図示しない鍵スケジュール部（鍵生成部）から入力されるｍｎビットのラウンド鍵ＲＫ１１０３がＦ関数１２０に入力され、ラウンド関数（Ｆ関数）１２０におけるデータ変換処理の後にｍｎビットのデータＹを出力する。出力はもう片方の前段からの入力データ（第１段の場合は入力データＰＬ）と排他的論理和部１０４において、排他的論理和演算がなされ、ｍｎビットの演算結果が次のラウンド関数へと出力される。この処理、すなわちラウンド関数（Ｆ関数）を定められたラウンド数（ｒ）だけ繰り返し適用して暗号化処理が完了し、暗号文の分割データＣ［０］、Ｃ［１］が出力される。各ラウンドにおいて実行されるラウンド関数（Ｆ関数）が同一構成であるＦｅｉｓｔｅｌ構造の復号処理はラウンド鍵を挿入する順序を逆にするだけでよく、逆関数を構成する必要がない。
【００３１】
各ラウンドの関数として設定されるラウンド関数（Ｆ関数）１２０の構成について、図２を参照して説明する。図２（ａ）は、１つのラウンドにおけるラウンド関数（Ｆ関数）１２０に対する入力および出力を示す図であり、図２（ｂ）は、ラウンド関数（Ｆ関数）１２０の構成の詳細を示す図である。ラウンド関数（Ｆ関数）１２０は、図２（ｂ）に示すように、非線形変換層（Ｓ層）と線形変換層（Ｐ層）を接続したいわゆるＳＰ型の構成を有する。
【００３２】
図２に示すラウンド関数（Ｆ関数）１２０は、入出力ビット長がｍ×ｎ（ｍ，ｎ：整数）ビットの設定を持つ関数である。ＳＰ型Ｆ関数内部では初めに鍵データＫｉとデータＸｉとの排他的論理和が実行され、次に非線形変換層（Ｓ層）が適用され、続いて線形変換層（Ｐ層）が適用される。
【００３３】
具体的には非線形変換層（Ｓ層）は、Ｓボックス（Ｓ−ｂｏｘ）１２１と呼ばれるｎビット入力ｎビット出力の非線形変換テーブルがｍ個並んだものであり、ｍｎビットのデータはｎビットずつ分割されてそれぞれ対応するＳボックス（Ｓ−ｂｏｘ）１２１に入力されデータが変換される。各Ｓボックスでは、例えば変換テーブルを適用した非線形変換処理が実行される。
【００３４】
線形変換層（Ｐ層）は線形変換部１２２によって構成され、線形変換部１２２は、Ｓボックス１２１からの出力データであるｍｎビットの出力値Ｚを入力し、この入力に対して線形変換を施しｍｎビットの結果を出力する。線形変換部１２２は、入力ビット位置の入れ替え処理などの線形変換処理を実行して、ｍｎビットの出力値Ｙを出力する。この出力値Ｙが前段からの入力データと排他的論理和され、次のラウンドのＦ関数の入力値とされる。
【００３５】
なお、以下に説明する本実施例の構成では、線形変換層（Ｐ層）としての線形変換部１２２において実行する線形変換はＧＦ（２ｎ）上で定義されるｍｎ×ｍｎの行列を適用して行なわれる線形変換であると定義し、また、第ｉラウンド目に含まれる行列をＭｉと呼ぶものとする。
【００３６】
ラウンド数ｒとしたＳＰＮ型Ｆｅｉｓｔｅｌ構造は、図３に示すような構成となる。ｎ−ｂｉｔの平文ＰはＰ［０］とＰ［１］に１／２に分割され、Ｐ［０］にラウンド鍵ＲＫ１が入力されたラウンド関数Ｆ０を適用し、その結果とＰ［１］との排他的論理和演算（ＥＸＯＲ）を実行する。この結果を次のラウンドの左入力、Ｐ［０］を右入力とする。以降規定の回数（ｒ回）ラウンド関数を繰り返し適用し、最終出力Ｃを得る。この構成は全てのラウンドでラウンド関数（Ｆ関数）は同じものである。
【００３７】
ラウンド関数Ｆ０内では、まずラウンド関数に入力されたデータがラウンド鍵と排他的論理和演算（ＥＸＯＲ）がなされる。その結果を、Ｘ（ｎ／２−ｂｉｔ）とする。Ｘはｍ個のｓ−ｂｉｔデータに分割される。これをそれぞれｘ１，ｘ２，・・・，ｘｍとする（Ｘ＝（ｘ１｜｜ｘ２｜｜・・・｜｜ｘｍ））である。なお、ａ｜｜ｂはａとｂの連結データを示す。
【００３８】
各分割データｘｉはそれぞれｓ−ｂｉｔ入出力の非線形変換Ｓ、すなわちＳボックス（Ｓ−ｂｏｘ）に入力される。Ｓ−ｂｏｘの出力をそれぞれｚ１，ｚ２，・・・，ｚｍとおく（Ｚ＝ｚ１｜｜ｚ２｜｜・・・｜｜ｚｍ）。Ｚは、さらに、線形変換部に入力され、ｍ×ｍ行列Ｍ０を適用した行列演算を施され、最終出力Ｙを得る。
【００３９】
このように、Ｆｅｉｓｔｅｌ構造は、データ変換関数としてのラウンド関数（Ｆ関数）の単純な繰り返しにより、平文を暗号文に変換する構造を持つ。しかし、このＦｅｉｓｔｅｌ構造を適用する共通鍵ブロック暗号処理の問題点として、暗号解析による鍵の漏洩がある。例えば、差分解析（差分解読法または差分攻撃とも呼ばれる）や、平文と対応暗号文に基づく解析を行う線形解析（線形解読法または線形攻撃とも呼ばれる）による解析がなされる恐れがある。暗号解析による鍵の解析が容易であるということは、その暗号処理の安全性が低いということになる。
【００４０】
［２．２つのデータ系列を持つＦｅｉｓｔｅｌ構造に対する拡散行列切り替え機構（ＤＳＭ）の設定構成］
先に説明したように、Ｆｅｉｓｔｅｌ構造を適用した暗号処理において、差分攻撃や線形攻撃に対する耐性を高める構成として、拡散行列切り替え機構（ＤＳＭ：Ｄｉｆｆｕｓｉｏｎ  Ｓｗｉｔｃｈｉｎｇ  Ｍｅｃｈａｎｉｓｍ，以下ＤＳＭ）を適用した構成が提案されている。この拡散行列切り替え機構（ＤＳＭ）を適用した暗号処理構成については、例えば特開２００６−７２０５４号に記載されている。ＤＳＭは、Ｆｅｉｓｔｅｌ構造のラウンド関数（Ｆ関数）部の線形変換部において適用する行列をすべてのラウンドで同一とするのではなく、少なくとも２つ以上の異なる行列を各ラウンドに配置する構成である。このＤＳＭにより、差分攻撃や線形攻撃に対する耐性を向上させることが可能となる。
【００４１】
このＤＳＭについて、その概要を説明する。Ｆｅｉｓｔｅｌ構造において、拡散行列切り替え機構（ＤＳＭ）を適用した場合、Ｆｅｉｓｔｅｌ構造を構成するラウンド関数（Ｆ関数）部の線形変換部（Ｐ層）において適用する行列は、複数の異なる行列となる。例えば、図１や図３に示すようなｒラウンドのＦｅｉｓｔｅｌ構造の各ラウンドにおける適用行列を全て同じ線形変換行列として設定するのではなく、少なくとも２種類以上の行列を特定の規則に従って配列する。
【００４２】
例えば、各ラウンドのラウンド関数（Ｆ関数）の線形変換層に２つの異なる線形変換行列Ｍ０，Ｍ１を配置した拡散行列切り替え機構（ＤＳＭ）を実現したＦｅｉｓｔｅｌ構造例を図４に示す。図４に示すＦｅｉｓｔｅｌ構造例において、
Ｆ関数Ｆ０は、線形変換行列Ｍ０を適用した線形変換処理を実行するラウンド関数（Ｆ関数）、
Ｆ関数Ｆ１は、線形変換行列Ｍ１を適用した線形変換処理を実行するラウンド関数（Ｆ関数）、
を示している。
２つの線形変換行列Ｍ０，Ｍ１は、異なる行列によって構成される。
【００４３】
なお、拡散行列切り替え機構（ＤＳＭ）を実現するためには、適用する行列は、所定の条件を満たすことが必要となる。この条件の１つが、分岐数（Ｂｒａｎｃｈ）に関する制約である。以下、この制約について説明する。
【００４４】
Ｆｅｉｓｔｅｌ構造におけるラウンド関数部の線形変換に適用する複数の異なる行列Ｍ０〜Ｍｎそれぞれの分岐数において、
適用行列中の分岐数の最小値：Ｂ１Ｄと、
適用する複数の行列の結合行列に対応する分岐数の最小値：Ｂ２Ｄ，Ｂ３Ｄ，Ｂ２Ｌ
を以下のように定義する。
【数１】
2008058829.tif 000003
【００４５】
上記式において、
Ｍｉは、Ｆｅｉｓｔｅｌ構造における第ｉラウンドの線形変換処理に適用する線形変換行列を示し、
［Ｍｉ｜Ｍｉ＋２｜・・］は、Ｍｉ｜Ｍｉ＋２｜・・各行列の連結により得られる結合行列を示し、
ｔＭは、行列Ｍの転置行列、Ｍ−１は、行列Ｍの逆行列を示す。
【００４６】
上記式において、：Ｂ２Ｄ，Ｂ３Ｄ，Ｂ２Ｌは、具体的には、Ｆｅｉｓｔｅｌ構造における１つ飛びで連続する２ラウンドもしくは３ラウンドのＦ関数に含まれる行列を結合した行列の分岐数の最小値を表している。
【００４７】
例えば、上記の各分岐数が以下の条件、すなわち、
Ｂ２Ｄ≧３，  Ｂ３Ｄ≧３，  Ｂ２Ｌ≧３、
上記条件を満足させるように各行列を設定することで、Ｆｅｉｓｔｅｌ構造において、差分攻撃や線形攻撃に対する耐性を向上させることが出来ることが知られている。
なお、Ｂ１Ｄ，Ｂ２Ｄ，Ｂ３Ｄ，Ｂ２Ｌにおける各添え字は以下の意味を持つものである。
ＢｎＤのｎは結合する行列数、ＢｎＤのＤは差分攻撃（Ｄｉｆｆｅｒｅｎｔｉａｌ  Ａｔｔａｃｋ）に対する耐性を持つための条件であることを示し、ＢｎＬのＬは線形攻撃（Ｌｉｎｅａｒ  Ａｔｔａｃｋ）に対する耐性を持つための条件であることを示している。
【００４８】
このように、各ラウンドのラウンド関数（Ｆ関数）の線形変換層に２つ以上の異なる線形変換行列を配置した拡散行列切り替え機構（ＤＳＭ）を適用することで差分攻撃や線形攻撃に対する耐性を向上させることが可能となる。
【００４９】
図４に示す構成では、２つの異なる行列Ｍ０，Ｍ１を適用し、線形変換行列Ｍ０を適用した線形変換処理を実行するラウンド関数（Ｆ関数）Ｆ０と、線形変換行列Ｍ１を適用した線形変換処理を実行するラウンド関数（Ｆ関数）Ｆ１とによって構成されるＦｅｉｓｔｅｌ構造であるが、適用する異なる線形変換行列の数は２に限らず、３，４・・種類の行列を適用する構成とすることができる。
【００５０】
図５に３つの行列Ｍ０，Ｍ１，Ｍ２を適用したＦｅｉｓｔｅｌ構造例を示す。図５に示すＦｅｉｓｔｅｌ構造例において、
Ｆ関数Ｆ０は、線形変換行列Ｍ０を適用した線形変換処理を実行するラウンド関数（Ｆ関数）、
Ｆ関数Ｆ１は、線形変換行列Ｍ１を適用した線形変換処理を実行するラウンド関数（Ｆ関数）、
Ｆ関数Ｆ２は、線形変換行列Ｍ２を適用した線形変換処理を実行するラウンド関数（Ｆ関数）、
を示している。
３つの線形変換行列Ｍ０，Ｍ１，Ｍ２は、異なる行列によって構成される。
【００５１】
このように、拡散行列切り替え機構（ＤＳＭ）は、異なる線形変換処理を実行する複数の異なる線形変換行列Ｍ０，Ｍ１，・・を各ラウンドのラウンド関数（Ｆ関数）の線形変換層に配置してラウンド関数を実行させるものであり、この構成により差分攻撃や線形攻撃に対する耐性を向上させることが可能となる。
【００５２】
［３．拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ：Ｇｅｎｅｒａｌｉｚｅｄ  Ｆｅｉｓｔｅｌ  Ｎｅｔｗｏｒｋ）に対する拡散行列切り替え機構（ＤＳＭ）の設定構成］
次に、拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ：Ｇｅｎｅｒａｌｉｚｅｄ  Ｆｅｉｓｔｅｌ  Ｎｅｔｗｏｒｋ）について説明する。図１〜図５を参照して説明したＦｅｉｓｔｅｌ構造は、入力データＰを２つのデータ系列Ｐ［０］，Ｐ［１］に分割して処理を実行する構成である。入力データの分割数をデータ系列数（分割数）と呼ぶ。図１〜図５を参照して説明したＦｅｉｓｔｅｌ構造は、データ系列数（分割数）ｄ＝２の設定である。
【００５３】
Ｆｅｉｓｔｅｌ構造を適用した暗号処理では、データ系列数（分割数）ｄは３以上の数に設定することが可能であり、データ系列数（分割数）を３以上の任意数：ｄとしたＦｅｉｓｔｅｌ構造を拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ：Ｇｅｎｅｒａｌｉｚｅｄ  Ｆｅｉｓｔｅｌ  Ｎｅｔｗｏｒｋ）と定義する。このような拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）においても、拡散行列切り替え機構（ＤＳＭ）の適用が可能であり、拡散行列切り替え機構（ＤＳＭ）の適用により暗号攻撃に対する耐性を向上させることができる。
【００５４】
拡散行列切り替え機構（ＤＳＭ）を持つ拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）を持つ暗号化関数の構成例を図６に示す。図６に示す例は、データ系列数（分割数）ｄを、ｄ＝４とした拡散行列切り替え機構（ＤＳＭ）を持つ拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）の暗号化関数の構成例である。
【００５５】
拡散行列切り替え機構（ＤＳＭ）を持つ拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）は、前述したように、Ｆｅｉｓｔｅｌ構造のラウンド関数（Ｆ関数）部の線形変換部に２つ以上の異なる行列を各ラウンド毎に切り替えるように配置する構成としたものである。ＤＳＭにより、差分攻撃や線形攻撃に対する耐性を向上させることが可能となる。図６に示す例では、Ｆ関数Ｆ０と、Ｆ関数Ｆ１とでは、それぞれ異なる線形変換行列を適用したデータ変換を実行する構成となっている。なお、これらＦ関数において適用する線形変換行列は、ある特定の条件を満足する行列に設定することで、差分攻撃や線形攻撃に対する耐性を大きく向上させることが可能となる。この構成については、本出願人が先に出願した特願２００６−２０６３７６号において詳細に説明している。
【００５６】
図６に示す暗号化関数の構成において、入力は、平文Ｐであり、平文ＰはＰ［０］，Ｐ［１］，Ｐ［２］，Ｐ［３］の４つのデータ系列（分割数＝４）に分割され、順次、各ラウンドにおいてＦ関数Ｆ０、またはＦ関数Ｆ１を適用したデータ変換が実行されて、ｒラウンドの変換結果として暗号文Ｃを構成するＣ［０］，Ｃ［１］，Ｃ［２］，Ｃ［３］を出力する。各ラウンドのＦ関数Ｆ０、またはＦ関数Ｆ１では、図示しない鍵スケジュール部から供給されるマスター鍵（主鍵）に基づいて生成された拡大鍵の構成要素としてのラウンド鍵（副鍵）のＲＫｉ［０］，ＲＫｉ［１］が入力され、データ変換に適用される。なお、鍵ＲＫｉ［ｎ］のｉはラウンドを示し、ｎは、同一ラウンドにおけるラウンド鍵の識別子を示す。
【００５７】
図６に示すように、拡散行列切り替え機構（ＤＳＭ）を持つ拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）においては、各ラウンドの切り替え部分では、各データ系列を入れ替えるスワップ処理が実行される。図６に示すようにスワップ関数２１１は、各ラウンドの切り替え時に、各データ系列の出力に対して適用され、各データ系列の出力に対応する次のラウンドにおける入力系列を設定する。
【００５８】
図６において、データ系列を、図６上段に示すように左からデータ系列０，１，２，３としたとき、先行ラウンドの４つの系列の出力と、後続ラウンドに対する入力系列の入れ替えがスワップ関数２１１によって以下のように切り替えられる。
先行ラウンドのデータ系列０の出力は後続ラウンドにおけるデータ系列３の入力として設定される。
先行ラウンドのデータ系列１の出力は後続ラウンドにおけるデータ系列０の入力として設定される。
先行ラウンドのデータ系列２の出力は後続ラウンドにおけるデータ系列１の入力として設定される。
先行ラウンドのデータ系列３の出力は後続ラウンドにおけるデータ系列２の入力として設定される。
このような系列入れ替え処理を実行する関数が暗号化処理において適用されるスワップ関数である。
【００５９】
データ系列数（分割数）ｄ＝３以上の任意数を持つ拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）では、各ラウンドにおいて、１つ以上のラウンド関数が実行され、その後、系列切り替え処理が行なわれて、後続するラウンド関数が実行されるという処理を繰り返すことになる。
【００６０】
このようなデータ系列数（分割数）ｄ＝３以上の任意数を持つ拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）においても、ラウンド関数（Ｆ関数）において適用する線形変換行列を、ある特定の条件を満足する異なる行列として設定することで、差分攻撃や線形攻撃に対する耐性を大きく向上させることが可能となる。
【００６１】
［４．異なる線形変換行列を適用した異なるラウンド関数のテーブル実装による処理構成］
上述したような、拡散行列切り替え機構（ＤＳＭ）を採用したＦｅｉｓｔｅｌ構造または拡張型Ｆｅｉｓｔｅｌ構造を適用した暗号処理構成は、差分攻撃や線形攻撃に対する耐性を大きく向上させるという利点があるが、一方、次のような問題がある。すなわち、
異なる行列を設定した異なるラウンド関数（Ｆ関数）を実装することが必要、
複数のラウンド関数を予め定められてシーケンスに従って切り替えを行なう新たな制御機構を設けることが必要、
従って、暗号処理装置を構成する場合に、必要となる構成が増加し、装置の小型化の妨げとなりコスト高になる。また切り替え制御に伴い処理速度が低下するという問題がある。
【００６２】
以下では、このような問題を解決する構成について説明する。すなわち、異なる線形変換行列を適用した異なるラウンド関数のテーブル実装による処理構成である。
【００６３】
ラウンド関数（Ｆ関数）を持つ共通鍵暗号の実装構成としては、ソフトウェア、ハードウェアを適用した様々な構成が可能である。Ｆ関数の処理構成としては非線形変換部としてのＳ−ｂｏｘと、線形変換部としての行列演算部が必要となるが、それぞれ論理回路によるハードウェア構成や、テーブル変換表を用いた構成が可能である。高速動作を要求される場合は、テーブル（表引き）実装と呼ばれる手法が最適である。
【００６４】
表引き（テーブル）実装は、実際の演算は行わず、様々な入力に対応する予め計算済みの演算結果をテーブル（置換表）でメモリ空間に保持し、テーブルを参照することによって、求めたい出力値を得る実装手法である。例えば、
ｆ（ｘ）＝ｘ３
といった計算を行いたい場合には、以下のような値を持つｆｔａｂというテーブル（置換表）を持つことにより、実際のｘ３の計算を行わずともｆｔａｂの中身を参照することで、ｘ３の結果を得ることが可能になる。
ｆｔａｂ［０］＝０（＝０３）、
ｆｔａｂ［１］＝１（＝１３）、
ｆｔａｂ［２］＝８（＝２３）、
ｆｔａｂ［３］＝２７（＝３３）、
ｆｔａｂ［４］＝６４（＝４３）、
・・
上記は、入力値として０，１，２，３，４があるとき、出力として０，１，８，２７，６４を取得する構成を持つテーブルｆｔａｂの例である。
【００６５】
このようにＦ関数が表引き（テーブル）実装構成を適用し、必要となる各Ｆ関数の入力値に対応する出力値を予めテーブルとして用意して、暗号処理装置のメモリに格納する。各Ｆ関数のテーブルは、メモリのテーブル格納位置を示す各アドレスに基づいて取得可能な構成とする。この方法によれば、Ｆ関数の入れ替えは実行速度を落とさずに容易に行うことが可能となる。これを応用して、偶数段のＦ関数のテーブルのアドレスだけを外部から与えるようにすることで、関数を用いずに暗号化関数と復号関数の変更が可能になる。
【００６６】
例えば、１６−ｂｉｔ入出力のＦ関数の入力から出力を求めるためのテーブル構成を図７を参照して説明する。図７（ａ）に示すラウンド関数（Ｆ関数）は、２つのＳ−ｂｏｘ３０１，３０２と、１つの線形変換部３０３を有する構成である。この構成において、入力Ｘ（１６−ｂｉｔ）を８−ｂｉｔごと２つに分割してｘ１、ｘ２とする。
次にｘ１、ｘ２をそれぞれ８−ｂｉｔ入出力の非線形変換処理を実行するＳ−ｂｏｘ３０１，３０２に入力し、出力ｚ１、ｚ２を得る。これらのｚ１、ｚ２に線形変換部３０３において線形変換を施し、その結果ｙ１、ｙ２を得て、これらを連結して最終出力Ｙを得る。例えば、線形変換部３０３における線形変換は以下のように計算される。
【数２】
2008058829.tif 000004
【００６７】
このようなＳ−ｂｏｘにおける非線形処理や、線形変換部における行列演算は、論理回路などにより入力値から出力を求める設定とすることが可能である。
すなわち、Ｓ−ｂｏｘにおける非線形処理演算として、
ｚ１＝Ｓ（ｘ１）
ｚ２＝Ｓ（ｘ２）
上記演算を実行する論理回路を構成し、さらに、線形変換部における演算として、
ｙ１＝ａ０，０ｚ１（ＥＸＯＲ）ａ０，１ｚ２
ｙ２＝ａ１，０ｚ１（ＥＸＯＲ）ａ１，１ｚ２
上記演算を実行する論理回路を構成して、論理回路を適用して結果を求める構成とすることが可能である。しかし、論理回路を構成すると、実装面積が大きくなり、また処理速度も低下するという問題がある。
【００６８】
そこで、演算部分を予め計算し、様々な入力に対応する出力値をテーブルで保持し、テーブル参照により出力を得る処理が高速化には最適となる。例えば、図７に示すラウンド関数では、図７（ｂ）に示すテーブルが利用可能となる。
【００６９】
この例では、ｔを２つのＳ−ｂｏｘ３０１，３０２に対する入力値に相当する変数として、以下の２つのテーブルＴＡＢ０［ｔ］，ＴＡＢ１［ｔ］を適用する。
ＴＡＢ０［ｔ］＝（ａ０、０Ｓ（ｔ）｜｜ａ１、０Ｓ（ｔ））
ＴＡＢ１［ｔ］＝（ａ０、１Ｓ（ｔ）｜｜ａ１、１Ｓ（ｔ））
【００７０】
入力値［ｔ］は２つのＳ−ｂｏｘ３０１，３０２に対する入力値ｘ１，ｘ２に相当する８ビットデータであり、ＴＡＢ０［ｔ］、ＴＡＢ１［ｔ］によってテーブルから取得されるデータ、すなわち、
（ａ０、０Ｓ（ｔ）｜｜ａ１、０Ｓ（ｔ））
（ａ０、１Ｓ（ｔ）｜｜ａ１、１Ｓ（ｔ））
これらは、各々１６ビットデータである。
【００７１】
ＴＡＢ０［ｔ］、ＴＡＢ１［ｔ］によって取得される１６ビットデータに基づいて、最終的なラウンド関数の出力Ｙを求める。出力Ｙは、ＴＡＢ０［］にｘ１を挿入して得られる結果とＴＡＢ１［］にｘ２を挿入して得られる結果とをＥＸＯＲする処理、すなわち、
Ｙ＝ＴＡＢ［ｘ１］（ＥＸＯＲ）ＴＡＢ［ｘ２］
によって算出することができる。
【００７２】
上記の処理をより細かく記述すると以下のようになる。
Ｙ＝（ｙ１｜｜ｙ２）＝（ａ０、０Ｓ（ｘ１）｜｜ａ１、０Ｓ（ｘ１））（ＥＸＯＲ）（ａ０、１Ｓ（ｘ２）｜｜ａ１、１Ｓ（ｘ２））
となる。
【００７３】
このテーブルを利用した手法を適用した場合、テーブルＴＡＢ０［］と、テーブルＴＡＢ１［］の各テーブルの参照処理を各１回実行して、入力ｘ１，ｘ２に対応する出力ＴＡＢ０［ｘ１］、ＴＡＢ０［ｘ２］を求める。すなわち、
ＴＡＢ０［ｘ１］＝（ａ０、０Ｓ（ｘ１）｜｜ａ１、０Ｓ（ｘ１））
ＴＡＢ１［ｘ２］＝（ａ０、１Ｓ（ｘ２）｜｜ａ１、１Ｓ（ｘ２））
次に、これら２つのテーブル取得値、ＴＡＢ０［ｘ１］、ＴＡＢ１［ｘ２］を、１回排他的論理和演算（ＥＸＯＲ）を実行する。
【００７４】
これらの処理によって、１つのラウンド関数の処理結果を得ることができる。つまり、処理としてはテーブル参照が２回と排他的論理和演算（ＥＸＯＲ）が１回だけである。よって、テーブル参照が十分高速に実行できるのであれば、Ｆ関数の処理を非常に高速に行うことができる。
【００７５】
本発明では、先に説明した拡散行列切り替え機構（ＤＳＭ）を採用したＦｅｉｓｔｅｌ構造または拡張型Ｆｅｉｓｔｅｌ構造を適用した暗号処理におけるラウンド演算に、上述のテーブル参照処理を適用した構成を提案する。先に説明したように、拡散行列切り替え機構（ＤＳＭ）は、複数の異なる線形変換行列を適用した異なるラウンド関数（Ｆ関数）を適切に用いることで、単一のＦ関数を用いる手法と比較して飛躍的に安全性を高められる方式である。この方式では、複数の異なるＦ関数を用いるが、その数によって、安全性のパラメータや実装上の特性が変化する。
【００７６】
拡散行列切り替え機構（ＤＳＭ）を用いる場合は、異なるラウンド関数を各ラウンド毎に適用することが必要であり、ラウンド関数（Ｆ関数）の切り替え制御が必要となる。１つの実装構成例としては、例えば３つの異なる線形変換行列を持つ３つの異なるラウンド関数（Ｆ関数）を利用した構成では、Ｆ０、Ｆ１、Ｆ２という３つのＦ関数を用意した設定とする。
【００７７】
この実装構成によれば、ラウンド関数（Ｆ関数）の選択制御により、様々な暗号処理が実現される。例えば、先に図３を参照して説明した１つのみのラウンド関数（Ｆ関数）Ｆ０を利用したＳＰＮ型Ｆｅｉｓｔｅｌ構造による暗号処理を行なう場合、全てのラウンドにおいて、Ｆ関数Ｆ０を呼び出して適用する構成とする。
【００７８】
また、先に図４を参照して説明した２つの異なる線形変換行列Ｍ０、Ｍ１を有する２つのＦ関数Ｆ０、Ｆ１を利用したＤＳＭ適用Ｆｅｉｓｔｅｌ構造に従った暗号処理を行なう場合、各ラウンドにおいて、予め規定されたシーケンスに従って、２つのＦ関数Ｆ０、Ｆ１を呼び出して適用する構成とする。
また、先に図５を参照して説明した３つの異なる線形変換行列Ｍ０、Ｍ１、Ｍ２を有する３つのＦ関数Ｆ０、Ｆ１、Ｆ２を利用したＤＳＭ適用Ｆｅｉｓｔｅｌ構造に従った暗号処理を行なう場合、各ラウンドにおいて、予め規定されたシーケンスに従って、３つのＦ関数Ｆ０、Ｆ１、Ｆ２を呼び出して適用する構成とする。
このように、本体の暗号化部は変更せずとも３つの暗号化関数を１つのプログラムで実行することができる。
以上のようにＦ関数の適時入れ替えができれば、様々な応用が可能であるため、特にＤＳＭにおいては容易にＦ関数の入れ替えができることが望ましい。
【００７９】
この問題を解決するための最も簡易な手法として、Ｆ関数部を関数として外部から入力するような形が考えられる。この手法では複数のＦ関数部を実行する関数を作っておいて、それらを暗号化関数に入力することでＦ関数の切り替えを実現する。しかしながら、この手法では複数のＦ関数を暗号化関数で複数回呼び出す必要がある。一般的に１度の実行時間が非常に短いブロック暗号においては、暗号化関数内で他の関数（この場合Ｆ関数）を複数回呼び出すことは実行速度の大幅な低下を招くと考えられ、その影響は大きい。よって、Ｆ関数部を関数にせずに切り替えられることがより望ましい。
【００８０】
このような問題を解決する構成として、異なる線形変換行列を適用した異なるラウンド関数（Ｆ関数）の各々に対応したテーブルを実装した処理構成について説明する。すなわち、予め装置のメモリ空間に、異なる線形変換行列を適用した異なるラウンド関数（Ｆ関数）に対応する出力値取得用のテーブルを格納する。上述した拡散行列切り替え機構（ＤＳＭ）を適用したＦｅｉｓｔｅｌ構造に従った暗号処理を実行する場合は、各ラウンドにおいて利用するテーブルを適宜切り替えて利用する。すなわち利用するテーブルだけを入れ替えることでＦ関数入れ替えを実現する。
【００８１】
より具体的には、例えば暗号処理を実行する暗号化関数の入力情報として、各ラウンドにおいて適用するラウンド関数（Ｆ関数）対応テーブルの取得用メモリアドレスを設定する。暗号化関数がラウンド関数を実行する場合、各ラウンド対応のメモリアドレスを適用して、メモリから各ラウンドにおいて実行するラウンド関数（Ｆ関数）に対応するテーブルを取得して、所定の入力値に基づいてテーブル設定値を取得する。この処理により、テーブル、つまりメモリのアドレスのみを入れ替えればＦ関数を入れ替えたことと等価になり、高速処理が実現される。すなわち、実際の処理はテーブルのアドレスが変わっただけであるので、実行速度は全く低下しない。
【００８２】
図８、図９を参照して、複数の異なるラウンド関数（Ｆ関数）に対応する複数のテーブルを利用した暗号処理構成について説明する。図８は、本実施例に係る暗号処理装置４００の一構成例を示す図である。暗号処理装置４００は、例えば、上述したＳＰＮ型Ｆｅｉｓｔｅｌ構造を適用した暗号処理、拡散行列切り替え機構（ＤＳＭ）を適用したＦｅｉｓｔｅｌ構造に従った暗号処理などを実行するデータ処理部４１０と、異なる線形変換行列Ｍ０，Ｍ１，・・・を適用したラウンド関数（Ｆ関数）Ｆ０，Ｆ１・・・に対応するテーブルを格納したメモリ４２０を有する。
【００８３】
メモリ４２０は、異なる線形変換行列Ｍ０，Ｍ１，・・・を適用したラウンド関数（Ｆ関数）Ｆ０，Ｆ１・・・に対応するテーブル、すなわち異なるＦ関数Ｆ０，Ｆ１・・・の入力値に対応する出力値または出力値を算出するために必要となる中間値を、各入力値に対応付けて格納した複数のＦ関数対応テーブル４２１，４２２・・４２ｎを保持している。
【００８４】
図９に、メモリ４２０に格納される複数のＦ関数対応テーブル４２１，４２２・・４２ｎの例を示す。Ｆ関数対応テーブル４２１は第１のＦ関数（ラウンド関数）に対応するテーブルであり、第１Ｆ関数に対する各入力値と、入力値に対応する出力値または出力値を算出するために必要となる中間値とが対応付けて設定されている。Ｆ関数対応テーブル４２２は第２のＦ関数（ラウンド関数）に対応するテーブルであり、第２Ｆ関数に対する各入力値と、入力値に対応する出力値または出力値を算出するために必要となる中間値とが対応付けて設定されている。以下、同様に、ｎ個のＦ関数の対応テーブルがメモリ４２０には格納される。
【００８５】
なお、テーブルに格納される入力値は、Ｆ関数全体に対する入力値としてもよいし、Ｆ関数内の各Ｓ−ｂｏｘに対する入力値など、Ｆ関数入力値の部分的な構成値としてもよい。出力値についてもＦ関数の出力値としてもよいし、出力値を算出するための中間値としてもよい。すなわち、メモリ４２０に格納されるＦ関数対応テーブルは、各Ｆ関数に対する入力値または入力値の構成データと、Ｆ関数の出力値または中間値、またはこれらの構成データとを対応付けたテーブルとされる。
【００８６】
これらの各テーブルはアクセス用アドレスを適用して読み出しが可能な構成であり、各テーブルに対応するアドレス、例えば、
第１Ｆ関数対応テーブルアドレス＝［ＦＦ０００００１］
第２Ｆ関数対応テーブルアドレス＝［ＦＦＦ０１２３４］
など、各テーブルの読み込みアドレスが設定され、図８に示すラウンド関数実行部４１１は、各ラウンドにおいて適用するＦ関数に対応するアドレスを適用してテーブル読み出しを実行する。
【００８７】
図８に示すデータ処理部４１０は、ラウンド関数を実行するラウンド関数実行部４１１と、各ラウンドにおいて適用するＦ関数対応テーブルのアクセスに適用する各テーブル対応のメモリアドレスを、ラウンド関数実行部４１１に提供するメモリアドレス提供部４１２と、暗号処理のシーケンス情報を格納した処理シーケンス情報格納部４１３を有する。
【００８８】
処理シーケンス情報格納部は、例えば、先に説明した拡散行列切り替え機構（ＤＳＭ）を適用したＦｅｉｓｔｅｌ構造に従った暗号処理を実行する場合に、各ラウンドで実行するＦ関数のシーケンス情報を格納しており、メモリアドレス提供部４１２は、このシーケンス情報に従って、各ラウンドにおいて参照すべきＦ関数対応テーブルのメモリアドレスを取得して、ラウンド関数実行部４１１に提供する。
【００８９】
ラウンド関数実行部４１１は、実行する暗号シーケンスに従ったラウンド毎に実行するＦ関数に対応するテーブルのアクセス用アドレスをメモリアドレス提供部４１２から受領し、受領アドレスに従って、メモリ４２０のアクセスを実行して、各ラウンドにおいて適用すべきＦ関数対応テーブルを取得して、テーブル参照に基づいて、入力値に対応する出力値（または中間値）を得る。ラウンド関数実行部４１１は、各ラウンドにおいて適用するテーブルの取得を、各ラウンドに対応して変更されるアドレスに従って実行するのみであり、一定の暗号関数において適用する引数として各ラウンド毎のＦ関数対応テーブルのアドレスを逐次設定すればよく、１つの暗号関数を適用して引数を変更するのみで、様々な暗号処理を実行することが可能となる。すなわち、異なるＦ関数の呼び出し処理といったことが不要であり、高速に各ラウンド演算（Ｆ関数）の処理結果を得ることが可能となる。また、この構成では、各ラウンド関数に対応する論理回路等が必要とならず、装置の小型化、実装コストの削減が可能となる。
【００９０】
なお、先に図６を参照して説明したデータ系列数が３以上の任意数に設定可能な拡張型Ｆｅｉｓｔｅｌ構造を適用した暗号処理を実行する構成では、１つのラウンドにおいて複数のラウンド関数（Ｆ関数）が並列に実行されることがある。従って、拡張型Ｆｅｉｓｔｅｌ構造を適用した暗号処理を実行する構成の場合は、ラウンド関数実行部４１１は、複数のラウンド関数（Ｆ関数）を並列実行可能な構成とすることが好ましい。ラウンド関数実行部４１１は、並列に実行するラウンド関数に対応するそれぞれのＦ関数対応テーブルの参照処理を並列に実行する。なお、処理速度は低下するがメモリアクセスはシーケンシャルに行なう構成としてもよい。
【００９１】
なお、図８に示すようなメモリに格納したＦ関数対応テーブルの参照切り替え構成を用いれば、各ラウンドにおいて適用するテーブルの変更をメモリアクセス用のアドレス変更のみで実行できるので、テーブル利用シーケンスの柔軟な変更が可能となる。例えば、先に図５を参照して説明した３つの異なる行列Ｍ０，Ｍ１，Ｍ２を適用したＦｅｉｓｔｅｌ構造による暗号処理においては、図５に示す例では、
Ｆ関数の適用シーケンス＝
Ｆ０→Ｆ２→Ｆ１→Ｆ１→Ｆ２・・・
と設定されているが、
このシーケンスを、例えば以下のように変更する。
Ｆ０の位置にＦ１を設定し、
Ｆ１の位置にＦ２を設定し、
Ｆ２の位置にＦ０を設定する。
このようなＦ関数の利用シーケンスの変更は、各ラウンドにおいて適用するアドレスの変更のみで実現できる。
【００９２】
上記の変更例では、各ラウンドのＦ関数利用シーケンスは、
Ｆ１→Ｆ０→Ｆ２→Ｆ２→Ｆ０・・・
となる。
このようなシーケンスを実現するために必要となる処理は、各ラウンドにおいて適用するＦ関数呼び出しアドレスの順番を変更するのみであり、容易な変更が可能となる。このような異なるＦ関数利用シーケンスに従った暗号処理は、変更前のＦ関数利用シーケンスとは異なる入出力を持ち、かつ安全性としては等価な暗号化関数が構成できる。
【００９３】
なお、拡散行列切り替え機構（ＤＳＭ）では、適用する異なるラウンド関数（Ｆ関数）の数によって、安全性のパラメータが変化する。一般的に多くの異なるラウンド関数（Ｆ関数）を用いた方が安全性は高められる。複数のＦ関数対応のテーブルをメモリに格納し利用する構成とする場合、高速アクセス可能なメモリ空間（例えば１次キャッシュメモリ）上に参照すべきテーブルが入りきらなくなってしまう場合も想定されるので、処理シーケンスに応じて参照が必要となるテーブルの最大数を格納可能なメモリ領域を高速アクセス可能なメモリ空間として設定した構成とすることが好ましい。
【００９４】
図８に示すように、本発明の暗号処理装置４００は、Ｆｅｉｓｔｅｌ型共通鍵ブロック暗号処理を実行する暗号処理装置であり、ラウンド関数として少なくとも２種類以上の異なるＦ関数を選択的に適用して、複数ラウンドのラウンド演算を実行するデータ処理部４１０と、２種類以上の異なるＦ関数の各々に対応する入力値と出力値または中間値とを対応付けた複数のＦ関数対応テーブルを格納したメモリ４２０を有し、データ処理部４１０では、予め規定された暗号処理シーケンスに従って、各ラウンドにおいて適用するＦ関数に対応するＦ関数対応テーブルのアクセス用アドレスを取得し、取得アドレスを適用したメモリ４２０のアクセスにより、各ラウンドのＦ関数に対応するＦ関数対応テーブル４２１〜４２ｎを読み込み、テーブル参照に基づいて入力値に対する出力値または中間値を取得して、各Ｆ関数に従ったデータ変換結果を得る。
【００９５】
なお、データ処理部４１０は、各ラウンドのＦ関数中の線形変換処理に適用する変換行列として、少なくとも２以上の異なる行列を設定した少なくとも２以上の異なるＦ関数を選択的に適用する拡散行列切り替え機構（ＤＳＭ：Ｄｉｆｆｕｓｉｏｎ  Ｓｗｉｔｃｈｉｎｇ  Ｍｅｃｈａｎｉｓｍ）を持つＦｅｉｓｔｅｌ構造に従った暗号処理を実行する構成であり、例えば、暗号処理対象データを２分割したデータ系列数（分割数）ｄ＝２の設定に従ったＦｅｉｓｔｅｌ構造、あるいは、データ系列数（分割数）ｄ≧３の設定とした拡張型Ｆｅｉｓｔｅｌ構造に基づく暗号処理を実行する。
【００９６】
データ処理部４１０では、予め設定された暗号関数を実行し、暗号関数の実行に際して、各ラウンドにおいて適用するＦ関数に対応するＦ関数対応テーブルのアクセス用アドレスを、各ラウンド毎に適宜切り替えて各ラウンドのＦ関数に対応するＦ関数対応テーブルをメモリ４２０から読み込み、テーブル参照に基づいて入力値に対する出力値または中間値を取得して、各Ｆ関数に従ったデータ変換結果を得る。
【００９７】
なお、メモリ４２０に格納されるＦ関数対応テーブル４２１〜４２ｎは、各Ｆ関数に対する入力値または入力値の構成データと、Ｆ関数の出力値または中間値、またはこれらの構成データとを対応付けたＦ関数対応テーブルである。
【００９８】
前述したように、このような構成とすることで、データ処理部４１０は、各ラウンドのＦ関数に従ったデータ変換処理を、各ラウンドに対応して変更されるアドレスに従ってテーブルを取得して実行することが可能となり、一定の暗号関数において適用する引数として各ラウンド毎のＦ関数対応テーブルのアドレスを逐次設定すればよく、１つの暗号関数を適用して引数を変更するのみで、様々な暗号処理を実行することが可能となる。すなわち、異なるＦ関数の呼び出し処理といったことが不要であり、高速に各ラウンド演算（Ｆ関数）の処理結果を得ることが可能となる。また、この構成では、各ラウンド関数に対応する論理回路等が必要とならず、装置の小型化、実装コストの削減が可能となる。
【００９９】
［５．暗号処理装置の構成例］
最後に、上述した実施例に従った暗号処理を実行する暗号処理装置としてのＩＣモジュール７００の構成例を図１０に示す。上述の処理は、例えばＰＣ、ＩＣカード、リーダライタ、その他、様々な情報処理装置において実行可能であり、図１０に示すＩＣモジュール７００は、これら様々な機器に構成することが可能である。
【０１００】
図１０に示すＣＰＵ(Central processing Unit)７０１は、暗号処理の開始や、終了、データの送受信の制御、各構成部間のデータ転送制御、その他の各種プログラムを実行するプロセッサである。メモリ７０２は、ＣＰＵ７０１が実行するプログラム、あるいは演算パラメータなどの固定データを格納するＲＯＭ（Read-Only-Memory）、ＣＰＵ７０１の処理において実行されるプログラム、およびプログラム処理において適宜変化するパラメータの格納エリア、ワーク領域として使用されるＲＡＭ（Random Access Memory）等からなる。また、メモリ７０２は暗号処理に必要な鍵データや、暗号処理において適用する変換テーブル（置換表）や変換行列に適用するデータ等の格納領域として使用される。また、メモリ７０２は、図８、図９を参照して説明したように、上述した異なるＦ関数に対応する出力値を得るためのＦ関数対応テーブルの格納領域として利用される。
【０１０１】
上述したように、異なる線形変換行列Ｍ０，Ｍ１，・・・を適用したラウンド関数（Ｆ関数）Ｆ０，Ｆ１・・・に対応するテーブル、すなわち異なるＦ関数Ｆ０，Ｆ１・・・の入力値に基づく出力値を算出するために必要となる値を、各入力値に対応付けて格納した複数のＦ関数対応テーブルを保持している。なおデータ格納領域は、耐タンパ構造を持つメモリとして構成されることが好ましい。
【０１０２】
暗号処理部７０３は、例えば上述したＦｅｉｓｔｅｌ構造や、拡張型Ｆｅｉｓｔｅｌ構造に従った共通鍵ブロック暗号処理アルゴリズムに従った暗号処理、復号処理を実行する。なお、ここでは、暗号処理手段を個別モジュールとした例を示したが、このような独立した暗号処理モジュールを設けず、例えば暗号処理プログラムをＲＯＭに格納し、ＣＰＵ７０１がＲＯＭ格納プログラムを読み出して実行するように構成してもよい。
【０１０３】
乱数発生器７０４は、暗号処理に必要となる鍵の生成などにおいて必要となる乱数の発生処理を実行する。
【０１０４】
送受信部７０５は、外部とのデータ通信を実行するデータ通信処理部であり、例えばリーダライタ等、ＩＣモジュールとのデータ通信を実行し、ＩＣモジュール内で生成した暗号文の出力、あるいは外部のリーダライタ等の機器からのデータ入力などを実行する。
【０１０５】
このＩＣモジュール７００の暗号処理部７０３は、例えば、データ系列数ｄ＝２のＦｅｉｓｔｅｌ型暗号処理、または、データ系列数ｄがｄ≧３の整数とした拡張型Ｆｅｉｓｔｅｌ型暗号処理を実行する。また、少なくとも２以上の異なる行列を設定した少なくとも２以上の異なるＦ関数を選択的に適用する拡散行列切り替え機構（ＤＳＭ：Ｄｉｆｆｕｓｉｏｎ  Ｓｗｉｔｃｈｉｎｇ  Ｍｅｃｈａｎｉｓｍ）を持つＦｅｉｓｔｅｌ構造に従った暗号処理を実行する。なお、暗号処理に際しては、図８、図９を参照して説明したように、異なるＦ関数に対応する出力値を得るためのＦ関数対応テーブルを取得するためのアドレスを、各ラウンドにおいて逐次切り替えてメモリアクセスを実行して各Ｆ関数の入力値に対応する出力値または中間値を取得してラウンド演算を実行する。この処理によって、様々な暗号関数を利用することなく、メモリアクセス用のアドレスを引数として設定した１つの暗号関数の利用により、様々な暗号シーケンスに従った処理が可能となる。
【０１０６】
以上、特定の実施例を参照しながら、本発明について詳解してきた。しかしながら、本発明の要旨を逸脱しない範囲で当業者が該実施例の修正や代用を成し得ることは自明である。すなわち、例示という形態で本発明を開示してきたのであり、限定的に解釈されるべきではない。本発明の要旨を判断するためには、特許請求の範囲の欄を参酌すべきである。
【０１０７】
なお、明細書中において説明した一連の処理はハードウェア、またはソフトウェア、あるいは両者の複合構成によって実行することが可能である。ソフトウェアによる処理を実行する場合は、処理シーケンスを記録したプログラムを、専用のハードウェアに組み込まれたコンピュータ内のメモリにインストールして実行させるか、あるいは、各種処理が実行可能な汎用コンピュータにプログラムをインストールして実行させることが可能である。
【０１０８】
例えば、プログラムは記録媒体としてのハードディスクやＲＯＭ（Read Only Memory)に予め記録しておくことができる。あるいは、プログラムはフレキシブルディスク、ＣＤ−ＲＯＭ(Compact Disc Read Only Memory)，ＭＯ(Magneto optical)ディスク，ＤＶＤ(Digital Versatile Disc)、磁気ディスク、半導体メモリなどのリムーバブル記録媒体に、一時的あるいは永続的に格納（記録）しておくことができる。このようなリムーバブル記録媒体は、いわゆるパッケージソフトウエアとして提供することができる。
【０１０９】
なお、プログラムは、上述したようなリムーバブル記録媒体からコンピュータにインストールする他、ダウンロードサイトから、コンピュータに無線転送したり、ＬＡＮ(Local Area Network)、インターネットといったネットワークを介して、コンピュータに有線で転送し、コンピュータでは、そのようにして転送されてくるプログラムを受信し、内蔵するハードディスク等の記録媒体にインストールすることができる。
【０１１０】
なお、明細書に記載された各種の処理は、記載に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。また、本明細書においてシステムとは、複数の装置の論理的集合構成であり、各構成の装置が同一筐体内にあるものには限らない。
【産業上の利用可能性】
【０１１１】
上述したように、本発明の一実施例の構成によれば、ラウンド関数として少なくとも２種類以上の異なるＦ関数を選択的に適用したラウンド演算による暗号処理を実行する構成において、Ｆ関数の各々に対応する入力値と出力値または中間値とを対応付けた複数のＦ関数対応テーブルをメモリに格納し、予め規定された暗号処理シーケンスに従って、各ラウンドのＦ関数に対応するテーブルアクセス用アドレスを適用してメモリからＦ関数対応テーブルを読み込み、テーブル参照に基づいて入力値に対する出力値または中間値を取得して、各Ｆ関数に従ったデータ変換結果を得る。本構成によれば、各ラウンドに対応して変更されるアドレスに従って各Ｆ関数対応テーブルを取得して、入力値に対応する出力値を効率的に取得または算出可能となる。例えば、１つの暗号関数を適用して引数を変更するのみで、様々な暗号処理を実行することが可能となる。
【図面の簡単な説明】
【０１１２】
【図１】Ｆｅｉｓｔｅｌ構造の基本構成について説明する図である。
【図２】ラウンド関数部として設定されるＦ関数の構成について説明する図である。
【図３】ラウンド数をｒとしたＳＰＮ型Ｆｅｉｓｔｅｌ構造例を示す図である。
【図４】各ラウンドのラウンド関数（Ｆ関数）の線形変換層に２つの異なる線形変換行列Ｍ０，Ｍ１を配置した拡散行列切り替え機構（ＤＳＭ）を実現したＦｅｉｓｔｅｌ構造例を示す図である。
【図５】３つの行列Ｍ０，Ｍ１，Ｍ２を適用したＦｅｉｓｔｅｌ構造例を示す図である。
【図６】拡散行列切り替え機構（ＤＳＭ）を持つ拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）を持つ暗号化関数の構成例を示す図である。
【図７】Ｆ関数の入力から出力を求めるためのテーブル構成を説明する図である。
【図８】複数の異なるラウンド関数（Ｆ関数）に対応する複数のテーブルを利用した暗号処理構成について説明する図である。
【図９】複数の異なるラウンド関数（Ｆ関数）に対応する複数のテーブルを利用した暗号処理構成を実現するためにメモリに格納されるテーブルについて説明する図である。
【図１０】本発明に係る暗号処理を実行する暗号処理装置としてのＩＣモジュールの構成例を示す図である。
【符号の説明】
【０１１３】
１０１  入力データＰ［０］
１０２  入力データＰ［１］
１０３  ラウンド鍵
１０４  排他的論理和部
１２０  Ｆ関数
１２１  Ｓボックス（Ｓ−ｂｏｘ）
１２２  線形変換部
２１１  スワップ関数
４００  暗号処理装置
４１０  データ処理部
４１１  ラウンド関数実行部
４１２  メモリアドレス提供部
４１３  処理シーケンス情報格納部
４２０  メモリ
４２１〜４２ｎ  Ｆ関数対応テーブル
７００  ＩＣモジュール
７０１  ＣＰＵ(Central processing Unit)
７０２  メモリ
７０３  暗号処理部
７０４  乱数発生器
７０５  送受信部
【図１】
2008058829.tif 000005
【図２】
2008058829.tif 000006
【図３】
2008058829.tif 000007
【図４】
2008058829.tif 000008
【図５】
2008058829.tif 000009
【図６】
2008058829.tif 000010
【図７】
2008058829.tif 000011
【図８】
2008058829.tif 000012
【図９】
2008058829.tif 000013
【図１０】
2008058829.tif 000014