(57)【要約】【課題】本発明の実施形態によれば、形態保存暗号化のための可変長ブロック暗号装置および方法が開示される。【解決手段】一実施形態にかかる可変長ブロック暗号装置は、平文を暗号化して同じ長さの暗号文を出力する暗号化装置と、暗号文を平文に復元する復号化装置とを含むことができる。本実施形態によれば、任意のビット長を有する平文に対して同じ長さの暗号文を迅速に生成し、生成された暗号文を迅速に平文に復元することができ、ブロック暗号の攻撃に対する安全性を向上させることができる。【選択図】図１
2015158665.tif 000002
【特許請求の範囲】
【請求項１】
可変長ブロック暗号装置において、
秘密キーおよびラウンド数（Ｎｒ）を用いて、暗号化ラウンドキー（ｅＲＫ０，ｅＲＫ１，…，ｅＲＫＮｒ）を生成する暗号化キー生成部と、
平文、前記暗号化ラウンドキーを用いて、前記平文と同じ長さの暗号文を出力する暗号文出力部とを含むことを特徴とする、暗号化装置。
【請求項２】
前記暗号化キー生成部は、
前記秘密キーおよび前記ラウンド数（Ｎｒ）を入力として、前記秘密キーの長さに応じて予め設定された関数を行って（Ｎｒ＋１）×１２８ビット列を出力し、出力された結果を用いて、それぞれ１２８ビットの長さを有する前記暗号化ラウンドキー（ｅＲＫ０，ｅＲＫ１，…，ｅＲＫＮｒ）を生成することを特徴とする、請求項１に記載の暗号化装置。
【請求項３】
前記暗号文出力部は、
前記平文、前記平文の長さ、および暗号化ラウンドキー（ｅＲＫ０）を入力として、前記平文の挿入位置を考慮して暗号化ラウンド関数値を出力する第１暗号化ラウンド部と、
前の暗号化ラウンドから出力された暗号化ラウンド関数値と、現在の暗号化ラウンドキーとが入力されて、暗号化ラウンド関数値を出力する第２暗号化ラウンド部と、
前の暗号化ラウンドから出力された暗号化ラウンド関数値、暗号化ラウンドキー（ｅＲＫＮｒ）、および平文の長さが入力されて、前記暗号文を出力する第３暗号化ラウンド部とを含むことを特徴とする、請求項１に記載の暗号化装置。
【請求項４】
マスターキーおよびトゥイークを用いて、前記マスターキーと同じ長さを有する前記秘密キーを生成する秘密キー生成部をさらに含み、前記秘密キー生成部は、前記マスターキーおよびトゥイークを用いて、メッセージ認証値（Ｍ［０］，Ｍ［１］，Ｍ［２］，…，Ｍ［１５］）を生成するメッセージ認証部を含み、前記マスターキー中の所定のビットと前記生成されたメッセージ認証値とを排他的論理和（ＸＯＲ）演算して前記秘密キーを生成し、前記マスターキーは、１２８ビット、１９２ビット、または２５６ビットのうちのいずれか１つのビット長を有し、前記トゥイークは、任意のビット長を有し、前記生成されたメッセージ認証値は、１２８ビットの長さを有することを特徴とする、請求項1に記載の暗号化装置。
【請求項５】
可変長ブロック暗号装置において、
秘密キーおよびラウンド数（Ｎｒ）を用いて、復号化ラウンドキー（ｄＲＫ０，ｄＲＫ１，…，ｄＲＫＮｒ）を生成する復号化キー生成部と、
暗号文、前記復号化ラウンドキーを用いて、前記暗号文と同じ長さの平文を復元する平文復元部とを含むことを特徴とする、復号化装置。
【請求項６】
前記復号化キー生成部は、
Ｄｅｃｒｙｐｔ（Ｅｎｃｒｙｐｔ（Ｐ，ｅＲＫ），ｄＲＫ）＝Ｐ（ここで、Ｐは平文，ｅＲＫは暗号化ラウンドキー、ｄＲＫは復号化ラウンドキー）を満足するように、前記復号化ラウンドキーを生成することを特徴とする、請求項５に記載の復号化装置。
【請求項７】
前記平文復元部は、
暗号文、平文の長さ、および復号化ラウンドキー（ｄＲＫ０）を入力として、前記暗号文の挿入位置を考慮して復号化ラウンド関数値を出力する第１復号化ラウンド部と、
前の復号化ラウンドから出力された復号化ラウンド関数値と、現在の復号化ラウンドキとが入力されて、復号化ラウンド関数値を出力する第２復号化ラウンド部と、
前の復号化ラウンドから出力された復号化ラウンド関数値、復号化ラウンドキー（ｄＲＫＮｒ）、および平文の長さが入力されて、前記暗号文を平文に復元する第３復号化ラウンド部とを含むことを特徴とする、請求項５に記載の復号化装置。
【請求項８】
可変長ブロック暗号方法において、
秘密キーおよびラウンド数（Ｎｒ）を用いて、暗号化ラウンドキー（ｅＲＫ０，ｅＲＫ１，…，ｅＲＫＮｒ）を生成するステップと、
平文、前記暗号化ラウンドキーを用いて、前記平文と同じ長さの暗号文を出力するステップとを含むことを特徴とする、暗号化方法。
【請求項９】
可変長ブロック暗号方法において、
秘密キーおよびラウンド数（Ｎｒ）を用いて、復号化ラウンドキー（ｄＲＫ０，ｄＲＫ１，…，ｄＲＫＮｒ）を生成するステップと、
暗号文、前記復号化ラウンドキーを用いて、前記暗号文と同じ長さの平文に復元するステップとを含むことを特徴とする、復号化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
形態保存暗号化のための可変長ブロック暗号装置および方法に関するものであって、より詳細には、任意のビット長を有する平文を暗号化した時、同じビット長の暗号文が生成される可変長ブロック暗号装置および方法に関するものである。
【背景技術】
【０００２】
メッセージの機密性を保存するためには、メッセージの暗号化が必須であり、このために、ＡＥＳ（Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）を含む多様なブロック暗号が使用されている。しかし、既存のブロック暗号は、ブロックの大きさが予め定められていて、社会保障番号、クレジットカード番号など、特定形態のデータを暗号化すると、その形態が変化する。すなわち、社会保障番号やクレジットカード番号を格納するデータベースでは、データを暗号化した暗号文も、社会保障番号やクレジットカード番号と同じ形態ではじめて管理が容易であるが、既存のブロック暗号はこれを支援することができない。
【０００３】
一般的に、平文および暗号文の形態を同一にする暗号を形態保存暗号という。ここで、平文、暗号文の形態とは、平文、暗号文の属するドメインと見なすことができる。このように、任意のドメインに属する平文を同じドメインに属する暗号文に変換する技術は、ブロック暗号基盤の運用モード方式で構成されたいくつかの方法が存在する。しかし、このような方法は、１つのデータを暗号化するために基盤ブロック暗号を１０回以上駆動しなければならないため、効率性が低下する。韓国公開特許第１０−２００５−００６９９２７号は、ブロック暗号化方法およびブロック暗号／復号回路について開示している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】韓国公開特許第１０−２００５−００６９９２７号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
任意のビット長を有する平文を暗号化する時、同じビット長の暗号文を生成し、暗号文を同じ長さの平文に復号化する可変長ブロック暗号装置および方法を提供するためのものである。
【課題を解決するための手段】
【０００６】
一態様にかかる可変長ブロック暗号装置において、暗号化装置は、秘密キーおよびラウンド数（Ｎｒ）を用いて、暗号化ラウンドキー（ｅＲＫ０，ｅＲＫ１，…，ｅＲＫＮｒ）を生成する暗号化キー生成部と、平文、暗号化ラウンドキーを用いて、平文と同じ長さの暗号文を出力する暗号文出力部とを含むことができる。
【０００７】
暗号化キー生成部は、秘密キーおよびラウンド数（Ｎｒ）を入力として、秘密キーの長さに応じて予め設定された関数を行って（Ｎｒ＋１）×１２８ビット列を出力し、出力された結果を用いて、それぞれ１２８ビットの長さを有する暗号化ラウンドキー（ｅＲＫ０，ｅＲＫ１，…，ｅＲＫＮｒ）を生成することができる。
【０００８】
暗号文出力部は、平文、平文の長さ、および暗号化ラウンドキー（ｅＲＫ０）を入力として、平文の挿入位置を考慮して暗号化ラウンド関数値を出力する第１暗号化ラウンド部と、前の暗号化ラウンドから出力された暗号化ラウンド関数値と、暗号化ラウンドキー（ｅＲＫ１，…，ｅＲＫＮｒ−１）とが順次に入力されて、暗号化ラウンド関数値を出力する第２暗号化ラウンド部と、前の暗号化ラウンドから出力された暗号化ラウンド関数値、暗号化ラウンドキー（ｅＲＫＮｒ）、および平文の長さが入力されて、暗号文を出力する第３暗号化ラウンド部とを含むことができる。
【０００９】
また、暗号化装置は、マスターキーおよびトゥイークを用いて、前記マスターキーと同じ長さを有する前記秘密キーを生成する秘密キー生成部をさらに含むことができる。
【００１０】
秘密キー生成部は、マスターキーおよびトゥイークを用いて、メッセージ認証値（Ｍ［０］，Ｍ［１］，Ｍ［２］，…，Ｍ［１５］）を生成するメッセージ認証部を含むことができ、マスターキー中の所定のビットと生成されたメッセージ認証値とを排他的論理和（ＸＯＲ）演算して秘密キーを生成することができる。
【００１１】
この時、マスターキーは、１２８ビット、１９２ビット、または２５６ビットのうちのいずれか１つのビット長を有し、トゥイークは、任意のビット長を有し、生成されたメッセージ認証値は、１２８ビットの長さを有することができる。
【００１２】
一態様にかかる可変長ブロック暗号装置において、復号化装置は、秘密キーおよびラウンド数（Ｎｒ）を用いて、復号化ラウンドキー（ｄＲＫ０，ｄＲＫ１，…，ｄＲＫＮｒ）を生成する復号化キー生成部と、復号化ラウンドキーを用いて、暗号文と同じ長さの平文を復元する平文復元部とを含むことができる。
【００１３】
復号化キー生成部は、Ｄｅｃｒｙｐｔ（Ｅｎｃｒｙｐｔ（Ｐ，ｅＲＫ），ｄＲＫ）＝Ｐ（ここで、Ｐは平文，ｅＲＫは暗号化ラウンドキー、ｄＲＫは復号化ラウンドキー、Ｅｎｃｒｙｐｔ（）は暗号文出力部、Ｄｅｃｒｙｐｔ（）は平文復元部）を満足するように、復号化ラウンドキーを生成することができる。
【００１４】
平文復元部は、暗号文、平文の長さ、および復号化ラウンドキー（ｄＲＫ０）を入力として、暗号文の挿入位置を考慮して復号化ラウンド関数値を出力する第１復号化ラウンド部と、前の復号化ラウンドから出力された復号化ラウンド関数値と、復号化ラウンドキー（ｄＲＫ１，…，ｄＲＫＮｒ−１）とが順次に入力されて、復号化ラウンド関数値を出力する第２復号化ラウンド部と、前の復号化ラウンドから出力された復号化ラウンド関数値、復号化ラウンドキー（ｄＲＫＮｒ）、および平文の長さが入力されて、暗号文を平文に復元する第３復号化ラウンド部とを含むことができる。
【００１５】
一態様によれば、可変長ブロック暗号方法において、暗号化方法は、秘密キーおよびラウンド数（Ｎｒ）を用いて、暗号化ラウンドキー（ｅＲＫ０，ｅＲＫ１，…，ｅＲＫＮｒ）を生成するステップと、平文、暗号化ラウンドキーを用いて、平文と同じ長さの暗号文を出力するステップとを含むことができる。
【００１６】
暗号化ラウンドキーを生成するステップは、秘密キーおよびラウンド数（Ｎｒ）を入力として、秘密キーの長さに応じて予め設定された関数を行って（Ｎｒ＋１）×１２８ビット列を出力するステップと、出力された（Ｎｒ＋１）×１２８ビット列を用いて、それぞれ１２８ビットの長さを有する暗号化ラウンドキー（ｅＲＫ０，ｅＲＫ１，…，ｅＲＫＮｒ）を生成するステップとを含むことができる。
【００１７】
暗号文を出力するステップは、平文、平文の長さ、および暗号化ラウンドキー（ｅＲＫ０）を入力として、平文の挿入位置を考慮して暗号化ラウンド関数値を出力するステップと、前の暗号化ラウンドから出力された暗号化ラウンド関数値と、暗号化ラウンドキー（ｅＲＫ１，…，ｅＲＫＮｒ−１）とが順次に入力されて、暗号化ラウンド関数値を出力するステップと、前の暗号化ラウンドから出力された暗号化ラウンド関数値、暗号化ラウンドキー（ｅＲＫＮｒ）、および平文の長さが入力されて、暗号文を出力するステップとを含むことができる。
【００１８】
一態様にかかる可変長ブロック暗号方法において、復号化方法は、秘密キーおよびラウンド数（Ｎｒ）を用いて、復号化ラウンドキー（ｄＲＫ０，ｄＲＫ１，…，ｄＲＫＮｒ）を生成するステップと、暗号文、復号化ラウンドキーを用いて、暗号文と同じ長さの平文に復元するステップとを含むことができる。
【００１９】
復号化ラウンドキーを生成するステップは、Ｄｅｃｒｙｐｔ（Ｅｎｃｒｙｐｔ（Ｐ，ｅＲＫ），ｄＲＫ）＝Ｐ（ここで、Ｐは平文，ｅＲＫは暗号化ラウンドキー、ｄＲＫは復号化ラウンドキー、Ｅｎｃｒｙｐｔ（）は暗号文を出力するステップ、Ｄｅｃｒｙｐｔ（）は平文を復元するステップ）を満足するように、復号化ラウンドキーを生成することができる。
【００２０】
平文を復元するステップは、暗号文、平文の長さ、および復号化ラウンドキー（ｄＲＫ０）を入力として、暗号文の挿入位置を考慮して復号化ラウンド関数値を出力するステップと、前の復号化ラウンドから出力された復号化ラウンド関数値と、復号化ラウンドキー（ｄＲＫ１，…，ｄＲＫＮｒ−１）とが順次に入力されて、復号化ラウンド関数値を出力する復号化ラウンドを繰り返し行うステップと、前の復号化ラウンドから出力された復号化ラウンド関数値、復号化ラウンドキー（ｄＲＫＮｒ）、および平文の長さが入力されて、暗号文を平文に復元する復号化ラウンドを行うステップとを含むことができる。
【発明の効果】
【００２１】
提示される可変長ブロック暗号装置によれば、任意のビット長を有する平文に対して同じ長さの暗号文を迅速に生成し、暗号文を迅速に平文に復元することができる。これにより、ブロック暗号の攻撃に対する安全性を向上させることができる。
【図面の簡単な説明】
【００２２】
【図１】一実施形態にかかる可変長ブロック暗号装置における暗号化装置のブロック図である。
【図２】図１の実施形態にかかる暗号化装置で行われるアルゴリズムおよびデータの例である。
【図３Ａ】図１の実施形態にかかる暗号化装置で行われるアルゴリズムおよびデータの例である。
【図３Ｂ】図１の実施形態にかかる暗号化装置で行われるアルゴリズムおよびデータの例である。
【図４】図１の実施形態にかかる暗号化装置で行われるアルゴリズムおよびデータの例である。
【図５】図１の実施形態にかかる暗号化装置で行われるアルゴリズムおよびデータの例である。
【図６】図１の実施形態にかかる暗号化装置で行われるアルゴリズムおよびデータの例である。
【図７】図１の実施形態にかかる暗号化装置で行われるアルゴリズムおよびデータの例である。
【図８】図１の実施形態にかかる暗号化装置で行われるアルゴリズムおよびデータの例である。
【図９】図１の実施形態にかかる暗号化装置で行われるアルゴリズムおよびデータの例である。
【図１０】図１の実施形態にかかる暗号化装置で行われるアルゴリズムおよびデータの例である。
【図１１Ａ】図１の実施形態にかかる暗号化装置で行われるアルゴリズムおよびデータの例である。
【図１１Ｂ】図１の実施形態にかかる暗号化装置で行われるアルゴリズムおよびデータの例である。
【図１１Ｃ】図１の実施形態にかかる暗号化装置で行われるアルゴリズムおよびデータの例である。
【図１１Ｄ】図１の実施形態にかかる暗号化装置で行われるアルゴリズムおよびデータの例である。
【図１２】図１の実施形態にかかる暗号化装置で行われるアルゴリズムおよびデータの例である。
【図１３】図１の実施形態にかかる暗号化装置で行われるアルゴリズムおよびデータの例である。
【図１４】図１の実施形態にかかる暗号化装置で行われるアルゴリズムおよびデータの例である。
【図１５】図１の実施形態にかかる暗号化装置で行われるアルゴリズムおよびデータの例である。
【図１６】図１の実施形態にかかる暗号化装置で行われるアルゴリズムおよびデータの例である。
【図１７】図１の実施形態にかかる暗号化装置で行われるアルゴリズムおよびデータの例である。
【図１８】図１の実施形態にかかる暗号化装置で行われるアルゴリズムおよびデータの例である。
【図１９】図１の実施形態にかかる暗号化装置で行われるアルゴリズムおよびデータの例である。
【図２０】図１の実施形態にかかる暗号化装置で行われるアルゴリズムおよびデータの例である。
【図２１】図１の実施形態にかかる暗号化装置で行われるアルゴリズムおよびデータの例である。
【図２２】一実施形態にかかる可変長ブロック暗号装置における復号化装置のブロック図である。
【図２３】図２２の実施形態にかかる復号化装置で行われるアルゴリズムおよびデータの例である。
【図２４】図２２の実施形態にかかる復号化装置で行われるアルゴリズムおよびデータの例である。
【図２５】図２２の実施形態にかかる復号化装置で行われるアルゴリズムおよびデータの例である。
【図２６】図２２の実施形態にかかる復号化装置で行われるアルゴリズムおよびデータの例である。
【図２７】図２２の実施形態にかかる復号化装置で行われるアルゴリズムおよびデータの例である。
【図２８Ａ】図２２の実施形態にかかる復号化装置で行われるアルゴリズムおよびデータの例である。
【図２８Ｂ】図２２の実施形態にかかる復号化装置で行われるアルゴリズムおよびデータの例である。
【図２８Ｃ】図２２の実施形態にかかる復号化装置で行われるアルゴリズムおよびデータの例である。
【図２８Ｄ】図２２の実施形態にかかる復号化装置で行われるアルゴリズムおよびデータの例である。
【図２９Ａ】図２２の実施形態にかかる復号化装置で行われるアルゴリズムおよびデータの例である。
【図２９Ｂ】図２２の実施形態にかかる復号化装置で行われるアルゴリズムおよびデータの例である。
【図２９Ｃ】図２２の実施形態にかかる復号化装置で行われるアルゴリズムおよびデータの例である。
【図２９Ｄ】図２２の実施形態にかかる復号化装置で行われるアルゴリズムおよびデータの例である。
【図３０】図２２の実施形態にかかる復号化装置で行われるアルゴリズムおよびデータの例である。
【図３１】図２２の実施形態にかかる復号化装置で行われるアルゴリズムおよびデータの例である。
【図３２】一実施形態にかかる可変長ブロック暗号装置における秘密キー生成装置のブロック図である。
【図３３】一実施形態にかかる可変長ブロック暗号装置における暗号化装置によって行われる暗号化方法のフローチャートである。
【図３４】一実施形態にかかる可変長ブロック暗号装置における復号化装置によって行われる復号化方法のフローチャートである。
【発明を実施するための形態】
【００２３】
その他実施形態の具体的な事項は詳細な説明および図面に含まれている。記載された技術の利点および特徴、そしてそれらを達成する方法は、添付した図面と共に詳細に後述する実施形態を参照すれば明確になる。明細書全体にわたって同一の参照符号は同一の構成要素を表す。
【００２４】
以下、形態保存暗号化のための可変長ブロック暗号装置および方法の実施形態を、図面を参照して詳細に説明する。
【００２５】
本発明の実施形態にかかる可変長ブロック暗号装置は、図１を参照して説明される暗号化装置１００と、図２２を参照して説明される復号化装置２００と、図３２を参照して説明される秘密キー生成装置３００とを含むことができる。この時、秘密キー生成装置３００は、暗号化装置１００および復号化装置２００とは別個の装置であってよいが、必要によって、暗号化装置１００または復号化装置２００の一構成として含まれて実現されてもよい。
【００２６】
以下、各図面において使用される
【数６】
2015158665.tif 000003
演算は、論理和（ＸＯＲ）演算を意味し、例えば、
【数７】
2015158665.tif 000004
は、２つのビット列、または２つのバイト列ｘとｙのビット別排他的論理和（ＸＯＲ）演算を意味する。また、ｍｏｄ演算は、特定値を除した余り値を取る演算を意味する。
【００２７】
図１は、一実施形態にかかる可変長ブロック暗号装置における暗号化装置のブロック図である。図２〜図２１は、図１の実施形態にかかる暗号化装置で行われるアルゴリズムおよびデータの例である。
【００２８】
図１〜図２１を参照して、可変長ブロック暗号装置において、暗号化装置１００を説明すれば、図１に示されているように、暗号化装置１００は、暗号化キー生成部１１０と、暗号文出力部１２０とを含む。
【００２９】
暗号化キー生成部１１０は、秘密キー（Ｋ）が入力され、入力された秘密キー（Ｋ）およびラウンド数（Ｎｒ）を用いて、暗号化ラウンドキー（ｅＲＫ）を生成する。
【００３０】
この時、秘密キー（Ｋ）は、１２８ビット、１９２ビット、または２５６ビットであり、８ビットのサブキーが連接して構成されてよい。すなわち、秘密キー（Ｋ）は、１６個の８ビットのサブキー（Ｋ［０］，Ｋ［１］，Ｋ［２］，…，Ｋ［１５］）が連接して構成された１２８ビットの秘密キー（Ｋ＝Ｋ［０］｜｜Ｋ［１］｜｜Ｋ［２］｜｜…｜Ｋ［１５］）、または２４個の８ビットのサブキー（Ｋ［０］，Ｋ［１］，Ｋ［２］，…，Ｋ［２３］）が連接して構成された１９２ビットの秘密キー（Ｋ＝Ｋ［０］｜｜Ｋ［１］｜｜Ｋ［２］｜｜…｜Ｋ［２３］）、または３２個のサブキー（Ｋ［０］，Ｋ［１］，Ｋ［２］，…，Ｋ［３１］）が連接して構成された２５６ビットの秘密キー（Ｋ＝Ｋ［０］｜｜Ｋ［１］｜｜Ｋ［２］｜｜…｜Ｋ［３１］）であってよい。
【００３１】
一方、図２は、ラウンド数（Ｎｒ）を例示したもので、ラウンド数（Ｎｒ）は、平文（Ｐ）の長さ（Ｎｂ）および秘密キーの長さ（Ｎｋ）に応じて予め設定され、可変長ブロック暗号アルゴリズムの安全性を考慮して適切な値に予め設定可能である。
【００３２】
また、図３Ａおよび図３Ｂは、暗号化ラウンドキー（ｅＲＫ）を生成する各ラウンドで使用される任意の定数であるラウンド定数（ＲＣ）を例示したものである。図４は、暗号化キー生成部１１０が暗号化ラウンドキー（ｅＲＫ）を生成するのに使用するアルゴリズムの一例である。
【００３３】
暗号化キー生成部１１０は、秘密キー（Ｋ＝（Ｋ［０］，Ｋ［１］，…，Ｋ［Ｎｋ／８−１］））、予め設定されたラウンド数（Ｎｒ）、およびラウンド定数（ＲＣ）を入力して、図４に例示されたようなアルゴリズムを行い、その結果として、（Ｎｒ＋１）個の１２８ビットの暗号化ラウンドキー（ｅＲＫｉ＝（ｅＲＫｉ［０］，ｅＲＫｉ［１］，…，ｅＲＫｉ［１５］）、０≦ｉ≦Ｎｒ）を生成することができる。
【００３４】
例えば、暗号化キー生成部１１０は、図４に例示されたように、秘密キー（Ｋ）の長さに応じて、それぞれ、１２８ビットの秘密キー（Ｋ＝（Ｋ［０］，Ｋ［１］，…，Ｋ［１５］））、１９２ビットの秘密キー（Ｋ＝（Ｋ［０］，Ｋ［１］，…，Ｋ［２３］））、および２５６ビットの秘密キー（Ｋ＝（Ｋ［０］，Ｋ［１］，…，Ｋ［３１］））と、ラウンド数（Ｎｒ）、および予め設定されたラウンド定数（ＲＣ）を用いて、その結果として、いずれも（Ｎｒ＋１）×１２８ビット列を出力することができる。図５は、暗号化キー生成部１１０が、図４に例示されたアルゴリズムを用いて暗号化ラウンドキー（ｅＲＫ）を生成する時に使用されるＧ（）関数アルゴリズムの一例である。
【００３５】
暗号化キー生成部１１０は、その結果出力された（Ｎｒ＋１）×１２８ビット列を用いて、（Ｎｒ＋１）個の１２８ビットの暗号化ラウンドキー（ｅＲＫｉ＝（ｅＲＫｉ［０］，ｅＲＫｉ［１］，…，ｅＲＫｉ［１５］）、０≦ｉ≦Ｎｒ）を生成することができる。
【００３６】
暗号文出力部１２０は、平文（Ｐ）、生成された暗号化ラウンドキー（ｅＲＫ）を用いて、平文（Ｐ）と同じ長さ（Ｎｂ）の暗号文（Ｃ）を出力することができる。
【００３７】
図１を参照すれば、暗号文出力部１２０は、より具体的には、第１暗号化ラウンド部１２１と、第２暗号化ラウンド部１２２と、第３暗号化ラウンド部１２３とを含むことができる。
【００３８】
図６は、暗号文出力部１２０が行うアルゴリズムの一例である。図６を参照してより具体的に説明すれば、第１暗号化ラウンド部１２１は、平文（Ｐ）、生成された（Ｎｒ＋１）個の暗号化ラウンドキー（ｅＲＫ０，ｅＲＫ１，…，ｅＲＫＮｒ）のうちの一番目の暗号化ラウンドキー（ｅＲＫ０）と、平文の長さ（Ｎｂ）を入力として、暗号化前処理関数Ｅｎｃ＿ＰｒｅＰｒｏｃ（）を行い、平文（Ｐ）の挿入位置を考慮して初期暗号化ラウンド関数値を出力することができる。
【００３９】
Ｅｎｃ＿ＰｒｅＰｒｏｃ（）のアルゴリズムは、図７に例示されている。Ｅｎｃ＿ＰｒｅＰｒｏｃ（）関数は、８〜１２８ビットの間の任意の長さを有する平文（Ｐ）、平文の長さ（Ｎｂ）、および予め設定されたフラグを、ＳｅｔＰｏｓＩｎ（）関数に入力して１２８ビット列の暗号化のための初期状態を出力し、その結果を、暗号化ラウンドキー（ｅＲＫ０）と排他的論理和（ＸＯＲ）演算を行って１２８ビットの初期暗号化ラウンド関数値を出力する。
【００４０】
この時、ＳｅｔＰｏｓＩｎ（）関数のアルゴリズムは、図８に例示されており、平文（Ｐ）の長さ（Ｎｂ）と、０から７の間の任意の整数値を入力として、平文データの挿入位置を考慮して０〜７の間の整数を出力する関数ＥｖｅｎＤａｔａＩｎＰｏｓＴａｂｌｅ（）を行うことができる。ＥｖｅｎＤａｔａＩｎＰｏｓＴａｂｌｅ（）関数は、図９に例示されている。
【００４１】
第２暗号化ラウンド部１２２は、前の暗号化ラウンドから出力された暗号化ラウンド関数値と、暗号化ラウンドキー（ｅＲＫ１，…，ｅＲＫＮｒ−１）とが順次に入力されて、暗号化ラウンド関数値を出力する。
【００４２】
この時、第２暗号化ラウンド部１２２は、奇数番目の暗号化ラウンドを行って暗号化ラウンド関数値を出力する第２奇数暗号化ラウンド部１２２ａと、偶数番目の暗号化ラウンドを行って暗号化ラウンド関数値を出力する第２偶数暗号化ラウンド部１２２ｂとを含むことができる。
【００４３】
第２奇数暗号化ラウンド部１２２ａは、前のラウンドから出力された暗号化ラウンド関数値、暗号化ラウンドキー（ｅＲＫ１，ｅＲＫ３，ｅＲＫ５，…，ｅＲＫＮｒ−１）をＥｎｃ＿ＯＲｏｕｎｄ（）に入力し、Ｅｎｃ＿ＯＲｏｕｎｄ（）関数を行って暗号化ラウンド関数値を出力する。
【００４４】
Ｅｎｃ＿ＯＲｏｕｎｄ（）関数は、図１０に例示されており、Ｅｎｃ＿ＯＲｏｕｎｄ（）関数は、ＥｎｃＯｄｄＭａｓｋ（）を行った結果と、前のラウンドから出力された暗号化ラウンド関数値とのビット別論理積（ＡＮＤ）演算を行い、以後、ＳｈｉｆｔＲｏｗｓ（）、ＳｕｂＢｙｔｅｓ（）、およびＭｉｘＣｏｌｕｍｎｓ（）関数などを行い、最終的に、その結果と暗号化ラウンドキーとの排他的論理和（ＸＯＲ）演算を行って１２８ビット列を出力する。
【００４５】
この時、ＥｎｃＯｄｄＭａｓｋ（）関数は、図１１Ａ〜図１１Ｄに例示されており、平文の長さ（Ｎｂ）が入力されて、奇数番目のラウンドで使用される１２８ビット列を出力することができる。
【００４６】
ＳｈｉｆｔＲｏｗｓ（）は、図１２に例示されており、１６バイト列が入力されて、バイト位置を変化させた１６バイト列を出力する。ＳｈｉｆｔＲｏｗｓ（）は、ＳｈｉｆｔＲｏｗｓＴａｂｌｅ（）関数を行って各１６バイトの位置番号を変更する。この時、ＳｈｉｆｔＲｏｗｓＴａｂｌｅ（）関数は、図１３に例示されている。
【００４７】
ＳｕｂＢｙｔｅｓ（）は、図１４に例示されており、１６バイト列、平文の長さ（Ｎｂ）、およびフラグが入力されて、各バイト別に新しいバイトに置換して１６バイト列を出力する。ＳｕｂＢｙｔｅｓ（）は、Ｓ（）関数およびＳＰ（）関数を行って１２８ビット列を出力する。この時、Ｓ（）関数は、図１５に例示されており、可変長ブロック暗号の安全性を保障するために、小さい線形確率と差分確率、高い代数的次数などの性質を有するように設けられたバイトが入力されて、バイトを出力する一対一関数である。
【００４８】
また、ＳＰ（）関数は、図１６に例示されており、一実施形態により、暗号／復号化が行われるように、メッセージとトゥイークの位置を調節するバイト、平文の長さ、フラグが入力されて、バイト内のビット位置を交換したバイトを出力する一対一関数である。
【００４９】
さらに、ＭｉｘＣｏｌｕｍｎｓ（）関数は、図１７に例示されており、拡散効果を利用して可変長ブロック暗号の安全性を確保できるように、１６バイト列が入力されて、１６バイト列を出力する。この時、各バイト列の各バイトは、既約多項式ｐ（ｘ）＝ｘ８＋ｘ４＋ｘ３＋ｘ＋１によって定義される有限体ＧＦ（２８）の元素と見なすことができる。ＭｉｘＣｏｌｕｍｎｓ（）関数において、Ｘ［ｉ］に対する加算および乗算は、当該有限体上で定義される演算であってよい。
【００５０】
第２偶数暗号化ラウンド部１２２ｂは、前のラウンドから出力された暗号化ラウンド関数値、暗号化ラウンドキー（ｅＲＫ２，ｅＲＫ４，ｅＲＫ６，…，ｅＲＫＮｒ−２）をＥｎｃ＿ＥＲｏｕｎｄ（）に入力し、Ｅｎｃ＿ＥＲｏｕｎｄ（）関数を行って暗号化ラウンド関数値を出力する。
【００５１】
Ｅｎｃ＿ＥＲｏｕｎｄ（）は、図１８に例示されている。Ｅｎｃ＿ＥＲｏｕｎｄ（）関数は、ＥｎｃＥｖｅｎＭａｓｋ（）を行った結果と、前のラウンドから出力された暗号化ラウンド関数値とのビット別論理積（ＡＮＤ）演算を行い、以後、ＳｈｉｆｔＲｏｗｓ（）、ＳｕｂＢｙｔｅｓ（）、およびＭｉｘＣｏｌｕｍｎｓ（）関数などを行い、最終的に、その結果と暗号化ラウンドキーとの排他的論理和演算を行って１２８ビット列の暗号化ラウンド関数値を出力する。
【００５２】
ＥｎｃＥｖｅｎＭａｓｋ（）は、図１１Ａ〜図１１Ｄに例示されており、平文の長さ（Ｎｂ）が入力されて、偶数番目のラウンドで使用される１２８ビット列を出力することができる。ＳｈｉｆｔＲｏｗｓ（）、ＳｕｂＢｙｔｅｓ（）、およびＭｉｘＣｏｌｕｍｎｓ（）は、前述の通りである。
【００５３】
第３暗号化ラウンド部１２３は、前の暗号化ラウンド関数値、最後の暗号化ラウンドキー（ｅＲＫＮｒ）、および平文の長さ（Ｎｂ）を入力してＥｎｃ＿ＦＲｏｕｎｄ（）関数を行い、最終的に、平文の長さ（Ｎｂ）と同じ暗号文（Ｃ）を出力する。
【００５４】
Ｅｎｃ＿ＦＲｏｕｎｄ（）関数は、図１９に例示されている。図１９を参照すれば、Ｅｎｃ＿ＦＲｏｕｎｄ（）関数は、１２８ビット列の前の暗号化ラウンド関数値、１２８ビットの暗号化ラウンドキー（ｅＲＫＮｒ）、および平文の長さ（Ｎｂ）が入力されて、前述のＳｈｉｆｔＲｏｗｓ（）、ＳｕｂＢｙｔｅｓ（）関数を行い、その結果と暗号化ラウンドキー（ｅＲＫＮｒ）とを排他的論理和（ＸＯＲ）演算を行い、以後、順次にＳｗａｐＢｙｔｅｓ（）およびＳｅｔＰｏｓＯｕｔ（）関数を行う。
【００５５】
この時、ＳｗａｐＢｙｔｅｓ（）関数は、図２０に例示されており、１６バイト列が入力されて、バイト位置を変化させた１６バイト列を出力する。
【００５６】
また、ＳｅｔＰｏｓＯｕｔ（）関数は、図２１に例示されており、１２８ビット列の暗号化の内部状態、平文の長さ（Ｎｂ）、予め設定された任意のフラグが入力されて、定められた長さ（Ｎｂ）の暗号文（Ｃ）を出力する。
【００５７】
一方、暗号化装置１００は、秘密キー生成部（図示せず）をさらに含むことができる。この時、秘密キー生成部（図示せず）は、図３２に示された秘密キー生成装置３００であってよく、図３２を参照して詳細に説明する。
【００５８】
図２２は、一実施形態にかかる可変長ブロック暗号装置における復号化装置のブロック図である。図２３〜図３１は、図２２の実施形態にかかる復号化装置で行われるアルゴリズムおよびデータの例である。以下では、暗号化装置１００で説明した関数と同じ名前を有する関数は、先に説明した関数と同じ機能を有する関数であるので、詳細な説明を省略する。
【００５９】
図２２を参照すれば、一実施形態にかかる復号化装置２００は、復号化キー生成部２１０と、平文復元部２２０とを含む。
【００６０】
復号化キー生成部２１０は、秘密キー（Ｋ）、および秘密キーの長さ（Ｎｋ）と平文の長さ（Ｎｂ）に応じて適切に設定されたラウンド数（Ｎｒ）を用いて、下記の数式１を満足するように、復号化ラウンドキー（ｄＲＫ）を生成する。
【００６１】
この時、秘密キー（Ｋ）は、前述のように、１２８ビット、１９２ビット、または２５６ビットである。また、ラウンド数（Ｎｒ）は、図２に例示されているように、平文（Ｐ）の長さ（Ｎｂ）および秘密キーの長さ（Ｎｋ）に応じて予め設定され、可変長ブロック暗号アルゴリズムの安全性を考慮して適切な値に予め設定可能である。
【００６２】
【数１】
2015158665.tif 000005
【００６３】
ここで、Ｄｅｃｒｙｐｔ（）関数は、復号化装置２００中の平文復元部２２０、Ｅｎｃｒｙｐｔ（）関数は、暗号化装置１００中の暗号文出力部１２０を意味することができる。
【００６４】
復号化キー生成部２１０は、秘密キー（Ｋ）およびラウンド数（Ｎｒ）を用いて、図２３に例示されているアルゴリズムを行い、その結果、前記数式１を満足するように、（Ｎｒ＋１）個の復号化ラウンドキー（ｄＲＫ０，ｄＲＫ１，…，ｄＲＫＮｒ）を生成することができる。図２４は、復号化キー生成部２１０によって行われる図２３のアルゴリズム中においてＩｎｖＭｉｘＣｏｌｕｍｎｓ（）関数アルゴリズムの一例である。
【００６５】
平文復元部２２０は、暗号文（Ｃ）、復号化ラウンドキー（ｄＲＫ）、および復号化ラウンドトゥイーク（ｄＴＷ）が入力されて、暗号文（Ｃ）を平文に復元する。
【００６６】
図２２を参照すれば、平文復元部２２０は、より具体的には、第１復号化ラウンド部２２１と、第２復号化ラウンド部２２２と、第３復号化ラウンド部２２３とを含むことができる。
【００６７】
図２５は、平文復元部２２０が行うアルゴリズムの一例である。図２５を参照すれば、第１復号化ラウンド部２２１は、暗号文（Ｃ）、生成された（Ｎｒ＋１）個の復号化ラウンドキー（ｄＲＫ０，ｄＲＫ１，…，ｄＲＫＮｒ）中の一番目の復号化ラウンドキー（ｄＲＫ０）と、平文の長さ（Ｎｂ）を入力として、復号化前処理関数Ｄｅｃ＿ＰｒｅＰｒｏｃ（）を行い、初期復号化ラウンド関数値を出力することができる。
【００６８】
Ｄｅｃ＿ＰｒｅＰｒｏｃ（）のアルゴリズムは、図２６に例示されている。Ｄｅｃ＿ＰｒｅＰｒｏｃ（）関数は、暗号文（Ｃ）、平文の長さ（Ｎｂ）、および予め設定されたフラグを入力として、ＳｅｔＰｏｓＩｎ（）関数およびＳｗａｐＢｙｔｅｓ（）関数を順次に実行し、その結果を、復号化ラウンドキー（ｄＲＫ０）と排他的論理和（ＸＯＲ）演算を行って１２８ビットの初期復号化ラウンド関数値を出力する。
【００６９】
第２復号化ラウンド部２２２は、前の復号化ラウンドから出力された復号化ラウンド関数値と、復号化ラウンドキー（ｄＲＫ１，…，ｄＲＫＮｒ−１）とが順次に入力されて、復号化ラウンド関数値を出力する。
【００７０】
この時、第２復号化ラウンド部２２２は、奇数番目の復号化ラウンドを行って復号化ラウンド関数値を出力する第２奇数復号化ラウンド部２２２ａと、偶数番目の復号化ラウンドを行って復号化ラウンド関数値を出力する第２偶数復号化ラウンド部２２２ｂとを含むことができる。
【００７１】
第２奇数復号化ラウンド部２２２ａは、前のラウンドから出力された復号化ラウンド関数値、復号化ラウンドキー（ｄＲＫ１，ｄＲＫ３，ｄＲＫ５，…，ｄＲＫＮｒ−１）をＤｅｃ＿ＯＲｏｕｎｄ（）に入力し、Ｄｅｃ＿ＯＲｏｕｎｄ（）関数を行って復号化ラウンド関数値を出力する。
【００７２】
Ｄｅｃ＿ＯＲｏｕｎｄ（）関数は、図２７に例示されており、Ｄｅｃ＿ＯＲｏｕｎｄ（）関数は、ＩｎｖＳｕｂＢｙｔｅｓ（）関数およびＩｎｖＳｈｉｆｔＲｏｗｓ（）関数を順次に行い、その結果と復号化ラウンドキーとを排他的論理和（ＸＯＲ）演算を行い、以後、ＤｅｃＯｄｄＭａｓｋ（）関数を行った結果と論理積演算を行う。以後、ＯｄｄＣｏｎｓｔ（）関数の実行結果と排他的論理和演算を行い、その後、ＩｎｖＭｉｘＣｏｌｕｍｎｓ（）関数を行って１２８ビット列を出力する。
【００７３】
この時、ＩｎｖＳｕｂＢｙｔｅｓ（）関数は、入力された１６バイト列、平文の長さ（Ｎｂ）、および予め設定されたフラグが入力されて、各バイト別に新しいバイトに置換されて１６バイト列を出力し、すべての１６バイト列Ｘと、８〜１２８の間の平文の長さ（Ｎｂ）に対して、下記の数式２を満足する。
【数２】
2015158665.tif 000006
【００７４】
ここで、ＳｕｂＢｙｔｅｓ（）関数と、ＩｎｖＳｕｂＢｙｔｅｓ（）関数の三番目のパラメータ１または２は、予め設定されたフラグを意味し、ＳｕｂＢｙｔｅｓ（）関数は、前述のように、図１４に例示されている。
【００７５】
また、ＩｎｖＳｈｉｆｔＲｏｗｓ（）関数は、１６バイト列が入力されて、バイト位置を変化させた１６バイト列を出力し、前述の関数ＳｈｉｆｔＲｏｗｓ（）の逆演算により、すべての１６バイト列Ｘに対して、下記の数式3を満足する。
【数３】
2015158665.tif 000007
【００７６】
関数ＩｎｖＭｉｘＣｏｌｕｍｎｓ（）は、１６バイト列、平文の長さ、フラグが入力されて、１６バイト列を出力し、すべての１６バイト列Ｘと、８ビットから１２８ビットの間の平文の長さ（Ｎｂ）に対して、下記の数式４を満足することができる。
【数４】
2015158665.tif 000008
【００７７】
一方、ＭｉｘＣｏｌｕｍｎｓ（）とＩｎｖＭｉｘＣｏｌｕｍｎｓ（）は、行列積でも表現が可能である。ＭｉｘＣｏｌｕｍｎｓ（）を表現する行列をＡ、ＩｎｖＭｉｘＣｏｌｕｍｎｓ（）を表現する行列をＢとし、（Ｘ，Ｃ）ＴをＭｉｘＣｏｌｕｍｎｓ（）の入力、（Ｙ，＊）ＴをＭｉｘＣｏｌｕｍｎｓ（）の出力、Ｃを定数部分とすれば、下記の数式５を満足することができる。
【数５】
2015158665.tif 000009
【００７８】
図２８Ａ〜図２９Ｄは、図２７および図３０に例示されたアルゴリズムに使用されるＤｅｃＯｄｄＭａｓｋ（）、ＤｅｃＥｖｅｎＭａｓｋ（）、ＯｄｄＣｏｎｓｔ（）、およびＥｖｅｎＣｏｎｓｔ（）関数の一例である。
【００７９】
第２偶数復号化ラウンド部２２２ｂは、前のラウンドから出力された復号化ラウンド関数値、復号化ラウンドキー（ｄＲＫ２，ｄＲＫ４，ｄＲＫ６，…，ｄＲＫＮｒ−２）をＤｅｃ＿ＥＲｏｕｎｄ（）に入力し、Ｄｅｃ＿ＥＲｏｕｎｄ（）関数を行って復号化ラウンド関数値を出力する。Ｄｅｃ＿ＥＲｏｕｎｄ（）は、図３０に例示されている。
【００８０】
第３復号化ラウンド部２２３は、前の復号化ラウンド関数値、最後の復号化ラウンドキー（ｄＲＫＮｒ）、および平文の長さ（Ｎｂ）を入力してＤｅｃ＿ＦＲｏｕｎｄ（）関数を行い、最終的に、暗号文（Ｃ）を平文（Ｐ）に復元する。Ｄｅｃ＿ＦＲｏｕｎｄ（）関数は、図３１に例示されている。
【００８１】
一方、復号化装置２００は、秘密キー生成部（図示せず）をさらに含むことができる。この時、秘密キー生成部（図示せず）は、図３２に示された秘密キー生成装置３００であってよく、図３２を参照して詳細に説明する。
【００８２】
図３２は、一実施形態にかかる可変長ブロック暗号装置における秘密キー生成装置のブロック図である。
【００８３】
図３２を参照すれば、秘密キー生成装置３００は、メッセージ認証値生成部３１０を含むことができる。
【００８４】
図示のように、メッセージ認証値生成部３１０は、マスターキーおよびトゥイークを用いて、メッセージ認証値（Ｍ［０］，Ｍ［１］，Ｍ［２］，…，Ｍ［１５］）を生成することができる。この時、マスターキーは、１２８ビット、１９２ビット、または２５６ビットであってよく、トゥイークは、任意のビット長を有することができる。また、メッセージ認証値生成部３１０によって生成されるメッセージ認証値は、１２８ビットであってよい。
【００８５】
秘密キー生成装置３００は、メッセージ認証値生成部３１０によってメッセージ認証値が生成されると、マスターキー中の上位１２８ビット（ＭＫ［０］，ＭＫ［１］，ＭＫ［２］，…，ＭＫ［１５］）とメッセージ認証値とを排他的論理和（ＸＯＲ）演算して秘密キー（Ｋ）を出力することができる。
【００８６】
図３３は、一実施形態にかかる可変長ブロック暗号装置における暗号化装置によって行われる暗号化方法のフローチャートである。
【００８７】
図３３は、図１の暗号化装置１００によって行われる暗号化方法の一実施形態である。図１〜図２１を参照して、暗号化装置１００によって行われる暗号化方法を詳細に説明したので、以下、重複する説明を避けるために簡単に説明する。
【００８８】
まず、暗号化装置１００が、図示のように、マスターキー、トゥイークを用いて、秘密キーを生成したり、秘密キー生成装置から生成された秘密キーを受信する（ステップ４１０）。
【００８９】
次に、暗号化装置１００の暗号化キー生成部１１０が、秘密キー（Ｋ）およびラウンド数（Ｎｒ）を用いて、（Ｎｒ＋１）個の暗号化ラウンドキー（ｅＲＫ０，ｅＲＫ１，…，ｅＲＫＮｒ）を生成する（ステップ４２０）。この時、前述のように、秘密キー（Ｋ）は、１２８ビット、１９２ビット、または２５６ビットである。また、ラウンド数（Ｎｒ）は、可変長ブロック暗号アルゴリズムの安全性を考慮して、平文（Ｐ）の長さ（Ｎｂ）および秘密キーの長さ（Ｎｋ）に応じて適切な値に予め設定される。
【００９０】
次に、暗号文出力部１２０は、平文（Ｐ）、生成された暗号化ラウンドキー（ｅＲＫ）を用いて、平文（Ｐ）と同じ長さ（Ｎｂ）の暗号文（Ｃ）を出力することができる（ステップ４３０）。
【００９１】
暗号文出力部１２０は、平文（Ｐ）、生成された（Ｎｒ＋１）個の暗号化ラウンドキー（ｅＲＫ０，ｅＲＫ１，…，ｅＲＫＮｒ）中の一番目の暗号化ラウンドキー（ｅＲＫ０）と、平文の長さ（Ｎｂ）を入力として、暗号化前処理関数Ｅｎｃ＿ＰｒｅＰｒｏｃ（）を行い、平文（Ｐ）の挿入位置を考慮して初期暗号化ラウンド関数値を出力することができる。
【００９２】
以後、暗号文出力部１２０は、前の暗号化ラウンドから出力された暗号化ラウンド関数値と、暗号化ラウンドキー（ｅＲＫ１，…，ｅＲＫＮｒ−１）とが順次に入力されて、暗号化ラウンド関数値を出力することができる。この時、奇数番目の暗号化ラウンドで前のラウンドの暗号化ラウンド関数値、暗号化ラウンドキー（ｅＲＫ１，ｅＲＫ３，ｅＲＫ５，…，ｅＲＫＮｒ−１）をＥｎｃ＿ＯＲｏｕｎｄ（）に入力し、Ｅｎｃ＿ＯＲｏｕｎｄ（）関数を行って暗号化ラウンド関数値を出力し、偶数番目の暗号化ラウンドで前のラウンドから出力された暗号化ラウンド関数値、暗号化ラウンドキー（ｅＲＫ２，ｅＲＫ４，ｅＲＫ６，…，ｅＲＫＮｒ−２）をＥｎｃ＿ＥＲｏｕｎｄ（）に入力し、Ｅｎｃ＿ＥＲｏｕｎｄ（）関数を行って暗号化ラウンド関数値を出力することができる。
【００９３】
以後、暗号文出力部１２０は、前の暗号化ラウンド関数値、最後の暗号化ラウンドキー（ｅＲＫＮｒ）、および平文の長さ（Ｎｂ）を入力してＥｎｃ＿ＦＲｏｕｎｄ（）関数を行い、最終的に、平文の長さ（Ｎｂ）と同じ暗号文（Ｃ）を出力することができる。
【００９４】
図３４は、一実施形態にかかる可変長ブロック暗号装置における復号化装置によって行われる復号化方法のフローチャートである。
【００９５】
図３４は、図２２の復号化装置２００によって行われる復号化方法の一実施形態であって、図２６〜図３１を参照して詳細に説明した。したがって、以下、重複する説明を避けるために簡単に説明する。
【００９６】
まず、復号化装置２００が、図示のように、マスターキー、トゥイークを用いて、秘密キーを生成したり、秘密キー生成装置から生成された秘密キーを受信する（ステップ５１０）。
【００９７】
次に、復号化キー生成部２１０は、秘密キー（Ｋ）、および秘密キーの長さ（Ｎｋ）と平文の長さ（Ｎｂ）に応じて適切に設定されたラウンド数（Ｎｒ）を用いて、前記数式１を満足するように、（Ｎｒ＋１）個の復号化ラウンドキー（ｄＲＫ０，ｄＲＫ１，…，ｄＲＫＮｒ−１）を生成することができる（ステップ５２０）。この時、復号化キー生成部２１０は、前記数式１のようなアルゴリズムを行って（Ｎｒ＋１）個の復号化ラウンドキー（ｄＲＫ０，ｄＲＫ１，…，ｄＲＫＮｒ−１）を生成することができる。
【００９８】
次に、平文復元部２２０は、暗号文（Ｃ）、復号化ラウンドキー（ｄＲＫ）が入力されて、暗号文（Ｃ）を平文に復元する（ステップ５３０）。
【００９９】
平文復元部２２０は、暗号文（Ｃ）、一番目の復号化ラウンドキー（ｄＲＫ０）と、平文の長さ（Ｎｂ）を入力として、復号化前処理関数Ｄｅｃ＿ＰｒｅＰｒｏｃ（）を行い、初期復号化ラウンド関数値を出力することができる。
【０１００】
次に、前の復号化ラウンドから出力された復号化ラウンド関数値と、復号化ラウンドキー（ｄＲＫ１，…，ｄＲＫＮｒ−１）とが順次に入力されて、復号化ラウンド関数値を出力する。この時、奇数番目の復号化ラウンドを行って復号化ラウンド関数値を出力するＤｅｃ＿ＯＲｏｕｎｄ（）関数と、偶数番目の復号化ラウンドを行って復号化ラウンド関数値を出力するＤｅｃ＿ＥＲｏｕｎｄ（）を繰り返し行うことができる。
【０１０１】
Ｄｅｃ＿ＯＲｏｕｎｄ（）関数は、前のラウンドから出力された復号化ラウンド関数値、復号化ラウンドキー（ｄＲＫ１，ｄＲＫ３，ｄＲＫ５，…，ｄＲＫＮｒ−１）がＤｅｃ＿ＯＲｏｕｎｄ（）に入力されて、復号化ラウンド関数値を出力する。Ｄｅｃ＿ＥＲｏｕｎｄ（）は、前のラウンドから出力された復号化ラウンド関数値、復号化ラウンドキー（ｄＲＫ２，ｄＲＫ４，ｄＲＫ６，…，ｄＲＫＮｒ−２）がＤｅｃ＿ＥＲｏｕｎｄ（）に入力されて、復号化ラウンド関数値を出力する。
【０１０２】
次に、前の復号化ラウンド関数値、最後の復号化ラウンドキー（ｄＲＫＮｒ）、および平文の長さ（Ｎｂ）を入力してＤｅｃ＿ＦＲｏｕｎｄ（）関数を行い、最終的に、暗号文（Ｃ）を平文（Ｐ）に復元する。
【０１０３】
本実施形態の属する技術分野における通常の知識を有する者は、本発明がその技術的思想や必須の特徴を変更することなく他の具体的な形態で実施可能であることを理解することができる。そのため、以上に述べた実施形態は、すべての面で例示的なものであり、限定的ではないと理解しなければならない。
【符号の説明】
【０１０４】
１００：暗号化装置
１１０：暗号化キー生成部
１２０：暗号文出力部
１２１：第１暗号化ラウンド部
１２２：第２暗号化ラウンド部
１２２ａ：第２奇数暗号化ラウンド部
１２２ｂ：第２偶数暗号化ラウンド部
１２３：第３暗号化ラウンド部
２００：復号化装置
２１０：復号化キー生成部
２２０：平文復元部
２２１：第１復号化ラウンド部
２２２：第２復号化ラウンド部
２２２ａ：第２奇数復号化ラウンド部
２２２ｂ：第２偶数復号化ラウンド部
２２３：第３復号化ラウンド部
３００：秘密キー生成装置
３１０：メッセージ認証値生成部
【図１】
2015158665.tif 000010
【図２】
2015158665.tif 000011
【図３Ａ】
2015158665.tif 000012
【図３Ｂ】
2015158665.tif 000013
【図４】
2015158665.tif 000014
【図５】
2015158665.tif 000015
【図６】
2015158665.tif 000016
【図７】
2015158665.tif 000017
【図８】
2015158665.tif 000018
【図９】
2015158665.tif 000019
【図１０】
2015158665.tif 000020
【図１１Ａ】
2015158665.tif 000021
【図１１Ｂ】
2015158665.tif 000022
【図１１Ｃ】
2015158665.tif 000023
【図１１Ｄ】
2015158665.tif 000024
【図１２】
2015158665.tif 000025
【図１３】
2015158665.tif 000026
【図１４】
2015158665.tif 000027
【図１５】
2015158665.tif 000028
【図１６】
2015158665.tif 000029
【図１７】
2015158665.tif 000030
【図１８】
2015158665.tif 000031
【図１９】
2015158665.tif 000032
【図２０】
2015158665.tif 000033
【図２１】
2015158665.tif 000034
【図２２】
2015158665.tif 000035
【図２３】
2015158665.tif 000036
【図２４】
2015158665.tif 000037
【図２５】
2015158665.tif 000038
【図２６】
2015158665.tif 000039
【図２７】
2015158665.tif 000040
【図２８Ａ】
2015158665.tif 000041
【図２８Ｂ】
2015158665.tif 000042
【図２８Ｃ】
2015158665.tif 000043
【図２８Ｄ】
2015158665.tif 000044
【図２９Ａ】
2015158665.tif 000045
【図２９Ｂ】
2015158665.tif 000046
【図２９Ｃ】
2015158665.tif 000047
【図２９Ｄ】
2015158665.tif 000048
【図３０】
2015158665.tif 000049
【図３１】
2015158665.tif 000050
【図３２】
2015158665.tif 000051
【図３３】
2015158665.tif 000052
【図３４】
2015158665.tif 000053