(57)【特許請求の範囲】
【請求項１】
複数のＳボックスと線形変換部とを備えるＳＰＮ構造をＦ関数の内部に用いた演算装置において、
該演算装置に与えられる入力データの全ビット数を非均等に分割したビット数の集合Ｔ＝｛ｔ1，ｔ2，ｔ3，・・・，ｔr｝の入力を受け取るビット数集合入力手段と、
前記集合Ｔの要素から任意のｋ個を選んで生成した集合の要素の和の最小値ｕk（ｋ＝１，２，・・・，ｒ）を求める最小値決定手段と、
前記集合Ｔの要素から任意のｋ個を選んで生成した集合の要素の和の最大値ｖk（ｋ＝１，２，・・・，ｒ）を求める最大値決定手段と、
数値ｋに対してｕk≧ｖk'（ｋ´＝０，１，・・・，ｒ，ｖ0＝０）を満たすｋ´の最大値をｋから減算した値をｗk（ｋ＝１，２，・・・，ｒ）とし、ｗkの最大値を（ｒ＋１）の値から減算して前記ＡTの値を求めることにより、該分割されたビット数をそれぞれ入・出力ビット数とする複数のＳボックスに対応する適切な線形変換部の存在可能性を示す値ＡTを出力する線形変換部存在可能性指示数値出力手段と、
前記ＡTの値が正であると判定した場合、前記適切な線形変換部が存在すると判定する線形変換部存在判定手段と、
前記線形変換部存在判定手段によって前記線形変換部が存在すると判定された場合、該線形変換部として、要素が０、または１のｔi行、ｔj列の部分行列Ｍijを要素として、ｒ行、ｒ列に並べた行列をＭ＝（Ｍij）（ｉ＝１，２，・・・，ｒ，ｊ＝１，２，・・・，ｒ）として、ｅ＝１から（ＡT−１）までの各正数に対してｃ（ｅ）＝ｅ＋ｒ−ＡT＋１を求め、前記集合Ｔの要素をｅ個任意に選んだ集合Ｔ1＝｛ｔi1，ｔi2，・・・ｔie｝と、要素をｃ（ｅ）個任意に選んだ集合Ｔ2＝｛ｔj1，ｔj2，・・・，ｔjc(e)｝を求め、該集合（Ｔ1，Ｔ2）に対応する任意のあらゆるＭの小行列、および集合（Ｔ2，Ｔ1）に対応する任意のあらゆるＭの小行列の階数の値が、それぞれ自小行列の行数、または列数のいずれかに等しい行列Ｍを求めることにより、前記ビット数分割が均等に行われた場合のＭＤＳ行列に対応する擬似ＭＤＳ行列を生成する擬似ＭＤＳ行列生成手段と、
を備え、
前記擬似ＭＤＳ行列生成手段は、適切な線形変換部が存在する集合Ｔ＝｛ｔ1，ｔ2，ｔ3，・・・，ｔr｝について、前記集合Ｔに含まれる要素の最小値をｔとした場合、前記ｔをｒ個並べた集合Ｔ´＝｛ｔ，ｔ，ｔ，・・・，ｔ｝を生成し、続いて前記集合Ｔ´に対するＭＤＳ行列を生成し、更に前記集合Ｔと前記集合Ｔ´との差分集合Ｔ´´＝｛ｔ1−ｔ，ｔ2−ｔ，ｔ3−ｔ，・・・，ｔr−ｔ｝に関する行及び列に、ランダムな要素を付加した行列で表される線形変換部を候補とすることを特徴とするＦ関数内部にＳＰＮ構造を用いた演算装置。
【請求項２】
前記集合（Ｔ1，Ｔ2）に対応する小行列は、前記行列Ｍ＝（Ｍij）を構成する前記ｒ行、ｒ列の要素としての部分行列Ｍijのうちで、前記ｔi1，ｔi2，・・・，ｔieにそれぞれ対応する行と、ｔj1，ｔj2，・・・，ｔjc(e)にそれぞれ対応する列とによって指定される部分行列によって構成されることを特徴とする請求項１記載のＦ関数内部にＳＰＮ構造を用いた演算装置。
【請求項３】
複数のＳボックスと線形変換部とを備えるＳＰＮ構造をＦ関数内部に用いる演算方法において、
与えられる入力データの全ビット数を非均等に分割したビット数の集合Ｔ＝｛ｔ1，ｔ2，ｔ3，・・・，ｔr｝の入力を受け取り、
前記集合Ｔの要素から任意のｋ個を選んで生成した集合の要素の和の最小値ｕk（ｋ＝１，２，・・・，ｒ）を求め、
前記集合Ｔの要素から任意のｋ個を選んで生成した集合の要素の和の最大値ｖk（ｋ＝１，２，・・・，ｒ）を求め、
数値ｋに対してｕk≧ｖk'（ｋ´＝０，１，・・・，ｒ，ｖ0＝０）を満たすｋ´の最大値をｋから減算した値をｗk（ｋ＝１，２，・・・，ｒ）とし、ｗkの最大値を（ｒ＋１）の値から減算して前記ＡTの値を求めることにより、該分割されたビット数をそれぞれ入・出力ビット数とする複数のＳボックスに対応する適切な線形変換部の存在可能性を示す値ＡTを出力し、
前記ＡTの値が正であると判定した場合、前記適切な線形変換部が存在すると判定し、
前記線形変換部が存在すると判定された場合、該線形変換部として、要素が０、または１のｔi行、ｔj列の部分行列Ｍijを要素として、ｒ行、ｒ列に並べた行列をＭ＝（Ｍij）（ｉ＝１，２，・・・，ｒ，ｊ＝１，２，・・・，ｒ）として、ｅ＝１から（ＡT−１）までの各正数に対してｃ（ｅ）＝ｅ＋ｒ−ＡT＋１を求め、前記集合Ｔの要素をｅ個任意に選んだ集合Ｔ1＝｛ｔi1，ｔi2，・・・ｔie｝と、要素をｃ（ｅ）個任意に選んだ集合Ｔ2＝｛ｔj1，ｔj2，・・・，ｔjc(e)｝を求め、該集合（Ｔ1，Ｔ2）に対応する任意のあらゆるＭの小行列、および集合（Ｔ2，Ｔ1）に対応する任意のあらゆるＭの小行列の階数の値が、それぞれ自小行列の行数、または列数のいずれかに等しい行列Ｍを求めることにより、前記ビット数分割が均等に行われた場合のＭＤＳ行列に対応する擬似ＭＤＳ行列を生成し、
前記ＡTの値が正であると判定した場合、前記適切な線形変換部が存在すると判定し、
前記線形変換部が存在すると判定された場合、該線形変換部として、要素が０、または１のｔi行、ｔj列の部分行列Ｍijを要素として、ｒ行、ｒ列に並べた行列をＭ＝（Ｍij）（ｉ＝１，２，・・・，ｒ，ｊ＝１，２，・・・，ｒ）として、ｅ＝１から（ＡT−１）までの各正数に対してｃ（ｅ）＝ｅ＋ｒ−ＡT＋１を求め、前記集合Ｔの要素をｅ個任意に選んだ集合Ｔ1＝｛ｔi1，ｔi2，・・・ｔie｝と、要素をｃ（ｅ）個任意に選んだ集合Ｔ2＝｛ｔj1，ｔj2，・・・，ｔjc(e)｝を求め、該集合（Ｔ1，Ｔ2）に対応する任意のあらゆるＭの小行列、および集合（Ｔ2，Ｔ1）に対応する任意のあらゆるＭの小行列の階数の値が、それぞれ自小行列の行数、または列数のいずれかに等しい行列Ｍを求めることにより、前記ビット数分割が均等に行われた場合のＭＤＳ行列に対応する擬似ＭＤＳ行列を生成し、
適切な線形変換部が存在する集合Ｔ＝｛ｔ1，ｔ2，ｔ3，・・・，ｔr｝について、前記集合Ｔに含まれる要素の最小値をｔとした場合、前記ｔをｒ個並べた集合Ｔ´＝｛ｔ，ｔ，ｔ，・・・，ｔ｝を生成し、続いて前記集合Ｔ´に対するＭＤＳ行列を生成し、更に前記集合Ｔと前記集合Ｔ´との差分集合Ｔ´´＝｛ｔ1−ｔ，ｔ2−ｔ，ｔ3−ｔ，・・・，ｔr−ｔ｝に関する行及び列に、ランダムな要素を付加した行列で表される線形変換部を候補とすることを特徴とするＦ関数内部にＳＰＮ構造を用いた演算方法。
【請求項４】
複数のＳボックスと線形変換部とを備えるＳＰＮ構造を関数内部に用いた演算を実行する計算機によって使用される記憶媒体において、
与えられる入力データの全ビット数を非均等に分割したビット数の集合Ｔ＝｛ｔ1，ｔ2，ｔ3，・・・，ｔr｝の入力を受け取るステップと、
前記集合Ｔの要素から任意のｋ個を選んで生成した集合の要素の和の最小値ｕk（ｋ＝１，２，・・・，ｒ）を求めるステップと、
前記集合Ｔの要素から任意のｋ個を選んで生成した集合の要素の和の最大値ｖk（ｋ＝１，２，・・・，ｒ）を求めるステップと、
数値ｋに対してｕk≧ｖk'（ｋ´＝０，１，・・・，ｒ，ｖ0＝０）を満たすｋ´の最大値をｋから減算した値をｗk（ｋ＝１，２，・・・，ｒ）とし、ｗkの最大値を（ｒ＋１）の値から減算して前記ＡTの値を求めることにより、該分割されたビット数をそれぞれ入・出力ビット数とする複数のＳボックスに対応する適切な線形変換部の存在可能性を示す値ＡTを出力するステップと、
前記ＡTの値が正であると判定した場合、前記適切な線形変換部が存在すると判定するステップと、
前記線形変換部が存在すると判定された場合、該線形変換部として、要素が０、または１のｔi行、ｔj列の部分行列Ｍijを要素として、ｒ行、ｒ列に並べた行列をＭ＝（Ｍij）（ｉ＝１，２，・・・，ｒ，ｊ＝１，２，・・・，ｒ）として、ｅ＝１から（ＡT−１）までの各正数に対してｃ（ｅ）＝ｅ＋ｒ−ＡT＋１を求め、前記集合Ｔの要素をｅ個任意に選んだ集合Ｔ1＝｛ｔi1，ｔi2，・・・ｔie｝と、要素をｃ（ｅ）個任意に選んだ集合Ｔ2＝｛ｔj1，ｔj2，・・・，ｔjc(e)｝を求め、該集合（Ｔ1，Ｔ2）に対応する任意のあらゆるＭの小行列、および集合（Ｔ2，Ｔ1）に対応する任意のあらゆるＭの小行列の階数の値が、それぞれ自小行列の行数、または列数のいずれかに等しい行列Ｍを求めることにより、前記ビット数分割が均等に行われた場合のＭＤＳ行列に対応する擬似ＭＤＳ行列を生成するステップと、
前記ＡTの値が正であると判定した場合、前記適切な線形変換部が存在すると判定するステップと、
前記線形変換部が存在すると判定された場合、該線形変換部として、要素が０、または１のｔi行、ｔj列の部分行列Ｍijを要素として、ｒ行、ｒ列に並べた行列をＭ＝（Ｍij）（ｉ＝１，２，・・・，ｒ，ｊ＝１，２，・・・，ｒ）として、ｅ＝１から（ＡT−１）までの各正数に対してｃ（ｅ）＝ｅ＋ｒ−ＡT＋１を求め、前記集合Ｔの要素をｅ個任意に選んだ集合Ｔ1＝｛ｔi1，ｔi2，・・・ｔie｝と、要素をｃ（ｅ）個任意に選んだ集合Ｔ2＝｛ｔj1，ｔj2，・・・，ｔjc(e)｝を求め、該集合（Ｔ1，Ｔ2）に対応する任意のあらゆるＭの小行列、および集合（Ｔ2，Ｔ1）に対応する任意のあらゆるＭの小行列の階数の値が、それぞれ自小行列の行数、または列数のいずれかに等しい行列Ｍを求めることにより、前記ビット数分割が均等に行われた場合のＭＤＳ行列に対応する擬似ＭＤＳ行列を生成するステップと、
を計算機に実行させるためのプログラムを格納した計算機読出し可能可搬型記憶媒体であって、
前記擬似ＭＤＳ行列を生成するステップは、適切な線形変換部が存在する集合Ｔ＝｛ｔ1，ｔ2，ｔ3，・・・，ｔr｝について、前記集合Ｔに含まれる要素の最小値をｔとした場合、前記ｔをｒ個並べた集合Ｔ´＝｛ｔ，ｔ，ｔ，・・・，ｔ｝を生成し、続いて前記集合Ｔ´に対するＭＤＳ行列を生成し、更に前記集合Ｔと前記集合Ｔ´との差分集合Ｔ´´＝｛ｔ1−ｔ，ｔ2−ｔ，ｔ3−ｔ，・・・，ｔr−ｔ｝に関する行及び列に、ランダムな要素を付加した行列で表される線形変換部を候補とすることを特徴とする計算機読出し可能可搬型記憶媒体。
【請求項５】
複数のＳボックスと線形変換部とを備えるＳＰＮ構造をＦ関数内部に用いた演算を実行する計算機によって使用されるプログラムにおいて、
与えられる入力データの全ビット数を非均等に分割したビット数の集合Ｔ＝｛ｔ1，ｔ2，ｔ3，・・・，ｔr｝の入力を受け取る手順と、
前記集合Ｔの要素から任意のｋ個を選んで生成した集合の要素の和の最小値ｕk（ｋ＝１，２，・・・，ｒ）を求める手順と、
前記集合Ｔの要素から任意のｋ個を選んで生成した集合の要素の和の最大値ｖk（ｋ＝１，２，・・・，ｒ）を求める手順と、
数値ｋに対してｕk≧ｖk'（ｋ´＝０，１，・・・，ｒ，ｖ0＝０）を満たすｋ´の最大値をｋから減算した値をｗk（ｋ＝１，２，・・・，ｒ）とし、ｗkの最大値を（ｒ＋１）の値から減算して前記ＡTの値を求めることにより、該分割されたビット数をそれぞれ入・出力ビット数とする複数のＳボックスに対応する適切な線形変換部の存在可能性を示す値ＡTを出力する手順と、
前記ＡTの値が正であると判定した場合、前記適切な線形変換部が存在すると判定する手順と、
前記線形変換部が存在すると判定された場合、該線形変換部として、要素が０、または１のｔi行、ｔj列の部分行列Ｍijを要素として、ｒ行、ｒ列に並べた行列をＭ＝（Ｍij）（ｉ＝１，２，・・・，ｒ，ｊ＝１，２，・・・，ｒ）として、ｅ＝１から（ＡT−１）までの各正数に対してｃ（ｅ）＝ｅ＋ｒ−ＡT＋１を求め、前記集合Ｔの要素をｅ個任意に選んだ集合Ｔ1＝｛ｔi1，ｔi2，・・・ｔie｝と、要素をｃ（ｅ）個任意に選んだ集合Ｔ2＝｛ｔj1，ｔj2，・・・，ｔjc(e)｝を求め、該集合（Ｔ1，Ｔ2）に対応する任意のあらゆるＭの小行列、および集合（Ｔ2，Ｔ1）に対応する任意のあらゆるＭの小行列の階数の値が、それぞれ自小行列の行数、または列数のいずれかに等しい行列Ｍを求めることにより、前記ビット数分割が均等に行われた場合のＭＤＳ行列に対応する擬似ＭＤＳ行列を生成する手順と、
前記ＡTの値が正であると判定した場合、前記適切な線形変換部が存在すると判定する手順と、
前記線形変換部が存在すると判定された場合、該線形変換部として、要素が０、または１のｔi行、ｔj列の部分行列Ｍijを要素として、ｒ行、ｒ列に並べた行列をＭ＝（Ｍij）（ｉ＝１，２，・・・，ｒ，ｊ＝１，２，・・・，ｒ）として、ｅ＝１から（ＡT−１）までの各正数に対してｃ（ｅ）＝ｅ＋ｒ−ＡT＋１を求め、前記集合Ｔの要素をｅ個任意に選んだ集合Ｔ1＝｛ｔi1，ｔi2，・・・ｔie｝と、要素をｃ（ｅ）個任意に選んだ集合Ｔ2＝｛ｔj1，ｔj2，・・・，ｔjc(e)｝を求め、該集合（Ｔ1，Ｔ2）に対応する任意のあらゆるＭの小行列、および集合（Ｔ2，Ｔ1）に対応する任意のあらゆるＭの小行列の階数の値が、それぞれ自小行列の行数、または列数のいずれかに等しい行列Ｍを求めることにより、前記ビット数分割が均等に行われた場合のＭＤＳ行列に対応する擬似ＭＤＳ行列を生成する手順と、
を計算機に実行させるためのプログラムであって、
前記擬似ＭＤＳ行列を生成する手順は、適切な線形変換部が存在する集合Ｔ＝｛ｔ1，ｔ2，ｔ3，・・・，ｔr｝について、前記集合Ｔに含まれる要素の最小値をｔとした場合、前記ｔをｒ個並べた集合Ｔ´＝｛ｔ，ｔ，ｔ，・・・，ｔ｝を生成し、続いて前記集合Ｔ´に対するＭＤＳ行列を生成し、更に前記集合Ｔと前記集合Ｔ´との差分集合Ｔ´´＝｛ｔ1−ｔ，ｔ2−ｔ，ｔ3−ｔ，・・・，ｔr−ｔ｝に関する行及び列に、ランダムな要素を付加した行列で表される線形変換部を候補とすることを特徴とするプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は共通鍵ブロック暗号化方式に係り、さらに詳しくはFeistel 構造と呼ばれる構造内のＦ関数の内部で用いられる複数のＳボックスに対する入出力ビット数が、複数のＳボックスの間で同一でない場合に、複数のＳボックスの後に備えられる線形変換部として、データ拡散性のよい線形変換部を生成し、その線形変換部を用いて入力データに対する暗号化を行う暗号化装置、および暗号化方法に関する。
【０００２】
【従来の技術】
高度情報化社会を迎え、情報セキュリティの確保は緊急の課題となっている。情報セキュリティの基本となるのはデータの暗号化である。高度情報化社会において高速、かつ安全な通信を実現するために、共通鍵ブロック暗号は不可欠の技術である。この共通鍵ブロック暗号のアルゴリズムとして、例えば応用分野に応じて様々な方式が提案されているが、その１つとしてFeistel 構造と呼ばれる単純な繰返し構造のアルゴリズムがある。
【０００３】
図１５はこのFeistel 構造が１６段繰り返されたＤＥＳ暗号方式の説明図である。同図において入力Ｐ、例えば６４ビットは右側３２ビットと左側３２ビットとに分割され、右側３２ビットはＦ関数５１と呼ばれる非線形関数に入力され、その出力と左側３２ビットとがＸＯＲ５２によって排他的論理和がとられ、その結果は右側３２ビットとして次の段に与えられ、次の段への左側３２ビットとしては入力６４ビットのうち右側３２ビットがそのまま与えられる。
【０００４】
図１６は図１５内のＦ関数５１の構成例である。入力、例えば３２ビットはビット拡張部Ｅ６１によって４８ビットに拡張され、ＸＯＲ６２によってその４８ビットと鍵Ｋi ４８ビットとの排他的論理和がとられ、その出力は６ビットずつに分割されてＳボックスと呼ばれる非線形関数にそれぞれ入力される。各Ｓボックス６３の出力は、例えば４ビットとされ、合計３２ビットが線形関数Ｐ６４に入力され、データの拡散が行われる。このような構造は一般にＳＰＮ（サブスティテューションパーミュテーションネットワーク）構造と呼ばれる。
【０００５】
Ｓボックスは暗号装置の非線形の撹拌出力を得るため、またＳボックスに続いて行われる線形関数Ｐは、Ｓボックスによる局所的な非線形出力をデータ全体に拡散させるために用いられるが、暗号装置に組み込まれる上で拡散性のよい線形変換とは何か、具体的にどう求めるか、という研究が従来より行われている。一般に、暗号に用いられる線形変換としては、一つのＳボックスの出力が次のラウンドにおいて、出来る限り多くのＳボックスの入力に関係することが望ましいが、現在ではより拡張された線形関数として、次のような性質を満たすものがよいとされている。すなわち、Ｓボックスの入出力ビット数ｓに対して、線形変換Ｐの入力Ｘおよび出力Ｙをｓビット単位、ｔ個のブロックＸ＝（ｘ1 ，・・・，ｘt ），Ｙ＝（ｙ1 ，・・・，ｙt ），（各ｘi ，ｙj はｓビット）に分割した場合、
Ｙ＝Ｐ（Ｘ）
の入出力間で成立する任意の線形関係式
ｆ（ｘ1 ，・・・，ｘt ，ｙ1 ，・・・，ｙt ）＝０
には、入出力ｘi ，ｙj 合わせて２ｔ個の変数のうち、ｔ＋１個以上の変数が含まれている（＝係数が０ではない）というものである。
【０００６】
このような性質を満たす線形変換ＰとしてＭＤＳ変換が知られている。この変換は線形変換Ｐにおけるデータの拡散性を定義する１つの概念としての分岐数を最大とする線形変換である。この分岐数は暗号に対する差分攻撃や、線形攻撃に対する強度を評価するパラメータであり、その詳細については次の文献で説明されている。
【０００７】
文献）  共通鍵ブロック暗号の選択／設計／評価に関するドキュメント、通信・放送機構
図１７はそのようなＭＤＳ変換を実現する線形関数Ｐの説明図である。同図においては、４つのＳボックス７１へのそれぞれの入力、および出力は８ビットであり、合計３２ビットが入力ｘとして線形関数Ｐに与えられるものとする。線形関数Ｐへの入力ｘ、および出力ｙを、それぞれＳボックスに対応させて、８ビットずつに分割した変数ｘi （ｉ＝１〜４）、ｙj （ｊ＝１〜４）とする。
【０００８】
ここでｘi に入力差分Δｘi が与えられた時、そのｉの集合を次のように書き、これを入力アクティブＳボックスと名付ける。
｛ｉ｜Δｘi ≠０｝
例えばｘ1 ，ｘ2 に入力差分が与えられた時、この集合は｛１，２｝となる。
【０００９】
この入力アクティブＳボックスに対応して、出力差分Δｙj が生じるｙj に対応して、次の集合を出力アクティブＳボックスと名付ける。
｛ｊ｜Δｙj ≠０｝
これら２つの集合の和集合
｛ｉ｜Δｘi ≠０｝Ｕ｛ｊ｜Δｙj ≠０｝
をアクティブＳボックスと名付ける。
【００１０】
そしてこの集合アクティブＳボックスの要素の数ａｃｔＳ（Ｐ）の最小値は、線形変換Ｐによって決定される。アクティブＳボックスの要素の数の最小値
min （ａｃｔＳ（Ｐ））
をアクティブＳボックスの数と呼ぶことにする。このアクティブＳボックスの数の最大値は、前述の線形関係式に含まれる変数の数（ｔ＋１）に一致するとされている。このアクティブＳボックスの数の最大値が、例えば５となる線形変換Ｐが存在するとすれば、入力ｘi （ｉ＝１〜４）の１個が変化すると、出力ｙj （ｊ＝１〜４）の４個が変化することになり、また出力の１個は入力の５個から影響されることになる。
【００１１】
図１８はこのようなＭＤＳ変換に相当するＭＤＳ行列の説明図である。同図においてＭＤＳ行列は、それぞれ例えば０、または１の要素からなる８行、８列の部分的な行列ａij（ｉ＝１〜４，ｊ＝１〜４）から構成されている。このａijの行数と列数は、図１７で説明したＳボックス７１の入出力ビット数に対応する。
【００１２】
このようなＭＤＳ行列が持つべき性質を説明する。図１８の行列が、ＭＤＳ行列として図１７で説明した線形関数Ｐに望まれる高い拡散性を有するためには、部分的な行列ａijを要素として考えた場合の４行、４列の全体から、行数と列数が等しい任意の小行列を選択した時に、その全ての小行列が正則であることが必要とされている。
【００１３】
すなわち例えば１行と１列を指定した（１，１）小行列、２行と２列を指定した（２，２）小行列、３行と３列を指定した（３，３）小行列、および行列全体と一致する（４，４）小行列の全てが、逆行列を持ち、同じ配置の行列式が０でなく、ランク（階数）がフルであるという性質を持つものとされている。
【００１４】
【発明が解決しようとする課題】
このように共通鍵ブロック暗号化方式におけるFeistel 構造内のＦ関数の中で、データの拡散に重要な役割を果たす線形変換ＰとしてのＭＤＳ行列の設計は、従来は複数のＳボックスの入出力サイズが等しいことを前提として行われていたが、複数のＳボックスの間で入出力サイズが異なる場合については、適切な線形変換Ｐが存在するか否か、存在するとすればその変換をどのように構成すればよいかについては、従来全く知られていないという問題点があった。
【００１５】
本発明の課題は、上述の問題点に鑑み、複数のＳボックスの間で入出力サイズが異なる場合に、データの拡散性に優れた線形変換が存在するか否かを判定し、そのような線形変換が存在する場合に、そのような線形変換に相当する擬似ＭＤＳ行列を生成し、それを用いて入力データに対応する暗号文を生成する暗号文生成装置、および生成方法を提供することである。
【００１６】
【課題を解決するための手段】
図１は本発明の演算装置の原理構成ブロック図である。同図は、Feistel 構造のＦ関数の内部に、複数のＳボックスと線形変換部とを備える演算装置１の原理構成ブロック図である。
【００１７】
図１においてビット数集合入力手段２は、演算装置１に与えられる入力データの全ビット数を非均等に分割したビット数の集合Ｔ＝｛ｔ1 ，ｔ2 ，ｔ3 ，・・・，ｔr ｝の入力を受け取るものである。
【００１８】
また線形変換部存在可能性指示数値出力手段３は、分割されたビット数をそれぞれ入・出力ビット数とする複数のＳボックスに対応して、データ拡散性に優れた線形変換部の存在可能性を示す値、例えばアクティブＳボックスの数の最大値ＡT を出力するものである。
【００１９】
本発明の実施の形態においては、このＡT の値が正である時、適切な線形変換部が存在すると判定する線形変換部存在判定手段４を更に備えることも、またそのような線形変換部として、ビット数分割が均等に行われた場合のＭＤＳ行列に対応する擬似ＭＤＳ行列を生成する擬似ＭＤＳ行列生成手段５を更に備えることもできる。
【００２０】
また発明の実施の形態においては、線形変換部存在可能性指示数値出力手段３が、前述のビット数集合の要素から任意のｋ個を選んで生成した集合の要素の和の最小値ｕk （ｋ＝１，２，・・・，ｒ）を求める最小値決定手段と、同様にｋ個を選んで生成した集合の要素の和の最大値ｖk を求める最大値決定手段とを更に備え、数値ｋに対してｕk ≧ｖk'（ｋ′＝０，１，・・・ｒ，ｖ0 ＝０）を満たすｋ′の最大値をｋから減算した値をｗk とし、ｗk の最大値を（ｒ＋１）の値から減算してＡT の値を求めることもできる。
【００２１】
更に本発明の実施の形態においては、擬似ＭＤＳ行列生成手段５は、要素が０、または１のｔi 行、ｔj 列の部分行列Ｍijを要素としてｒ行、ｒ列に並べた行列をＭ＝（Ｍij）（ｉ，ｊ＝１，２，・・・，ｒ）とし、ｅ−１から（ＡT −１）までの各正数に対して、ｃ（ｅ）＝ｅ＋ｒ−ＡT ＋１求め、集合Ｔの要素をｅ個任意に選んだ集合Ｔ1 と、要素をｃ（ｅ）個任意に選んだ集合Ｔ2 を求め、その集合（Ｔ1 ，Ｔ2 ）に対応する任意のあらゆるＭの小行列、および集合（Ｔ2 ，Ｔ1 ）に対応する任意のあらゆるＭの小行列の階数の値がそれぞれ小行列の行数、または列数のいずれかに等しい行列Ｍを求めることもできる。
【００２２】
この時、例えば集合（Ｔ1 ，Ｔ2 ）に対応する小行列は、前述の部分行列Ｍijのうちで、集合Ｔ1 の各要素にそれぞれ対応する行と、集合Ｔ2 の各要素に対応する列によって指定される部分行列によって構成されることもできる。
【００２３】
本発明の演算方法として、複数のＳボックスと線形変換部とを備えるＳＰＮ構造をＦ関数の内部に用いる演算方法において、与えられる入力データのビット数を非均等に分割したビット数の集合Ｔの入力を受け取り、分割されたビット数をそれぞれ入・出力ビット数とする複数のＳボックスに対応する適切な線形変換部の存在可能性を示す値、例ばアクティブＳボックスの数の最大値ＡT を出力する方法が用いらる。
【００２４】
この方法においては、発明の実施形態では、ＡT の値が正である時、適切な線形変換部が存在すると判定することもでき、またそのような線形変換部として、ビット数分割が均等に行われた場合のＭＤＳ行列に対応する擬似ＭＤＳ行列を生成することもできる。
【００２５】
更に本発明においては、複数のＳボックスと線形変換部とを備えるＳＰＮ構造を、Ｆ関数の内部に用いた演算を実行する計算機によって使用される記憶媒体として、与えられる入力データの全ビット数を非均等に分割したビット数集合Ｔの入力を受け取るステップと、分割されたビット数をそれぞれ入・出力ビット数とする複数のＳボックスに対応する適切な線形変換部の存在可能性を示す値、例えばアクティブＳボックスの数の最大値ＡT を出力するステップとを計算機に実行させるためのプログラムを格納した計算機読出し可能可搬型記憶媒体が用いられる。
【００２６】
また更に本発明においては、複数のＳボックスと線形変換部とを備えるＳＰＮ構造を、Ｆ関数の内部に用いた演算を実行する計算機によって使用されるプログラムとして、与えられる入力データの全ビット数を非均等に分割したビット数集合Ｔの入力を受け取る手順と、分割されたビット数をそれぞれ入・出力ビット数とする複数のＳボックスに対応する適切な線形変換部の存在可能性を示す値、例えばアクティブＳボックスの数の最大値ＡT を出力する手順とを計算機に実行させるためのプログラムが用いられる。
【００２７】
以上説明したように、本発明によればFeistel 構造の内部のＦ関数を構成するＳＰＮ構造内で、複数のＳボックスの入出力ビット数が非均等の場合に対して、データの拡散性に優れた線形変換部の生成が可能となる。
【００２８】
【発明の実施の形態】
本発明においては、Feistel 構造の内部に備えられるＦ関数を構成するＳＰＮ構造内で、複数のＳボックスの間で入出力ビット数が全て同じではない場合の暗号化アルゴリズム、およびそのアルゴリズムを用いた暗号化装置を本発明の実施形態として説明する。
【００２９】
図２はそのような暗号化装置の構成ブロック図である。同図において暗号化装置は処理装置１０、入力ファイル１１、出力ファイル１２、表示装置１３、および入出力装置１４によって構成されている。
【００３０】
入力ファイル１１には、例えば暗号化の対象としての平文、Feistel 構造内のＦ関数への入力データのビット数ｎ、ビット数ｎが複数のＳボックスに入力される場合の各Ｓボックスへの入力ビット数ｔ1 ，ｔ2 ，・・・ｔr を要素とする集合Ｔなどが格納されている。
【００３１】
処理装置１０の内部には、入力ファイル１１に格納されている集合Ｔの内容を用いて、複数のＳボックスに対するそれぞれの入出力ビット数が同じでない場合に、その複数のＳボックスの出力に対応する適切な線形変換部の存在可能性を示す数値ＡT を計算するＡT 計算部１５、計算されたＡT の値を用いてそのような線形変換部が存在するか否かを判定する線形変換部存在判定部１６、そのような線形変換部が存在すると判定された時に、そのような変換部としての擬似ＭＤＳ行列を計算する擬似ＭＤＳ行列生成部１７、生成された擬似ＭＤＳ行列を用いて、入力ファイル１１に格納されている平文に対する暗号文を生成する暗号文生成部１８などを備えている。
【００３２】
出力ファイル１２には、ＡT 計算部１５によって計算されたＡT の値、擬似ＭＤＳ行列、およびその擬似ＭＤＳ行列を用いた暗号化アルゴリズムなどが格納される。
【００３３】
図３は本実施形態において用いられるＦ関数の内部のＳＰＮ構造の例である。入力データ３２ビットは、例えば６，５，５，５，５、および６ビットに分割され、非線形変換部としてのそれぞれのＳボックス２１に入力される。各Ｓボックスは入力ビット数と同じ出力ビット数を持ち、各Ｓボックスの出力は合成されて３２ビットとして線形変換部Ｐ２２に与えられ、その変換結果がＦ関数の出力となる。
【００３４】
本実施形態においては、このように複数のＳボックスへの入出力ビット数が同じでない場合に、そのビット分割の仕方によって適切な線形変換部Ｐが存在するか否か、また存在する場合にはその線形変換部をどのように求めるかが発明のポイントとなる。
【００３５】
ここで入力データのビット数ｎを非均等に分割する理由について説明する。例えば従来技術で説明した図１７では、入力３２ビットを４つに分割した８ビットずつが、４つのＳボックス７１に入力されている。このようなＳボックスは  一般的には演算の高速化のために計算機の一次キャッシュメモリにテーブルとして格納され、そのテーブルにアクセスすることによって演算が行われる。図１７ではテーブルは４つであり、４回のテーブルアクセスが必要となる。
【００３６】
これに対して本実施形態では、図３に示すように例えば、入力３２ビットが６，５，５，５，５、および６ビットの６つに分割され、６個のＳボックスにそれぞれ入力される。このようにビット数の少ない６個のＳボックスに分割すると、それぞれのＳボックスに対応するテーブルのサイズは小さくなり、一次キャッシュメモリ量の少ない計算機を使用しても、演算を実行することが可能となる。
【００３７】
最近の計算機の一次キャッシュメモリ量の増大の傾向につれて、１つのテーブルサイズを大きくしてテーブルアクセスの回数を減らし、演算を高速化する可能性が開かれている。そこで本実施形態においては、計算機の一次キャッシュメモリ量に対応して、ビット数分割を変更できるようなビット数分割法を用いることにする。
【００３８】
前述のように３２ビットを８ビット×４に分割している場合には、テーブルの数を３つにするためには８，１６，８ビットというような分割に変換するしか方法がなく、１６ビット入力のＳボックスに対しては２16個の領域を持つテーブルが必要となってしまうことになる。それに対して図３の分割方法では、例えば２個ずつまとめて１１，１０，１１ビットの３つに分割することもでき、２11個の領域を持つテーブルを計算機の一次キャッシュメモリに格納することができれば、演算の高速化が可能となる。
【００３９】
図４は本実施形態における暗号文生成処理の全体フローチャートである。同図において処理が開始されると、まずステップＳ１で図２で説明した線形変換部が存在するか否かを判定するための数値ＡT が求められる。この数値ＡT としては、前述のアクティブＳボックスの要素の数の最小値の最大値が用いられる。以後このＡT を“アクティブＳボックス数の最大値”と呼ぶ。
【００４０】
そしてステップＳ２で、求められたＡT の値に応じて、適切な線形変換Ｐが存在するか否かが判定される。具体的にはＡT の値が正の数である時にはそのような線形変換が存在すると判定され、０、または負の数である時にはそのような線形変換は存在しないと判定される。
【００４１】
線形変換が存在すると判定されると、ステップＳ３でその線形変換を実現する行列、すなわち擬似ＭＤＳ行列が生成され、ステップＳ４でその擬似ＭＤＳ行列を用いた暗号化アルゴリズム、すなわちFeistel 構造が生成され、ステップＳ５でその暗号化アルゴリズムを用いて平文が暗号化されて、処理を終了する。
【００４２】
ステップＳ２でＡT の値が０、または負の数となり、適切な線形変換が存在しないと判定されると、ステップＳ６でエラーが発生したことを示すメッセージが出力されて、処理を終了する。
【００４３】
図５は図４のステップＳ１、すなわちアクティブＳボックス数の最大値ＡT の計算処理の詳細フローチャートである。同図において処理が開始されると、まずステップＳ１０で集合Ｔの内容が入力され、ステップＳ１１で集合Ｔを構成するｒ個の要素のうちからｋ個を選んで生成された集合の要素の和の最小値ｕk がｋ＝０，１，２，・・・，ｒに対して求められる。
【００４４】
続いてステップＳ１２で、同様に集合Ｔの要素から任意のｋ個を選んで生成された集合の要素の和の最大値ｖk が求められる。
続いてステップＳ１３でｋ（＝１，２，・・・，ｒ）とｋ′（＝０，１，２，・・・，ｒ）に対して次の不等式
ｕk ≧ｖk ′（ただしｖ0 ＝０）
を満たすｋ′の最大値をｋから減算した値がｗk （ｋ＝１，２，・・・，ｒ）として求められる。
【００４５】
最後にステップＳ１４でｗk の最大値がｒ＋１から減算され、ＡT の値として求められ、処理を終了する。
図６は図４のステップＳ３の処理、すなわち擬似ＭＤＳ行列生成処理の詳細フローチャートである。同図において処理が開始されると、まずステップＳ２０で分割ビット数の集合Ｔの内容に応じて、ｔi 行、ｔj 列であり、要素が０、または１となっている行列Ｍij（ｉ，ｊ＝１〜ｒ）を作り、そのようなｒ×ｒ個の行列Ｍijを要素としてｒ行、ｒ列に並べた行列Ｍがランダムに新しく選択される。図３で説明したＦ関数の例ではこの行列Ｍは全体としては３２行、３２列の行列となる。ここでＭijを行列Ｍの部分行列と呼ぶことにする。
【００４６】
続いてステップＳ２１でｅの値が１に初期化され、ステップＳ２２でｅの値がアクティブＳボックス数の最大値ＡT から１を引いた値を越えたか否かが判定され、越えていない場合にはステップＳ２３で次式によってｃ（ｅ）の値が求められる。
【００４７】
ｃ（ｅ）＝ｅ＋ｒ−ＡT ＋１
ステップＳ２４で集合Ｔからｅ個の要素を任意に選び、集合Ｔ1 が新しく求められ、ステップＳ２５で新しい集合Ｔ1 が選択できたか否かが判定され、選択できた場合にはステップＳ２６で同様に集合Ｔからｃ（ｅ）個の要素が任意に新しく選ばれ、集合Ｔ2 が求められ、ステップＳ２７でそのような新しい集合Ｔ2 が選択できたか否かが判定される。なおステップＳ２４、およびＳ２６で新しく選択された集合Ｔ1 、およびＴ2 を以下のように記述するものとする。
【００４８】
Ｔ1 ＝｛ｔi1，ｔi2，・・・，ｔie｝
Ｔ2 ＝｛ｔj1，ｔj2，・・・，ｔjc(e) ｝
ステップＳ２７で新しく集合Ｔ2 が選択できたと判定されると、ステップＳ２８で行列Ｍの小行列のうちで集合Ｔ1 ，Ｔ2 に対応する小行列のランク（階数）が求められる。このＴ1 ，Ｔ2 に対応する小行列の意味については後述する。そしてステップＳ２９で求められたランクの値が  外１  または  外２  のどちら
【００４９】
【外１】
0003907976.tif 000002
【００５０】
【外２】
0003907976.tif 000003
【００５１】
か、すなわち行数と列数のいずれかに等しいか否かが判定される。
等しい場合には、ステップＳ３０で行列Ｍの小行列のうちで集合Ｔ2 ，Ｔ1 に対応する小行列のランクが求められ、ステップＳ３１でそのランクの値が  外３
【００５２】
【外３】
0003907976.tif 000004
【００５３】
または  外４  のいずれかに等しいか否かが判定される。
【００５４】
【外４】
0003907976.tif 000005
【００５５】
ステップＳ３１でランクの値が２つの総和（行数、列数）のいずれかに等しいと判定されると、ステップＳ２６に戻りｃ（ｅ）個の要素が新たに選択され、新しい集合Ｔ2 が求められ、ステップＳ２７の判定以降の処理が繰り返される。
【００５６】
そしてステップＳ２７でｃ（ｅ）個の集合Ｔ2 が新しく選択できなかったと判定されると、以前にステップＳ２４で選択された集合、すなわちｅ個の要素からなる集合Ｔ1 に対応する処理が終了したことになるため、ステップＳ２４でｅ個の要素からなる集合Ｔ1 として新しい集合が求められ、ステップＳ２５以降の処理が繰り返される。
【００５７】
ステップＳ２５で新しい集合Ｔ1 が選択できなかったと判定されると、ステップＳ２１で初期化されたｅ＝１の値に対応する処理が終了したことになるので、ステップＳ３２でｅの値がインクリメントされ、ステップＳ２２以降の処理が繰り返される。
【００５８】
このような処理の間に、ステップＳ２９でランクの値が２つの総和の値のいずれにも等しくないと判定された時、およびステップＳ３１で同様にランクの値が２つの総和のいずれにも等しくないと判定された時には、ステップＳ２０でランダムに選択された行列Ｍが擬似ＭＤＳ行列としては不適当なものであるものとして、ステップＳ２０で新しい行列Ｍをランダムに選択する処理以降の処理が繰り返され、ステップＳ２２でｅの値がＡT −１の値を越えたと判定されると、行列Ｍの内容が擬似ＭＤＳ行列として出力され、処理を終了する。
【００５９】
図５、および図６で説明した処理について、具体例を用いて更に説明する。図３で説明した全部で３２ビットの入力ビットに対する６個のＳボックスに対応して、分割される入出力ビット数の集合は次式で与えられる。
【００６０】
Ｔ＝｛６，５，５，５，５，６｝
このような集合Ｔに対応して前述の最小値ｕk 、および最大値ｖk （ｖk'）は次のようになる。
【００６１】
（ｕ1 ，ｕ2 ，ｕ3 ，ｕ4 ，ｕ5 ，ｕ6 ）＝（５，１０，１５，２０，２６，３２）
（ｖ0 ，ｖ1 ，ｖ2 ，ｖ3 ，ｖ4 ，ｖ5 ，ｖ6 ）＝（０，６，１２，１７，２２，２７，３２）
その結果ｗk は次式となり、その最大値は１となる。
【００６２】
（ｗ1 ，ｗ2 ，ｗ3 ，ｗ4 ，ｗ5 ，ｗ6 ）＝（１，１，１，１，１，０）
最終的にアクティブＳボックス数の最大値ＡT は、このｗk の最大値を用いて次式によって求められる。
【００６３】
ＡT ＝（６＋１）−１＝６
このＡT の値が６、すなわち正の数であることから、このように入出力ビット数が分割された６個のＳボックスによる非線形変換に適切な線形変換が存在するということが判定される。前述のようにこの行列Ｍは全体として３２行、３２列であり、その要素が０、または１のうちからランダムに選択され、選択された行列が図６のフローチャートによって擬似ＭＤＳ行列の性質を満たすか否かが判定される。
【００６４】
従ってそのような行列Ｍを生成するためには、原理的には３２行、３２列の行列の全ての要素を０、または１とした場合について図６のフローチャートの処理を繰り返して、擬似ＭＤＳ行列を求めればよいことになるが、その計算量は膨大となる。
【００６５】
本実施形態では計算量を削減するための擬似ＭＤＳ行列生成法を用いることにするが、その方法については後述することとし、その方法によって求められた行列Ｍの例を図７に示す。この例の行列が図６のフローチャートの処理において、最終的にステップＳ３３で出力されるまでの過程の最初の部分について具体的に説明する。なお図７において、行列内の実線で区切られた部分は、図６のステップＳ２０で説明した行列Ｍ内の部分行列Ｍijに相当する。
【００６６】
図６に対応する処理の具体例を説明する前に、まず例えばステップＳ２８で説明したＴ1 ，Ｔ2 に対応する小行列の意味について、図８を用いて説明する。図８において、例えば集合Ｔ1 ＝｛ｔ2 ，ｔ3 ，ｔ6 ｝，Ｔ2 ＝｛ｔ2 ，ｔ3 ，ｔ5 ，ｔ6 ｝とした場合には、Ｔ1 ，Ｔ2 に対応する小行列として図８（ａ）に示される行列が生成され、そのランクが求められる。すなわちそれぞれが行列であるＭijを部分行列とする行列Ｍから計３行と４列とが指定されて小行列が構成される。この小行列はビット単位、すなわち０、または１の要素単位では１６行、２１列の行列となる。
【００６７】
また図６のステップＳ３０で説明したＴ2 ，Ｔ1 に対応する小行列としては行として集合Ｔ2 の要素であるｔ2 ，ｔ3 ，ｔ5 、およびｔ6 に相当する行と、集合Ｔ1 の要素としてのｔ2 ，ｔ3 、およびｔ6 に対応する列が選択されて小行列が構成される。この小行列を図８（ｂ）に示す。この行列は２１行、１６列の行列である。
【００６８】
ここで本実施形態におけるＭＤＳ変換としての擬似ＭＤＳ行列が持つべき性質について説明する。ｎ＝３２ビットを６個に非均等に分割した集合の例としての前述のＴに対して、アクティブＳボックスの数の最大値はＡT ＝６となる。これに対してビット数の分割を均等に行う場合にＡT に相当する値は７であり、その差は１となる。
【００６９】
前述のようにビット分割が均等な場合のＭＤＳ変換としてのＭＤＳ行列では、図８で説明したようなＭij（全ての行数、および全ての列数は等しい）を要素とする行列から、任意の１行と１列を指定した（１，１）小行列、２行と２列を指定した（２，２）小行列、３行と３列を指定した（３，３）小行列、・・・を考え、そのような任意の小行列が全て正則であることがＭＤＳ行列の性質として成立する。
【００７０】
これに対して擬似ＭＤＳ行列では、前述の差が１であることから、ビット分割が均等な場合に選択される小行列の行、または列のいずれかに１を加えた行列が小行列として選択され、任意の小行列のランクがフル、すなわち小行列のランクがその行数、または列数に等しくなるという性質がある。
【００７１】
すなわち任意の（１，２），（２，１），（２，３），（３，２），（３，４），（４，３），（４，５），（５，４），（５，６）、および（６，５）の１０種類の小行列のランクが、それぞれの小行列の行数、または列数に等しい行列を、擬似ＭＤＳ行列として図６のフローチャートにおいて選択すべきことになる。これが本実施形態における擬似ＭＤＳ行列が持つべき性質であるが、その詳細な数学的説明（証明など）については省略する。
【００７２】
ここで前述の例に戻り、図６のフローチャートに対応して、そのような性質を持つ行列Ｍの選択の過程の最初の部分の説明を続ける。まず図６のステップＳ２１でｅの値が１とされ、ステップＳ２３でｃ（ｅ）の値として２が求められる。そしてステップＳ２４で集合Ｔ1 として１個だけの要素を持つ｛ｔ1 ｝＝｛６｝が選択されたとする。またステップＳ２６でｃ（ｅ）、すなわち２個の要素を持つ集合Ｔ2 として｛ｔ1 ，ｔ2 ｝＝｛６，５｝が選択されたものとする。
【００７３】
図９はこの場合にそのランクが計算されるべき、ステップＳ２８におけるＴ1 ，Ｔ2 に対応する行列である。すなわち図８において行としては１行目、列としては１列目と２列目とが指定されることになり、小行列はＭ11とＭ12を成分とする行列であり、その実際の内容は図７から図９のようになる。この小行列のランクは６である。
【００７４】
このランクの値、すなわち６はステップＳ２９で  外５  または  外６  のい
【００７５】
【外５】
0003907976.tif 000006
【００７６】
【外６】
0003907976.tif 000007
【００７７】
ずれかの値と等しいか否かが判定される。これらの２つの値は図９の小行列の行数と列数を示し、この場合は行数、すなわち  外７  がランクの値と等しくなり
【００７８】
【外７】
0003907976.tif 000008
【００７９】
、この小行列はフルランクであることが判定される。
図１０はステップＳ３０でそのランクが計算されるべきＴ2 ，Ｔ1 に対応する小行列の例である。前述と同様に、ここでは図８のＭijのうち、行としては１行目と２行目、例としては１列目が指定されることにより、Ｍ11とＭ21とによって図１０に示す小行列が構成される。そのランクは６であり、ステップＳ３１でステップＳ２９におけると同様に２つの総和と比較され、  外８  の値と等しいこ
【００８０】
【外８】
0003907976.tif 000009
【００８１】
とが判定されて、以後の処理が続けられる。
そして図６のフローチャートに従って、前述の１０種類の小行列の任意のものについて、各小行列のランクがフルであることが図７の３２行、３２列の行列に対して確認され、最終的にステップＳ３３でこの行列Ｍが擬似ＭＤＳ行列として出力されることになる。
【００８２】
次に図７に示した擬似ＭＤＳ行列の生成法について説明する。この行列を生成するためには、原理的には前述のように３２行×３２列の行列の全ての要素を０、または１にランダムに変化させて、図６のフローチャートを満足する行列Ｍを探すことになるが、その計算量は膨大となる。
【００８３】
そこでより能率的な方法として、本実施形態においてはまず全ビット数を３０ビットとし、３０ビットを６個に分割した集合Ｔ＝｛５，５，５，５，５，５｝に対するＭＤＳ行列を従来技術によって求め、求められた３０行、３０列の行列に対して図７に示すように最も上の行のＭ1j（ｊ＝１〜６）、最も下の行のＭ6j（ｊ＝１〜６）、最も左の列のＭi1（ｉ＝１〜６）、および最も右の列のＭi6（ｉ＝１〜６）に対応してそれぞれ１行、１列の要素を追加することで、擬似ＭＳＤ行列を作成することにする。
【００８４】
図１１、図１２はそのような３０行、３０列のＭＳＤ行列を構成するための５行、５列の部分行列３２個を示している。この３２個の部分行列はそれぞれ５行、５列の行列であり、各行列には０〜３１の番号が付けられている。０番の行列は図１１の左上の行列であり、５行、５列の行列の要素は全て０である。５行、５列の下の“０”はこの行列に対応する（同じ配置の）行列式の値を示している。０番目の行列に対しては、当然対応する行列式の値は０である。
【００８５】
例えばその下の番号１の行列に対する行列式の値は１であり、以降図１２の右下の３１番までの全ての行列に対する行列式の値も１となっている。
従来技術の方法を用いることによって図１１，図１２に示した番号の５行、５列の部分行列を６行、６列に並べることによって、３０ビットを６個に均等分割した場合に対応するＭＤＳ行列の例として図１３の行列が得られる。行列内の数字は図１１，図１２で説明した各行列の番号を表わす。
【００８６】
図１３に示した行列は３０行、３０列の行列であり、最も上、下の部分行列に対して１行、最も左、右の部分行列に対して１列の要素をランダムに追加し、その行列に対して図６で示したフローチャートの処理を実行することによって、図７に示した擬似ＭＤＳ行列を比較的容易に生成することができる。
【００８７】
図１４は本発明を実現するためのプログラムのコンピュータへのローディングの説明図である。本発明の実施形態としての暗号化装置、例えば図２に示したシステムなどは、当然一般的なコンピュータシステムとして構成することができる。
【００８８】
図１４はそのようなシステムの構成を示し、コンピュータ３１は本体３２と、メモリ３３とによって構成されている。メモリ３３はランダムアクセスメモリ（ＲＡＭ）、ハードディスク、磁気ディスクなどの記憶装置であり、本発明の特許請求の範囲第１０項のプログラムや、図４〜図６で説明したプログラムなどはメモリ３３に格納され、そのプログラムが本体３２によって実行されることにより、本発明の擬似ＭＳＤ行列が求められ、入力データに対する暗号化が行われる。
【００８９】
本発明を実現するためのプログラムは、プログラム提供者側からネットワーク３４を介してコンピュータ３１にロードされることも、また市販され、流通している可搬型記憶媒体３５に格納され、そのプログラムがコンピュータ３１にロードされることによって実現されることも可能である。可搬型記憶媒体３５としてはフロッピーディスク、ＣＤ−ＲＯＭ、光ディスク、光磁気ディスクなど、様々な形式の記憶媒体を使用することができる。前述のプログラムなどは、このような記憶媒体に格納され、コンピュータ３１にロードされることによって、本実施形態における擬似ＭＳＤ行列が生成され、その行列を用いて入力データに対する暗号文を生成することが可能となる。
【００９０】
【発明の効果】
以上詳細に説明したように、本発明によれば、Ｆ関数の内部の複数のＳボックスの入出力サイズが同一でない場合において、適切な線形変換としての擬似ＳＭＤ行列の存在の有無を判定することができ、そのような行列が存在する場合にはその擬似ＭＳＤ行列を生成し、その行列を使用した暗号化を行うことによって、拡散性能に優れた暗号を生成することができ、暗号化装置の性能向上に寄与するところが大きい。
【図面の簡単な説明】
【図１】本発明の原理構成ブロック図である。
【図２】本発明の実施形態としての暗号化装置のシステム構成を示すブロック図である。
【図３】本実施形態におけるＦ関数の構成例を示す図である。
【図４】暗号文生成の全体処理フローチャートである。
【図５】アクティブＳボックスの数の最大値ＡT を求める処理の詳細フローチャートである。
【図６】擬似ＭＤＳ行列を求める処理の詳細フローチャートである。
【図７】求められた擬似ＭＤＳ行列の例を示す図である。
【図８】２つの集合に対応する小行列を説明する図である。
【図９】擬似ＭＤＳ行列の小行列の例（その１）を示す図である。
【図１０】擬似ＭＤＳ行列の小行列の例（その２）を示す図である。
【図１１】３０行×３０列のＭＤＳ行列を求めるための部分行列を示す図（その１）である。
【図１２】３０行×３０列のＭＤＳ行列を求めるための部分行列を示す図（その２）である。
【図１３】図１１，図１２の部分行列を用いたＭＤＳ行列の例を示す図である。
【図１４】本発明におけるプログラムのコンピュータへのローディングを説明する図である。
【図１５】ＤＥＳ暗号の基本構造を示す図である。
【図１６】図１５におけるＦ関数の構成例の説明図である。
【図１７】Ｆ関数内の線形変換ＰとしてのＭＤＳ変換の説明図である。
【図１８】ＭＤＳ変換としてのＭＤＳ行列の説明図である。
【符号の説明】
１  演算装置
２  ビット数集合入力手段
３  線形変換部存在可能性指示数値出力手段
４  線形変換部存在判定手段
５  擬似ＭＤＳ行列生成手段
１０  処理装置
１１  入力ファイル
１２  出力ファイル
１３  表示装置
１４  入出力装置
１５  ＡT 計算部
１６  線形変換部存在判定部
１７  擬似ＭＤＳ行列生成部
１８  暗号文生成部
【図１】
0003907976.tif 000010
【図２】
0003907976.tif 000011
【図３】
0003907976.tif 000012
【図４】
0003907976.tif 000013
【図５】
0003907976.tif 000014
【図６】
0003907976.tif 000015
【図７】
0003907976.tif 000016
【図８】
0003907976.tif 000017
【図９】
0003907976.tif 000018
【図１０】
0003907976.tif 000019
【図１１】
0003907976.tif 000020
【図１２】
0003907976.tif 000021
【図１３】
0003907976.tif 000022
【図１４】
0003907976.tif 000023
【図１５】
0003907976.tif 000024
【図１６】
0003907976.tif 000025
【図１７】
0003907976.tif 000026
【図１８】
0003907976.tif 000027