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