(57)【要約】【課題】  演算速度をさほど低下させることなく、サイドチャネル攻撃に対する安全性を向上させ、なおかつ製造コストを低く抑える。【解決手段】  データ値生成命令が入力されたことを契機に、暗号処理装置の暗号演算特定データ生成部において、演算処理内容を特定する暗号演算特定データを生成し、これをデータ記憶部に格納する。また、暗号演算部は、演算処理内容は前記データ記憶部に格納された前記暗号演算特定データに従って変化するがその演算結果は所定の暗号アルゴリズムによるものと等しくなる演算を実行する。【選択図】  図６
2007006184.tif 000002
【特許請求の範囲】
【請求項１】
暗号演算を行う暗号処理装置であって、
データ値生成命令が入力されたことを契機に、演算処理内容を特定する暗号演算特定データを生成する暗号演算特定データ生成部と、
前記暗号演算特定データを格納するデータ記憶部と、
演算処理内容は前記データ記憶部に格納された前記暗号演算特定データに従って変化するがその演算結果は所定の暗号アルゴリズムによるものと等しくなる演算を実行する暗号演算部と、
を有することを特徴とする暗号処理装置。
【請求項２】
請求項１に記載の暗号処理装置であって、
前記所定の暗号アルゴリズムが、
換字テーブルを用いて換字処理を行う暗号アルゴリズムであり、
前記暗号演算特定データが、
前記換字テーブルを変形した変形換字テーブルと、演算処理に利用される被演算子であるマスクパラメータとを具備するデータである、
ことを特徴とする暗号処理装置。
【請求項３】
請求項１或いは２に記載の暗号処理装置であって、
乱数を生成する乱数生成部をさらに有し、
前記暗号演算特定データ生成部が、
前記乱数を用いて前記暗号演算特定データを生成する、
ことを特徴とする暗号処理装置。
【請求項４】
請求項１或いは２に記載の暗号処理装置であって、
サーバ装置から送信された乱数を受信する乱数受信部をさらに有し、
前記暗号演算特定データ生成部が、
前記乱数を用いて前記暗号演算特定データを生成する、
ことを特徴とする暗号処理装置。
【請求項５】
請求項１或いは２に記載の暗号処理装置であって、
送信された任意の定数を受信する定数受信部と、
前記任意の定数と所定の関数とを用いて乱数を生成する乱数生成部と、をさらに有し、
前記暗号演算特定データ生成部が、
前記乱数を用いて前記暗号演算特定データを生成する、
を有することを特徴とする暗号処理装置。
【請求項６】
請求項５に記載の暗号処理装置であって、
前記乱数生成部が、前記任意の定数とハッシュ関数とを用いて前記乱数を生成する、
ことを特徴とする暗号処理装置。
【請求項７】
請求項１から６の何れかに記載の暗号処理装置であって、
前記暗号演算特定データ生成部が、
サーバ装置から送信されたデータ値生成命令が入力されたことを契機に、前記暗号演算特定データを生成する、
ことを特徴とする暗号処理装置。
【請求項８】
請求項１から７の何れかに記載の暗号処理装置であって、
サーバ装置から送信された認証アプリケーションプログラムを受信するプログラム受信部と、
前記認証アプリケーションプログラムを格納するプログラム記憶部と、
ＣＰＵと、を有し、
前記暗号演算特定データ生成部及び前記暗号演算部が、
前記ＣＰＵにおいて前記認証アプリケーションプログラムが読み込まれることにより構成されるものであり、
前記データ記憶部には、
前記暗号演算特定データ生成部によって生成された前記暗号演算特定データが格納される、
ことを特徴とする暗号処理装置。
【請求項９】
請求項１から８の何れかに記載の暗号処理装置であって、
前記暗号演算特定データ生成部が前記暗号演算特定データを生成する前に、変換済みフラグ変数に第１定数を代入してフラグメモリに格納し、前記暗号演算特定データの生成後に、当該変換済みフラグ変数に第２定数を代入して当該フラグメモリに格納するフラグ演算部をさらに有する、
ことを特徴とする暗号処理装置。
【請求項１０】
請求項１から７の何れかに記載の暗号処理装置としてコンピュータを機能させるための認証アプリケーションプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号処理技術に関し、特に、サイドチャネル攻撃対策を講じた暗号処理技術に関する。
【背景技術】
【０００２】
ＩＣカードや携帯電話など、その内部において暗号演算を行う情報機器に対し、暗号演算時の消費電力変動や放射電磁波から、情報機器の暗号演算で使用する秘密鍵を不正に取得するサイドチャネル攻撃技術が注目されている。これを防ぐ方法の一つとして、マスク演算手法が提案されている（非特許文献１参照）。これは、入力データや秘密鍵に乱数を乗算もしくは加算するとともに、その乱数に応じて鍵暗号演算のアルゴリズムを変形して演算することで、暗号演算の入出力は変えずに、暗号演算時の消費電力変動や放射電磁波と秘密鍵との相関を薄め、秘密鍵の取得を困難とする方法である。図１４にマスク演算手法の概念図を示す。ここで、ＤＥＳやＡＥＳに代表される共通鍵暗号方式の実装では、演算のうち非線形性を有する換字選択処理を、あらかじめ用意された換字テーブルを参照して実現することが多い。マスク演算手法では、この換字テーブルを乱数に応じて書き換える必要がある。また、マスク演算手法に使用する乱数の値が判明してしまうと、マスク演算手法で実装された暗号演算であってもサイドチャネル攻撃で秘密鍵の取得が可能であるため、演算毎に乱数を生成し、換字テーブルを書き換えることが好ましいとされている。
【非特許文献１】Ｍ.L.Akkar, ”An Implementation of DES and AES, Secure against Some Attacks“, Proceedings of CHES 2001, Springer-Verlag, PP.309-318
【発明の開示】
【発明が解決しようとする課題】
【０００３】
マスク演算手法を実際の暗号処理装置に実装する場合、換字テーブルは読み書き速度が高速なＲＡＭ上に保持されるのが好ましい。上述した換字テーブルの書き換え処理や暗号演算処理を高速に行うためである。
しかし、ＩＣカードや携帯電話のＲＡＭ容量は、換字テーブルの容量より小さく、ＲＡＭ上に保持することが不可能な場合が多い。また、換字テーブルをＥＥＰＲＯＭ等の不揮発性メモリに保持すると、書き換え時間が非常に長いというデバイスの特性のため、演算毎に換字テーブルを書き換えることで演算時間が著しく低下し、現実的に利用することができない。
【０００４】
これらの制限より、ＩＣカードや携帯電話等の実装制約が制限された情報機器上では、ある固定の乱数から演算された換字テーブルをＥＥＰＲＯＭに保持し、換字テーブルの換字テーブルの書き換えは行わない、という実装をせざるを得ない。この場合、１つの情報機器で使用される乱数は固定であるため、暗号演算を繰り返し行うようなサイドチャネル攻撃によって固定の乱数が取得され、秘密鍵の取得が容易になってしまうというセキュリティ上の問題があった。
また上記に加え、同じ固定値（固定の乱数）を使用する情報機器が複数頒布されている場合、１つの情報機器で使用される乱数が判明してしまうと、同じ固定値を使用する全ての情報機器の秘密鍵の取得が容易になってしまうという問題もあった。これを防ぐために、全ての情報機器で異なる乱数を使用することもできるが、製造工程が煩雑となり、製造コストが上昇するという問題があった。特に、ＩＣカードシステムのように、マスク暗号演算を暗号処理装置上のソフトウェアプログラムで実装し、ソフトウェアプログラムを頒布して情報機器にダウンロードするようなシステムでは、ソフトウェアプログラムを頒布する際に証明書を添付する必要があるが、この証明書を全てのソフトウェアプログラム毎に発行する必要があり、製造コストが著しく上昇するという問題があった。
【０００５】
以上まとめると以下のようになる。まず、マスク演算手法を使用する暗号処理装置では、容量の関係上、換字テーブルをＲＡＭに保持することが不可能な場合が多い。一方、不揮発性メモリを用いた場合、演算のたびに換字テーブルを書き換えると演算速度が著しく低下してしまう。また、全ての暗号処理装置で同一の乱数を使用すると、その同一の乱数が判明した場合に、サイドチャネル攻撃によって、その秘密鍵を不正に取得されるというセキュリティ上の問題が生じる。また、全ての暗号処理装置で異なる乱数を使用しようとすると、その製造コストが著しく上昇するという問題が生じる。
【０００６】
本発明はこのような点に鑑みてなされたものであり、演算速度をさほど低下させることなく、サイドチャネル攻撃に対する安全性を向上させ、なおかつ製造コストを低く抑えることが可能な技術を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明では、データ値生成命令が入力されたことを契機に、暗号処理装置の暗号演算特定データ生成部において、演算処理内容を特定する暗号演算特定データを生成し、これをデータ記憶部に格納する。また、暗号演算部は、演算処理内容は前記データ記憶部に格納された前記暗号演算特定データに従って変化するがその演算結果は所定の暗号アルゴリズムによるものと等しくなる演算を実行する。
【０００８】
ここで、暗号演算特定データ生成部が暗号演算特定データの生成を行うのは、データ値生成命令が入力された場合のみである。そのため、暗号演算を行うたびに暗号演算特定データの生成を行う場合に比べ、データ記憶部へのデータ格納頻度を低減させることができる。これにより、データ記憶部の動作速度に起因する演算速度の低下を抑制できる。また、暗号演算特定データの生成は暗号処理装置ごとに個別に行われる。これにより、サイドチャネル攻撃に対する安全性が向上する。さらに、暗号演算特定データの生成は暗号処理装置において行われる。そのため、暗号処理装置の製造過程や頒布時において、各装置における暗号演算特定データの相違を考慮する必要がない。これにより、製造コストを低減させることができる。
【０００９】
また、本発明において好ましくは、所定の暗号アルゴリズムが、換字テーブルを用いて換字処理を行う暗号アルゴリズムであり、暗号演算特定データが、換字テーブルを変形した変形換字テーブルと、演算処理に利用される被演算子であるマスクパラメータとを具備するデータである。
さらに、本発明において好ましくは、暗号処理装置は、乱数を生成する乱数生成部をさらに有し、暗号演算特定データ生成部は、乱数を用いて暗号演算特定データを生成する。これにより、各暗号処理装置間における暗号演算特定データの相関を推測することが困難となる。
【００１０】
また、本発明において好ましくは、暗号処理装置は、サーバ装置から送信された乱数を受信する乱数受信部をさらに有し、暗号演算特定データ生成部は、乱数を用いて暗号演算特定データを生成する。
さらに、本発明において好ましくは、暗号処理装置は、送信された任意の定数を受信する定数受信部と、任意の定数と所定の関数とを用いて乱数を生成する乱数生成部と、をさらに有し、暗号演算特定データ生成部が、乱数を用いて暗号演算特定データを生成する。またこの場合、好ましくは、乱数生成部は、任意の定数とハッシュ関数とを用いて乱数を生成する。
【００１１】
また、本発明において好ましくは、暗号演算特定データ生成部は、サーバ装置から送信されたデータ値生成命令が入力されたことを契機に、暗号演算特定データを生成する。これにより、サーバ装置において各暗号処理装置の暗号演算特定データの更新を制御できる。
さらに、本発明において好ましくは、暗号処理装置は、サーバ装置から送信された認証アプリケーションプログラムを受信するプログラム受信部と、認証アプリケーションプログラムを格納するプログラム記憶部と、ＣＰＵと、を有し、暗号演算特定データ生成部及び暗号演算部が、ＣＰＵにおいて認証アプリケーションプログラムが読み込まれることにより構成されるものであり、データ記憶部には、暗号演算特定データ生成部によって生成された暗号演算特定データが格納される。
【００１２】
ここで、暗号演算特定データを生成する暗号演算特定データ生成部は、各暗号処理装置に配布された認証アプリケーションプログラムがそれぞれのＣＰＵにおいて実行されることにより構成されるものである。即ち、暗号演算特定データは、各暗号処理装置に配布された後に生成され、システム運営者側は暗号演算特定データを管理する必要がない。その結果、システム運営者側は、データの繁雑な取扱いに起因するコストを低減させることができる。また、各暗号処理装置に配布する認証アプリケーションプログラムとそれに添付する証明書は一組で良いため、証明書の付与・管理に起因するコストも低減させることができる。
【００１３】
また、本発明において好ましくは、暗号処理装置は、暗号演算特定データ生成部が暗号演算特定データを生成する前に、変換済みフラグ変数に第１定数を代入してフラグメモリに格納し、暗号演算特定データの生成後に、当該変換済みフラグ変数に第２定数を代入して当該フラグメモリに格納するフラグ演算部をさらに有する。これにより、暗号演算特定データ生成途中に生じた不具合を検出することが可能となる。
【発明の効果】
【００１４】
以上より本発明では、演算速度をさほど低下させることなく、サイドチャネル攻撃に対する安全性を向上させ、なおかつ製造コストを低く抑えることができる。
【発明を実施するための最良の形態】
【００１５】
以下、本発明の実施の形態を図面を参照して説明する。
〔第１の発明の実施の形態〕
本形態は、ＩＣカード用認証アプリケーションプログラム（以下「認証ＡＰ」と呼ぶ）が、アプリケーション頒布用サーバ装置（以下「サーバ装置」と呼ぶ）からＩＣカード（「暗号処理装置」に相当）にダウンロードされ、このＩＣカードにおいて暗号処理を実行する例である。なお、本形態では、換字テーブルを用いて換字処理を行う暗号アルゴリズム、具体的にはＤＥＳをベースとした暗号方式を採用する。
【００１６】
＜構成＞
図１は、本形態における暗号処理システム１を例示した図である。
この図に例示するように、この例の暗号処理システム１は、サーバ装置１０と、ＩＣカード２０と、リーダライタ３０とを有している。また、サーバ装置１０とリーダライタ３０とは、ネットワーク４０を通じて通信可能に接続され、さらに、ＩＣカード２０とリーダライタ３０とが通信可能に構成されている。
【００１７】
＜サーバ装置＞
図２は、本形態におけるサーバ装置１０の構成を例示したブロック図である。
図２に示すように、この例のサーバ装置１０は、ハードディスク装置や半導体メモリ等である補助記憶装置１１、各処理を実行するＣＰＵ（central processing unit）１２、一時記憶メモリであるＲＡＭ（Random Access Memory）１３、ネットワーク４０を通じた通信を行うための通信部１４及び各種データやコマンドの伝送を行うバス１５から構成されている。この例の補助記憶装置１１には、変形ＤＥＳ実行コード１１ａａとデータ変換実行コード１１ａｂと制御コード１１ａｃとを有する認証ＡＰ１１ａと、その認証ＡＰ１１ａにサーバ装置１０の署名用秘密鍵で署名された証明書１１ｂとが一対となり保管されている。さらに補助記憶装置１１には、ダウンロード制御コード１１ｃやデータ値生成命令コード１１ｄも保管されている。
【００１８】
ここで、変形ＤＥＳ実行コード１１ａａは、演算処理内容は変形換字テーブルやマスクパラメータ従って変化するが、その演算結果はＤＥＳ暗号アルゴリズムによるものと等しくなるマスクＤＥＳ演算を、ＩＣカード２０のＣＰＵに実行させるためのプログラムである。また、データ変換実行コード１１ａｂは、マスクＤＥＳ演算に必要な変形換字テーブルやマスクパラメータの生成処理を、ＩＣカード２０のＣＰＵに実行させるためのプログラムである。また、制御コード１１ａｃは、変形換字テーブル等の更新やマスクＤＥＳ演算の制御を、ＩＣカード２０のＣＰＵに実行させるためのプログラムである。
【００１９】
なお、変形換字テーブルとは、ＤＥＳの換字テーブルをデータ変換実行コード１１ａｂが示す処理に従って変形したテーブルである。また、マスクパラメータとは、当該変形に伴って暗号演算に必要となる付加演算に利用される被演算子である。なお、これらの詳細については後述する。また、変形換字テーブル及びマスクパラメータは、「演算処理内容を特定する暗号演算特定データ」に相当する。
また、ダウンロード制御コード１１ｃは、認証ＡＰ１１ａや証明書１１ｂのダウンロード処理の制御をサーバ装置１０のＣＰＵ１２に実行させるためのプログラムである。また、データ値生成命令コード１１ｄは、所定の契機で、サーバ装置１０がデータ値生成命令をＩＣカード２０に送信するための処理を、サーバ装置１０のＣＰＵ１２に実行させるためのプログラムである。なお、データ値生成命令とは、サーバ装置１０がＩＣカード２０に対し、変形換字テーブルやマスクパラメータの生成や更新を指示する命令を意味する。
【００２０】
＜ＩＣカード＞
図３は、本形態におけるＩＣカード２０の構成を例示したブロック図である。
図３に示すように、この例のＩＣカード２０には、不揮発性メモリであるＥＥＰＲＲＯＭ（Electronically Erasable and Programmable Read Only Memory）２１、レジスタ２２ａを具備するＣＰＵ２２、一時記憶メモリであるＲＡＭ２３、乱数を生成する乱数生成器２４、リーダライタ３０との通信を行う通信部２５及びバス２６が搭載されている。
ここで、初期段階のＥＥＰＲＯＭ２１内には、ＩＣカード２０がダウンロードする各種認証ＡＰの真正性を確認するため、その署名者として信用するサーバ装置１０の公開鍵証明書２１ｅや、サーバ装置１０からのダウンロード処理をＣＰＵ２２に実行させるためのプログラムであるダウンロード制御コード２１ｆや他のＡＰ（アプリケーションプログラム）２１ｇが格納されている。また、サーバ装置１０からのダウンロードによって、ＥＥＰＲＯＭ２１内には、変形ＤＥＳ実行コード２１ａａ、データ変換実行コード２１ａｂ及び制御コード２１ａｃを具備する認証ＡＰ２１ａと、証明書２１ｂとが格納される。さらに、後述するＩＣカード２０での処理に応じ、ＥＥＰＲＯＭ２１内には変形換字テーブル２１ｃ及びマスクパラメータ２１ｄが格納される。
【００２１】
＜認証ＡＰ設定処理＞
次に、ＩＣカード２０が、サーバ装置１０から認証ＡＰ１１ａをダウンロードし、ＥＥＰＲＯＭ２１内に認証ＡＰ２１ａを設定する際の処理について説明する。図４は、この処理を説明するためのフローチャートである。以下、この図に沿って説明を行っていく。
ＩＣカード２０は、サーバ装置１０から認証ＡＰ１１ａ及びその証明書１１ｂをダウンロードする（ステップＳ１）。具体的には、例えばまず、ダウンロード制御コード２１ｆがロードされた（読み込まれた）ＣＰＵ２２が、リーダライタ３０から送信された問い合わせ情報に対し、通信部２５からアクセス要求情報を返信する。これを受けたリーダライタ３０は、ネットワーク４０を通じてサーバ装置１０にアクセスし、サーバ装置１０に格納された認証ＡＰ１１ａ及び証明書１１ｂの返送を要求する。サーバ装置１０は、この要求情報を通信部１４で受信し、当該ＣＰＵ１２は、補助記憶装置１１に格納された認証ＡＰ１１ａ及び証明書１１ｂを通信部１４からネットワーク４０を通じリーダライタ３０に返信する。サーバ装置１０から送信された認証ＡＰ１１ａ及び証明書１１ｂは、ネットワーク４０及びリーダライタ３０を通じ、ＩＣカード２０の通信部２５（「プログラム受信部」に相当）において受信される。そして、これらの認証ＡＰ１１ａ及び証明書１１ｂは、認証ＡＰ２１ａ及び証明書２１ｂとしてＥＥＰＲＯＭ２１（「プログラム記憶部」に相当）に格納される。また、この格納の際には、変形換字テーブル２１ｃ及びマスクパラメータ２１ｄを格納するための領域もＥＥＰＲＯＭ２１内に確保される。なお、ここで確保されるＥＥＰＲＯＭ２１内のデータ値は不定でよい。また、ＩＣカード１０のＯＳ（Operating System）の種類によっては、プログラム領域と同じ大きさしかＥＥＰＲＯＭ２１上の領域を確保できない場合がある。この場合には、サーバ装置１０に用意する認証ＡＰ１１ａ内に、予め変形換字テーブル及びマスクパラメータを記憶できる容量の分だけダミーのデータを入れておき、それをダウンロードすればよい。
【００２２】
次に、ＩＣカード２０は、ダウンロードした証明書２１ｂを用い、サーバ装置１０からダウンロードした認証ＡＰ２１ａの真正性を検証する（ステップＳ２）。具体的には、次のような処理を行う。即ち、ダウンロード制御コード２１ｆがロードされたＣＰＵ２２は、まずＥＥＰＲＯＭ２１からダウンロードした認証ＡＰ２１ａを読み込み、そのハッシュ演算を行い、その結果であるダイジェストをＲＡＭ２３に格納する。次に、当該ＣＰＵ２２は、ＥＥＰＲＯＭ２１から、ダウンロードした証明書２１ｂに含まれるダイジェスト値と、あらかじめＥＥＰＲＯＭ２１に格納してあるサーバ装置の公開鍵証明書２１ｅに含まれる公開鍵とを読み込み、このダイジェスト値に対し当該公開鍵を用いた署名検証演算を行う。そして、当該ＣＰＵ２２は、この演算結果と先にＲＡＭ２３に格納したダイジェストとを比較し、一致すれば真正性検証が成功したと判断し、一致しなければ真正性検証を失敗したと判断する。なお、上記では認証ＡＰ２１ａをＥＥＰＲＯＭ２１にダウンロードしてからハッシュ演算を行ったが、ハッシュ演算は入力の先頭から逐次的に処理を行う演算であるため、ダウンロードを行いながら同時にハッシュ演算を行ってもよい。
【００２３】
ここで、ダウンロードした認証ＡＰ２１ａが真正でないと判断されると、ダウンロード制御コード２１ｆがロードされたＣＰＵ２２ａは、ＥＥＰＲＯＭ２１にダウンロードした認証ＡＰ２１ａ及び証明書２１ｂを削除し、処理をエラー終了させる（ステップＳ３）。
一方、ダウンロードした認証ＡＰ２１ａが真正であると判断されると、データ値生成命令コード１１ｄがロードされたサーバ装置１０のＣＰＵ１２は、ＩＣカード２０上の認証ＡＰ２１ａに対する変形換字テーブル２１ｃ及びマスクパラメータ２１ｄのデータ値生成命令の送信を通信部１４に指示する。
【００２４】
通信部１４は、このデータ値生成命令を送信し、データ値生成命令は、ネットワーク４０及びリーダライタ３０を通じ、ＩＣカード２０の通信部２５に受信入力される（ステップＳ４）。なお、本命令はＩＣカード２０の外部から入力されればよく、例えば、サーバ装置１０の代わりにＩＣカード２０と直接接続されたＰＣ端末装置からＩＣカード２０に入力されることとしてもよい。
ＩＣカード２０の通信部２５にデータ値生成命令が入力されたことを契機に、認証ＡＰ２１ａのデータ変換実行コード２１ａｂがＣＰＵ２２上にロードされ、このデータ変換実行コード２１ａｂがロードされたＣＰＵ２２（「暗号演算特定データ生成部」に相当）は、変形換字テーブル２１ｃ及びマスクパラメータ２１ｄのデータ値を生成し、これらをＥＥＰＲＰＭ２１（「データ記憶部」に相当）に格納する（ステップＳ５）。
【００２５】
図５は、このステップＳ６の処理の詳細を説明するためのフローチャートである。以下、この図に沿って、ステップＳ６の処理の詳細を説明する。
まず、データ変換実行コード２１ａｂがロードされたＣＰＵ２２は、ＩＣカード２０内の乱数生成器２４に乱数生成命令を送信し、乱数生成器２４で６４ビットの乱数値Ｘを生成させ、これを取得する（ステップＳ１１）。そして、このＣＰＵ２２は、取得した乱数値ＸをマスクパラメータＸとしてＥＥＰＲＯＭ２１に格納する。なお、サーバ装置１０や他の外部装置に乱数値Ｘを生成させ、これをＩＣカード２０に送信させ、ＩＣカード２０の通信部２５（「乱数受信部」に相当）で受信し、ＣＰＵ２２に送ることとしてもよい。また、より好適には、外部装置からＩＣカード２０に乱数等の任意の定数を送信させ、ＩＣカード２０の通信部２５（「定数受信部」に相当）で受信してＣＰＵ２２に送る。ＣＰＵ２２（「乱数生成部」に相当）は、認証ＡＰ２１ａ内部もしくはＩＣカード２０内のその他のＡＰ２１ｇを読み込んで実行し、送られた任意の定数を種として所定の関数の演算を行い、乱数値Ｘを生成する。なお、生成される乱数値Ｘのランダム性を考慮すると、この場合の所定の関数としてＳＨＡ−１等のハッシュ関数を用いることが好適である。
【００２６】
乱数値Ｘを取得した当該ＣＰＵ２２は、次に、ＥＥＰＲＯＭ２１に格納された乱数値であるマスクパラメータＸを用い、６４ビットのマスクパラメータＸ１＝ＩＰ（Ｘ）を算出し、ＥＥＰＲＯＭ２１に格納する（ステップＳ１２）。なお、ＩＰ（α）は、αに対しＤＥＳで定義されている初期転置（初期置換）（例えば、岡本龍明，山本博資著，「現代暗号」，第３刷，産業図書株式会社，Ｐ８２〜８７等参照）を施すことを意味する。
次に当該ＣＰＵ２２は、ＥＥＰＲＯＭ２１に格納されたマスクパラメータＸ１を用い、４８ビットのマスクパラメータＸ２＝ＥＰ（Ｘ１３２−６３）を算出し、これをＥＥＰＲＯＭ２１に格納する（ステップＳ１３）。なお、ＥＰ（α）は、αに対しＤＥＳで定義されている拡張転置（拡大置換）を施すことを意味する。また、Ｘ１３２−６３は、Ｘ１の下位３２ビットを意味する。
【００２７】
次に当該当該ＣＰＵ２２は、ＥＥＰＲＯＭ２１に格納されたマスクパラメータＸ１を用い、３２ビットのマスクパラメータＸ３＝Ｐ−１（Ｘ１０−３１（＋）Ｘ１３２−６３）を算出し、これをＥＥＰＲＯＭ２１に格納する（ステップＳ１４）。なお、Ｐ−１（α）は、αに対しＤＥＳで定義されている転置Ｐの逆演算を示す。即ちＰ−１（Ｐ（α））＝αを満たす。また、Ｘ１０−３１はＸ１の上位３２ビットを意味する。また、α（＋）βは、ビット値αとビット値βとの排他的論理和演算を示す。
次に当該当該ＣＰＵ２２は、ＥＥＰＲＯＭ２１に格納されたマスクパラメータＸ１を用い、３２ビットのマスクパラメータＸ４＝Ｘ１０−３１（＋）Ｘ１３２−６３を算出し、これをＥＥＰＲＯＭ２１に格納する（ステップＳ１５）。以上の処理により、ＥＥＰＲＯＭ２１には４つのマスクパラメータ（Ｘ，Ｘ１〜Ｘ４）２１ｄが格納された。
【００２８】
次に当該当該ＣＰＵ２２は、ＥＥＰＲＯＭ２１に格納された認証ＡＰ２１ａのデータ変換実行コード２１ａｂが具備する８個のＤＥＳの換字テーブルＳ−Ｂｏｘ＿ｎ（ｎ＝１，...，８）と、マスクパラメータＸ２，Ｘ３とを用い、下記の演算を実行し、８個の変形換字テーブル〔ＳＭ−Ｂｏｘ＿ｎ（Ａ）（ｎ＝１，...，８）〕２１ｃを求め、これをＥＥＰＲＯＭ２１に格納する（ステップＳ１６）。
MS-Box_n(A)=S-Box_n(A(+)X2_n)(+)X3_n  (n=1,...,8) …(1)
ここで、式（１）中の関数及びパラメータの意味は以下の通りである。
【００２９】
Ｓ−Ｂｏｘ＿ｎ（α）：ＤＥＳのｎ番目の換字テーブルＳ−Ｂｏｘ＿ｎに従い、６ビットのαを４ビットの値に換字する処理。
Ａ：ＳＭ−Ｂｏｘ＿ｎによる換字処理の対象となる８ビットの値。ＳＭ−Ｂｏｘ＿ｎのアドレスを示す。
Ｘ２＿ｎ：Ｘ２のうちビット位置６＊（ｎ−１）から６＊（ｎ−１）＋５の範囲に該当する６ビットの値。
Ｘ３＿ｎ：Ｘ３のうちビット位置４＊（ｎ−１）から４＊（ｎ−１）＋３の範囲に該当する４ビットの値。
すなわち、ＤＥＳの換字テーブルを表す８個の配列それぞれについて、配列のアドレスと要素とをそれぞれＸ２及びＸ３の所定範囲の値で変形した配列を、変形換字テーブル２１ｃとして、ＥＥＰＲＯＭ２１に格納する。
【００３０】
＜変形ＤＥＳ実行処理及び認証ＡＰ更新処理＞
以上のように認証ＡＰが設定されたＩＣカード２０は、他のＡＰ２１ｇの実行に伴うコマンドの発生や、外部のサーバ装置１０等から送信されたコマンドの入力に従い、変形ＤＥＳの実行や、変形換字テーブル２１ｃ及びマスクパラメータ２１ｄの更新を行う。
【００３１】
図６は、これらの処理を説明するためのフローチャートである。以下、このフローチャートに沿って説明を行っていく。
まず、制御コード２１ａｃがロードされたＣＰＵ２２は、コマンドの発生や入力があったか否かを判定する（ステップＳ２１）。なお、この例のコマンドは、他のＡＰ２１ｇをＣＰＵ２２で実行することに伴い発生する暗号演算命令であるＤＥＳ演算コマンドと、外部のサーバ装置１０等が所定の契機で送信し、通信部２５で受信され、当該ＣＰＵ２２に入力されるデータ値生成命令であるパラメータ書き換えコマンドとがある。なお、ＤＥＳ演算コマンドには、マスクＤＥＳ演算を行う対象となるメッセージＭが格納されているアドレスが含まれている。
【００３２】
ここで、コマンドの発生や入力がなかった場合には、ステップＳ２１の待ちうけ判定を繰り返す。一方、コマンドの発生や入力があった場合、当該ＣＰＵ２２は、そのコマンドの種別がパラメータ書き換えコマンドであるかＤＥＳ演算コマンドであるかを判定する（ステップＳ２２）。
ここで、コマンドの種別がパラメータ書き換えコマンドであった場合、ＣＰＵ２２に認証ＡＰ２１ａのデータ変換実行コード２１ａｂがロードされる。そして、データ変換実行コード２１ａｂがロードされたＣＰＵ２２は、前述したステップＳ１１〜Ｓ１６と同様な処理により、変形換字テーブル２１ｃとマスクパラメータ２１ｄとを新たに生成し、これらをＥＥＰＲＯＭ２１に格納する（ステップＳ２３）。
【００３３】
一方、コマンドの種別がＤＥＳ演算コマンドであった場合、ＣＰＵ２２に認証ＡＰ２１ａの変形ＤＥＳ実行コード２１ａａがロードされる。そして、変形ＤＥＳ実行コード２１ａａがロードされたＣＰＵ２２は、ＥＥＰＲＯＭ２１に格納された変形換字テーブル２１ｃ及びマスクパラメータ２１ｄを用いてマスクＤＥＳ演算を行う（ステップＳ２４）。
図７は、変形ＤＥＳ実行コード２１ａａがロードされたＣＰＵ２２（「暗号演算部」に相当）が実行するマスクＤＥＳ演算の詳細を例示した図である。以下、この図に従い、マスクＤＥＳ演算の詳細を説明する。
【００３４】
まず、当該ＣＰＵ２２は、ＤＥＳ演算コマンドが有するアドレスが指定するＲＡＭ２３等の記憶領域から暗号化対象のメッセージＭを読み込み、さらにＥＥＰＲＯＭ２１からマスクパラメータＸを読み込む。そして、当該ＣＰＵ２２は、これらの排他的論理和〔Ｍ（＋）Ｘ〕を算出してレジスタ２２ａに格納する（ステップＳ３１）。
次に、変形ＤＥＳ実行コード２１ａａがロードされたＣＰＵ２２は、レジスタ２２ａに格納されたＭ（＋）Ｘに対し、ＤＥＳで定義されている初期転置（初期置換）ＩＰを施し、その演算結果をレジスタ２２ａに格納する（ステップＳ３２）。そして、当該ＣＰＵ２２は、ステップＳ３２でレジスタ２２ａに格納された値に対し、後述する変形ＤＥＳ演算を１６段繰り返し、その演算結果をレジスタ２２ａに格納する（ステップＳ３３）。
【００３５】
次に、当該ＣＰＵ２２は、ステップＳ３３でレジスタ２２ａに格納された上位半分のビット及び下位半分のビットのそれぞれとマスクパラメータＸ４との排他的論理和を求め（ステップＳ３４，Ｓ３５）、各演算結果のビット位置を入れ換えたビット列をレジスタ２２ａに格納する。次に、当該ＣＰＵ２２は、レジスタ２２ａから当該ビット列を読み込み、そのＦＰ演算を行い（ステップＳ３６）、レジスタ２２ａに格納する。なお、ＦＰ演算とは、ＤＥＳで定義されている最終転置を意味する。最後に、当該ＣＰＵ２２は、レジスタ２２ａからステップＳ３６の演算結果を読み込み、ＥＥＰＲＯＭ２１からマスクパラメータＸを読み込み、これらの排他的論理和演算を行い、その演算結果をメッセージＭの変形ＤＥＳ暗号ＤＥＳｋ（Ｍ）として出力する（ステップＳ３７）。
【００３６】
図８（ａ）は、図７の変形ＤＥＳ演算（ステップＳ３３）の１段分の処理を示した図であり、図８（ｂ）は、図８（ａ）のステップＳ４３の処理を示した図である。以下、これらの図に沿って、ステップＳ３３の１段分の処理の詳細を説明する。
まず、変形ＤＥＳ実行コード２１ａａがロードされたＣＰＵ２２は、レジスタ２２ａに格納された値の下位半分のビットを読み込み、ＤＥＳで定義されている拡張転置（拡大置換）ＥＰを施し（ステップＳ４１）、その演算結果をレジスタ２２ａに格納する。次に、次に、ステップＳ４１でレジスタ２２ａに格納された値と、ＤＥＳのサブ鍵Ｋｎ（例えば、予めＥＥＰＲＯＭ２１に格納）との排他的論理和を求め、これをレジスタ２２ａに格納する（ステップＳ４２）。次に、当該ＣＰＵ２２は、ステップＳ４２でレジスタ２２ａに格納された４８ビットの値を６ビットずつに分け、それぞれにＤＥＳで定義されているＭＳ−Ｂｏｘ＿１〜８による換字処理を実行し（ステップＳ５０−１〜８）、その演算結果のビットを結合した３２ビットの値をレジスタ２２ａに格納する（ステップＳ４３）。そして、当該ＣＰＵ２２は、この３２ビットの値に対し、ＤＥＳで定義された転置Ｐを施し、レジスタ２２ａに格納する（ステップＳ４４）。さらに、当該ＣＰＵ２２は、ステップＳ４４でレジスタ２２ａに格納された値と、ステップＳ４１で用いられなかった上位半分のビットとの排他的論理和を求め、これをレジスタ２２ａに格納する（ステップＳ４５）。また、当該ＣＰＵ２２は、ステップＳ４１でレジスタ２２ａに格納された値と、ＥＥＰＲＲＯＭ２１に格納されているマスクパラメータＸ４とを読み込み、これらの排他的論理和を求めてレジスタ２２ａに格納する（ステップＳ４６）。最後に、ステップＳ４５でレジスタ２２ａに格納した値を上位半分のビットとし、ステップＳ４６でレジスタ２２ａに格納した値を下位半分のビットとした値をレジスタ２２ａに格納する。
【００３７】
〔第２の実施の形態〕
本形態は、第１の実施の形態の変形例であり、ＡＥＳをベースとした暗号方式に本発明を適用した例である。なお、以下では、第１の実施の形態との相違点を中心に説明を行い、第１の実施の形態と共通する部分については説明を省略する。
＜構成＞
全体構成は、図１に例示した第１の実施の形態のものと同様であるが、サーバ装置１０の代わりにサーバ装置１１０が設けられ、ＩＣカード２０の代わりにＩＣカード１２０が設けられる点が第１の実施の形態と相違する。
【００３８】
＜サーバ装置＞
図９は、本形態におけるサーバ装置１１０の構成を例示したブロック図である。なお、図９において第１の実施の形態と共通する部分については図２と同じ符号を付した。
図９に示すように、この例のサーバ装置１１０は、補助記憶装置１１、各処理を実行するＣＰＵ１２、ＲＡＭ１３、通信部１４及びバス１５から構成されている。この例の補助記憶装置１１には、変形ＡＥＳ実行コード１１１ａａとデータ変換実行コード１１１ａｂと制御コード１１１ａｃとを有する認証ＡＰ１１１ａと、その認証ＡＰ１１１ａにサーバ装置１１０の署名用秘密鍵で署名された証明書１１１ｂが一対となり保管されている。さらに補助記憶装置１１には、ダウンロード制御コード１１ｃやデータ値生成命令コード１１ｄも保管されている。
【００３９】
ここで、変形ＡＥＳ実行コード１１１ａａは、演算処理内容は変形換字テーブルやマスクパラメータ従って変化するが、その演算結果はＡＥＳ暗号アルゴリズムによるものと等しくなるマスクＡＥＳ演算を、ＩＣカード１２０のＣＰＵに実行させるためのプログラムである。また、データ変換実行コード１１１ａｂは、マスクＡＥＳ演算に必要な変形換字テーブルやマスクパラメータの生成処理を、ＩＣカード１２０のＣＰＵに実行させるためのプログラムである。また、制御コード１１１ａｃは、変形換字テーブル等の更新やマスクＡＥＳ演算の制御を、ＩＣカード１２０のＣＰＵに実行させるためのプログラムである。なお、本形態の変形換字テーブルとは、ＡＥＳの換字テーブルをデータ変換実行コード１１１ａｂが示す処理に従って変形したテーブルである。また、本形態のマスクパラメータとは、当該変形に伴って暗号演算に必要となる付加演算に利用される被演算子である。
【００４０】
＜ＩＣカード＞
図１０は、本形態におけるＩＣカード１２０の構成を例示したブロック図である。
図１０に示すように、この例のＩＣカード１２０には、ＥＥＰＲＲＯＭ２１、レジスタ２２ａを具備するＣＰＵ２２、ＲＡＭ２３、乱数生成器２４、通信部２５及びバス２６が搭載されている。
ここで、初期段階のＥＥＰＲＯＭ２１内には、第１の実施の形態と同様な公開鍵証明書２１ｅやダウンロード制御コード２１ｆや２１ｇが格納されている。また、サーバ装置１１０からのダウンロードによって、ＥＥＰＲＯＭ２１内には、変形ＡＥＳ実行コード１２１ａａ、データ変換実行コード１２１ａｂ及び制御コード１２１ａｃを具備する認証ＡＰ１２１ａと、証明書２１ｂとが格納される。さらに、ＩＣカード１２０での処理に応じ、ＥＥＰＲＯＭ２１内には変形換字テーブル１２１ｃ及びマスクパラメータ１２１ｄが格納される。さらに、本形態では、マスクＡＥＳ演算前に、マスクＡＥＳ演算コマンドの引数として、変形換字テーブルとマスクパラメータとを書き換えることを許容するか否かを決定付ける書き換え不可能オプションを設定できる。これは、書き換え不可能オプション変数１２１ｊの値としてＥＥＰＲＯＭ２１に格納され、この値が１であるときには、変形換字テーブル及びマスクパラメータの書き換えの許可しない処理が実行され、０であるときにはこれらの買い替えを許可しうる処理が実行される。また、暗号ライブラリの内部変数として、演算カウンタと変換済みフラグが用いられる。これらは、演算カウンタ値１２１ｉ及び変換済みフラグ変数１２１ｈの値としてＥＥＰＲＯＭ２１に格納される。
【００４１】
＜認証ＡＰ設定処理＞
本形態の認証ＡＰ設定処理のうち、ＩＣカード１２０が認証ＡＰをダウンロードするまでの処理は、サーバ装置１０及びＩＣカード２０が、サーバ装置１１０及びＩＣカード１２０に置き換わり、認証ＡＰ１１ａ，２１ａが認証ＡＰ１１１ａ，１２１ａに置き換わる点以外は第１の実施の形態（ステップＳ１〜Ｓ４）と同様である。以下では、認証ＡＰ１２１ａをダウンロードしたＩＣカード１２０が実行する変形添え字テーブル１２１ｃとマスクパラメータ１２１ｄの生成処理のみを説明する。
【００４２】
図１１は、本形態における変形添え字テーブル１２１ｃとマスクパラメータ１２１ｄの生成処理を説明するためのフローチャートである。
まず、データ変換実行コード１２１ａｂがロードされたＣＰＵ２２は、乱数生成器２４等で生成された１２８ビットの乱数値Ｘを取得し、これをマスクパラメータＸとしてＥＥＰＲＯＭ２１に格納する（ステップＳ９１）。次に、当該ＣＰＵ２２は、ＥＥＰＲＯＭ２１に格納されたマスクパラメータＸを読み込み、１２８ビットのマスクパラメータＸ１＝ＩｎｖＳｈｉｆｔＲｏｗｓ（ＩｎｖＭｉｘＣｏｌｕｍｎｓ（Ｘ））
を算出してＥＥＰＲＯＭ２１に格納する（ステップＳ９２）。なお、ＩｎｖＳｈｉｆｔＲｏｗｓ（α）は、αに対し、ＡＥＳで定義されている逆行シフト演算を施すことを意味する。また、ＩｎｖＭｉｘＣｏｌｕｍｎｓ（α）は、αに対し、ＡＥＳで定義されている逆列混合演算を施すことを意味する。また、当該ＣＰＵ２２は、ＥＥＰＲＯＭ２１に格納されたマスクパラメータＸを読み込み、１２８ビットのマスクパラメータ
Ｘ２＝ＩｎｖＭｉｘＣｏｌｕｍｎｓ（Ｘ）
を算出してＥＥＰＲＯＭ２１に格納する（ステップＳ９３）。以上により、ＥＥＰＲＯＭ２１には、マスクパラメータ（Ｘ，Ｘ１，Ｘ２）１２１ｄが格納された。
【００４３】
次に、当該ＣＰＵ２２は、上述のように算出したマスクパラメータＸ，Ｘ１と、認証ＡＰ１２１ａ内に予め格納されている１個のＡＥＳの換字テーブルＳｕｂＢｙｔｅｓ（Ａ）とをＥＥＰＲＯＭ２１から読み込む。そして、当該ＣＰＵ２２は、以下の演算によって、１６個の変形換字テーブル〔Ｍ−ＳｕｂＢｙｔｅｓ＿ｎ（Ａ）（ｎ＝１，...，１６）〕１２１ｃを算出してＥＥＰＲＯＭ２１に格納する（ステップＳ９４）。
M-SubBytes_n(A)=SubBytes(A(+)X_n)(+)X1_n(n=1,...,16)  …(2)
ここで、式（２）中の関数及びパラメータの意味は以下の通りである。
Ａ：Ｍ−ＳｕｂＢｙｔｅｓ＿ｎ（Ａ）による換字処理の対象となる８ビットの値。Ｍ−ＳｕｂＢｙｔｅｓ＿ｎ（Ａ）のアドレスを示す。
【００４４】
ＳｕｂＢｙｔｅｓ（α）：ＡＥＳの換字テーブルに従い、入力された８ビットの値αを８ビットの値に変換する処理。
Ｘ＿ｎ：Ｘのうちビット位置８＊（ｎ−１）から８＊（ｎ−１）＋７の範囲に該当する８ビットの値。
Ｘ１＿ｎ：Ｘ１のうちビット位置８＊（ｎ−１）から８＊（ｎ−１）＋７の範囲に該当する８ビットの値。
すなわち、ＡＥＳの換字テーブルを表す１個の配列について、配列のアドレスと要素とをそれぞれＸ及びＸ１の所定範囲の値で変形した１６個の配列を変形換字テーブル１２１ｃとして、ＥＥＰＲＯＭ２１に格納する。
【００４５】
＜変形ＡＥＳ実行処理及び認証ＡＰ更新処理＞
以上のように認証ＡＰが設定されたＩＣカード１２０は、制御コード１２１ａｃがロードされたＣＰＵ２２の制御のもと、他のＡＰ２１ｇの実行に伴い発生したコマンドをトリガとして各処理を実行する。ここで、他のＡＰ２１ｇの実行に伴い発生するコマンドは、変形換字テーブル１２１ｃとマスクパラメータ１２１ｄとを書き換えるデータ値生成命令であるパラメータ書き換えコマンドと、実際にマスクＡＥＳ演算を行う暗号演算命令であるＡＥＳ演算コマンドとの２種類である。他のＡＰ２１ｇがロードされたＣＰＵ２２が、その処理過程でＥＥＰＲＯＭ２１内の変形換字テーブル１２１ｃとマスクパラメータ１２１ｄの書き換えを要求する場合、当該ＣＰＵ２２はパラメータ書き換えコマンドを発生させる。また、当該ＣＰＵ２２が、その処理過程でマスクＡＥＳ演算を必要とする場合、当該ＣＰＵ２２はＡＥＳ演算コマンドを発生させる。なお、このＡＥＳ演算コマンドには、マスクＡＥＳ演算を行う対象となるメッセージＭが格納されているアドレスが含まれている。
【００４６】
図１２は、本形態の変形ＡＥＳ実行処理及び認証ＡＰ更新処理を説明するためのフローチャートである。以下、このフローチャートに沿って説明を行っていく。
まず、制御コード１２１ａｃがロードされたＣＰＵ２２は、上記コマンドの発生があったか否かを判定する（ステップＳ１０１）。ここで、コマンドの発生がなかった場合には、ステップＳ１０１の待ちうけ判定を繰り返す。一方、コマンドの発生があった場合、当該ＣＰＵ２２は、そのコマンドの種別がパラメータ書き換えコマンドであるかＡＥＳ演算コマンドであるかを判定する（ステップＳ１０２）。
【００４７】
ここで、コマンドの種別がパラメータ書き換えコマンドであると判定された場合、データ変換実行コード１２１ａｂがＣＰＵ２２にロードされ、当該ＣＰＵ２２（「フラグ演算部」に相当）は、まずＥＥＰＲＯＭ２１（「フラグメモリ」に相当）の変更済みフラグ変数１２１ｈの値を０（「第１定数」に相当）とする（ステップＳ１１３）。次に、当該ＣＰＵ２２は、乱数値を生成し、その乱数値に基づき新たな変形換字テーブル１２１ｃとマスクパラメータ１２１ｄを生成し、これらでＥＥＰＲＯＭ２１の内容を書き換える（ステップＳ１１４）。なお、変形換字テーブル１２１ｃとマスクパラメータ１２１ｄの生成手順は、ステップＳ９１〜Ｓ９４と同様である。この書き換え終了後、当該ＣＰＵ２２は、ＥＥＰＲＯＭ２１の変更済みフラグ変数１２１ｈの値を１（「第２定数」に相当）とし、処理を終了する（ステップＳ１１５）。
【００４８】
一方、ステップＳ１０２において、コマンドの種別がＡＥＳ演算コマンドであると判定されると、変形ＡＥＳ実行コード１２１ａａがＣＰＵ２２にロードされ、当該ＣＰＵ２２は、引き続き、ＥＥＰＲＯＭ２１に格納された変換済みフラグ変数１２１ｈの値を確認する（ステップＳ１０３）。
ここで、変換済みフラグ変数１２１ｈの値が０であった場合、変形換字テーブル１２１ｃとマスクパラメータ１２１ｄの書き換え中に動作が異常終了するなど、何らかの理由で正しい変形換字テーブル１２１ｃとマスクパラメータ１２１ｄがＥＥＰＲＯＭ２１に格納されていないと推測される。そこで、この場合にはＣＰＵ２２にデータ変換実行コード１２１ａｂがロードされ、当該ＣＰＵ２２は、ステップＳ１１３〜Ｓ１１５と同様な手順により、変形換字テーブル１２１ｃとマスクパラメータ１２１ｄの書き換えを実施する（ステップＳ１０９〜Ｓ１１１）。その書き換えが終了後、当該ＣＰＵ２２は、ＥＥＰＲＯＭ２１の演算カウンタ値１２１ｉを０に設定し（ステップＳ１１２）、再び、ステップＳ１０３の変換済みフラグ変数の判定処理に戻る。
【００４９】
一方、ステップＳ１０３において、変換済みフラグ変数１２１ｈの値が１であると判断された場合、制御コード１２１ａｃがロードされたＣＰＵ２２は、変形換字テーブル１２１ｃとマスクパラメータ１２１ｄが正しくＥＥＰＲＯＭ２１に格納されていると判断し、次の書き換え不可能オプションの判定処理に移る。
書き換え不可能オプションの判定処理では、当該ＣＰＵ２２は、ＥＥＰＲＯＭ２１に格納された書き換え不可能オプション変数１２１ｊの値を判定する（ステップＳ１０４）。ここで、書き換え不可能オプション変数１２１ｊの値が０であった場合には、当該ＣＰＵ２２は、引き続き、書き換え判定を行う（ステップＳ１０５）。この書き換え判定は、予め制御コード２１ｂに設定した判定条件に基づいて行われる。例えば、マスクＡＥＳ演算が１００回未満なら書き換えを行わず、１００回に達したら書き換えを行う、などの判定条件をプログラム内に設定しておく。このように変形換字テーブル１２１ｃとマスクパラメータ１２１ｄを書き換えることなくマスクＡＥＳ演算ができる上限回数を設定することで、サイドチャネル攻撃への耐性を高めることができる。
【００５０】
ここで、書き換えを行うと判定されると、前述したステップＳ１０９以降の処理が実行される。一方、書き換えを行わないと判定されると、変形ＡＥＳ実行コード１２１ａａがＣＰＵ２２にロードされる。そして当該ＣＰＵ２２は、ＥＥＰＲＯＭ２１に格納された変形換字テーブル１２１ｃ及びマスクパラメータ１２１ｄを用い、マスクＡＥＳ演算を実行する（ステップＳ１０６）。その後、当該ＣＰＵ２２は、ＥＥＰＲＯＭ２１に格納された演算カウンタ値１２１ｉに１を加え、マスクＡＥＳ演算の結果をコマンドの発生元に返却し、処理を終了する（ステップＳ１０８）。
【００５１】
なお、マスクＡＥＳ演算の処理時間をできるだけ短くしたいときや、電源が不安定である判断される場合、上述の書き換え不可能オプション変数１２１ｊを１に設定しておくのが好適である。上述のように、この書き換え不可能オプション変数１２１ｊが１の場合、変形換字テーブル１２１ｃとマスクパラメータ１２１ｄの書き換えが行われることなく、すぐにマスクＡＥＳ演算処理が行われる。よって、高速に処理ができたり、パラメータの書き換え中に電源断が起こり、変形換字テーブル１２１ｃとマスクパラメータ１２１ｄが正しく格納されなかったりすることを防ぐことができる。また、ＩＣカード１２０のインタフェースが接触と非接触のコンビネーション型のときは、使用しているインタフェースに応じ、接触時には書き換え不可能オプション変数１２１ｊを０に、非接触時には書き換え不可能オプション変数１２１ｊを１にするのが好適である。これは、非接触インタフェースで動作しているときには、演算中に電源断となる可能性が、接触インタフェース動作ときに比べて高いためである。
【００５２】
次に、図１２のステップＳ１０６の処理について説明する。
図１３（ａ）（ｂ）は、この処理の詳細を説明するためのフローチャートである。
まず、変形ＡＥＳ実行コード１２１ａａがロードされたＣＰＵ２２は、ＡＥＳ演算コマンドに含まれるアドレスが指定するＲＡＭ２３等の記憶領域から暗号化対象となるメッセージＭを読み込み、ＥＥＰＲＯＭ２１からマスクパラメータＸを読み込む。そして、当該ＣＰＵ２２は、これらの排他的論理和を求め、レジスタ２２ａに格納する（ステップＳ１３１）。次に、当該ＣＰＵ２２は、このレジスタ２２ａに格納された値を読み込み、さらに予め変形ＡＥＳ実行コード１２１ａａに設定されているラウンドキーを用いてＡＥＳで定義されているＡｄｄＲｏｕｎｄＫｅｙ変換を行う。そして、その演算結果ＡｄｄＲｏｕｎｄＫｅｙ（Ｍ）（＋）Ｘはレジスタ２２ａに格納される（ステップＳ１３２）。
【００５３】
次に、当該ＣＰＵ２２は、レジスタ２２ａに格納されているＡｄｄＲｏｕｎｄＫｅｙ（Ｍ）（＋）Ｘを読み込み、ＥＥＰＲＯＭ２１から変形換字テーブル１２１ｃを読み込む。そして、当該ＣＰＵ２２は、この変形換字テーブル１２１ｃを用い、ＡｄｄＲｏｕｎｄＫｅｙ（Ｍ）（＋）Ｘに対するＭ−ＳｕｂＢｙｔｅｓ演算を行う（ステップＳ１３３）。即ち、ＡｄｄＲｏｕｎｄＫｅｙ（Ｍ）（＋）Ｘを８ビットごとの１６個のビット列に分離し、各ビット列に対し、変形換字テーブル１２１ｃを用いた
Ｍ−ＳｕｂＢｙｔｅｓ＿ｎ換字演算（式（２）参照）を行い（ステップＳ１５１−１〜１６）、各演算結果であるビット列を結合する。そして、この演算結果はレジスタ２２ａに格納される。
【００５４】
次に、当該ＣＰＵ２２は、ステップＳ１３３でレジスタ２２ａに格納された値に対し、ＡＥＳで定義されたＳｈｉｆｔＲｏｗｓ変換を行い（ステップＳ１３４）、さらにその結果対し、ＡＥＳで定義されたＭｉｘＣｏｌｕｍｎｓ変換を行い（ステップＳ１３５）、その演算結果に対し、ＡｄｄＲｏｕｎｄＫｅｙ変換を実行し（ステップＳ１３６）、その演算結果Ｓｔａｔｅ１（＋）Ｘをレジスタ２２ａに格納する。そして、当該ＣＰＵ２２は、ここでレジスタ２２ａに格納されている演算結果を入力としてステップＳ１３３〜Ｓ１３６と同様なラウンド処理を行い、さらにその出力値を次のラウンドの入力とする処理を合計９ラウンド繰り返す。
【００５５】
その後、当該ＣＰＵ２２は、レジスタ２２ａに格納されている９ラウンド目の出力値Ｓｔａｔｅ９（＋）Ｘを読み込み、ＥＥＰＲＯＭ２１から変形換字テーブル１２１ｃを読み込み、９ラウンド目の出力値Ｓｔａｔｅ９（＋）Ｘに対するＭ−ＳｕｂＢｙｔｅｓ演算を行う（ステップＳ１３７）。さらに、当該ＣＰＵ２２は、レジスタ２２ａからこの演算結果を読み込み、その演算結果に対し、ＳｈｉｆｔＲｏｗｓ変換を行い（ステップＳ１３８）、さらにその演算結果に対し、ＡｄｄＲｏｕｎｄＫｅｙ変換を実行し（ステップＳ１３９）、その演算結果Ｓｔａｔｅ１０（＋）ＩｎｖＭｉｘＣｏｌｕｍｎｓ（Ｘ）を
レジスタ２２ａに格納する。
【００５６】
最後に、当該ＣＰＵ２２は、レジスタ２２ａに格納されているＳｔａｔｅ１０（＋）ＩｎｖＭｉｘＣｏｌｕｍｎｓ（Ｘ）を読み込み、ＥＥＰＲＯＭ２１に格納されているマスクパラメータＸ２を読み込み、これらの排他的論理和を算出し、それをマスクＡＥＳの演算結果ＡＥＳ１２８（Ｍ）として出力する（ステップＳ１４０）。なお、ここでは説明を省略するが、マスクＡＥＳの復号演算についても、各種パラメータを変更することにより同様に実行できる。
以上説明したように、この発明によれば、マスク演算手法を使用する暗号演算装置において、全ての暗号処理装置で異なる乱数を使用することができ、セキュリティ面で好適である。また、暗号処理装置をソフトウェアプログラムで実装した場合でも、ソフトウェアプログラムと添付する証明書は一組で良く、安価に製造できる。
【００５７】
なお、本発明は上述の実施の形態に限定されるものではない。例えば、図１２に示したような処理を、第１の実施の形態におけるマスクＤＥＳ演算で実現してもよい。また、上述の各形態では、ＩＣカードを暗号処理装置としたが、携帯電話、パームトップコンピュータ、パーソナルコンピュータ等を暗号処理装置としてもよい。また、上述の各形態ではＤＥＳやＡＥＳに対して本発明を適用することとしたが、他の暗号系に本発明の概念を適用することとしてもよい。その他、本発明の趣旨を逸脱しない範囲で適宜変更が可能であることはいうまでもない。また、上述の各種の処理は、記載に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。
【００５８】
また、上述の構成をコンピュータによって実現する場合、各装置が有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。
この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等どのようなものでもよいが、具体的には、例えば、磁気記録装置として、ハードディスク装置、フレキシブルディスク、磁気テープ等を、光ディスクとして、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ（Random Access Memory）、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）等を、光磁気記録媒体として、ＭＯ（Magneto-Optical disc）等を、半導体メモリとしてＥＥＰ−ＲＯＭ（Electronically Erasable and Programmable-Read Only Memory）等を用いることができる。
【００５９】
また、このプログラムの流通は、例えば、そのプログラムを記録したＤＶＤ、ＣＤ−ＲＯＭ等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させる構成としてもよい。
このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の記憶装置に格納する。そして、処理の実行時、このコンピュータは、自己の記録媒体に格納されたプログラムを読み取り、読み取ったプログラムに従った処理を実行する。また、このプログラムの別の実行形態として、コンピュータが可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することとしてもよく、さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。また、サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるＡＳＰ（Application Service Provider）型のサービスによって、上述の処理を実行する構成としてもよい。なお、本形態におけるプログラムには、電子計算機による処理の用に供する情報であってプログラムに準ずるもの（コンピュータに対する直接の指令ではないがコンピュータの処理を規定する性質を有するデータ等）を含むものとする。
【００６０】
また、この形態では、コンピュータ上で所定のプログラムを実行させることにより、本装置を構成することとしたが、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。
【産業上の利用可能性】
【００６１】
本発明により、サイドチャネル攻撃に強い暗号処理を行うことが可能なＩＣカードや携帯電話等を構成することが可能となる。
【図面の簡単な説明】
【００６２】
【図１】図１は、第１の実施の形態における暗号処理システムを例示した図である。
【図２】図２は、第１の実施の形態におけるサーバ装置の構成を例示したブロック図である
【図３】図３は、第１の実施の形態におけるＩＣカードの構成を例示したブロック図である。
【図４】図４は、認証ＡＰ設定処理を説明するためのフローチャートである。
【図５】図５は、ステップＳ６の処理の詳細を説明するためのフローチャートである。
【図６】図６は、変形ＤＥＳ実行処理及び認証ＡＰ更新処理を説明するためのフローチャートである。
【図７】図７は、変形ＤＥＳ実行コードがロードされたが実行するマスクＤＥＳ演算の詳細を例示した図である。
【図８】図８（ａ）は、図７の変形ＤＥＳ演算（ステップＳ３３）の１段分の処理を示した図であり、図８（ｂ）は、図８（ａ）のステップＳ４３の処理を示した図である。
【図９】図９は、第２の実施の形態におけるサーバ装置の構成を例示したブロック図である。
【図１０】図１０は、第２の実施の形態におけるＩＣカードの構成を例示したブロック図である。
【図１１】図１１は、第２の実施の形態における変形添え字テーブルとマスクパラメータの生成処理を説明するためのフローチャートである。
【図１２】図１２は、第２の実施の形態の変形ＡＥＳ実行処理及び認証ＡＰ更新処理を説明するためのフローチャートである。
【図１３】図１３（ａ）（ｂ）は、図１２のステップＳ１０７の処理の詳細を説明するためのフローチャートである。
【図１４】図１４は、マスク演算手法の概念図である。
【符号の説明】
【００６３】
１０，１１０  サーバ装置
２０，１２０  ＩＣカード（暗号処理装置）
【図１】
2007006184.tif 000003
【図２】
2007006184.tif 000004
【図３】
2007006184.tif 000005
【図４】
2007006184.tif 000006
【図５】
2007006184.tif 000007
【図６】
2007006184.tif 000008
【図７】
2007006184.tif 000009
【図８】
2007006184.tif 000010
【図９】
2007006184.tif 000011
【図１０】
2007006184.tif 000012
【図１１】
2007006184.tif 000013
【図１２】
2007006184.tif 000014
【図１３】
2007006184.tif 000015
【図１４】
2007006184.tif 000016