(57)【特許請求の範囲】
【請求項１】
鍵情報に基づく暗号演算を行うことにより複数の暗号化鍵を生成する暗号化鍵生成装置であって、
前記暗号演算は、所定のラウンド関数に基づくラウンド処理を規定ラウンド数繰り返すものであり、
第１データの第１の部分に対して、前記暗号演算の第１ラウンドの処理を行うとともに、前記第１データの前記第１の部分以外に対して、前記暗号演算の第１ラウンドの処理の一部を行う第１計算部と、
複数の第２データは、前記暗号演算の第１ラウンドの処理が終わった前記第１データの前記第１の部分と、前記第１データの前記第１の部分以外の少なくとも一部を変化させた第２の部分とを含み、
前記第２の部分は、他の第２の部分とは少なくとも一部が異なり、
各前記第２の部分に対して、前記暗号演算の第１ラウンドの処理のうち、前記第１計算部が実施していない処理を行う第２計算部と、
前記暗号演算の第１ラウンドの処理が終わった複数の前記第２データに対して、前記暗号演算の第２ラウンド以降の処理を行う第３計算部と、を備えることを特徴とする暗号化鍵生成装置。
【請求項２】
前記第１データは、入力データに対して前記暗号演算を行った結果のデータであることを特徴とする請求項１に記載の暗号化鍵生成装置。
【請求項３】
サイドチャネル対策に用いる乱数を生成する第１生成部と、
前記乱数を用いて前記サイドチャネル対策を含む前記暗号演算を行うための情報を生成する第２生成部と、をさらに備え、
前記第１計算部は、前記第２生成部が生成した前記情報を用いて、前記第１データの第１の部分に対して、前記暗号演算の第１ラウンドの処理を行うとともに、前記第１データの前記第１の部分以外に対して、前記暗号演算の第１ラウンドの処理の一部を行い、
前記第２計算部は、前記第２生成部が生成した前記情報を用いて、各前記第２の部分に対して、前記暗号演算の第１ラウンドの処理のうち、前記第１計算部が実施していない処理を行い、
前記第３計算部は、前記第２生成部が生成した前記情報を用いて、前記暗号演算の第２ラウンド以降の処理を行うことを特徴とする請求項１に記載の暗号化鍵生成装置。
【請求項４】
サイドチャネル対策に用いる線形変換の変換規則を生成する第１生成部と、
前記線形変換の変換規則を用いて前記サイドチャネル対策を含む前記暗号演算を行うための情報を生成する第２生成部と、をさらに備え、
前記第１計算部は、前記第２生成部が生成した前記情報を用いて、前記第１データの第１の部分に対して、前記暗号演算の第１ラウンドの処理を行うとともに、前記第１データの前記第１の部分以外に対して、前記暗号演算の第１ラウンドの処理の一部を行い、
前記第２計算部は、前記第２生成部が生成した前記情報を用いて、各前記第２の部分に対して、前記暗号演算の第１ラウンドの処理のうち、前記第１計算部が実施していない処理を行い、
前記第３計算部は、前記第２生成部が生成した前記情報を用いて、前記暗号演算の第２ラウンド以降の処理を行うことを特徴とする請求項１に記載の暗号化鍵生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施の形態は、暗号化鍵生成装置に関する。
【背景技術】
【０００２】
暗号プロトコルは、暗号化鍵や認証鍵（以下では、これらを暗号化鍵と総称する。）を利用して、守秘や認証などの機能を実現する。暗号プロトコルで利用する暗号化鍵を生成する方法として、共通の鍵情報に基づく暗号演算を複数回行うことで複数の暗号化鍵を生成する方法が知られている。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】IETF  RFC  4764,  “The  EAP-PSK  Protocol:  A  Pre-Shared  Key  Extensible  Authentication  Protocol  (EAP)  Method”,  2007
【非特許文献２】NIST  SP800-38a,“Recommendation  for  Block  Cipher  Modes  of  Operation  -  Methods  and  Techniques”,  2001
【発明の概要】
【発明が解決しようとする課題】
【０００４】
共通の鍵情報に基づく暗号演算を複数回行うことで複数の暗号化鍵を生成する従来の方法は、共通のバイト処理を繰り返す部分を含み、効率改善の余地がある。
【０００５】
本発明が解決しようとする課題は、複数の暗号化鍵を効率よく生成することができる暗号化鍵生成装置を提供することである。
【課題を解決するための手段】
【０００６】
実施形態の暗号化鍵生成装置は、鍵情報に基づく暗号演算を行うことにより複数の暗号化鍵を生成する。前記暗号演算は、所定のラウンド関数に基づくラウンド処理を規定ラウンド数繰り返すものである。実施形態の暗号化鍵生成装置は、第１計算部と、第２計算部と、第３計算部と、を備える。第１計算部は、第１データの第１の部分に対して、前記暗号演算の第１ラウンドの処理を行うとともに、前記第１データの前記第１の部分以外に対して、前記暗号演算の第１ラウンドの処理の一部を行う。第２計算部は、複数の第２データの第２の部分に対して、前記暗号演算の第１ラウンドの処理のうち、前記第１計算部が実施していない処理を行う。複数の第２データは、前記暗号演算の第１ラウンドの処理が終わった前記第１データの前記第１の部分と、前記第１データの前記第１の部分以外の少なくとも一部を変化させた第２の部分とを含み、前記第２の部分は、他の第２の部分とは少なくとも一部が異なり、各前記第２の部分に対して、第２計算部が前記暗号演算の第１ラウンドの処理のうち、前記第１計算部が実施していない処理を行う。第３計算部は、前記暗号演算の第１ラウンドの処理が終わった複数の前記第２データに対して、前記暗号演算の第２ラウンド以降の処理を行う。
【図面の簡単な説明】
【０００７】
【図１】第１実施形態の暗号化鍵生成装置の構成を示すブロック図。
【図２】ＡＥＳの第１ラウンドの処理を説明する説明図。
【図３】第１実施形態の暗号化鍵生成装置の処理手順を示すフローチャート。
【図４】第２実施形態の暗号化鍵生成装置の構成を示すブロック図。
【図５】第２実施形態の暗号化鍵生成装置の処理手順を示すフローチャート。
【発明を実施するための形態】
【０００８】
実施形態の暗号化鍵生成装置は、鍵情報に基づく暗号演算を行うことにより、複数の暗号化鍵を生成する。以下では、暗号演算としてＡＥＳ（Advanced  Encryption  Standard）を例に挙げて説明する。なお、適用可能な暗号演算はＡＥＳに限らず、公知の様々な暗号演算を適用することができる。
【０００９】
まず、ＡＥＳの概要について説明する。ブロック暗号方式の暗号演算であるＡＥＳでは、例えば１２８ビット（１６バイト）のデータブロックに対して、ラウンド関数を用いたラウンド処理を規定ラウンド数繰り返す。ＡＥＳのラウンド関数は、ＳｕｂＢｙｔｅｓ、ＳｈｉｆｔＲｏｗｓ、ＭｉｘＣｏｌｕｍｎｓ、およびＡｄｄＲｏｕｎｄＫｅｙを含む。
【００１０】
ＳｕｂＢｙｔｅｓは、１２８ビットのデータブロックを１６個のバイト単位のデータに区切り、バイト単位で非線形変換を行う演算処理である。ＳｈｉｆｔＲｏｗｓは、１２８ビットのデータブロックに対してバイト単位の並び替えを行う演算処理である。ＭｉｘＣｏｌｕｍｎｓは、１２８ビットのデータブロックを４個の３２ビットデータ（４バイトデータ）に分けて３２ビットごとの行列変換を行う演算処理である。ＡｄｄＲｏｕｎｄＫｅｙは、初期鍵をラウンドごとに更新して生成される１２８ビットのラウンド鍵と、１２８ビットのデータブロックとの排他的論理和を演算する演算処理である。
【００１１】
ＡＥＳの演算は、例えば以下の手順で行われる。まず、１２８ビット（１６バイト）の平文ブロックを入力し、入力した平文ブロックと１２８ビットの初期鍵との排他的論理和を演算する。この処理は、初期鍵加算と呼ばれる。次に、第１ラウンドから最終ラウンドの１つ前のラウンド（規定ラウンド数が１０であれば第９ラウンド）まで、ＳｕｂＢｙｔｅｓ→ＳｈｉｆｔＲｏｗｓ→ＭｉｘＣｏｌｕｍｎｓ→ＡｄｄＲｏｕｎｄＫｅｙを繰り返す。そして、最終ラウンドでは、ＳｕｂＢｙｔｅｓとＳｈｉｆｔＲｏｗｓを行った後、ＭｉｘＣｏｌｕｍｎｓをスキップしてＡｄｄＲｏｕｎｄＫｅｙを行い、暗号文ブロックを出力する。なお、以上は暗号化処理の手順を示しているが、復号処理の場合も同様な手順で行われる。ただし、復号処理の場合は、暗号文ブロックを入力とし、ＳｕｂＢｙｔｅｓ、ＳｈｉｆｔＲｏｗｓ、およびＭｉｘＣｏｌｕｍｎｓにおいて暗号化処理の逆変換が行われ、平文ブロックを出力する。
【００１２】
事前に共有された鍵情報（ＰＳＫ：Pre-Shared  Key）に基づくＡＥＳの演算により複数の暗号化鍵を生成する鍵導出関数が、ＲＦＣ４７６４で規定されている（非特許文献１参照）。このＲＦＣ４７６４で規定される鍵導出関数は、一部分のみが異なる複数のデータブロックに対して同一の鍵情報を用いたＡＥＳの演算を行って、複数の暗号化鍵を生成する。
【００１３】
具体的には、ＲＦＣ４７６４で規定された鍵導出関数では、まず、第１入力“０（１６バイト）”に対して事前に共有された鍵情報ＰＳＫ（１６バイト）に基づくＡＥＳの演算を行う。そして、その演算結果の最下位１バイトのみが異なる値となる２つの第２入力を生成し、これら２つの第２入力に対して鍵情報ＰＳＫに基づくＡＥＳの暗号演算を再度行って、暗号化鍵ＡＫと、新たな鍵情報ＫＤＫを生成する（非特許文献１のＦｉｇ３）。その後、さらに第３入力“ＲＡＮＤ＿Ｐ（１６バイト）”  に対して鍵情報ＫＤＫに基づくＡＥＳの演算を行う。そして、その演算結果の最下位１バイトのみが異なる値となる９つの第４入力を生成し、これら９つの第４入力に対して鍵情報ＫＤＫに基づくＡＥＳの暗号演算を再度行って、暗号化鍵ＴＥＫ、ＭＳＫ１／４〜ＭＳＫ４／４、ＥＭＳＫ１／４〜ＥＭＳＫ４／４の９つの暗号化鍵を生成し（非特許文献１のＦｉｇ７）、先の暗号化鍵ＡＫと併せて計１０個の暗号化鍵（それぞれ１６バイト）を生成する。
【００１４】
ＲＦＣ４７６４で規定された鍵導出関数のように、一部分のみが異なる複数のデータブロック（上記の第２入力や第４入力）に対して同一の鍵情報を用いたＡＥＳの演算を行う場合、複数のデータブロック同士で共通する部分に対して同一のバイト処理が重複して行われるため、処理の効率の観点から改善の余地がある。実施形態の暗号化鍵生成装置は、例えばＲＦＣ４７６４で規定された鍵導出関数のように、一部分のみが異なる複数のデータブロックに対して同一の鍵情報を用いたＡＥＳの演算を行う場合に、これら複数のデータブロック同士で共通する部分に対するバイト処理を纏めて行うことで処理量を削減し、複数の暗号化鍵を効率よく生成する。
【００１５】
（第１実施形態）
図１は、第１実施形態の暗号化鍵生成装置１００の構成を示すブロック図である。暗号化鍵生成装置１００は、通信部１０１と、記憶部１０２と、第１計算部１０３と、第２計算部１０４と、第３計算部１０５と、ラウンド鍵計算部１０６と、を備える。その他、暗号化鍵生成装置１００は、装置を制御する制御部や排他的論理和などを計算する演算部を有するが、図面では記載を省略する。
【００１６】
通信部１０１は、暗号化鍵生成装置１００と外部システムとの間の通信を行うインターフェースである。
【００１７】
記憶部１０２は、暗号化鍵生成装置１００と外部システムとの間で共有している鍵情報ＰＳＫや、暗号化鍵生成装置１００の処理手順などを記憶する。
【００１８】
第１計算部１０３は、第１データの第１の部分に対して、ＡＥＳの第１ラウンドの処理を行う。ここで、第１データとは、ＲＦＣ４７６４で規定された鍵導出関数に関する上記の記述に当てはめると、第１入力“０（１６バイト）”に対して鍵情報ＰＳＫ（１６バイト）に基づくＡＥＳの演算を行った演算結果のデータ、あるいは、第３入力“ＲＡＮＤ＿Ｐ（１６バイト）”  に対して鍵情報ＫＤＫに基づくＡＥＳの演算を行った演算結果のデータである。また、第１の部分とは、ＡＥＳの第１ラウンドで共通のバイト処理が行われる部分、つまり、上記の演算結果のデータの最下位１バイトを含む処理単位を除く部分である。
【００１９】
第２計算部１０４は、複数の第２データの第２の部分に対して、ＡＥＳの第１ラウンドの処理を行う。第２データは、ＡＥＳの第１ラウンドの処理が終わった第１データの第１の部分と、第１データの第１の部分以外の少なくとも一部を変化させた第２の部分とを含む。第２の部分は、他の第２データの第２の部分とは少なくとも一部が異なるものであり、第２計算部１０４は、複数の第２データの各第２の部分に対して、ＡＥＳの第１ラウンドの処理を行う。ここで、第２データとは、ＲＦＣ４７６４で規定された鍵導出関数に関する上記の記述に当てはめると、第１の部分に対するＡＥＳの第１ラウンドの処理が終わった状態の第２入力または第４入力である。また、第２の部分とは、第２入力または第４入力の最下位１バイトを含む処理単位である。
【００２０】
第３計算部１０５は、ＡＥＳの第１ラウンドの処理が終わった複数の第２データに対して、ＡＥＳの第２ラウンド以降の処理を行う。
【００２１】
ラウンド鍵計算部１０６は、初期鍵を入力として受け付け、ＡＥＳの規定ラウンド数分のラウンド鍵を計算する。例えば規定ラウンド数が１０であれば、ラウンド鍵計算部１０６は、ＡＥＳの第１ラウンドから第１０ラウンドに対応する１０個の１６バイトのラウンド鍵を計算する。
【００２２】
本実施形態の暗号化鍵生成装置１００は、複数の第２データに対するＡＥＳの第１ラウンドの処理について、従来は個別に行われていた同一のバイト処理を共通化して第１計算部１０３で行い、残りの部分（第２の部分）のバイト処理を第２計算部１０４で行うことで、処理の効率を向上させる。以下、ＲＦＣ４７６４で規定された鍵導出関数に対応させて、第１計算部１０３および第２計算部１０４による処理の具体例を説明する。なお、ＡＥＳではＳｕｂＢｙｔｅｓとＳｈｉｆｔＲｏｗｓの順番を入れ替えても計算結果は変わらないため、以下では、ＳｈｉｆｔＲｏｗｓを行った後にＳｕｂＢｙｔｅｓを行うものとする。また、ＡＥＳのラウンド関数のうち、ＳｈｉｆｔＲｏｗｓはバイト単位の入れ替えであり、１６バイト全体の処理となるため、第１ラウンドの１６バイト全体のＳｈｉｆｔＲｏｗｓを第１計算部１０３で先に行うものとする。
【００２３】
図２は、ＲＦＣ４７６４で規定された鍵導出関数において、上記の第２入力または第４入力に対するＡＥＳの第１ラウンドの処理を説明する説明図である。
【００２４】
まず、第１入力または第３入力に対するＡＥＳの演算結果ｍ（ｍ１〜ｍ１６；添え字の数字は先頭からのバイト位置を表す）と事前に共有された鍵情報ＰＳＫとの排他的論理和を計算（初期鍵加算）する。さらに、最下位バイトのｍ１６に対しては、鍵情報ＰＳＫとの排他的論理和の結果と定数ｉの最下位バイト（非特許文献１のＦｉｇ３ではｉ＝１または２、非特許文献１のＦｉｇ７ではｉ＝１〜９のいずれか）との排他的論理和を計算（定数加算）し、その結果が第２入力または第４入力ｄ（ｄ１〜ｄ１６；添え字の数字は先頭からのバイト位置を表す）となる。
【００２５】
次に、ＡＥＳの第１ラウンドで、第２入力または第４入力ｄに対してＳｈｉｆｔＲｏｗｓを行う。その結果、先頭からｄ１，ｄ６，ｄ１１，ｄ１６，ｄ５，ｄ１０，ｄ１５，ｄ４，ｄ９，ｄ１４，ｄ３，ｄ８，ｄ１３，ｄ２，ｄ７，ｄ１２と並ぶ中間データが得られる。そして、この中間データに対してＳｕｂＢｙｔｅｓを行って、バイト単位で非線形処理された中間データｓ（ｓ１〜ｓ１６；添え字の数字は先頭からのバイト位置を表す）が得られる。さらに、中間データｓに対してＭｉｘＣｏｌｕｍｎｓを行って、４バイトごとに行列変換された中間データｃ（ｃ１〜ｃ１６；添え字の数字は先頭からのバイト位置を表す）が得られる。そして、中間データｃとラウンド鍵計算部１０６が生成したラウンド鍵ＲＫとの排他的論理和を計算（ＡｄｄＲｏｕｎｄＫｅｙ）し、中間データｖ（ｖ１〜ｖ１６；添え字の数字は先頭からのバイト位置を表す）が得られる。その後、ＡＥＳの第２ラウンドでは、第１ラウンドで生成された中間データｖを入力として、同様の処理を繰り返す。
【００２６】
図２に示した例において、ＡＥＳの第１ラウンドの入力となる第２入力または第４入力ｄは、定数加算によって最下位バイトｄ１６のみ値が異なるデータとなる。したがって、ＡＥＳの第１ラウンドにおいて、第２入力または第４入力ｄの最下位バイトｄ１６が影響を及ぼさない部分（第１の部分）の処理は、共通のバイト処理となる。本実施形態の暗号化鍵生成装置１００では、この共通のバイト処理を第１計算部１０３で行い、残りのバイト処理を第２計算部１０４で行う。図２では、第１計算部１０３が処理する部分を実線で示し、第２計算部１０４が処理する部分を破線で示している。また、図２の二重線で囲まれた初期鍵加算および定数加算は、第１ラウンドの前に行われる処理である。
【００２７】
第１計算部１０３は、ＡＥＳの第１ラウンドにおけるＳｈｉｆｔＲｏｗｓ処理、所定のバイトのＳｕｂＢｙｔｅｓ処理、対応するＭｉｘＣｏｌｕｍｎｓ処理、および対応するバイトのＡｄｄＲｏｕｎｄＫｅｙを行う。ＳｈｉｆｔＲｏｗｓ処理は、第１，６，１１，１６バイトを第１〜４バイトに、第５，１０，１５，４バイトを第５〜８バイトに、第９，１４，３，８バイトを第９〜１２バイトに、第１３，２，７，１２バイトを第１３〜１６バイトにそれぞれ対応付ける。ＳｕｂＢｙｔｅｓ処理は、第１〜３バイト、第５〜１６バイトのＳｕｂＢｙｔｅｓである。対応するＭｉｘＣｏｌｕｍｎｓ処理は、第５〜８バイトを用いる第２ＭｉｘＣｏｌｕｍｎｓ、第９〜１２バイトを用いる第３ＭｉｘＣｏｌｕｍｎｓ、第１３〜１６バイトを用いる第４ＭｉｘＣｏｌｕｍｎｓの３つである。対応するＡｄｄＲｏｕｎｄＫｅｙは、第２ＭｉｘＣｏｌｕｍｎｓが出力する４バイトを第５〜８バイトとし、第３ＭｉｘＣｏｌｕｍｎｓが出力する４バイトを第９〜１２バイトとし、第４ＭｉｘＣｏｌｕｍｎｓが出力する４バイトを第１３〜１６バイトとして、これら第５〜１６バイトと、ラウンド鍵計算部１０６が生成した第１ラウンドのラウンド鍵（１６バイト）の第５〜１６バイトとの排他的論理和を計算する。
【００２８】
第２計算部１０４は、ＡＥＳの第１ラウンドにおける第１計算部１０３が処理しないバイトのＳｕｂＢｙｔｅｓ処理と、対応するＭｉｘＣｏｌｕｍｎｓ処理、および対応するＡｄｄＲｏｕｎｄＫｅｙを行う。図２に示した例において、第１計算部１０３が処理しないバイトは、第２入力または第４入力ｄの最下位バイトｄ１６、すなわちＳｈｉｆｔＲｏｗｓ処理後の第４バイトである。対応するＭｉｘＣｏｌｕｍｎｓ処理は、ＳｈｉｆｔＲｏｗｓ処理後の第１〜４バイトを用いる第１ＭｉｘＣｏｌｕｍｎｓ処理である。対応するＡｄｄＲｏｕｎｄＫｅｙは、第１ＭｉｘＣｏｌｕｍｎｓが出力する４バイトを第１〜４バイトとして、これら第１〜４バイトと、ラウンド鍵計算部１０６が生成した第１ラウンドのラウンド鍵（１６バイト）の第１〜４バイトとの排他的論理和を計算する。
【００２９】
次に、ＲＦＣ４７６４で規定された鍵導出関数に準じて複数の暗号化鍵を生成する場合を例に挙げ、本実施形態の暗号化鍵生成装置１００の処理手順について図３を参照しながら説明する。図３は、暗号化鍵生成装置１００の処理手順を示すフローチャートである。
【００３０】
ＲＦＣ４７６４で規定された鍵導出関数では、上述したように、第２入力または第４入力に対するＡＥＳの演算の前に、第１入力または第３入力に対するＡＥＳの演算が行われる。第１入力または第３入力は、第２入力または第４入力と異なり、定数加算によって最下位１バイトの値が変化するものではないが、本実施形態の暗号化鍵生成装置１００は、ＡＥＳの演算を第１計算部１０３、第２計算部１０４、および第３計算部１０５で行うため、第１入力または第３入力に対するＡＥＳの演算に相当する処理も、第１計算部１０３、第２計算部１０４、および第３計算部１０５で行う。なお、図３のフローチャートでは、ステップＳ１０４〜ステップＳ１０６の処理が、第１入力または第３入力に対するＡＥＳの演算に相当し、ステップＳ１０９、ステップＳ１１３、およびステップＳ１１４の処理が、第２入力または第４入力に対するＡＥＳの演算に相当する。
【００３１】
まず、暗号化鍵生成装置１００は、所定の入力Ｘ１を受け付ける（ステップＳ１０１）。例えば、非特許文献１のＦｉｇ３に対応する処理を行う場合には、暗号化鍵生成装置１００は第１入力“０（１６バイト）”を受け付け、非特許文献１のＦｉｇ７に対応する処理を行う場合には、暗号化鍵生成装置１００は第３入力“ＲＡＮＤ＿Ｐ（１６バイト）”を受け付ける。
【００３２】
次に、暗号化鍵生成装置１００は、ステップＳ１０１で受け付けた入力Ｘ１と、記憶部１０２が記憶する鍵情報ＰＳＫとの排他的論理和を計算（初期鍵加算）する（ステップＳ１０２）。
【００３３】
次に、ラウンド鍵計算部１０６が、記憶部１０２が記憶する鍵情報ＰＳＫを入力として、ラウンド鍵ＲＫを計算する（ステップＳ１０３）。ラウンド鍵計算部１０６は、第１計算部１０３、第２計算部１０４、および第３計算部１０５が処理するラウンドに応じて、対応するラウンドのラウンド鍵ＲＫをその都度計算してもよい。あるいは、ラウンド鍵計算部１０６は、第１計算部１０３、第２計算部１０４、および第３計算部１０５が処理を行う前に、対応するラウンドのラウンド鍵ＲＫを計算して記憶部１０２などに記憶してもよい。また、暗号化鍵生成装置１００は、後段のＡＥＳの演算でラウンド鍵ＲＫが再び用いられることに備えて、ラウンド鍵計算部１０６が計算するラウンド鍵ＲＫを記憶部１０２に記憶させるようにしてもよい。記憶部１０２がラウンド鍵ＲＫを記憶しない場合には、ラウンド鍵計算部１０２は、必要となるラウンド鍵ＲＫをラウンド処理が行われるたびに計算するが、以降の説明では記述を省略する。
【００３４】
次に、第１計算部１０３が、ステップＳ１０２で初期鍵加算された１６バイトの入力Ｘ１’と、ステップＳ１０３で計算された第１ラウンドのラウンド鍵ＲＫとを入力として、ＡＥＳの第１ラウンドのＳｕｂＢｙｔｅｓまで処理された第１〜３バイト、ＳｈｉｆｔＲｏｗｓまで処理された第４バイト、およびＡＥＳの第１ラウンドの出力の第５〜１６バイトの合計１６バイトを計算する（ステップＳ１０４）。
【００３５】
次に、第２計算部１０４が、ステップＳ１０４で計算された１６バイトのデータのうちの第１〜４バイトと、ステップＳ１０３で計算された第１ラウンドのラウンド鍵ＲＫとを入力として、ＡＥＳの第１ラウンドの出力の第１〜４バイトを計算する（ステップＳ１０５）。なお、ステップＳ１０４とステップＳ１０５は異なる順番で処理されてもよく、並行して処理されてもよい。
【００３６】
次に、第３計算部１０５が、ステップＳ１０４およびステップＳ１０５で計算されたＡＥＳの第１ラウンドの出力１６バイトと、ステップＳ１０３で計算されたラウンド鍵ＲＫとを入力として、ＡＥＳの第２〜１０ラウンドの処理を繰り返し、ステップＳ１０１で受け付けた入力Ｘ１に対応するＡＥＳの暗号文（１６バイト）を計算する（ステップＳ１０６）。
【００３７】
次に、暗号化鍵生成装置１００は、ステップＳ１０６で計算された１６バイトの暗号文を入力Ｘ２として、この入力Ｘ２と記憶部１０２が記憶する鍵情報ＰＳＫとの排他的論理和を計算（初期鍵加算）する（ステップＳ１０７）。
【００３８】
次に、ラウンド鍵計算部１０６が、ステップＳ１０３と同様に、記憶部１０２が記憶する鍵情報ＰＳＫを入力として、ラウンド鍵ＲＫを計算する（ステップＳ１０８）。ステップＳ１０３でラウンド鍵計算部１０６が計算したラウンド鍵ＲＫを記憶部１０２に記憶させる場合には、ステップＳ１０８の処理は省略されてもよい。
【００３９】
次に、第１計算部１０３が、ステップＳ１０７で初期鍵加算された１６バイトの入力Ｘ２’と、ステップＳ１０８（あるいはステップＳ１０３）で計算された第１ラウンドのラウンド鍵ＲＫとを入力として、ＡＥＳの第１ラウンドのＳｕｂＢｙｔｅｓまで処理された第１〜３バイト、ＳｈｉｆｔＲｏｗｓまで処理された第４バイト、およびＡＥＳの第１ラウンドの出力の第５〜１６バイトを計算する（ステップＳ１０９）。
【００４０】
次に、暗号化鍵生成装置１００は、ステップＳ１０９で計算された１６バイトのデータのうちの第１〜４バイトと第５〜１６バイトを連結して、１６バイトの入力Ｘ３を生成する（ステップＳ１１０）。
【００４１】
次に、暗号化鍵生成装置１００は、以下の処理を所定の回数繰り返す。例えば、非特許文献１のＦｉｇ３に対応する処理を行う場合には繰り返し回数は２であり、非特許文献１のＦｉｇ７に対応する処理を行う場合には繰り返し回数は９である。繰り返しの回数をＮで表す。また、ｉ＝１，ｉ＝２，・・・，ｉ＝Ｎのように、繰り返しの状態をｉで表す。この繰り返しの状態を表すｉが、後述の定数加算において用いられる定数となる。
【００４２】
まず、暗号化鍵生成装置１００は、定数ｉ＝１と設定する（ステップＳ１１１）。
【００４３】
次に、暗号化鍵生成装置１００は、ステップＳ１１０で生成された１６バイトの入力Ｘ３の第４バイトと、定数ｉとの排他的論理和を計算（定数加算）する（ステップＳ１１２）。
【００４４】
次に、第２計算部１０４が、ステップＳ１１２で４バイト目に定数加算された入力Ｘ３の第１〜４バイトと、ステップＳ１０８（あるいはステップＳ１０３）で計算された第１ラウンドのラウンド鍵ＲＫとを入力として、ＡＥＳの第１ラウンドの出力の第１〜４バイトを計算し、この第１〜４バイトに、入力Ｘ３の第５〜１６バイトを連結して、入力Ｘ３に対応するＡＥＳの第１ラウンドの出力を生成する（ステップＳ１１３）。
【００４５】
次に、第３計算部１０５が、ステップＳ１１３で生成されたＡＥＳの第１ラウンドの出力１６バイトと、ステップＳ１０８（あるいはステップＳ１０３）で計算されたラウンド鍵ＲＫとを入力として、ＡＥＳの第２〜１０ラウンドの処理を繰り返し、入力Ｘ３に対応するＡＥＳの暗号文（１６バイト）を計算する（ステップＳ１１４）。ここで計算される暗号文が、鍵情報ＰＳＫをもとに生成される暗号化鍵、もしくは、さらに多数の暗号化鍵を生成するための鍵情報ＫＤＫとなる。
【００４６】
その後、暗号化鍵生成装置１００は、ｉがＮ未満かどうか判定する（ステップＳ１１５）。そして、ｉがＮ未満であれば（ステップＳ１１５：Ｙｅｓ）、ｉをｉ＋１で置き換えて（ステップＳ１１６）ステップＳ１１２に戻り、ステップＳ１１２以降の処理を繰り返す。一方、ｉがＮに達していれば（ステップＳ１１５：Ｎｏ）、一連の処理を終了する。
【００４７】
以上、具体的な例を挙げながら詳細に説明したように、本実施形態の暗号化鍵生成装置１００は、一部分のみが異なる複数のデータブロックに対して同一の鍵情報を用いたＡＥＳの演算を行って複数の暗号化鍵を生成する際に、これら複数のデータブロックに対するＡＥＳの第１ラウンドの処理のうち、同一のバイト処理となる部分を共通化して第１計算部１０３で行う。そして、残りの部分（第２の部分）のバイト処理を第２計算部１０４で行う。したがって、本実施形態の暗号化鍵生成装置１００によれば、複数の暗号化鍵を生成するためのトータルの処理量を削減することができ、複数の暗号化鍵を効率よく生成することができる。
【００４８】
なお、上記の説明では、非特許文献１に記載のＲＦＣ４７６４で規定される鍵導出関数に準じて複数の暗号化鍵を生成する場合を例示したが、本実施形態の暗号化鍵生成装置１００は、例えば、非特許文献２が開示するブロック暗号のカウンタモードにより複数の暗号化鍵を生成する場合にも同様に適用することができ、上述した例と同様の効果を得ることができる。ブロック暗号のカウンタモードにより複数の暗号化鍵を生成する場合には、図３のステップＳ１０１〜ステップＳ１０６までの処理は省略され、カウンタモードへの入力を入力Ｘ２として、ステップＳ１０７以降の処理を実行する。
【００４９】
また、上記の説明では、図３のステップＳ１１２において実施する定数加算が排他的論理和演算であるものとして説明したが、排他的論理和演算に限らず、算術加算やＧＦ（２５６）での乗算など、他の演算を用いてもよい。また、上記の説明では、暗号演算としてＡＥＳを例示したが、他の暗号演算を用いるようにしてもよく、入力を分割して処理する方式を用いるようにしてもよい。
【００５０】
また、図３のステップＳ１１１〜ステップＳ１１６の繰り返し処理については、ｉについて異なる順番で処理されてもよく、並行して処理されてもよい。例えば、ｉが１からＮについてステップＳ１１３に対応する処理を行い、その後、ｉが１からＮについてステップＳ１１４に対応する処理を行うようにしてもよい。また、特にステップＳ１１４については、各ｉについてのステップＳ１１４の処理をラウンドごとに分割し、ｉが１からＮについてＡＥＳの第２ラウンドに対応する処理を行い、その後、ｉが１からＮについてＡＥＳの第３ラウンドに対応する処理を行うといったように、各ｉについてのステップＳ１１４の処理がラウンドごとに進むようにしてもよい。このように繰り返し処理におけるラウンドを揃えることで、ラウンド鍵ＲＫの生成や読み出しの回数を削減することが可能となる。
【００５１】
（第２実施形態）
第２実施形態は、第１実施形態の構成に対して、ＳＰＡ（Simple  Power  Analysis）やＤＰＡ（Differential  Power  Analysis）などのサイドチャネル攻撃に対する対策技術（以下、サイドチャネル対策という。）を組み込んだ例である。サイドチャネル対策の代表的なものとして、乱数（ランダムマスク）を用いて暗号処理中の中間データを隠蔽する対策技術と、暗号処理中の中間データに対してバイトごとに線形変換を施す対策技術とが知られている。
【００５２】
＜ランダムマスクを用いる対策技術＞
この対策技術では、暗号処理中の中間データにランダムマスクを排他的論理和した状態で処理する。そのために、ＡＥＳのＳｕｂＢｙｔｅｓでは、ランダムマスクを用いない場合の変換表の入出力それぞれに対してランダムマスクを排他的論理和した新たな変換表を作り、この新たな変換表を利用して非線形変換を行う。ここで、ＳｕｂＢｙｔｅｓの入力と出力ではそれぞれ異なるランダムマスクを用いてもよいし、バイトごとに異なるランダムマスクを用いてもよい。
【００５３】
ＡＥＳのＭｉｘＣｏｌｕｍｎｓでは、ＭｉｘＣｏｌｕｍｎｓの入力４バイトに排他的論理和処理されているランダムマスクに依存して、ＭｉｘＣｏｌｕｍｎｓが出力するバイトに排他的論理和処理されているランダムマスクが決定される。例えば、ＭｉｘＣｏｌｕｍｎｓに入力される４バイトのそれぞれに、ＭＳＫ１〜ＭＳＫ４までが排他的論理和処理されていると、ＭｉｘＣｏｌｕｍｎｓの出力の第１〜４バイトに排他的論理和処理されているランダムマスクは、それぞれ（０ｘ２＊ＭＳＫ１）＋（０ｘ３＊ＭＳＫ２）＋ＭＳＫ３＋ＭＳＫ４、（０ｘ３＊ＭＳＫ１）＋ＭＳＫ２＋ＭＳＫ３＋（０ｘ０２＊ＭＳＫ４）、ＭＳＫ１＋ＭＳＫ２＋（０ｘ０２＊ＭＳＫ３）＋（０ｘ０３＊ＭＳＫ４）、ＭＳＫ１＋（０ｘ２＊ＭＳＫ２）＋（０ｘ０３＊ＭＳＫ３）＋ＭＳＫ４と表すことができる。ただし、０ｘ０２と０ｘ０３は１６進表記した２と３であり、＊はＧＦ（２５６）での乗算を表す。
【００５４】
ランダムマスクを用いる対策技術を適用するときには、暗号処理中の中間データに排他的論理和処理されるランダムマスクを上述のように特定し、それらランダムマスクを排他的論理和処理して除去することで、入力に対応する正しい暗号文を計算することができる。
【００５５】
＜線形変換を用いる対策技術＞
この対策技術では、暗号処理中の中間データに対してバイトごとに線形変換ｆを施す。ここで、線形変換ｆとは、２つのバイトａ，ｂに対して、ｆ（ａ）とｆ（ｂ）との排他的論理和と、ａとｂの排他的論理和をｆに入力した出力とが一致するような変換をいう。ＡＥＳのＳｕｂＢｙｔｅｓでは、ｆ（ａ）に対してｆ（ＳｕｂＢｙｔｅｓ（ａ））が対応するような新たな変換表を作り、この新たな変換表を利用して非線形変換を行う。
【００５６】
ＡＥＳのＭｉｘＣｏｌｕｍｎｓでは、ｆ（ａ）に対してｆ（０ｘ０２＊ａ）を出力するような新たな０ｘ０２倍計算表を作成し、０ｘ０２倍計算に新たな変換表を利用する。０ｘ０３倍計算は、データｆ（ａ）に対する０ｘ０２倍計算表の参照結果とｆ（ａ）の排他的論理和により計算できる。
【００５７】
第２実施形態の暗号化鍵生成装置は、サイドチャネル対策として、上記のランダムマスクを用いる対策技術、あるいは、線形変換を用いる対策技術を適用し、サイドチャネル攻撃に対する安全性を向上させている。
【００５８】
図４は、第２実施形態の暗号化鍵生成装置２００の構成を示すブロック図である。暗号化鍵生成装置２００は、通信部２０１と、記憶部２０２と、第１計算部２０３と、第２計算部２０４と、第３計算部２０５と、ラウンド鍵計算部２０６と、第１生成部２０７と、第２生成部２０８と、を備える。その他、暗号化鍵生成装置２００は、装置を制御する制御部や排他的論理和などを計算する演算部を有するが、図面では記載を省略する。
【００５９】
通信部２０１は、暗号化鍵生成装置２００と外部システムとの間の通信を行うインターフェースである。
【００６０】
記憶部２０２は、暗号化鍵生成装置２００と外部システムとの間で共有している鍵情報ＰＳＫや、第１生成部２０７および第２生成部２０８により生成される対策用データ、暗号化鍵生成装置２００の処理手順などを記憶する。
【００６１】
第１計算部２０３は、第１実施形態の第１計算部１０３と同様に、第１データの第１の部分に対して、ＡＥＳの第１ラウンドの処理を行う。ただし、第１計算部２０３は、暗号化鍵生成装置２００のサイドチャネル対策として適用される対策技術に対応したＳｕｂＢｙｔｅｓ処理、ＭｉｘＣｏｌｕｍｎｓ処理、およびＡｄｄＲｏｕｎｄＫｅｙを行う。
【００６２】
第２計算部２０４は、第１実施形態の第２計算部１０４と同様に、複数の第２データの第２の部分に対して、ＡＥＳの第１ラウンドの処理を行う。ただし、第２計算部２０４は、暗号化鍵生成装置２００のサイドチャネル対策として適用される対策技術に対応したＳｕｂＢｙｔｅｓ処理、ＭｉｘＣｏｌｕｍｎｓ処理、およびＡｄｄＲｏｕｎｄＫｅｙを行う。
【００６３】
第３計算部２０５は、第１実施形態の第３計算部１０５と同様に、ＡＥＳの第１ラウンドの処理が終わった複数の第２データに対して、ＡＥＳの第２ラウンド以降の処理を行う。ただし、第３計算部２０５は、暗号化鍵生成装置２００のサイドチャネル対策として適用される対策技術に対応したＳｕｂＢｙｔｅｓ処理、ＭｉｘＣｏｌｕｍｎｓ処理、およびＡｄｄＲｏｕｎｄＫｅｙを行う。
【００６４】
ラウンド鍵計算部２０６は、第１実施形態のラウンド鍵計算部１０６と同様に、初期鍵を入力として受け付け、ＡＥＳの規定ラウンド数分のラウンド鍵を計算する。
【００６５】
第１生成部２０７は、暗号化鍵生成装置２００のサイドチャネル対策で必要となるランダムマスクまたは線形変換の変換規則（線形変換ｆ）を生成する。すなわち、暗号化鍵生成装置２００のサイドチャネル対策としてランダムマスクを用いる対策技術が適用される場合、第１生成部２０７は、サイドチャネル対策に用いるランダムマスクを生成する。また、暗号化鍵生成装置２００のサイドチャネル対策として線形変換を用いた対策技術が適用される場合、第１生成部２０７は、サイドチャネル対策に用いる線形変換ｆを生成する。なお、予め生成されて記憶部２０２に記憶されたランダムマスクや線形変換ｆを用いてサイドチャネル対策を行う場合は、暗号化鍵生成装置２００は、第１生成部２０７を備えなくてもよい。
【００６６】
第２生成部２０８は、第１生成部２０７が生成したランダムマスクまたは線形変換ｆを用いたサイドチャネル対策に対応した暗号演算を行うための情報を生成する。すなわち、暗号化鍵生成装置２００のサイドチャネル対策としてランダムマスクを用いる対策技術が適用される場合、第２生成部２０８は、第１計算部２０３、第２計算部２０４、および第３計算部２０５で処理するＳｕｂＢｙｔｅｓの新たな変換表を生成したり、ＭｉｘＣｏｌｕｍｎｓ内部で用いるランダムマスクを生成したりする。また、暗号化鍵生成装置２００のサイドチャネル対策として線形変換を用いる対策技術が適用される場合、第２生成部２０８は、第１計算部２０３、第２計算部２０４、および第３計算部２０５で処理するＳｕｂＢｙｔｅｓの新たな変換表を生成したり、ＭｉｘＣｏｌｕｍｎｓ内部で用いる新たな計算表を生成したりする。
【００６７】
次に、ＲＦＣ４７６４で規定された鍵導出関数に準じて複数の暗号化鍵を生成する場合を例に挙げ、本実施形態の暗号化鍵生成装置２００の処理手順について図５を参照しながら説明する。図５は、暗号化鍵生成装置２００の処理手順を示すフローチャートである。
【００６８】
まず、暗号化鍵生成装置２００は、所定の入力Ｘ１を受け付ける（ステップＳ２０１）。例えば、非特許文献１のＦｉｇ３に対応する処理を行う場合には、暗号化鍵生成装置２００は第１入力“０（１６バイト）”を受け付け、非特許文献１のＦｉｇ７に対応する処理を行う場合には、暗号化鍵生成装置２００は第３入力“ＲＡＮＤ＿Ｐ（１６バイト）”を受け付ける。
【００６９】
次に、第１生成部２０７が、サイドチャネル対策に用いるランダムマスクまたは線形変換ｆを生成するとともに、第２生成部２０８が、第１生成部２０７により生成されたランダムマスクまたは線形変換ｆを用いたサイドチャネル対策に対応したＡＥＳの演算を行うためのＳｕｂＢｙｔｅｓの新たな変換表や、ＭｉｘＣｏｌｕｍｎｓ内部で用いるランダムマスクまたは新たな計算表を生成する（ステップＳ２０２）。以下、これら第１生成部２０７が生成するランダムマスクまたは線形変換ｆと、第２生成部２０８が生成する変換表などを総称して、対策用データという。つまり、ステップＳ２０２では、第１生成部２０７および第２生成部２０８が、サイドチャネル対策に必要となる対策用データを生成する。
【００７０】
次に、暗号化鍵生成装置２００は、ステップＳ２０１で受け付けた入力Ｘ１に対して、ステップＳ２０２で生成されたランダムマスクまたは線形変換ｆを用いたサイドチャネル対策のための処理（以下、対策処理という。）を施す（ステップＳ２０３）。すなわち、サイドチャネル対策としてランダムマスクを用いる対策技術が適用される場合には、暗号化鍵生成装置２００は、ステップＳ２０１で受け付けた入力Ｘ１とステップＳ２０２で生成したランダムマスクとの排他的論理和を計算する。また、サイドチャネル対策として線形変換を用いる対策技術が適用される場合には、暗号化鍵生成装置２００は、ステップＳ２０１で受け付けた入力Ｘ１をステップＳ２０２で生成した線形変換ｆに入力して、その出力を計算する。
【００７１】
次に、暗号化鍵生成装置２００は、ステップＳ２０３で対策処理が施された入力Ｘａ１に対して初期鍵加算を行う（ステップＳ２０４）。すなわち、サイドチャネル対策としてランダムマスクを用いた対策技術が適用される場合には、暗号化鍵生成装置２００は、対策処理が施された入力Ｘａ１と、記憶部２０２が記憶する鍵情報ＰＳＫとの排他的論理和を計算する。また、サイドチャネル対策として線形変換を用いた対策技術が適用される場合には、暗号化鍵生成装置２００は、対策処理が施された入力Ｘａ１と、記憶部２０２が記憶する鍵情報ＰＳＫをステップＳ２０２で生成した線形変換ｆに入力して得られる値との排他的論理和を計算する。
【００７２】
次に、ラウンド鍵計算部２０６が、記憶部２０２が記憶する鍵情報ＰＳＫを入力として、ラウンド鍵ＲＫを計算する（ステップＳ２０５）。ラウンド鍵ＲＫを計算するタイミングや記憶部２０２を利用するか否かなどは、第１実施形態のステップＳ１０３と同様である。サイドチャネル対策として線形変換を用いた対策技術が適用される場合には、暗号化鍵生成装置２００は、ステップＳ２０２で生成した線形変換ｆを利用してラウンド鍵ＲＫを計算する。
【００７３】
次に、第１計算部２０３が、ステップＳ２０４で初期鍵加算された１６バイトのデータＸａ１’と、ステップＳ２０５で計算された第１ラウンドのラウンド鍵ＲＫとを入力として、サイドチャネル対策が施された状態における、ＡＥＳの第１ラウンドのＳｕｂＢｙｔｅｓまで処理された第１〜３バイト、ＳｈｉｆｔＲｏｗｓまで処理された第４バイト、およびＡＥＳの第１ラウンドの出力の第５〜１６バイトを計算する（ステップＳ２０６）。このとき、第１計算部２０３は、ステップＳ２０２で第２生成部２０８が生成した変換表を利用してＳｕｂＢｙｔｅｓ処理を行い、ステップＳ２０２で第２生成部２０８が生成したランダムマスクまたは新たな計算表を利用してＭｉｘＣｏｌｕｍｎｓ処理を行う。
【００７４】
次に、第２計算部２０４が、ステップＳ２０６で計算された１６バイトのデータのうちの第１〜４バイトと、ステップＳ２０５で計算された第１ラウンドのラウンド鍵ＲＫとを入力として、サイドチャネル対策が施された状態における、ＡＥＳの第１ラウンドの出力の第１〜４バイトを計算する（ステップＳ２０７）。このとき、第２計算部２０４は、ステップＳ２０２で第２生成部２０８が生成した変換表を利用してＳｕｂＢｙｔｅｓ処理を行い、ステップＳ２０２で第２生成部２０８が生成したランダムマスクまたは新たな計算表を利用してＭｉｘＣｏｌｕｍｎｓ処理を行う。なお、ステップＳ２０６とＳ２０７は異なる順番で処理されてもよく、並行して処理されてもよい。
【００７５】
次に、第３計算部２０５が、ステップＳ２０６およびステップＳ２０７で計算されたサイドチャネル対策が施された状態におけるＡＥＳの第１ラウンドの出力１６バイトと、ステップＳ２０５で計算されたラウンド鍵ＲＫとを入力として、ＡＥＳの第２〜１０ラウンドの処理を繰り返し、ステップＳ２０１で受け付けた入力Ｘ１に対応するＡＥＳの暗号文（１６バイト）を計算する（ステップＳ２０８）。このとき、第３計算部２０５は、ステップＳ２０２で第２生成部２０８が生成した変換表を利用してＳｕｂＢｙｔｅｓ処理を行い、ステップＳ２０２で第２生成部２０８が生成したランダムマスクまたは新たな計算表を利用してＭｉｘＣｏｌｕｍｎｓ処理を行う。なお、第３計算部２０５は、ステップＳ２０８において、ランダムマスクや非線形変換ｆによる対策処理を除去した暗号文を出力してもよいし、ランダムマスクや非線形変換ｆによる対策処理が施された状態で暗号文を出力してもよい。ステップＳ２０８でランダムマスクや非線形変換ｆによる対策処理を除去した暗号文が出力される場合は、その後、ステップＳ２０２と同様に、第１生成部２０７および第２生成部２０８によって新たに対策用データが生成され、ステップＳ２０８で出力される暗号文に対して、ステップＳ２０３と同様の対策処理が施されるが、図５においてはこれらの処理の記述を省略する。
【００７６】
次に、暗号化鍵生成装置２００は、ステップＳ２０８で出力される１６バイトの暗号文を入力Ｘ２として、この入力Ｘ２に対して初期鍵加算を行う（ステップＳ２０９）。すなわち、サイドチャネル対策としてランダムマスクを用いた対策技術が適用される場合には、暗号化鍵生成装置２００は、入力Ｘａ２と、記憶部２０２が記憶する鍵情報ＰＳＫとの排他的論理和を計算する。また、サイドチャネル対策として線形変換を用いた対策技術が適用される場合には、暗号化鍵生成装置２００は、入力Ｘａ２と、記憶部２０２が記憶する鍵情報ＰＳＫを線形変換ｆに入力して得られる値との排他的論理和を計算する。
【００７７】
次に、ラウンド鍵計算部２０６が、ステップＳ２０５と同様に、記憶部２０２が記憶する鍵情報ＰＳＫを入力として、ラウンド鍵ＲＫを計算する（ステップＳ２１０）。ステップＳ２０５でラウンド鍵計算部２０６が計算したラウンド鍵ＲＫを記憶部２０２に記憶させる場合には、ステップＳ２１０の処理は省略されてもよい。
【００７８】
次に、第１計算部２０３が、ステップＳ２０９で初期鍵加算された１６バイトの入力Ｘ２’と、ステップＳ２１０（あるいはステップＳ２０５）で計算された第１ラウンドのラウンド鍵ＲＫとを入力として、サイドチャネル対策が施された状態における、ＡＥＳの第１ラウンドの出力のＳｕｂＢｙｔｅｓまで処理された第１〜３バイト、ＳｈｉｆｔＲｏｗｓまで処理された第４バイト、およびＡＥＳの第１ラウンドの第５〜１６バイトを計算する（ステップＳ２１１）。このとき、第１計算部２０３は、ステップＳ２０２で第２生成部２０８が生成した変換表を利用してＳｕｂＢｙｔｅｓ処理を行い、ステップＳ２０２で第２生成部２０８が生成したランダムマスクまたは新たな計算表を利用してＭｉｘＣｏｌｕｍｎｓ処理を行う。
【００７９】
次に、暗号化鍵生成装置２００は、ステップＳ２１１で計算された１６バイトのデータのうちの第１〜４バイトと第５〜１６バイトを連結して、１６バイトの入力Ｘ３を生成する（ステップＳ２１２）。
【００８０】
次に、暗号化鍵生成装置２００は、以下の処理を所定の回数繰り返す。例えば、非特許文献１のＦｉｇ３に対応する処理を行う場合には繰り返し回数は２であり、非特許文献１のＦｉｇ７に対応する処理を行う場合には繰り返し回数は９である。繰り返しの回数をＮで表す。また、ｉ＝１，ｉ＝２，・・・，ｉ＝Ｎのように、繰り返しの状態をｉで表す。この繰り返しの状態を表すｉが、後述の定数加算において用いられる定数となる。
【００８１】
まず、暗号化鍵生成装置２００は、定数ｉ＝１と設定する（ステップＳ２１３）。
【００８２】
次に、暗号化鍵生成装置２００は、ステップＳ２１２で生成された１６バイトの入力Ｘ３の第４バイトと、定数ｉの最下位バイトとの排他的論理和を計算（定数加算）する（ステップＳ２１４）。サイドチャネル対策として線形変換を用いた対策技術が適用される場合には、暗号化鍵生成装置２００は、ステップＳ２０２で生成した線形変換ｆを用いて、ｆ（ｉ）を加算する。
【００８３】
次に、第２計算部２０４が、ステップＳ２１４で４バイト目に定数加算された入力Ｘ３の第１〜４バイトと、ステップＳ２１０（あるいはステップＳ２０５）で計算された第１ラウンドのラウンド鍵ＲＫとを入力として、ＡＥＳの第１ラウンドの出力の第１〜４バイトを計算し、この第１〜４バイトに、入力Ｘ３の第５〜１６バイトを連結して、サイドチャネル対策が施された状態における、入力Ｘ３に対応するＡＥＳの第１ラウンドの出力を生成する（ステップＳ２１５）。このとき、第２計算部２０４は、ステップＳ２０２で第２生成部２０８が生成した変換表を利用してＳｕｂＢｙｔｅｓ処理を行い、ステップＳ２０２で第２生成部２０８が生成したランダムマスクまたは新たな計算表を利用してＭｉｘＣｏｌｕｍｎｓ処理を行う。
【００８４】
次に、第３計算部２０５が、ステップＳ２１５で生成されたＡＥＳの第１ラウンドの出力１６バイトと、ステップＳ２１０（あるいはステップＳ２０５）で計算されたラウンド鍵ＲＫとを入力として、ＡＥＳの第２〜１０ラウンドの処理を繰り返し、入力Ｘ３に対応するＡＥＳの暗号文（１６バイト）を計算する（ステップＳ２１６）。このとき、第３計算部２０５は、ステップＳ２０２で第２生成部２０８が生成した変換表を利用してＳｕｂＢｙｔｅｓ処理を行い、ステップＳ２０２で第２生成部２０８が生成したランダムマスクまたは新たな計算表を利用してＭｉｘＣｏｌｕｍｎｓ処理を行う。なお、第３計算部２０５は、ステップＳ２１６においては、ランダムマスクや線形変換ｆによる対策処理を除去した暗号文を出力する。ここで出力される暗号文が、鍵情報ＰＳＫをもとに生成される暗号化鍵、もしくは、さらに多数の暗号化鍵を生成するための鍵情報ＫＤＫとなる。
【００８５】
その後、暗号化鍵生成装置２００は、ｉがＮ未満かどうか判定する（ステップＳ２１７）。そして、ｉがＮ未満であれば（ステップＳ２１７：Ｙｅｓ）、ｉをｉ＋１で置き換えて（ステップＳ２１８）ステップＳ２１４に戻り、ステップＳ２１４以降の処理を繰り返す。一方、ｉがＮに達していれば（ステップＳ２１７：Ｎｏ）、一連の処理を終了する。
【００８６】
以上、具体的な例を挙げながら詳細に説明したように、本実施形態の暗号化鍵生成装置２００は、一部分のみが異なる複数のデータブロックに対して同一の鍵情報を用いたＡＥＳの演算を行って複数の暗号化鍵を生成する際に、これら複数のデータブロックに対するＡＥＳの第１ラウンドの処理のうち、同一のバイト処理となる部分を共通化して第１計算部２０３で行う。そして、残りの部分（第２の部分）のバイト処理を第２計算部２０４で行う。したがって、本実施形態の暗号化鍵生成装置２００によれば、第１実施形態の暗号化鍵生成装置１００と同様に、複数の暗号化鍵を生成するためのトータルの処理量を削減することができ、複数の暗号化鍵を効率よく生成することができる。
【００８７】
また、本実施形態の暗号化鍵生成装置２００は、ランダムマスクまたは線形変換ｆを用いたサイドチャネル対策を施した状態でＡＥＳの演算を行うようにしているので、サイドチャネル攻撃に対する安全性を向上させることができる。
【００８８】
なお、上記の説明では、サイドチャネル対策として、ランダムマスクを用いる対策技術と線形変換を用いる対策技術とのいずれか一方を適用するものとしたが、ランダムマスクを用いる対策技術と線形変換を用いる対策技術の双方を適用するようにしてもよい。ランダムマスクを用いる対策技術と線形変換を用いる対策技術の双方を適用すれば、鍵情報の推定をより困難にして、サイドチャネル攻撃に対する安全性をさらに向上させることができる。
【００８９】
以上、第１実施形態および第２実施形態について説明したが、これら実施形態の暗号化鍵生成装置は、通常のコンピュータを利用したハードウェア構成を採用し、コンピュータによって実行されるプログラムにより、第１計算部１０３，２０３、第２計算部１０４，２０４、第３計算部１０５，２０５、ラウンド鍵計算部１０６，２０６、第１生成部２０７、第２生成部２０８などの主要な機能を実現する構成とすることができる。
【００９０】
上述した暗号化鍵生成装置の主要な機能を実現するプログラムは、例えば、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）などのコンピュータで読み取り可能な記録媒体に記録されて提供される。
【００９１】
また、上述した暗号化鍵生成装置の主要な機能を実現するプログラムを、インターネットなどのネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、上述した暗号化鍵生成装置の主要な機能を実現するプログラムを、インターネットなどのネットワーク経由で提供または配布するように構成してもよい。さらに、上述した暗号化鍵生成装置の主要な機能を実現するプログラムを、ＲＯＭなどに予め組み込んで提供するように構成してもよい。
【００９２】
上述した暗号化鍵生成装置の主要な機能を実現するプログラムは、各機能構成（第１計算部１０３，２０３、第２計算部１０４，２０４、第３計算部１０５，２０５、ラウンド鍵計算部１０６，２０６、第１生成部２０７、第２生成部２０８）に対応するコンポーネントを含むモジュール構成となっており、実際のハードウェアとしてはＣＰＵ（プロセッサ）が上記記憶媒体からプログラムを読み出して実行することにより上記各コンポーネントが主記憶装置上にロードされ、暗号化鍵生成装置の各機能構成が主記憶装置上に生成されるようになっている。
【００９３】
以上、具体的な例を挙げながら詳細に説明したように、実施形態の暗号化鍵生成装置によれば、複数の暗号化鍵を効率よく生成することができる。
【００９４】
なお、以上説明した実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。上記の新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。上記の実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００９５】
１００，２００  暗号化鍵生成装置
１０３，２０３  第１計算部
１０４，２０４  第２計算部
１０５，２０５  第３計算部
２０７  第１生成部
２０８  第２生成部
【図１】
0005612007.tif 000002
【図２】
0005612007.tif 000003
【図３】
0005612007.tif 000004
【図４】
0005612007.tif 000005
【図５】
0005612007.tif 000006