(57)【特許請求の範囲】
【請求項１】
ブロック・サイファー入力に対してブロック・サイファーを計算し、ブロック・サイファー出力を生成するための暗号装置であって、前記ブロック・サイファーの計算は符号化された値に作用し、符号化された値はデータ値を状態値と一緒にして暗号学的かつ可逆な符号化をしたものであり、当該暗号装置は、前記ブロック・サイファーを実装する前記ブロック・サイファー入力を符号化したものに対する暗号学的処理の複数ラウンドを適用するよう構成されており、当該暗号装置は、
・前記ブロック・サイファーを実装する暗号学的処理の前記複数ラウンドの最終ラウンドを適用するよう構成されたラウンド関数ユニットを有し、
・前記複数ラウンドの最終ラウンドへの入力は、第一のデータ入力および第一の状態入力を符号化している第一の符号化された入力と、第二のデータ入力および第二の状態入力を符号化している第二の符号化された入力とを含み、
・前記ラウンド関数ユニットは、前記第二の符号化された入力を受け取り、前記第二の符号化された入力の前記第二のデータ入力に内部耐タンパー性シフト関数によるシフト値を適用して修正し、続いて前記の修正された第二のデータ入力に暗号学的ラウンド関数を適用し、該暗号学的ラウンド関数の出力に前記第一の符号化された入力の前記第一のデータ入力を加えて符号化された出力を生成するよう構成されており、耐タンパー性シフト関数によるシフト値は、符号化された値における前記状態値が期待される状態値に等しくない場合には符号化された値におけるデータ値を修正し、それ以外の場合には前記データ値を修正せず、
当該暗号装置はさらに、
・前記第二の符号化された入力を受け取り、前記第二の符号化された入力の前記第二のデータ入力に第一の出力耐タンパー性シフト関数によるシフト値を適用して修正し、続いて前記の修正された第二のデータ入力を復号して前記ブロック・サイファー出力の第一の部分を得るよう構成された第一の出力ユニットと、
・前記符号化された出力を受け取り、前記符号化された出力のデータ値に第二の出力耐タンパー性シフト関数によるシフト値を適用して修正し、続いてその修正されたデータ値を復号して前記ブロック・サイファー出力の第二の部分を得るよう構成された第二の出力ユニットとを有する、
暗号装置。
【請求項２】
符号化された値は符号化されたサブ値のシーケンスを含み、符号化されたサブ値はデータ・サブ値を対応する状態サブ値と一緒にして暗号学的かつ可逆な符号化をして単一の符号化されたサブ値にしたものであり、耐タンパー性シフト関数は、符号化された値におけるそれぞれのデータ・サブ値を修正するための耐タンパー性シフト・サブ関数のシーケンスを含む、請求項１記載の暗号装置。
【請求項３】
前記第二の出力耐タンパー性シフト関数のそれぞれの耐タンパー性シフト・サブ関数は、
・前記第二の符号化された入力の状態サブ値をすべての可能な状態値にわたって変化させた場合に対する前記第二の出力耐タンパー性シフト・サブ関数の出力すべての集合がすべての可能なデータ・サブ値を含むように構成される、
請求項２記載の暗号装置。
【請求項４】
前記内部耐タンパー性シフト関数によるシフト値を適用して修正する処理、前記第一の出力耐タンパー性シフト関数によるシフト値を適用して修正する処理、および前記第二の出力耐タンパー性シフト関数によるシフト値を適用して修正する処理がテーブルによって実装される、請求項１ないし３のうちいずれか一項記載の暗号装置。
【請求項５】
前記ラウンド関数ユニットがさらに、前記第二の符号化された入力の前記第二の状態入力に状態ラウンド関数を適用するよう構成されている、請求項１ないし４のうちいずれか一項記載の暗号装置。
【請求項６】
前記ラウンド関数ユニットの前記符号化された入力および出力のデータ値についての前記ラウンド関数ユニットの拡散性が、前記ラウンド関数ユニットの前記符号化された入力および出力の状態値についての前記ラウンド関数ユニットの拡散性と同じである、請求項１ないし５のうちいずれか一項記載の暗号装置。
【請求項７】
前記ブロック・サイファーがファイステル構造をもつ、請求項１ないし６のうちいずれか一項記載の暗号装置。
【請求項８】
前記符号化されたブロック・サイファー入力における状態値に対する計算がファイステル構造である、請求項１ないし７のうちいずれか一項記載の暗号装置。
【請求項９】
前記ブロック・サイファーがDESまたはトリプルDESである、請求項７または８記載の暗号装置。
【請求項１０】
請求項５および請求項９の組み合わせとしての暗号装置であって、
前記状態ラウンド関数が
【数１】
0006788610.tif 000049
であり、πiは状態値に対する全単射であり、
【数２】
0006788610.tif 000050
であり、εi,jは、ωR,15におけるj番目のデータ値がi番目のSボックスの入力に影響する場合にはεi,j＝1であり、それ以外の場合には0である、または、
前記状態ラウンド関数が
【数３】
0006788610.tif 000051
であり、Kσは状態鍵である、
暗号装置。
【請求項１１】
耐タンパー性シフト関数によるシフト値を適用して修正することが、前記符号化された値におけるデータ値を、前記符号化された値における状態値と期待される状態値との間の差を前記データ値に加えることによって修正する、請求項１ないし１０のうちいずれか一項記載の暗号装置。
【請求項１２】
前記内部耐タンパー性シフト関数および前記第一および第二の出力耐タンパー性シフト関数が同じ関数である、請求項１ないし１１のうちいずれか一項記載の暗号装置。
【請求項１３】
状態値およびデータ値がビット・サイズをもち、状態値のビット・サイズはデータ値のビット・サイズの倍数である、請求項１ないし１２のうちいずれか一項記載の暗号装置。
【請求項１４】
コンピュータで実装される暗号装置がブロック・サイファー入力に対してブロック・サイファーを計算してブロック・サイファー出力を生成する暗号学的方法であって、前記ブロック・サイファーの計算は符号化された値に作用し、符号化された値はデータ値を状態値と一緒にして暗号学的かつ可逆な符号化をしたものであり、当該方法は、
・前記暗号装置のラウンド関数ユニットが、前記ブロック・サイファーを実装する前記ブロック・サイファー入力を符号化したものに対する暗号学的処理の複数ラウンドを適用する段階と、
・前記ラウンド関数ユニットが、前記ブロック・サイファーを実装する暗号学的処理の前記複数ラウンドの最終ラウンドを適用する段階であって、前記複数ラウンドの前記最終ラウンドへの入力は、第一のデータ入力および第一の状態入力を符号化している第一の符号化された入力と、第二のデータ入力および第二の状態入力を符号化している第二の符号化された入力とを含む、段階と、
・前記ラウンド関数ユニットが、前記第二の符号化された入力の前記第二のデータ入力に内部耐タンパー性シフト関数によるシフト値を適用して修正し、続いて前記の修正されたデータ入力に暗号学的ラウンド関数を適用し、該暗号学的ラウンド関数の出力に前記第一の符号化された入力の前記第一のデータ入力を加えて、符号化された出力を生成する段階であって、耐タンパー性シフト関数によるシフト値は、符号化された値における状態値が期待される状態値に等しくない場合には符号化された値におけるデータ値を修正し、それ以外の場合には前記データ値を修正しない、段階と、
・前記暗号装置の第一の出力ユニットが、前記第二の符号化された入力の前記第二のデータ入力に第一の出力耐タンパー性シフト関数によるシフト値を適用して修正し、次いで前記の修正された第二のデータ値を復号して前記ブロック・サイファー出力の第一の部分を取得する段階と、
・前記暗号装置の第二の出力ユニットが、前記符号化された出力のデータ値に第二の出力耐タンパー性シフト関数によるシフト値を適用して修正し、続いてその修正されたデータ値を復号して前記ブロック・サイファー出力の第二の部分を取得する段階とを含む、
方法。
【請求項１５】
コンピュータ上で実行されたときに請求項１４記載の方法を実行するよう構成されたコンピュータ・プログラム命令を有するコンピュータ・プログラム。
【請求項１６】
請求項１５記載のコンピュータ・プログラムを記憶しているコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はブロック・サイファーを計算するための暗号装置、ブロック・サイファーを計算するための暗号方法、コンピュータ・プログラムおよびコンピュータ可読媒体に関する。
【背景技術】
【０００２】
非特許文献１の論文において、データ暗号化規格（DES:  Data  Encryption  Standard）のホワイトボックス実装が呈示されている（下記ではChowとして言及され、参照により本稿に組み込まれる）。ホワイトボックス実装は、ホワイトボックス・コンテキストにおける好適に耐えるよう設計された暗号実装である。ホワイトボックス・コンテキストでは、攻撃者はソフトウェアの実装および実行を完全に見ることができる。それにも関わらず、ホワイトボックス実装はプログラムからの秘密鍵の抽出を防ぐことをねらいとする。
【０００３】
Chowは、完全にテーブル探索動作からなるDESの実装を形成している。いくつかの中間的な方法を使って、通常のサイファーがこの形での実装に変換される。これらすべてのテーブルを保護するために入力符号化および出力符号化が使われる。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】S.  Chow  et  al.、"A  White-Box  DES  Implementation  for  DRM  Applications"
【非特許文献２】Biham  et  al.、"Differential  Fault  Analysis  of  Secret  Key  Cryptosystems"
【発明の概要】
【発明が解決しようとする課題】
【０００５】
発明者は、ブロック・サイファーのテーブル・ベースの実装はいまだいくつかの攻撃に対して脆弱でありうることを見出した。発明者は、たとえホワイトボックス実装において変数を観察することから鍵が直接導出されないとしても、変数へのアクセスを使って、以前には物理的な攻撃の領域からしか知られていなかった攻撃を実行しうることを認識した。
【０００６】
たとえば、非特許文献２の論文において、電源電圧を変えることによってスマートカードに一過性の故障が導入され、DES計算に誤った結果を生成させる。結果として生じる誤りを解析することによって、秘密鍵についての情報が得られる。
【０００７】
発明者は、そのような物理的な故障攻撃が、ホワイトボックス実装を攻撃するために適応されうるとの洞察を得た。たとえ攻撃者に可視である変数の解析から秘密情報を得ることが可能でなかったとしても、攻撃者は、物理的な攻撃をエミュレートしようとして符号化された変数を修正することによって、秘密情報を導出できることがある。
【０００８】
実験において、発明者は、意図的に変数を修正することにより、Chowに記載されているDESホワイトボックス実装において使われている秘密鍵を実際に復元することができた。変数の意図的な修正が一過性の故障のはたらきをする。発明者は、洗練度を増した対策がホワイトボックスDES実装に対する故障攻撃をますます妨げ、あるいは完全に回避することができることを見出した。
【課題を解決するための手段】
【０００９】
ブロック・サイファーを計算するための暗号装置であって、ラウンド関数の前および符号化された値を復号する出力ユニットの前に耐タンパー性シフト関数をもつものが提案される。これらの関数は行なうことができる修正および結果として生じる誤りから学ばれるものを制約するので、これらの関数によって差分故障攻撃が妨げられる。本発明は独立請求項によって定義され、従属請求項は有利な実施形態を定義する。
【００１０】
暗号装置は電子装置であり、モバイル電子装置、たとえば携帯電話、セットトップボックス、コンピュータなどであってもよい。本稿に記載される暗号装置は、幅広い範囲の実際的な応用において適用されてもよい。そのような実際的な応用は、バンキング・アプリケーション、コンテンツ保護システム、通信システムなどを含む。
【００１１】
本発明に基づく方法は、コンピュータ実装される方法としてコンピュータ上で、あるいは専用ハードウェアにおいて、あるいは両者の組み合わせにおいて実装されてもよい。本発明に基づく方法のための実行可能コードはコンピュータ・プログラム・プロダクトに記憶されてもよい。コンピュータ・プログラム・プロダクトの例はメモリ・デバイス、光記憶デバイス、集積回路、サーバー、オンライン・ソフトウェアなどを含む。好ましくは、コンピュータ・プログラム・プロダクトは、前記プログラム・プロダクトがコンピュータ上で実行されるときに本発明に基づく方法を実行するためのコンピュータ可読媒体上に記憶された非一時的なプログラム・コード手段を有する。
【００１２】
ある好ましい実施形態では、コンピュータ・プログラムは、前記コンピュータ・プログラムがコンピュータ上で実行されるときに本発明に基づく方法のすべての段階を実行するよう適応されたコンピュータ・プログラム・コード手段を有する。好ましくは、コンピュータ・プログラムはコンピュータ可読媒体上に具現される。
【００１３】
本発明のもう一つの側面は、前記コンピュータ・プログラムをダウンロードのために利用可能にする方法を提供する。この側面は、前記コンピュータ・プログラムがたとえばアップルのアップストア、グーグルのプレイストアまたはマイクロソフトのウィンドウズ（登録商標）ストアにアップロードされるときおよび前記コンピュータ・プログラムがそのようなストアからダウンロードのために利用可能であるときに使われる。
【図面の簡単な説明】
【００１４】
本発明のさらなる詳細、側面および実施形態は、単に例として付属の図面を参照して記述される。図面の要素は簡明のために示されており、必ずしも縮尺どおりに描かれていない。図面において、すでに記述された要素に対応する要素は同じ参照符号をもつことがある。
【図１】暗号装置の実施形態の例を概略的に示す図である。
【図２．１】符号化された値の実施形態の例を概略的に示す図である。
【図２．２】符号化の実施形態の例を概略的に示す図である。
【図２．３】第一の符号化された入力の実施形態の例を概略的に示す図である。
【図２．４】第二の符号化された入力の実施形態の例を概略的に示す図である。
【図２．５】符号化された出力の実施形態の例を概略的に示す図である。
【図２．６】耐タンパー性シフト関数の実施形態の例を概略的に示す図である。
【図２．７】符号化されたサブ値のシーケンスの実施形態の例を概略的に示す図である。
【図２．８】耐タンパー性シフト・サブ関数の実施形態の例を概略的に示す図である。
【図３】ラウンド関数ユニットの実施形態の例を概略的に示す図である。
【図４】第一の出力ユニットの実施形態の例を概略的に示す図である。
【図５】第二の出力ユニットの実施形態の例を概略的に示す図である。
【図６．１】DESブロック・サイファーの実施形態の例を概略的に示す図である。
【図６．２】DESラウンド関数の実施形態の例を概略的に示す図である。
【図７】ブロック・サイファーを計算する方法の実施形態の例を概略的に示す図である。
【図８】ａは、ある実施形態に基づくコンピュータ・プログラムを有する書き込み可能部分を有するコンピュータ可読媒体を概略的に示す図であり、ｂは、ある実施形態に基づくプロセッサ・システムの表現を概略的に示す図である。
【符号の説明】
【００１５】
図面および詳細な説明において、参照符号、略記号および記号が使われる。図１〜図５に関係するものは次のようにまとめられる。
【００１６】
【表１−１】
0006788610.tif 000002
【００１７】
【表１−２】
0006788610.tif 000003
【００１８】
【表１−３】
0006788610.tif 000004
【発明を実施するための形態】
【００１９】
本発明は多くの異なる形での具現化ができるが、本開示は本発明の原理を例示するものと考えられ、本発明を図示され記述される個別的な実施形態に限定することは意図されていないという理解のもとに、一つまたは複数の個別的実施形態が図面に示され、本稿にて詳細に記述される。
【００２０】
以下では、理解のために、実施形態の要素が動作において記述される。しかしながら、それぞれの要素はそれらによって実行されると記述されている機能を実行するよう配列されることは明白であろう。
【００２１】
図１は、暗号装置１００の実施形態の例を概略的に示している。暗号装置１００の詳細の可能な実施形態は図２〜図５を参照して示される。
【００２２】
暗号装置１００は、ブロック・サイファー入力１０５に対してブロック・サイファーを計算し、ブロック・サイファー出力１０６を生成するよう構成されている。ブロック・サイファーは、入力に対して逐次に作用して出力を生成する複数のラウンドをもつ。のちにさらに説明するように、最終ラウンドがたとえばファイステル型サイファーにおいて使われるようなラウンド関数に基づくブロック・サイファーは、差分故障攻撃の特定の型に対して脆弱である。同じ入力に対してそのサイファーを二度作用させるが最終ラウンドにおける値を操作する――いわゆる故障――ことによって、攻撃者は、故障ありおよび故障なしでの出力を比較することによって、秘密の暗号鍵についての情報を得ることができる。伝統的には、差分故障攻撃は、サイファーが実行されるハードウェアを操作して、物理的に故障を引き起こすことによって実行される。たとえば、電圧スパイクが導入されて、ハードウェアが計算に故障を導入するようにしてもよい。発明者は、差分故障攻撃はホワイトボックス攻撃モデルにおいても実行できることを認識するに至った。ホワイトボックス攻撃モデルでは、攻撃者は、ブロック・サイファーが実行されている間、ブロック・サイファーの変数を操作する力をもつことが想定される。多くの応用について、ホワイトボックス攻撃モデルは、コンピュータ・データおよびソフトウェアの保護の現実によりよく似ている。
【００２３】
差分故障攻撃に対して脆弱なブロック・サイファーの一つのクラスは、いわゆるファイステル・サイファーである。ファイステル・サイファーのよく知られた例はデータ暗号化規格（DES）およびトリプルDES（TDEA）である。たとえばFIPS46-3参照。DESのほかにも他の多くのファイステル型のブロック・サイファーがある。発明者はさらに、最終ブロック・サイファー・ラウンドについてラウンド関数を使うブロック・サイファーは、ブロック・サイファーの他のラウンドがファイステル構造を使わないとしても、差分故障攻撃に対して脆弱でありうることを認識した。
【００２４】
図６．１は、FIPS46-3（参照により本願に組み込まれる）からコピーしたものだが、これは特定的にはDESブロック・サイファーを、一般的にはファイステル・ブロック・サイファーを示している。ブロック・サイバーはブロック・サイファー入力１０５’を受け取り、これに対して一連のブロック・サイファー・ラウンドが作用する。DESの場合は16ラウンド、トリプルDESについては48ラウンドがある。最初のブロック・サイファー・ラウンドはブロック・サイファー入力１０５’に対して作用し、次の諸ラウンドのそれぞれは直前のラウンドの出力に対して作用する。ブロック・サイファー・ラウンドにおいて、ラウンド関数fが直前のラウンドの出力の一部に適用される。ブロック・サイファー入力は、DESの場合、64ビットのデータ・サイズをもつ。各ブロック・サイファー・ラウンドはそのブロック・サイファー・ラウンド入力を修正して、ブロック・サイファー・ラウンド出力を生成する。すべてのブロック・サイファー・ラウンド入力および出力は同じデータ・サイズをもつ。DESはブロック・サイファーの最初と最後に初期転置および逆初期転置をもつことを注意しておく。これらは鍵に依存しないので暗号学的な意義はなく、本発明の目的のためには無視してもよい。これらはそれぞれ最初と最後のラウンドの一部とみなしてもよいし、あるいは本来のブロック・サイファー・ラウンドの前後に作用するブロック・サイファーの別個の部分とみなされてもよい。
【００２５】
データ暗号化規格は64ビット・ブロックの鍵付きのブロック・エンコードを記述している。鍵は公式には64ビットだが、そのうち56ビットのみが実際に暗号化において使われる。暗号化および解読は、ラウンドと呼ばれる16回の反復工程を使う。ラウンドr、1≦r≦16では、48ビットのラウンド鍵Kが使われ、そのビットは56鍵ビットの（ラウンドに依存する）部分集合である。
【００２６】
DESラウンド関数fは
【００２７】
【数１】
0006788610.tif 000005
によって与えられる。ここで、Pは32ビットの転置であり、Eは半数のビットを複製することにより長さ32のビット・ストリングを長さ48のビット・ストリングにマップする拡大マップである。SボックスSは長さ48のビット・ストリングを長さ32のビット・ストリングにマッピングするもので、6ビットのサブストリングに対してグループごとに作用する。
【００２８】
【数２】
0006788610.tif 000006
ここで、各SボックスSiは長さ6のビット・ストリングを長さ4のビット・ストリングにマッピングし、||は連結を表わす。解読は逆向きに、すなわち下から上へ進むことによって実行される。逆ラウンド関数は
【００２９】
【数３】
0006788610.tif 000007
によって与えられる。
【００３０】
DESが使う鍵はたった56ビットなので、全鍵空間探索が実現可能である。しかしながら、特にソフトウェア実装での差分故障攻撃を使う鍵回復のほうが数桁速い。トリプルDESは三つの56ビット鍵（K(1),K(2),K(3)）を使い、まず鍵K(1)を用いてDES暗号化、続いて鍵K(2)を用いてDES解読、続いて鍵K(3)を用いてDES暗号化を実行することによって暗号化を行なう。
【００３１】
本稿ではDESが主たる例として使われる。実際に、DESに基づく実施形態は広範に試験され、ホワイトボックス・コンテキストでも差分故障攻撃が大きく緩和されることが見出された。DESについての結果はすぐにトリプルDESにも移される。トリプルDESの最終ラウンドはトリプルDESの最終ラウンドと同じだからである。一般に、下記で説明するシステムは、最終ラウンドにおいてラウンド関数を適用するブロック・サイファー、たとえば最終ラウンドがファイステル構造をもつブロック・サイファーにも当てはまる。
【００３２】
図１に戻ると、暗号装置１００は、ブロック・サイファーを実装する暗号学的処理の複数のラウンドを適用するよう構成されたプロセッサを有していてもよい。それら複数のラウンドのうちの四つが図１に示されている。三つのラウンドはブロック・サイファー・ラウンド１１２、１１４および１１６として示されている；これらは第一（ラウンド１）、最後から三番目（ラウンドn−2）および最後から二番目（ラウンドn−1）（次末）のブロック・サイファー・ラウンドを表わす。最終ブロック・サイファー・ラウンド１１８（ラウンドn）はより詳細に示されている。本実施形態に関連する特徴がここで示されるからである。DESの伝統的な実装に対応するブロック・サイファー・ラウンドが図６．１ではラウンド１１２’および１１８’として示されている。DESの場合、n＝16段のラウンドがある。
【００３３】
装置１００のプロセッサは図１では別個には示されていない。ブロック・サイファー・ラウンドを実装するには複数のオプションがある。ある実施形態では、暗号装置は、ハードウェアのみで実装される。差分故障攻撃はもともとDESのハードウェア実装に対する物理的な攻撃としての工夫だった。暗号装置１００をハードウェアで実装することは、差分故障攻撃に対して保護されたDESのハードウェア実装をも提供する。
【００３４】
たとえば、暗号装置１００は、複数のブロック・サイファー・ラウンド・ユニット、たとえばブロック・サイファーの各ラウンドについて一つのブロック・サイファー・ラウンド・ユニットを有していてもよい。ブロック・サイファー・ラウンド・ユニットは、前のブロック・サイファー・ユニットの出力またはブロック・サイファー入力に暗号学的処理を適用するよう構成される。たとえば、ブロック・サイファー・ラウンド・ユニットおよび暗号装置１００の他のユニットは、CMOSにおいて、たとえばVerilog、VHDLなどのようなハードウェア記述言語を使って実装されてもよい。ハードウェア実装は特に安全である。あるいはまた、暗号装置はソフトウェアで実装されてもよい。後者のオプションはより柔軟で、たとえば、ソフトウェアがダウンロードされてもよく、これはハードウェアでは不可能である。しかしながら、ソフトウェアは、特にホワイトボックス・モデルでは、攻撃に対してより脆弱である。
【００３５】
ブロック・サイファー計算は符号化された値に対して作用する。符号化された値（２１０）は、データ値ω  ２１２に状態値σ  ２１４を合わせたものの、暗号学的かつ可逆な符号化である。データ値および状態値の対に可逆な符号化が適用される。データ値はブロック・サイファー入力の正しい暗号化または解読を計算するために使われる。状態値は、データ値をリバースエンジニアリングから保護し、データ値をたとえば故障攻撃で行なわれるような工作から保護するために使われる。ブロック・サイファー出力１０６は、符号化されたブロック・サイファー入力１０５におけるデータ値に依存し、符号化されたブロック・サイファー入力１０５における状態値には依存しない。特に、ブロック・サイファー出力１０６は符号化されたブロック・サイファー入力１０５におけるデータ値と、ブロック・サイファーにおいて使われる暗号鍵に依存するだけである。これは、符号化された入力１０８のデータ値および鍵のみを入力として受けて同じブロック・サイファー出力１０６を生成するブロック・サイファー・アルゴリズムが存在するという意味においてである。
【００３６】
鍵は、たとえば部分的な評価によって暗号装置１００に組み込まれていてもよく、あるいはたとえば符号化された鍵として受領されてもよいことを注意しておく。符号化された鍵は、同じ符号化を使う暗号装置１００と一緒に機能できるのみである。
【００３７】
図２．１は、データ値２１２および状態値２１４を含む符号化された値２１０を示している。記号的に、データ値２１２および状態値２１４は四角として示されているが、暗号学的符号化のため、二つの値は動作において別個に認識可能ではない。典型的には、符号化された値２１０のビット長はデータ値および状態値のビット長の和である。符号化は可逆なので、データ値および状態値はいずれも符号化された値から復元されうる。むろん、使われた符号化が既知であることが条件である。使われた符号化は典型的には暗号装置１００が作られるときにわかっているが、攻撃者には知られない。
【００３８】
データ値および状態値はある範囲の値をもつ。典型的には、データ値および状態値の両方について、データ・ビット長または状態ビット長が与えられたときのすべての可能なビット列がそれぞれの範囲に含まれる。たとえば、所与のデータ値がたとえば4ビットであってもよく、状態値も4ビットであってもよい。符号化された値は8ビットであろう。データ値範囲および状態値範囲はいずれも16通りの可能な4ビット列である。図２．２は、暗号装置１００において使用されうる符号化を示している。参照符号２１３および２１５のもとに、データ範囲からのデータ値と状態範囲からの状態値のすべての組み合わせがリストされる；この場合、データ値および状態値の両方は4ビット列である。この場合、データ値と状態値の16かける16で256通りの組み合わせがリストされる。データ値は２１３の下にリストされている。状態値は２１５の下にリストされている。これら256通りの8ビット列のランダムな転置が選択されて、参照符号２１１の下にリストされている。状態値とデータ値の任意の対が列２１１における対応するビット列にマッピングされるので、ランダム転置は符号化である。
【００３９】
データ値と状態値の可能な各組み合わせが異なる8ビット列を受け取るので、この符号化は可逆である。ある実施形態では、状態値のビット長は少なくともデータ値のビット長であり；より長い状態値は、データ値がどのように使われるかのより多くを隠すことができる。たとえば、データ値は4ビットであってもよく、状態値は4ビットであってもよい。たとえば、データ値が4ビットであってもよく、状態値は6ビットであってもよい。一例では、状態値はデータ値の倍数である；状態値のビット長がデータ値のビット長の次の倍数に達するときは常に、より高いレベルの保護が得られることがわかる。
【００４０】
暗号学的符号化は、少なくとも不相応な計算努力なしには、符号化された値に関する情報を攻撃者に与えない。たとえば、暗号学的符号化は、データ値と状態値のすべての可能な組み合わせのランダム転置を選択することによって生成されてもよい；ランダム性は真のランダム性であっても、擬似ランダム性であってもよい。あるいはまた、データ値と状態値は秘密鍵を使って、たとえばブロック長がデータ値と状態値のビット長の和に等しいブロック・サイファーを使って、暗号化されてもよい。鍵付き暗号化はランダム転置でもあり、暗号装置１００を実装するのがより容易であるという利点をもつ。
【００４１】
DESの場合、データ値のビット長についての自然な選択は32ビットであり、これが32ビット状態値と組み合わされてもよい。本稿ではこの選択が想定されるが、異なる長さが可能であることは強調しておく。そのような64ビット符号化された値の二つが、鍵を別として、DESのラウンドの入力を表わすことができる。ホワイトボックス実装では、鍵は、その鍵についてラウンド関数を部分的に評価することによって、ラウンド関数に組み込まれてもよい。これはラウンドの入力としてのラウンド鍵を除去する。
【００４２】
実際的な理由のため、より長いデータ値および状態値、たとえば32ビットのデータ値および状態値は、符号化されたサブ値のシーケンスとして表現されてもよい。図２．７は、データ値および状態値のこの型の符号化を示している。図２．７は8個の符号化されたサブ値２１０．１、２１０．２、……、２１０．７および２１０．８を示している。符号化されたサブ値は、データ・サブ値ωi  ２１２．１、……、２１２．７および２１２．８を対応する状態サブ値σi  ２１４．１、……、２１４．７および２１４．８と一緒にして暗号学的かつ可逆な符号化を行なって単一の符号化されたサブ値にしたものである。データ値および状態値は、値を復号することなくしては分離できない単一のモノリシックな値において符号化される。たとえば、図２．７では、データ値および状態値はそれぞれ4ビットであってもよく、このシーケンスは32ビットのデータ語および32ビットの状態語を符号化している。符号化されたサブ値２１０．１〜２１０．８のために使われる符号化は異なっていてもよい。たとえば、符号化の一つは4ビットのデータおよびサブ値を使い、たとえば図２．２に示した例示的な符号化を使ってもよい。
【００４３】
暗号装置１００は、ブロック・サイファー計算を実行するために、符号化された値に対して作用するよう構成される。特に、暗号装置１００は、ブロック・サイファー入力の符号化１０８に対して暗号学的処理の複数のラウンドを適用するよう構成される。符号化されたブロック・サイファー入力１０８は装置１００によって符号化された形で受領されてもよい。これは、データのプレーン・バージョンが装置上で利用可能でないという利点がある。これはたとえば、装置１００が解読のために構成される場合に使われてもよい。装置１００が暗号化のために構成される場合にも、符号化された入力が受領されてもよい。たとえば、これは暗号化が信頼されないコンピュータ上で実行される場合に使われてもよい。たとえば、ある実施形態では、第一の装置で入力が符号化されて暗号装置１００に送られ、次いで暗号装置１００が符号化された入力を暗号化することができる。これは、ブロック・サイファーによって使用される鍵が第一の装置上で利用可能である必要がなく、暗号装置１００はプレーンの入力にアクセスする必要がないという利点をもつ。符号化は、エンコーダ・ユニット１９０によって行なわれてもよい。
【００４４】
エンコーダ・ユニット１９０は、符号化されていない、たとえばプレーンの形のブロック・サイファー入力１０５を受け取るよう構成されてもよい。エンコーダ・ユニット１９０は、符号化を適用して、ブロック・サイファー入力の符号化１０８を得てもよい。ある実施形態では、エンコーダ・ユニット１９０は、一つまたは複数の状態値を選択するよう構成された状態値選択ユニットを有する。たとえば、状態値は、たとえばハッシュ関数を使った、ブロック・サイファー入力１０５の関数であってもよい。たとえば、状態値はランダムに選択されてもよい。エンコーダ・ユニット１９０は、ブロック・サイファー入力１０５から得られるデータ値を選択された状態値と一緒にして符号化を適用するよう構成されたプロセッサを有していてもよい。たとえば、エンコーダ１９０は図２．７に基づく符号化に従って符号化してもよい。DESの場合、エンコーダ１９０は、たとえばブロック・サイファー・ブロック上の64ビットのブロック・サイファー入力１０５を、それぞれ64ビットの二つの符号化された値として符号化してもよい；それぞれの64ビットの符号化された値は、ブロック・サイファー入力１０５を表わす32ビット・データ値および32ビット状態値を含む。
【００４５】
暗号装置１００は、符号化されたブロック・サイファー入力１０８の形で直接、ブロック・サイファー入力を取得してもよいので、エンコーダ・ユニット１９０は完全に任意的である。
【００４６】
符号化されたブロック・サイファー入力１０８は、最初のブロック・サイファー・ラウンド１１２の入力である。最初のブロック・サイファー・ラウンド１１２の出力は第二のブロック・サイファー・ラウンド（別個には図示せず）への入力である。たとえば、最初のブロック・サイファー・ラウンド・ユニットは入力として符号化されたブロック・サイファー入力を、可能性としては転置後に受け取り、後続の各ブロック・サイファー・ラウンド・ユニットは前のブロック・サイファー・ラウンド・ユニットの出力を入力として受け取る。ブロック・サイファー・ラウンドは符号化されたラウンド鍵を受け取ってもよいが、部分的な評価によってラウンド鍵に組み込まれたラウンド鍵を有していてもよい。このオプションは、鍵の難読化のために好ましい。暗号装置１００のホワイトボックス・テーブル・ベースの実装は、ラウンド関数を表わすテーブルに組み込まれたラウンド鍵をもつために特に好適である。
【００４７】
複数ラウンドの最終ラウンド１１８は入力として第一の符号化された入力λL,15  １２０および第二の符号化された入力１３０を受け取る。
【００４８】
第一の符号化された入力１２０は第一のデータ入力ωL,15  １２２および第一の状態入力σL,15  １２４を符号化している。第一の符号化された入力１２０は図２．３に示されている。たとえば、λL,15＝EL,15(ωL,15,σL,15)である。ここで、EL,15は符号化を表わす。第二の符号化された入力ρR,15  １３０は第二のデータ入力ωR,15  １３２および第二の状態入力σR,15  １３４を符号化している。第二の符号化された入力１３０は図２．４に示されている。たとえば、ρR,15＝ER,15(ωR,15,σR,15)である。ここで、ER,15は符号化を表わす。ある実施形態では、第一のデータ入力１２２は値L15を表わし、第二のデータ入力１３２は値R15を表わす。一般に、DESを実装する暗号装置１００の実施形態は、図６．１のデータ値が暗号装置の符号化された値におけるデータ値として表わされるという意味で、図６．１の構成に従ってもよい。そのような対応は可能であり、より簡単なデバッグを提供するが、これは必須ではない。たとえば、図６．１における連続する動作は、たとえば部分的評価を使って、完全にまたは部分的に暗号装置１００内で融合されてもよい。第一および第二の符号化された入力１２０、１３０は、最後から二番目のブロック・サイファー・ラウンド１１６の出力として得られてもよい。
【００４９】
ラウンド関数ユニット１４０は、データ値１３２  ωR,15および状態値１３４  σR,15を符号化している第二の符号化された入力１３０を受け取り、符号化された出力１５０を生成するよう構成されていてもよい。ラウンド関数ユニット１４０はまず、データ値１３２に内部耐タンパー性シフト関数を適用し、続いて、内部耐タンパー性シフト関数の適用後のデータ入力１３２に、また可能性としては状態入力１３４にも作用する暗号学的ラウンド関数を適用する。図２．５は、データ値１５２および状態値１５４を符号化している符号化された出力１５０を示している。
【００５０】
いわゆる耐タンパー性関数は、値の不正な修正に対して、状態を使って暗号装置の耐性を増す。差分故障攻撃において使われるような故障は、そのような不正な修正の例である。しかしながら、発明者は、耐タンパー性関数の入念な配置は、差分故障攻撃に対する抵抗力を著しく改善することを発見した。暗号装置１００において、耐タンパー性関数は（少なくとも）三つの位置で適用される。ラウンド関数１４０への入力において前記内部耐タンパー性関数、第一および第二の出力ユニットの入力において第一および第二の出力耐タンパー性シフト関数である。
【００５１】
耐タンパー性シフト関数は、符号化された値における状態値が期待される状態値に等しくない場合に、符号化された値におけるデータ値を修正し、それ以外の場合には該データ値を修正しない。耐タンパー性シフト関数の動作の例は、図２．６を参照してさらに説明される。図２．６は、データ値２１２および状態値２１４を符号化している符号化された値２１０を示している。耐タンパー性シフト関数２２０は状態値２１４を入力として受領し、シフト値２２４を生成する。耐タンパー性シフト関数２２０は、シフト値２２４が、符号化された値における状態値が期待される状態値に等しい場合には特定の値、たとえば0をもち、符号化された値における状態値が期待される状態値に等しくない場合には異なる値をもつよう構成されていてもよい。これは、シフト値２２４を、符号化された値における状態値（σ）と期待される状態値（τ）との間の期待される差、たとえばφ(σ,τ)＝σ−τに設定することによって達成されてもよい。差は、状態値の前記範囲において、たとえば2の冪を法として計算される。シフト関数の他の例は、前記差にランダムな全単射hを適用することによって生成されてもよい。たとえば、h(σ−τ)である。
【００５２】
期待される状態値は、期待される状態値がブロック・サイファーの入力データと独立である場合には、関数２２０に組み込まれてもよい。たとえば、これはブロック・サイファー入力の符号化において所定の状態値を選択することによって達成されてもよい。諸ブロック・サイファー・ラウンドは、あらかじめ決定された状態値があらかじめ決定された経路をたどり、関数２２０に到達する状態値が既知になるように構成されてもよい。他方、期待される状態値２２２は関数２２０への入力であってもよい。期待される状態値は、データ値と一緒に符号化されてもよい。たとえば、ブロック・サイファーにおける状態値に対する演算は、該演算の一部が該演算の別の部分の逆であるよう構成されてもよい。このようにして、期待される状態値は、符号化されたブロック・サイファー入力における状態値に等しい、あるいは該状態値と固定した関係をもつことがありうる。
【００５３】
シフト値２２４は、加算器２３０において該シフト値をデータ値に加算することによって、データ値に適用されてもよい。加算は、前記特定の値がデータ値を変えないように選ばれる。たとえば、前記特定の値が0であれば通常の加算が使われてもよい。加算は、データ値の範囲の大きさを法とする算術加算であってもよい。加算は、XOR演算であってもよい。一般に、「加算」は、データ値と前記特定の値の加算が前記データ値と等しく、前記データ値と前記特定の値とは異なる値との加算が前記データ値とは異なるような任意の関数addであってもよい。加算器２３０は入力としてデータ値２１２およびシフト値２２４を受け取り、シフトされた符号化された値２４０の出力データ値２４２を生成する。シフトされた符号化された値２４０の状態値２４４は状態値２１４と同じであってもよい。しかしながら、状態値２１４から状態値２４４への経路２２５においては、さらなる状態関数があってもよい。そのような関数は、その後の耐タンパー性関数が、状態値が前記さらなる状態関数後に変更されていることを想定しなければならないという利点をもつ。耐タンパー性関数が除去されたり、あるいは他の仕方で工作されたりしたら、このことは前記その後の耐タンパー性関数において検出される。しかしながら、関数の除去に対する抵抗は、この攻撃はずっと高度なので、差分故障解析ほど重要な脅威とは見なされない。よって、経路２２５でのさらなる状態関数は任意的である。
【００５４】
図２．６において、より一般には暗号装置１００に関係する他の図において、演算２２０および２３０は別個の四角として示されている。しかしながら、ある実施形態では、関数２２０および２３０は単一の演算に、たとえば単一のテーブル・ネットワークに統合される可能性が高い。この統合された関数は入力として符号化された状態値２１０および可能性としては期待される状態値２２２を受け取り、出力として、シフトされた符号化された値２４０を生成する。統合された関数が演算のためにテーブルを使うとき、計算は、完全に符号化領域において行なうことができる。
【００５５】
耐タンパー性関数は、たとえば図２．７に示されるように、符号化されたサブ値のシーケンスとして表現されている符号化された値に適用されてもよい。また、耐タンパー性シフト関数は、符号化された値におけるそれぞれのデータ・サブ値（ωi）を修正するための耐タンパー性シフト・サブ関数φ(σ,τ)iのシーケンスを含んでいてもよい。符号化されたサブ値のシーケンスとして表わされている符号化された値に適用されるよう適応された耐タンパー性関数のある例示的な実施形態が、図２．８に与えられている。
【００５６】
図２．８は、複数の符号化されたサブ値の一つ、すなわちデータ・サブ値２１２．１および状態サブ値２１４．１を符号化している符号化されたサブ値２１０．１と、複数の耐タンパー性サブ関数の一つである耐タンパー性サブ関数２２０．１とを示している。図２．６と同様に、耐タンパー性シフト・サブ関数２２０．１は、状態値２１４．１が期待される状態サブ値２２２．１に等しい場合には特定の値、たとえば0をもつシフト値２２４．１を生成する。加算器２３０．１は該シフト値をデータ・サブ値２１２．１に加えて、シフトされたデータ・サブ値２４２．１を生成する。状態サブ値は状態値２１４．１に等しいまたは経路２２５におけるさらなる状態サブ関数の適用後の状態値２１４．１に等しくてもよい。
【００５７】
図２．６および図２．８は、符号化された値として耐タンパー性シフト関数を適用した結果を示している。このようにして、シフトされた符号化された値２４０またはシーケンス２４０．１……が、さらなる処理のための入力として使用されうる。これは可能だが、必須ではない。この適用の結果は、図２．６および図２．８に示されるような符号化された値が生成される前に、さらなる計算において使われてもよい。
【００５８】
たとえば、図２．７および図２．８におけるような符号化されたサブ値のシーケンスを使う図２．６のテーブル・ベースの実装では、関数２２０．１および加算器２３０．１ならびに任意的なさらなる状態関数２２５は、テーブルのシーケンスにおいて組み合わされてもよい。各テーブルは入力として符号化されたサブ値２１０．１……を受け取り、出力としてシフトされた符号化された出力２４０．１……を生成する。
【００５９】
第一の出力ユニット１６０  OLは第二の符号化された入力１３０を受け取って該第二の符号化された入力に第一の出力耐タンパー性シフト関数を適用し、続いてデータ値１３２を復号してブロック・サイファー出力１０６の第一の部分１６２を得るよう構成されている。
【００６０】
第二の出力ユニット１８０  ORは符号化された入力１５０を受け取って該符号化された出力に第二の出力耐タンパー性シフト関数を適用し、続いてデータ値１５２を復号してブロック・サイファー出力１０６の第二の部分１８２を得るよう構成されている。
【００６１】
ある実施形態では、第二の出力耐タンパー性シフト関数は、符号化された値１５０におけるそれぞれのデータ・サブ値を修正するための耐タンパー性シフト・サブ関数のシーケンスを含む。第二の出力耐タンパー性シフト関数のそれぞれの耐タンパー性シフト・サブ関数は、第二の符号化された入力１３０の状態サブ値がすべての状態値にわたるときにすべてのデータ値を取る。この特徴が故障攻撃に対する保護に大きな寄与を与えることが見出された。
【００６２】
符号化された入力値１３０における符号化されたサブ値を修正する攻撃者は、ブロック・サイファー出力の第二の部分１８２における異なる複数の出力を見出す。攻撃者がたまたま符号化された入力値１３０における符号化されたサブ値を修正してデータ値だけが変化して状態値が変化しなかった場合には、耐タンパー性シフト関数はそのような変化を検出しない。データ値と状態値は一緒に符号化されているので、攻撃者が直接これを実現することはできないことを注意しておく。攻撃者はこれを偶然達成しうる。たとえば、図２．２において、攻撃者が11010110から01001111に変更する場合、（この特定の場合には）データ値のみが変化し、状態値は変化しない。そのような幸運な変化は、伝統的な故障攻撃の線に沿って、鍵についての情報を漏らすことがありうる。しかしながら、第二の符号化された入力１３０の状態サブ値がすべての状態値にわたるときに第二の出力耐タンパー性シフト関数の耐タンパー性シフト・サブ関数があらゆるデータ値を取る場合には、攻撃者が、データ値のみに影響し状態値には影響しない修正を実現したことを認識するのは、ずっと困難になる。
【００６３】
たとえば、データ・サブ値はdビット幅であってもよく、状態サブ値はsビット幅であってもよく、符号化されたサブ値はd＋sビット幅であってもよい。ある特定のデータ・サブ値およびすべての可能な状態サブ値について、符号化された入力１３０における符号化されたサブ値は2s個の符号化された値全部を通じて走るので、第二の出力耐タンパー性シフト関数のデータ値（たとえば加算器２３０．１の出力）は2d通りの可能なデータ値すべてにわたる。ある実施形態では、s≧dである。d＝sであれば、それぞれの状態値についてそれぞれのデータ値が一度生起する。s＞dであれば、状態値がその範囲を通じて走るとき、いくつかのデータ・サブ値はより頻繁に生起する。ある実施形態では、第二の符号化された入力の状態サブ値のとき、第二の出力耐タンパー性シフト関数のそれぞれの耐タンパー性シフト・サブ関数において、それぞれのデータ・サブ値はちょうど2s-d回生起する。
【００６４】
符号化された値の内容を解析から保護するためにブロック・サイファーにおいて使われる符号化は、第一および第二の出力ユニットにおいて除去される。
【００６５】
差分故障攻撃では、攻撃者は同じ入力データに対して二回、ブロック・サイファーを実行したが、それらの実行の一方においては第二の符号化された入力値１３０を修正する。二つの実行の出力を比べると、ラウンド関数ユニット１４０においてなされる処理についての情報が与えられる。ラウンド関数ユニット１４０においてなされる処理は、ブロック・サイファーの暗号化または解読（の一部）を定義するものであり、よってラウンド鍵についての情報を与える。三つの耐タンパー性関数の戦略的な配置が、攻撃者が符号化された入力値１３０を操作する可能性を減らす。
【００６６】
ある実施形態では、暗号装置は、電子的プロセッサに結合された記憶部を有し、該記憶部は、少なくともラウンド関数ユニットおよび第一および第二の出力ユニットを実装する数値テーブル・ネットワーク（１１０、T1、T2）を記憶している。プロセッサは、前記記憶されたテーブルにおけるテーブル探索実装を実行するよう構成される。
【００６７】
図３は、ラウンド関数ユニット３００の実施形態の例を概略的に示している。ラウンド関数ユニット３００は、ラウンド関数ユニット１４０を実装するために使われてもよい。図３には、データ値１３２および状態値１３４を符号化している符号化された入力値１３０と、データ値１２２および状態値１２４を符号化している符号化された入力値１２０とが示されている。
【００６８】
ラウンド関数３００は、内部耐タンパー性シフト関数３２０、データ・ラウンド関数ユニット３４２および状態ラウンド関数ユニット３４４を有する。
【００６９】
内部耐タンパー性シフト関数３２０は、状態値１３４を受け取り、たとえば図２．６および図２．８を参照して説明したように、期待される状態値３２２に対するシフト値３２２を生成する。ラウンド関数３００は、シフト値をデータ値１３２に加える加算器３３０を有する。たとえば、内部耐タンパー性シフト関数３２０および加算器３３０は、内部耐タンパー性シフト・サブ関数のシーケンスとして実装されてもよい。
【００７０】
データ・ラウンド関数ユニット３４２は、加算器２３０によって生成されたシフトされたデータ値にデータ・ラウンド関数を適用し、データ値１２２を加える。これはファイステル構造に従う。たとえば、暗号装置１００がDESのために構成されている場合には、ユニット３４２におけるデータ・ラウンド関数は、図６．２に示されるように拡大関数E、一連のSボックス（S1,……,S8）および置換を実装してもよい。データ・ラウンド関数の結果のデータ・サブ値は典型的にはデータ・ラウンド関数の入力のうち二つ以上の、またさらには全部のデータ・サブ値に依存することを注意しておく。これは、ラウンド関数のテーブル・ネットワークとしての実装を、たとえば内部耐タンパー性シフト関数３２０の実装より、複雑にする。しかしながら、ブロック・サイファー、たとえばDESのテーブル・ネットワークとしての実装はそれ自身としては既知である。Chow参照。Chowと異なり、ラウンド関数は、データ値および状態値の両方を含む符号化された変数に対して作用する。図３では、データ関数ユニット３４２および状態関数ユニット３４４は別個の四角として描かれているが、これらの演算は同じテーブル・ネットワークにおいて一緒に実行されて、データまたは状態値を互いから別個に符号化させることを避けてもよい。
【００７１】
ラウンド関数３００は任意的に、さらに状態ラウンド関数ユニット３４４を有していてもよい。状態ラウンド関数ユニット３４４は状態ラウンド関数を状態値１３４に適用する。これは、その後の耐タンパー性シフト関数が状態関数が状態ラウンド関数によって修正されることを期待するので、さらに一つの演算を省略することによって暗号装置１００に工作することをより難しくする。図３では、状態ラウンド関数は状態値１３４のみに依存する。
【００７２】
ある実施形態では、状態ラウンド関数ユニット３４４は状態ラウンド関数を状態値１３４に適用し、状態値１２４を加える。状態値計算にファイステル構造を課すことは厳密には必要ではないが、暗号装置１００がホワイトボックス・テーブル・ネットワークとして実装されるときに大いに便利になる。状態値計算もファイステル構造に従うので、状態値について同じテーブル構造が使われてもよい。ある実施形態では、ブロック・サイファーはファイステル構造をもち、状態値の計算もファイステル構造をもつ。
【００７３】
ある実施形態では、状態ラウンド関数ユニット３４４における状態ラウンド関数は、ラウンド関数ユニットの符号化された入力（１３０）および出力（１５０）のデータ値（１３２、１５２）についてのラウンド関数ユニット（１４０）の拡散性が、ラウンド関数ユニットの符号化された入力（１３０）および出力（１５０）の状態値（１３４、１５４）についてのラウンド関数ユニットの拡散性と同じであるよう、選ばれる。
【００７４】
同じ拡散性をもつことは、ビット・レベルで定義されてもよく、それによれば、データ値１３２におけるデータ・ビットiに影響されない、たとえば依存しないデータ値１５２における各データ・ビットjについて、状態値１５４における状態値ビットjも状態値１３４における状態値ビットiに影響されないことが成り立つ。しかしながら、より広い定義が十分であり、それによれば、データ値１３２におけるデータ・サブ値iに影響されない、たとえば依存しないデータ値１５２における各データ・サブ値jについて、状態値１５４における状態値サブ値jも状態値１３４における状態値サブ値iに影響されないことが成り立つ。これらの基準は、攻撃者が、データ・ラウンド関数の構造と整合しないプレーンな（plain）出力データ値の修正がなされたことを見出すことによって、状態値が修正されたかどうかを見出しうることを回避する。
【００７５】
たとえば、これは、状態ラウンド関数と同じまたは同様のデータ・ラウンド関数を使うことによって達成されてもよい。たとえば、後半のブロック・サイファー・ラウンドにおける状態ラウンド関数が後半のブロック・サイファー・ラウンドにおけるデータ・ラウンド関数と同じであることができる。一方、ブロック・サイファー・ラウンドの前半では、状態関数は後半のブロック・サイファー・ラウンドのデータ・ラウンドの逆に等しい。このようにして、状態値の最終ラウンドにおける拡散性は、データ値の拡散性と厳密に同じでありつつ、同時に、最終ラウンドにおいて予測可能な状態値が生起する。
【００７６】
たとえば、DESの場合、最終ラウンドの状態ラウンド関数はSボックス、転置および拡大行列を含むことができる。
【００７７】
同じ拡散性を達成するための代替は、状態ラウンド関数（g）を
【００７８】
【数４】
0006788610.tif 000008
として選択することである。ここで、πiは状態値に対する全単射であり、
【００７９】
【数５】
0006788610.tif 000009
であり、εi,jは、ωR,15におけるj番目のデータ値がi番目のSボックスの入力に影響する場合にはεi,j＝1であり、それ以外の場合には0である。この構築は、データ・ラウンド関数を複製することなく、等しい拡散性を強制する。秘密の値Kσ――状態鍵――が、次のようにこの構築に組み込まれてもよい。
【００８０】
【数６】
0006788610.tif 000010
状態鍵Kσは、符号化された鍵として状態ラウンド関数３４４において受け取られてもよい。これは、種々の応用のためにホワイトボックス実装がカスタマイズされることを許容する。
【００８１】
ある実施形態では、暗号装置は、データ鍵と一緒に符号化された状態鍵を受け取るよう構成される。データ鍵はDESラウンド鍵、特に最終ラウンドのラウンド鍵であってもよい。たとえば、ラウンド関数ユニットは、ブロック・サイファー、たとえばDES等の最終ラウンド鍵と一緒に符号化された状態鍵Kσを受け取るよう構成されてもよい。
【００８２】
状態値が不正に修正されない限り、状態値はデータ値の計算に影響しないことを注意しておく。しかしながら、状態値が変更されると、これは耐タンパー性シフト関数を通じてデータ値に影響する。
【００８３】
図４は、第一の出力ユニット１６０の実施形態の例を概略的に示している。第一の出力ユニット１６０は暗号装置１００の実施形態において使われうる。
【００８４】
図４は、データ値１３２および状態値１３４を符号化している符号化された入力１３０を受け取る出力ユニット１６０を示している。出力ユニット１６０は、期待される状態値４２２および状態値１３４に基づいてシフト値を生成する第一の出力耐タンパー性シフト関数４２０を有する。シフト値４２４は加算器４３０を用いてデータ値１３２に加えられる。出力ユニット１６０は出力符号化４４０を用いず、よってユニット１６０の出力はプレーンなデータ値である。
【００８５】
図５は、第二の出力ユニット１８０の実施形態の例を概略的に示している。第二の出力ユニット１８０も暗号装置１００において使われうる。第二の出力ユニット１８０は出力ユニット１６０と同様に機能し、入力として符号化された出力１５０を受け取る。出力ユニット１８０は、期待される状態値５２２および状態値１５４に基づいてシフト値５２４を生成する第二の出力耐タンパー性シフト関数５２０を有する。シフト値５２４は加算器５３０を用いてデータ値１５２に加えられる。出力ユニット１８０は出力符号化５４０を用いず、よってユニット１８０の出力はプレーンなデータ値である。
【００８６】
テーブル・ベースの実装では、出力ユニット１６０および１８０は、符号化されたサブ値を入力として取り、プレーンなデータ値を出力として生じるテーブルのシーケンスとして実装されてもよい。DESの場合、これは、それぞれ8ビットの入力を受け取り4ビットの出力を生じる8個のテーブルを用いてできる。
【００８７】
典型的には、暗号装置１００は、装置１００に記憶されている適切なソフトウェアを実行するマイクロプロセッサ（図１には示さず）を有する。たとえば、そのソフトウェアは、ダウンロードされたおよび／または対応するメモリ、たとえばRAMのような揮発性メモリまたはフラッシュのような不揮発性メモリ（図１には示さず）に記憶されたものであってもよい。あるいはまた、暗号装置１００は、全体的または部分的に、プログラム可能論理において、たとえばフィールドプログラマブルゲートアレイ（FPGA）として実装されてもよい。装置１００は全体的または部分的に、いわゆる特定用途向け集積回路（ASIC）、すなわちその特定の用途のためにカスタマイズされた集積回路（IC）として実装されてもよい。
【００８８】
ある実施形態では、暗号装置１００は、ブロック・サイファー・ラウンドを適用するためのブロック・サイファー・ラウンド回路、ラウンド関数回路、第一の出力回路、第二の出力回路を有する。装置１００は、追加的な回路、たとえば通信回路などを有していてもよい。これらの回路は、本稿に記載される対応するユニットを実装してもよい。これらの回路はプロセッサ回路および記憶回路であってもよく、プロセッサ回路が記憶回路に電子的に表現されている命令を実行してもよい。これらの回路はFPGA、ASICなどであってもよい。
【００８９】
さらなる有利な暗号装置は、ブロック・サイファー入力（１０５）に対してブロック・サイファー（５００）を計算し、ブロック・サイファー出力（１０６）を生成するための暗号装置であって、ブロック・サイファー計算は符号化された値（２１０）に作用し、符号化された値（２１０）はデータ値（ω、２１２）を状態値（σ、２１４）と一緒にして暗号学的かつ可逆な符号化をしたものであり、当該暗号装置は、ブロック・サイファーを実装する前記ブロック・サイファー入力の符号化（１０８）に対する暗号学的処理の複数ラウンド（１１２、１１４、１１６、１１８）を適用するよう構成されたプロセッサ（１１２０）を有し、符号化された値（２１０）は符号化されたサブ値（２１０．１、２０１．２、……、２１０．８）のシーケンスを含み、符号化されたサブ値はデータ・サブ値（ωi、２１２．１、２１２．２、……、２１２．８）を対応する状態サブ値（σi、２１４．１、２１４．２、……、２１４．８）と一緒にして単一の符号化されたサブ値に暗号学的かつ可逆な符号化をしたものであり、
・前記複数ラウンドの最終ラウンド（１１８）への入力は、第一のデータ入力（ωL,15、１２２）および第一の状態入力（σL,15、１２４）を符号化している第一の符号化された入力（λL,15＝EL,15(ωL,15,σL,15)、１２０）と、第二のデータ入力（ωR,15、１３２）および第二の状態入力（σR,15、１３４）を符号化している第二の符号化された入力（ρR,15＝ER,15(ωR,15,σR,15)、１３０）とを有し、
・前記プロセッサは、前記ブロック・サイファーを実装する暗号学的処理の前記複数ラウンドの前記最終ラウンド（１１８）を適用するためのラウンド関数ユニット（１４０；３００）と、符号化された出力データ（１５２）を復号するための第二の出力ユニット（１８０）とを有し、
・前記ラウンド関数ユニット（１４０）は、前記第二の符号化された入力（ωR,15,σR,15、１３０）を受け取り、前記第二の符号化された入力（１３０）のデータ値（１３２）に内部耐タンパー性シフト関数（φ(σR,15,τR,15)、３２０）を適用し
【００９０】
【数７】
0006788610.tif 000011
続いてシフトされた第二の符号化された入力（１３０）のデータ入力（１３２）および状態入力（１３４）に作用する暗号学的ラウンド関数（f、g、３４２、３４４）を適用して符号化された出力を生成し
【００９１】
【数８】
0006788610.tif 000012
耐タンパー性シフト関数（φ(σ,τ)、２２０）は、符号化された値（２１０）における状態値（σ、２１４）が期待される状態値（τ、２２２）に等しくない場合には符号化された値（２１０）における前記データ値（ω、２１２）を修正し、それ以外の場合には前記データ値（ω、２１２）を修正せず、耐タンパー性シフト関数（φ(σ,τ)、２２０）は、符号化された値におけるそれぞれのデータ・サブ値（ωi）を修正するための耐タンパー性シフト・サブ関数（φ(σ,τ)i、２２０．１）のシーケンスを含み、
・前記第二の出力ユニット（OR、１８０）は前記符号化された出力（ωR,16、σR,16、１５０）を受け取り、前記符号化された出力（ωR,16、σR,16、１５０）に第二の出力耐タンパー性シフト関数（φR,16(σR,16,τR,16)、５２０）を適用し、続いて前記データ値（１５２）を復号して前記ブロック・サイファー出力（１０６）の少なくとも第二の部分（１８２）を取得し、前記第二の出力耐タンパー性シフト関数のそれぞれの耐タンパー性シフト・サブ関数（φR,16(σR,16,τR,16)i）は、前記第二の符号化された入力（ρR,15、１３０）がすべての状態値にわたるときにすべてのデータ・サブ値を取る、
装置である。
【００９２】
以下では、本発明に基づくさらなる例示的実施形態が記述される。
【００９３】
差分故障攻撃（DFA）は、「グレーボックス」シナリオで記述するのが最も簡単である。攻撃者が何らかの仕方で、たとえば正しい瞬間にチップ上の正しい位置にレーザー・パルスを撃つことによって、R15を修正でき、その未知の変化の、出力（L16,R16）に対する効果を見ることができると想定する。変更された値をチルダで表わすと、次のようになる。
【００９４】
【数９】
0006788610.tif 000013
右端の式どうしのビットごとのXORを取ると未知のL15が落ち、左端の式を使って直接観察可能でないR15を観察可能な出力L16を用いて表現すると、次のことがわかる。
【００９５】
【数１０】
0006788610.tif 000014
今や、次式を満たすすべての48ビット鍵Kを見出すことは容易である。
【００９６】
【数１１】
0006788610.tif 000015
実は、この検査は、それぞれのSボックスSiについて6ビットのサブ鍵ごとに行なえる。典型的には、64個より著しく少数のサブ鍵がこの式を満たし、解の集合は
【００９７】
【数１２】
0006788610.tif 000016
に依存する。典型的には、実際のラウンド16の鍵K16が、あらゆる可能な入力および変化について式(1)を満たす唯一のものであり、それは、典型的には少数の入力および故障注入のみを使って見出すことができる。
【００９８】
K16が取得されたら、56個の有意な鍵ビットのうちの48ビットがわかり、残りのビットは、256通りの可能な鍵を試すことによって見出せる。攻撃者がトリプルDESの暗号化および解読の最終ラウンドのそれぞれへの入力を修正できるとすると、同様にして完全な鍵を見出すことができる。
【００９９】
ホワイトボックスシナリオでは、攻撃者はすべての変数を閲覧し、修正することができる。特に、攻撃者はR15を修正し、そのすべての値を試し、結果に対する効果を観察することができる。こうして、攻撃者は、グレーボックス・シナリオより一層速く鍵を回復できる。
【０１００】
実施形態は、R15のすべての値を試す攻撃者に対して保護する。これは、グレーボックス・シナリオにおけるDFA攻撃に対しても保護する。実施形態は、以下のうちの一つまたは複数を使ってもよい。
【０１０１】
１．値と呼ばれるいくつかのまたはすべての内部変数についての、状態と呼ばれる補助変数。メモリ内の数は値と状態両方を符号化したものである。
【０１０２】
２．状態消去：（トリプル）DESアルゴリズムの出力は、状態なしの、暗号化されたサイファー・テキストの値であるべきである。つまり、実装は、それぞれL16およびR16についての符号化された（値、状態）対からそれらの値へのマッピングを提供するべきである。有利には、このマッピングは、攻撃者が同じ符号化を使う完全なプログラムにおけるすべての状態変数を完全にはぎ取ることを許容するような、符号化関数の単なる逆関数ではない。その代わり、Mと表わされるこのマッピングは次のことを行なう。
【０１０３】
【数１３】
0006788610.tif 000017
ここで、Eは符号化関数を表わし、φは二つの状態（state）から値（value）空間へのマッピングであって、二つの等しい入力を値空間における0ビット・ストリングにマッピングする。すなわち、Mは、状態が正しい状態（correct  state）に等しいときは前記値を返し、そうでないときはそれにオフセットを与える。
【０１０４】
３．状態発展：関数Mは正しい状態を「知る」必要がある。これは、状態変数はランダムではだめで、何らかの規則に従って発展しなければならないことを含意する。規則は実装者によって選ばれることができ、攻撃者には未知である。
【０１０５】
４．状態依存の値発展：値は状態が正しければ正常に発展し、状態が正しくなければオフセットを得る。いくつかの実施形態では、これは第16ラウンドにおいて使われるだけであるが、より多くのまたはすべてのラウンドで適用されてもよい。
【０１０６】
これらの構成要素は、式(1)に基づく故障注入攻撃が機能しないような仕方で組み合わされることができる。これは、現状技術を改善する。四番目の構成要素が使われない場合には、個別のサブ鍵がすぐに見出されることができる。
【０１０７】
記法：値はωによって表わされる。すなわち、ωL,r＝Lrであり、ωR,r＝Rrである。状態はσによって表わされる。プログラム中の各変数は異なる仕方で符号化されることができる。符号化されたLおよびR変数、すなわちメモリ中の数はλおよびρによって表わされる。よって、
λL,15＝EL,15(ωL,15,σL,15)、ρR,15＝ER,15(ωR,15,σR,15)
などとなる。最初の15ラウンドについては、値はDES仕様に従って発展させる。すなわち、
【０１０８】
【数１４】
0006788610.tif 000018
しかしながら、最終ラウンドについては、ファイステルへの入力はωR,15ではなく、
【０１０９】
【数１５】
0006788610.tif 000019
である。ここで、τR,15はこの時点での「正しい状態」である。つまり、最終ラウンドにおいて、次のようになる。
【０１１０】
【数１６】
0006788610.tif 000020
ωはファイステルに従って発展するので、σもファイステルに従って発展させればよい。具体的には、最終ラウンドにおいて、σを次のように発展させる。
【０１１１】
【数１７】
0006788610.tif 000021
特に、正しい状態τも、何らかの関数gについてこのようにして発展しなければならない。
【０１１２】
【数１８】
0006788610.tif 000022
gの有利な属性は下記で導出される。
【０１１３】
ファイステル発展では、最後の8ラウンドにおける状態発展は、最初の8ラウンドにおける状態発展の逆に選ぶことができる。よって、最終状態は初期状態に等しく、初期状態はDES入力の単純な関数である。
【０１１４】
ここで、状態を消去するために使われるマッピングML,16およびMR,16に目を転じる。左および右の出力は次式によって与えられる。
【０１１５】
【数１９】
0006788610.tif 000023
φおよびφL,16が同じであるよう選ぶことによって計算が単純化される。すると、次のようになる。
【０１１６】
【数２０】
0006788610.tif 000024
式(2)ならびにσおよびτの上記発展から、次のようになる。
【０１１７】
【数２１】
0006788610.tif 000025
ここで、ρ15を修正する攻撃者を考える。未修正のシステムでは、いたるところでσ＝τであり、よって、φR,16(σR,16,τR,16)＝φ(τR,16,τR,16)＝0であり、
【０１１８】
【数２２】
0006788610.tif 000026
修正されたシステムでは、
【０１１９】
【数２３】
0006788610.tif 000027
であることがあり、よって次のようになる。
【０１２０】
【数２４】
0006788610.tif 000028
両式のXORを取ると、次式が得られる。
【０１２１】
【数２５】
0006788610.tif 000029
ここでこれを実際の攻撃と比べてみる。攻撃者は式(1)への解を見出そうとする。式(1)は出力変数を用いると次のようになる。
【０１２２】
【数２６】
0006788610.tif 000030
変更がオフセットが
【０１２３】
【数２７】
0006788610.tif 000031
となるようなものであれば、K＝K16がこの式の解となるが、オフセットが0でない場合には、K＝K16は解にはならない。実のところ、任意のKについて、Kが解となるようなオフセット（offset）を見出すことができる。つまり、
【０１２４】
【数２８】
0006788610.tif 000032
それぞれのSボックスは4ビット（1ニブルともいう）を出力するので、符号化についての最も自然な選択はLrおよびRrのそれぞれをニブル毎に符号化されるようにすることである。すなわち、λrおよびρrは8符号化ニブルのシーケンスであり、それぞれの符号化されたニブルはニブル値およびニブル状態の独立な符号化である。ニブル値は4ビットであり、ニブル状態はk倍大きい、すなわち4kビットとなるように選ぶ。こうして、符号化されたニブルは(4＋4k)ビットのストリングである。
【０１２５】
ある実施形態では、k＝1に選ぶ。のちに、この選択の限界およびDFA攻撃との関連を述べる。
【０１２６】
ここで、攻撃者が単一のSボックスの6ビット・サブ鍵、つまりi番目のSボックスSiについてのサブ鍵K16,iを決定しようとする攻撃を記述する。
【０１２７】
（ホワイトボックス）攻撃者は、ρR,15における符号化されたニブルを変更できるが、どの符号化が使われるかは知らない。したがって、前記8符号化ニブルのそれぞれについて、攻撃者は28−1個の異なる摂動を実行し、それぞれの摂動について、どの6ビット・サブ鍵Ki（以下ではKiは、i番目の56ビット・ラウンド鍵ではなく、最終ラウンドにおけるi番目の6ビット・サブ鍵を表わす）が次式の解となるかを見出すとする。
【０１２８】
【数２９】
0006788610.tif 000033
ここで、添え字iはi番目のニブル、Sボックスまたはビット六個組を取ることを示す。式(3)は次式と等価である。
【０１２９】
【数３０】
0006788610.tif 000034
攻撃者がこれから何も学ぶことができないことを確実にしたい。
【０１３０】
攻撃者が、自分が期待していない位置における変化を決して見ることがなければ有利であろう。そのような変化を見ることができたとすると、攻撃者はそれがDESと整合しないと結論して、解析においてそれを単に無視することができる。
【０１３１】
すべての変化がいくつかの鍵と整合するが、どの鍵も他より優先されないことも有利であろう。これは、各jについて攻撃者がρR,15のj番目の符号化されたニブルの28−1通りの摂動を実行して式(3)からこれらの変更のそれぞれと整合する鍵を見出す場合に、攻撃者が事実上、
【０１３２】
【数３１】
0006788610.tif 000035
のすべての16個の値について式(4)を解いて、よってすべての64個の可能なサブ鍵を見出すことになることが成り立つようにすることによってできる。具体的には、ρR,15のj番目のニブルの、ωR,15が変更され、つまり
【０１３３】
【数３２】
0006788610.tif 000036
でありσR,15は変化しないままである、すなわち
【０１３４】
【数３３】
0006788610.tif 000037
であるような15通りの変化について、
【０１３５】
【数３４】
0006788610.tif 000038
が成り立つ。これらの摂動については、実際の鍵Ki＝K16,iが解である。他の摂動については、他の鍵（実際の鍵ではなく）が解として現われるはずである。
【０１３６】
ある実施形態では、σの発展および関数φR,16は、以下の条件が成り立つように設計される。
１．最終ラウンドでのσ発展では、右のニブルのみが（Eの構造から帰結するように）影響される。
２．φR,16は、
【０１３７】
【数３５】
0006788610.tif 000039
がすべての24通りの可能な値にわたるときに
【０１３８】
【数３６】
0006788610.tif 000040
がすべての24通りの4ビット値を取るよう選ばれる必要がある。
【０１３９】
これらの要求は、任意の32ビットの「σ」鍵Kσについて、
【０１４０】
【数３７】
0006788610.tif 000041
であり、πiが長さ4のビット・ストリングに対する任意の全単射であり、
【０１４１】
【数３８】
0006788610.tif 000042
であり、εi,jは、R15のj番目のニブルがi番目のSボックスの入力に影響する場合にはεi,j＝1であり、それ以外の場合には0である、ときおよび
【０１４２】
【数３９】
0006788610.tif 000043
であるときに満足される。
【０１４３】
鍵Kσは省略されてもよい。耐タンパー性シフト関数φについての他の選択が可能である。
【０１４４】
これらの例示的な選択では、DFAはどの単一のサブ鍵についての情報も与えない。ニブルjおよびSボックスiが、DESにおいてニブルjにおける変更がSiの入力に影響しないように選ばれる場合には、出力ニブルに変化はなく、任意の鍵が(3)の解となる。影響する場合には、すべての鍵Kiが15通りの摂動について(3)の解となる。
【０１４５】
DESの代替的な実装では転置PがSボックスの後から拡大Eの前に移されることを注意しておく。この防衛は本実装でも、軽微な修正で機能する。
【０１４６】
より能力のある攻撃者は、k＞1を選ぶことによって防衛されうる。上記において、攻撃者は、一時には一つのサブ鍵を目標とすると想定された。この攻撃は、ρR,15の単一のニブルのσにおける変動が、すべての影響されるSボックスについてすべての可能な出力が現われるような仕方で、修正されたSボックス出力につながるようにすることによって対策できる。
【０１４７】
しかしながら、そうすることにより、異なる影響されるSボックスについての出力における変化が同じσビットに依存するために互いに関係し、これが、複数の、たとえばm個のサブ鍵が同時に探される攻撃において活用されることがありうる。そのような攻撃は、26m個のサブ鍵組み合わせのスコアをつけることを必要とする。m個の異なるSボックス出力における互いに無関係な変化を許容するために十分な空間をもつために、k≧mを選んでもよい。それにより、十分なσビットが利用可能となる。
【０１４８】
図７は、ブロック・サイファーを計算する方法７００の実施形態の例を概略的に示している。
【０１４９】
この暗号方法は、ブロック・サイファー入力（１０５）に対してブロック・サイファー（５００）を計算し、ブロック・サイファー出力（１０６）を生成する。前記ブロック・サイファー計算は符号化された値（２１０）に作用し、符号化された値（２１０）はデータ値（ω、２１２）を状態値（σ、２１４）と一緒にして暗号学的かつ可逆な符号化をしたものである。
【０１５０】
方法７００は、
・ブロック・サイファーを実装する前記ブロック・サイファー入力の符号化（１０８）に対する暗号学的処理の複数ラウンド（１１２、１１４、１１６、１１８）を適用する段階７１０（AMR）であって、たとえば、そのために構成されたプロセッサまたは他のハードウェアによってなされてもよい段階と、
・ブロック・サイファーを実装する暗号学的処理の前記複数ラウンドの最終ラウンド（１１８）を適用する段階７２０（AFR）であって、前記複数ラウンドの前記最終ラウンド（１１８）への入力は、第一のデータ入力（ωL,15、１２２）および第一の状態入力（σL,15、１２４）を符号化している第一の符号化された入力（λL,15＝EL,15(ωL,15,σL,15)、１２０）と、第二のデータ入力（ωR,15、１３２）および第二の状態入力（σR,15、１３４）を符号化している第二の符号化された入力（ρR,15＝ER,15(ωR,15,σR,15)、１３０）とを有する、段階とを含む。
【０１５１】
たとえば、前記最終ラウンドは：
・前記第二の符号化された入力（１３０）のデータ値（１３２）に内部耐タンパー性シフト関数（φ(σR,15,τR,15)、３２０）を適用する
【０１５２】
【数４０】
0006788610.tif 000044
段階７２２（AITRSF）であって、耐タンパー性シフト関数（φ(σ,τ)、２２０）は、符号化された値（２１０）における状態値（σ、２１４）が期待される状態値（τ、２２２）に等しくない場合には符号化された値（２１０）における前記データ値（ω、２１２）を修正し、それ以外の場合には前記データ値（ω、２１２）を修正しない、段階と、
・前記シフトされた第二の符号化された入力（１３０）のデータ入力（１３２）および状態入力（１３４）に作用する暗号学的ラウンド関数（f、g、３４２、３４４）を適用して符号化された出力を生成する
【０１５３】
【数４１】
0006788610.tif 000045
段階７２４（ACRF）とを含んでいてもよい。本方法の出力は、二つの出力生成アプリケーションによって生成されてもよい。これらはどちらの順で実行されてもよい。
・前記第二の符号化された入力（ωR,15、σR,15、１３０）に第一の出力耐タンパー性シフト関数（φL,16(σL,16,τL,16)、４２０）を適用し７３２（ATRSF1）、次いで前記データ値（１３２）を復号７３４（DEC1）して前記ブロック・サイファー出力（１０６）の第一の部分（１６２）を取得する段階と、
・前記符号化された出力（ωR,16、σR,16、１５０）に第二の出力耐タンパー性シフト関数（φR,16(σR,16,τR,16)、５２０）を適用し７４２（ATRSF2）、続いて前記データ値（１５２）を復号７４４（DEC2）して前記ブロック・サイファー出力（１０６）の第二の部分（１８２）を取得する段階。
【０１５４】
当業者には明白であろうが、本方法を実行する多くの異なる方法が可能である。たとえば、段階の順序は変えられることができ、あるいはいくつかの段階が並列に実行されてもよい。さらに、段階と段階の間に他の方法段階が挿入されてもよい。挿入される段階は、本稿に記載されるような方法の洗練を表わしてもよく、あるいは本方法に関係しなくてもよい。たとえば、段階７３２および７４２は少なくとも部分的に並列に実行されてもよい。さらに、所与の段階は次の段階が始まる前に完全に完了していなくてもよい。
【０１５５】
本発明に基づく方法は、プロセッサに方法７００を実行させるための命令を有するソフトウェアを使って実行されてもよい。ソフトウェアは、本システムの特定のサブエンティティが行なう段階のみを含んでいてもよい。ソフトウェアは、ハードディスク、フロッピー、メモリなどといった好適な記憶媒体に記憶されていてもよい。ソフトウェアは、ワイヤに沿って、あるいは無線で、あるいはデータ・ネットワーク、たとえばインターネットを使って信号として送られてもよい。ソフトウェアは、ダウンロードおよび／またはリモート使用のためにサーバー上で利用可能にされてもよい。本発明に基づく方法は、プログラム可能論理、たとえばフィールドプログラマブルゲートアレイ（FPTA）を本方法を実行するよう構成するよう構成されたビットストリームを使って実行されてもよい。
【０１５６】
本発明が本発明を実施するために適応されたコンピュータ・プログラム、特に担体上または担体内のコンピュータ・プログラムにも拡張されることは理解されるであろう。プログラムは、ソースコード、オブジェクト・コード、部分的にコンパイルされた形のようなソースとオブジェクト・コードの中間のコードの形であってもよく、本発明に基づく方法の実装において使うために好適な他のいかなる形であってもよい。コンピュータ・プログラム・プロダクトに関係する実施形態は、記載される諸方法の少なくとも一つの方法の各処理段階に対応するコンピュータ実行可能命令を有する。これらの命令は、サブルーチンに分割されてもよく、および／または静的または動的にリンクされうる一つまたは複数のファイルにおいて記憶されてもよい。コンピュータ・プログラム・プロダクトに関係するもう一つの実施形態は、記載されたシステムおよび／またはプロダクトのうち少なくとも一つのものの各手段に対応するコンピュータ実行可能命令を含む。
【０１５７】
図８のａは、コンピュータ・プログラム１０２０を有する書き込み可能部分１０１０を有するコンピュータ可読媒体を示している。コンピュータ・プログラム１０２０は、プロセッサ・システムに、実施形態に従ってブロック・サイファーを計算する方法を実行させるための命令を有する。コンピュータ・プログラム１０２０は、コンピュータ可読媒体１０００上で物理的なマークとして、あるいはコンピュータ可読媒体１０００の磁化によって、具現されてもよい。しかしながら、他の任意の好適な具現も考えられる。さらに、コンピュータ可読媒体１０００はここでは光ディスクとして図示されているが、コンピュータ可読媒体１０００はハードディスク、半導体メモリ、フラッシュメモリなどといったいかなる好適なコンピュータ可読媒体であってもよいことは理解されるであろう。コンピュータ・プログラム１０２０は、プロセッサ・システムにブロック・サイファーを計算するための前記方法を実行させるための命令を有する。
【０１５８】
図８のｂは、ある実施形態に基づくプロセッサ・システム１１００の概略的な表現を示している。プロセッサ・システムは、一つまたは複数の集積回路１１１０を有する。前記一つまたは複数の集積回路１１１０のアーキテクチャーは図８のｂにおいて概略的に示されている。回路１１１０は、コンピュータ・プログラム・コンポーネントを実行して実施形態に基づく方法を実行するおよび／またはそのモジュールもしくはユニットを実装するための処理ユニット１１２０（PROC）、たとえばCPUを有する。回路１１１０は、プログラミング・コード、データなどを記憶するためのメモリ１１２２（MEM）を有する。回路１１１０は通信要素１１２６、たとえばアンテナ、コネクタまたはその両方などを有していてもよい。回路１１１０は、本方法において定義される処理の一部または全部を実行するための専用の集積回路１１２４（DDIC）を有していてもよい。プロセッサ１１２０、メモリ１１２２、専用IC  １１２４および通信要素１１２６（COMM）は相互接続１１３０、たとえばバスを介して互いに接続されてもよい。プロセッサ・システム１１１０は接触式および／または非接触式通信のために、それぞれアンテナおよび／またはコネクタを使って構成されていてもよい。
【０１５９】
上述した実施形態は本発明を限定するのではなく例解するものであること、当業者は多くの代替的な実施形態を考案できるであろうことを注意しておくべきである。
【０１６０】
請求項において、括弧内に参照符号があったとしても請求項を限定すると解釈してはならない。動詞「有する／含む」およびその活用形の使用は、請求項において述べられているもの以外の要素やステップの存在を排除しない。要素の単数形の表現はそのような要素の複数の存在を排除しない。本発明は、いくつかの相異なる要素を有するハードウェアによって、および好適にプログラムされたコンピュータによって実装されうる。いくつかの手段を列挙する装置請求項では、これらの手段のいくつかが同一のハードウェア項目によって具現されてもよい。ある種の施策が互いに異なる従属請求項において記載されているというだけの事実が、これらの施策の組み合わせが有利に使用できないことを示すものではない。
【０１６１】
請求項では、括弧内の参照符号は実施形態の図面における参照符号または実施形態の公式を指し、それにより請求項の理解しやすさを増す。これらの参照は請求項を限定するものと解釈してはならない。
いくつかの態様を記載しておく。
〔態様１〕
ブロック・サイファー入力に対してブロック・サイファーを計算し、ブロック・サイファー出力を生成するための暗号装置であって、前記ブロック・サイファーの計算は符号化された値に作用し、符号化された値はデータ値を状態値と一緒にして暗号学的かつ可逆な符号化をしたものであり、当該暗号装置は、前記ブロック・サイファーを実装する前記ブロック・サイファー入力の符号化に対する暗号学的処理の複数ラウンドを適用するよう構成されており、当該暗号装置は、
・前記ブロック・サイファーを実装する暗号学的処理の前記複数ラウンドの最終ラウンドを適用するよう構成されたラウンド関数ユニットを有し、
・前記複数ラウンドの最終ラウンドへの入力は、第一のデータ入力および第一の状態入力を符号化している第一の符号化された入力と、第二のデータ入力および第二の状態入力を符号化している第二の符号化された入力とを含み、
・前記ラウンド関数ユニットは、前記第二の符号化された入力を受け取り、前記第二の符号化された入力の第二のデータ値に内部耐タンパー性シフト関数を適用し、続いて前記のシフトされた第二のデータ入力に作用する暗号学的ラウンド関数を適用して符号化された出力を生成するよう構成されており、耐タンパー性シフト関数は、符号化された値における前記状態値が期待される状態値に等しくない場合には符号化された値におけるデータ値を修正し、それ以外の場合には前記データ値を修正せず、
当該暗号装置はさらに、
・前記第二の符号化された入力を受け取り、前記第二の符号化された入力に第一の出力耐タンパー性シフト関数を適用し、続いて前記のシフトされた第二のデータ入力を復号して前記ブロック・サイファー出力の第一の部分を得るよう構成された第一の出力ユニットと、
・前記符号化された出力を受け取り、前記符号化された出力に第二の出力耐タンパー性シフト関数を適用し、続いて該データ値を復号して前記ブロック・サイファー出力の第二の部分を得るよう構成された第二の出力ユニットとを有する、
暗号装置。
〔態様２〕
符号化された値は符号化されたサブ値のシーケンスを含み、符号化されたサブ値はデータ・サブ値を対応する状態サブ値と一緒にして暗号学的かつ可逆な符号化をして単一の符号化されたサブ値にしたものであり、耐タンパー性シフト関数は、符号化された値におけるそれぞれのデータ・サブ値を修正するための耐タンパー性シフト・サブ関数のシーケンスを含む、態様１記載の暗号装置。
〔態様３〕
前記第二の出力耐タンパー性シフト関数のそれぞれの耐タンパー性シフト・サブ関数は、
・前記第二の符号化された入力の状態サブ値がすべての状態値を取れば、前記第二の出力耐タンパー性シフト関数がすべてのデータ・サブ値を取るように構成される、
態様２記載の暗号装置。
〔態様４〕
前記ラウンド関数ユニットが、前記第一の符号化された入力の前記第一のデータ入力を、前記暗号学的ラウンド関数の結果のデータ値に加えるよう構成されている、態様１ないし３のうちいずれか一項記載の暗号装置。
〔態様５〕
前記ラウンド関数ユニットが、前記のシフトされたデータ値にデータ・ラウンド関数を適用し、前記第二の符号化された入力の前記第二の状態入力に状態ラウンド関数を適用するよう構成されている、態様１ないし４のうちいずれか一項記載の暗号装置。
〔態様６〕
前記ラウンド関数ユニットの前記符号化された入力および出力のデータ値についての前記ラウンド関数ユニットの拡散性が、前記ラウンド関数ユニットの前記符号化された入力および出力の状態値についての前記ラウンド関数ユニットの拡散性と同じである、態様１ないし５のうちいずれか一項記載の暗号装置。
〔態様７〕
前記ブロック・サイファーがファイステル構造をもつ、態様１ないし６のうちいずれか一項記載の暗号装置。
〔態様８〕
前記符号化されたブロック・サイファー入力における状態値に対する計算がファイステル構造である、態様１ないし７のうちいずれか一項記載の暗号装置。
〔態様９〕
前記ブロック・サイファーがDESまたはトリプルDESである、態様７または８記載の暗号装置。
〔態様１０〕
態様５および態様９の組み合わせとしての暗号装置であって、
前記状態ラウンド関数が
【数４２】
0006788610.tif 000046
であり、πiは状態値に対する全単射であり、
【数４３】
0006788610.tif 000047
であり、εi,jは、ωR,15におけるj番目のデータ値がi番目のSボックスの入力に影響する場合にはεi,j＝1であり、それ以外の場合には0である、または、
前記状態ラウンド関数が
【数４４】
0006788610.tif 000048
であり、Kσは状態鍵である、
暗号装置。
〔態様１１〕
耐タンパー性シフト関数が、前記符号化された値におけるデータ値を、前記符号化された値における状態値と期待される状態値との間の差を前記データ値に加えることによって修正する、態様１ないし１０のうちいずれか一項記載の暗号装置。
〔態様１２〕
前記内部耐タンパー性シフト関数および前記第一および第二の出力耐タンパー性シフト関数が同じ関数である、態様１ないし１１のうちいずれか一項記載の暗号装置。
〔態様１３〕
状態値およびデータ値がビット・サイズをもち、状態値のビット・サイズはデータ値のビット・サイズの倍数である、態様１ないし１２のうちいずれか一項記載の暗号装置。
〔態様１４〕
ブロック・サイファー入力に対してブロック・サイファーを計算してブロック・サイファー出力を生成する暗号学的方法であって、前記ブロック・サイファーの計算は符号化された値に作用し、符号化された値はデータ値を状態値と一緒にして暗号学的かつ可逆な符号化をしたものであり、当該方法は、
・前記ブロック・サイファーを実装する前記ブロック・サイファー入力の符号化に対する暗号学的処理の複数ラウンドを適用する段階と、
・前記ブロック・サイファーを実装する暗号学的処理の前記複数ラウンドの最終ラウンドを適用する段階であって、前記複数ラウンドの前記最終ラウンドへの入力は、第一のデータ入力および第一の状態入力を符号化している第一の符号化された入力と、第二のデータ入力および第二の状態入力を符号化している第二の符号化された入力とを含む、段階と、
・前記第二の符号化された入力のデータ値に内部耐タンパー性シフト関数を適用し、続いて前記のシフトされたデータ入力に作用する暗号学的ラウンド関数を適用して、符号化された出力を生成する段階であって、耐タンパー性シフト関数は、符号化された値における状態値が期待される状態値に等しくない場合には符号化された値におけるデータ値を修正し、それ以外の場合には前記データ値を修正しない、段階と、
・前記第二の符号化された入力に第一の出力耐タンパー性シフト関数を適用し、次いで前記データ値を復号して前記ブロック・サイファー出力の第一の部分を取得する段階と、
・前記符号化された出力に第二の出力耐タンパー性シフト関数を適用し、続いて前記データ値を復号して前記ブロック・サイファー出力の第二の部分を取得する段階とを含む、
方法。
〔態様１５〕
コンピュータ上で実行されたときに態様１４記載の方法を実行するよう構成されたコンピュータ・プログラム命令を有するコンピュータ・プログラム。
〔態様１６〕
態様１５記載のコンピュータ・プログラムを記憶しているコンピュータ可読媒体。
【図１】
0006788610.tif 000052
【図２．１】
0006788610.tif 000053
【図２．２】
0006788610.tif 000054
【図２．３】
0006788610.tif 000055
【図２．４】
0006788610.tif 000056
【図２．５】
0006788610.tif 000057
【図２．６】
0006788610.tif 000058
【図２．７】
0006788610.tif 000059
【図２．８】
0006788610.tif 000060
【図３】
0006788610.tif 000061
【図４】
0006788610.tif 000062
【図５】
0006788610.tif 000063
【図６．１】
0006788610.tif 000064
【図６．２】
0006788610.tif 000065
【図７】
0006788610.tif 000066
【図８ａ】
0006788610.tif 000067
【図８ｂ】
0006788610.tif 000068