【文献】
S. Chow, P. Eisen, H. Johnson, P. C. Oorschot,“White-Box Cryptography and an AES Implementation”,SELECTED AREAS IN CRYPTOGRAPHY: 9TH ANNUAL INTERNATIONAL WORKSHOP,2002年 8月15日,VOL. 2595,PAGES 1-18
(58)【調査した分野】(Int.Cl.,DB名)
入力データを暗号処理して、前記入力データに対応する暗号処理されたデータを生成するための暗号システム(100)であって、前記処理は暗号アルゴリズムに基づいており、
データ値を取得するように構成される、第1手段と、
前記第1手段からの前記データ値を関数によって処理し、前記関数の結果を生成するように構成される、関数のホワイトボックス実装(102)であって、識別データを取得するように、装置および/またはユーザを識別するデータにアクセスする手段と、前記識別データに依存して前記関数の結果を設定する手段とを備える関数のホワイトボックス実装(102)と、
前記入力データを取得するように構成される、第2手段と、
前記第2手段からの前記入力データを前記暗号アルゴリズムによって処理し、前記暗号アルゴリズムの結果を生成するように構成される、暗号アルゴリズムの実装(104)と、
前記暗号アルゴリズムの結果と前記関数の結果を結合し、前記暗号処理されたデータを生成する、結合動作の実装(106)とを備える、暗号システム。
前記関数の前記結果の特定の値が与えられると、前記結合動作が、前記暗号アルゴリズムの前記結果と前記暗号処理されたデータとの間に1対1の対応を定義する請求項1に記載の暗号システム。
【背景技術】
【0002】
今日、コンテンツは、例えばインターネット、放送媒体、またはCDやDVD等のデジタルデータキャリアを用いて、デジタル形式でユーザが入手できるようになりつつある。テレビ、セットトップボックス、オーディオ機器等の消費者家電(CE)製品は、そうしたデジタルコンテンツをレンダリングするためのデジタルデータ処理機能を備えている。
【0003】
正当なユーザへのデジタルコンテンツの配布を管理するためにデジタル権利管理システムが導入されている。通例、デジタル権利管理システムは、正当なユーザのみがコンテンツを解読することを可能にする暗号化技術を用いる。消費者装置内でのそのような暗号化技術の実装は、攻撃者が鍵の値を知ることをより難しくするように難読化(obfuscate)することが可能である。多種のアプリケーションで一般に使用される暗号の例は、DES、AES、RSA、および特許文献1に開示される方法である。
【0004】
デジタル権利管理システムでの鍵の扱いに関連して、メディアプレーヤは再生のためにライセンスデータベースから解読鍵を取得しなければならない。そして、メディアプレーヤは、暗号化されたコンテンツの解読のためにその解読鍵をメモリ中のどこかに記憶しなければならない。これは、攻撃者に、鍵を攻撃するための2つの選択肢を与える。第1に、ライセンスデータベースへのアクセス機能のリバースエンジニアリングにより、攻撃者は、すべてのライセンスデータベースから価値ある鍵を取得することができる。第2に、コンテンツ解読時にメモリへのアクセスを観察することにより、価値ある鍵を取得することが可能である。どちらの場合も、鍵は危険にさらされると考えられる。
【0005】
ソフトウェアで実施される暗号システムの分野では、改竄防止ソフトウェア製品の必要性から、攻撃者が暗号鍵を取得することおよび不正コピーを阻止する難読化技術が生まれた。こうした難読化技術の1つは、暗号アルゴリズムのホワイトボックス実装を提供することを伴う。暗号アルゴリズムのホワイトボックス実装とは、ホワイトボックス攻撃、すなわち攻撃者がプロセッサによって実行される命令の一部またはすべてを観察することができる攻撃から、暗号アルゴリズムの内部原理の一部またはすべてを隠蔽する実装である。場合によっては、攻撃者は動作環境に対する何らかの形のコントロールを有し、それにより、暗号動作の少なくとも一部を観察し、実行時にアルゴリズムで使用される暗号鍵の少なくとも一部を特定することができる。例えば、攻撃者は、デバッグ環境または仮想マシンの内部で実装を実行することにより、すべての動作を観察し、データバッファを操作し、実行の流れを監視することができる。
【0006】
他の事例では、攻撃者は、暗号アルゴリズムの実行時に、実装の一部またはデータバッファの内容の一部を動作環境から「漏洩」させる、すなわち明らかにさせることができる。例えば、攻撃者は、バッファオーバーフロー攻撃を使用して、暗号実装の一部を抽出できる場合がある。適切な部分が抽出された場合、攻撃者は、それにより暗号鍵または実装中の特定の設定を知り、暗号保護の一部またはすべてを取り消すことができる。
【0007】
ホワイトボックス実装は、暗号アルゴリズム、特に鍵データの内部原理の一部またはすべてを隠蔽する。これは、各種方式で行うことが可能である。ホワイトボックス実装を作成する一般的な技術は、暗号アルゴリズム内のテーブルの符号化と、個々のステップではなく合成(composition)を表すランダムな全単射との組み合わせを使用するものである。
解読鍵と解読アルゴリズムは、実質的に1つのモノリシックなブロックの形にされる。そのブロックのどの部分も、アルゴリズムまたは鍵の内部原理についての情報を一切明らかにしない。実際、ホワイトボックス実装全体が与えられた場合であっても、元のアルゴリズムまたは使用されている解読鍵をリバースエンジニアリングで得ることは極めて難しい。別の技術、例えば欧州特許出願第08155798.5号(整理番号PH010099)に開示される技術は、RSA等の暗号アルゴリズムにおける指数の難読化である。
【0008】
現在、ホワイトボックス実装は、限られた数の暗号についてのみ知られている。非特許文献1(以下「Chow 1」と呼ぶ)、および非特許文献2(以下「Chow 2」と呼ぶ)は、暗号アルゴリズム、特にAESやDESとして知られる暗号アルゴリズムのホワイトボックス実装を作成する方法を開示する。
【発明を実施するための形態】
【0020】
現在、ホワイトボックス実装は、限られた数の暗号(例えばAES、DES、Lombok)についてのみ知られている。以下に、(暗号または他の関数の)知られているホワイトボックス実装の上に、任意の暗号(より一般的には関数)のホワイトボックス実装を構築する一般的な手法の説明を提供する。このホワイトボックス実装は、多くの追加的な処理時間がかからないような方式で構築することができる。
【0021】
関数のホワイトボックス実装、暗号アルゴリズムの実装、およびその関数の結果と暗号アルゴリズムの結果に依存して暗号技術で処理されたデータを設定するための結合動作の実装を含む暗号システムを作成することができる。関数のホワイトボックス実装と結合動作のために、暗号システム全体がホワイトボックス実装になる。いくつかの結合動作が可能であるが、そのうちの一部を
図1〜
図4を使用してより詳細に説明する。図面に図示されない例として、合成を用いて関数と暗号アルゴリズムを組み合わせることが可能である。すなわち、初めに関数を適用し、次いで暗号アルゴリズムを適用する、または初めに暗号アルゴリズムを適用してから関数を適用する。
【0022】
図1に、暗号システム100のブロック図を示す。この暗号システムは、暗号技術で処理されるデータを受け取る入力112を有する。例えば、処理されるデータは、暗号化すべき平文、または解読すべき暗号文である。あるいは、処理されるデータは、デジタル署名を生成すべきデータである。暗号システム100は、相補的な暗号システム(図示せず)と併せて使用することができる。システム100が暗号システムからなる場合は、相補暗号システムは解読部からなることができる。一方、システム100が、対応する解読システムからなる場合は、相補暗号システムは、対応する暗号化システムからなることができる。したがって、2つの暗号システムは、一方のシステムが他方のシステムで生成されたメッセージを処理することが可能である場合に、本テキストでは相補システムと呼ぶ。
【0023】
暗号システム100は、暗号アルゴリズムの実装104をさらに備える。この実装は、ホワイトボックス実装である必要はないが、ホワイトボックス実装の技術から自ずと知られる技術を少なくとも一部分に使用して暗号アルゴリズムを実装することが可能である。暗号システム104は、解読部または暗号化部からなることができる。典型的には、システム100が解読に使用される場合は、暗号システム104は解読部からなる。それに代えて、システム100が暗号化に使用される場合は、暗号システム104は暗号化部からなる。暗号アルゴリズムの実装104はホワイトボックス実装である必要はないので、使用される暗号アルゴリズムの選択には高い自由度がある。詳細には、ホワイトボックス実装が知られていない暗号アルゴリズム、またはホワイトボックス実装がその他の点で使用するのが不便である可能性のある暗号アルゴリズムが適用できる。
【0024】
また、暗号システム100は、値xを生成する手段110を備える。この値xは、例えば、入力112によって受け取られたデータに対応する暗号文から導出することが可能である。あるいは、手段110は、所定のインスタンスで増加されるカウンタを備えてもよい。手段110は、相補の暗号システムが再現することが可能な値xを生成するように構成されることが好ましい。これは、値xを相補システムと同期させることによって構成されることが可能であり、値の同期は、xの現在の値の表現を含むメッセージを交換することによって実現することができる。
【0025】
値xは、関数のホワイトボックス実装102に提供されることが可能である。この関数は、その入力と出力を分析することによりあまり容易に理解できないことが好ましい。例えば、この関数は、AES等の暗号アルゴリズムからなる。あるいは、ハッシュ関数または乱数生成関数からなってもよい。そのようなホワイトボックス実装を作成する方法は、Chow等から自ずと知られる。
【0026】
関数のホワイトボックス実装102および暗号アルゴリズムの実装104によって生成される出力は、結合動作の実装106によって組み合わせられる。結合動作の実装106によって生成される結果は、関数の実装102によって生成される結果と、暗号アルゴリズムの実装104で生成される結果に応じて決まる。
図1に、関数の実装102と暗号アルゴリズムの実装104が並行して動作し、互いに独立した結果を生成する状況を示す。結合動作の実装106は、これらの結果を組み合わせて1つの結果にする。したがって、結合動作は、暗号アルゴリズムの結果を関数の結果と組み合わせることを含む。結合動作は、関数と暗号アルゴリズムの独立した結果が単一の結果から抽出できないようなものであることが好ましい。例えば、XOR演算を使用して結果を組み合わせる、または何らかのkについて何らかの値2kを法とする加算が使用される。
【0027】
結合動作の実装106の結果は、出力114に提供される。出力114は、例えば、提供された結果より取得されたデータから出力データパケットを作成するパッケージャ(packager)からなることができる。出力114は、例えば放送網やインターネットなどのネットワークを介して、受信者にデータを送信する送信機からなることができる。あるいは、出力114は、実装106から得られた結果を、データのプレゼンテーションを作成するディスプレイまたは増幅器に提供するように構成されてもよい。
【0028】
図2に、ここに記載される暗号システムの別の実施形態である暗号システム200を示す。暗号システム200では、結合動作は、関数の結果を受信データ要素と組み合わせて結合の結果を得、その統合の結果に暗号アルゴリズムを適用することを含む。
【0029】
システム100と同様に、システム200は、入力212、値xを生成する手段210、関数のホワイトボックス実装202、暗号アルゴリズムの実装204、結合動作の実装206、および出力214を備える。ただし、システム200では、実行の順序がシステム100と異なる。システム200は、F(C(y,G(x)))を効率的に計算し、Gは関数を表し、Fは暗号アルゴリズム、Cは結合動作、およびyは、入力212で得られる値を表す。結合動作の実装206は、入力212で得られたデータと、関数のホワイトボックス実装202で生成された結果とを組み合わせることにより、結合の結果を生成し、暗号アルゴリズムの実装204にその結果を処理させる。処理の結果は、出力214に提供される。
【0030】
一実施形態では、関数の結果の特定の値を与えられると、結合動作は、暗号アルゴリズムの結果と結合動作の結果との間に1対1の対応を定義する。これは、解読部でデータを一意に解読することを可能にするので、例えばシステム100または200がデータの暗号化に使用される場合に有用である。
【0031】
一実施形態では、出力214は、結合動作の結果の表現を含む信号を生成する信号生成器からなる。この信号は、例えば、記憶手段に記憶される、または受信機に送信されることが可能である。信号生成器は、第1の関数への入力の表現を信号に含めるように構成されることが可能である。これは、受信者がこの値を別の方式で得ることができる場合には省略されてよい。結合動作の実装は、関数の単一の結果を暗号アルゴリズムの複数の結果と組み合わせるように構成できる。そのように構成すると、関数の同一の結果を複数回再使用することで効率が向上する。したがって、関数への対応する入力は、信号中に一度のみ含めればよい。
【0032】
ホワイトボックス実装は、ルックアップテーブルおよびXOR演算を備えることができる。Chow等によると、明示的なXOR演算が、入力と出力の符号化を使用して難読化されたルックアップテーブルに置き換えられる。効率を向上させるために、それらのルックアップテーブルは、明示的なXOR演算に置き換えられてよい。そのようにしても、なお攻撃者がホワイトボックス実装の一部から基礎となる鍵を導出することを阻止するので、アプリケーションによっては十分なホワイトボックスセキュリティが得られることが分かっている。
【0033】
ホワイトボックス実装をハードウェア装置または特定のユーザにバインドするには、ホワイトボックス実装は、装置および/またはユーザを識別して識別データを得る手段と、識別データに依存して関数の出力を設定する手段とを備えることができる。例えば、ルックアップテーブルの1つまたは複数が、識別データを含むように選択される。その他のルックアップテーブルは、ホワイトボックス実装の最終結果全体が識別データの包含によって変化しないように適合できる。この特徴により、暗号システムの不正使用を阻止することができる。この技術の例は、特許文献2に開示されている。
【0034】
図3に暗号化部301および解読部350の一実施形態を示す。暗号化部301は、暗号システム100に基づき、解読部は暗号システム200に基づく。ただし、これは限定ではない。例えば、暗号化部を暗号システム200に基づかせ、解読部を暗号システム100に基づかせることも可能である。例えば、暗号化部301は、コンテンツサーバに含め、音声または映像コンテンツの暗号化に使用され、解読部350は消費者家電装置に含めて、暗号化コンテンツを解読し、コンテンツの再生を許可することができる。暗号化部301と解読部350の間の通信は、インターネット、ケーブルテレビ網等のデジタル放送媒体、またはDVDやBlu-ray(登録商標)ディスク等の取り外し可能な記憶媒体を介して行うことができる。
図1および
図2と同様の要素を識別するために同様の参照符号が記載されている。暗号化部301は以下を備える。
-第1の暗号アルゴリズム(例えばRSAのような公開鍵暗号化アルゴリズム等の暗号化アルゴリズム)を利用して暗号化するデータを取得する入力112。
-入力112で取得されたデータを暗号化するように構成された第1の暗号アルゴリズムの実装104。
-値xを生成する手段110。この手段にはカウンタまたは乱数生成器が使用されてもよい。外部の供給源から値xを取得する、または暗号アルゴリズムの実装104の出力から生成することも可能である。
-値xに適用される第1の関数の実装102。
-第1の関数の結果および第1の暗号アルゴリズムの結果に依存して暗号化データを設定する第1の結合動作の実装106。
-第1の結合動作の結果を表す情報を解読部350に提供する出力114。出力は、第1の関数への入力を表す情報を解読部350に提供することもできる。
【0035】
解読部350は、以下を備える。
-第1の関数への入力を表す情報を取得する入力210。この情報は、暗号化部301の出力114から受け取られる。解読部350内で値xを再現することも可能である。その場合、入力210は、値xを生成する手段110のコピーに置き換えられてよい。
-暗号化部301の出力114から第1の結合動作の結果を表す情報を取得する入力212。
-第1の関数への入力を表す情報に少なくとも部分的に基づく値に第2の関数を適用するように構成された第2の関数の実装202。第2の関数は、第1の関数と同じであってよい。ただし、値xが符号化された形態で解読部350に送信される場合は、その符号化が第2の関数によって取り消される。
-第2の関数の結果および第2の暗号アルゴリズムの結果に依存して、解読されたデータを設定する第2の結合動作の実装206。第2の結合動作の実装206は、まず第1の結合動作106の効果を取り消す。例えば、第1の結合動作が、実装102の出力と実装104の出力の乗算を伴う場合、第2の結合動作は、入力212で得られる値と第2の関数の実装の出力の逆数との乗算を含んで、中間の結合値を得ることができる。その後、第2の結合動作の実装206は、第2の暗号関数の実装204に、その第2の暗号関数を中間の結合値に適用させ、それにより、解読されたデータを生成する。そのために、実装206は、第2の暗号アルゴリズムの実装204を呼び出す制御手段(図示せず)を含むことができる。
-第1の結合動作の結果を表す情報の少なくとも一部から導出されたデータに暗号アルゴリズムを適用するように構成された第2の暗号アルゴリズムの実装204。第2の暗号アルゴリズムは、例えば、第1の暗号アルゴリズムに使用される暗号アルゴリズムに対応する解読アルゴリズムである。
【0036】
第1の関数の実装102もしくは第2の関数の実装202、またはその両方は、それぞれ暗号化部301もしくは解読部350、またはその両方を不正な改竄から保護するためのホワイトボックス実装である。
【0037】
図4に、暗号処理の方法を示し、この方法は、関数のホワイトボックス実装を利用して第1の値に関数を適用する(402)ステップと、第2の値に暗号アルゴリズムを適用する(404)ステップと、関数の結果および暗号アルゴリズムの結果に依存して、暗号処理されたデータを設定する結合動作を適用する(406)ステップを含む。
図4に示す処理ステップの順序は一例に過ぎず、限定ではない。
【0038】
暗号アルゴリズムを関数Fで表す。以下に、関数Fのホワイトボックス実装を説明する。例えば、RSAの暗号化アルゴリズムのホワイトボックス実装を導出することが目標である場合は、F(m)が、メッセージmに関連付けられた暗号文を表し、ハッシュ関数MD4のホワイトボックス実装を導出することが目標である場合は、F(m)は、メッセージmに関連付けられたハッシュ値を表す。
【0039】
ホワイトボックス実装が利用できる任意の関数をGとする。関数Gは全単射である必要はない。関数Gは、例えば、ハッシュ関数または乱数生成関数である。FおよびGの領域をそれぞれdom(F)およびdom(G)で表し、FおよびGの範囲をそれぞれim(F)およびim(G)と表す。
さらに、im(F)内の値のビット長をnとし、dom(G)内の値のビット長をmとする。
【0040】
関数Cが、C: im(G)×im(F) → im(F)と定義される。この関数は、2番目の引数が全単射
であることが好ましい。Cは効率的に計算できることが好ましい。例えば、C(x,y)=x・yまたはC(x,y)=x+yである。
【0041】
次に関数Hが導入される。H: dom(G)×dom(F) → dom(G)×im(F)。関数Hは、H(x,y)=(x,
C(G(x),F(y)))によって定義される。
【0042】
関数Hは、暗号アルゴリズムを定義する。HがFおよびGから構成される方式を考慮して、Hの実装は、HがFの暗号特性とGのホワイトボックス特性を「継承」するように構築することが可能である。その結果、Fの暗号強度は、Gのホワイトボックス実装の改竄防止特性と組み合わせられる。したがって、Hは、そのブラックボックスセキュリティに関して、少なくともFと同等にセキュアにすることができる。また、そのホワイトボックスセキュリティに関して、Hは、FおよびCがホワイトボックスではない実装形態で実装された場合でも、Gを少なくとも部分的にホワイトボックス実装の形で実装することにより、ホワイトボックスのセキュリティを持たせることができる。
【0043】
Fが、nFの出力ブロックサイズを有するブロック暗号の暗号化または解読のアルゴリズムを表し、Gが、サイズnGの入力データを有する関数を表す場合、Gの入力データとGの出力の両方がHに含められるので、送信されるデータはnF+nGのサイズになりうる。一定の値aによってxが与えられるか、またはxがその他の形で解読部において既知であるとする。
すると、Hの出力を導出するためにホワイトボックス実装を実行する必要がなくなる。そして、CおよびFの実装を実行すれば十分であり、Gのホワイトボックス実装と比べると計算的に効率的である可能性がある。さらに、そのような場合には、値xは、暗号文から省略されてもよく、それにより暗号文のサイズが小さくなる。これにより、以下の手法が可能になる。
【0044】
データブロックごとではなく、時折xを変えることも可能である。そのようにすると、ホワイトボックスのセキュリティと性能のバランスを取ることができる。Hが暗号化アルゴリズムを指定する場合、xが変更された場合には、暗号文はH(x,y)=(x,C(G(x),F(y)))によって与えられ、xが変更されていない場合は単にHx(y)=C(G(x),F(y))によって与えられることに留意されたい。Hが解読アルゴリズムを指定する場合は、暗号文は、xが変更された場合は(x,y)によって与えられ、xが変更されていない場合はyのみによって与えられうる。xの値の所定の連続を使用する、またはxを暗号文に依存させることも想定される。それによっても、暗号部から解読部に送信されるデータの量が減る。
【0045】
上記の手法および処理は、例えば何らかの関数DについてH(x,y)=(D(x),C(G(x),F(y)))を使用して適用することも可能であることが認識される。Dは、D(x)からG(x)を導出できるという特性とともに選択される。したがって、受信側は、E(D(x))=G(x)によって定義される関数Eを実装することが好ましい。
【0046】
一実施形態では、AESのホワイトボックス実装に基づいてRSAのホワイトボックス実装が構築される。Chow等によって説明されるAESのホワイトボックス実装はこの目的に適しているが、別の種類のホワイトボックス実装も使用することができる。ここではRSAおよびAESは、例として使用される。暗号関数であるか否かに関係なく、他の関数がRSAおよびAESの代わりの代替として使用されてよい。
【0047】
RSAの暗号化アルゴリズムを関数Fで表すとする。したがって、データブロックmについて、F(m)は、RSAに従ってデータブロックmに関連付けられた暗号文を表す。何らかの特定の鍵または鍵のセットが併せて使用されることが想定されるが、鍵の扱いの詳細は、このテキストでは詳細に説明しない。RSA等の暗号アルゴリズムにおける暗号鍵の使用法は、当技術分野で知られている。本実施形態では、mのブロックサイズは、128ビット未満である。ただし、これは限定ではない。128ビットはAESのブロックサイズに対応するが、これは、本実施形態ではAESも使用されることを考えると利便である。本実施形態では、関数Gは、AESの暗号化アルゴリズムを表し、Cは、GF(2128)における乗算を表し、すなわち、x,y∈GF(2128)の場合にC(x,y)=x・yである。カウンタTを使用して、xの値を提供する。以下の処理ステップを使用して、Hに従ってメッセージを暗号化する。
【0048】
何らかの事前に指定された条件が満たされた場合にカウンタTを増加させる。例えば、カウンタは、K個のデータブロックごとに増加させることができる。
【0049】
次に、値γ=C(G(x),F(y))=G(x)・F(y)が計算され、xはカウンタTの値によって与えられ、yは、暗号化されるデータブロックによって与えられる。
【0050】
次に、暗号文ブロックが作成される。前回の暗号化以降カウンタが変化している場合、またはそれが最初の暗号化である場合、またはその他の理由で解読部がカウンタの値を知らない可能性がある場合は、H(x,y)=(x,γ)によって暗号文が与えられる。それ以外の場合は、γによって与えられる。
【0051】
これらのステップは、暗号化される後続のデータブロックについて繰り返される。理解されるように、解読部に、暗号化部で使用されるG(x)の値と同一または機能的に同等のG(x)の値を使用させる機構が機能している限り、暗号文は通例、γの値を含み、x(または場合によってはD(x))の値の1つ、一部、またはすべてを含む場合も含まない場合もある。また、カウンタTの代わりに、値xは、乱数生成器の結果であっても、または、平文または暗号文から例えば何らかのハッシュ関数を用いて計算されてもよいことが理解されよう。
【0052】
Gは、ホワイトボックス実装として実装されることが可能である。そのようにして、Hの実装は、Gをホワイトボックス実装として実装することによって、ホワイトボックス実装とすることができる。
【0053】
上述の方式で暗号化されたデータを解読することが可能な解読処理は以下の通りである。
【0054】
暗号文ブロックが値xを含んでいる場合は、G(x)が、暗号文ブロックの値xを使用して計算される。それ以外の場合は、以前に計算されたG(x)の値が使用される。
【0055】
次にGF(2128)の(G(x))-1を求める。(G(x))-1は、(関数Gの逆数ではなく)GF(2128)のG(x)の逆数を表すことに留意されたい。
【0056】
その後、F(y)=(G(x))-1・γを計算する。
【0057】
次に、RSAの解読アルゴリズムを使用して、F(y)に基づいて平文ブロックyを計算する。RSAのこのような解読アルゴリズムは当技術分野で知られている。このステップでは、F(y)は、暗号文ブロックとみなされる。
【0058】
この解読処理のホワイトボックス実装を作成するには、関数Gのホワイトボックス実装を提供すれば十分であることに留意されたい。それは、攻撃者が関数Gを破ることができなければ実装を破ることが難しいためである。
【0059】
解読処理が、カウンタTの独自のコピーを保持し、カウンタTが増加される条件を知っている場合には、値xは、暗号文に加える必要はない。したがって、その場合は、ブロックサイズは増大しない。カウンタの代わりに、以前の暗号文ブロックから値xを導出することもできる。その場合も値xは暗号文に加える必要がない。
【0060】
本明細書に記載される技術は、暗号鍵を使用するソフトウェア実装へのアクセス権を有する攻撃者から暗号鍵を隠蔽するために使用できる。
【0061】
本発明は、本発明を実用化するために適合された、コンピュータプログラム、特にキャリア上またはキャリア内のコンピュータプログラムにも適用されることが理解されよう。プログラムは、ソースコード、オブジェクトコード、部分的にコンパイルされた形態等の中間ソースコードおよびオブジェクトコード、または本発明による方法の実装で使用するのに適した他の形態とすることができる。そのようなプログラムは種々のアーキテクチャ設計を有する可能性があることが理解されよう。例えば、本発明による方法またはシステムの機能を実施するプログラムコードは、1つまたは複数のサブルーチンに再分割されることが可能である。それらのサブルーチン間に機能を分散させる多くの異なる方式が当業者に明らかであろう。サブルーチンは、共に1つの実行ファイルに格納して、独立型のプログラムを形成することができる。そのような実行ファイルは、コンピュータ実行可能命令、例えばプロセッサ命令および/またはインタープリタ命令(例えばJava(登録商標)インタープリタ命令)を含むことができる。あるいは、サブルーチンの1つまたは複数またはすべてを少なくとも1つの外部のライブラリファイルに格納し、静的または動的(例えば実行時)にメインプログラムとリンクすることができる。メインプログラムは、サブルーチンの少なくとも1つへの少なくとも1回の呼び出しを含む。また、サブルーチンは、相互への関数呼び出しを含むことができる。コンピュータプログラム製品に関連する実施形態は、ここで述べる方法の少なくとも1つの方法の処理ステップ各々に対応するコンピュータ実行可能命令を含む。それらの命令は、サブルーチンに再分割する、かつ/または静的または動的にリンクできる1つまたは複数のファイルに格納されることが可能である。コンピュータプログラム製品に関連する別の実施形態は、ここで述べられるシステムおよび/または製品の少なくとも1つの手段各々に対応するコンピュータ実行可能命令を含む。それらの命令は、サブルーチンに再分割する、かつ/または静的または動的にリンクできる1つまたは複数のファイルに格納されることが可能である。
【0062】
コンピュータプログラムのキャリアは、プログラムを搬送することが可能な任意のエンティティまたは装置である。例えば、キャリアは、例えばCD ROMや半導体ROMなどのROM、または例えばフロッピー(登録商標)ディスクやハードディスク等の磁気記録媒体等の記憶媒体を含むことができる。さらに、キャリアは、電気信号または光信号等の伝送可能キャリアであってもよく、電気信号または光信号は、電気ケーブルまたは光ケーブルを介して、または無線や他の手段を介して伝達されることが可能である。プログラムがそのような信号に実施される場合、キャリアは、そのようなケーブルまたは他の装置または手段によって構成されることが可能である。あるいは、キャリアは、プログラムが埋め込まれた集積回路であってもよく、集積回路は、この関連する方法を行うために、または行う際に使用するために適合される。
【0063】
上記の実施形態は、本発明を限定するのではなく例示するものであり、当業者は、添付の特許請求の範囲から逸脱することなく多くの代替実施形態を設計することができることに留意されたい。クレームにおいて、括弧内に入れた参照符号は、クレームを限定するものとは解釈すべきでない。動詞「〜を備える」およびその活用形は、クレームに記載された以外の要素またはステップの存在を除外するものではない。要素の前の冠詞「a」または「an」は、その要素が複数存在することを除外するものではない。本発明は、数個の別個の要素からなるハードウェア、および適切にプログラムされたコンピュータを用いて実施することができる。数個の手段を列挙する装置クレームでは、それら数個の手段は、1つの同一のハードウェアによって実施することができる。相互に異なる従属クレームに特定の手段(measure)が記載されることだけでは、それら手段の組み合わせが有利に使用することができないことを意味しない。