(57)【要約】【課題】暗号鍵を用いた暗号処理を実行する際に、利便性を損なわずに、耐タンパ性を確保する。【解決手段】スマホなどからなる情報処理装置１００に、メインプログラムと暗号処理サブルーチンとを組み込み、それぞれ主装置１１０および暗号処理装置１２０を構成する。主装置１１０には、暗号鍵Ｋの代わりに、当該暗号鍵Ｋに基づいて乱数テーブルＴを参照して作成された符号データＦを用意しておく。暗号処理が必要になった場合、主装置１１０から暗号処理装置１２０に対して、処理対象となる元データＤと符号データＦとを与える。暗号処理装置１２０は、乱数テーブルＴを参照して、与えられた符号データＦを暗号鍵Ｋに戻し、この暗号鍵Ｋを用いた暗号アルゴリズムＡを実行することにより、元データＤに対する暗号処理を実行し、その結果を処理済データＥとして主装置１１０に戻す。【選択図】図５
2014165570.tif 000002
【特許請求の範囲】
【請求項１】
入力した元データに対して暗号化もしくは復号のための暗号処理を行い、処理済データを出力する暗号処理装置であって、
暗号処理の対象となる元データと暗号処理に必要な符号データとを外部から入力するデータ入力部と、
所定の暗号鍵を用いた所定の暗号アルゴリズムに基づいて、前記データ入力部が入力した元データに対して暗号処理を実施し、処理済データを生成する暗号処理部と、
生成された前記処理済データを外部に出力するデータ出力部と、
それぞれ固有のセル番号が付与された複数Ｍ個のセルに、ランダムにＮ通り（Ｍ≧Ｎ）の数値を収容した乱数テーブルを格納する乱数テーブル格納部と、
前記乱数テーブルを参照することにより、前記データ入力部が入力した符号データに含まれる個々の数値を、当該数値をセル番号とするセルに収容されている数値に置き換える変換処理を行い、当該変換処理を経て得られるデータを暗号鍵として前記暗号処理部に与える符号変換部と、
を備えることを特徴とする暗号処理装置。
【請求項２】
請求項１に記載の暗号処理装置において、
暗号処理部が、０〜（Ｎ−１）の範囲の値をもった整数を羅列した暗号鍵を用いて暗号処理を行い、
乱数テーブル格納部が、０〜（Ｍ−１）の範囲の連続したセル番号が付与された複数Ｍ個のセルに、０〜（Ｎ−１）の範囲の連続するＮ通りの整数を重複を許してランダムに収容した乱数テーブルを格納しており、
符号変換部が、０〜（Ｍ−１）の範囲の値をもった整数を羅列した符号データを、０〜（Ｎ−１）の範囲の値をもった整数を羅列した暗号鍵に置き換える変換処理を行うことを特徴とする暗号処理装置。
【請求項３】
請求項２に記載の暗号処理装置において、
Ｍ＝Ｎに設定し、
乱数テーブル格納部が、Ｎ個のセルにＮ通りの整数をそれぞれ１個ずつ収容した乱数テーブルを格納していることを特徴とする暗号処理装置。
【請求項４】
請求項３に記載の暗号処理装置において、
Ｍ＝Ｎ＝２５６に設定し、
乱数テーブル格納部が、０〜２５５の連続セル番号が付与された２５６個のセルに、０〜２５５の整数をそれぞれ１個ずつランダムに収容した乱数テーブルを格納しており、
符号変換部が、１バイトのデータをＬ個羅列したＬバイトの符号データを、個々のバイトごとに置換して、１バイトのデータをＬ個羅列したＬバイトの暗号鍵に置き換える変換処理を行い、
暗号処理部が、前記Ｌバイトの暗号鍵を用いて暗号処理を行うことを特徴とする暗号処理装置。
【請求項５】
請求項２に記載の暗号処理装置において、
Ｍ＞Ｎに設定し、
乱数テーブル格納部が、Ｍ個のセルにＮ通りの整数がそれぞれ少なくとも１個ずつ収容され、一部のセルには他のセルと同一の整数が重複して収容されている乱数テーブルを格納していることを特徴とする暗号処理装置。
【請求項６】
請求項５に記載の暗号処理装置において、
Ｎ＝２５６、Ｍ＞２５６に設定し、
乱数テーブル格納部が、０〜（Ｍ−１）の連続セル番号が付与されたＭ個のセルに、０〜２５５の整数をそれぞれ少なくとも１個ずつランダムに収容した乱数テーブルを格納しており、
符号変換部が、所定ビット長のデータをＬ個羅列した符号データを、個々のデータごとに置換して、１バイトのデータをＬ個羅列したＬバイトの暗号鍵に置き換える変換処理を行い、
暗号処理部が、前記Ｌバイトの暗号鍵を用いて暗号処理を行うことを特徴とする暗号処理装置。
【請求項７】
請求項１〜６のいずれかに記載の暗号処理装置において、
乱数テーブル格納部が、複数Ｋ通りの乱数テーブルを格納しており、
データ入力部が、元データおよび符号データとともに、特定の乱数テーブルを指定するテーブル指定子を外部から入力し、
符号変換部が、前記テーブル指定子で指定された乱数テーブルを参照することにより変換処理を行うことを特徴とする暗号処理装置。
【請求項８】
請求項７に記載の暗号処理装置において、
データ入力部が、元データと、１バイトのデータをＬ個羅列したＬバイトの符号データと、このＬバイトの符号データを構成する個々のバイトごとに、もしくは、複数バイトからなる個々のバイト群ごとに、それぞれ特定の乱数テーブルを指定する固有のテーブル指定子と、を外部から入力し、
符号変換部が、符号データの個々のバイトごとに、もしくは、複数バイトからなる個々のバイト群ごとに、それぞれ固有のテーブル指定子で指定された乱数テーブルを参照することにより変換処理を行うことを特徴とする暗号処理装置。
【請求項９】
請求項１〜６のいずれかに記載の暗号処理装置において、
乱数テーブル格納部が、複数Ｋ通りの乱数テーブルを格納しており、
符号変換部が、前記Ｋ通りの乱数テーブルを所定の規則で順次指定するテーブル指定パターンを複数通り記憶しており、
データ入力部が、元データと、１バイトのデータをＬ個羅列したＬバイトの符号データと、特定のテーブル指定パターンを選択するパターン選択子と、を外部から入力し、
符号変換部が、前記パターン選択子によって選択されたテーブル指定パターンに基づいて、符号データの個々のバイトごとに乱数テーブルを指定し、指定された乱数テーブルを参照することにより変換処理を行うことを特徴とする暗号処理装置。
【請求項１０】
請求項１〜９のいずれかに記載の暗号処理装置において、
データ入力部が、元データおよび符号データとともに、乱数テーブルの各セル内の数値をシフトさせる規則を示すシフト指示子を外部から入力し、
符号変換部が、乱数テーブル内の各数値を前記シフト指示子によって示される規則に基づいてシフトさせ、シフト後の数値を用いて変換処理を行うことを特徴とする暗号処理装置。
【請求項１１】
請求項１０に記載の暗号処理装置において、
データ入力部が、正もしくは負のいずれかのシフト方向とシフト量ｄとを示すシフト指示子を入力し、
符号変換部が、前記シフト方向が正の場合には、乱数テーブルの第ｉ番目のセル番号をもつセル内の数値を第（ｉ＋ｄ）番目のセル番号をもつセルにシフトさせ、前記シフト方向が負の場合には、乱数テーブルの第ｉ番目のセル番号をもつセル内の数値を第（ｉ−ｄ）番目のセル番号をもつセルにシフトさせるシフト処理（但し、シフト後のセルが、セル番号の範囲から外れる場合には、シフト後のセル番号にセルの総数Ｍを加算もしくは減算してセル番号の範囲内となるようにする処理）を行うことを特徴とする暗号処理装置。
【請求項１２】
請求項１０に記載の暗号処理装置において、
乱数テーブル格納部が、複数Ｋ通りの乱数テーブルを格納しており、
データ入力部が、元データおよび符号データとともに、特定の乱数テーブルを指定するテーブル指定子と、複数の乱数テーブルを跨いでシフトさせる規則を示すシフト指示子と、を外部から入力し、
符号変換部が、前記シフト指示子によって示される規則に基づくシフト処理を行い、当該シフト処理後に、前記テーブル指定子で指定された乱数テーブルを参照することにより変換処理を行うことを特徴とする暗号処理装置。
【請求項１３】
請求項１〜１２のいずれかに記載の暗号処理装置において、
符号変換部が、データ入力部が入力した符号データに含まれる個々の数値を所定の並び替え規則に従って並び替え、並び替え後の数値を用いて乱数テーブルを参照することにより変換処理を行い、変換後のデータを暗号鍵として暗号処理部に与えることを特徴とする暗号処理装置。
【請求項１４】
請求項１〜１２のいずれかに記載の暗号処理装置において、
符号変換部が、乱数テーブルを参照して置き換える変換処理により変換後のデータを得た後、当該変換後のデータに含まれる個々の数値を所定の並び替え規則に従って並び替え、並び替え後のデータを暗号鍵として暗号処理部に与えることを特徴とする暗号処理装置。
【請求項１５】
請求項１〜１４のいずれかに記載の暗号処理装置において、
暗号処理部が複数通りの暗号アルゴリズムの中の任意の暗号アルゴリズムを用いて暗号処理を実施する機能を有し、
データ入力部が、前記複数通りの暗号アルゴリズムの中の１つを指定するアルゴリズム指定子を入力し、
暗号処理部が前記アルゴリズム指定子によって指定された暗号アルゴリズムを用いて暗号処理を実施することを特徴とする暗号処理装置。
【請求項１６】
請求項１〜１５のいずれかに記載の暗号処理装置において、
所定の方法で暗号化された暗号化符号データを復号して、元の符号データを得る符号データ復号部を更に備え、
データ入力部が、前記暗号化符号データを外部から入力し、
前記符号データ復号部が、前記データ入力部が入力した暗号化符号データを復号し、復号された符号データを符号変換部に与え、
符号変換部が、前記復号された符号データを暗号鍵に変換する変換処理を行うことを特徴とする暗号処理装置。
【請求項１７】
請求項１６に記載の暗号処理装置において、
符号データ復号部が複数Ｈ通りの復号鍵を記憶しており、
データ入力部が、前記複数Ｈ通りの復号鍵のうちの第ｉ番目の復号鍵を用いて復号が可能な状態で暗号化された暗号化符号データと、前記第ｉ番目の復号鍵を指定する復号鍵指定子と、を外部から入力し、
符号データ復号部が、前記復号鍵指定子で指定された復号鍵を用いた復号を行うことを特徴とする暗号処理装置。
【請求項１８】
請求項１７に記載の暗号処理装置において、
符号データ復号部が、公開鍵暗号方式に利用可能な公開鍵および秘密鍵を構成する複数Ｈ組の鍵ペアーのそれぞれについて、公開鍵および秘密鍵のうちの一方の鍵を記憶しており、
データ入力部が、前記Ｈ組の鍵ペアーのうちの第ｉ番目の鍵ペアーについての他方の鍵を用いて暗号化された暗号化符号データと、前記第ｉ番目の鍵ペアーを指定する復号鍵指定子と、を外部から入力し、
符号データ復号部が、前記復号鍵指定子で指定された鍵ペアーについての前記一方の鍵を復号鍵として用いた復号を行うことを特徴とする暗号処理装置。
【請求項１９】
請求項１〜１５のいずれかに記載の暗号処理装置と、この暗号処理装置に暗号処理を依頼する主装置と、を備える情報処理装置であって、
前記主装置は、
所定の情報処理を実行する情報処理部と、
前記情報処理部から引き渡された元データと、予め記憶されていたもしくは外部から受け取った符号データと、必要に応じて、更に、テーブル指定子、パターン選択子、シフト指示子、アルゴリズム指示子の群の中から選択された１つもしくは複数の指定子もしくは選択子を、前記暗号処理装置のデータ入力部に与える暗号処理依頼部と、
前記暗号処理装置のデータ出力部から出力された処理済データを受け取り、前記情報処理部に引き渡す暗号処理結果受信部と、
を備えることを特徴とする情報処理装置。
【請求項２０】
請求項１６または１７に記載の暗号処理装置と、この暗号処理装置に暗号処理を依頼する主装置と、を備える情報処理装置であって、
前記主装置は、
所定の情報処理を実行する情報処理部と、
前記情報処理部から引き渡された元データと、予め記憶されていたもしくは外部から受け取った暗号化符号データと、必要に応じて、更に、テーブル指定子、パターン選択子、シフト指示子、アルゴリズム指示子の群の中から選択された１つもしくは複数の指定子もしくは選択子を、前記暗号処理装置のデータ入力部に与える暗号処理依頼部と、
前記暗号処理装置のデータ出力部から出力された処理済データを受け取り、前記情報処理部に引き渡す暗号処理結果受信部と、
を備えることを特徴とする情報処理装置。
【請求項２１】
請求項１８に記載の暗号処理装置と、この暗号処理装置に暗号処理を依頼する主装置と、を備える情報処理装置であって、
前記主装置は、
所定の情報処理を実行する情報処理部と、
前記情報処理部から引き渡された元データと、予め記憶されていたもしくは外部から受け取った暗号化符号データと、復号鍵指定子と、必要に応じて、更に、テーブル指定子、パターン選択子、シフト指示子、アルゴリズム指示子の群の中から選択された１つもしくは複数の指定子もしくは選択子を、前記暗号処理装置のデータ入力部に与える暗号処理依頼部と、
前記暗号処理装置のデータ出力部から出力された処理済データを受け取り、前記情報処理部に引き渡す暗号処理結果受信部と、
を備え、
前記復号鍵指定子は、暗号処理装置の符号データ復号部に記憶されている「Ｈ組の鍵ペアーについての復号鍵として用いる一方の鍵」の第ｉ番目を指定する情報であり、
前記暗号化符号データは、所定の符号データに対して、前記第ｉ番目の一方の鍵に対応する他方の鍵を用いて暗号化を行って得られるデータであることを特徴とする情報処理装置。
【請求項２２】
請求項１〜１５のいずれかに記載の暗号処理装置に与える符号データを生成する符号データ生成装置であって、
暗号処理装置内の乱数テーブル格納部に格納されている乱数テーブルと同一の乱数テーブルを記憶した乱数テーブル記憶部と、
暗号処理装置内の暗号処理部による暗号処理に利用させる暗号鍵を入力する暗号鍵入力部と、
前記乱数テーブル記憶部に記憶されている乱数テーブルを用いて、暗号処理装置内の符号変換部によって行われる変換処理とは逆の変換処理を行い、前記暗号鍵入力部が入力した暗号鍵に対応する符号データを生成する符号データ生成部と、
を備えることを特徴とする暗号処理用符号データ生成装置。
【請求項２３】
請求項１６または１７に記載の暗号処理装置に与える暗号化符号データを生成する符号データ生成装置であって、
暗号処理装置内の乱数テーブル格納部に格納されている乱数テーブルと同一の乱数テーブルを記憶した乱数テーブル記憶部と、
暗号処理装置内の暗号処理部による暗号処理に利用させる暗号鍵を入力する暗号鍵入力部と、
前記乱数テーブル記憶部に記憶されている乱数テーブルを用いて、暗号処理装置内の符号変換部によって行われる変換処理とは逆の変換処理を行い、前記暗号鍵入力部が入力した暗号鍵に対応する符号データを生成する符号データ生成部と、
前記符号データ生成部によって生成された符号データに対して、暗号処理装置内の符号データ復号部によって復号可能な方法で暗号化を行って暗号化符号データを生成する暗号化符号データ生成部と、
を備えることを特徴とする暗号処理用符号データ生成装置。
【請求項２４】
請求項１８に記載の暗号処理装置に与える暗号化符号データを生成する符号データ生成装置であって、
暗号処理装置内の乱数テーブル格納部に格納されている乱数テーブルと同一の乱数テーブルを記憶した乱数テーブル記憶部と、
暗号処理装置内の暗号処理部による暗号処理に利用させる暗号鍵を入力する暗号鍵入力部と、
前記乱数テーブル記憶部に記憶されている乱数テーブルを用いて、暗号処理装置内の符号変換部によって行われる変換処理とは逆の変換処理を行い、前記暗号鍵入力部が入力した暗号鍵に対応する符号データを生成する符号データ生成部と、
暗号処理装置内の符号データ復号部に記憶されている「Ｈ組の鍵ペアーのうち一方の鍵」にそれぞれ対応する「Ｈ組の鍵ペアーのうちの他方の鍵」を記憶しており、前記符号データ生成部によって生成された符号データに対して、前記「Ｈ組の鍵ペアーのうちの他方の鍵」の中の任意の第ｉ番目の鍵を用いて暗号化を行って暗号化符号データを生成する暗号化符号データ生成部と、
を備えることを特徴とする暗号処理用符号データ生成装置。
【請求項２５】
請求項１〜１８のいずれかに記載の暗号処理装置としてコンピュータを機能させるためのプログラム。
【請求項２６】
請求項１９〜２１のいずれかに記載の情報処理装置としてコンピュータを機能させるためのプログラム。
【請求項２７】
請求項２６に記載のプログラムにおいて、主装置としてコンピュータを機能させるためのメインプログラムと、暗号処理装置としてコンピュータを機能させるための暗号処理サブルーチンプログラムと、を含み、前記メインプログラムは、高級言語もしくは中間言語によって記述されており、前記暗号処理サブルーチンプログラムは、マシン語によって記述されていることを特徴とするプログラム。
【請求項２８】
請求項２２〜２４のいずれかに記載の暗号処理用符号データ生成装置としてコンピュータを機能させるためのプログラム。
【請求項２９】
メインプログラムと暗号処理サブルーチンプログラムとが組み込まれたコンピュータが、暗号化もしくは復号のための暗号処理を行う暗号処理方法であって、
コンピュータが、前記メインプログラムを実行することにより、暗号処理の対象となる元データと暗号処理に必要な符号データとを前記暗号処理サブルーチンプログラムに引き渡す前処理段階と、
コンピュータが、前記暗号処理サブルーチンプログラムを実行することにより、それぞれ固有のセル番号が付与された複数Ｍ個のセルに、ランダムにＮ通り（Ｍ≧Ｎ）の数値が収容された乱数テーブルを参照して、前記符号データに含まれる個々の数値を、当該数値をセル番号とするセルに収容されている数値に置き換える変換処理を行い、当該変換処理を経て得られるデータを暗号鍵として用いる所定の暗号アルゴリズムに基づいて、前記元データに対して暗号処理を実施し、処理済データを前記メインプログラムに引き渡す暗号処理段階と、
コンピュータが、前記メインプログラムを実行することにより、前記処理済みデータを用いて所定の処理を続行する後処理段階と、
を有することを特徴とする暗号処理方法。
【請求項３０】
請求項２９に記載の暗号処理方法において、
前処理段階で、０〜（Ｍ−１）の範囲の値をもった整数を羅列した符号データを暗号処理サブルーチンプログラムに引き渡す処理を行い、
暗号処理段階で、０〜（Ｍ−１）の範囲の連続したセル番号が付与された複数Ｍ個のセルに、０〜（Ｎ−１）の範囲の連続するＮ通りの整数をランダムに収容した乱数テーブルを用い、前記符号データを、０〜（Ｎ−１）の範囲の値をもった整数を羅列した暗号鍵に置き換える変換処理を行うことを特徴とする暗号処理方法。
【請求項３１】
請求項２９または３０に記載の暗号処理方法において、
前処理段階で、符号データの代わりに、当該符号データに対して所定の方法で暗号化を行って生成された暗号化符号データを暗号処理サブルーチンプログラムに引き渡す処理を行い、
暗号処理段階で、前記暗号化符号データを復号して得られる元の符号データを暗号鍵に変換する変換処理を行うことを特徴とする暗号処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、入力した元データに対して暗号化もしくは復号のための暗号処理を行い、処理済データを出力する暗号処理装置およびこれを用いた情報処理装置に関する。
【背景技術】
【０００２】
現代社会では、パソコン、スマートフォン、電子タブレット、ＩＣカードなど、様々な情報処理装置が社会生活に欠かせない電子機器として普及している。このように、社会生活に組み込まれて利用される情報処理装置には、セキュリティを確保する上で、暗号処理が欠かせない機能となってきており、多くの情報処理装置には暗号処理機能が組み込まれている。
【０００３】
多くの情報処理装置は、基本的に、コンピュータプログラムを実行することにより所望の情報処理を実行する装置であり、この情報処理装置に組み込まれた暗号処理装置の機能も、コンピュータプログラムによって実現される。一般的な情報処理装置では、その本来の機能を果たすためのメインプログラムとは別に、暗号処理装置としての機能を果たすための暗号処理サブルーチンが組み込まれており、メインプログラムの実行上、暗号処理が必要になったときに、適宜、暗号処理サブルーチンを呼び出して暗号処理を依頼する形式が採られる。
【０００４】
たとえば、メインプログラムにおいて暗号化を行う必要が生じた場合には、メインプログラムから暗号処理サブルーチンに平文データを引き渡し、暗号処理サブルーチンにおいて、当該平文データを暗号データに変換する処理を行い、得られた暗号データをメインプログラムに引き渡す処理が行われる。また、メインプログラムにおいて復号を行う必要が生じた場合には、メインプログラムから暗号処理サブルーチンに暗号データを引き渡し、暗号処理サブルーチンにおいて、当該暗号データを元の平文データに変換する処理を行い、得られた平文データをメインプログラムに引き渡す処理が行われる。
【０００５】
暗号の秘密性を維持するためには、暗号処理サブルーチン内で実行される処理を秘密に保つ必要がある。このため、暗号処理サブルーチン内では、固有の秘密暗号アルゴリズムが採用され、かつ、固有の暗号鍵を用いた暗号処理が実行される。したがって、どのような暗号鍵を用いてどのようなアルゴリズムで暗号処理が行われたかが秘匿されている限り、暗号の秘密性は維持されることになる。
【０００６】
任意の暗号鍵を用いた暗号処理を行うには、メインプログラムから暗号処理サブルーチンに対して、処理対象となる元データとともに暗号鍵を引き渡し、暗号処理サブルーチンでは、当該暗号鍵を用いた暗号処理を実施し、処理済データをメインプログラムへ戻す処理を行うことになるが、この際、暗号鍵の秘密性が維持されるような配慮が必要になる。すなわち、クラッカーの不正行為により、暗号処理に用いられた暗号鍵が漏洩してしまうと、暗号処理サブルーチン内で実行された暗号処理の内容が解析されるおそれがあり、暗号処理装置の耐タンパ性が損なわれることになる。
【０００７】
そこで、たとえば、下記の特許文献１には、移動体通信端末などの通信機器において暗号処理を実行する際に、必要となる暗号鍵を当該通信機器の内部に格納する代わりに、メモリモジュールを組み込んだ指輪に格納しておき、暗号処理が必要なときには、この指輪から暗号鍵を読み出して利用する技術が開示されている。この技術を採用すれば、通信機器が盗難にあったとしても、一緒に指輪が盗まれない限り、暗号鍵が漏洩することはなく、耐タンパ性を確保することができる。
【０００８】
一方、特許文献２には、移動体通信端末などの通信機器において暗号処理を実行する際に、必要となる暗号鍵を外部の管理サーバからダウンロードするようにし、一定時間が経過したときに、当該情報処理装置内から暗号鍵を消去することにより、暗号鍵の漏洩を防ぎ、耐タンパ性を確保する技術が開示されている。また、特許文献３には、暗号鍵を複数に分割し、一方の分割暗号鍵を情報処理装置内に格納しておき、他方の分割暗号鍵を外部の管理サーバに格納しておき、暗号処理に必要な時点で、管理サーバから他方の分割暗号鍵をダウンロードして、元の暗号鍵を復元する方法が提案されている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２０００−６８９９７号公報
【特許文献２】特開２０１１−７７７４０号公報
【特許文献３】特開２０１２−６５１２３号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
上述したとおり、暗号処理機能を備えた情報処理装置において、暗号処理に利用する暗号鍵を当該装置の内部に格納しておくと、クラッカーの不正行為により暗号鍵が漏洩する可能性があり、耐タンパ性を損なう要因になる。そこで、前掲の特許文献１では、メモリモジュールを組み込んだ指輪に暗号鍵を格納しておく方法が提案されているが、ユーザは、通信機器を利用する際に常に指輪を携行する必要があり、実用上、利用の便宜性は著しく低下してしまう。
【００１１】
一方、前掲の特許文献２，３には、暗号鍵もしくはその一部の部分暗号鍵を、外部の管理サーバからダウンロードして入手する方法が提案されており、この方法を採用すれば、情報処理装置から暗号鍵が直接的に盗まれてしまうことを防止することはできるが、クラッカーは、ダウンロード経路から間接的に暗号鍵を盗み取ることが可能であり、また、情報処理装置自体を入手したクラッカーは、管理サーバからダウンロードした上で暗号鍵を盗み取ることもできるので、十分な耐タンパ性を確保することができない。
【００１２】
そこで本発明は、暗号鍵を用いた暗号処理を実行する際に、利便性を損なうことなしに、耐タンパ性を確保することが可能な暗号処理装置およびこれを組み込んだ情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１３】
(1)   本発明の第１の態様は、入力した元データに対して暗号化もしくは復号のための暗号処理を行い、処理済データを出力する暗号処理装置において、
暗号処理の対象となる元データと暗号処理に必要な符号データとを外部から入力するデータ入力部と、
所定の暗号鍵を用いた所定の暗号アルゴリズムに基づいて、データ入力部が入力した元データに対して暗号処理を実施し、処理済データを生成する暗号処理部と、
生成された処理済データを外部に出力するデータ出力部と、
それぞれ固有のセル番号が付与された複数Ｍ個のセルに、ランダムにＮ通り（Ｍ≧Ｎ）の数値を収容した乱数テーブルを格納する乱数テーブル格納部と、
乱数テーブルを参照することにより、データ入力部が入力した符号データに含まれる個々の数値を、当該数値をセル番号とするセルに収容されている数値に置き換える変換処理を行い、当該変換処理を経て得られるデータを暗号鍵として暗号処理部に与える符号変換部と、
を設けるようにしたものである。
【００１４】
(2)   本発明の第２の態様は、上述した第１の態様に係る暗号処理装置において、
暗号処理部が、０〜（Ｎ−１）の範囲の値をもった整数を羅列した暗号鍵を用いて暗号処理を行い、
乱数テーブル格納部が、０〜（Ｍ−１）の範囲の連続したセル番号が付与された複数Ｍ個のセルに、０〜（Ｎ−１）の範囲の連続するＮ通りの整数を重複を許してランダムに収容した乱数テーブルを格納しており、
符号変換部が、０〜（Ｍ−１）の範囲の値をもった整数を羅列した符号データを、０〜（Ｎ−１）の範囲の値をもった整数を羅列した暗号鍵に置き換える変換処理を行うようにしたものである。
【００１５】
(3)   本発明の第３の態様は、上述した第２の態様に係る暗号処理装置において、
Ｍ＝Ｎに設定し、
乱数テーブル格納部に、Ｎ個のセルにＮ通りの整数をそれぞれ１個ずつ収容した乱数テーブルを格納するようにしたものである。
【００１６】
(4)   本発明の第４の態様は、上述した第３の態様に係る暗号処理装置において、
Ｍ＝Ｎ＝２５６に設定し、
乱数テーブル格納部が、０〜２５５の連続セル番号が付与された２５６個のセルに、０〜２５５の整数をそれぞれ１個ずつランダムに収容した乱数テーブルを格納しており、
符号変換部が、１バイトのデータをＬ個羅列したＬバイトの符号データを、個々のバイトごとに置換して、１バイトのデータをＬ個羅列したＬバイトの暗号鍵に置き換える変換処理を行い、
暗号処理部が、Ｌバイトの暗号鍵を用いて暗号処理を行うようにしたものである。
【００１７】
(5)   本発明の第５の態様は、上述した第２の態様に係る暗号処理装置において、
Ｍ＞Ｎに設定し、
乱数テーブル格納部が、Ｍ個のセルにＮ通りの整数がそれぞれ少なくとも１個ずつ収容され、一部のセルには他のセルと同一の整数が重複して収容されている乱数テーブルを格納しているようにしたものである。
【００１８】
(6)   本発明の第６の態様は、上述した第５の態様に係る暗号処理装置において、
Ｎ＝２５６、Ｍ＞２５６に設定し、
乱数テーブル格納部が、０〜（Ｍ−１）の連続セル番号が付与されたＭ個のセルに、０〜２５５の整数をそれぞれ少なくとも１個ずつランダムに収容した乱数テーブルを格納しており、
符号変換部が、所定ビット長のデータをＬ個羅列した符号データを、個々のデータごとに置換して、１バイトのデータをＬ個羅列したＬバイトの暗号鍵に置き換える変換処理を行い、
暗号処理部が、Ｌバイトの暗号鍵を用いて暗号処理を行うようにしたものである。
【００１９】
(7)   本発明の第７の態様は、上述した第１〜第６の態様に係る暗号処理装置において、
乱数テーブル格納部が、複数Ｋ通りの乱数テーブルを格納しており、
データ入力部が、元データおよび符号データとともに、特定の乱数テーブルを指定するテーブル指定子を外部から入力し、
符号変換部が、テーブル指定子で指定された乱数テーブルを参照することにより変換処理を行うようにしたものである。
【００２０】
(8)   本発明の第８の態様は、上述した第７の態様に係る暗号処理装置において、
データ入力部が、元データと、１バイトのデータをＬ個羅列したＬバイトの符号データと、このＬバイトの符号データを構成する個々のバイトごとに、もしくは、複数バイトからなる個々のバイト群ごとに、それぞれ特定の乱数テーブルを指定する固有のテーブル指定子と、を外部から入力し、
符号変換部が、符号データの個々のバイトごとに、もしくは、複数バイトからなる個々のバイト群ごとに、それぞれ固有のテーブル指定子で指定された乱数テーブルを参照することにより変換処理を行うようにしたものである。
【００２１】
(9)   本発明の第９の態様は、上述した第１〜第６の態様に係る暗号処理装置において、
乱数テーブル格納部が、複数Ｋ通りの乱数テーブルを格納しており、
符号変換部が、このＫ通りの乱数テーブルを所定の規則で順次指定するテーブル指定パターンを複数通り記憶しており、
データ入力部が、元データと、１バイトのデータをＬ個羅列したＬバイトの符号データと、特定のテーブル指定パターンを選択するパターン選択子と、を外部から入力し、
符号変換部が、パターン選択子によって選択されたテーブル指定パターンに基づいて、符号データの個々のバイトごとに乱数テーブルを指定し、指定された乱数テーブルを参照することにより変換処理を行うようにしたものである。
【００２２】
(10)  本発明の第１０の態様は、上述した第１〜第９の態様に係る暗号処理装置において、
データ入力部が、元データおよび符号データとともに、乱数テーブルの各セル内の数値をシフトさせる規則を示すシフト指示子を外部から入力し、
符号変換部が、乱数テーブル内の各数値をシフト指示子によって示される規則に基づいてシフトさせ、シフト後の数値を用いて変換処理を行うようにしたものである。
【００２３】
(11)  本発明の第１１の態様は、上述した第１０の態様に係る暗号処理装置において、
データ入力部が、正もしくは負のいずれかのシフト方向とシフト量ｄとを示すシフト指示子を入力し、
符号変換部が、シフト方向が正の場合には、乱数テーブルの第ｉ番目のセル番号をもつセル内の数値を第（ｉ＋ｄ）番目のセル番号をもつセルにシフトさせ、シフト方向が負の場合には、乱数テーブルの第ｉ番目のセル番号をもつセル内の数値を第（ｉ−ｄ）番目のセル番号をもつセルにシフトさせるシフト処理（但し、シフト後のセルが、セル番号の範囲から外れる場合には、シフト後のセル番号にセルの総数Ｍを加算もしくは減算してセル番号の範囲内となるようにする処理）を行うようにしたものである。
【００２４】
(12)  本発明の第１２の態様は、上述した第１０の態様に係る暗号処理装置において、
乱数テーブル格納部に、複数Ｋ通りの乱数テーブルを格納しておき、
データ入力部が、元データおよび符号データとともに、特定の乱数テーブルを指定するテーブル指定子と、複数の乱数テーブルを跨いでシフトさせる規則を示すシフト指示子と、を外部から入力し、
符号変換部が、シフト指示子によって示される規則に基づくシフト処理を行い、当該シフト処理後に、テーブル指定子で指定された乱数テーブルを参照することにより変換処理を行うようにしたものである。
【００２５】
(13)  本発明の第１３の態様は、上述した第１〜第１２の態様に係る暗号処理装置において、
符号変換部が、データ入力部が入力した符号データに含まれる個々の数値を所定の並び替え規則に従って並び替え、並び替え後の数値を用いて乱数テーブルを参照することにより変換処理を行い、変換後のデータを暗号鍵として暗号処理部に与えるようにしたものである。
【００２６】
(14)  本発明の第１４の態様は、上述した第１〜第１２の態様に係る暗号処理装置において、
符号変換部が、乱数テーブルを参照して置き換える変換処理により変換後のデータを得た後、当該変換後のデータに含まれる個々の数値を所定の並び替え規則に従って並び替え、並び替え後のデータを暗号鍵として暗号処理部に与えるようにしたものである。
【００２７】
(15)  本発明の第１５の態様は、上述した第１〜第１４の態様に係る暗号処理装置において、
暗号処理部が複数通りの暗号アルゴリズムの中の任意の暗号アルゴリズムを用いて暗号処理を実施する機能を有し、
データ入力部が、複数通りの暗号アルゴリズムの中の１つを指定するアルゴリズム指定子を入力し、
暗号処理部がアルゴリズム指定子によって指定された暗号アルゴリズムを用いて暗号処理を実施するようにしたものである。
【００２８】
(16)  本発明の第１６の態様は、上述した第１〜第１５の態様に係る暗号処理装置において、
所定の方法で暗号化された暗号化符号データを復号して、元の符号データを得る符号データ復号部を更に設け、
データ入力部が、暗号化符号データを外部から入力し、
符号データ復号部が、データ入力部が入力した暗号化符号データを復号し、復号された符号データを符号変換部に与え、
符号変換部が、復号された符号データを暗号鍵に変換する変換処理を行うようにしたものである。
【００２９】
(17)  本発明の第１７の態様は、上述した第１６の態様に係る暗号処理装置において、
符号データ復号部が複数Ｈ通りの復号鍵を記憶しており、
データ入力部が、この複数Ｈ通りの復号鍵のうちの第ｉ番目の復号鍵を用いて復号が可能な状態で暗号化された暗号化符号データと、第ｉ番目の復号鍵を指定する復号鍵指定子と、を外部から入力し、
符号データ復号部が、復号鍵指定子で指定された復号鍵を用いた復号を行うようにしたものである。
【００３０】
(18)  本発明の第１８の態様は、上述した第１７の態様に係る暗号処理装置において、
符号データ復号部が、公開鍵暗号方式に利用可能な公開鍵および秘密鍵を構成する複数Ｈ組の鍵ペアーのそれぞれについて、公開鍵および秘密鍵のうちの一方の鍵を記憶しており、
データ入力部が、このＨ組の鍵ペアーのうちの第ｉ番目の鍵ペアーについての他方の鍵を用いて暗号化された暗号化符号データと、第ｉ番目の鍵ペアーを指定する復号鍵指定子と、を外部から入力し、
符号データ復号部が、復号鍵指定子で指定された鍵ペアーについての上記一方の鍵を復号鍵として用いた復号を行うようにしたものである。
【００３１】
(19)  本発明の第１９の態様は、上述した第１〜第１５の態様に係る暗号処理装置と、この暗号処理装置に暗号処理を依頼する主装置と、によって情報処理装置を構成し、
主装置には、
所定の情報処理を実行する情報処理部と、
情報処理部から引き渡された元データと、予め記憶されていたもしくは外部から受け取った符号データと、必要に応じて、更に、テーブル指定子、パターン選択子、シフト指示子、アルゴリズム指示子の群の中から選択された１つもしくは複数の指定子もしくは選択子を、暗号処理装置のデータ入力部に与える暗号処理依頼部と、
暗号処理装置のデータ出力部から出力された処理済データを受け取り、情報処理部に引き渡す暗号処理結果受信部と、
を設けるようにしたものである。
【００３２】
(20)  本発明の第２０の態様は、上述した第１６または第１７の態様に係る暗号処理装置と、この暗号処理装置に暗号処理を依頼する主装置と、によって情報処理装置を構成し、
主装置には、
所定の情報処理を実行する情報処理部と、
情報処理部から引き渡された元データと、予め記憶されていたもしくは外部から受け取った暗号化符号データと、必要に応じて、更に、テーブル指定子、パターン選択子、シフト指示子、アルゴリズム指示子の群の中から選択された１つもしくは複数の指定子もしくは選択子を、暗号処理装置のデータ入力部に与える暗号処理依頼部と、
暗号処理装置のデータ出力部から出力された処理済データを受け取り、情報処理部に引き渡す暗号処理結果受信部と、
を設けるようにしたものである。
【００３３】
(21)  本発明の第２１の態様は、上述した第１８の態様に係る暗号処理装置と、この暗号処理装置に暗号処理を依頼する主装置と、によって情報処理装置を構成し、
主装置には、
所定の情報処理を実行する情報処理部と、
情報処理部から引き渡された元データと、予め記憶されていたもしくは外部から受け取った暗号化符号データと、復号鍵指定子と、必要に応じて、更に、テーブル指定子、パターン選択子、シフト指示子、アルゴリズム指示子の群の中から選択された１つもしくは複数の指定子もしくは選択子を、暗号処理装置のデータ入力部に与える暗号処理依頼部と、
暗号処理装置のデータ出力部から出力された処理済データを受け取り、情報処理部に引き渡す暗号処理結果受信部と、
を設けるようにし、
復号鍵指定子は、暗号処理装置の符号データ復号部に記憶されている「Ｈ組の鍵ペアーについての復号鍵として用いる一方の鍵」の第ｉ番目を指定する情報であり、
暗号化符号データは、所定の符号データに対して、第ｉ番目の一方の鍵に対応する他方の鍵を用いて暗号化を行って得られるデータであるようにしたものである。
を設けるようにしたものである。
【００３４】
(22)  本発明の第２２の態様は、上述した第１〜第１５の態様に係る暗号処理装置に与える符号データを生成する暗号処理用符号データ生成装置において、
暗号処理装置内の乱数テーブル格納部に格納されている乱数テーブルと同一の乱数テーブルを記憶した乱数テーブル記憶部と、
暗号処理装置内の暗号処理部による暗号処理に利用させる暗号鍵を入力する暗号鍵入力部と、
乱数テーブル記憶部に記憶されている乱数テーブルを用いて、暗号処理装置内の符号変換部によって行われる変換処理とは逆の変換処理を行い、暗号鍵入力部が入力した暗号鍵に対応する符号データを生成する符号データ生成部と、
を設けるようにしたものである。
【００３５】
(23)  本発明の第２３の態様は、上述した第１６または第１７の態様に係る暗号処理装置に与える暗号化符号データを生成する暗号処理用符号データ生成装置において、
暗号処理装置内の乱数テーブル格納部に格納されている乱数テーブルと同一の乱数テーブルを記憶した乱数テーブル記憶部と、
暗号処理装置内の暗号処理部による暗号処理に利用させる暗号鍵を入力する暗号鍵入力部と、
乱数テーブル記憶部に記憶されている乱数テーブルを用いて、暗号処理装置内の符号変換部によって行われる変換処理とは逆の変換処理を行い、暗号鍵入力部が入力した暗号鍵に対応する符号データを生成する符号データ生成部と、
符号データ生成部によって生成された符号データに対して、暗号処理装置内の符号データ復号部によって復号可能な方法で暗号化を行って暗号化符号データを生成する暗号化符号データ生成部と、
を設けるようにしたものである。
【００３６】
(24)  本発明の第２４の態様は、上述した第１８の態様に係る暗号処理装置に与える暗号化符号データを生成する暗号処理用符号データ生成装置において、
暗号処理装置内の乱数テーブル格納部に格納されている乱数テーブルと同一の乱数テーブルを記憶した乱数テーブル記憶部と、
暗号処理装置内の暗号処理部による暗号処理に利用させる暗号鍵を入力する暗号鍵入力部と、
乱数テーブル記憶部に記憶されている乱数テーブルを用いて、暗号処理装置内の符号変換部によって行われる変換処理とは逆の変換処理を行い、暗号鍵入力部が入力した暗号鍵に対応する符号データを生成する符号データ生成部と、
暗号処理装置内の符号データ復号部に記憶されている「Ｈ組の鍵ペアーのうち一方の鍵」にそれぞれ対応する「Ｈ組の鍵ペアーのうちの他方の鍵」を記憶しており、符号データ生成部によって生成された符号データに対して、「Ｈ組の鍵ペアーのうちの他方の鍵」の中の任意の第ｉ番目の鍵を用いて暗号化を行って暗号化符号データを生成する暗号化符号データ生成部と、
を設けるようにしたものである。
【００３７】
(25)  本発明の第２５の態様は、上述した第１〜第１８の態様に係る暗号処理装置を、コンピュータにプログラムを組み込むことにより構成したものである。
【００３８】
(26)  本発明の第２６の態様は、上述した第１９〜第２１の態様に係る暗号処理装置を、コンピュータにプログラムを組み込むことにより構成したものである。
【００３９】
(27)  本発明の第２７の態様は、上述した第２６の態様に係る暗号処理装置において、
主装置としてコンピュータを機能させるためのメインプログラムと、暗号処理装置としてコンピュータを機能させるための暗号処理サブルーチンプログラムと、をコンピュータに組み込むようにし、メインプログラムを、高級言語もしくは中間言語によって記述し、暗号処理サブルーチンプログラムを、マシン語によって記述するようにしたものである。
【００４０】
(28)  本発明の第２８の態様は、上述した第２２〜第２４の態様に係る暗号処理用符号データ生成装置を、コンピュータにプログラムを組み込むことにより構成したものである。
【００４１】
(29)  本発明の第２９の態様は、メインプログラムと暗号処理サブルーチンプログラムとが組み込まれたコンピュータが、暗号化もしくは復号のための暗号処理を行う暗号処理方法において、
コンピュータが、メインプログラムを実行することにより、暗号処理の対象となる元データと暗号処理に必要な符号データとを暗号処理サブルーチンプログラムに引き渡す前処理段階と、
コンピュータが、暗号処理サブルーチンプログラムを実行することにより、それぞれ固有のセル番号が付与された複数Ｍ個のセルに、ランダムにＮ通り（Ｍ≧Ｎ）の数値が収容された乱数テーブルを参照して、符号データに含まれる個々の数値を、当該数値をセル番号とするセルに収容されている数値に置き換える変換処理を行い、当該変換処理を経て得られるデータを暗号鍵として用いる所定の暗号アルゴリズムに基づいて、元データに対して暗号処理を実施し、処理済データをメインプログラムに引き渡す暗号処理段階と、
コンピュータが、メインプログラムを実行することにより、処理済みデータを用いて所定の処理を続行する後処理段階と、
を行うようにしたものである。
【００４２】
(30)  本発明の第３０の態様は、上述した第２９の態様に係る暗号処理方法において、
前処理段階で、０〜（Ｍ−１）の範囲の値をもった整数を羅列した符号データを暗号処理サブルーチンプログラムに引き渡す処理を行い、
暗号処理段階で、０〜（Ｍ−１）の範囲の連続したセル番号が付与された複数Ｍ個のセルに、０〜（Ｎ−１）の範囲の連続するＮ通りの整数をランダムに収容した乱数テーブルを用い、符号データを、０〜（Ｎ−１）の範囲の値をもった整数を羅列した暗号鍵に置き換える変換処理を行うようにしたものである。
【００４３】
(31)  本発明の第３１の態様は、上述した第２９または第３０の態様に係る暗号処理方法において、
前処理段階で、符号データの代わりに、当該符号データに対して所定の方法で暗号化を行って生成された暗号化符号データを暗号処理サブルーチンプログラムに引き渡す処理を行い、
暗号処理段階で、暗号化符号データを復号して得られる元の符号データを暗号鍵に変換する変換処理を行うようにしたものである。
【発明の効果】
【００４４】
本発明に係る暗号処理装置には、乱数テーブルと、この乱数テーブルを用いて、与えられた符号データを暗号鍵に変換する符号変換部と、が備わっているため、暗号処理に必要な暗号鍵そのものではなく、上記乱数テーブルを利用して作成した符号データを用いて暗号処理の依頼を行うことができる。処理依頼を受けた暗号処理装置は、与えられた符号データを上記乱数テーブルを利用して内部で暗号鍵に変換した上で、暗号処理を実行することになる。このため、当該暗号処理装置を組み込んで構成される情報処理装置には、暗号鍵の代わりに上記符号データを用意しておけば足り、クラッカーによる不正行為が行われても、暗号鍵が漏洩することを防ぐことができる。かくして、利便性を損なうことなしに、耐タンパ性を確保することが可能になる。
【００４５】
また、本発明に係る暗号処理用符号データ生成装置を用いれば、上記乱数テーブルを利用して、任意の暗号鍵に対応した符号データを生成することができるので、本発明に係る暗号処理装置および本発明に係る情報処理装置の利便性を向上させることができる。
【図面の簡単な説明】
【００４６】
【図１】一般的な情報処理装置において、メインプログラムからサブルーチンを呼び出すことにより暗号処理を実行する形態を示すブロック図である。
【図２】図１に示すサブルーチンにおいて、暗号鍵を利用した暗号化処理および復号処理の形態を示すブロック図である。
【図３】アンドロイドＯＳにおけるＪＡＶＡ（登録商標）実行環境を示す模式図である。
【図４】図３に示すＪＡＶＡ（登録商標）実行環境において、ＪＡＶＡ（登録商標）アプリとして用意されたメインプログラムＭから、「Shared Object」として用意された暗号処理サブルーチンＲに暗号処理を依頼する形態を示すブロック図である。
【図５】本発明の第１の実施形態に係る暗号処理装置１２０およびこれを含む情報処理装置１００の構成を示すブロック図である。
【図６】図５に示す乱数テーブルＴの具体例を示す表である。
【図７】図６に示す乱数テーブルＴを参照することにより、暗号鍵Ｋと符号データＦとの間の相互変換を行った例を示す図である。
【図８】本発明に用いられる暗号鍵Ｋを構成するデータと符号データＦを構成するデータの具体的な数値範囲の一例を示す図である。
【図９】本発明に用いられる乱数テーブルＴを構成する個々のセルに付されたセル番号と、当該セルに収容される数値との関係を示す図である。
【図１０】本発明の第２の実施形態に係る暗号処理装置１２０Ａおよびこれを含む情報処理装置１００Ａの構成を示すブロック図である。
【図１１】図１０に示す第２の実施形態で利用されるテーブル指定子ｔの具体例を示す図である。
【図１２】本発明の第３の実施形態に係る暗号処理装置１２０Ｂおよびこれを含む情報処理装置１００Ｂの構成を示すブロック図である。
【図１３】図１２に示す第３の実施形態で利用されるテーブル指定パターンによって定義される指定規則の一例を示す図である。
【図１４】図１２に示す第３の実施形態で利用されるテーブル指定パターンによる指定結果の具体例を示す図である。
【図１５】本発明の第４の実施形態に係る暗号処理装置１２０Ｃおよびこれを含む情報処理装置１００Ｃの構成を示すブロック図である。
【図１６】図１５に示す第４の実施形態で利用されるシフト指示子ｓの具体例を示す図である。
【図１７】図１６に示すシフト指示子ｓに基づいて、乱数テーブルＴに対して行われるシフト処理の一例を示す図である。
【図１８】本発明の第５の実施形態に係る暗号処理装置１２０Ｄおよびこれを含む情報処理装置１００Ｄの構成を示すブロック図である。
【図１９】本発明の第６の実施形態に係る暗号処理装置１２０Ｅおよびこれを含む情報処理装置１００Ｅの構成を示すブロック図である。
【図２０】一般的な公開鍵暗号方式に利用可能なペアー鍵を示す表である。
【図２１】本発明に係る符号データ生成装置の基本構成を示すブロック図である。
【図２２】本発明に係る符号データ生成装置の変形例を示すブロック図である。
【発明を実施するための形態】
【００４７】
以下、本発明を図示する実施形態に基づいて説明する。
【００４８】
＜＜＜  §０．  情報処理装置における暗号処理形態  ＞＞＞
はじめに、一般的な情報処理装置において利用されている暗号処理形態を簡単に説明しておく。前述したように、パソコン、スマートフォン、電子タブレット、ＩＣカードなど、一般的な情報処理装置は、コンピュータプログラムを実行することにより所望の情報処理を実行する装置であり、この情報処理装置に組み込まれた暗号処理装置の機能は、通常、メインプログラムとは別個に設けられた暗号処理サブルーチンにより実現される。
【００４９】
図１は、一般的な情報処理装置において、メインプログラムからサブルーチンを呼び出すことにより暗号処理を実行する形態を示すブロック図である。ここで、メインプログラムは、当該情報処理装置の本来の機能を果たすためのプログラムであり、サブルーチンプログラムは、必要なときに適宜メインプログラムから呼び出され、メインプログラムから依頼された個別処理を実行するプログラムである。
【００５０】
図１(a) には、メインプログラムＭが、平文データＰを暗号化して暗号データＣを得る必要が生じたときに、当該暗号化処理を、暗号化処理サブルーチンＲ１を呼び出して実行させる処理形態が示されている。すなわち、メインプログラムＭは、平文データＰに対して暗号化する必要が生じると、暗号化処理サブルーチンＲ１を呼び出して平文データＰを引き渡す処理を行う。暗号化処理サブルーチンＲ１は、この平文データＰに対して、所定のアルゴリズムに基づく暗号化処理を行った後、得られた暗号データＣをメインプログラムＭに引き渡す処理を行う。メインプログラムＭは、受け取った暗号データＣを用いて、その後の処理を実行する。
【００５１】
同様に、図１(b) には、メインプログラムＭが、暗号データＣを復号して元の平文データＰを得る必要が生じたときに、当該復号処理を、復号処理サブルーチンＲ２を呼び出して実行させる処理形態が示されている。すなわち、メインプログラムＭは、暗号データＣを復号する必要が生じると、復号処理サブルーチンＲ２を呼び出して暗号データＣを引き渡す処理を行う。復号処理サブルーチンＲ２は、この暗号データＣに対して、所定のアルゴリズムに基づく復号処理を行った後、得られた平文データＰをメインプログラムＭに引き渡す処理を行う。メインプログラムＭは、受け取った平文データＰを用いて、その後の処理を実行する。
【００５２】
暗号化処理サブルーチンＲ１が暗号化処理を行う場合や、復号処理サブルーチンＲ２が復号処理を行う場合、固有の暗号アルゴリズムＡとともに固有の暗号鍵Ｋが用いられる（暗号鍵Ｋは、暗号化処理だけでなく、復号処理にも利用される）。たとえば、簡単な例を示せば、アルファベット２６文字からなる英文を平文データとして暗号化処理を行う場合、「アルファベットの並び順に従ってｎ文字だけシフトして暗号を作成する」という暗号アルゴリズムＡと、「ｎ＝＋２」という暗号鍵Ｋと、を用いることにより、「ＤＯＧ」という英単語は、各文字をアルファベット順に２文字ずらすことにより、「ＦＱＩ」という暗号に変換されることになり、逆に「ＦＱＩ」という暗号は「ＤＯＧ」という英単語に復号されることになる。この場合、暗号化や復号を行うには、暗号アルゴリズムＡと暗号鍵Ｋとが必須である。
【００５３】
図２は、図１に示す各サブルーチンＲ１，Ｒ２において、暗号鍵Ｋを利用した暗号化処理および復号処理を行う場合の形態を示すブロック図である。図２(a) に示す暗号化処理サブルーチンＲ１は、入力した平文データＰを暗号化して、暗号データＣを出力する暗号化処理を行うが、当該暗号化処理には、所定の暗号アルゴリズムＡと所定の暗号鍵Ｋが用いられる。これに対して、図２(b) に示す復号処理サブルーチンＲ２は、サブルーチンＲ１により出力された暗号データＣを入力し、これを復号して、元の平文データＰに戻して出力する復号処理を行うが、当該復号処理にも、所定の暗号アルゴリズムＡと所定の暗号鍵Ｋが用いられる。
【００５４】
ここで、サブルーチンＲ１，Ｒ２では、同一の暗号アルゴリズムＡおよび同一の暗号鍵Ｋが用いられる（もちろん、暗号アルゴリズムＡに基づいて暗号化処理を行う手順と、同じ暗号アルゴリズムＡに基づいて復号処理を行う手順とは、アルゴリズムを逆に適用した手順ということになる）。
【００５５】
別言すれば、暗号アルゴリズムＡおよび暗号鍵Ｋを用いた暗号化処理によって得られた暗号データＣを、元の平文データＰに戻すためには、同じ暗号アルゴリズムＡおよび暗号鍵Ｋを用いた復号処理を行う必要があるので、どのような暗号アルゴリズムＡを採用して、どのような暗号鍵Ｋを用いて暗号化が行われたかを知らなければ、暗号データＣに対する復号処理を行うことはできない。結局、暗号処理の耐タンパ性を確保するには、用いる暗号アルゴリズムＡおよび暗号鍵Ｋの秘密性が維持されればよいことになる。
【００５６】
図１に示すとおり、一般的な情報処理装置では、本来の機能を果たすためのメインプログラムＭから、暗号化処理サブルーチンＲ１や復号処理サブルーチンＲ２を呼び出すことにより、暗号化や復号の処理が行われる。通常、メインプログラムＭとしては、高級言語もしくは中間言語によって記述されたプログラムが用いられ、各サブルーチンＲ１，Ｒ２としては、マシン語によって記述されたプログラムが用いられる。これは、暗号化処理サブルーチンＲ１や復号処理サブルーチンＲ２は、予め定められた暗号アルゴリズムに基づく定型論理演算を高速に実行する必要があるため、マシン語によって記述するのが適しているためである。また、後述するように、マシン語によって記述しておけば、リバースエンジニアリング（プログラムの解析）が困難なため、不正な解析を受けにくいというメリットも得られる。一方、メインプログラムＭは、要望に応じて多様かつ複雑な処理を実行する必要があり、しかも頻繁にアップデートして適宜改良を加えてゆく必要もあるため、高級言語もしくは中間言語によって記述するのが適している。
【００５７】
たとえば、アンドロイドＯＳ（登録商標）が組み込まれたスマートフォンの場合、通常、メインプログラムとしては、中間言語を採用したＪＡＶＡ（登録商標）アプリが用いられ、サブルーチンとしては、マシン語によって記述された様々なプログラムが用いられる。図３は、アンドロイドＯＳにおけるＪＡＶＡ（登録商標）実行環境を示す模式図である。図示のとおり、アンドロイドＯＳ（Android OS）が組み込まれた情報処理装置には、ＪＡＶＡ（登録商標）アプリの実行環境である「JAVA（登録商標） Virtual Machine」と、様々なサブルーチン群の集合体である「Shared Object」とが用意されており、ＪＡＶＡ（登録商標）アプリとしてインストールされたメインプログラムは、図示の処理実行ルートｘで示すように、「JAVA （登録商標）Virtual Machine」を介して「Android OS」に命令を伝達して所望の処理を実行して処理結果を受け取ることもできるし、図示の処理実行ルートｙで示すように、「Shared Object」として用意されたサブルーチンを呼び出して所望の処理を実行し、処理結果を受け取ることもできる。
【００５８】
したがって、アンドロイドＯＳが組み込まれたスマートフォンの場合、通常、暗号化処理サブルーチンＲ１や復号処理サブルーチンＲ２は、「Shared Object」として用意され、メインプログラムＭとしてのＪＡＶＡ（登録商標）アプリから呼び出されて利用される。
【００５９】
なお、暗号化処理は、図２(a) に示すように、平文データＰを暗号データＣに変換する処理であり、復号処理は、図２(b) に示すように、暗号データＣを平文データＰに戻す処理であるが、いずれも所定の暗号鍵Ｋを利用して所定の暗号アルゴリズムＡに基づく演算を行う処理であり、その実体に根本的な違いはない。そこで、本願では、「暗号化処理」と「復号処理」とを包括して「暗号処理」と呼ぶことにする。別言すれば、本願における「暗号処理」とは、平文データＰを暗号データＣに変換する「暗号化処理」のみを意味するものではなく、暗号データＣを平文データＰに戻す「復号処理」も含んだ処理を言う。
【００６０】
そこで、本願では、暗号化処理サブルーチンＲ１および復号処理サブルーチンＲ２を包括して、暗号処理サブルーチンＲと呼ぶことにする。したがって、本願において、暗号処理サブルーチンＲと言った場合、暗号化処理サブルーチンＲ１のみを指す場合もあれば、復号処理サブルーチンＲ２のみを指す場合もあれば、その両方の機能を備えたサブルーチンを指す場合もある。ただ、便宜上、以下の説明では、暗号処理サブルーチンＲが暗号化処理サブルーチンＲ１である場合を例にとり、暗号処理サブルーチンＲにより、平文データＰを暗号データＣに変換する暗号化処理が実行される場合について説明を行うことにする。
【００６１】
図４は、図３に示すＪＡＶＡ（登録商標）実行環境において、ＪＡＶＡ（登録商標）アプリとして用意されたメインプログラムＭから、「Shared Object」として用意された暗号処理サブルーチンＲに対して暗号処理を依頼する場合の２通りの形態を示すブロック図である。
【００６２】
図４(a) に示す第１の形態は、暗号処理サブルーチンＲ内に、暗号アルゴリズムＡと暗号鍵Ｋとの双方を組み込んだ例である。この第１の形態を採る場合は、メインプログラムＭから暗号処理サブルーチンＲに対して平文データＰを引き渡して暗号処理を依頼すればよい。暗号処理サブルーチンＲは、受け取った平文データＰに対して、組み込まれている暗号鍵Ｋを用いて、組み込まれている暗号アルゴリズムＡに基づく暗号化処理を行い、得られた暗号データＣをメインプログラムＭに返す処理を行うことになる。
【００６３】
これに対して、図４(b) に示す第２の形態は、暗号処理サブルーチンＲ内に暗号アルゴリズムＡを組み込み、メインプログラムＭ内に暗号鍵Ｋを組み込んだ例である。この第２の形態を採る場合は、メインプログラムＭから暗号処理サブルーチンＲに対して、平文データＰとともに暗号鍵Ｋを引き渡して暗号処理を依頼することになる。暗号処理サブルーチンＲは、受け取った平文データＰに対して、受け取った暗号鍵Ｋを用いて、組み込まれている暗号アルゴリズムＡに基づく暗号化処理を行い、得られた暗号データＣをメインプログラムＭに返す処理を行うことになる。
【００６４】
上述したとおり、アンドロイドＯＳを採用した電子機器の場合、通常、メインプログラムＭとしては、中間言語を採用したＪＡＶＡ（登録商標）アプリが用いられ、暗号処理サブルーチンＲとしては、マシン語によって記述された「Shared Object」が用いられる。一般に、マシン語によって記述されたプログラムの解析は困難であるが、中間言語によって記述されたプログラムの解析は容易である。このため、上記構成を採用した電子機器の場合、メインプログラムＭ（中間言語で記述されたＪＡＶＡ（登録商標）アプリ）は、ソースコードに戻して内容の解析（リバースエンジニアリング）を行うことが容易であるのに対して、暗号処理サブルーチンＲ（マシン語で記述されたShared Object）は内容の解析が困難である。したがって、耐タンパ性を考慮した場合、暗号鍵Ｋを暗号処理サブルーチンＲ内に組み込んだ第１の形態（図４(a) ）の方が、暗号鍵ＫをメインプログラムＭ内に組み込んだ第２の形態（図４(b) ）に比べて、クラッカーの不正解析を受けにくいために好ましい、と言える。すなわち、第２の形態では、クラッカーにより暗号鍵Ｋが盗み取られやすい。
【００６５】
しかしながら、利便性を考慮した場合、図４(a) に示す第１の形態は使い勝手が悪く、実用上は、図４(b) に示す第２の形態が利用されることが多い。これは、暗号処理サブルーチンＲが「Shared Object」として電子機器に組み込まれ、多数のアプリケーションプログラム（メインプログラム）から共通して利用されるプログラムであるため、暗号鍵ＫについてはメインプログラムＭによって任意の鍵を指定して自由度を高めたいという要望があるためである。
【００６６】
たとえば、図４(a) に示す第１の形態を採用した場合、業者Ｘが提供するアプリケーションプログラムＭｘ（メインプログラム）も、業者Ｙが提供するアプリケーションプログラムＭｙ（メインプログラム）も、「Shared Object」として用意された暗号処理サブルーチンＲ内の共通の暗号アルゴリズムＡと共通の暗号鍵Ｋとを用いて暗号処理を行うことになる。このように、他社と同じ暗号鍵Ｋを用いた暗号処理は、セキュリティ上好ましくない。また、図４(a) に示す第１の形態を採用した場合、毎回、同じ暗号鍵Ｋが利用されることになり、この点においても、セキュリティの低下を招くことになる。
【００６７】
図４(b) に示す第２の形態を採用すれば、業者Ｘが提供するアプリケーションプログラムＭｘでは暗号鍵Ｋｘを用い、業者Ｙが提供するアプリケーションプログラムＭｙでは暗号鍵Ｋｙを用いる、というように、各社で個別の暗号鍵を用いることができる。また、同じアプリケーションプログラムＭｘでも、暗号鍵Ｋｘ１，Ｋｘ２，Ｋｘ３，... ，というように、毎回、異なる暗号鍵を用いることも可能になる。
【００６８】
このように、実用上は、第２の形態を採り、暗号処理に用いる暗号鍵Ｋに自由度をもたせた方が、利便性が向上することになる。ただ、上述したとおり、この第２の形態は、耐タンパ性に問題があり、メインプログラムＭ内に組み込まれた暗号鍵Ｋが外部に漏洩しやすい。
【００６９】
そこで、前掲の特許文献１では、メインプログラムＭ内ではなく、指輪に暗号鍵を格納しておく方法が提案されているが、ユーザは、常に指輪を携行する必要があり、利便性は著しく低下してしまう。また、前掲の特許文献２，３には、暗号鍵を外部の管理サーバからダウンロードして入手する方法が提案されているが、クラッカーはダウンロード経路から暗号鍵を盗み取ることが可能であり、十分な耐タンパ性を確保することができない。
【００７０】
本発明は、このような実情を鑑み、暗号鍵を用いた暗号処理を実行する際に、利便性を損なうことなしに、耐タンパ性を確保することが可能な暗号処理装置およびこれを組み込んだ情報処理装置を提供することを目的とするものである。以下、本発明を、いくつかの実施形態について詳述する。
【００７１】
＜＜＜  §１．  本発明の第１の実施形態  ＞＞＞
図５は、本発明の第１の実施形態に係る情報処理装置１００の構成を示すブロック図である。この第１の実施形態は、本発明の最も基本的な実施形態である。図示のとおり、この情報処理装置１００は、主装置１１０と暗号処理装置１２０とによって構成されている。
【００７２】
もっとも、実際には、この情報処理装置１００は、パソコン、スマートフォン、電子タブレット、ＩＣカードなど、コンピュータを含む電子機器に、所定のプログラムを組み込むことによって構成される。図示の例の場合、主装置１１０の機能は、この電子機器にアプリケーションプログラム（もしくは、ＯＳプログラムでもよい）として組み込まれたメインプログラムＭを実行することにより得られ、暗号処理装置１２０の機能は、この電子機器にサブルーチンプログラムの１つとして組み込まれた暗号処理サブルーチンＲを実行することにより得られる。
【００７３】
たとえば、§０で述べたアンドロイドＯＳが組み込まれたスマートフォンを情報処理装置１００として利用する場合、主装置１１０の機能は、ＪＡＶＡ（登録商標）アプリとしてインストールされたメインプログラムＭによって実現され、暗号処理装置１２０の機能は、「Shared Object」として用意された暗号処理サブルーチンＲによって実現されることになる。このように、ここに示す実施例の場合、図５に示す個々のブロックは、実際には、コンピュータのハードウエア資源を利用したソフトウエアの機能として実現されるものである。
【００７４】
すなわち、主装置１１０として機能するメインプログラムＭにおいて、暗号処理（暗号化処理もしくは復号処理）が必要になった場合、暗号処理装置１２０として機能する暗号処理サブルーチンＲを呼び出し、必要な暗号処理を依頼することになる。その際、図示のとおり、元データＤと符号データＦとが暗号処理装置１２０（暗号処理サブルーチンＲ）に引き渡されることになる。暗号処理装置１２０は、この依頼に基づき暗号処理を実行し、その結果として得られる処理済データＥを、主装置１１０（メインプログラムＭ）に戻すことになる。主装置１１０は、この処理済データＥを用いて、必要な処理を続行する。
【００７５】
図示のとおり、メインプログラムＭによって実現される主装置１１０は、情報処理部１１１、暗号処理依頼部１１２、暗号処理結果受信部１１３を有している。ここで、情報処理部１１１は、メインプログラムＭの目的となる所定の情報処理を実行する構成要素であり、実行される情報処理の内容は、メインプログラムＭの目的により様々である。たとえば、当該メインプログラムＭが、何らかの決済処理を行うアプリケーションプログラムである場合は、情報処理部１１１の指示に基づいて、外部の決済サーバと通信が行われ、ユーザの認証や決済金額の送信などの情報処理が実行されることになる。
【００７６】
情報処理部１１１が情報処理を行う際に、何らかのデータに対して暗号処理が必要になると、暗号処理の対象となるデータを暗号処理依頼部１１２に引き渡して暗号処理を行うよう指示する。ここでは、暗号処理の対象となるデータを元データＤと呼ぶことにする。なお、前述したように、本願における「暗号処理」とは、「暗号化処理（平文データＰを暗号データＣに変換する処理）」と「復号処理（暗号データＣを平文データＰに戻す処理）」との双方を意味するものである。したがって、元データＤが平文データＰの場合に行われる「暗号処理」は「暗号化処理」ということになり、元データＤが暗号データＣの場合に行われる「暗号処理」は「復号処理」ということになる。
【００７７】
暗号処理依頼部１１２は、情報処理部１１１から引き渡された元データＤと予め記憶されていた符号データＦを、暗号処理装置１２０内のデータ入力部１２１に与える処理を行う。符号データＦの実体については、後に詳述する。この暗号処理依頼部１１２が行う処理は、実際には、メインプログラムＭから暗号処理サブルーチンＲを呼び出し、暗号処理サブルーチンＲに元データＤと符号データＦとを引き渡す処理ということになる。
【００７８】
一方、暗号処理結果受信部１１３は、暗号処理装置１２０のデータ出力部１２５から出力された処理済データＥを受け取り、これを情報処理部１１１に引き渡す処理を行う。処理済データＥは、暗号処理装置１２０による処理結果であり、元データＤが平文データＰであった場合には、これを暗号化して得られる暗号データＣということになり、元データＤが暗号データＣであった場合には、これを復号して得られる平文データＰということになる。この暗号処理結果受信部１１３が行う処理は、実際には、暗号処理サブルーチンＲから戻される処理済データＥを変数として取り込み、メインプログラムＭの後続処理ステップ（サブルーチンコール命令に後続する命令）に引きつぐ処理ということになる。情報処理部１１１は、得られた処理済データＥを用いて、後続する情報処理を続行する。
【００７９】
続いて、暗号処理装置１２０（暗号処理サブルーチンＲ）の構成を説明する。図示のとおり、暗号処理装置１２０は、データ入力部１２１、符号変換部１２２、乱数テーブル格納部１２３、暗号処理部１２４、データ出力部１２５を有しており、入力した元データＤに対して暗号化もしくは復号のための暗号処理を行い、処理済データＥを出力する機能を果たす。
【００８０】
データ入力部１２１は、暗号処理の対象となる元データＤと暗号処理に必要な符号データＦとを外部（主装置１１０）から入力する構成要素であり、暗号処理サブルーチンＲにおいて、メインプログラムＭから元データＤと符号データＦの引き渡しを受ける処理を行う部分に相当する。ここで、データ入力部１２１が入力した符号データＦは符号変換部１２２に与えられ、元データＤは暗号処理部１２４に与えられる。
【００８１】
符号変換部１２２は、データ入力部１２１が入力した符号データＦを暗号鍵Ｋに変換する処理を行う。乱数テーブル格納部１２３は、この変換処理を行う際に参照される乱数テーブルＴを格納する構成要素であり、符号変換部１２２による変換処理の結果は、この乱数テーブルＴの内容に基づいて一義的に決定される。符号変換部１２２による変換処理で得られた暗号鍵Ｋは、暗号処理部１２４に与えられる。
【００８２】
暗号処理部１２４は、データ入力部１２１から与えられた元データＤに対して、符号変換部１２２から与えられた暗号鍵Ｋを用いて、予め組み込まれている所定の暗号アルゴリズムＡに基づく暗号処理を実施し、処理済データＥを生成する処理を行う。このように、所定の暗号鍵を用いた所定の暗号アルゴリズムに基づいて、元データＤに対して暗号処理を施す具体的な処理方法は、既に様々な方法が公知となっているため、ここでは詳しい説明は省略する。暗号処理部１２４で生成された処理済データＥは、データ出力部１２５に与えられる。
【００８３】
データ出力部１２５は、こうして生成された処理済データＥを外部（主装置１１０）に出力する構成要素であり、暗号処理サブルーチンＲにおいて、処理済データＥをメインプログラムＭに引き渡す処理を行う部分に相当する。図示のとおり、処理済データＥは、主装置１１０（メインプログラムＭ）の暗号処理結果受信部１１３に引き渡される。上述したとおり、処理済データＥは、元データＤが平文データＰであった場合には、これを暗号化して得られる暗号データＣであり、元データが暗号データＣであった場合には、これを復号して得られる平文データＰである。
【００８４】
続いて、乱数テーブルＴの実体と、符号データＦと暗号鍵Ｋとの関係を説明しよう。本発明において用いられる乱数テーブルＴは、それぞれ固有のセル番号が付与された複数Ｍ個のセルに、ランダムにＮ通り（Ｍ≧Ｎ）の数値を収容したテーブルであり、乱数テーブル格納部１２３に格納されている。別言すれば、暗号処理サブルーチンＲ内にテーブルとして組み込まれていることになる。
【００８５】
図６は、このような乱数テーブルＴの具体例を示す表である。この表において、実線の矩形は個々のセルを示しており、１６行１６列の合計２５６個のセルが設けられている。すなわち、図６に示す例は、Ｍ＝２５６に設定し、２５６個のセルを有する乱数テーブルＴを定義した例ということになる。個々のセルは、破線によって上下２段に分けられているが、上段の数値は当該セルに付された固有のセル番号（第０番〜第２５５番）を示し、下段の数値は当該セルに収容されている数値を示している。図では、便宜上、上段のセル番号も下段の数値も１６進表示で記載してある。
【００８６】
上段に示すセル番号は、第１行第１列のセルを「００」として、右方向に「０１」，「０２」，... と順に増加してゆき、右端の「０Ｆ」から第２行第１列の「１０」へと続き、以下同様にして、列に関しては左から右の順に、行に関しては上から下の順に、それぞれ番号を付し、最後に第１６行第１６列のセル（右下隅のセル）の番号を「ＦＦ」としている。
【００８７】
一方、この例では、各セルの下段に収容されている数値も、０〜２５５の２５６通り（Ｎ＝２５６）の整数としており、１６進表示で「００」〜「ＦＦ」なる２５６通り数値が、いずれかのセルに収容されている。ただ、収容場所はランダムになっており、テーブル全体が乱数テーブルを構成している。たとえば、この例の場合、セル番号第０番（「００」）のセルには「５Ｂ」なる数値が収容され、セル番号第１番（「０１」）のセルには「Ｄ３」なる数値が収容され、セル番号第２番（「０２」）のセルには「８Ａ」なる数値が収容されている。
【００８８】
結局、この乱数テーブルＴは、セル番号として与えられる０〜２５５の中の所定の整数（上段）と、セルに収容されている数値として与えられる０〜２５５の中の所定の整数（下段）とを１対１に対応づけた２５６組のペアーを定義するテーブルになっている。このため、任意のセル番号を指定すると、これに対応する数値が１つだけ定まり、逆に、任意の数値を指定すると、これに対応するセル番号が１つだけ定まることになる。たとえば、セル番号「００」を指定すれば数値「５Ｂ」が一義的に定まり、数値「Ｄ３」を指定すれば、セル番号「０１」が一義的に定まる。
【００８９】
なお、図６では、説明の便宜上、個々のセルの上段にセル番号を付して示したが、実際の乱数テーブルでは、セル番号を必ずしもデータとして格納しておく必要はない。たとえば、個々のセルをアドレス値として特定することができるのであれば、当該アドレス値がセル番号として機能するので、乱数テーブルとしては、単に、セル内に収容される合計２５６バイトの数値を羅列したデータであってもかまわない。
【００９０】
このような乱数テーブルＴを利用すれば、１バイトのデータをＬ個羅列したＬバイトの暗号鍵Ｋを、１バイトのデータをＬ個羅列したＬバイトの符号データＦに変換することができ、その逆の変換を行うこともできる。図７は、図６に示す乱数テーブルＴを参照することにより、暗号鍵Ｋと符号データＦとの間の相互変換を行った例を示す図である。
【００９１】
この例の場合、暗号鍵Ｋは、「２６，５Ｃ，０８，３Ａ，Ｄ８，５５，２Ｂ，１０」という８バイト（Ｌ＝８）のデータによって構成されているが、個々のバイトを構成する数値が収容されているセルのセル番号を図６に示す乱数テーブルＴから特定すると、数値「２６」はセル番号「ＡＤ」のセル、数値「５Ｃ」はセル番号「３１」のセル、数値「０８」はセル番号「６３」のセル、... といった具合にセル番号が特定できるので、暗号鍵Ｋの個々の数値をセル番号に置き換えれば、図７に符号データＦとして示す８バイトのデータ「ＡＤ，３１，６３，１Ｄ，１２，６０，ＥＥ，１Ｂ」が一義的に定まることになる。
【００９２】
逆に、符号データＦとして「ＡＤ，３１，６３，１Ｄ，１２，６０，ＥＥ，１Ｂ」なるデータが与えられれば、これらのデータをセル番号とする各セルに収容されている数値を並べることにより、「２６，５Ｃ，０８，３Ａ，Ｄ８，５５，２Ｂ，１０」という８バイトの暗号鍵Ｋが一義的に定まることになる。
【００９３】
結局、図６に示す乱数テーブルＴを予め用意しておけば、図７に例示するように、暗号鍵Ｋと符号データＦとの間で相互変換を行うことができる。そこで、本発明では、主装置１１０から暗号処理装置１２０に対して、暗号鍵Ｋを引き渡す代わりに、この暗号鍵Ｋに対応する符号データＦを引き渡すという方法を採用することにより、暗号鍵Ｋが漏洩することを防止している。
【００９４】
前述したとおり、図５に示す情報処理装置１００では、暗号処理依頼部１１２が、情報処理部１１１から与えられた元データＤと、予め記憶している符号データＦと、を暗号処理装置１２０に引き渡す処理を行うことになるが、ここで暗号処理依頼部１１２が予め記憶している符号データＦは、暗号処理装置１２０内の暗号処理部１２４が暗号処理を行う際に実際に用いるべき暗号鍵Ｋを、乱数テーブル格納部１２３内に格納されている乱数テーブルＴを用いて変換することにより得られる符号データになっている。
【００９５】
別言すれば、暗号処理装置１２０として機能する暗号処理サブルーチンＲにおいて、図７上段に示すような「２６，５Ｃ，０８，３Ａ，Ｄ８，５５，２Ｂ，１０」なる８バイトの暗号鍵Ｋを用いた暗号処理を実行させたい場合には、主装置１１０として機能するメインプログラムＭの作成者は、予め図６に示すような乱数テーブルＴ（乱数テーブル格納部１２３に格納されているテーブル）を参照して、図７下段に示すような「ＡＤ，３１，６３，１Ｄ，１２，６０，ＥＥ，１Ｂ」なる８バイトの符号データＦを作成しておき、これをメインプログラムＭ内に組み込んでおけばよい。
【００９６】
この場合、主装置１１０から暗号処理装置１２０に対して暗号処理の依頼が行われる際に（すなわち、メインプログラムＭから暗号処理サブルーチンＲが呼び出される際に）、元データＤと、「ＡＤ，３１，６３，１Ｄ，１２，６０，ＥＥ，１Ｂ」なる符号データＦとが引き渡されることになるが、符号変換部１２２により、符号データＦは暗号鍵Ｋに変換されるので、暗号処理部１２４は、変換後に得られる「２６，５Ｃ，０８，３Ａ，Ｄ８，５５，２Ｂ，１０」なる暗号鍵Ｋを用いて暗号処理を実施することになる。かくして、メインプログラムＭの作成者の意図どおりの暗号処理を実行することができる。
【００９７】
このように、本発明によれば、暗号処理依頼部１１２に所望の符号データＦを用意しておき、この符号データＦを暗号処理装置１２０に引き渡して暗号処理を行わせることができるため、暗号処理に用いる暗号鍵Ｋを自由に指定することができ、利便性が向上することになる。しかも、情報処理装置１００内には、暗号鍵Ｋ自身を用意しておく必要がないので、たとえクラッカーが主装置１１０内を解析したとしても（メインプログラムＭをソースコードに戻してリバースエンジニアリングを行ったとしても）、暗号鍵Ｋを盗み出すことはできない。
【００９８】
もちろん、クラッカーの解析により、符号データＦ自体は盗み出されるかもしれないが、符号データＦを暗号鍵Ｋに変換するには乱数テーブルＴが必要になるため、符号データＦが漏洩したとしても、暗号鍵Ｋが直ちに察知されることはない。乱数テーブルＴは、暗号処理装置１２０内に組み込まれているが、上述したとおり、暗号処理装置１２０は、マシン語によって記述された「Shared Object」内の暗号処理サブルーチンＲの機能として実現されるものであるため、これを解析して、乱数テーブルＴを抜き出す作業は、メインプログラムＭを解析する作業に比べて極めて困難である。
【００９９】
なお、任意の暗号鍵Ｋを符号データＦに変換するには、乱数テーブルＴが必要になるので、メインプログラムＭの作成者などが希望すれば、当該希望者には乱数テーブルＴのデータを開示する必要がある。したがって、当該開示を受けた者は、乱数テーブルＴの内容が漏洩しないよう、厳重に管理する必要がある。なお、乱数テーブルＴの内容を開示せずに、任意の暗号鍵Ｋを用いた暗号処理を可能にする方法については、§７で述べる。
【０１００】
以上、暗号処理依頼部１１２内に予め符号データＦを記憶させておき、暗号処理を依頼する際には、暗号処理依頼部１１２が、情報処理部１１１から与えられた元データＤと予め記憶していた符号データＦとを暗号処理装置１２０に与える例を述べたが、符号データＦは、必ずしも暗号処理依頼部１１２内に記憶させておく必要はなく、外部装置や外部のサーバから受け取るようにしてもかまわない。
【０１０１】
たとえば、符号データＦを、情報処理装置１００とは別の外部装置に記憶しておき、必要なときに、これを暗号処理依頼部１１２によって読み出して利用するような形態を採ることも可能である。あるいは、符号データＦを外部のサーバに用意しておき、必要なときに、これを暗号処理依頼部１１２によってダウンロードして利用するような形態も可能である。もちろん、符号データＦは、必要になるたびに、外部のサーバにおいて乱数テーブルＴを参照して暗号鍵Ｋから生成するようにしてもかまわない。また、データ入力部１２１が、暗号処理依頼部１１２を介さずに、符号データＦを外部装置や外部のサーバから直接入力するような形態を採ることもできる。
【０１０２】
なお、図６には、本発明に用いる乱数テーブルＴの一例として、０〜２５５のセル番号が付された合計２５６個のセルに、０〜２５５の２５６通りの数値をランダムに収容したテーブルを示したが、もちろん、本発明に利用可能な乱数テーブルは、このようなテーブルに限定されるものではない。
【０１０３】
本発明で利用する乱数テーブルは、それぞれ固有のセル番号が付与された複数Ｍ個のセルに、ランダムにＮ通り（Ｍ≧Ｎ）の数値を収容したテーブルであれば、どのようなテーブルであってもかまわない。符号変換部１２２は、このような乱数テーブルを参照することにより、データ入力部１２１が入力した符号データＦに含まれる個々の数値を、当該数値をセル番号とするセルに収容されている数値に置き換える変換処理を行い、変換後のデータを暗号鍵Ｋとして暗号処理部１２４に与える処理を行えばよい。
【０１０４】
より具体的には、暗号処理部１２４に組み込まれる一般的な暗号アルゴリズムＡは、０〜（Ｎ−１）の範囲の値をもった整数を羅列した暗号鍵Ｋを用いて暗号処理を行う機能を有しているので、乱数テーブルＴとしては、０〜（Ｍ−１）の範囲の連続したセル番号が付与された複数Ｍ個のセルに、０〜（Ｎ−１）の範囲の連続するＮ通りの整数をランダムに収容したテーブルを用意すればよい。そうすれば、符号変換部１２２は、０〜（Ｍ−１）の範囲の値をもった整数を羅列した符号データＦを、０〜（Ｎ−１）の範囲の値をもった整数を羅列した暗号鍵Ｋに置き換える変換処理を行うことができる。
【０１０５】
特に、Ｍ＝Ｎに設定し、Ｎ個のセルにＮ通りの整数をそれぞれ１個ずつ収容した乱数テーブルを用いるようにすれば、図８に示すように、暗号鍵Ｋを構成する個々のデータも、符号データＦを構成する個々のデータも、いずれも０〜（Ｎ−１）の範囲の値をもったＮ通りの整数になるので利便性が向上する。図６に示す乱数テーブルＴは、Ｍ＝Ｎ＝２５６に設定した例ということになる。実用上、コンピュータのデータ処理は、１バイトのデータを１つの単位として取り扱うことになるので、Ｍ＝Ｎ＝２５６に設定した例は最も実用的な例と言うことができる。
【０１０６】
すなわち、Ｍ＝Ｎ＝２５６に設定すれば、０〜２５５の連続セル番号が付与された２５６個のセルに、０〜２５５の整数をそれぞれ１個ずつランダムに収容した乱数テーブルＴ（図６の例）を定義することができるので、符号変換部１２２は、１バイトのデータをＬ個羅列したＬバイトの符号データＦを、個々のバイトごとに置換して、１バイトのデータをＬ個羅列したＬバイトの暗号鍵Ｋに置き換える変換処理を行うことができ（図７の例は、Ｌ＝８とした例）、暗号処理部１２４は、このＬバイトの暗号鍵Ｋを用いて暗号処理を行うことができる。
【０１０７】
もっとも、本発明に用いる乱数テーブルでは、必ずしもセルの数Ｍと、セルに収容される数値のバリエーションの数Ｎとについて、Ｍ＝Ｎの関係が成り立つ必要はない。すなわち、図９に示すとおり、セルの数をＭ個として、０〜（Ｍ−１）の範囲内のセル番号を付与し、個々のセル内に収容される数値を、０〜（Ｎ−１）の範囲内のＮ通りの整数とした場合、Ｍ≧Ｎの関係が維持されていればよい。別言すれば、Ｍ＞Ｎの関係にあってもよい。Ｍ＞Ｎに設定した場合は、Ｍ個のセルにＮ通りの整数がそれぞれ少なくとも１個ずつ収容され、一部のセルには他のセルと同一の整数が重複して収容されることになる。結局、本発明に用いる乱数テーブルは、複数Ｍ個（Ｍ≧Ｎ）のセルに、０〜（Ｎ−１）の範囲の整数を重複を許してランダムに収容したテーブルであればよいことになる。
【０１０８】
特に、Ｎ＝２５６、Ｍ＞２５６に設定した場合、乱数テーブル格納部１２３には、０〜（Ｍ−１）の連続セル番号が付与されたＭ個のセルに、０〜２５５の整数をそれぞれ少なくとも１個ずつランダムに収容した乱数テーブルが格納されることになるが、そのような乱数テーブルを用いた場合でも、符号変換部１２２は、所定ビット長のデータをＬ個羅列した符号データを、個々のデータごとに置換して、１バイトのデータをＬ個羅列したＬバイトの暗号鍵Ｋに置き換える変換処理を行うことができ、暗号処理部１２４は、このＬバイトの暗号鍵Ｋを用いて暗号処理を行うことができる。
【０１０９】
たとえば、Ｎ＝２５６、Ｍ＝５１２に設定した場合、５１２個のセルに、０〜２５５の整数が少なくとも１個ずつ含まれるように、各整数をランダムに収容した乱数テーブルが得られる。この場合、ある特定の整数が、１つのセルのみに収容されている場合もあれば、複数のセルに重複して収容されている場合もある。一方、符号データＦを構成する個々のデータは、０〜５１１の５１２個のセルを特定するセル番号を示すことになるので、１バイト（８ビット）では足りず、９ビットのビット長をもったデータということになる。それでも、符号変換部１２２は、符号データＦを構成する個々のデータを、当該データで特定されるセル番号のセルに収容されている整数に置き換える処理を行うことにより、符号データＦを一義的に暗号鍵Ｋに変換することができる。
【０１１０】
もっとも、Ｍ＞Ｎに設定した場合は、１つの整数が複数のセルに重複して収容されることになるので、当該整数が収容されているセルのセル番号が、複数通り存在することになる。その場合、いずれのセル番号を用いてもよいことになる。その結果、同一の暗号鍵Ｋに対して、複数通りの符号データＦを定義することができ、符号データＦの決定に冗長性が加わることになる。このような冗長性は、耐タンパ性を向上させる上で有益である。すなわち、異なる複数通りの符号データＦを用いて、同一の暗号鍵Ｋを発生させることができるようになるので、統計的な手段を利用した不正な解析を困難にする効果が得られる。
【０１１１】
＜＜＜  §２．  本発明の第２の実施形態  ＞＞＞
続いて、本発明の第２の実施形態を説明する。図１０は、この第２の実施形態に係る情報処理装置１００Ａの構成を示すブロック図である。この第２の実施形態の構成の大部分は、図５を参照しながら§１において述べた第１の実施形態の構成と同じである。そこで、図１０に示す第２の実施形態の各構成要素の符号には、図５に示す第１の実施形態の対応する構成要素の符号の末尾に「Ａ」を付した符号を用いて示すことにし、ここでは、図５に示す第１の実施形態の対応する構成要素との相違点のみを説明することにする。
【０１１２】
図１０に示す第２の実施形態の特徴は、暗号処理装置１２０Ａが複数の乱数テーブルを用いる点にある。図示のとおり、乱数テーブル格納部１２３Ａには、複数Ｋ通り（図示の例の場合、Ｋ＝１６）の乱数テーブルＴ０〜Ｔ１５が格納されている。個々の乱数テーブルＴ０〜Ｔ１５は、いずれも図６に例示した乱数テーブルＴと同様に、合計２５６個のセルに、０〜２５５の整数をそれぞれ１個ずつランダムに収容したテーブルになっている。ただ、ランダムの状態は、１６枚の乱数テーブルＴ０〜Ｔ１５のそれぞれについて異なっているため、１６枚の乱数テーブルＴ０〜Ｔ１５の内容は互いに異なっている。
【０１１３】
一方、主装置１１０Ａ内の暗号処理依頼部１１２Ａは、情報処理部１１１Ａから与えられた元データＤと、予め記憶されていたもしくは外部から受け取った符号データＦに加えて、更に、複数Ｋ通りの乱数テーブルの中の１つを指定するテーブル指定子ｔをデータ入力部１２１Ａに対して与える機能を有している。このため、データ入力部１２１Ａは、元データＤおよび符号データＦとともに、特定の乱数テーブルを指定するテーブル指定子ｔを入力する処理を行うことになる。ここで、元データＤは暗号処理部１２４Ａに与えられ、符号データＦおよびテーブル指定子ｔは符号変換部１２２Ａに与えられる。
【０１１４】
そして、符号変換部１２２Ａは、複数Ｋ通りの乱数テーブルのうち、与えられたテーブル指定子ｔで指定された特定の乱数テーブルを参照することにより、符号データＦを暗号鍵Ｋに変換する変換処理を行う。その他の各構成要素の機能は、図５に示す第１の実施形態の対応する構成要素の機能と同様である。
【０１１５】
図１１は、図１０に示す第２の実施形態で利用されるテーブル指定子ｔの具体例を示す図である。ここでは、図７に示す例と同様に、８バイトのデータからなる符号データＦを同じく８バイトのデータからなる暗号鍵Ｋに変換する場合を例として挙げてある。
【０１１６】
図１１(a) に示す例は、８バイトの符号データＦの先頭に１バイトのテーブル指定子ｔを付加した形態を示す。すなわち、この例の場合、「０６」（１６進表示）なる１バイトのテーブル指定子により、乱数テーブルＴ６が特定されている。後続する８バイトのデータ「ＡＤ，３１，６３，１Ｄ，１２，６０，ＥＥ，１Ｂ」は、図７下段に示す符号データＦである。ここでは、この８バイトのデータを、それぞれｆ１〜ｆ８なる符号で示すことにする。結局、図１１(a) に示すデータは、１バイトのテーブル指定子ｔと、８バイトの符号データＦ（バイトｆ１〜ｆ８）によって構成されている。
【０１１７】
符号変換部１２２Ａは、このようなデータが与えられると、まず、乱数テーブル格納部１２３Ａ内に格納されている複数の乱数テーブルＴ０〜Ｔ１５の中から、テーブル指定子ｔによって指定された乱数テーブルＴ６を選択し、この乱数テーブルＴ６を用いて、８バイトの符号データＦ（バイトｆ１〜ｆ８）を８バイトの暗号鍵Ｋに変換する処理を行うことになる。
【０１１８】
もちろん、テーブル指定子ｔによって異なる乱数テーブルを指定すれば、符号変換部１２２Ａによる変換によって得られる暗号鍵Ｋの内容も異なってくる。したがって、メインプログラムＭの作成者は、暗号処理部１２４Ａに意図どおりの暗号鍵Ｋを用いた暗号処理を行わせるために、まず、乱数テーブルＴ０〜Ｔ１５の中から１つの乱数テーブルを選択し、選択した乱数テーブルを用いて、意図どおりの暗号鍵Ｋを符号データＦに変換する作業を行い、得られた符号データＦに、選択した乱数テーブルを指定するためのテーブル指定子ｔを付して暗号処理依頼部１１２Ａに記憶させておくようにすればよい（あるいは、外部のサーバからダウンロードさせてもよい）。
【０１１９】
このように、第２の実施形態では、乱数テーブル格納部１２３Ａ内に複数の乱数テーブルを用意しておき、符号データＦとともに特定の乱数テーブルを指定するテーブル指定子ｔを与えるようにしたため、同じ暗号鍵Ｋに変換可能な複数通りの符号データが存在することになる。このため、クラッカーによる不正な解析を一層困難にすることができ、耐タンパ性を向上させることができる。
【０１２０】
また、この第２の実施形態は、複数の異なるプログラム提供業者に、同一の暗号処理サブルーチンＲを利用させる場合に、業者相互間でのセキュリティ維持にも貢献する。たとえば、プログラム提供業者Ｘ，Ｙ，Ｚの三者が、この情報処理装置１００Ａで利用可能なアプリケーションプログラムとして、それぞれメインプログラムＭｘ，Ｍｙ，Ｍｚを開発した場合を考えてみる。ここで、これらのメインプログラムＭｘ，Ｍｙ，Ｍｚは、いずれも同一の暗号処理サブルーチンＲを利用して暗号処理を行うものとしよう。
【０１２１】
暗号処理部１２４Ａにおいて暗号処理を行う際に、所望の暗号鍵Ｋを用いた処理が行われるようにするためには、予め特定の乱数テーブルを用いて、当該暗号鍵Ｋに対応する符号データＦを作成する必要がある。このため、プログラム提供業者Ｘ，Ｙ，Ｚの三者には、乱数テーブルの内容を開示する必要がある。この第２の実施形態の場合、乱数テーブル格納部１２３Ａ内には、複数通りの乱数テーブルＴ０〜Ｔ１５が用意されているので、個々の業者に特定の乱数テーブルを割り当てるようにすれば、各業者には、割り当てられた特定の乱数テーブルの内容のみを開示すればよい。
【０１２２】
たとえば、乱数テーブルＴ０を業者Ｘに割り当て、乱数テーブルＴ１を業者Ｙに割り当て、乱数テーブルＴ２を業者Ｚに割り当てたとすれば、業者Ｘには乱数テーブルＴ０のみを開示し、業者Ｙには乱数テーブルＴ１のみを開示し、業者Ｚには乱数テーブルＴ２のみを開示すれば足りる。そうすれば、たとえば、業者Ｘには、乱数テーブルＴ１，Ｔ２の内容は開示されないので、業者Ｙ，Ｚが提供するメインプログラムＭｙ，Ｍｚが取り扱う符号データＦの内容が業者Ｘに露呈したとしても、業者Ｘは、これを暗号鍵Ｋに変換することはできない。したがって、同一の暗号処理サブルーチンＲが、三者Ｘ，Ｙ，Ｚによって共用されることになっても、業者相互間でのセキュリティ維持に支障は生じない。
【０１２３】
もちろん、上例の場合、メインプログラムＭｘから暗号処理サブルーチンＲに引き渡される符号データＦについては、乱数テーブルＴ０を指定するテーブル指定子ｔｘが付されることになり、メインプログラムＭｙから暗号処理サブルーチンＲに引き渡される符号データＦについては、乱数テーブルＴ１を指定するテーブル指定子ｔｙが付されることになり、メインプログラムＭｚから暗号処理サブルーチンＲに引き渡される符号データＦについては、乱数テーブルＴ２を指定するテーブル指定子ｔｚが付されることになる。したがって、このような利用形態では、テーブル指定子ｔｘ，ｔｙ，ｔｚは、個々の業者Ｘ，Ｙ，Ｚを示す業者指定子として機能することになる。
【０１２４】
以上、１つの符号データＦを構成する複数のデータ（たとえば、図１１(a) に示す例の場合は、８個のデータｆ１〜ｆ８）について、同一の乱数テーブルを参照して暗号鍵Ｋに変換する例を述べたが、１つの符号データＦを構成する複数のデータについて、それぞれ異なる乱数テーブルを参照して暗号鍵Ｋに変換するようにしてもかまわない。図１１(b) ，(c) は、このような例を示すものである。
【０１２５】
たとえば、図１１(b) に示す例の場合、符号データＦが、８バイトのデータによって構成されている点は、図１１(a) に示す例と同様であるが、符号データＦを構成する個々のバイトｆ１〜ｆ８の直前には、それぞれ別個独立したテーブル指定子ｔ１〜ｔ８が挿入されている。すなわち、第ｉ番目のテーブル指定子ｔｉは、後続する第ｉ番目のデータｆｉ（１バイトのデータ）を、暗号鍵Ｋを構成する１バイトのデータに変換するために参照すべき特定の乱数テーブルを指定する役割を果たしている。たとえば、符号データＦを構成する第１番目のバイトｆ１は、テーブル指定子ｔ１によって指定された特定の乱数テーブルを参照することにより、暗号鍵Ｋを構成する第１番目のバイトに変換されることになる。
【０１２６】
一方、図１１(c) に示す例も、符号データＦが、８バイトのデータによって構成されている点は、図１１(b) に示す例と同様であるが、個々のバイトｆ１〜ｆ８の直前にそれぞれテーブル指定子ｔ１〜ｔ８を挿入する代わりに、参照すべき乱数テーブルを切り替える場合にのみ、テーブル指定子が挿入されている。具体的には、この例の場合、４種類のテーブル指定子ｔ１〜ｔ４が所定箇所に挿入されており、テーブル指定子が挿入されるたびに、参照対象となる乱数テーブルが切り替えられる。
【０１２７】
すなわち、まず、先頭のテーブル指定子ｔ１によって、最初に参照すべき乱数テーブルが指定され、これに後続する３バイトのデータｆ１，ｆ２，ｆ３は、いずれもテーブル指定子ｔ１によって指定された乱数テーブルを用いて変換が行われる。次に、新たなテーブル指定子ｔ２が挿入されているため、これに後続する２バイトのデータｆ４，ｆ５は、いずれもテーブル指定子ｔ２によって指定された乱数テーブルを用いて変換が行われる。更に、新たなテーブル指定子ｔ３が挿入されており、後続するデータｆ６は、テーブル指定子ｔ３によって指定された乱数テーブルを用いて変換が行われ、続く新たなテーブル指定子ｔ４の挿入により、残りの２バイトのデータｆ７，ｆ８は、テーブル指定子ｔ４によって指定された乱数テーブルを用いて変換が行われる。
【０１２８】
要するに、図１１(c) に示す例では、バイト群「ｆ１，ｆ２，ｆ３」についてはテーブル指定子ｔ１による指定が行われ、バイト群「ｆ４，ｆ５」についてはテーブル指定子ｔ２による指定が行われ、バイトｆ６についてはテーブル指定子ｔ３による指定が行われ、バイト群「ｆ７，ｆ８」についてはテーブル指定子ｔ４による指定が行われていることになる。
【０１２９】
このように、第２の実施形態を実施する際には、データ入力部１２１Ａに対して、元データＤと、１バイトのデータをＬ個羅列したＬバイトの符号データＦ（図１１に示す例の場合は、Ｌ＝８）と、このＬバイトの符号データＦを構成する個々のバイトごとに、もしくは、複数バイトからなる個々のバイト群ごとに、それぞれ特定の乱数テーブルを指定する固有のテーブル指定子ｔと、を与えるようにし、符号変換部１２２Ａが、符号データＦの個々のバイトごとに、もしくは、複数バイトからなる個々のバイト群ごとに、それぞれ固有のテーブル指定子ｔで指定された乱数テーブルを参照することにより変換処理を行うようにすればよい。
【０１３０】
＜＜＜  §３．  本発明の第３の実施形態  ＞＞＞
ここでは、本発明の第３の実施形態を説明する。図１２は、この第３の実施形態に係る情報処理装置１００Ｂの構成を示すブロック図である。この第３の実施形態の構成の大部分は、図５を参照しながら§１において述べた第１の実施形態の構成と同じである。そこで、図１２に示す第３の実施形態の各構成要素の符号には、図５に示す第１の実施形態の対応する構成要素の符号の末尾に「Ｂ」を付した符号を用いて示すことにし、ここでは、図５に示す第１の実施形態の対応する構成要素との相違点のみを説明することにする。
【０１３１】
図１２に示す第３の実施形態の特徴は、§２で述べた第２の実施形態の特徴と同様に、暗号処理装置１２０Ｂが複数の乱数テーブルを用いる点にある。図示の乱数テーブル格納部１２３Ｂは、図１０に示す乱数テーブル格納部１２３Ａと全く同じ構成要素であり、複数Ｋ通り（図示の例の場合、Ｋ＝１６）の乱数テーブルＴ０〜Ｔ１５を格納している。ただ、第２の実施形態の場合、これら複数の乱数テーブルの中の特定の乱数テーブルを指定するために、テーブル指定子ｔを用いていたが、この第３の実施形態の場合、テーブル指定子ｔの代わりにパターン選択子ｐが用いられる。
【０１３２】
一方、符号変換部１２２Ｂは、図１０に示す符号変換部１２２Ａと同様に、特定の乱数テーブルを参照して、符号データＦを暗号鍵Ｋに変換する処理を行う機能を有しているが、予め、乱数テーブル格納部１２３Ｂが格納しているＫ通りの乱数テーブルを所定の規則で順次指定するテーブル指定パターンを複数通り記憶している。図１２には、３通りのテーブル指定パターンＰ１〜Ｐ３が格納されている状態が示されている。
【０１３３】
主装置１１０Ｂ内の暗号処理依頼部１１２Ｂは、情報処理部１１１Ｂから与えられた元データＤと、１バイトのデータをＬ個羅列したＬバイトの符号データＦ（予め記憶されていたデータであってもよいし、外部から受け取ったデータであってもよい）と、パターン選択子ｐと、をデータ入力部１２１Ｂに対して与える機能を有している。ここで、パターン選択子ｐは、符号変換部１２２Ｂに記憶されている複数のテーブル指定パターン（図示の例では、３通りのテーブル指定パターンＰ１〜Ｐ３）のいずれを選択するかを示すデータである。
【０１３４】
したがって、データ入力部１２１Ｂは、元データＤと、１バイトのデータをＬ個羅列したＬバイトの符号データＦと、特定のテーブル指定パターンを選択するパターン選択子ｐと、を入力する処理を行うことになる。ここで、元データＤは暗号処理部１２４Ｂに与えられ、符号データＦおよびパターン選択子ｐは符号変換部１２２Ｂに与えられる。
【０１３５】
符号変換部１２２Ｂは、このパターン選択子ｐによって選択されたテーブル指定パターンに基づいて、符号データＦの個々のバイトごとに乱数テーブルを指定し、指定された乱数テーブルを参照することにより変換処理を行い、暗号鍵Ｋを生成することになる。その他の各構成要素の機能は、図５に示す第１の実施形態の対応する構成要素の機能と同様である。
【０１３６】
ここで、テーブル指定パターンＰ１〜Ｐ３は、符号データＦを構成するＬバイトのデータに対して、どのような規則で乱数テーブルを指定するかを定義したものである。図１３は、この３通りのテーブル指定パターンＰ１〜Ｐ３によって定義される指定規則の一例を示す図である。指定規則の欄に記載された各ますは、符号データを構成する個々のバイトに対応するものであり、各ますに記入された符号Ｔ０〜Ｔ１５は、指定対象となる乱数テーブルを示す符号である。図１３は、Ｌ＝８の場合の規則を示しており、符号データＦが８バイトのデータから構成されていることを前提としている。
【０１３７】
たとえば、図１３のテーブル指定パターンＰ１は、「Ｔ０，Ｔ１，Ｔ２，... ，Ｔ７」という順序で乱数テーブルを順次指定する規則を示している。したがって、パターン選択子ｐが、テーブル指定パターンＰ１を選択するものであった場合、符号変換部１２２Ｂは、符号データＦの第１番目のバイトｆ１については乱数テーブルＴ０を参照して変換を行い、符号データＦの第２番目のバイトｆ２については乱数テーブルＴ１を参照して変換を行い、符号データＦの第３番目のバイトｆ３については乱数テーブルＴ２を参照して変換を行い、... 、符号データＦの第８番目のバイトｆ８については乱数テーブルＴ７を参照して変換を行うことになる。図１４(a) は、符号データＦを構成する個々のバイトｆ１〜ｆ８に対して、テーブル指定パターンＰ１に基づいて指定される乱数テーブルを示す図である。
【０１３８】
一方、図１３のテーブル指定パターンＰ２は、「Ｔ１，Ｔ３，Ｔ５，... ，Ｔ１５」という順序で乱数テーブルを順次指定する規則を示している。したがって、パターン選択子ｐが、テーブル指定パターンＰ２を選択するものであった場合、符号変換部１２２Ｂは、符号データＦの第１番目のバイトｆ１については乱数テーブルＴ１を参照して変換を行い、符号データＦの第２番目のバイトｆ２については乱数テーブルＴ３を参照して変換を行い、符号データＦの第３番目のバイトｆ３については乱数テーブルＴ５を参照して変換を行い、... 、符号データＦの第８番目のバイトｆ８については乱数テーブルＴ１５を参照して変換を行うことになる。図１４(b) は、符号データＦを構成する個々のバイトｆ１〜ｆ８に対して、テーブル指定パターンＰ２に基づいて指定される乱数テーブルを示す図である。
【０１３９】
また、図１３のテーブル指定パターンＰ３は、「Ｔ２，Ｔ５，Ｔ８，Ｔ２，Ｔ５，Ｔ８，Ｔ２，Ｔ５」という順序で乱数テーブルを順次指定する規則を示している。したがって、パターン選択子ｐが、テーブル指定パターンＰ３を選択するものであった場合、符号変換部１２２Ｂは、符号データＦの第１番目のバイトｆ１については乱数テーブルＴ２を参照して変換を行い、符号データＦの第２番目のバイトｆ２については乱数テーブルＴ５を参照して変換を行い、符号データＦの第３番目のバイトｆ３については乱数テーブルＴ８を参照して変換を行い、... 、符号データＦの第８番目のバイトｆ８については乱数テーブルＴ５を参照して変換を行うことになる。図１４(c) は、符号データＦを構成する個々のバイトｆ１〜ｆ８に対して、テーブル指定パターンＰ３に基づいて指定される乱数テーブルを示す図である。
【０１４０】
ここでは、３通りのテーブル指定パターンＰ１〜Ｐ３の具体例を示したが、もちろん、テーブル指定パターンとしては、乱数テーブル格納部１２３Ｂ内に格納されている複数通りの乱数テーブルを所定の規則で順次指定するものであれば、どのような規則に基づくパターンを採用してもかまわない。
【０１４１】
このように、第３の実施形態では、乱数テーブル格納部１２３Ｂ内に複数の乱数テーブルを用意しておき、符号変換部１２２Ｂ内に複数のテーブル指定パターンを用意しておき、符号データＦとともに特定のテーブル指定パターンを選択するテーブル選択子ｐを与えるようにしたため、符号データＦと暗号鍵Ｋとの対応関係がより複雑になる。このため、クラッカーによる不正な解析を一層困難にすることができ、耐タンパ性を向上させることができる。
【０１４２】
もちろん、メインプログラムを提供する業者ごとに特定のテーブル指定パターンを割り当てる運用を採ることも可能である。たとえば、業者Ｘにはテーブル指定パターンＰ１を割り当て、業者Ｙにはテーブル指定パターンＰ２を割り当て、業者Ｚにはテーブル指定パターンＰ３を割り当てるようにすればよい。この場合、パターン選択子ｐは、個々の業者Ｘ，Ｙ，Ｚを示す業者指定子として機能することになる。
【０１４３】
＜＜＜  §４．  本発明の第４の実施形態  ＞＞＞
ここでは、本発明の第４の実施形態を説明する。図１５は、この第４の実施形態に係る情報処理装置１００Ｃの構成を示すブロック図である。この第４の実施形態の構成の大部分は、図５を参照しながら§１において述べた第１の実施形態の構成と同じである。そこで、図１５に示す第４の実施形態の各構成要素の符号には、図５に示す第１の実施形態の対応する構成要素の符号の末尾に「Ｃ」を付した符号を用いて示すことにし、ここでは、図５に示す第１の実施形態の対応する構成要素との相違点のみを説明することにする。
【０１４４】
図１０に示す第２の実施形態や、図１２に示す第３の実施形態では、複数の乱数テーブルを用いることにより、耐タンパ性を更に向上させる工夫を施した。図１５に示す第４の実施形態では、乱数テーブル格納部１２３Ｃ内には単一の乱数テーブルＴ（たとえば、図６に示すような乱数テーブル）のみが用意されているが、この乱数テーブルＴの各セルに収容されている数値を所定の規則でシフトさせることにより、擬似的に複数の乱数テーブルを用いたのと同様の効果を奏する工夫が施されている。
【０１４５】
まず、主装置１１０Ｃ内の暗号処理依頼部１１２Ｃは、情報処理部１１１Ｃから与えられた元データＤと、予め記憶されていたもしくは外部から受け取った符号データＦに加えて、更に、乱数テーブルＴの各セル内の数値をシフトさせる規則を示すシフト指示子ｓをデータ入力部１２１Ｃに対して与える機能を有している。このため、データ入力部１２１Ｃは、元データＤおよび符号データＦとともに、シフト指示子ｓを入力する処理を行うことになる。ここで、元データＤは暗号処理部１２４Ｃに与えられ、符号データＦおよびシフト指示子ｓは符号変換部１２２Ｃに与えられる。
【０１４６】
一方、符号変換部１２２Ｃは、乱数テーブル格納部１２３Ｃ内に格納されている乱数テーブルＴ内の各数値を、シフト指示子ｓによって示される規則に基づいてシフトさせ、シフト後の数値を用いて変換を行い、暗号鍵Ｋを生成する変換処理を行う。その他の各構成要素の機能は、図５に示す第１の実施形態の対応する構成要素の機能と同様である。
【０１４７】
図１６は、図１５に示す第４の実施形態で利用されるシフト指示子ｓの具体例を示す図である。この例では、シフト指示子ｓは、正もしくは負のいずれかのシフト方向とシフト量ｄとを示すデータによって構成されている。たとえば、「＋５」なるシフト指示子ｓは、正方向にシフト量５だけシフトすることを示し、「−３」なるシフト指示子ｓは、負方向にシフト量３だけシフトすることを示している。
【０１４８】
符号変換部１２２Ｃは、与えられたシフト指示子ｓによって示されるシフト方向が正の場合には、乱数テーブルＴの第ｉ番目のセル番号をもつセル内の数値を第（ｉ＋ｄ）番目のセル番号をもつセルにシフトさせ、シフト方向が負の場合には、乱数テーブルＴの第ｉ番目のセル番号をもつセル内の数値を第（ｉ−ｄ）番目のセル番号をもつセルにシフトさせるシフト処理を行う機能を有しており、シフト後の数値を用いて変換を行い、暗号鍵Ｋを生成する。但し、シフト後のセルが、セル番号の範囲から外れる場合には、シフト後のセル番号にセルの総数Ｍを加算もしくは減算してセル番号の範囲内となるようにする修正処理を行う。
【０１４９】
上記シフト処理は、いわゆるローテーションシフトと呼ばれているシフト方法である。図１７は、８行８列に並べられた合計６４個のセル（ここでは、セル番号を１〜６４とする）からなる乱数テーブルに対して、このようなローテーションシフトを行った例を示す図である。図１７(a) および図１７(b) の左側に示す乱数テーブルは、乱数テーブル格納部１２３Ｃに格納されている元の乱数テーブルを示している。なお、ここでは、説明の便宜上、各セル内に１〜６４の数字を順番に収容した例を示してあるが、実際には、各セルにはランダムに数値が収容されている。
【０１５０】
図１７(a) の右側に示すテーブルは、元の乱数テーブルに対して、「＋５」なるシフト指示子ｓに基づくシフト処理を行うことにより得られるテーブルである。個々のセル内の数値は、正方向に５セル分だけシフトされており、第ｉ番目のセル番号をもつセル内の数値は第（ｉ＋５）番目のセル番号をもつセルに移動されている。但し、第６５〜６９番目のセルにシフトされるべき数値「６０」〜「６４」については、セル番号の範囲（１〜６４）から外れるため、セルの総数６４を減算して、第１〜５番目のセルに移動させている。
【０１５１】
一方、図１７(b) の右側に示すテーブルは、元の乱数テーブルに対して、「−３」なるシフト指示子ｓに基づくシフト処理を行うことにより得られるテーブルである。個々のセル内の数値は、負方向に３セル分だけシフトされており、第ｉ番目のセル番号をもつセル内の数値は第（ｉ−３）番目のセル番号をもつセルに移動されている。但し、第−２〜０番目のセルにシフトされるべき数値「１」〜「３」については、セル番号の範囲（１〜６４）から外れるため、セルの総数６４を加算して、第６２〜６４番目のセルに移動させている。
【０１５２】
もちろん、図１７に示すシフト方法は、一例として示したものであり、シフト指示子ｓによって示されるシフト方法としては、任意の規則を採用することができる。なお、実用上は、乱数テーブル格納部１２３Ｃに格納されている乱数テーブルＴに対して、実際に数値をシフトした新たなテーブルを作成する必要はなく、符号変換部１２２Ｃが、乱数テーブルＴ内の特定のセルを参照する際に、参照対象となるセルの位置をシフトさせれば十分である。たとえば、「＋５」なるシフト指示子ｓが与えられた場合、符号変換部１２２Ｃは、第ｉ番目のセル内の数値を参照する代わりに、第（ｉ＋５）番目のセル内の数値を参照すればよい。
【０１５３】
このように、シフト指示子ｓによって示される所定のシフト方法により、乱数テーブル格納部１２３Ｃ内に格納されている乱数テーブル内の各数値をシフトさせ、シフト後の数値を用いて変換を行い、暗号鍵Ｋを生成するようにすれば、符号データＦと暗号鍵Ｋとの対応関係がより複雑になる。このため、クラッカーによる不正な解析を一層困難にすることができ、耐タンパ性を向上させることができる。
【０１５４】
＜＜＜  §５．  本発明の第５の実施形態  ＞＞＞
次に、本発明の第５の実施形態を説明する。図１８は、この第５の実施形態に係る情報処理装置１００Ｄの構成を示すブロック図である。この第５の実施形態の構成の大部分は、図５を参照しながら§１において述べた第１の実施形態の構成と同じである。そこで、図１８に示す第５の実施形態の各構成要素の符号には、図５に示す第１の実施形態の対応する構成要素の符号の末尾に「Ｄ」を付した符号を用いて示すことにし、ここでは、図５に示す第１の実施形態の対応する構成要素との相違点のみを説明することにする。
【０１５５】
図１８に示す第５の実施形態の特徴は、暗号処理部１２４Ｄが複数通りの暗号アルゴリズムの中の任意の暗号アルゴリズムを用いて暗号処理を実施する機能を有している点である。図には、暗号処理部１２４Ｄ内に４通りの暗号アルゴリズムＡ１〜Ａ４が組み込まれている例が示されており、暗号処理部１２４Ｄは、これら４通りの暗号アルゴリズムＡ１〜Ａ４の中から、アルゴリズム指定子ａで指定された特定の暗号アルゴリズムを用いて暗号処理を行うことができる。
【０１５６】
一方、主装置１１０Ｄ内の暗号処理依頼部１１２Ｄは、情報処理部１１１Ｄから与えられた元データＤと、予め記憶されていたもしくは外部から受け取った符号データＦに加えて、更に、複数通りの暗号アルゴリズム（図示の例の場合は、４通りの暗号アルゴリズムＡ１〜Ａ４）の中の１つを指定するアルゴリズム指定子ａをデータ入力部１２１Ｄに対して与える機能を有している。このため、データ入力部１２１Ｄは、元データＤおよび符号データＦとともに、特定の暗号アルゴリズムを指定するアルゴリズム指定子ａを入力する処理を行うことになる。ここで、元データＤおよびアルゴリズム指定子ａは暗号処理部１２４Ｄに与えられ、符号データＦは符号変換部１２２Ｄに与えられる。
【０１５７】
そして、暗号処理部１２４Ｄは、与えられたアルゴリズム指定子ａによって指定された暗号アルゴリズムを用いて、与えられた元データＤに対して、与えられた暗号鍵Ｋを利用した暗号処理を実施し、処理済データＥを生成することになる。その他の各構成要素の機能は、図５に示す第１の実施形態の対応する構成要素の機能と同様である。
【０１５８】
このように、第５の実施形態では、暗号処理部１２４Ｄ内に複数通りの暗号アルゴリズムを用意するようにしたため、同じ暗号鍵Ｋを用いたとしても、得られる処理済データＥは、用いられた暗号アルゴリズムによって異なることになる。このため、クラッカーによる不正な解析を一層困難にすることができ、耐タンパ性を向上させることができる。
【０１５９】
なお、耐タンパ性を更に向上させるために、アルゴリズム指定子ａについても符号化した形で暗号処理装置１２０Ｄに引き渡すようにすることも可能である。上例の場合、アルゴリズム指定子ａは、４通りの暗号アルゴリズムＡ１〜Ａ４の中の１つを指定する情報になるので、たとえば、これら４通りの暗号アルゴリズムにそれぞれ「０１」，「０２」，「０３」，「０４」なるアルゴリズム指定子ａを対応づけておけば、アルゴリズム指定子ａ＝「０２」により、暗号アルゴリズムＡ２を指定することができる。しかしながら、アルゴリズム指定子ａはメインプログラムＭを解析することにより盗み取ることが可能であるので、クラッカーが不正な手段で解析を行うと、指定された暗号アルゴリズムがどれであるかを認識できる可能性がある。
【０１６０】
そこで、より耐タンパ性を高めるために、主装置１１０Ｄから暗号処理装置１２０Ｄに対して、アルゴリズム指定子ａを直接引き渡す代わりに、符号化されたアルゴリズム指定子を引き渡すようにすることも可能である。たとえば、上述したように、「０１」，「０２」，「０３」，「０４」の４通りの数値のいずれかを示すアルゴリズム指定子ａを用いて、４通りの暗号アルゴリズムＡ１〜Ａ４の中の１つを指定する場合、これら４通りの数値「０１」，「０２」，「０３」，「０４」を図６に示す乱数テーブルＴを用いて符号化し、「６８」，「６７」，「ＡＢ」，「９６」なる数値を、符号化されたアルゴリズム指定子として用いるようにすればよい。ここで、「６８」は、図６に示す乱数テーブルＴにおいて、数値「０１」が収容されているセルのセル番号であり、「６７」は、数値「０２」が収容されているセルのセル番号であり、「ＡＢ」は、数値「０３」が収容されているセルのセル番号であり、「９６」は、数値「０４」が収容されているセルのセル番号である。
【０１６１】
そこで、たとえば、暗号アルゴリズムＡ２を指定する際には、「０２」なるアルゴリズム指定子ａを用いる代わりに、これを符号化した「６７」なるデータを符号化されたアルゴリズム指定子として用いるようにする。主装置１１０Ｄは、「６７」なる情報をアルゴリズム指定子ａに代用することになるが、当該「６７」なるデータが漏洩したとしても、乱数テーブルＴがない限り、暗号アルゴリズムＡ２を指定する情報であることを認識することはできない。
【０１６２】
一方、暗号処理装置１２０Ｄ内では、データ入力部１２１Ｄが、アルゴリズム指定子ａの代わりに、この符号化されたアルゴリズム指定子を入力することになるので、これを符号変換部１２２Ｄに与えて、元のアルゴリズム指定子ａに変換する作業を行わせる。具体的には、符号変換部１２２Ｄは、乱数テーブルＴを参照して、符号化されたアルゴリズム指定子として与えられたデータ「６７」で示されるセル番号をもつセルを特定し、当該セル内に収容されている数値「０２」を、アルゴリズム指定子ａとして暗号処理部１２４Ｄに伝える処理をする。
【０１６３】
このように、符号変換部１２２Ｄを介して、符号化されたアルゴリズム指定子を元のアルゴリズム指定子ａに変換する処理が加わることになるが、主装置１１０Ｄは、アルゴリズム指定子ａを記憶しておいたり、外部からアルゴリズム指定子ａを受け取ったりする必要はないので、メインプログラムＭがクラッカーにより解析されたとしても、アルゴリズム指定子ａ自身が盗まれることはない。
【０１６４】
＜＜＜  §６．  本発明の第６の実施形態  ＞＞＞
続いて、本発明の第６の実施形態を説明する。図１９は、この第６の実施形態に係る情報処理装置１００Ｅの構成を示すブロック図である。この第６の実施形態の構成の大部分は、図５を参照しながら§１において述べた第１の実施形態の構成と同じである。そこで、図１９に示す第６の実施形態の各構成要素の符号には、図５に示す第１の実施形態の対応する構成要素の符号の末尾に「Ｅ」を付した符号を用いて示すことにし、ここでは、図５に示す第１の実施形態の対応する構成要素との相違点のみを説明することにする。
【０１６５】
図１９に示す第６の実施形態の特徴は、主装置１１０Ｅから暗号処理装置１２０Ｅに対して引き渡す符号データＦを、所定の方法で暗号化する点にある。別言すれば、第１の実施形態で引き渡していた符号データＦの代わりに、これを所定の方法で暗号化した暗号化符号データＧを用意しておき、主装置１１０Ｅから暗号処理装置１２０Ｅに対して、元データＤとともに、この暗号化符号データＧを引き渡すようにする（図示されている復号鍵指定子ｗについては後述する）。そのため、主装置１１０Ｅ内の暗号処理依頼部１１２Ｅには、符号データＦの代わりに、暗号化符号データＧを記憶させておくようにする。もちろん、暗号化符号データＧを外部のサーバなどに用意しておき、暗号処理依頼部１１２Ｅが、外部から暗号化符号データＧを受け取るようにしてもよい。
【０１６６】
一方、暗号処理装置１２０Ｅ内には、新たな構成要素として、与えられた暗号化符号データＧを復号して、元の符号データＦを得る処理を行う符号データ復号部１２６Ｅを設けておくようにする。データ入力部１２１Ｅは、元データＤおよび暗号化符号データＧを入力する処理を行うことになる。ここで、元データＤは暗号処理部１２４Ｅに与えられ、暗号化符号データＧは符号データ復号部１２６Ｅに与えられる。符号データ復号部１２６Ｅは、与えられた暗号化符号データＧを復号し、復号された符号データＦを符号変換部１２２Ｅに与える。符号変換部１２２Ｅが、乱数テーブル格納部１２３Ｅに格納されている乱数テーブルＴを用いて、復号された符号データＦを暗号鍵Ｋに変換し、これを暗号処理部１２４Ｅに与える点は、第１の実施形態と同様である。その他の各構成要素の機能は、図５に示す第１の実施形態の対応する構成要素の機能と同様である。
【０１６７】
このように、第６の実施形態では、符号データＦを暗号化し、暗号化符号データＧとして取り扱うようにしたため、主装置１１０Ｅ内には、符号データＦさえ存在しない状態が実現できる。このため、クラッカーによる不正な解析により暗号鍵Ｋが盗まれる可能性を更に低減することができ、耐タンパ性を向上させることができる。
【０１６８】
なお、図１９に示す実施例では、符号データ復号部１２６Ｅ内に複数Ｈ通りの復号鍵（図示の例では、４通りの公開鍵Ｗ１〜Ｗ４）を記憶させておき、暗号処理依頼部１１２Ｅが、元データＤとともに、この複数Ｈ通りの復号鍵のうちの第ｉ番目の復号鍵を用いて復号が可能な状態で暗号化された暗号化符号データＧと、この第ｉ番目の復号鍵を指定する復号鍵指定子ｗと、をデータ入力部１２１Ｅに与えるようにしている。
【０１６９】
したがって、データ入力部１２１Ｅは、元データＤと、第ｉ番目の復号鍵を用いて復号が可能な状態で暗号化された暗号化符号データＧと、この第ｉ番目の復号鍵を指定する復号鍵指定子ｗと、を入力する処理を行うことになる。ここで、元データＤは暗号処理部１２４Ｅに与えられ、暗号化符号データＧおよび復号鍵指定子ｗは符号データ復号部１２６Ｅに与えられる。符号データ復号部１２６Ｅは、この復号鍵指定子ｗで指定された復号鍵を用いて、暗号化符号データＧに対する復号処理を行い、符号データＦを得ることになる。
【０１７０】
ここでは、より具体的に、公開鍵暗号方式に利用可能な公開鍵および秘密鍵を用いた例を説明する。図２０は、一般的な公開鍵暗号方式に利用可能な鍵ペアーを示す表である。公開鍵暗号方式では、公開鍵と秘密鍵との鍵ペアーが利用される。ここで、一対の鍵ペアーを構成する公開鍵と秘密鍵は、一方の鍵を暗号化用の鍵として用いて所定のデータに対して暗号化処理を行って暗号データを生成させると、他方の鍵を復号鍵として用いて当該暗号データに対して復号処理を行うことができる、という特殊な関係を有している。
【０１７１】
図２０に示す例では、このような関係をもった鍵ペアーが合計Ｈ組用意されており、たとえば、第ｉ番目の秘密鍵Ｖｉを用いて暗号化処理を行った場合、対応する第ｉ番目の公開鍵Ｗｉを復号鍵として用いて復号処理を行うことができる。そこで、符号データ復号部１２６Ｅには、このような公開鍵暗号方式に利用可能な公開鍵および秘密鍵を構成する複数Ｈ組の鍵ペアーのそれぞれについて、公開鍵および秘密鍵のうちの一方の鍵を復号鍵として記憶させておく。図１９に示す例の場合、符号データ復号部１２６Ｅに、４組の公開鍵Ｗ１〜Ｗ４を復号鍵として記憶させておく例が示されている。
【０１７２】
一方、暗号処理依頼部１１２Ｅに予め記憶されている（もしくは、外部から受け取る）暗号化符号データＧは、元になる符号データＦに対して、Ｈ組の鍵ペアーのうちの第ｉ番目の一方の鍵（符号データ復号部１２６Ｅに記憶されている鍵）に対応する他方の鍵を用いて暗号化を行って得られるデータであるようにしておく。暗号処理依頼部１１２Ｅは、当該暗号化符号データＧとともに、その復号処理に用いることができる復号鍵を指定する復号鍵指定子ｗをデータ入力部１２１Ｅに与えるようにする。すなわち、この復号鍵指定子ｗは、暗号処理装置１２０Ｅの符号データ復号部１２６Ｅに記憶されている「Ｈ組の鍵ペアーについての復号鍵として用いる一方の鍵」の第ｉ番目を指定する情報ということになる。
【０１７３】
結局、データ入力部１２１Ｅは、Ｈ組の鍵ペアーのうちの第ｉ番目の鍵ペアーについての他方の鍵を用いて暗号化された暗号化符号データＧと、第ｉ番目の鍵ペアーを指定する復号鍵指定子ｗと、を入力することになるので、符号データ復号部１２６Ｅは、この復号鍵指定子ｗで指定された第ｉ番目の鍵ペアーについての一方の鍵を復号鍵として用いた復号を行うことができる。
【０１７４】
図１９に示すように、公開鍵Ｗ１〜Ｗ４を４組の復号鍵として符号データ復号部１２６Ｅに格納しておいた場合、符号データＦの暗号化には、これら公開鍵Ｗ１〜Ｗ４に対応する秘密鍵Ｖ１〜Ｖ４のいずれかを用いればよい。たとえば、秘密鍵Ｖ３を用いて符号データＦを暗号化して暗号化符号データＧを用意した場合は、暗号処理依頼部１１２Ｅは、この暗号化符号データＧとともに、復号鍵となる公開鍵Ｗ３を指定する復号鍵指定子ｗを、データ入力部１２１Ｅに与える処理を行うことになる。その結果、符号データ復号部１２６Ｅは、復号鍵指定子ｗによって指定された公開鍵Ｗ３を用いて、暗号化符号データＧを復号し、元の符号データＦを得る処理を行うことになる。
【０１７５】
このように、公開鍵暗号方式に利用可能な公開鍵および秘密鍵を複数Ｈ組利用する実施例は、複数の異なるプログラム提供業者に、同一の暗号処理サブルーチンＲを利用させる場合に、業者相互間でのセキュリティを維持するために有効である。たとえば、前述したように、プログラム提供業者Ｘ，Ｙ，Ｚの三者が、この情報処理装置１００Ｅで利用可能なアプリケーションプログラムとして、それぞれメインプログラムＭｘ，Ｍｙ，Ｍｚを開発した場合に、この第６の実施形態を適用させる場合を考えてみる。これらのメインプログラムＭｘ，Ｍｙ，Ｍｚは、いずれも同一の暗号処理サブルーチンＲを利用して暗号処理を行うアプリケーションプログラムであり、それぞれ暗号化符号データＧｘ，Ｇｙ，Ｇｚを暗号処理サブルーチンＲに引き渡すことにより、それぞれ所望の暗号鍵Ｋｘ，Ｋｙ，Ｋｚを用いた暗号処理が実施されるようにする機能を有しているものとしよう。
【０１７６】
この場合、業者Ｘ，Ｙ，Ｚには、それぞれ秘密鍵Ｖ１，Ｖ２，Ｖ３を渡しておき、これら秘密鍵Ｖ１，Ｖ２，Ｖ３をそれぞれ用いて、符号データＦｘ，Ｆｙ，Ｆｚを暗号化し、暗号化符号データＧｘ，Ｇｙ，Ｇｚを用意してもらうようにする。そして、メインプログラムＭｘから暗号処理サブルーチンＲに暗号処理依頼を行う際には、暗号化符号データＧｘとともに公開鍵Ｗ１を指定する復号鍵指定子ｗｘを引き渡すようにする。そうすれば、符号データ復号部１２６Ｅは、公開鍵Ｗ１を用いて、暗号化符号データＧｘを復号し、元の符号データＦｘに戻す処理を行うことができる。メインプログラムＭｙ，Ｍｚから暗号処理依頼を行う場合も同様である。
【０１７７】
このような実施形態を採れば、全く同一の暗号処理サブルーチンが業者Ｘ，Ｙ，Ｚによって共用されることになるが、業者Ｘ，Ｙ，Ｚに渡す秘密鍵Ｖ１，Ｖ２，Ｖ３はそれぞれ異なるため、業者相互間でのセキュリティは十分に維持されることになる。もちろん、公開鍵と秘密鍵の役割を逆にし、符号データ復号部１２６Ｅ内に秘密鍵Ｖ１，Ｖ２，Ｖ３を格納しておき、業者Ｘ，Ｙ，Ｚに公開鍵Ｗ１，Ｗ２，Ｗ３を渡して暗号化を行うようにしてもかまわない。
【０１７８】
＜＜＜  §７．  本発明に用いる符号データ生成装置  ＞＞＞
本発明を実施する上では、予め所定の乱数テーブルを利用して、所望の暗号鍵Ｋ（暗号処理で実際に利用すべき暗号鍵）に対応する符号データＦを作成しておく必要がある。たとえば、図５に示す第１の実施形態の場合、暗号処理部１２４において、図７上段に示すような所望の暗号鍵Ｋ「２６，５Ｃ，０８，３Ａ，Ｄ８，５５，２Ｂ，１０」を用いた暗号処理が行われるようにするには、予め、図６に示すような乱数テーブルＴを用いて、暗号鍵Ｋ「２６，５Ｃ，０８，３Ａ，Ｄ８，５５，２Ｂ，１０」に対応する符号データ、すなわち、図７下段に示すような符号データＦ「ＡＤ，３１，６３，１Ｄ，１２，６０，ＥＥ，１Ｂ」を作成しておく必要がある。
【０１７９】
所望の暗号鍵Ｋに基づいて、これに対応する符号データＦを作成する作業は、乱数テーブルＴがあれば手作業で行うことも可能である。したがって、メインプログラムＭの作成者に、暗号処理サブルーチンＲ内に組み込まれている乱数テーブルＴと同一の乱数テーブルを渡しておけば、当該作成者は、所望の暗号鍵Ｋに対応する符号データＦを予め用意し、これを暗号処理依頼部１１２内に記憶させたり（実際には、メインプログラムＭ内に符号データＦを書き込んでおくことになる）、あるいは、外部の装置やサーバに当該符号データＦを格納しておき、必要に応じて、暗号処理依頼部１１２がこれを調達できるようにしたりすることができる（実際には、メインプログラムＭ内に、符号データＦを外部から読み込む処理プログラムを用意しておくことになる）。
【０１８０】
ただ、実用上は、メインプログラムＭの作成者に、手作業で符号データＦを作成してもらう代わりに、符号データＦを自動的に生成する機能をもった符号データ生成装置を利用してもらい、この符号データ生成装置により符号データＦの生成を行うようにするのが暗号鍵Ｋの秘密保持の観点からも好ましい。そこで、ここでは、このような符号データ生成装置の構成例を説明する。
【０１８１】
図２１は、このような暗号処理用の符号データ生成装置３００の基本構成を示すブロック図である。この装置は、§１で述べた第１の実施形態に係る暗号処理装置１２０に与える符号データＦを生成するのに適した符号データ生成装置であり、図示のとおり、暗号鍵入力部３１０と、符号データ生成部３２０と、乱数テーブル記憶部３３０と、を有している。実際には、この符号データ生成装置３００は、たとえば、汎用のパソコンにアプリケーションプログラムを組み込むことにより構成することができる。あるいは、この符号データ生成装置３００を、ネットワークに接続されたサーバ装置によって構成し、ネットワーク経由で利用できるようにしてもよい。
【０１８２】
ここで、暗号鍵入力部３１０は、暗号処理装置１２０内の暗号処理部１２４による暗号処理に利用させるべき暗号鍵Ｋを入力する構成要素である。パソコンによって符号データ生成装置３００を構成した場合、暗号鍵入力部３１０は、このパソコンに備わっているキーボードによって構成することができる。
【０１８３】
一方、乱数テーブル記憶部３３０は、暗号処理装置１２０内の乱数テーブル格納部１２３に格納されている乱数テーブルＴと同一の乱数テーブルＴを記憶するための構成要素であり、パソコンによって符号データ生成装置３００を構成した場合、乱数テーブル記憶部３３０は、このパソコンに備わっているメモリや、このパソコンに接続された種々の記憶装置によって構成することができる。
【０１８４】
そして、符号データ生成部３２０は、この乱数テーブル記憶部３３０に記憶されている乱数テーブルＴを用いて、暗号処理装置１２０内の符号変換部１２２によって行われる変換処理とは逆の変換処理を行い、暗号鍵入力部３１０が入力した暗号鍵Ｋに対応する符号データＦを生成する処理を行う。パソコンによって符号データ生成装置３００を構成した場合、符号データ生成部３２０は、このパソコンに備わっているＣＰＵと変換処理プログラムとによって構成することができる。
【０１８５】
結局、この暗号処理用符号データ生成装置３００は、与えられた任意の暗号鍵Ｋについて、乱数テーブルＴを利用して、対応する符号データＦを生成し、これを出力する機能を果たすことになる。たとえば、図７上段に示すような暗号鍵Ｋ「２６，５Ｃ，０８，３Ａ，Ｄ８，５５，２Ｂ，１０」に対して、図６に例示する乱数テーブルＴを用いた変換を行う場合は、まず、１バイト目の「２６」なる数値が収容されたセルを乱数テーブルＴから見つけ出し、当該セルのセル番号「ＡＤ」によって、元の数値「２６」を置き換える処理が行われる。同様の処理を２〜８バイト目についても行えば、図７下段に示すような符号データＦ「ＡＤ，３１，６３，１Ｄ，１２，６０，ＥＥ，１Ｂ」が得られる。
【０１８６】
メインプログラムＭの作成者は、メインプログラムＭを作成する作業を行う際に、この符号データ生成装置３００を利用すれば、所望の暗号鍵Ｋに対応する符号データＦを自動的に得ることができ、得られた符号データＦをメインプログラムＭに組み込んだり、外部の装置やサーバなどに格納して提供したりすることができる。メインプログラムＭの作成者は、手作業で符号データＦを作成する必要はないので、当該作成者に対して、乱数テーブルＴの内容を開示する必要はなくなる。
【０１８７】
なお、乱数テーブルＴを記憶した乱数テーブル記憶部３３０は、ＩＣカードやＵＳＢメモリなど、パソコンに接続される外部記憶装置によって構成することもできる。特に、ＩＣカードによって乱数テーブル記憶部３３０を構成しておけば、内部に記憶されている乱数テーブルＴの秘匿性を確保することができる。もちろん、符号データ生成装置３００全体を、ＩＣカードによって構成してもかまわない。
【０１８８】
また、乱数テーブル記憶部３３０の部分を、外部のサーバによって構成することも可能である。この場合、符号データ生成部３２０は、ネットワークを介して、当該サーバをアクセスして、乱数テーブルＴを参照することになる。もちろん、符号データ生成装置３００全体を外部のサーバによって構成してもよい。この場合、メインプログラムＭの作成者は、ネットワークを介して暗号鍵Ｋを符号データ生成装置３００に送信し、ネットワークを介して符号データＦを受信することになる。
【０１８９】
以上、図２１を参照しながら、§１で述べた第１の実施形態に係る暗号処理装置１２０に与える符号データＦを生成するのに適した符号データ生成装置３００の構成を述べたが、§２〜§５で述べた第２〜第５の実施形態に係る暗号処理装置１２０Ａ〜１２０Ｄに与える符号データＦを生成するのに適した符号データ生成装置３００Ａ〜３００Ｄも、ほぼ同様の構成で実現できる。
【０１９０】
たとえば、第２の実施形態に係る暗号処理装置１２０Ａでは、複数の乱数テーブルＴ０〜Ｔ１５が利用されるので、符号データ生成装置３００Ａ内の乱数テーブル記憶部３３０Ａにも複数の乱数テーブルＴ０〜Ｔ１５を記憶させておき、任意の乱数テーブルを選択して符号データＦを生成するようにすればよい。もっとも、複数の異なるプログラム提供業者に、同一の暗号処理サブルーチンＲを利用させ、業者相互間でのセキュリティの維持を図る場合は、§２で述べたとおり、個々の業者にそれぞれ特定の乱数テーブルを割り当てる運用が採られるので、個々の業者に提供する符号データ生成装置３００Ａには、当該業者に割り当てられた乱数テーブルのみを記憶させておけば足りる。
【０１９１】
たとえば、プログラム提供業者Ｘ，Ｙ，Ｚの三者に、それぞれ乱数テーブルＴ０，Ｔ１，Ｔ２を割り当てる運用を採る場合、業者Ｘに提供する符号データ生成装置には乱数テーブルＴ０のみを記憶させておき、業者Ｙに提供する符号データ生成装置には乱数テーブルＴ１のみを記憶させておき、業者Ｚに提供する符号データ生成装置には乱数テーブルＴ２のみを記憶させておけば足りる。また、乱数テーブル記憶部３３０をサーバ上に設ける場合は、業者Ｘには乱数テーブルＴ０に対するアクセス権を与え、業者Ｙには乱数テーブルＴ１に対するアクセス権を与え、業者Ｚには乱数テーブルＴ２に対するアクセス権を与える運用を採ればよい。
【０１９２】
一方、第３の実施形態に係る暗号処理装置１２０Ｂでは、符号変換部１２２Ｂがテーブル指定パターンＰ１〜Ｐ３に基づいて複数の乱数テーブルを指定する処理を行うことになるので、符号データ生成装置３００Ｂ内の乱数テーブル記憶部３３０Ｂ内に複数の乱数テーブルＴ０〜Ｔ１５を記憶させておくとともに、符号データ生成部３２０Ｂにも、同一のテーブル指定パターンＰ１〜Ｐ３を格納しておくようにし、選択した特定のテーブル指定パターンに基づいて、暗号鍵Ｋを構成するバイトごとに、所定の乱数テーブルが指定されるようにすればよい。
【０１９３】
もちろん、業者ごとに特定のテーブル指定パターンを割り当てる運用を採る場合は、個々の業者に提供する符号データ生成装置３００Ｂには、当該業者に割り当てられたテーブル指定パターンのみを格納しておけば足りる。
【０１９４】
また、第４の実施形態に係る暗号処理装置１２０Ｃでは、符号変換部１２２Ｃがシフト指示子ｓに基づいてシフト処理を行うことになるので、符号データ生成装置３００Ｃ内の符号データ生成部３２０Ｃにも、所望のシフト指示子ｓに基づいてシフト処理を行う機能を設けておくようにすればよい。
【０１９５】
第５の実施形態に係る暗号処理装置１２０Ｄにおける符号変換部１２２Ｄの機能は、第１の実施形態に係る暗号処理装置１２０における符号変換部１２２の機能と同じであるため、第５の実施形態に係る暗号処理装置１２０Ｄに与える符号データＦを生成するには、図２１に示す符号データ生成装置３００をそのまま利用すればよい。
【０１９６】
一方、第６の実施形態に係る暗号処理装置１２０Ｅについては、符号データＦの代わりに暗号化符号データＧを引き渡す必要があるので、符号データ生成装置には、符号データＦに対する暗号化機能を付加しておき、暗号化符号データＧを生成できるようにしておくのが好ましい。
【０１９７】
図２２に示す符号データ生成装置３００Ｅは、この第６の実施形態に係る暗号処理装置１２０Ｅに与える暗号化符号データＧを生成するのに適した符号データ生成装置であり、図示のとおり、暗号鍵入力部３１０Ｅと、符号データ生成部３２０Ｅと、乱数テーブル記憶部３３０Ｅと、暗号化符号データ生成部３４０Ｅと、を有している。実際には、この符号データ生成装置３００Ｅも、たとえば、汎用のパソコンにアプリケーションプログラムを組み込むことにより構成することができる。
【０１９８】
ここで、暗号鍵入力部３１０Ｅ、符号データ生成部３２０Ｅ、乱数テーブル記憶部３３０Ｅの機能は、図２１に示す符号データ生成装置３００の構成要素である暗号鍵入力部３１０、符号データ生成部３２０、乱数テーブル記憶部３３０の機能と全く同じである。別言すれば、図２２に示す符号データ生成装置３００Ｅは、図２１に示す符号データ生成装置３００に、更に、暗号化符号データ生成部３４０Ｅを追加することにより構成されている。ここで、暗号化符号データ生成部３４０Ｅは、符号データ生成部３２０Ｅによって生成された符号データＦに対して、図１９に示す暗号処理装置１２０Ｅ内の符号データ復号部１２６Ｅによって復号可能な方法で暗号化を行って暗号化符号データＧを生成し、これを出力する機能を有する。したがって、この符号データ生成装置３００Ｅに対して、所望の暗号鍵Ｋを与えれば、暗号化符号データＧが出力されることになる。
【０１９９】
より具体的に説明すれば、暗号化符号データ生成部３４０Ｅは、図１９に示す暗号処理装置１２０Ｅ内の符号データ復号部１２６Ｅに記憶されている「Ｈ組の鍵ペアーのうち一方の鍵（図示の例では公開鍵Ｗ１〜Ｗ４）」にそれぞれ対応する「Ｈ組の鍵ペアーのうちの他方の鍵（図示の例では秘密鍵Ｖ１〜Ｖ４）」を記憶しており、符号データ生成部３２０Ｅによって生成された符号データＦに対して、この「Ｈ組の鍵ペアーのうちの他方の鍵（図示の例では秘密鍵Ｖ１〜Ｖ４）」の中の任意の第ｉ番目の鍵を用いて暗号化を行って暗号化符号データＧを生成する処理を行う。ここで、暗号化に用いる第ｉ番目の鍵は復号鍵となり、復号鍵指定子ｗによって指定されることになる。
【０２００】
もちろん、暗号化符号データ生成部３４０Ｅは、ＩＣカードやＵＳＢメモリなど、パソコンに接続される外部記憶装置によって構成してもよいし、暗号化符号データ生成部３４０Ｅの部分を、外部のサーバによって構成してもよい。あるいは、符号データ生成装置３００Ｅ全体を外部のサーバによって構成してもよい。
【０２０１】
なお、複数の異なるプログラム提供業者に、同一の暗号処理サブルーチンＲを利用させ、業者相互間でのセキュリティの維持を図る場合は、個々の業者にそれぞれ特定の鍵ペアーを割り当てる運用が採られるので、個々の業者に提供する符号データ生成装置３００Ｅの暗号化符号データ生成部３４０Ｅには、当該業者に割り当てられた鍵のみを格納しておけば足りる。
【０２０２】
たとえば、§６で述べたように、業者Ｘ，Ｙ，Ｚには、それぞれ秘密鍵Ｖ１，Ｖ２，Ｖ３を用いて符号データＦに対する暗号化を行わせる運用を採る場合は、業者Ｘが利用する符号データ生成装置３００Ｅ内の暗号化符号データ生成部３４０Ｅには秘密鍵Ｖ１のみを格納し、業者Ｙが利用する符号データ生成装置３００Ｅ内の暗号化符号データ生成部３４０Ｅには秘密鍵Ｖ２のみを格納し、業者Ｚが利用する符号データ生成装置３００Ｅ内の暗号化符号データ生成部３４０Ｅには秘密鍵Ｖ３のみを格納しておけばよい。
【０２０３】
もっとも、符号データ生成装置３００Ｅを、パソコンではなくＩＣカードによって構成すれば、暗号化符号データ生成部３４０Ｅが利用する秘密鍵もＩＣカード内に記録されることになるため、これを不正な方法で外部に読み出すことは極めて困難である。したがって、符号データ生成装置３００ＥをＩＣカードで構成する場合は、業者ごとに異なる鍵ペアーを用いる必要はなく、共通の単一鍵ペアーを用いるようにしても、実用上、業者相互間でのセキュリティの問題は生じない。具体的には、この場合、図２２に示す暗号化符号データ生成部３４０Ｅ内には、共通の鍵ペアーの秘密鍵を格納しておき、図１９に示す符号データ復号部１２６Ｅ内には、当該共通の鍵ペアーの公開鍵を格納しておけば足りる。
【０２０４】
なお、ここで説明した符号データ生成装置は、§５で述べたように、「アルゴリズム指定子ａ」を符号化して「符号化されたアルゴリズム指定子」を生成する処理を実行する場合にも利用可能である。この場合、「アルゴリズム指定子ａ」を入力すると、「符号化されたアルゴリズム指定子」が自動的に出力されることになる。このように、符号データ生成装置を用いて「符号化されたアルゴリズム指定子」を自動生成する仕組を採用すれば、同一の暗号処理装置１２０（暗号処理サブルーチン）を複数の事業者に共用させる実施形態を採る場合にも、十分なセキュリティを確保することができる。すなわち、個々の事業者に、それぞれ、当該事業者が利用するアルゴリズムを指定するための必要最小限のデータのみが組み込まれた符号データ生成装置を提供するようにすれば、他者が利用するアルゴリズムを指定するための「符号化されたアルゴリズム指定子」を生成することはできず、不正な行為が行われる可能性を低減できる。
【０２０５】
＜＜＜  §８．  その他の変形例  ＞＞＞
これまで、本発明に係る情報処理装置（主装置および暗号処理装置）を６つの実施形態について説明し、更に、これらに利用可能な暗号処理用符号データ生成装置についての説明を行った。ここでは、最後に、その他の変形例をいくつか述べておく。
【０２０６】
(1) 暗号化処理と復号処理
既に述べたとおり、本願では、「暗号化処理」と「復号処理」とを包括して「暗号処理」と呼んでいる。したがって、各実施形態における暗号処理部１２４，１２４Ａ，１２４Ｂ，１２４Ｃ，１２４Ｄ，１２４Ｅにおいて暗号鍵Ｋを用いて実行される「暗号処理」とは、平文データＰとして与えられた元データＤを暗号データＣに変換する「暗号化処理」だけでなく、暗号データＣとして与えられた元データＤを平文データＰに変換する「復号処理」も含むものである。したがって、暗号処理サブルーチンＲは、暗号化処理サブルーチンＲ１であってもよいし、復号処理サブルーチンＲ２であってもよいし、これら両方を含むサブルーチンであってもよい。
【０２０７】
(2)   符号データに関する並べ替え
符号変換部１２２，１２２Ａ，１２２Ｂ，１２２Ｃ，１２２Ｄ，１２２Ｅの基本機能は、各実施形態で述べたとおり、乱数テーブルを参照することにより、入力した符号データに含まれる個々の数値を当該数値をセル番号とするセルに収容されている数値に置き換える変換処理を行って暗号鍵を得ることにある。図７には、その基本形態として、図６に示す具体的な乱数テーブルＴを用いて、暗号鍵Ｋと符号データＦとの間で行われる相互変換の一例が示されている。
【０２０８】
ここで述べる変形例は、このような変換処理を行う際に、予め設定した所定の並べ替え規則に基づく数値の並び替え処理を行うものである。たとえば、図７には、暗号鍵Ｋ「２６，５Ｃ，０８，３Ａ，Ｄ８，５５，２Ｂ，１０」に対して、図６に示す乱数テーブルＴを用いた変換を行うことにより、符号データＦ「ＡＤ，３１，６３，１Ｄ，１２，６０，ＥＥ，１Ｂ」を得る例が示されている。§１で述べた実施形態の場合、こうして得られた符号データＦを暗号処理装置１２０に引き渡し、符号変換部１２２において、逆変換を行うことにより元の暗号鍵Ｋを得る処理が行われる。これに対して、ここで述べる変形例の場合、図７に示す符号データＦに対して、更に、所定の並べ替え規則に基づく数値の並び替え処理を行い、並び替え後の符号データＦ′を暗号処理装置１２０に引き渡すようにする。
【０２０９】
並べ替え規則として、たとえば、「数値を逆順にする」という単純な規則を設定した場合、符号データＦ「ＡＤ，３１，６３，１Ｄ，１２，６０，ＥＥ，１Ｂ」の各数値を逆順にすることにより、符号データＦ′「１Ｂ，ＥＥ，６０，１２，１Ｄ，６３，３１，ＡＤ」が得られる。そこで、暗号処理装置１２０に対しては、符号データＦを引き渡す代わりに、符号データＦ′を引き渡すようにする。
【０２１０】
この場合、符号変換部１２２は、データ入力部１２１が入力した符号データＦ′に含まれる個々の数値「１Ｂ，ＥＥ，６０，１２，１Ｄ，６３，３１，ＡＤ」を所定の並び替え規則（上例の場合は「数値を逆順にする」という規則）に従って並び替え、並び替え後の数値「ＡＤ，３１，６３，１Ｄ，１２，６０，ＥＥ，１Ｂ」を用いて乱数テーブルＴを参照することにより変換処理を行い、変換後のデータ「２６，５Ｃ，０８，３Ａ，Ｄ８，５５，２Ｂ，１０」を暗号鍵Ｋとして暗号処理部１２４に与える処理を行えばよい。結局、暗号処理部１２４に対して、図７上段に示す暗号鍵Ｋが与えられる点において、§１で述べた第１の実施形態と相違はないが、並び替え処理を行っておけば、符号データＦ′と暗号鍵Ｋとの対応関係がより複雑になり、耐タンパ性を更に向上させることができるようになる。
【０２１１】
当然ながら、並び替え規則は、「数値を逆順にする」という規則に限定されるものではなく、任意の規則を設定しておくことができる。たとえば、「最初の数値と最後の数値とを入れ替える」という規則を設定しておけば、符号データＦ「ＡＤ，３１，６３，１Ｄ，１２，６０，ＥＥ，１Ｂ」に基づいて、符号データＦ′「１Ｂ，３１，６３，１Ｄ，１２，６０，ＥＥ，ＡＤ」が得られることになる。もちろん、より複雑な規則として、たとえば、「最初の数値と最後の数値とを入れ替えた上で、更に、数値を逆順にする」という規則を設定することも可能である。あるいは、いわゆるローテーションシフトによる並び替えを行う規則を設定してもかまわない。たとえば、符号データＦ「ＡＤ，３１，６３，１Ｄ，１２，６０，ＥＥ，１Ｂ」に対して、「＋３」（右方向に３つずつシフト）というシフト量を設定して並び替えを行えば、符号データＦ′「６０，ＥＥ，１Ｂ，ＡＤ，３１，６３，１Ｄ，１２」が得られる。要するに、符号変換部１２２が、与えられた符号データを暗号鍵Ｋに変換する処理を行うことができれば、どのような並び替え規則を設定してもかまわない。
【０２１２】
また、上記変形例では、図７下段に示す符号データＦに対して並び替えを行い、並び替え後の符号データＦ′を暗号処理装置１２０に引き渡しているが、図７上段に示す暗号鍵Ｋに対して所定の並び替え規則に基づいて並び替えを行って並び替え後の暗号鍵Ｋ′を作成し、当該並び替え後の暗号鍵Ｋ′を構成する個々の数値について、乱数テーブルＴを参照した置き換えを行って符号データＦ"を得るようにしてもよい。要するに、前述の変形例では、乱数テーブルＴを用いた変換後のデータに対して並び替えが行われるのに対して、この変形例では、乱数テーブルＴを用いる変換前のデータに対して並び替えが行われることになる。
【０２１３】
たとえば、「数値を逆順にする」という規則を設定した場合、図７上段に示す暗号鍵Ｋ「２６，５Ｃ，０８，３Ａ，Ｄ８，５５，２Ｂ，１０」に対して、これを逆順にする処理を行い、「１０，２Ｂ，５５，Ｄ８，３Ａ，０８，５Ｃ，２６」なるデータ（並び替え後の暗号鍵Ｋ′）を作成し、これらの数値に対して、図６に示す乱数テーブルＴを用いた置き換えを行うことにより、符号データＦ”「１Ｂ，ＥＥ，６０，１２，１Ｄ，６３，３１，ＡＤ」を作成し、これを暗号処理装置１２０に引き渡すようにすればよい。
【０２１４】
この場合、符号変換部１２２は、まず、図６に示す乱数テーブルＴを参照して、与えられた符号データＦ”「１Ｂ，ＥＥ，６０，１２，１Ｄ，６３，３１，ＡＤ」の各数値を置き換える変換処理を行い、変換後のデータ「１０，２Ｂ，５５，Ｄ８，３Ａ，０８，５Ｃ，２６」（並び替え後の暗号鍵Ｋ′）を得る。続いて、この変換後のデータに含まれる個々の数値を所定の並び替え規則（上例の場合は「数値を逆順にする」という規則）に従って並び替え、並び替え後のデータ「２６，５Ｃ，０８，３Ａ，Ｄ８，５５，２Ｂ，１０」を暗号鍵Ｋとして暗号処理部１２４に与える処理を行えばよい。
【０２１５】
もちろん、上述した２つの変形例を組み合わせて、乱数テーブルＴを用いる変換前のデータに対して第１の並び替えを行い、乱数テーブルＴを用いた変換後のデータに対して第２の並び替えを行うようにしてもよい。
【０２１６】
(3)   各実施形態相互の組合わせ
§１〜§６では、それぞれ固有の特徴をもった第１〜第６の実施形態を個別に述べたが、これらの各実施形態は、相互に組み合わせて実行することができる。たとえば、複数の乱数テーブルを用いる第２の実施形態と、乱数テーブルに対するシフトを行う第４の実施形態と、複数の暗号アルゴリズムを用いる第５の実施形態と、を組み合わせて用いてもよい。この場合、主装置（メインプログラムＭ）から暗号処理装置（暗号処理サブルーチンＲ）に対しては、元データＤ、符号データＦ、テーブル指定子ｔ、シフト指示子ｓ、アルゴリズム指定子ａが引き渡されることになる。
【０２１７】
もちろん、更に、第６の実施形態を組み合わせて、符号データＦの代わりに暗号化符号データＧを引き渡すことも可能である。要するに、これまで述べてきたいくつかの実施形態は、矛盾が生じない限り、相互に組み合わせて実施することが可能であり、主装置（メインプログラムＭ）から暗号処理装置（暗号処理サブルーチンＲ）に対しては、採用した実施形態に応じて、必要な情報を引き渡すようにすればよい。
【０２１８】
なお、複数の乱数テーブルを用いる第２もしくは第３の実施形態と、乱数テーブルに対するシフトを行う第４の実施形態とを組み合わせる場合は、複数の乱数テーブルを跨いだシフトが行われるようにすることもできる。すなわち、複数の乱数テーブルを用いる場合、これら複数の乱数テーブルを一時的に結合することにより、結合テーブルを作成し、この結合テーブルに対して、たとえばローテーションシフトを行い、その後、個々の乱数テーブルに分離する処理を行えばよい。結合テーブルについて行われたシフト処理は、複数の乱数テーブルを跨いだシフト処理ということになり、耐タンパ性を更に向上させるメリットが得られる。
【０２１９】
たとえば、図１７には、８行８列に並べられた合計６４個のセルからなる乱数テーブルＴに対してローテーションシフトを行う例が示されている。これに対して、６４個のセルからなる乱数テーブルを２組結合して結合テーブルを作成することにすれば、合計１２８個のセルからなる結合テーブル上でシフト処理が行われることになる。こうして、結合テーブル上のセル内の数値に対するシフトが完了したら、元どおり、６４個のセルからなる２組の乱数テーブルに分離すればよい。
【０２２０】
具体的には、第１の乱数テーブルＴａを構成する６４個のセルのセル番号を１〜６４とし、第２の乱数テーブルＴｂを構成する６４個のセルのセル番号を６５〜１２８とすれば、セル番号１〜１２８が付された１２８個のセルからなる結合テーブルを一時的に作成し、当該結合テーブル上で、たとえば、図１７に例示するようなローテーションシフトを行い、その後、６４個のセルをもった２つの乱数テーブルに分離する処理を行えばよい。この場合、第１の乱数テーブルＴａから押し出された数値は第２の乱数テーブルＴｂへ移動し、第２の乱数テーブルＴｂから押し出された数値は第１の乱数テーブルＴａへ移動する。
【０２２１】
たとえば、シフト前の第１の乱数テーブルＴａに「１〜６４」なる数値が収容され、シフト前の第２の乱数テーブルＴｂに「６５〜１２８」なる数値が収容されている状態において、これら２つの乱数テーブルを跨いで、「＋５」なるシフト指示子ｓに基づくローテーションシフトを行うと、シフト後の第１の乱数テーブルＴａ内の数値は「１２４，１２５，１２６，１２７，１２８，１，２，３，...，５７，５８，５９」となり、シフト後の第２の乱数テーブルＴａ内の数値は「６０，６１，６２，６３，６４，６５，６６，６７，...，１２１，１２２，１２３」となる。２つの乱数テーブルを跨いだシフトが行われたため、耐タンパ性は更に向上する。
【０２２２】
以上、２つの乱数テーブルＴａ，Ｔｂを結合させて結合テーブルを作成する例を述べたが、もちろん、３つ以上の乱数テーブルを結合させてもかまわない。要するに、乱数テーブル格納部に複数Ｋ通りの乱数テーブルが格納されている場合、データ入力部が、元データおよび符号データとともに、特定の乱数テーブルを指定するテーブル指定子と、複数の乱数テーブルを跨いでシフトさせる規則を示すシフト指示子と、を外部から入力するようにし、符号変換部が、このシフト指示子によって示される規則に基づいて、複数の乱数テーブルを跨いだシフト処理を行い、当該シフト処理後に、テーブル指定子で指定された乱数テーブルを参照することにより変換処理を行うようにすればよい。
【０２２３】
(4)   方法発明としての把握
本発明は、暗号処理装置として把握することもできるし、当該暗号処理装置に主装置を加えて構成される情報処理装置として把握することもできるし、更に、当該暗号処理装置に引き渡す符号データＦもしくは暗号化符号データＧを生成するための暗号処理用符号データ生成装置として把握することもできる。これまでの説明は、このように、本発明を様々な装置発明として捉えたものである。一方、本発明は、暗号処理方法という方法発明として捉えることも可能である。
【０２２４】
方法発明として捉えると、本発明は、メインプログラムＭと暗号処理サブルーチンプログラムＲとが組み込まれたコンピュータが、暗号化もしくは復号のための暗号処理を行う暗号処理方法ということになり、当該方法は、次の３つの処理段階から構成されることになる。
【０２２５】
まず、第１の処理段階は、コンピュータが、メインプログラムＭを実行することにより、暗号処理の対象となる元データＤと暗号処理に必要な符号データＦとを暗号処理サブルーチンプログラムＲに引き渡す前処理段階である。
【０２２６】
続く、第２の処理段階は、コンピュータが、暗号処理サブルーチンプログラムＲを実行することにより、それぞれ固有のセル番号が付与された複数Ｍ個のセルに、ランダムにＮ通り（Ｍ≧Ｎ）の数値が収容された乱数テーブルＴを参照して、符号データＦに含まれる個々の数値を、当該数値をセル番号とするセルに収容されている数値に置き換える変換処理を行い、変換後のデータを暗号鍵Ｋとして用いる所定の暗号アルゴリズムＡに基づいて、元データＤに対して暗号処理を実施し、処理済データＥをメインプログラムに引き渡す暗号処理段階である。
【０２２７】
そして、第３の処理段階は、コンピュータが、メインプログラムＭを実行することにより、処理済みデータＥを用いて所定の処理を続行する後処理段階である。
【０２２８】
より具体的には、前処理段階では、０〜（Ｍ−１）の範囲の値をもった整数を羅列した符号データＦを暗号処理サブルーチンプログラムＲに引き渡す処理を行い、暗号処理段階では、０〜（Ｍ−１）の範囲の連続したセル番号が付与された複数Ｍ個のセルに、０〜（Ｎ−１）の範囲の連続するＮ通りの整数をランダムに収容した乱数テーブルＴを用い、符号データを、０〜（Ｎ−１）の範囲の値をもった整数を羅列した暗号鍵Ｋに置き換える変換処理を行うようにすればよい。
【０２２９】
また、上述した第６の実施形態を採用する場合は、前処理段階で、符号データＦの代わりに、当該符号データＦに対して所定の方法で暗号化を行って生成された暗号化符号データＧを暗号処理サブルーチンプログラムＲに引き渡す処理を行い、暗号処理段階では、この暗号化符号データＧを復号して得られる元の符号データＦを暗号鍵Ｋに変換する変換処理を行うようにすればよい。
【符号の説明】
【０２３０】
１００，１００Ａ，１００Ｂ，１００Ｃ，１００Ｄ，１００Ｅ：情報処理装置
１１０，１１０Ａ，１１０Ｂ，１１０Ｃ，１１０Ｄ，１１０Ｅ：主装置（メインプログラム）
１１１，１１１Ａ，１１１Ｂ，１１１Ｃ，１１１Ｄ，１１１Ｅ：情報処理部
１１２，１１２Ａ，１１２Ｂ，１１２Ｃ，１１２Ｄ，１１２Ｅ：暗号処理依頼部
１１３，１１３Ａ，１１３Ｂ，１１３Ｃ，１１３Ｄ，１１３Ｅ：暗号処理結果受信部
１２０，１２０Ａ，１２０Ｂ，１２０Ｃ，１２０Ｄ，１２０Ｅ：暗号処理装置（暗号処理サブルーチン）
１２１，１２１Ａ，１２１Ｂ，１２１Ｃ，１２１Ｄ，１２１Ｅ：データ入力部
１２２，１２２Ａ，１２２Ｂ，１２２Ｃ，１２２Ｄ，１２２Ｅ：符号変換部
１２３，１２３Ａ，１２３Ｂ，１２３Ｃ，１２３Ｄ，１２３Ｅ：乱数テーブル格納部
１２４，１２４Ａ，１２４Ｂ，１２４Ｃ，１２４Ｄ，１２４Ｅ：暗号処理部
１２５，１２５Ａ，１２５Ｂ，１２５Ｃ，１２５Ｄ，１２５Ｅ：データ出力部
１２６Ｅ：符号データ復号部
３００，３００Ｅ：符号データ生成装置
３１０，３１０Ｅ：暗号鍵入力部
３２０，３２０Ｅ：符号データ生成部
３３０，３３０Ｅ：乱数テーブル記憶部
３４０Ｅ：暗号化データ生成部
Ａ，Ａ１〜Ａ４：暗号アルゴリズム
ａ：アルゴリズム指定子
Ｃ：暗号データ
Ｄ：元データ
ｄ：シフト量
Ｅ：処理済データ
Ｆ：符号データ
Ｆ′：並び替え後の符号データ
Ｆ"：並び替え後の暗号鍵に基づいて作成された符号データ
ｆ１〜ｆ８：符号データＦの各バイト
Ｇ：暗号化符号データ
Ｋ：暗号鍵
Ｋ′：並び替え後の暗号鍵
Ｍ：メインプログラム
Ｐ：平文データ
Ｐ１〜Ｐ３：テーブル指定パターン
ｐ：パターン選択子
Ｒ：暗号処理サブルーチン
Ｒ１：暗号化処理サブルーチン
Ｒ２：復号処理サブルーチン
ｓ：シフト指示子
Ｔ，Ｔ０〜Ｔ１５：乱数テーブル
ｔ，ｔ１〜ｔ８：テーブル指定子
Ｖ１〜ＶＨ：秘密鍵
Ｗ１〜ＷＨ：公開鍵
ｗ：復号鍵指定子
Ｘ，Ｙ，Ｚ：アプリケーションプログラム（メインプログラムＭ）の提供業者
ｘ，ｙ：処理実行ルート
【図１】
2014165570.tif 000003
【図２】
2014165570.tif 000004
【図３】
2014165570.tif 000005
【図４】
2014165570.tif 000006
【図５】
2014165570.tif 000007
【図６】
2014165570.tif 000008
【図７】
2014165570.tif 000009
【図８】
2014165570.tif 000010
【図９】
2014165570.tif 000011
【図１０】
2014165570.tif 000012
【図１１】
2014165570.tif 000013
【図１２】
2014165570.tif 000014
【図１３】
2014165570.tif 000015
【図１４】
2014165570.tif 000016
【図１５】
2014165570.tif 000017
【図１６】
2014165570.tif 000018
【図１７】
2014165570.tif 000019
【図１８】
2014165570.tif 000020
【図１９】
2014165570.tif 000021
【図２０】
2014165570.tif 000022
【図２１】
2014165570.tif 000023
【図２２】
2014165570.tif 000024
【手続補正書】
【提出日】平成25年7月1日(2013.7.1)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項１９
【補正方法】変更
【補正の内容】
【請求項１９】
請求項１〜１５のいずれかに記載の暗号処理装置と、この暗号処理装置に暗号処理を依頼する主装置と、を備える情報処理装置であって、
前記主装置は、
所定の情報処理を実行する情報処理部と、
前記情報処理部から引き渡された元データと、予め記憶されていたもしくは外部から受け取った符号データと、必要に応じて、更に、テーブル指定子、パターン選択子、シフト指示子、アルゴリズム指示子の群の中から選択された１つもしくは複数の項目を、前記暗号処理装置のデータ入力部に与える暗号処理依頼部と、
前記暗号処理装置のデータ出力部から出力された処理済データを受け取り、前記情報処理部に引き渡す暗号処理結果受信部と、
を備えることを特徴とする情報処理装置。
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項２０
【補正方法】変更
【補正の内容】
【請求項２０】
請求項１６または１７に記載の暗号処理装置と、この暗号処理装置に暗号処理を依頼する主装置と、を備える情報処理装置であって、
前記主装置は、
所定の情報処理を実行する情報処理部と、
前記情報処理部から引き渡された元データと、予め記憶されていたもしくは外部から受け取った暗号化符号データと、必要に応じて、更に、テーブル指定子、パターン選択子、シフト指示子、アルゴリズム指示子の群の中から選択された１つもしくは複数の項目を、前記暗号処理装置のデータ入力部に与える暗号処理依頼部と、
前記暗号処理装置のデータ出力部から出力された処理済データを受け取り、前記情報処理部に引き渡す暗号処理結果受信部と、
を備えることを特徴とする情報処理装置。
【手続補正３】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項２１
【補正方法】変更
【補正の内容】
【請求項２１】
請求項１８に記載の暗号処理装置と、この暗号処理装置に暗号処理を依頼する主装置と、を備える情報処理装置であって、
前記主装置は、
所定の情報処理を実行する情報処理部と、
前記情報処理部から引き渡された元データと、予め記憶されていたもしくは外部から受け取った暗号化符号データと、復号鍵指定子と、必要に応じて、更に、テーブル指定子、パターン選択子、シフト指示子、アルゴリズム指示子の群の中から選択された１つもしくは複数の項目を、前記暗号処理装置のデータ入力部に与える暗号処理依頼部と、
前記暗号処理装置のデータ出力部から出力された処理済データを受け取り、前記情報処理部に引き渡す暗号処理結果受信部と、
を備え、
前記復号鍵指定子は、暗号処理装置の符号データ復号部に記憶されている「Ｈ組の鍵ペアーについての復号鍵として用いる一方の鍵」の第ｉ番目を指定する情報であり、
前記暗号化符号データは、所定の符号データに対して、前記第ｉ番目の一方の鍵に対応する他方の鍵を用いて暗号化を行って得られるデータであることを特徴とする情報処理装置。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００３１
【補正方法】変更
【補正の内容】
【００３１】
(19)  本発明の第１９の態様は、上述した第１〜第１５の態様に係る暗号処理装置と、この暗号処理装置に暗号処理を依頼する主装置と、によって情報処理装置を構成し、
主装置には、
所定の情報処理を実行する情報処理部と、
情報処理部から引き渡された元データと、予め記憶されていたもしくは外部から受け取った符号データと、必要に応じて、更に、テーブル指定子、パターン選択子、シフト指示子、アルゴリズム指示子の群の中から選択された１つもしくは複数の項目を、暗号処理装置のデータ入力部に与える暗号処理依頼部と、
暗号処理装置のデータ出力部から出力された処理済データを受け取り、情報処理部に引き渡す暗号処理結果受信部と、
を設けるようにしたものである。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００３２
【補正方法】変更
【補正の内容】
【００３２】
(20)  本発明の第２０の態様は、上述した第１６または第１７の態様に係る暗号処理装置と、この暗号処理装置に暗号処理を依頼する主装置と、によって情報処理装置を構成し、
主装置には、
所定の情報処理を実行する情報処理部と、
情報処理部から引き渡された元データと、予め記憶されていたもしくは外部から受け取った暗号化符号データと、必要に応じて、更に、テーブル指定子、パターン選択子、シフト指示子、アルゴリズム指示子の群の中から選択された１つもしくは複数の項目を、暗号処理装置のデータ入力部に与える暗号処理依頼部と、
暗号処理装置のデータ出力部から出力された処理済データを受け取り、情報処理部に引き渡す暗号処理結果受信部と、
を設けるようにしたものである。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】００３３
【補正方法】変更
【補正の内容】
【００３３】
(21)  本発明の第２１の態様は、上述した第１８の態様に係る暗号処理装置と、この暗号処理装置に暗号処理を依頼する主装置と、によって情報処理装置を構成し、
主装置には、
所定の情報処理を実行する情報処理部と、
情報処理部から引き渡された元データと、予め記憶されていたもしくは外部から受け取った暗号化符号データと、復号鍵指定子と、必要に応じて、更に、テーブル指定子、パターン選択子、シフト指示子、アルゴリズム指示子の群の中から選択された１つもしくは複数の項目を、暗号処理装置のデータ入力部に与える暗号処理依頼部と、
暗号処理装置のデータ出力部から出力された処理済データを受け取り、情報処理部に引き渡す暗号処理結果受信部と、
を設けるようにし、
復号鍵指定子は、暗号処理装置の符号データ復号部に記憶されている「Ｈ組の鍵ペアーについての復号鍵として用いる一方の鍵」の第ｉ番目を指定する情報であり、
暗号化符号データは、所定の符号データに対して、第ｉ番目の一方の鍵に対応する他方の鍵を用いて暗号化を行って得られるデータであるようにしたものである。
を設けるようにしたものである。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】００８７
【補正方法】変更
【補正の内容】
【００８７】
一方、この例では、各セルの下段に収容されている数値も、０〜２５５の２５６通り（Ｎ＝２５６）の整数としており、１６進表示で「００」〜「ＦＦ」なる２５６通りの数値が、いずれかのセルに収容されている。ただ、収容場所はランダムになっており、テーブル全体が乱数テーブルを構成している。たとえば、この例の場合、セル番号第０番（「００」）のセルには「５Ｂ」なる数値が収容され、セル番号第１番（「０１」）のセルには「Ｄ３」なる数値が収容され、セル番号第２番（「０２」）のセルには「８Ａ」なる数値が収容されている。
【手続補正８】
【補正対象書類名】図面
【補正対象項目名】図１４
【補正方法】変更
【補正の内容】
【図１４】
2014165570.tif 000025