(57)【要約】【課題】指数を難読化する方法が提供される。【解決手段】方法は、暗号化プロセスに使用される複数の要素xについて、λ>0及びxλ=1をそれが保持する値λを識別するステップ（304）を具備している。方法は、λより大きい難読化された指数yを識別するステップ（306）と、前記難読化された指数yを示す情報を提供するステップ（308）とをさらに具備している。方法は、a<λである鍵値aを設定するステップと、正の整数bを選択するステップと、y=a+bλを計算するステップとを具備している。【選択図】図３
2014207717.tif 000002
【特許請求の範囲】
【請求項１】
指数を難読化する方法であって、
第１の決定手段を用いて、λ > 0と、a < λ、と、暗号化処理においてべき乗の底値として使用される、乗法群からの、複数の要素xについてxλ = 1と、をみたす値λを決定するステップであって、aは暗号化処理における指数としての利用のための鍵値である、ステップと、
第２の決定手段を用いて、ビットストリングsを決定するステップと、
難読化ツールを用いて、λより大きく、正の整数bについてy = a + bλをみたす難読化された指数yを決定するステップであって、前記難読化された指数yのビット表現が前記ビットストリングsを具備するものである、ステップと、
提供手段を用いて、前記暗号化処理での使用のための前記難読化された指数yを示す情報を提供し、これによって前記鍵値aを攻撃者から隠蔽するステップと、
を具備する
方法。
【請求項２】
前記難読化された指数yを示す情報が前記ビットストリングsを省略する、請求項１に記載の方法。
【請求項３】
前記ビットストリングsがtビットを有し、前記難読化された指数yのための与えられたビット長であるKと、
【数１】
2014207717.tif 000060
とについて、
【数２】
2014207717.tif 000061
であって、前記方法が、前記第２の決定手段を使用して、
t < K - rである場合には、前記ビットストリングsの前、及び／もしくは、後に任意のビットを追加することによって前記ビットストリングsを長さがK - rビットとなるよう拡張するステップと、
r個のゼロビットを前記ビットストリングsの最下位側に追加することによって、前記ビットストリングsから値Ｓを得るステップと、
【数３】
2014207717.tif 000062
を定義するステップと、
を具備する、請求項１もしくは２に記載の方法。
【請求項４】
デバイスにおいて鍵値aを用いて暗号化処理を行う方法であって、
第１の受信手段を用いて、底値xを受信するステップであって、前記底値xが前記暗号化処理においてべき乗の底値として用いられる、乗法群からの、複数の要素の一つであり、
第２の受信手段を用いて、前記暗号化処理における利用のための難読化された指数yの部分を示す情報を受信するステップと、
組み合わせ手段を用いて、前記難読化された指数yを得るために受信した前記情報とビットストリングsを組み合わせるステップであって、前記鍵値aに対してy = a + bλであり、a < λ、かつ、bが正の自然数であり、難読化された指数yのビット表現が前記ビットストリングsを有し、これによって攻撃者から前記鍵値aを隠蔽するものである、ステップと、
べき乗器（exponentiator）を用いて、xyを計算することにより、前記暗号化処理の少なくとも部分を行う、方法。
【請求項５】
前記ビットストリングsが
（ａ）前記暗号化処理を行うためのデバイスの識別子
（ｂ）前記暗号化処理を行うためのデバイスのユーザのパスワード
（ｃ）前記暗号化処理を行うためのデバイスのユーザのユーザ名
のいずれかを表すものである、請求項１〜４のいずれか１に記載の方法。
【請求項６】
前記暗号化処理で用いられる前記複数の要素が、前記乗法群のすべての要素である、請求項１〜５のいずれか１に記載の方法。
【請求項７】
請求項１〜６のいずれか１に記載の方法を実行するよう構成されたシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、指数値（exponent value）を難読化することに関する。また、本発明は、べき乗演算（exponentiation operation）を実行することに関する。また、本発明は、暗号化アルゴリズムの一部であるべき乗（exponentiation)に関する。
【背景技術】
【０００２】
現在、ますます、コンテンツは、例えば、インターネット、ブロードキャスト媒体によって、又は、CD又はDVDなどのデジタルデータキャリアによって、ユーザにデジタル形式で入手可能である。消費家電（CE）製品（例えば、テレビ、セットトップボックス、及びオーディオ設備）は、これらデジタルコンテンツをレンダリングするために、デジタルデータ処理能力を備えている。
【０００３】
著作権のあるコンテンツについてインターネット及び他のデジタル配布媒体の使用が、コンテンツプロバイダの利益を確保する挑戦を作った。特に、コンテンツプロバイダの著作権及びビジネスモデルを実施するのに利用可能な技術的な手段を有することが望ましい。ますます、CE製品は適したソフトウェアをロードされたプロセッサを使用して操作される。そのようなソフトウェアは、デジタルコンテンツ（例えば、オーディオ及び／又はビデオ）のレンダリング（再生）のための機能の主要部分を含んでもよい。再生ソフトウェアの制御は、コンテンツが使用される条件を含むコンテンツ所有者の利益を実施する１つの方法である。従来は、多くのCEプラットフォーム（PC及びPDAを除く）がクローズされ、現在は、さらに多くのプラットフォームが、少なくとも部分的に、オープンにされ、かつ、コンピュータプログラマがソフトウェアを調査し、かつ、ソフトウェアへ変更を加えることを可能にさせる。そのようなオープンシステムでは（パーソナルコンピュータを含む）、一部のユーザが、コンテンツへのアクセスをもたらすハードウェア及びソフトウェアに対して完全な制御を有すると仮定してもよい。また、一部のユーザは、どんなコンテンツ保護メカニズムでも攻撃及びバイパスする多くの時間及びリソースを有してもよい。その結果、コンテンツプロバイダは、コミュニティ（すべてのユーザ又はデバイスを信じることができない）への敵対的なネットワーク上の正規ユーザへコンテンツを配信しなければならない。
【０００４】
デジタル権利管理システムが、正規ユーザへのデジタルコンテンツの配布を制御するために導入されてきた。一般に、デジタル権利管理システムは、正規ユーザだけにコンテンツを復号することを許可する暗号化技術を使用する。消費者装置におけるそのような暗号化技術の実施は、難読化されて、攻撃者が鍵の値を見つけることをさらに困難にさせる。多くの異なる種類のアプリケーションについて一般に使用される暗号の例は、DES、AES、RSA、及び、国際公開第9967918号パンフレットで開示された方法である。
【０００５】
鍵ハンドリングに関連して、再生のため、メディアプレーヤはライセンスデータベースから復号鍵を読み出さなければならない。次いで、暗号化コンテンツの復号のため、メモリのどこかにこの復号鍵を格納しなければならない。これは、鍵に対する攻撃について２つの選択肢を攻撃者に与える。第１に、ライセンスデータベースアクセス機能のリバースエンジニアリングが、攻撃者に、すべてのライセンスデータベースからアセット鍵（asset key）を読み出すことを可能にさせる。第２に、コンテンツ復号中のメモリへのアクセスの観察によって、アセット鍵を読み出すことが可能である。両方の場合で、鍵は危険にさらされると考えられる。
【０００６】
「White-Box Cryptography and an AES Implementation」（Stanley Chow, Philip Eisen, Harold Johnson, Paul C. Van Oorschot著、Selected Areas in Cryptography: 9th Annual International Workshop, SAC 2002, St. John's, Newfoundland, カナダ、2002年８月15-16日）、及び、「A White-Box DES Implementation for DRM Applications」（Stanley Chow, Phil Eisen, Harold Johnson, Paul C. van Oorschot著、in Digital Rights Management: ACM CCS-9 Workshop, DRM 2002, Washington, DC, USA, 2002年11月18日）（以降、これら２つの出版物をまとめて「Chow」と称す）が、個別のステップよりもランダム全単射表示成分（random bijections representing composition）でそのテーブルをコード化すること、及び、含んでいるアプリケーションの中にさらに排除することにより暗号境界を拡張することの組合せによって、鍵を隠蔽することを意図した方法を開示している。
【０００７】
Chowに開示された方法は、ソフトウェアを完全にデバックすることができる人に暗号化鍵を露呈させることなく、ソフトウェアにおいて暗号演算を実行することを可能にさせる。Chowのアプローチでは、暗号化鍵は、数学演算よりもルックアップテーブルを使用することによって隠蔽され、その結果、数学演算のオペランドをそれ自体として格納する必要がなくなる。これらテーブルを、ランダム全単射を使用してコード化して、さらにそれらを難読化してもよい。１つのテーブルのコード化を、他のテーブルのコード化によって取消すか、又は、プログラムの他の場所に取消してもよい。しかし、すべての演算が、ルックアップテーブルによって容易に表現されるとは限らない。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】国際公開第9967918号パンフレット
【非特許文献】
【０００９】
【非特許文献１】White-Box Cryptography and an AES Implementation、Stanley Chow, Philip Eisen, Harold Johnson, Paul C. Van Oorschot著、Selected Areas in Cryptography: 9th Annual International Workshop, SAC 2002, St. John's, Newfoundland, カナダ、2002年８月15-16日
【非特許文献２】A White-Box DES Implementation for DRM Applications、Stanley Chow, Phil Eisen, Harold Johnson, Paul C. van Oorschot著、in Digital Rights Management: ACM CCS-9 Workshop, DRM 2002, Washington, DC, USA, 2002年11月18日
【発明の概要】
【課題を解決するための手段】
【００１０】
幅広い範囲の演算を難読化する方法を有することは好都合である。この懸念により良く対処するために、本発明の１態様では、指数を難読化する方法が提示され、べき乗の底値（base value）として、暗号化プロセスにおいて使用される複数の要素xについて、λ>0及びxλ=1をそれが保持する値λを識別するステップと、λより大きい難読化された指数yを識別するステップと、前記難読化された指数yを示す情報を提供するステップとを具備している。
【００１１】
したがって、難読化された指数yは、前記べき乗を計算するのに正確に必要とするより大きく提供される。本発明のこの態様は、λより小さい指数について、対応する指数値が存在する（λより大きく、かつ、べき乗を実行するとき同じ成果を与える）という見識を使用する。この特性を使用して、指数値を要望通り大きくしてもよい（それは、調査及び権限のないコピーに対して指数値をより良く難読化させることができるので好都合である）。
【００１２】
前記べき乗xλ=1を有限代数構造で実行してもよく、かつ、例えば、モジュロn（modulo n）（ここで、代数構造は要素{0,0,...n-1}を有する）を実行してもよい。
【００１３】
前記難読化された指数yを示す情報を、暗号化プロセスでの使用のため、提供してもよい。例えば、難読化された指数yを、暗号化システムを備えたデバイスに提供してもよい。デバイスに難読化された指数yを提供することによって、デバイスは、後続のべき乗演算において指数yを使用してもよい。例えば、そのような暗号化システムは、RSAなどの非対称暗号を実装する。態様では、難読化された指数yは、非対称暗号の秘密鍵に依存する。これにより、秘密鍵をより良く保護することができる。
【００１４】
本発明の他の態様では、難読化された指数を有するべき乗を実行するため、システムが提示され、前記べき乗の底xを識別するための底識別手段であって、xはn個の要素を有するセットのうちの要素である手段と、前記セットのすべての要素ξについて、λ>0及びξλ=1をそれが保持する値λより大きい指数yを示すデータを識別するための指数識別手段と、xのy乗の成果を計算することによって少なくとも一部の暗号化アルゴリズムを実行し、それによって、前記べき乗の成果を得るためのべき乗器（exponentiator）とを備えている。
【００１５】
前記指数はそのサイズを増大させることによって難読化されてきた。これは、λより小さい指数aについて、対応する指数値yが見つけられる（λより大きく、かつ、べき乗の同じ成果を与える）という見識に基づいている。したがって、このより大きな値yをaの代わりに使用してもよく、かつ、さらに、べき乗の同じ成果を提供する。したがって、べき乗を実行することができる（比較的小さな値aに対するべき乗を実行するデバイスを提供することなく）。一般に、yのビット表現（bit representation）は、aのビット表現より大きい。さらに、そのような値yを所定サイズより大きく選択することができる（例えば、指数aへ十分多様なλを加算することによって）。値yを要望通り大きく選択してもよいので、べき乗の成果を変えることなく、その対応するビット表現も要望通り大きくすることができる。これは値yをコピーするのをより困難にさせる。それは暗号への鍵においてビット数を増大させ、暗号によって提供されるセキュリティを増大させる。べき乗へのそのようなアプローチを、例えば、非対称暗号のホワイトボックス実装（white-box implementation）を作成するために利用してもよい。
【００１６】
態様では、システムは、底値xに値βを掛け、かつ、べき乗の成果にβ−yを掛けるための手段を備えている。これら２つの乗算を、底xの値及びべき乗xyの成果を難読化するのに使用してもよい。乗算は、攻撃者が、べき乗の入力及び／又は出力を観察することによって、x及び／又はxyの真の値を発見するのを防ぐために、どこで実行してもよい（べき乗演算を使用するデータ処理システムのモジュールにおいて）。
【００１７】
態様では、所定のビットストリングsを、難読化された指数yのビット表現に含めてもよい（指数aに加算される多様なλを適切に選択することによって）。これは、既存情報（例えば、パスワード、ハッシュ値、又はハードウェア識別子）に関する情報を、指数を示す情報の中に組み込ませる。べき乗を実行するシステムを、前記既存情報にアクセスすることによって、ビットストリングsを読み出すようにプログラムしてもよい。指数を示す情報の残りの部分を、例えば、サーバによって提供してもよい。
【００１８】
本発明のさらなる態様が独立請求項に定義される。従属請求項が好ましい態様を定義する。
【００１９】
本発明のこれら及び他の態様がさらに明らかにされ、かつ、図面を参照して説明される。
【図面の簡単な説明】
【００２０】
【図１】べき乗を実行するためのシステムを図示している。
【図２】べき乗を実行するプロセスを図示している。
【図３】指数値を生成するプロセスを図示している。
【図４】指数値を生成するためのシステムを図示している。
【図５】ハードウェアアーキテクチャを図示している。
【発明を実施するための形態】
【００２１】
暗号化アルゴリズムのホワイトボックス実装は、暗号化鍵が攻撃者から隠蔽されるソフトウェア実装である。攻撃者は、実装への完全なアクセス、及び、実行環境に対する完全な制御を有すると仮定してもよい。x変数に対するべき乗xa mod nを実装するためのアプローチを有することが好ましい（それにより、値aが攻撃者から隠蔽される）。RSAがそのようなべき乗（aが鍵から導出される）を含むので、そのようなアプローチを使用して、例えば、RSAのホワイトボックス実装を導出することができる。
【００２２】
Chowらは、非対称ブロック暗号AES及びDESのためのホワイトボックス実装を提示する。Chowらによって用いられたアイデアを使用して、他の非対称ブロック暗号のホワイトボックス実装を導出するために、一部拡張することもできる。しかし、非対称暗号のホワイトボックス実装（例えば、RSA及びElGamal）を導出するのにChowらに開示された方法を使用するのは困難である。本明細書では、べき乗xa（ここで、aは定数であり、かつ、xは変数であってもよい）のホワイトボックス実装を導出するためのアプローチが開示される。例えば、そのようなべき乗は、ElGamal公開鍵暗号において発生する。最も頻繁に使用される公開鍵暗号RSAも、べき乗に基づいている。メッセージmの暗号化がc=me mod n（ここで、値e及びnは公開鍵によって与えられる）を計算することに対応する。暗号テキストcの復号は、m=cd mod n（ここで、値dは秘密鍵によって与えられ、値nは素数p及びqについてのp・qによって与えられ、かつ、値dはe、及びnの因数分解から計算することができる）を計算することに対応する。両方のべき乗で、底値は定数でないが、メッセージのコンテンツに依存することに注意しなければならない。したがって、アプローチが、x変数でべき乗xaを実装するために必要とされる（それにより、値aが攻撃者から隠蔽される）。これにより、例えば、RSAの暗号化及び復号の側の両方のホワイトボックス実装を導出することができる。また、RSA署名体系の署名生成及び署名照合ルーチンを、このアプローチに基づきホワイトボックス化することができる。
【００２３】
図１は、べき乗を実行するためのシステム100の実施例を図示している。システム100によって実行されるべき乗は、難読化された指数を有してもよい。例えば、そのようなシステムを、デジタル著作権管理（DRM）又は暗号法を使用して保護されるコンテンツを処理することができるデバイスの中に構築してもよい。例のデバイスは、音楽プレーヤ、セットトップボックス、デジタルチューナ、デジタルテレビ、DVDプレーヤである。実施例は、べき乗の指数を、比較的大きなデータ表現（例えば、多数のビット）によって表すことを可能にし、一方では、システムを危険にさらすことを意図する人が、大きなデータ表現をより小さなものに置き換えるのを困難にさせる。例えば、システムを、ソフトウェアによって、パーソナルコンピュータに実装してもよい。
【００２４】
システムは、べき乗演算の底を示すデータを受信するため、底入力108を具備してもよい。例えば、この底入力108は、暗号化されたコンテンツのデジタルコンテンツストリームを受信するように構成してもよい。しかし、これに限定されない。代わりに、底入力108は、例えば、デジタル署名データを含む暗号トランザクションデータ又は識別子データを受信するように構成してもよい。底入力108は、受信されたデータへ前処理演算を実行してもよく、例えば、データが解析され、かつ、暗号化されていないデータ部分を暗号化されたデータ部分とは異なって扱ってもよい。例えば、データを、取り外し可能な媒体、内部記憶手段から（例えば、ハードディスク、フラッシュメモリ、又はRAM）、又は、ネットワーク接続から（例えば、ケーブル、衛星（例えば、DVB-Sを使用して）、又はインターネット）読み出してもよい。暗号化されていないデータを、他のモジュール（図示せず）に転送してもよい。暗号化されたデータを、底識別手段102へ転送してもよい。
【００２５】
底識別手段102は、底入力108から底値xを示すデータを受信する。このデータを使用して、べき乗の底xを識別する。例えば、底識別手段102は、底入力108からそのような値xを受信する。代わりに、底識別手段は、底入力108から受信されたデータを解析して、底値xを含むデータフィールドを識別する。一般に、底値xは、代数構造（通常は、有限構造）からのメンバである（乗算演算が定義される）。また、この乗算演算は、べき乗を実行するとき適用する。
【００２６】
システムは、指数入力110をさらに備えている。この入力110は、底入力108と類似の方法でデータを読み出す。指数入力110は、底入力108と同じデータソースから、又は、異なるデータソースからその入力を得てもよい。これはアプリケーションに依存する。例えば、個別の鍵サーバを設けてもよい（指数入力110に更新された鍵を時々送信する）。指数入力110はいくつかの前処理ステップを実行してもよく、かつ、本明細書で説明されるより多くの機能を有してもよい。しかし、指数入力110は、その入力に基づく指数に関するデータを作成し、かつ、このデータを指数識別手段104に転送する。
【００２７】
指数識別手段104が、指数yを示すデータを識別するように構成される。データを指数入力110から、及び／又は、１又は複数の他のソース112から、受信されたデータにおいて識別してもよい（以降により詳細に論じられる）。また、指数識別手段104は、識別されたデータから、指数yの実際の値を抽出してもよい。例えば、指数識別手段104から受信されたデータを、所定の方法で、他のソース（１又は複数）112から取得されたデータと組み合わせてもよい。指数識別手段104は、比較的大きな指数値yを識別するように構成される。この場合、値λが存在する（それが、底識別手段102によって識別される底値xについて、xλ=1を保持する）と仮定される。指数識別手段104は、指数値y（値λより大きい）を識別するように構成されている。このため、十分に大きな記憶場所を、大きな指数値yを格納するために設けてもよい。さらに、識別手段104は、そのような大きな値を受信可能であってもよい（指数入力110及び／又は他のソース112から、λより大きい指数yの値を受信することができるによって、）。これら値yは、λの10倍以上も大きくてもよい（暗号セキュリティを考慮して、指数値を大きくすることは好都合であるので）。識別された指数値yのビット長でさえも、λのビット長の10倍以上も大きくてもよい。
【００２８】
底識別手段102によって識別された底x、及び、指数識別手段104によって識別された指数yを、べき乗器（exponentiator）106に提供してもよい。そのようなべき乗器は、底値xのy乗を計算してもよい。この計算は当技術分野で既知の方法で実行してもよい。例えば、二乗及び乗算アルゴリズム（当技術分野で既知の）を、効率的な方法で、比較的大きな指数値yに対するべき乗を計算するのに利用してもよい。また、べき乗器106は、λより大きな指数値yを取り扱うのに適している。べき乗器106がこれら大きな指数値を扱うことに適するように、より大きな記憶場所を使用してもよく、かつ／又は、アルゴリズムを利用してもよい（大きな指数yを有するべき乗を計算するのに特に適する）。べき乗の結果（xyの成果）は後処理ユニット114に提供される（べき乗の成果に追加的な処理を適用してもよい）。そのような後処理ユニット114は、アプリケーション依存であり、かつ、システムにおけるさらなる処理のため、べき乗器106から取得されたデータを準備してもよい。例えば、べき乗の成果が復号されたマルチメディアコンテンツを含む場合、そのようなさらなる処理が、ディスプレイ及び／又はオーディオシステムに関して、ビデオ及び／又はオーディオコンテンツのレンダリングを含んでもよい。後処理ユニット114は、フォーマットの中にべき乗演算の１又は複数の成果を構成してもよい（例えば、システムのリマインダによって取り扱われて、そのようなレンダリングを実行する）。
【００２９】
実施例では、指数識別手段104によって識別されたデータが、１又は複数の値y1,...,ymを示してもよい。ここで、
【００３０】
【数１】
2014207717.tif 000003
【００３１】
であり、かつ、ここで、べき乗器は、値y1,...,ymに従って複数のべき乗を実行するように構成され、ここで、複数のべき乗は、xのy乗の計算の中間ステップを形成する。例えば、データは、１又は複数の指数y1,...,ymのシーケンスを示してもよく、ここで、
【００３２】
【数２】
2014207717.tif 000004
【００３３】
であり、指数のシーケンスの積
【００３４】
【数３】
2014207717.tif 000005
【００３５】
はyと等しい。そのような場合には、べき乗器は、少なくとも２つの異なる方法でべき乗を計算してもよい。第１に、積
【００３６】
【数４】
2014207717.tif 000006
【００３７】
を計算して、yを取得し、次いで、単一のべき乗xyを実行して、所望の結果を取得する。この場合、比較的大きな指数値yに対するべき乗を計算しなければならない。第２に、z1=x、及び、
【００３８】
【数５】
2014207717.tif 000007
【００３９】
に従って、複数のべき乗を計算してもよい。これは、大きな指数値に対するべき乗を実際に計算することなく、zm+1=xyを結果的にもたらす。
【００４０】
実施例では、底入力108で、又は、底入力108にデータを提供するのに関与するシステムの一部で、所定の値gに値βを掛けることによってxを計算するため、手段が提供される。例えば、所定の値gは、復号される暗号化されたコンテンツに依存してもよい。このように、システムのデータフローを観察している攻撃者が（特にユニット102,104,106）値gを見ない。同様に、後処理ユニット114で、又は、システムの他の場所で、べき乗の成果にβ-yを掛けるための手段を設けてもよい。これは、値β-y(βg)y=gyを結果的にもたらす。故に、底識別手段102、指数識別手段104、及び、べき乗器106で、値g又はgyを露呈させず、gyを計算してもよい。
【００４１】
指数yを示すデータの少なくとも一部を情報（特定のデバイス及び／又はユーザに固有であるか、又は、デバイス及び／又はユーザのグループに固有である）から導出してもよい。例えば、そのような情報は、ハードウェア識別子、ユーザ識別子、又は、ハードウェア特徴（例えば、プロセッサのクロック周波数、又は、ディスクアクセス時間）に基づいてよい。手段112は、指数yを示すデータの少なくとも一部を提供するため、設けてもよい。手段112は、そのようなデータが格納され、かつ、指数識別手段104にデータを提供するメモリ場所にアクセスするように構成してもよい。また、手段112は、関連データのハッシュ値を計算し、かつ、指数識別手段104にハッシュ値を提供するように構成してもよい。例えば、ハッシュ値は、復号される一部のコンテンツの、又は、コンピュータプログラムコードのハッシュ値であってよい。これにより、指数データは比較的大きなデータ塊に依存させることが可能となる。手段112は、例えば、デバイスへ送信された制御コマンドを介して、ハードウェアデバイス（例えば、ハードディスク又はプロセッサ）のハードウェアIDを含んだメモリ場所にアクセスするように構成してもよい。これは、他のシステムに対してべき乗を成功裏に実行することをより困難にさせる（他のシステムは他のハードウェア識別子を有し、べき乗で使用される間違った指数yを発生させるので）。
【００４２】
べき乗演算は、RSA復号及び暗号化において重要なステップである。これらステップを説明された方法を使用して難読化してもよい。さらに、RSAにおける鍵は指数値yと密接に関係している。説明された方法により、より大きな値を使用して、かつ／又は、複数の値を使用して、指数を表すことができる（指数を格納するのに必要とされるビットの合計数をより大きくさせる）。さらに、鍵を知らない攻撃者が、対応する指数値（より小さく、かつ、同じべき乗結果を提供する）を見つけるのは困難である。したがって、より大きなデータビットを含むより大きな鍵を、RSA及び他の暗号化アルゴリズムとの関連で使用してもよい。RSAなどで、多くの場合、復号鍵は、最も秘密であり、かつ、大きなサイズが有利である鍵であり、説明されたべき乗演算を、RSA復号システムにおいて有利に実行してもよい。
【００４３】
説明された方法は、家庭用電子機器（例えば、PDA、音楽プレーヤ、デジタルチューナなど）に含まれてもよい。それらは、デジタル著作権管理方法（解析して模倣することが困難であり、かつ、権限のないコピー及び／又は配布を防止する）を提供する。また、説明された方法を、トランザクション処理、デジタル署名、及び、他の暗号化プロセス及びシステムにおいて使用してもよい。
【００４４】
図２は、難読化された指数を有するべき乗を実行する方法を図示している。方法はステップ200で開始される（例えば、暗号化されたデータパケットの受信に応じて、又は、ユーザコマンドに応じて）。ステップ202では、べき乗の底xが識別される。ステップ204では、指数yを示すデータが識別される。指数yは値λより大きい（それはλ>0及びxλ=1を保持する）。ステップ206では、暗号化アルゴリズムの少なくとも一部がxのｙ乗を計算することによって実行され、それにより、べき乗の成果を得る。プロセスはステップ208で終了し、かつ、新しい底値xを処理するため、繰り返してもよい（ステップ200で開始する）。
【００４５】
図３は、暗号化プロセスに使用するため、指数を難読化する方法を図示している。ステップ302では、暗号化プロセスのべき乗演算の指数値aを識別してもよい。例えば、鍵生成器（当技術分野で周知である）を使用して、暗号化鍵を選択してもよい。指数値aは鍵に依存してもよい。例えば、指数値aは鍵と等しくてもよい。
【００４６】
ステップ304では、値λが設定される（それは、代数構造の複数の要素xについて、λ>0及びxλ=1を保持する）。xλ=1である複数の要素xが潜在的な値（暗号化されたメッセージにおいて使用される）を含む。サポートすることができるメッセージにおいて高い柔軟性を可能とするためには、値λを設定してもよい（代数構造のすべてのxについてxλ=1が真であり、ここで、代数構造は乗算モジュロN（multiplication modulo N）を有するセット{0,1,2,3,...,N-1}であってよい）。そのような値λを当技術分野で既知の方法で計算してもよい。
【００４７】
ステップ306では、難読化された指数yが識別される（ここでy=a+bλであり、ここでbは正の整数である）。例えば、a及びλをステップ302及びステップ304によって設定してもよく、かつ、bが値の範囲（難読化された指数yの所望のおよそのビット長に対応する）からランダムに選択された正の整数であってよい。
【００４８】
ステップ308では、難読化された指数yを示す情報が提供される。例えば、それは暗号化されたコンテンツと共に取り外し可能な媒体に格納されるか、又は、それはデジタルネットワークを介してクライアントデバイスに転送される。また、底値を示す情報（例えば、暗号化されたコンテンツ）をクライアントデバイスに提供してもよい。
【００４９】
ステップ310では、プロセスが終了する。例えば、それは、新しい鍵が生成されるとき、ステップ300で再び開始してもよい。
【００５０】
１又は複数の値y1,...,ymを設定することができる（ここで、
【００５１】
【数６】
2014207717.tif 000008
【００５２】
かつ、ここで、値y1,...,ymが、値y1,...,ymに従って複数のべき乗を実行することによって、べき乗のy乗を計算することを可能にし、ここで、複数のべき乗が、xのy乗の計算の中間ステップを形成する。）。このように、難読化を、比較的小さな指数値y1,...,ymを使用することで実行することができる。例えば、複数の値y1,...,ymが選択される（ここで、
【００５３】
【数７】
2014207717.tif 000009
【００５４】
であり、ここで、指数のシーケンスの積
【００５５】
【数８】
2014207717.tif 000010
【００５６】
がyに等しい。）。難読化された指数yを示す情報は、複数の値y1,...,ymの少なくとも一部を示してもよい。他の例では、値y1,...,ym及び値z1,...,zmが提供される（ここで、
【００５７】
【数９】
2014207717.tif 000011
【００５８】
である。）。
【００５９】
ビットストリングsを識別し、かつ、bを選択することが可能である（難読化された指数yのビット表現がビットストリングsを含むように）。これは以降により詳細に説明される。例えば、クライアントデバイスのハードウェア識別子（又は、ユーザ名又はパスワード）を、このクライアント又はユーザのために特に準備された指数値の中に組み込ませるのに使用することができる。
【００６０】
クライアントのハードウェア識別子がクライアントデバイスで既に分かっているので、ユーザ名又はパスワードがユーザによって提供され、それに対応するデータの一部をクライアントデバイスへ転送することは必要とされない。したがって、指数値を示す情報を転送するとき、ビットストリングsを省略してもよい。
【００６１】
実施例では、難読化された指数yを識別するステップのステップ306は、λの倍数k（例えば、kλ）を設定するステップを含み、かつ、yがλよりはむしろkλに基づき決定される。例えば、yの値がkλまでの範囲でランダムに（使用された暗号化暗号文（cryptographic cipher）によって与えられた制約の中で）選択される。RSAの場合では、暗号化鍵eを所与として、復号鍵dが、e・d=1 mod λを解くことによって通常は見つけられる。しかし、本実施例では、λはkλによって置き換えられ、したがって、復号鍵dは、e・d=1 mod kλを解くことによって見つけられる。これはより大きな値dを結果として生じさせ、RSAにおける指数yとして使用される。
【００６２】
図４は、暗号化プロセスに使用するため、指数yを難読化するためのシステムを図示している。そのようなシステムは、暗号化プロセスのべき乗演算の指数値aを識別するための指数値識別手段402を備えてもよい。システムは、値λ（それが、暗号化プロセスに使用される複数の要素xについて、λ>0及びxλ=1を保持する）を識別するための指数下限識別手段（図示せず）を備えてもよい。システムは、難読化された指数y（ここで、y=a+bλであり、ここで、bは正の整数である）を設定するための難読化ツール（obfuscator）404を備えてもよい。システムは、デバイスに難読化された指数yを示す情報を提供するための指数プロバイダ（exponent provider）406をさらに備えてもよい。例えば、そのような指数プロバイダ406は、指数値yをデバイスへ転送されるデータストリームの中に含めてもよい。難読化ツール404は、鍵プロバイダ408から、指数値a及び／又は値λを受信するように構成してもよい。そのような鍵プロバイダ408は、例えば、各ユーザ又はクライアントデバイスのための鍵を保持したデータベースを備えてもよい。難読化ツールは、例えば、ランダム生成器410から、値bを受信するように構成してもよい。
【００６３】
代わりに、大きな指数を直接生成し、かつ、この大きな指数及びλからaを計算することも可能である。
【００６４】
図５は、ソフトウェアプログラムとして、方法及びシステムのうちの１又は複数を実施するのに適した例のハードウェアアーキテクチャを図示している。プログラムは、メモリ506に格納される複数の機械可読命令を含んでいる。実行中、これら命令はプロセッサ502にロードされ、かつ、実行される。通信ポート508が、サーバとの通信のために設けられて、例えば、指数及び／又は底を示すデータを交換する。代わりに、データを、取り外し可能な媒体510（例えば、フラッシュメモリ又はDVDディスク）から読み取るか、又は、それに書き込んでもよい。入力504が、例えば、暗号化されたコンテンツの一部の再生を開始及び停止するため、ユーザからのコマンドを受信するように構成されている。そのようなコマンドは、本明細書に説明された方法のうちの１又は複数の開始をトリガしてもよい。ディスプレイ512、及び／又は、増幅器（図示せず）を、例えば、プログラムの状態に関してユーザへフィードバックを提供するために、及び／又は、ユーザに復号されたコンテンツをレンダリングするために設けてもよい。
【００６５】
図面の略図は、単に、本明細書に説明されたシステム及び方法の可能性のある設計のスケッチを表している。これらは限定されない。例えば、処理ステップは、同じ機能を提供しながら、複数のモジュール及び／又はユニットに異なって分散してよい。
【００６６】
乗法演算を有する一部の代数構造Gにおけるべき乗xa（例えば、RSAについてのリング）を検討する。このべき乗では、xが変数であってよい。簡潔さのため、xはGのどんな要素であってもよいと仮定する。本発明は、xがGのサブセットから取られる場合にまで容易に及ぶ。さらに、Ωが、すべての
【００６７】
【数１０】
2014207717.tif 000012
【００６８】
について、xΩ=1であるとする。例えば、Gがグループである場合（RSAについての場合ではない）、ΩをグループGの順序として定義することができる。次いで、べき乗xaは、整数bについてべき乗xa+bΩと等しい。
【００６９】
また、
【００７０】
【数１１】
2014207717.tif 000013
【００７１】
について、値a1,a2, ...,amが、一部の整数bについて
【００７２】
【数１２】
2014207717.tif 000014
【００７３】
を満たすとする。xaを
【００７４】
【数１３】
2014207717.tif 000015
【００７５】
を介して計算することが可能である。
【００７６】
a1,a2,...,amが、必ずしもaと同じビット長でないことに注意しなければならない。
【００７７】
指数aを格納するのに要求されたビット長が、
【００７８】
【数１４】
2014207717.tif 000016
【００７９】
から、長さ
【００８０】
【数１５】
2014207717.tif 000017
【００８１】
まで増加されるような方法で、a1,a2,...,amを選択することができる。ここに、
【００８２】
【数１６】
2014207717.tif 000018
【００８３】
である。aが鍵から導出された場合、これは、鍵がどんなサイズにでも拡大されることを意味する。しかし、これは、指数及び／又は鍵のサイズを増大させるための唯一の方法でない。
【００８４】
α(a1,a2,...,am)が値a1,a2,...,amを指定するビットストリングであるとする。値a1,a2,...,amを適切に選択することが可能であり、それにより、予め指定されたストリング（例えば、ハードウェア又はユーザ識別子）がα(a1,a2,...,am)に含まれる。
【００８５】
攻撃者がソフトウェアプログラムからxaの計算について知識を抽出するのを防ぐために、隔離されたプログラムとして計算を有する代わりに、計算をプログラムの剰余に結合するのが望ましい。好ましくは、この結合は、べき乗演算の入力及び／又は出力をコード化するステップを具備している。このように、それが組み込まれるアプリケーションのコンテキストの外に、べき乗演算をうまく適用するのはより困難である。また、例えば、デバッガを有するべき乗の入力及び／又は出力値を観察することによって、有用な情報を導出するのはより困難である。z=xa（又は、同様に、
【００８６】
【数１７】
2014207717.tif 000019
【００８７】
）を計算するためのべき乗ルーチンは、この意味で、例えば、以下の方法で周囲プログラムに結合される。周囲プログラムでは、β・xが、任意値βについて計算される。次いで、べき乗ルーチンは、zの代わりに、βa・zを計算する。これを補うため、周囲プログラムは、べき乗ルーチンの成果に定数β−aを掛ける。これら乗算を難読化された方法で実行してもよい（例えば、Chowらの入力及び出力符号化と同様に、乗算と他の処理ステップとを結合するルックアップテーブルを使用して）。
【００８８】
上記した特性はmの値に拘わらず適用される。即ち、それらは、
【００８９】
【数１８】
2014207717.tif 000020
【００９０】
について適用される。
【００９１】
以下には、RSAの復号アルゴリズムのホワイトボックス実装が説明される。本明細書では、RSA復号の例が最も詳細に説明されるが、これは限定でない。開示される方法は、同様の方法で、例えば、RSA暗号化を実行するのに適用してもよい。また、方法を、異なる種類の暗号化、復号、及び、デジタル署名アプリケーションを含む他の暗号化アルゴリズムに適用してもよい。
【００９２】
RSA公開鍵暗号は、鍵生成、暗号化、及び復号のため、いくつかのプロセスを定義する。これらプロセスは以下のようにまとめられる。
【００９３】
鍵生成は以下のステップを具備してもよい。
１．２つの大きなランダム（かつ、互いに異なる）素数p及びq（それぞれが概ね同じサイズ）を生成する。
２．n=p・qを計算する。
３．Φ=(p-1)(q-1)を計算する。
４．gcd(e,Φ)=1となるように、ランダム整数e（1<e<Φ）を選択する。この記述で、gcdは最大公約数を意味する。
５．e・d=1 mod Φとなるように、固有の整数d（1<d<Φ）を計算する。
６．公開鍵が(n,e)によって与えられる。
７．秘密鍵がdによって与えられる。
暗号化は以下のステップを具備してもよい。
８．平文メッセージmを識別する。
９．整数x（
【００９４】
【数１９】
2014207717.tif 000021
【００９５】
)として、メッセージmを表す。
１０．暗号テキストが、c=xe mod nによって与えられる。
復号は以下のステップを具備してもよい。
１１．暗号テキストメッセージcを識別する。
１２．整数xが、x=cd mod nによって与えられる。
１３．平文メッセージmは、xによって表されたメッセージである。
【００９６】
上記したステップ３のΦの定義を所与とする（
【００９７】
【数２０】
2014207717.tif 000022
【００９８】
についてxΦ=1 mod n）。例として、Φ=(p-1)(q-1)が1024ビット値であると仮定する。次いで、指数dが最大で1024ビットを有する。Ω=Φを使用して、指数dを、任意サイズK>1024のストリングに隠蔽してもよい。第１に、これはm=1の場合について説明される。次いで、m=2の場合が説明される。m=1及びm=2の場合の説明を考慮すればm>2の場合を実施する方法が当業者には明らかである。
【００９９】
m=1の場合には、条件
【０１００】
【数２１】
2014207717.tif 000023
【０１０１】
をa1=d+bΩとして書くことができる。単純化のため、y=a1と定義する。これは、xd mod nをxy mod nを介して実装してもよいことを意味する。所定のビット長Kに対して表現（representation）を有するyを見つけることが可能である。（ここで、表現は最上位部における先行ゼロを含まず、かつ、Kはdのビット長より大きい。）値yは、bが
【０１０２】
【数２２】
2014207717.tif 000024
【０１０３】
を満足する場合、Kビット値である。
【０１０４】
これを見るには、bのこの選択によって、指数d＋bΩが
【０１０５】
【数２３】
2014207717.tif 000025
【０１０６】
を満足することを観察する。
【０１０７】
故に、値y=d+bΩに関連付けられたバイナリストリングがKビットからなる。したがって、指数dが、より大きなKビットストリングyに隠蔽されている。
【０１０８】
yに任意ビットストリングを包含することが可能である。
【０１０９】
【数２４】
2014207717.tif 000026
【０１１０】
に対するlビットの予め指定されたストリングを検討する。そのようなストリングlを、指数yを指定するビットストリングの中に包含してもよい。仮に、sが、我々が包含することを所望するlビットのビットストリングに関連付けられた数であるとする。l=K-rと仮定する。l<K-rの場合、いくつかの任意ビットを、例えば、ストリングの前、及び／又は、後に追加してもよい。
【０１１１】
値Sは、sの最下位側にrゼロビットを加えることにより、Kビット値にそれを拡張することによってsから得られる（即ち、これらrゼロビットは、Sの最下位ビットとなる）。x<Ωに対する値S+xのバイナリ表現が、sについてのバイナリストリングで開始してもよいことに注意しなければならない（即ち、我々が包含することを所望するバイナリストリング）。
【０１１２】
【数２５】
2014207717.tif 000027
【０１１３】
を定義する。したがって、
【０１１４】
【数２６】
2014207717.tif 000028
【０１１５】
であり、故に、x<Ωについてd+bΩ=S+xである。故に、指数y=d+bΩのバイナリ表現はバイナリストリングsで開始する。
【０１１６】
m=2の場合、条件
【０１１７】
【数２７】
2014207717.tif 000029
【０１１８】
を、a1・a2=d+bΩとして書くことができる。これは、xd mod nを以下のように計算してもよいことを意味する。
【０１１９】
第１に、
【０１２０】
【数２８】
2014207717.tif 000030
【０１２１】
を計算する。次いで、
【０１２２】
【数２９】
2014207717.tif 000031
【０１２３】
を計算する。結果はxd mod nである。
【０１２４】
【数３０】
2014207717.tif 000032
【０１２５】
に対するKへa1及びa2の合計ビット長を増加させることを望むと仮定する。これは、
【０１２６】
【数３１】
2014207717.tif 000033
【０１２７】
を満足する値a1及びa2を選択することによって実現してもよい。例えば、これは、以下のステップを使用して実行することができる。
【０１２８】
gcd(a1,Ω)=1を満足する任意K-rビット値としてa1を選択する。この説明を考慮すれば、そのような値a1を見つけることは当業者にとって実現可能な範囲内である。
【０１２９】
a1・a2=d mod Ωを満足する値a2を計算する。値a2は以下のように計算することができる。ユークリッドのアルゴリズムを使用して、a1・c=1 mod Ωを満足する値cを計算する。このようにして得られた値a1及びa2がa1・a2=d mod Ωを満足するので、値a2を、a2=c・d mod Ωとして計算してもよい。
【０１３０】
値a1はK-rビット値であり、かつ、a2はrビット値であってもよい。故に、xd mod nの計算に使用された指数を格納するための記憶要求がKに増大している。
【０１３１】
上記したステップは、m=2の場合について、より大きなストリングに指数dを隠蔽するための方法を説明する。
【０１３２】
実施例では、予め指定されたビットストリングが、ホワイトボックス実装の指数に包含される。a1及びa2を指定するビットストリングの中にa1及びa2を変換する関数として、α(a1,a2)を定義する。明らかに、α(a1,a2)の選択は関数である（a1及びa2に関連付けられたビットストリングを単に連結させる）。α(a1,a2)では、gcd(s,Ω)=1に対して長さK-rビットのビットストリングsを、sと等しいようにa1を選択することによって包含してもよい。
【０１３３】
【数３２】
2014207717.tif 000034
【０１３４】
（ここで、ΩがxΩ=1 mod nを満足する）に対する値a1,a2,…,amに指数aを隠蔽することができる。この方法では、
【０１３５】
【数３３】
2014207717.tif 000035
【０１３６】
ビットから
【０１３７】
【数３４】
2014207717.tif 000036
【０１３８】
ビットまで、指数を格納するのに必要とされる記憶スペースを増大させることができる。一部のアプリケーションでは、いったんKビットベクトル(a1,a2,…,am)を有すれば、攻撃者が、このKビットベクトルの記憶サイズを減少させることが困難であることが好ましい（例えば、攻撃者が下部のkビット指数aを抽出することを望まない）。この特性を、ホワイトボックス実装は「コンパクションに耐性がある」と言うことで言及してもよい。(a+bΩ) mod (c・Ω)がa+bΩより小さいが、機能的に等しいので、Kビットベクトル（a1,a2,…,am）を格納するのに必要とされる記憶スペースを減少させるために、それが、
【０１３９】
【数３５】
2014207717.tif 000037
【０１４０】
に対する値c・Ωを見つけるのに十分であることに注意しなければならない。
【０１４１】
攻撃者（より少ないビットを有する指数の表現を見つけることを意図する）が、Kビットベクトル（a1,a2,…,am）の他に、攻撃者のディスポーザルに追加的な情報も有する。例えば、（a1,a2,…,am）を使用して、RSAの秘密（復号）指数dを隠蔽する場合を検討する。次いで、一般に、攻撃者は公開（暗号化）指数eへのアクセスも有する。これら値が
【０１４２】
【数３６】
2014207717.tif 000038
【０１４３】
を満足する。
【０１４４】
故に、上記から、コンパクションに耐性があるためには、RSAホワイトボックス実装の所望の特性は以下のとおりという結果になる。公開値e及び
【０１４５】
【数３７】
2014207717.tif 000039
【０１４６】
に対するプライベート値a1,a2,…,amを有すると、次いで、攻撃者が、
【０１４７】
【数３８】
2014207717.tif 000040
【０１４８】
に対する値c・Ωを見つけるのは依然として困難である。
【０１４９】
より一般的な設定では、RSAとの関連外で、以下が観察される。
【０１５０】
指数aが値a1,a2,…,amに隠蔽されると仮定する（故に、
【０１５１】
【数３９】
2014207717.tif 000041
【０１５２】
）。さらに、攻撃者が、f(a1,a2,…,am)=α・Ωに対する関数fを計算することができると仮定する。次いで、コンパクションに耐性があるためには、攻撃者がα・Ωから
【０１５３】
【数４０】
2014207717.tif 000042
【０１５４】
に対する値α・Ωを導出するのが困難であることが望ましい特性である。
【０１５５】
上記したRSAの例では、関数fを
【０１５６】
【数４１】
2014207717.tif 000043
【０１５７】
によって与えてもよいことに注意しなければならない。
【０１５８】
一般的な設定に戻れば、２つのアプローチが、攻撃者が
【０１５９】
【数４２】
2014207717.tif 000044
【０１６０】
に対するそのような値c・Ωを導出することができることを識別される。
【０１６１】
c・Ωを見つけるための第１のアプローチは以下のとおりである。仮定によって、攻撃者は、値f(a1,a2,…,am)=α・Ωを導出することができる。ここで、次のように、攻撃者は値β1，β2を導出可能であると仮定する。
α・Ω=β1・β2            (1)
及び
β1｜α                    (2)
【０１６２】
これは、値cについて、β2=c・Ωを生じさせる。ここで、値β1，β2が
【０１６３】
【数４３】
2014207717.tif 000045
【０１６４】
であるような場合、β2は、
【０１６５】
【数４４】
2014207717.tif 000046
【０１６６】
に対する値c・Ωである。即ち、β2を、指数
【０１６７】
【数４５】
2014207717.tif 000047
【０１６８】
（ここで、
【０１６９】
【数４６】
2014207717.tif 000048
【０１７０】
）を見つけるのに使用することができる。
【０１７１】
【数４７】
2014207717.tif 000049
【０１７２】
に対するc・Ωを見つけるための第２のアプローチは以下のとおりである。第２のアプローチでは、２つの異なる（しかし、機能的に等しい）ホワイトボックス実装
【０１７３】
【数４８】
2014207717.tif 000050
【０１７４】
及び、
【０１７５】
【数４９】
2014207717.tif 000051
【０１７６】
を、
【０１７７】
【数５０】
2014207717.tif 000052
【０１７８】
に対する値c・Ωを見つけるのに使用してもよい。これら機能的に等しいホワイトボックス実装は、
【０１７９】
【数５１】
2014207717.tif 000053
【０１８０】
及び、
【０１８１】
【数５２】
2014207717.tif 000054
【０１８２】
を生じさせる。
【０１８３】
関数fを
【０１８４】
【数５３】
2014207717.tif 000055
【０１８５】
及び、
【０１８６】
【数５４】
2014207717.tif 000056
【０１８７】
に適用することが、α1及びα2について、値α1・Ω及びα2・Ωをそれぞれ結果として生じさせてもよい。これら２つの値について、それは、値cについて、
gcd(α1・Ω, α1・Ω)=gcd(α1, α2)・Ω=c・Ω
を保持する。
【０１８８】
【数５５】
2014207717.tif 000057
【０１８９】
の場合、ホワイトボックス実装のさらなるリダクションが得られる。RSAの例について、有効である攻撃について、b2=b1+kαを満足するkが存在しないことに注意しなければならない。故に、
【０１９０】
【数５６】
2014207717.tif 000058
【０１９１】
が、
【０１９２】
【数５７】
2014207717.tif 000059
【０１９３】
への多数倍の値α・Ωを加算することによって得られない。
【０１９４】
上記した２つの攻撃アプローチは、以下のように対抗される。攻撃者が、(1)及び(2)を満足する値β1，β2を導出することを可能にすることを防ぐ（これら値を有することが攻撃のベースである）。そのようなβ1，β2を見つけることを難しくさせるためのアプローチは、αの素因数分解が、大きな素数だけを含む（好ましくは、値αは素数である）よう気をつけることである。さらに、Ωの因数分解が少なくとも１つの大きな素数を含む場合に都合がよい。この点では、素数は、それが暗号的にセキュアである場合に、十分に大きいように考慮される（即ち、前記大きな素数のサイズに課される制約が、暗号化アルゴリズム（例えば、RSA）に使用される暗号的にセキュアな素数に共通に課される制約と似ている）。
【０１９５】
より一般的な用語では、要素x（暗号化プロセスに使用される）が、n個の要素を有する代数構造の要素であってよい。例えば、RSAでは、復号（decrypter）指数として使用されるとき、指数yは、値eについて、e・y=1 mod nを満足してもよい。この場合、値αについて、e・y-1=α・λである。そのような値αλは攻撃者によって見つけられる。難読化された指数yを識別するステップ（306）は、λの素因数分解が少なくとも１つの大きな素数を含み、かつ、αの素因数分解が大きな素数だけを含むことを満足するyを選択するステップを具備してもよい。例えば、そのような大きな素数は、共通のコンピュータシステムにおいて、徹底的なサーチを防ぐのに十分に大きい素数である（例えば、素数は少なくとも64ビットを含む）。
【０１９６】
本発明がコンピュータプログラム（特に、キャリア上、又は中のコンピュータプログラム）にも拡張され、本発明を実現するように構成されることが理解される。プログラムは、ソースコード、オブジェクトコード、部分的にコンパイルされた形式などの中間ソース及びオブジェクトコードの形式で、又は、本発明による方法の実施における使用に適した他の形式であってよい。また、そのようなプログラムは多くの異なるアーキテクチャデザインを有してよいことが理解される。例えば、本発明による方法又はシステムの機能を実行するプログラムコードを、１又は複数のサブルーチンに分割してもよい。これらサブルーチンの中に機能を分散するための多くの異なる方法を当業者なら理解する。サブルーチンは、１つの実行ファイルに一緒に格納されて、自己完結したプログラムを形成してもよい。そのような実行ファイルは、コンピュータ実行命令を具備してよい（例えば、プロセッサ命令、及び／又は、インタプリタ命令（例えば、Java（登録商標）インタプリタ命令））。代わりに、１又は複数、又は、すべてのサブルーチンを、少なくとも１つの外部ライブラリファイルに格納し、かつ、静的又は動的に主プログラムとリンクしてもよい（例えば、ランタイムで）。主プログラムは、サブルーチンのうちの少なくとも１つへの少なくとも１つの呼び出しを含む。また、サブルーチンは相互に関数呼び出しを具備する。コンピュータプログラム製品に関する実施例は、説明された方法のうちの少なくとも１つの処理ステップのそれぞれに対応するコンピュータ実行命令を具備している。これら命令を、サブルーチンに分割し、かつ／又は、静的又は動的にリンクされる１又は複数のファイルに格納してもよい。コンピュータプログラム製品に関する他の実施例は、説明されたシステム及び／又は製品のうちの少なくとも１つの手段のそれぞれに対応するコンピュータ実行命令を具備している。これら命令を、サブルーチンに分割し、かつ/又は、静的又は動的にリンクされる１又は複数のファイルに格納してもよい。
【０１９７】
コンピュータプログラムのキャリアは、プログラムを運ぶことが可能なエンティティ又はデバイスであってよい。例えば、キャリアは、ROMなどの記憶媒体（例えば、CD ROM又は半導体ROM）、又は、磁気記録媒体（例えば、フロッピー（登録商標）ディスク、又はハードディスク）を含んでよい。さらに、キャリアは電気又は光信号などの転送可能なキャリアであってよい（電気又は光ケーブルを介して、又は、無線又は他の手段によって伝えられる）。プログラムがそのような信号に具体化されるとき、キャリアを、そのようなケーブル又は他のデバイス又は手段によって構成してもよい。代わりに、キャリアは、プログラムが埋め込まれる集積回路であってよく、集積回路は、関連する方法を実行するように（又は、実行における使用のために）構成される。
【０１９８】
上記した実施例は本発明を制限するよりむしろ説明し、かつ、当業者は特許請求の範囲から逸脱することなく多くの変形例を設計可能であることに注意しなければならない。請求項において、丸括弧間の参照符号が、請求項を制限するものと解釈されてはならない。動詞「含む（comprise)」及びその活用の使用により、請求項に記載された要素又はステップ以外の要素又はステップの存在を除外しない。要素に先行する冠詞「a」又は「an」により、そのような要素の複数の存在を除外しない。本発明は、いくつかの別々の要素を備えたハードウェアの手段によって、及び、適切にプログラムされたコンピュータによって、実施してもよい。いくつかの手段を列挙する装置の請求項では、これら手段のうちのいくつかを、ハードウェアの同一のアイテムによって具体化してもよい。特定の手段が相互に異なる従属請求項に記載されているという単なる事実が、これら手段の組合せが有利に使用されることができないことを示さない。
【符号の説明】
【０１９９】
102  底識別手段
104  指数識別手段
106  べき乗器
404  難読化ツール
406  指数プロバイダ
【図１】
2014207717.tif 000063
【図２】
2014207717.tif 000064
【図３】
2014207717.tif 000065
【図４】
2014207717.tif 000066
【図５】
2014207717.tif 000067