(57)【特許請求の範囲】
【請求項１】
演算装置と、ＡＥＳ方式で前記演算装置に、暗号化されたデータ又は平文のデータである第１データを暗号化又は復号化させるための処理を実行させるプログラムを記憶する記憶装置とを有する組み込みシステムが有する前記演算装置に、各処理を実行させるためのプログラムであって、
１バイト単位の変数の配列を用いて、拡張鍵データを生成するのに入力される第２データを１バイトごとに処理して前記拡張鍵データを生成する処理を行う生成処理手順と、
前記第１データを並替テーブルを用いて並び替える処理である並替処理を行わせる並替処理手順と、
前記並替処理されたデータを１次元配列の置換テーブルを用いて置換する処理である置換処理を行わせる置換処理手順と、
前記置換処理されたデータを等価式に基づいて変換する処理である変換処理を行わせる変換処理手順と、
前記拡張鍵データ及び前記変換処理されたデータに基づいての排他的論理和を計算する処理である拡張処理を行わせる拡張処理手順と
を含み、
前記並替処理、前記置換処理、前記変換処理、及び前記拡張処理を４バイトごとに実行させるためのプログラム。
【請求項２】
前記変換処理を、
変換テーブルによって行う請求項１に記載のプログラム。
【請求項３】
前記変換処理は、前記変換テーブルによる１回のマッピング処理である請求項２に記載のプログラム。
【請求項４】
前記並替テーブルは、１次元配列のデータである請求項１乃至３のいずれか一項に記載のプログラム。
【請求項５】
前記変換処理に係る重複する計算を共通化させる請求項１乃至４のいずれか一項に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、プログラム、及び記録媒体に関する。
【背景技術】
【０００２】
従来、データの暗号化の方式として、ＦＩＰＳ（Ｆｅｄｅｒａｌ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｐｒｏｃｅｓｓｉｎｇ  Ｓｔａｎｄａｒｄ）１９７で定められているＡＥＳ（Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）方式が知られている。【０００３】
ＡＥＳ方式でデータを暗号化及び復号化する場合、各変換で用いられる引数が、暗号化に用いられる引数と、復号化に用いられる引数とでそれぞれ異なる引数であることで、データ記憶容量を小さくする方法が知られている（例えば、特許文献１）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００３−１９５７４９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来の方法では、ソースコードの記載量が多く、プログラムのデータ容量が大きくなってしまう虞があった。【０００６】
本発明の１つの側面は、１次元配列を用いることによって、プログラムのデータ容量を小さくすることを目的とする。
【課題を解決するための手段】
【０００７】
一態様における、演算装置と、ＡＥＳ方式で前記演算装置に、暗号化されたデータ又は平文のデータである第１データを暗号化又は復号化させるための処理を実行させるプログラムを記憶する記憶装置とを有する組み込みシステムが有する前記演算装置に、各処理を実行させるためのプログラムは、１バイト単位の変数の配列を用いて、拡張鍵データを生成するのに入力される第２データを１バイトごとに処理して前記拡張鍵データを生成する処理を行う生成処理手順と、前記第１データを並替テーブルを用いて並び替える処理である並替処理を行わせる並替処理手順と、前記並替処理されたデータを１次元配列の置換テーブルを用いて置換する処理である置換処理を行わせる置換処理手順と、前記置換処理されたデータを等価式に基づいて変換する処理である変換処理を行わせる変換処理手順と、前記拡張鍵データ及び前記変換処理されたデータに基づいての排他的論理和を計算する処理である拡張処理を行わせる拡張処理手順とを含み、前記並替処理、前記置換処理、前記変換処理、及び前記拡張処理を４バイトごとに実行させることを特徴とする。
【発明の効果】
【０００８】
プログラムのデータ容量を小さくすることができる。
【図面の簡単な説明】
【０００９】
【図１】本発明の一実施形態に係る組み込みシステムのハードウェア構成の一例を説明するブロック図である。
【図２Ａ】比較例に係る拡張鍵データを生成する処理の一例を説明する図（１）である。
【図２Ｂ】比較例に係る拡張鍵データを生成する処理の一例を説明する図（２）である。
【図３Ａ】本発明の一実施形態に係る拡張鍵データを生成する処理の一例を説明する図（１）である。
【図３Ｂ】本発明の一実施形態に係る拡張鍵データを生成する処理の一例を説明する図（２）である。
【図３Ｃ】本発明の一実施形態に係る拡張鍵データを生成する処理の一例を説明する図（３）である。
【図４Ａ】比較例に係る暗号化及び復号化に係る処理の一例を説明する図（１）である。
【図４Ｂ】比較例に係る暗号化及び復号化に係る処理の一例を説明する図（２）である。
【図４Ｃ】比較例に係る暗号化及び復号化に係る処理の一例を説明する図（３）である。
【図５】本発明の一実施形態に係る入力データの１次元配列の一例を説明する図である。
【図６Ａ】本発明の一実施形態に係る暗号化の１ラウンド当たりの処理の一例を説明するフローチャート（１）である。
【図６Ｂ】本発明の一実施形態に係る暗号化の１ラウンド当たりの処理の一例を説明するフローチャート（２）である。
【図７Ａ】本発明の一実施形態に係る復号化の１ラウンドのうち、４バイト当たりの処理の一例を説明するフローチャートである。
【図７Ｂ】本発明の一実施形態に係る復号化の１ラウンドのうち、４バイト当たりの処理の一例を説明するソースコードである。
【図８】本発明の一実施形態に係る暗号化又は復号化の拡張処理の一例を説明するソースコードである。
【図９】本発明の一実施形態に係る暗号化又は復号化の拡張処理の処理結果の一例を説明する図である。
【図１０Ａ】本発明の一実施形態に係る復号化の並替処理の一例を説明する図（１）である。
【図１０Ｂ】本発明の一実施形態に係る復号化の並替処理の一例を説明する図（２）である。
【図１０Ｃ】本発明の一実施形態に係る復号化の並替処理の一例を説明する図（３）である。
【図１１Ａ】本発明の一実施形態に係る復号化の並替処理の処理結果の一例を説明する図（１）である。
【図１１Ｂ】本発明の一実施形態に係る復号化の並替処理の処理結果の一例を説明する図（２）である。
【図１２Ａ】本発明の一実施形態に係る復号化の置換処理の一例を説明するソースコード（１）である。
【図１２Ｂ】本発明の一実施形態に係る復号化の置換処理の一例を説明するソースコード（２）である。
【図１３】本発明の一実施形態に係る復号化の置換処理の処理結果の一例を説明する図である。
【図１４】本発明の一実施形態に係る復号化の変換処理の一例を説明するソースコードである。
【図１５Ａ】本発明の一実施形態に係る復号化の変換処理の処理結果の一例を説明する図（１）である。
【図１５Ｂ】本発明の一実施形態に係る復号化の変換処理の処理結果の一例を説明する図（２）である。
【図１５Ｃ】本発明の一実施形態に係る復号化の変換処理の処理結果の一例を説明する図（３）である。
【図１５Ｄ】本発明の一実施形態に係る復号化の変換処理の処理結果の一例を説明する図（４）である。
【図１５Ｅ】本発明の一実施形態に係る復号化の変換処理の処理結果の一例を説明する図（５）である。
【図１６】本発明の一実施形態に係る復号化の変換処理を変換テーブルによる処理で実現する一例を説明する図である。
【図１７】本発明の一実施形態に係る組み込みシステムの機能構成の一例を説明する機能ブロック図である。
【発明を実施するための形態】
【００１０】
以下、本発明の実施の形態について説明する。
【００１１】
情報処理装置は、例えば組み込みシステム（Ｅｍｂｅｄｄｅｄ  ｓｙｓｔｅｍ）１である。以下、組み込みシステム１を例に説明する。例えば、組み込みシステム１は、産業機器又は家電製品等に内蔵され、特定の機能を実現するためのシステムである。なお、情報処理装置は、ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）等でもよい。
【００１２】
＜組み込みシステムのハードウェア構成例＞
図１は、本発明の一実施形態に係る組み込みシステムのハードウェア構成の一例を説明するブロック図である。
【００１３】
組み込みシステム１は、演算装置１Ｈ１と、記憶装置１Ｈ２と、Ｉ／Ｆ（ｉｎｔｅｒｆａｃｅ）１Ｈ３とを有する。
【００１４】
演算装置１Ｈ１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）又はＭＰＵ（Ｍｉｃｒｏ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）等である。また、演算装置１Ｈ１は、組み込みシステム１が行う各種処理に係る演算を行う演算装置及び組み込みシステム１が有する装置を制御する制御装置である。さらに、演算装置１Ｈ１は、例えばＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１Ｈ１１及びＲＯＭ（Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ）１Ｈ１２等の内蔵の記憶領域を有する。
【００１５】
ＲＡＭ１Ｈ１１は、演算装置１Ｈ１が演算及び制御を行う際、プログラム又はデータ等を展開するために用いる記憶装置である。
【００１６】
ＲＯＭ１Ｈ１２は、演算装置１Ｈ１が演算及び制御を行う際に用いられるプログラム又はデータ等を記憶する記憶装置である。
【００１７】
記憶装置１Ｈ２は、いわゆるメモリ（Ｍｅｍｏｒｙ）である。また、記憶装置１Ｈ２は、組み込みシステム１が演算装置１Ｈ１による制御によって各種処理を行う際、プログラム又はデータ等を展開するために用いられる記憶装置である。
【００１８】
Ｉ／Ｆ１Ｈ３は、組み込みシステム１にデータ等を入出力するためのインタフェースである。また、Ｉ／Ｆ１Ｈ３は、コネクタ、ケーブル、及びドライバ等で実現される。
【００１９】
なお、ハードウェア構成は、図１に示す構成に限られない。例えば、組み込みシステム１は、記憶装置１Ｈ２を有さなくともよい。
【００２０】
＜比較例の拡張鍵（Ｅｘｔｅｎｄｅｄ  Ｋｅｙ）データの生成処理例＞
図２Ａ及び図２Ｂは、比較例に係る拡張鍵データを生成する処理の一例を説明する図である。具体的には、図２Ａは、比較例に係る拡張鍵データを生成する処理の一例を説明するソースコードである。なお、図２Ａは、ＦＩＰＳ１９７（アメリカ国立標準技術研究所、２００１年公表）を引用している。一方、図２Ｂは、図２Ａに示すソースコードによる処理をモデル化した説明図である。
【００２１】
第一ソースコード２は、比較例に係る拡張鍵データを生成する処理を実現する。また、比較例に係る拡張鍵データを生成する処理は、記憶領域である「ｔｅｍｐ」２１に入力されたデータごとに処理をそれぞれ行う。さらに、第一ソースコード２の第一処理２２は、１バイトの記憶領域と「ｂｙｔｅ」で宣言された配列「ｋｅｙ」に入力される入力データを、４バイトの記憶領域と「ｗｏｒｄ」で宣言された配列「ｗ」にそれぞれ代入するため、４バイトに区切って代入する処理である。
【００２２】
「ｔｅｍｐ」２１は、「ｗｏｒｄ」で宣言される変数、即ち４バイトの記憶領域である。また、第一ソースコード２では、「ｔｅｍｐ」２１の単位ごとに、拡張鍵データを算出する処理である第二処理２３が行われる。さらに、第二処理２３では、入力の４バイトのデータを８ビット右シフトさせ、右シフトで溢れる下位８ビットを上位８ビットに代入するいわゆるローテーションシフトの処理を行う「ＲｏｔＷｏｒｄ」関数による処理が行われる。以下、「ＲｏｔＷｏｒｄ」は、同様の内容を示す関数である。
【００２３】
第二処理２３では、入力される４バイトのデータが有する各１バイトのデータに対して、「ＳｕｂＢｙｔｅｓ」の処理を行う「ＳｕｂＷｏｒｄ」関数による処理がそれぞれ行われる。以下、「ＳｕｂＷｏｒｄ」は、同様の内容を示す関数である。なお、「ＳｕｂＢｙｔｅｓ」の説明は、後述する。
【００２４】
第一ソースコード２では、「Ｎｋ」は、入力される鍵データの長さを示す値が設定される変数である。以下、「Ｎｋ」は、同様の内容を示す変数である。
【００２５】
さらに、第一ソースコード２では、「Ｎｂ」は、暗号化及び復号化のデータのブロック長を示す値が設定される変数である。また、ＡＥＳ方式では、「Ｎｂ」は、４であり、１２８ビットを示す。以下、「Ｎｂ」は、同様の内容を示す変数である。
【００２６】
第一ソースコード２では、「Ｎｒ」は、ラウンド（ｒｏｕｎｄ）数を示す値が設定される変数である。また、ＡＥＳ方式では、「Ｎｒ」は、鍵データの長さに対応し、「Ｎｒ」の値は、１０で１２８ビット、１２で１９２ビット、又は１４で２５６ビットのいずれかを示す。以下、「Ｎｒ」は、同様の内容を示す変数である。
【００２７】
第一ソースコード２では、「Ｒｃｏｎ」は、変数「ｉ」が「Ｎｋ」の倍数である場合、演算で用いられる４バイトのラウンド数を計算する関数である。また、「Ｒｃｏｎ」で計算される値の上位１バイトは、例えば、下記（１）式で示される。以下、「Ｒｃｏｎ」は、同様の内容を示す関数である。
【００２８】
【数１】
0006490064.tif 000002
＜拡張鍵データの生成処理例＞
図３Ａ、図３Ｂ、及び図３Ｃは、本発明の一実施形態に係る拡張鍵データを生成する処理の一例を説明する図である。具体的には、図３Ａは、本発明の一実施形態に係る拡張鍵データを生成する処理の一例を説明するソースコードである。一方、図３Ｂは、図３Ａで示すソースコードによる処理をモデル化した説明図である。さらに、図３Ｃは、本発明の一実施形態に係る拡張鍵データを生成する処理の別の一例をモデル化した説明図である。
【００２９】
第二ソースコード３は、図２Ａに示す第一ソースコード２と同様に、拡張鍵データを生成する処理を実現する。
【００３０】
第三処理３１では、図１に示す組み込みシステム１は、「ｔｅｍｐ」２１に入力された４バイトのデータを１バイトごとにそれぞれ処理する。また、第三処理３１は、１バイトごとに拡張鍵データをそれぞれ生成する処理である。さらに、図示するように、拡張鍵データを生成する処理は、図２Ａに示す「ＲｏｔＷｏｒｄ」関数による処理及び「ＳｕｂＷｏｒｄ」関数による処理に代えて、「ＳｕｂＢｙｔｅｓ」関数による処理及び「Ｒｃｏｎ」関数による処理等を行う。
【００３１】
また、拡張鍵データの生成処理は、図３Ｃに示す方法等で実現されてもよい。なお、図３Ｃでは、拡張鍵データの生成処理は、図３Ｂに示す４バイトの配列「ｗ」に代えて、１バイトの配列「ｒ」３２が用いられる。さらに、配列「ｒ」３２に入力されるデータは、１バイトであるため、第三処理３１は、１バイトごとに、配列「ｒ」３２に対してそれぞれ行われる。
【００３２】
４バイトのデータを１バイトごとに、拡張鍵データを生成する処理がそれぞれ行われることによって、組み込みシステム１は、入力データを１バイトの単位でそれぞれ処理することができる。また、４バイトのデータには、不要なデータが含まれる場合があるため、組み込みシステム１が１バイトごとに処理することによって、組み込みシステム１は、不要なデータを処理する場合が減り、処理速度を向上させることができる。
【００３３】
また、図３Ｃでは、組み込みシステム１は、配列「ｒ」３２に対してアクセスするコードを各条件で共通化することができるため、ソースコードの記載量が減り、組み込みシステム１は、プログラムのデータ容量を小さくすることができる。
【００３４】
＜比較例の暗号化及び復号化の全体処理例＞
図４Ａ、図４Ｂ、及び図４Ｃは、比較例に係る暗号化及び復号化に係る処理の一例を説明する図である。また、図４Ａ、図４Ｂ、及び図４Ｃは、ＦＩＰＳ１９７（アメリカ国立標準技術研究所、２００１年公表）を引用している。具体的には、図４Ａは、比較例に係る暗号化に係る処理の一例を説明するソースコードである。
【００３５】
第四ソースコード４Ａは、入力データ４Ａ１を暗号化して、出力データ４Ａ２にする処理を実現する。また、暗号化に係る処理は、１ラウンド、即ち、図４Ａでは、１ラウンド当たりの暗号化処理４２の単位でそれぞれ行われる。
【００３６】
図４Ｂは、比較例に係る復号化に係る処理の一例を説明するソースコードである。
【００３７】
第五ソースコード４Ｂは、入力データ４Ｂ１を復号化して、出力データ４Ｂ２にする処理を実現する。また、復号化に係る処理は、１ラウンド、即ち、図４Ｂでは、１ラウンドのうち、４バイト当たりの復号化処理４３の単位でそれぞれ行われる。
【００３８】
第四ソースコード４Ａ及び第五ソースコード４Ｂによる処理では、入力データ４Ａ１及び入力データ４Ｂ１が、１バイトデータの単位で４行４列のブロックデータ「ｓｔａｔｅ」４１に入力されてそれぞれ処理される。
【００３９】
図４Ｃは、比較例に係るデータ形式の一例を説明する図である。
【００４０】
入力データ４Ｃ１は、図４Ａに示す入力データ４Ａ１及び図４Ｂに示す入力データ４Ｂ１である。また、出力データ４Ｃ３は、図４Ａに示す出力データ４Ａ２及び図４Ｂに示す出力データ４Ｂ２である。
【００４１】
比較例では、４行４列の２次元データ「ｓｔａｔｅ」に対して処理が行われ、入力データ４Ｃ１が出力データ４Ｃ３となる。
【００４２】
比較例では、暗号化に係る処理は、図４Ａに示すように、「ＡｄｄＲｏｕｎｄＫｅｙ」関数、「ＳｕｂＢｙｔｅｓ」関数、「ＳｈｉｆｔＲｏｗｓ」関数、及び「ＭｉｘＣｏｌｕｍｎｓ」関数によって実現される。
【００４３】
比較例では、復号化に係る処理は、図４Ｂに示すように、「ＡｄｄＲｏｕｎｄＫｅｙ」関数、「ＩｎｖＳｕｂＢｙｔｅｓ」関数、「ＩｎｖＳｈｉｆｔＲｏｗｓ」関数、及び「ＩｎｖＭｉｘＣｏｌｕｍｎｓ」関数によって実現される。
【００４４】
なお、「ＩｎｖＳｕｂＢｙｔｅｓ」関数は、「ＳｕｂＢｙｔｅｓ」関数の逆関数である。また、「ＩｎｖＳｈｉｆｔＲｏｗｓ」関数は、「ＳｈｉｆｔＲｏｗｓ」関数の逆関数である。さらに、「ＩｎｖＭｉｘＣｏｌｕｍｎｓ」関数は、「ＭｉｘＣｏｌｕｍｎｓ」関数の逆関数である。
【００４５】
＜１次元配列の例＞
図５は、本発明の一実施形態に係る入力データの１次元配列の一例を説明する図である。
【００４６】
具体的には、１次元配列「Ｓ」は、１バイトのデータを１６個それぞれ格納する１次元の配列である。これに対して、組み込みシステム１は、暗号化及び復号化の各処理を１次元配列「Ｓ」に入力されるデータごとにそれぞれ行う。
【００４７】
＜暗号化及び復号化の処理例＞
図６Ａ及び図６Ｂは、本発明の一実施形態に係る暗号化の１ラウンド当たりの処理の一例を説明するフローチャートである。
【００４８】
暗号化の１ラウンド当たりの処理では、例えば、図６Ａ又は図６Ｂに示すいずれかの処理が行われる。以下、図６Ａに示す処理を例に説明する。なお、図６Ｂに示す処理は、図６Ａに示す処理と処理順序が異なり、図６Ｂに示す処理では、図６Ａと同一の処理名及び符号で示す処理は、図６Ａと同様の処理が行われる。また、図６Ａ及び図６Ｂに示すそれぞれの処理は、図４Ａに示す１ラウンド当たりの暗号化処理４２のコードによる処理に相当する。
【００４９】
ステップＳ０６０１では、組み込みシステム１は、データを置換する置換処理を行う。なお、置換処理の詳細は、後述する。
【００５０】
ステップＳ０６０２では、組み込みシステム１は、データを並び替える並替処理を行う。なお、並替処理の詳細は、後述する。
【００５１】
ステップＳ０６０３では、組み込みシステム１は、データを変換する変換処理を行う。なお、変換処理の詳細は、後述する。
【００５２】
ステップＳ０６０４では、組み込みシステム１は、拡張鍵データに基づいてデータの拡張処理を行う。なお、拡張鍵データは、例えば拡張鍵データの生成処理で生成されるデータである。拡張処理の詳細は、後述する。
【００５３】
図７Ａ及び図７Ｂは、本発明の一実施形態に係る復号化の１ラウンドのうち、４バイト当たりの処理の一例を説明するフローチャート及びソースコードである。具体的には、図７Ａは、本発明の一実施形態に係る復号化の１ラウンドのうち、４バイト当たりの処理の一例を説明するフローチャートである。なお、図７Ａに示す処理は、図４Ｂに示す１ラウンド１６バイトのうち、４バイト当たりの復号化処理４３のコードによる処理に相当する。
【００５４】
ステップＳ０７０１では、組み込みシステム１は、データを並び替える並替処理を行う。また、図６Ａ又は図６Ｂに示す処理で暗号化されたデータが入力された場合、ステップＳ０７０１の処理は、例えば図６Ａ及び図６Ｂに示すステップＳ０６０２で用いられる関数の逆関数で実現される。
【００５５】
ステップＳ０７０２では、組み込みシステム１は、データを置換する置換処理を行う。また、図６Ａ又は図６Ｂに示す処理で暗号化されたデータが入力された場合、ステップＳ０７０２の処理は、例えば図６Ａ及び図６Ｂにそれぞれ示すステップＳ０６０１で用いられる関数の逆関数で実現される。
【００５６】
ステップＳ０７０３では、組み込みシステム１は、拡張鍵データに基づいてデータの拡張処理を行う。
【００５７】
ステップＳ０７０４では、組み込みシステム１は、データを変換する変換処理を行う。また、図６Ａ又は図６Ｂに示す処理で暗号化されたデータが入力された場合、ステップＳ０７０４の処理は、図６Ａ及び図６Ｂにそれぞれ示すステップＳ０６０３で用いられる関数の逆関数で実現される。
【００５８】
図７Ｂは、本発明の一実施形態に係る復号化の１ラウンドのうち、４バイト当たりの処理の一例を説明するソースコードである。
【００５９】
復号化の１ラウンドのうち、４バイト当たりの処理は、例えば復号化ソースコード１０によって実現される。なお、復号化ソースコード１０は、４バイトデータ１０ＩＮに対して復号化の処理を行う例である。
【００６０】
復号化ソースコード１０では、組み込みシステム１は、４バイトデータ１０ＩＮに対して、並替処理の一例である「ＩｎｖＳｈｉｆｔＲｏｗｓ」関数１０Ｆｕｎ１を実行する。また、「ＩｎｖＳｈｉｆｔＲｏｗｓ」関数１０Ｆｕｎ１の処理は、図７Ａに示すステップＳ０７０１の処理に相当する。
【００６１】
次に、復号化ソースコード１０では、組み込みシステム１は、「ＩｎｖＳｈｉｆｔＲｏｗｓ」関数１０Ｆｕｎ１によって生成されるデータに対して、置換処理の一例である「ＩｎｖＳｕｂＢｙｔｅｓ」関数１０Ｆｕｎ２を実行する。また、「ＩｎｖＳｕｂＢｙｔｅｓ」関数１０Ｆｕｎ２の処理は、図７Ａに示すステップＳ０７０２の処理に相当する。
【００６２】
さらに、復号化ソースコード１０では、組み込みシステム１は、「ＩｎｖＳｕｂＢｙｔｅｓ」関数１０Ｆｕｎ２によって生成されるデータに対して、拡張処理の一例である拡張処理コード１０Ｃ１の処理を実行する。また、拡張処理コード１０Ｃ１の処理は、図７Ａに示すステップＳ０７０３の処理に相当する。
【００６３】
続いて、復号化ソースコード１０では、組み込みシステム１は、拡張処理コード１０Ｃ１の処理によって生成されるデータに対して、変換処理の一例である変換処理コード１０Ｃ２の処理を実行する。また、変換処理コード１０Ｃ２の処理は、図７Ａに示すステップＳ０７０４の処理に相当する。
【００６４】
図７Ｂで図示するように、１次元配列かつ４バイトの単位で、復号化の処理が行われるように、ソースコードが実装されると、組み込みシステム１は、復号化処理用のソースコードの記載量を減らし、プログラムのデータ容量を小さくすることができる。また、図７Ｂで図示するように、１次元配列かつ４バイトの単位で、復号化の処理が行われるように、ソースコードが実装されると、組み込みシステム１は、復号化の処理に係る演算を高速に処理することができる。
【００６５】
以下、復号化の処理を例に説明する。
【００６６】
なお、暗号化及び復号化の全体処理は、図６Ａ及び図７Ａでそれぞれ示す処理に限られない。例えば、暗号化の処理は、図６Ｂに示すように、全体処理において図６Ａに示すステップＳ０６０１と、ステップＳ０６０２との処理順序が逆でもよい。
【００６７】
＜拡張処理例＞
図８は、本発明の一実施形態に係る暗号化又は復号化の拡張処理の一例を説明するソースコードである。
【００６８】
拡張処理は、例えば図６Ａ及び図６Ｂにそれぞれ示すステップＳ０６０４の処理並びに図７Ａに示すステップＳ０７０３の処理である。また、拡張処理は、例えば第六ソースコード６によって実現される。
【００６９】
組み込みシステム１は、拡張処理の入力である配列「ＡＤＫｉｎ」６１及び拡張処理の入力である拡張鍵データが入力される配列「ＫＤ」６２の排他的論理和（ｅｘｃｌｕｓｉｖｅ  ｏｒ）の演算によって、拡張処理を実現する。さらに、拡張処理の処理結果は、例えば配列「ＡＤＫｏｕｔ」配列６４である。さらにまた、配列「ＫＤ」６２に入力される拡張鍵データは、例えば拡張鍵データの生成処理によって生成されるデータである。なお、第六ソースコード６において、演算子「＾」６３は、排他的論理和の演算子である。以下、演算子「＾」は、同様に排他的論理和の演算子である。
【００７０】
第六ソースコード６で、変数「ｃｎｔ」は、いわゆるカウントアップ（ｃｏｕｎｔ  ｕｐ）を行う作業用の変数である。以下、変数「ｃｎｔ」は、同様に作業用の変数である。なお、第六ソースコード６では、変数「ｃｎｔ」は、０乃至１５のいずれかの値である。
【００７１】
第六ソースコード６では、変数「ＲＯＵ」は、鍵の長さに基づいて決定される値を示す作業用の変数である。例えば、鍵の長さが１２８ビットであると、変数「ＲＯＵ」は、０乃至１０いずれかの値である。
【００７２】
図９は、本発明の一実施形態に係る暗号化又は復号化の拡張処理の処理結果の一例を説明する図である。具体的には、図９は、図８に示す第六ソースコード６による拡張処理の処理結果を模式化した図である。また、図９は、ＦＩＰＳ１９７（アメリカ国立標準技術研究所、２００１年公表）を引用している。
【００７３】
組み込みシステム１は、図８に示す１次元配列のデータである配列「ＡＤＫｉｎ」６１で拡張処理を行うことによって、図９に示すような４行４列の２次元配列の入力と、２次元配列の拡張鍵データとの排他的論理和による演算と同様の処理結果を出力することができる。
【００７４】
組み込みシステム１は、入力が１次元配列であるため、図８に示す第六ソースコード６のように、少ないコード量のプログラムによって拡張処理を実現できる。したがって、組み込みシステム１は、図８に示す第六ソースコード６による拡張処理によって、プログラムのデータ容量を小さくすることができる。
【００７５】
＜並替処理例＞
並替処理は、例えば図６Ａ及び図６Ｂに示すステップＳ０６０２の処理並びに図７Ａに示すステップＳ０７０１の処理である。また、並替処理は、例えば図７Ｂに示す復号化ソースコード１０が有する「ＩｎｖＳｈｉｆｔＲｏｗｓ」関数１０Ｆｕｎ１によって実現される。
【００７６】
図１０Ａ、図１０Ｂ、及び図１０Ｃは、本発明の一実施形態に係る復号化の並替処理の一例を説明する図である。具体的には、図１０Ａは、本発明の一実施形態に係る復号化の並替処理に用いる並替テーブルの一例を説明するソースコードである。
【００７７】
並替処理は、データを並び替える処理である。また、並び替えは、例えば並替テーブルによって実現される。さらに、並替テーブルは、例えば第七ソースコード７で示される１次元配列のデータである。
【００７８】
図１０Ｂは、本発明の一実施形態に係る復号化の第七ソースコード７の並替テーブルによる並替処理の一例を説明する図である。また、並替テーブルは、入力されたデータの並び替え先が設定される１次元配列のデータである。
【００７９】
図５に示す１次元配列「Ｓ」５に対して、第七ソースコード７が示す並替テーブルで並替処理が行われると、並替処理前を示す１次元配列「Ｓ」５は、並替処理済み配列５１のようになる。
【００８０】
図１０Ｃは、本発明の一実施形態に係る復号化の並替処理の一例を説明するソースコードである。
【００８１】
第八ソースコード８は、復号化の並替処理を実現する。また、配列「ＩＳＲｉｎ」８１は、並替処理の入力の配列である。さらに、配列「ＩＳＲｉｎ」８１は、図１０Ｂに示す並替処理前の１次元配列「Ｓ」５に相当する。
【００８２】
配列「ＩＳＲｉｎ」８１は、「ＩｎｖＳｈｉｆｔＲｏｗｓ」関数によって並替処理され、配列「ＩＳＲｏｕｔ」８２に出力される配列となる。また、配列「ＩＳＲｏｕｔ」８２は、図１０Ｂに示す並替処理済み配列５１に相当する。
【００８３】
図１１Ａ及び図１１Ｂは、本発明の一実施形態に係る復号化の並替処理の処理結果の一例を説明する図である。また、図１１Ａ及び図１１Ｂは、図１０Ｃに示す第八ソースコード８による並替処理の処理結果を模式化した図である。なお、図１１Ａ及び図１１Ｂは、ＦＩＰＳ１９７（アメリカ国立標準技術研究所、２００１年公表）を引用している。
【００８４】
並替処理は、図示するように、２次元配列のデータが有するｒ行目のデータをｒ列右シフトする処理に、相当する処理を行う。
【００８５】
まず、並替処理では、０行目のデータである変換前０行目データ１００が、並び替えられず、入力と同様の並びである変換後０行目データ２００が出力される。
【００８６】
次に、並替処理では、１行目のデータである変換前１行目データ１１０を１列右シフトする処理が行われ、変換後１行目データ２１０が出力される。また、変換前１行目データ１１０を１列右シフトする処理は、模式図１０ＩＳＲのように示される処理である。さらに、模式図１０ＩＳＲは、０列目のデータを１列目、１列目のデータを２列目、２列目のデータを３列目、及び３列目のデータを０列目にそれぞれシフトする処理、即ち１列右シフトのローテーションシフトの処理を示す図である。
【００８７】
さらに、並替処理では、２行目のデータである変換前２行目データ１２０を２列右シフトする処理が行われ、変換後２行目データ２２０が出力される。また、変換前２行目データ１２０を２列右シフトする処理は、模式図２０ＩＳＲのように示される処理である。さらに、模式図２０ＩＳＲは、０列目のデータを２列目、１列目のデータを３列目、２列目のデータを０列目、及び３列目のデータを１列目にシフトする処理、即ち２列右シフトのローテーションシフトの処理を示す図である。
【００８８】
次に、並替処理では、３行目のデータである変換前３行目データ１３０を３列右シフトする処理が行われ、変換後３行目データ２３０が出力される。また、変換前３行目データ１３０を３列右シフトする処理は、模式図３０ＩＳＲのように示される処理である。さらに、模式図３０ＩＳＲは、０列目のデータを３列目、１列目のデータを０列目、２列目のデータを１列目、及び３列目のデータを２列目にシフトする処理、即ち３列右シフトのローテーションシフトの処理を示す図である。
【００８９】
組み込みシステム１は、１次元配列のデータである並替テーブルで並替処理を行うため、図１１Ａ及び図１１Ｂに示すように、４行４列の２次元配列の入力に対して、ｒ行目のデータをｒ列右シフトする処理の処理結果と同様の処理結果を出力することができる。
【００９０】
組み込みシステム１は、入力が１次元配列であるため、図１０Ｃに示す第八ソースコード８のように、少ないコード量のプログラムによって並替処理を実現できる。したがって、組み込みシステム１は、図１０Ｃに示す第八ソースコード８による並替処理によって、プログラムのデータ容量を小さくすることができる。
【００９１】
なお、図１０Ａ、図１０Ｂ、図１０Ｃ、図１１Ａ、及び図１１Ｂで説明される並替処理は、逆関数による処理でもよい。また、図１０Ａ、図１０Ｂ、及び図１０Ｃで説明される「ＩｎｖＳｈｉｆｔＲｏｗｓ」関数の逆関数である暗号化に用いる「ＳｈｉｆｔＲｏｗｓ」関数は、図１０Ｂに示す並替処理済み配列５１を並替処理前の１次元配列「Ｓ」５に並び替える処理を行う。即ち、並替処理は、２次元配列のデータが有するｒ行目のデータをｒ列左シフトするに相当する処理でもよい。さらに、「ＳｈｉｆｔＲｏｗｓ」関数は、「ＩｎｖＳｈｉｆｔＲｏｗｓ」関数と同様に、並替テーブルで処理を行う。なお、「ＳｈｉｆｔＲｏｗｓ」関数で用いられる並替テーブルの値は、並び替える順序に応じて「ＩｎｖＳｈｉｆｔＲｏｗｓ」関数に用いられる値から変更される。
【００９２】
＜置換処理例＞
置換処理は、例えば図６Ａ及び図６Ｂに示すステップＳ０６０１の処理並びに図７Ａに示すステップＳ０７０２の処理である。また、置換処理は、例えば図７Ｂに示す復号化ソースコード１０が有する変換処理コード１０Ｃ２によって実現される。
【００９３】
図１２Ａ及び図１２Ｂは、本発明の一実施形態に係る復号化の置換処理の一例を説明するソースコードである。具体的には、図１２Ａは、本発明の一実施形態に係る復号化の置換処理に用いられる置換テーブルの一例を説明するソースコードである。
【００９４】
置換処理は、データを置換する処理である。また、置換は、例えば置換テーブルによって実現される。さらに、置換テーブルは、例えば第九ソースコード９で示される１次元配列のデータである。なお、第九ソースコード９は、入力されるデータが１バイトごとに入力され、合計で２５６ビットである場合、２５６個のデータを有する１次元配列のデータである。さらにまた、置換処理は、例えば「ＩｎｖＳｕｂＢｙｔｅｓ」関数の引数に入力される０乃至２５５のいずれかの値を置換テーブルに記憶されている値に置換する処理である。
【００９５】
図１２Ｂは、本発明の一実施形態に係る復号化の置換処理の一例を説明するソースコードである。
【００９６】
第十ソースコード１１は、復号化の置換処理を実現する。また、配列「ＩＳＢｉｎ」１１１は、置換処理の入力の配列である。さらに、配列「ＩＳＢｉｎ」１１１に入力される値は、「ＩｎｖＳｕｂＢｙｔｅｓ」関数によって置換処理され、配列「ＩＳＢｏｕｔ」１１２に出力される値となる。
【００９７】
図１３は、本発明の一実施形態に係る復号化の置換処理の処理結果の一例を説明する図である。また、図１３は、図１２Ｂに示す第十ソースコード１１による置換処理の処理結果を模式化した図である。なお、図１３は、ＦＩＰＳ１９７（アメリカ国立標準技術研究所、２００１年公表）を引用している。
【００９８】
置換処理は、データをＦＩＰＳ１９７  ５．１．１で定義されているＳ−ＢＯＸによる処理と同様の処理結果を算出できる処理である。また、Ｓ−ＢＯＸによる処理は、図示するテーブルが用いられる置換の処理である。
【００９９】
組み込みシステム１は、１次元配列のデータである置換テーブルを用いて置換処理を行うため、図１３に示すＳ−ＢＯＸによる処理結果と同様の処理結果を算出することができる。
【０１００】
組み込みシステム１は、入力が１次元配列であるため、図１２Ｂに示す第十ソースコード１１によって、Ｓ−ＢＯＸによる処理と同じ程度のコード量のプログラムで置換処理を実現できる。また、組み込みシステム１は、入力が１バイトの１次元配列である置換処理によって、Ｓ−ＢＯＸと同様の処理結果を得られる処理を高速に行うことができる。さらに、組み込みシステム１は、入力が１バイトの１次元配列である置換処理によって、実装を容易にすることができる。したがって、組み込みシステム１は、図１２Ｂに示す第十ソースコード１１の置換処理によって、プログラムのデータ容量を小さくでき、高速に処理できる。
【０１０１】
なお、図１２Ａ、図１２Ｂ、及び図１３で説明される置換処理は、逆関数による処理でもよい。また、図１２Ａ及び図１２Ｂで説明される「ＩｎｖＳｕｂＢｙｔｅｓ」関数の逆関数である暗号化に用いられる「ＳｕｂＢｙｔｅ」関数は、図１３で説明されるＳ−ＢＯＸによる処理の逆向きの置換を行う。即ち、置換処理は、Ｓ−ＢＯＸによる処理の入力と出力とが逆となる処理でもよい。なお、「ＳｕｂＢｙｔｅ」関数は、「ＩｎｖＳｕｂＢｙｔｅｓ」関数と同様に、置換テーブルを用いて処理を行う。さらに、「ＳｕｂＢｙｔｅｓ」関数で用いられる置換テーブルの値は、置換する値に応じて「ＩｎｖＳｕｂＢｙｔｅｓ」関数に用いられる値から変更される。
【０１０２】
＜変換処理例＞
変換処理は、例えば図６Ａ及び図６Ｂに示すステップＳ０６０３の処理並びに図７Ａに示すステップＳ０７０４の処理である。また、変換処理は、例えば図７Ｂに示す復号化ソースコード１０が有する「ＩｎｖＳｕｂＢｙｔｅｓ」関数１０Ｆｕｎ２によって実現される。
【０１０３】
図１４は、本発明の一実施形態に係る復号化の変換処理の一例を説明するソースコードである。
【０１０４】
変換処理は、データを変換する処理である。また、変換は、例えば等価式によって実現される。さらに、等価式は、例えば第十一ソースコード１２によって実現される。
【０１０５】
第十一ソースコード１２で図示するように、等価式では、変換処理に入力される「ｉｎ［０］」及び「ｉｎ［１］」の排他的論理和が計算され、計算結果が変数「ｉｎ１＿０１」に代入される。同様に、等価式では、変換処理に入力される「ｉｎ［２］」及び「ｉｎ［３］」の排他的論理和が計算され、計算結果が変数「ｉｎ１＿２３」に代入される。
【０１０６】
次に、等価式では、変数「ｉｎ１＿０１」を引数とする「ＩＲＰＬＹ」関数が実行され、実行結果が変数「ｉｎ２＿０１」に代入される。また、等価式では、「ｉｎ［１］」及び「ｉｎ［２］」の排他的論理和の計算結果を引数とする「ＩＲＰＬＹ」関数が実行され、実行結果が変数「ｉｎ２＿１２」に代入される。さらに、等価式では、変数「ｉｎ１＿２３」を引数とする「ＩＲＰＬＹ」関数が実行され、実行結果が変数「ｉｎ２＿２３」に代入される。さらにまた、等価式では、「ｉｎ［３］」及び「ｉｎ［０］」の排他的論理和の計算結果を引数とする「ＩＲＰＬＹ」関数が実行され、実行結果が変数「ｉｎ２＿３０」に代入される。
【０１０７】
なお、「ＩＲＰＬＹ」関数は、例えば第十二ソースコード１３で定義される関数である。具体的には、「ＩＲＰＬＹ」関数は、第十二ソースコード１３で図示するように、２回のシフト演算と、排他的論理和の計算と、テーブル「Ｉｒｐｌｙ」によるマッピングとの組み合わせによって実現される。
【０１０８】
また、等価式では、変数「ｉｎ２＿０１」及び変数「ｉｎ２＿１２」の排他的論理和の計算結果を引数とする「ＩＲＰＬＹ」関数が実行され、実行結果が変数「ｉｎ４＿０２」に代入される。さらに、等価式では、変数「ｉｎ２＿１２」及び変数「ｉｎ２＿２３」の排他的論理和の計算結果を引数とする「ＩＲＰＬＹ」関数が実行され、実行結果が変数「ｉｎ４＿１３」に代入される。
【０１０９】
次に、等価式では、変数「ｉｎ４＿０２」及び変数「ｉｎ４＿１３」の排他的論理和の計算結果を引数とする「ＩＲＰＬＹ」関数が実行される。また、等価式では、「ＩＲＰＬＹ」関数の実行結果と、変数「ｉｎ１＿０１」と、変数「ｉｎ１＿２３」との排他的論理和の計算結果が変数「ｉｎ９＿０１２３」に代入される。
【０１１０】
さらに、等価式では、変数「ｉｎ９＿０１２３」、変数「ｉｎ４＿０２」、変数「ｉｎ２＿０１」、及び「ｉｎ［０］」の排他的論理和の計算結果が「ｏｕｔ［０］」として算出される。また、等価式では、変数「ｉｎ９＿０１２３」、変数「ｉｎ４＿１３」、変数「ｉｎ２＿１２」、及び「ｉｎ［１］」の排他的論理和の計算結果が「ｏｕｔ［１］」として算出される。さらに、等価式では、変数「ｉｎ９＿０１２３」、変数「ｉｎ４＿０２」、変数「ｉｎ２＿２３」、及び「ｉｎ［２］」の排他的論理和の計算結果が「ｏｕｔ［２］」として算出される。さらにまた、等価式では、変数「ｉｎ９＿０１２３」、変数「ｉｎ４＿１３」、変数「ｉｎ２＿３０」、及び「ｉｎ［３］」の排他的論理和の計算結果が「ｏｕｔ［３］」として算出される。
【０１１１】
図１５Ａ、図１５Ｂ、図１５Ｃ、図１５Ｄ、及び図１５Ｅは、本発明の一実施形態に係る復号化の変換処理の処理結果の一例を説明する図である。なお、図１５Ａ、図１５Ｂ、図１５Ｃ、図１５Ｄ、及び図１５Ｅは、ＦＩＰＳ１９７（アメリカ国立標準技術研究所、２００１年公表）を引用している。具体的には、図１５Ａは、図１４に示す第十一ソースコード１２による変換処理の処理結果を模式化した図である。また、図１５Ｂは、図１５Ａに示す計算を行うためのソースコードの一例である。さらに、図１５Ａに示す処理は、ソースコードで表現されると、例えば図１５Ｂに示すソースコードの処理となる。また、図１５Ｂに示すソースコードで示される掛け算は、図１５Ｃに示すソースコードで図示するようにそれぞれ定義できる。したがって、図１５Ｂに示すソースコードで示される各計算は、図１５Ｃに基づいて、図１５Ｄのようにそれぞれ示せる。
【０１１２】
ここで、「ＩＲＰＬＹ」関数が使われる演算では、下記（２）式が成り立つ。
【０１１３】
【数２】
0006490064.tif 000003
組み込みシステム１は、上記（２）式に基づいて、「ＩＲＰＬＹ」関数が使われる等価の演算によって、コード量が少なく、演算速度の速い計算を行うことができる。
【０１１４】
さらに、図１５Ｂに示すソースコードによる計算は、上記（２）式から、図１５Ｅのように示せる。また、図１５Ｅに示す「ｏｕｔ［０］」、「ｏｕｔ［１］」、「ｏｕｔ［２］」、及び「ｏｕｔ［３］」の計算には、それぞれ同じ計算を行う箇所がある。なお、図１４に示す第十一ソースコード１２では、同じ計算を行う箇所が、変数「ｉｎ１＿０１」等の変数によって計算される例である。
【０１１５】
図１４に示す第十一ソースコード１２は、変数によって、重複する計算を共通化している。したがって、計算が共通化されると、組み込みシステムは、計算に必要なコード量を少なくすることができる。よって、第十一ソースコード１２は、少ないコード量のプログラムによって、図１５Ａに示す処理を実現することができる。
【０１１６】
なお、図１４、図１５Ａ、図１５Ｂ、図１５Ｃ、図１５Ｄ、及び図１５Ｅで説明される変換処理は、逆関数による処理でもよい。また、図１４で説明される変換処理の一例である「ＩｎｖＭｉｘＣｏｌｕｍｎｓ」関数の逆関数であり、暗号化に用いられる「ＭｉｘＣｏｌｕｍｎｓ」関数は、図１５Ａ、図１５Ｂ、図１５Ｃ、図１５Ｄ、及び図１５Ｅで説明される逆向きの変換を行う。即ち、変換処理は、処理の入力と出力が逆となる処理でもよい。また、「ＭｉｘＣｏｌｕｍｎｓ」関数は、「ＩｎｖＭｉｘＣｏｌｕｍｎｓ」関数と同様に、等価式を用いて処理を行う。さらに、「ＭｉｘＣｏｌｕｍｎｓ」関数で用いられる等価式は、変換する値に応じて「ＩｎｖＭｉｘＣｏｌｕｍｎｓ」関数で用いられる値から変更される。
【０１１７】
＜変換テーブルによる処理例＞
図１６は、本発明の一実施形態に係る復号化の変換処理を変換テーブルによる処理で実現する一例を説明する図である。
【０１１８】
変換テーブルは、例えば図１６で示す１次元配列のデータである。また、変換処理に用いられる「ＩＲＰＬＹ」関数は、図１４に示す第十二ソースコード１３で示されるシフト演算等に代えて、図１６に示す変換テーブル「Ｉｒｐｌｙ」による変換でもよい。
【０１１９】
変換テーブルによる処理は、１回のマッピング処理であるため、組み込みシステムは、変換テーブル「Ｉｒｐｌｙ」を用いると、図１４に示す第十二ソースコード１３が有する「ＩＲＰＬＹ」関数が用いられる処理と比較して、高速に処理することができる。
【０１２０】
＜評価結果例＞
本発明の一実施形態に係るプログラムは、データ容量が１．６キロバイト（ｋＢｙｔｅ）程度であるため、本発明の一実施形態に係るプログラムは、フラッシュメモリ（登録商標）が有する１セクタ（ｓｅｃｔｏｒ）に記憶することができる。また、本発明の一実施形態に係るプログラムは、データ容量が１．６キロバイト程度であるため、ドライバ、保守用のソフトウェア、又はＯＳ用等が記憶される記憶領域に、当該プログラムが追加されても、組み込みシステムは、少ないセクタ数で当該プログラムを記憶できる。
【０１２１】
セクタ領域が例えば４キロバイトであり、かつ、ＡＥＳ用のプログラムのデータ容量が６キロバイトであると、ドライバ、保守用のソフトウェア、及びＯＳと、ＡＥＳ用のプログラムとが記憶される場合、１セクタ又は２セクタの記憶領域が、追加で必要となる。これと比較して、本発明の一実施形態に係るプログラムが用いられると、組み込みシステムは、データ容量を小さくすることができるため、メモリ領域の圧迫を少なくすることができる。
【０１２２】
＜機能構成例＞
図１７は、本発明の一実施形態に係る組み込みシステムの機能構成の一例を説明する機能ブロック図である。
【０１２３】
組み込みシステム１は、生成処理部１Ｆ１と、拡張処理部１Ｆ２と、並替処理部１Ｆ３と、置換処理部１Ｆ４と、変換処理部１Ｆ５とを有する。
【０１２４】
生成処理部１Ｆ１は、拡張鍵データを生成する処理を行う。また、生成処理部１Ｆ１は、例えば図１に示す演算装置１Ｈ１等によって実現される。さらに、生成処理部１Ｆ１によって生成される拡張鍵データは、拡張処理部１Ｆ２が用いる。
【０１２５】
拡張処理部１Ｆ２は、拡張鍵データに基づいて拡張する図３Ａ、図３Ｂ、及び図３Ｃ等に示す処理である拡張処理を行う。また、拡張処理部１Ｆ２は、例えば図１に示す演算装置１Ｈ１等によって実現される。
【０１２６】
並替処理部１Ｆ３は、データを並び替える処理である並替処理を行う。また、並替処理部１Ｆ３は、例えば図１に示す演算装置１Ｈ１等によって実現される。
【０１２７】
置換処理部１Ｆ４は、データを置換する処理である置換処理を行う。また、置換処理部１Ｆ４は、例えば図１に示す演算装置１Ｈ１等によって実現される。
【０１２８】
変換処理部１Ｆ５は、データを変換する処理である変換処理を行う。また、変換処理部１Ｆ５は、例えば図１に示す演算装置１Ｈ１等によって実現される。
【０１２９】
組み込みシステム１は、１次元配列を用いることによって、拡張鍵データの生成処理で、コードを各条件の場合で共通化することができるため、ソースコードの記載量を減らし、プログラムのデータ容量を小さくすることができる。
【０１３０】
組み込みシステム１は、１次元配列を用いることによって、拡張処理を図８に示す第六ソースコード６のように、少ないコードで実現できるため、ソースコードの記載量を減らし、プログラムのデータ容量を小さくすることができる。
【０１３１】
組み込みシステム１は、１次元配列を用いることによって、並替処理を並替テーブルによって実現できるため、ソースコードの記載量を減らし、プログラムのデータ容量を小さくすることができる。
【０１３２】
組み込みシステム１は、１次元配列を用いることによって、置換処理を置換テーブルによって実現できるため、ソースコードの記載量を減らし、プログラムのデータ容量を小さくすることができる。
【０１３３】
組み込みシステム１は、１次元配列を用いることによって、変換処理に係る計算を共通化して実現できるため、ソースコードの記載量を減らし、プログラムのデータ容量を小さくすることができる。
【０１３４】
よって、組み込みシステム１は、本発明の実施形態に係る拡張鍵データの生成処理、拡張処理、並替処理、置換処理、及び変換処理の少なくともいずれかを行うことによってプログラムのデータ容量を小さくすることができる。
【０１３５】
なお、実施形態は、復号化の処理に限られない。例えば、実施形態は、各処理の逆関数を利用して暗号化の処理を行うでもよい。
【０１３６】
また、実施形態は、使用できるメモリの容量等の制約が多い組み込みシステムに適用される形態が望ましい。さらに、組み込みシステムは、組み込みシステムが有するプログラム及びデータ等が解読されるのを難しくするため、演算装置にメモリが内蔵されているハードウェア構成が望ましい。
【０１３７】
なお、本発明の一実施形態に係る全体処理の全部又は一部は、アセンブラ、Ｃ、Ｃ＋＋、Ｃ＃、及びＪａｖａ（登録商標）等のレガシープログラミング言語又はオブジェクト指向プログラミング言語等で記述されたコンピュータに実行させるためのプログラムによって実現されてもよい。即ち、プログラムは、情報処理装置等のコンピュータに、本発明の一実施形態に係る各処理の全部又は一部を実行させるためのコンピュータプログラムである。
【０１３８】
また、プログラムは、ＲＯＭ又はＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）等のコンピュータが読み取り可能な記録媒体に格納して頒布することができる。さらに、記録媒体は、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、フラッシュメモリ、フレキシブルディスク、ＣＤ−ＲＯＭ、ＣＤ−ＲＷ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＤＶＤ−ＲＷ、ブルーレイディスク、ＳＤ（登録商標）カード、又はＭＯ等でもよい。さらにまた、プログラムは、電気通信回線を通じて頒布することができる。
【０１３９】
以上、本発明の好ましい実施例について詳述したが、本発明は係る特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形又は変更が可能である。
【０１４０】
本願は、日本国に２０１４年５月２１日に出願された基礎出願２０１４−１０５６４１号に基づくものであり、その全内容はここに参照をもって援用される。
【符号の説明】
【０１４１】
１  組み込みシステム
１Ｆ１  生成処理部
１Ｆ２  拡張処理部
１Ｆ３  並替処理部
１Ｆ４  置換処理部
１Ｆ５  変換処理部
２  第一ソースコード
２１  記憶領域「ｔｅｍｐ」
２２  第一処理
２３  第二処理
３  第二ソースコード
３１  第三処理
３２  配列「ｒ」
４Ａ  第四ソースコード
４Ａ１、４Ｂ１  入力データ
４Ｂ  第五ソースコード
４Ａ２、４Ｂ２  出力データ
５  １次元配列「Ｓ」
５１  並替処理済み配列
６  第六ソースコード
６１  配列「ＡＤＫｉｎ」
６２  配列「ＫＤ」
６３  演算子「＾」
７  第七ソースコード
８  第八ソースコード
８１  配列「ＩＳＲｉｎ」
８２  配列「ＩＳＲｏｕｔ」
１０  復号化ソースコード
１０ＩＮ  ４バイトデータ
１０Ｆｕｎ１  「ＩｎｖＳｈｉｆｔＲｏｗｓ」関数
１０Ｆｕｎ２  「ＩｎｖＳｕｂＢｙｔｅｓ」関数
１０Ｃ１  拡張処理コード
１０Ｃ２  変換処理コード
１００  変換前０行目データ
２００  変換後０行目データ
１１０  変換前１行目データ
２１０  変換後１行目データ
１２０  変換前２行目データ
２２０  変換後２行目データ
１３０  変換前３行目データ
２３０  変換後３行目データ
１０ＩＳＲ、２０ＩＳＲ、３０ＩＳＲ  模式図
９  第九ソースコード
１１  第十ソースコード
１１１  配列「ＩＳＢｉｎ」
１１２  配列「ＩＳＢｏｕｔ」
１２  第十一ソースコード
１３  第十二ソースコード
【図１】
0006490064.tif 000004
【図２Ａ】
0006490064.tif 000005
【図２Ｂ】
0006490064.tif 000006
【図３Ａ】
0006490064.tif 000007
【図３Ｂ】
0006490064.tif 000008
【図３Ｃ】
0006490064.tif 000009
【図４Ａ】
0006490064.tif 000010
【図４Ｂ】
0006490064.tif 000011
【図４Ｃ】
0006490064.tif 000012
【図５】
0006490064.tif 000013
【図６Ａ】
0006490064.tif 000014
【図６Ｂ】
0006490064.tif 000015
【図７Ａ】
0006490064.tif 000016
【図７Ｂ】
0006490064.tif 000017
【図８】
0006490064.tif 000018
【図９】
0006490064.tif 000019
【図１０Ａ】
0006490064.tif 000020
【図１０Ｂ】
0006490064.tif 000021
【図１０Ｃ】
0006490064.tif 000022
【図１１Ａ】
0006490064.tif 000023
【図１１Ｂ】
0006490064.tif 000024
【図１２Ａ】
0006490064.tif 000025
【図１２Ｂ】
0006490064.tif 000026
【図１３】
0006490064.tif 000027
【図１４】
0006490064.tif 000028
【図１５Ａ】
0006490064.tif 000029
【図１５Ｂ】
0006490064.tif 000030
【図１５Ｃ】
0006490064.tif 000031
【図１５Ｄ】
0006490064.tif 000032
【図１５Ｅ】
0006490064.tif 000033
【図１６】
0006490064.tif 000034
【図１７】
0006490064.tif 000035