(57)【特許請求の範囲】
【請求項１】
処理装置を用いソフトウエアのプロバイダがソフトウエアのユーザを認証するための方法であって、
ユーザから受信された情報に応じて該プロバイダにより複数のパズルを構成し、このパズルの各々は該ユーザのそれぞれ1つについての情報を含む解答を有しており、ここで該パズルを構成するステップは、導出された値を生成するために該情報から値を導出し、累乗された値を生成するために該導出された値を累乗し、そして該累乗された値を該導出された値の一部と結合するステップを含み、
該パズルの前記各々を該プロバイダから該ユーザの各々に送り、
該パズルの前記各々に対する解答を該ユーザの前記各々から該プロバイダにおいて受信し、
該情報および乱数を該プロバイダに蓄積し、
第一のハッシュ結果を生成するために、該情報および該乱数にハッシュ関数を実行し、そして
該第一のハッシュ結果を暗号化するステップを含み、
ここで該情報から該プロバイダが該値を導出するステップは、該暗号化されたハッシュ結果を第一および第二の成分に分割し、第二のハッシュ結果を生成するために該第一の成分および該乱数の連鎖にハッシュ関数を実行し、引き伸ばされた第二の成分を生成するために該第二の成分に複数のゼロ値を付加し、排他的ＯＲ結果を生成するために、該引き伸ばされた第二の成分と該第二のハッシュ結果との間に排他的ＯＲ操作を実行し、そして該導出された値を生成するために、該第一の成分と該排他的ＯＲ結果を結合するステップを含む
方法。
【請求項２】
ソフトウエアのプロバイダが該ソフトウエアのユーザを認証することを可能にする装置あって、
ユーザから受信された情報に応じて複数のパズルを構成する手段と、該パズルの各々は該ユーザの１つのそれぞれについての情報を含む解答を有し、ここで該パズルを該構成する手段はさらに、導出された値を生成するために該情報から値を導出する手段、累乗値を生成するために該導出された値を累乗する手段、そして該累乗値を該導出された値の一部と結合する手段を含み、
該パズルの前記各々を該プロバイダから該ユーザの各々に送る手段、そして
該ユーザの前記各々からの該パズルの前記各々に対する解答を該プロバイダにおいて受信する手段、
該情報および乱数を蓄積する手段、
第一のハッシュ結果を生成するために、該情報および該乱数にハッシュ関数を実行する手段、そして
該第一のハッシュ結果を暗号化する手段を含み、
ここで導出する手段は、該暗号化されたハッシュ結果を第一および第二の成分に分割し、第二のハッシュ結果を生成するために該第一の成分および該乱数の連鎖にハッシュ関数を実行し、引き伸ばされた第二の成分を生成するために該第二の成分に複数のゼロ値を付加し、排他的ＯＲ結果を生成するために、該引き伸ばされた第二の成分と該第二のハッシュ結果との間に排他的ＯＲ操作を実行し、そして該導出された値を生成するために、該第一の成分と該排他的ＯＲ結果を結合する
装置。
【請求項３】
ソフトウエアのプロバイダが該ソフトウエアのユーザを認証することを可能にする装置あって、
処理装置と、そして
該処理装置によってアクセスが可能であり、ユーザから受信された情報に応じて複数のパズルを構成し、該パズルの各々は該ユーザの１つのそれぞれについての情報を含む解答を有し、そして該ユーザから該パズルの前記各々についての解答を得るために該パズルを該ユーザに送る、該処理装置によって実行可能な一連の命令を含む、該処理装置が読み取り可能な蓄積媒体と
を含み、
ここで該パズルは導出された値を生成するために該情報から値を導出することにより構成され、累乗値を生成するために該導出された値を累乗し、そして該累乗値を該導出された値の一部と結合し、そして
ここで該一連の命令は、該情報および乱数を蓄積するために、第一のハッシュ結果を生成するため該情報および該乱数にハッシュ関数を実行するために、そして該第一のハッシュ結果を暗号化するために該処理装置によりさらに実行可能であり、ここで該導出された値は該暗号化されたハッシュ結果を第一および第二の成分に分割することにより導出され、第二のハッシュ結果を生成するために該第一の成分および該乱数の連鎖にハッシュ関数を実行し、引き伸ばされた第二の成分を生成するために該第二の成分に複数のゼロ値を付加し、排他的ＯＲ結果を生成するために、該引き伸ばされた第二の成分と該第二のハッシュ結果との間に排他的ＯＲ操作を実行し、そして該導出された値を生成するために、該第一の成分と該排他的ＯＲ結果を結合する
装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、一般的に暗号化の分野に関する。そしてとくに匿名のユーザを認証するための、“ミドルマン”詐欺（”middleman” fraud）に対する可能性を減少する方法に関する。
【０００２】
【従来の技術】
計算機ソフトウエアは、一般的に配送業者またはミドルマン（媒介者）によって、エンドユーザすなわち消費者にインターネットによって配送される。したがって処理には三つの関係者が存在する。第一はソフトウエアおよび内容のプロバイダ（すなわち作者）であって、エンドユーザへの供給内容から利益を得て、ソフトウエアを発展させそして配送するために、配送業者に若干の手数料を支払う。第二は、ソフトウエアをユーザに供給する（内容を閲覧するための機能を、たとえば電子メール機能のような、内容に無関係な価値とともに供給する）いくつかの配送業者の一つである。このミドルマンは、内容を受け取るユーザから収入を得る。そこでソフトウエアを広く配送することが彼あるいは彼女の関心となる。第三はユーザであり、内容を閲覧する見返りに無料でソフトウエアを得る。主にユーザは匿名であることから、ユーザは他の報酬は得ない。追跡の詳細は一般に保存されないのでユーザは匿名であり、個々に同定されてはいない。内容を要求するときはユーザは自発的に情報を提供するかも知れないが、このような提供された情報は一般的に、保存されあるいは追跡されるよりは、使用されそして捨てられてしまう。今後関係者は一般的にプロバイダ、ミドルマン、そしてユーザとして参照される。
【０００３】
ミドルマンは、ユーザがインターネットに接続し、特定のウエブサイトを訪ねるときは、ユーザに関する人口統計的情報（demographic information）を得るためにインターネット“クッキー（cookie）”として知られるデバイスを用いるかも知れない。たとえば、あるユーザがあるインターネット局に接続するときは、ユーザの計算機はインターネットを経由して、ミドルマンによって操作されているホスト計算機に接続する。ホストは、ユーザの計算機により保存される小さいデータファイル（クッキー）を送出する。ユーザとホストとが通信するときに、若干のデータがクッキー中に蓄えられる。ユーザが接続を遮断したときに、クッキーは彼あるいは彼女の計算機の中に残る。ユーザのインターネット使用に関するその後のデータがクッキー内に蓄えられる。ユーザがホストに接続する次のときに、ホストはユーザに関する情報のためにクッキーを読み取る。ユーザの情報はホストのオペレータによって編集され、インターネットマーケッター（Internet marketer）に売られるかも知れない。
【０００４】
【発明が解決しようとする課題】
ユーザは匿名であるので、ミドルマンは単により多い内容を通過させることによって、プロバイダに対して検出できない詐欺を犯すことが可能である。このことは、真のユーザに代わってより多くの内容を要求すること、あるいは偽のユーザを作ることの何れかによって果たすことができる。詳細を匿名に保ちながら、特定のユーザに対する内容配送の割合を追跡するための、いくつかのよく知られた統計的方法が存在する。このような統計的方法は、真のユーザに代わってより多くの内容を要求することによって詐欺を犯すミドルマンの問題を解決する。しかしながら、これらの方法は、多数の偽のユーザを作ることによってミドルマンが詐欺を犯すような状況に対するものではない。したがって、詐欺を犯すためにソフトウエア配送業者が、多数の実在しないユーザを作り出すことを防止する方法に対するニーズが存在する。
【０００５】
【課題を解決するための手段】
本発明はソフトウエア配送業者が詐欺を犯すために多数の実在しないユーザを作り出すことを防止する方法を目的としている。したがって発明の一つの観点として、ソフトウエアのプロバイダがソフトウエアのユーザを認証するための方法が提供される。この方法は、ユーザから受信した情報に応じてパズル（puzzle）を作成し、このパズルは情報を含んでおり、このパズルをユーザに送りそしてパズルに対する解をプロバイダに返すステップを好適に含んでいる。
【０００６】
発明の他の観点として、ソフトウエアのプロバイダがソフトウエアのユーザを認証することを可能とするための装置が提供される。この装置は、ユーザから受信した情報に応じてパズルを作成するための手段、このパズルは情報を含んでおり、このパズルをユーザに送るための手段、そしてパズルに対する解を供給者に返すための手段を都合よく含んでいる。
【０００７】
この発明の他の観点として、ソフトウエアのプロバイダがソフトウエアのユーザを認証することを可能とするための装置が提供される。この装置は、プロセッサおよびプロセッサによりアクセスが可能でありプロセッサにより読み取り可能な蓄積媒体を好適に含んでおり、そしてユーザから受信した情報に応じてパズルを作成するためにプロセッサにより実行可能な一連の命令を含み、このパズルは情報を含んでおり、そしてこのパズルをユーザに送る。
【０００８】
この発明の他の観点として、一人の人が複数のソフトウエアのユーザを装うことを防ぐ方法が提供される。この方法は、複数のパズルを作成し、各パズルは複数のユーザのそれぞれの一人に関する情報を含む解を有しており、各パズルは解くために資源（resource）の消費を必要としており、そして解答のために複数のユーザのそれぞれの一人に各パズルを送るステップを好適に含んでいる。
【０００９】
【発明の実施の形態】
以下に述べる実施例において、システムの新しいユーザは、少ない資源を使う方法で登録される。その結果個々のユーザが登録しそしてコストに留意することはないであろうが、しかしいずれかの関係者そしてとくにミドルマンは、システムを悪用するためのいかなる試みに対しても多額の失費を負うであろう。一つの実施例においては、重要な資源は計算時間である。他に少さい資源、たとえば記録スペース、ネットワーク帯域幅、あるいはユーザの対応処理の期間（すなわちユーザにある時間中に相互作用することを要求すること）などを用いることができるかも知れない。計算時間はそれが本質的にユーザに対して束縛がないことから望ましい。一般的にユーザのパーソナルコンピュータはほとんどの時間使用されておらず、計算は邪魔にならない方法で実行可能である。そして一度計算が完了したときは、さらなる諸経費はない。計算の正確な量は、コストおよびその時の典型的な計算機の計算能力などのパラメータに従って調整が可能であり、そして総量は可能性のある詐欺に関連付けられる。
【００１０】
プロバイダ１０４に通信することによって、ユーザ１０２が登録を要求しているシステム１００を、一つの実施例に従って図１に示した。ユーザ１０２およびプロバイダ１０４はユーザおよびプロバイダにより使用されているマシンに、たとえばユーザ１０２においてはパーソナルコンピュータあるいはパーソナルディジタルアシスタントあるいは無線電話などのハンドヘルド計算デバイスなどに、プロバイダ１０４においては大きなウエブサーバについても、留意することは理解されるであろう。メッセージ１０６の中でユーザ１０２はプロバイダ１０４に対し人口統計的データ（demographic data）を送る。他の実施例においては、ユーザ１０２は、メッセージ１０６の中に人口統計的データの代わりに、あるいはそれとともに、たとえばユーザ識別情報（identity）などの他のデータを送るかも知れない。プロバイダ１０４へのメッセージ１０６は、ユーザ１０２にとって要注意の情報を保護するために、暗号化されたフォーマットであるかも知れず、あるいはそうでないかも知れない。ユーザ１０２のソフトウエアはミドルマンについてのある種の識別子を含んでおり、これはまたメッセージ１０６にも含まれる。ユーザ１０２はまた、後によりよい目標内容題材（target content material）に対する情報を与えるかも知れない。ユーザ１０２によって与えられたデータ１０６は、プロバイダ１０４によってパズル１０８に対する回答の中に符号化されるであろう。回答すなわち復号化されたパズル１１０は、後刻ユーザ１０２が内容を要求するときに、ユーザ１０２によってプロバイダ１０４に返送通信されるであろう。
【００１１】
一つの実施例においては、パズル１０８に対する回答１１０は、次のように構成されている。与えられた情報１０６および、唯一であることを仮定するのに十分な長さのランダム確認物（図示せず）がバッファ（同様に図示せず）内におかれる。バッファの内容に関する暗号的に信頼できるハッシュ関数（hash function）が計算される。典型的に信頼できるハッシュ関数は、標準および技術のための国立協会（National Institute for Standard and Technology）により作成された連邦情報処理標準（Federal Information Processing Standard（FIPS））１８０‐１に規定されている、高信頼ハッシュ規格（Secure Hash Standard）である。このＦＩＰＳ  １８０‐１文書に述べられているアルゴリズムは、今後高信頼ハッシュアルゴリズム（ＳＨＡ）として参照する。ハッシュ関数は結果として長さが１６０ビットであるかもしれない。特定の実施例においては、ハッシュ関数の最初の６４ビットのみが使用される。他の実施例においては、ハッシュ関数の最初の８０ビットが使用される。ハッシュ関数はバッファの最初においてバッファに挿入される。全バッファはそこで、プロバイダ１０４において、キーヘルドシークレット（key-held secret）（図示せず）を使用して、たとえばデータ暗号化標準（Data Encryption Standard；ＤＥＳ）アルゴリズム（ＦＩＰＳ  ４６‐２）などの対称ブロック暗号系で暗号化される。特定の実施例においては、ＦＩＰＳ  ４６‐３のドラフトテキストに規定されているトリプル‐ＤＥＳ（３ＤＥＳ）アルゴリズムが使用されている。
【００１２】
プロバイダ１０４を除く各人それぞれにとっては、暗号化の結果はランダムデータと都合よいことに区別できない。とくに、データの若干がたとえ公開されても、いかなる関係者も公開されていない部分を再構成することはできない。プロバイダ１０４が後に暗号化された項目を受信するとき、プロバイダ１０４は、それを復号化することにより、それはまさにプロバイダ１０４がより早い時期に作成したデータであり、それはその中に含まれているハッシュ関数が新しい計算の結果と一致することを証明していることを保証され得る。暗号化されたデータのバッファは通常、当業界において熟練した人々によって“クッキー”として参照される。
【００１３】
クッキーは単一の暗号ブロックよりも長いことは理解されるべきであろう。そこで、ＦＩＰＳに述べられているように、暗号化は暗号ブロック連鎖モード（Cipher Block Chaining mode）で行われるべきであろう。暗号ブロック連鎖モードは、通常ランダム初期化ベクトルを必要とする。しかしながら、暗号化されるべき最初のブロックはハッシュ値を含んでおり、そしてそれは予期される攻撃を妨害するのに十分であるために、初期化ベクトルは一定したゼロの値に設定することが可能である。
【００１４】
パズル１０８は、クッキーそれ自身を送信する代わりに、クッキーから構成されている。パズル１０８は、ある一定の（すなわち予期された）計算量がパズル１０８を解きクッキーを回復するのに必要とされるように都合よく構成されている。プロバイダ１０４は多くのユーザのためにこの機能を実行しなければならないので、プロバイダ１０４はパズル１０８を構築するために計算機的には効率の良いものでなければならないが、また一方でパズル１０８を解くためには意図的に非効率的になっている。この結合された計算機使用上の構築の効率化および解の非効率化は、既知の公開鍵暗号法の新しい使用により達成され得る。
【００１５】
以下の議論の目的のために、クッキーはＣで表され、そして付加的パラメータＰおよびｇがソフトウエアに埋め込まれており、そしてそれ故にすべての関係者に知らされている。パラメータＰは都合のよい大きい素数（prime number）である。Ｐのビット数の下限は、パズル１０８に関して必要とされる計算機的な複雑さによって制約される。特定の実施例においては、Ｐのビット数は１０２４である。パラメータＰは、方程式Ｑ＝（Ｐ−１）／２を満足するＱもまた素数であるという付加的な特性を都合よく有している。パラメータｇは、適切な、整数モジューロ(modulo )Ｐの倍数を表すグループの、オーダーＱのサブグループのジェネレータ（generator）である。パラメータＰ、ｇ、そしてＱはよく知られているＤｉｆｆｉｅ‐Ｈｅｌｌｍａｎ鍵アグリーメントプロトコルに対して使用される典型的なパラメータである。もしもクッキーＣがＱよりも大きければ、ユーザ１０２は若干のクッキーを簡単に与えられるであろう。そしてより小さい部分はパズル１０８を作成するのに使用されるであろう。ここでは一般的に｜Ｃ｜＜｜Ｑ｜と仮定される。
【００１６】
パズル１０８は、第一にＺ＝ｇＫ モジューロＰを計算することによって作成される。現在、Ｚを与えてＫを計算するための（すなわち離散対数問題を解くための）最もよく知られた方法は、計算的に高価であり、そしてＰに対して１０２４ビット長をもってすることは、１２８ビットの未知の鍵をもったブロック暗号を用いてメッセージを復号化することと概略的に等価であると見なされている。かかる計算はユーザ１０２にとっては実行するのにあまりに高価である。ユーザ１０２は、Ｃを回復することができると仮定されているので、プロバイダ１０４は、ユーザ１０２に解答１１０の大部分を与える。したがってパズル１０８はＺおよびパズルの手がかりを含む。パズルの手がかりは、Ｃに関する情報の大部分（しかしすべてではない）を含む。送信された値（value）中の、変化性を有するビットの数は、パズル１０８の困難性を決定する。ユーザ１０２にとって、パズル１０８を解くための最も効率的な方法は、未知の情報に対して正しい解答１１０を生じる推測をユーザ１０２が見つけるまで、推測を十分に試してみることである。それぞれの推測をチェックすることは、候補Ｋに対するモジュラー累乗関数の計算を必要とする。
【００１７】
このようなモジュラー累乗を計算することは、１秒の約１／１００ｔｈを要する（実際の時間は処理装置（図示せず）の速度およびＰのサイズにより異なる）ことが仮定されうる。もしも計算がバックグラウンド処理時間の２４時間の平均を要することが必要であるならば、近似的に４００万（すなわち２２２）の試行候補が使用されなければならない。概して、可能性の組み合わせのほぼ中途で解は見いだされるであろうから、パズルの手がかりはすべての、しかし解答１１０のビットの２３個で構成されるべきである。
【００１８】
試行的累乗を避けているいくつかの方法において、パズル１０８は解かれることができないことを保証するために、一方向ハッシュ関数が再び使用されるかも知れない。（高信頼ハッシュ規格に対する場合として）ハッシュ関数Ｈ（）の出力は長さ１６０ビットであると仮定する。｜Ｃ｜は｜Ｈ｜／２よりもいくらか大きいことを保証することが重要であり、そこで｜Ｃ｜は二つの部分に分割されることができる。もしも必要であれば、｜Ｃ｜が十分に大きいことを保証するために、Ｃは暗号化に先立って引き伸ばされることができる。ハッシュ関数の結果は、一部はＣを蔽い隠すために、そして一部は累乗操作のため入力を変更するために使用される。
【００１９】
中間の結果Ｋは、次の方法によってＣから構成される。クッキーＣは、｜Ｒ｜が長さ８０ビットであるように、二つの部分ＬおよびＲに分割される。乱数ｒは、範囲０、…、Ｎの中に選定される。ここでＮはパズル１０８の平均的困難性を決定する。Ｎ＝２２３の実施例においては、そこでＫは次の方程式によって決定
0004782343.tif 000002
合操作を表し、(＋)は、ビット方向排他的‐Ｏｒ（ＸＯＲ）操作を、そして０８０は、８０個のゼロビットを表す。
【００２０】
述べられている特定の実施例においては、単一のハッシュ関数の結果は都合よく二つの部分に分割され、独立した目的のために使用されていることに留意するべきである。当業界の熟練した人にとっては、二つの独立したハッシュ関数が、これらの目的のために使用されうるであろうことは容易に明白となろう。
【００２１】
そこでパズル１０８は、累乗の結果Ｚおよび、Ｋの最後の８０ビットを除くすべてから構成されている。Ｃを回復しパズル１０８を解くために、ユーザ１０２
0004782343.tif 000003
をＫの与えられた部分に付加すること、そして結果として生じるｇＫが解答Ｚに等しいかどうかをチェックすることを開始するであろう。正しいｒが見いだされたときに、ハッシュ出力の左側の８０ビットは、Ｃを回復するために部分的なＫと、排他的論理和計算されるかも知れない。
【００２２】
よって、上述の手法は、述べた通り要求を満足する。離散的対数問題の可能な解は１６０ビットの中で変化し、有用であるべき予備計算のいかなる形態に対してもはるかに多い。Ｃの８０ビットは、試行的累乗によってＫが確認され得るまでは蔽い隠される。Ｋの８０ビットは、それらがｒから導出されるまでは表されない。ＫはＬに依存するために、有用なハッシュ値の限定された組み合わせを予備計算する方法はない。乱数ｒの範囲は、試行錯誤法によってパズル１０８を解くための平均時間を決定し、一方上記の性質は他のショートカットが動作しないことを保証している。
【００２３】
当業界において熟練した人にとっては、パズル１０８はまた、試行をプロバイダ１０４に送り、そして承認を待つことによっても解かれ得るであろうことが容易に明白となろう。伴っているプロトコルは、これがモジュラー累乗（実用上それは満足されるであろう）を実行するよりもより効率的ではないことを保証するであろう。
【００２４】
ひとたびユーザ１０２がパズル１０８を解いてしまえば、ユーザ１０２は、ユーザ１０２が登録されていることをプロバイダ１０４が後で確信するために十分な情報を含む価値あるクッキーを所有する。クッキーはまた、内容を決定するためにプロバイダ１０４によって要求されるいかなる付随的なデータをも有している。
【００２５】
最初の登録要求１０６の中の情報のいくつかは、潜在的にプライバシーセンシティブであることは理解されるべきである。同様に、後の内容要求のためにクッキーがプロバイダ１０４に返されるときに、盗聴者はこのクッキーをもとにした要求を追跡できるかも知れない。その結果、ユーザ１０２からプロバイダ１０４への通信１０６は暗号化されていることが望ましく、たとえば、Ｄｉｆｆｉｅ‐Ｈｅｌｌｍａｎアルゴリズムのような、離散化‐対数ベースの公開鍵暗号化アルゴリズムを用いて、このような暗号化を達成することは比較的容易である。プロバイダ１０４の公開鍵は、アプリケーションの中に埋め込まれることができるであろうし、そして共通のＰおよびｇパラメータが使用可能であろう。それにもかかわらず、当業界の熟練した人々によって、ユーザ１０２からプロバイダ１０４へのメッセージ１０６は暗号化される必要がないこと、そして通信１０６が暗号化されている場合には、いかなる公開鍵暗号化アルゴリズムも使用可能であろうことが理解されるであろう。
【００２６】
一つの実施例においては、以下にそして図２を参照して述べられるように、暗号化されたクッキーが作成されそこで復号化され、そして暗号化されたクッキーからパズルが作成され、そして解かれる。この特定の実施例に従って、外部環境は次のようである。一定したデータおよび機能性が呼の環境の中に存在すると仮定されている。とくに、一層の機能性がユーザからよりもブロバイダから要求されている。
【００２７】
パズルシステムの第一の共通パラメータは長さ１０２４ビット、そして素数であるところのＰ、および、その値は２であるところのジェネレータｇである。素数Ｐは、２１０２４−２９６０−１＋２６４＊｛［２８９４π］＋１２９０９３として与えられる。Ｐの１６進数値は次のとおりである：
ＦＦＦＦＦＦＦＦ  ＦＦＦＦＦＦＦＦ  Ｃ９０ＦＤＡＡ２  ２１６８Ｃ２３４
Ｃ４Ｃ６６２８Ｂ  ８０ＤＣ１ＣＤ１  ２９０２４Ｅ０８  ８Ａ６７ＣＣ７４
０２０ＢＢＥＡ６  ３Ｂ１３９Ｂ２２  ５１４Ａ０８７９  ８Ｅ３４０４ＤＤ
ＥＦ９５１９Ｂ３  ＣＤ３Ａ４３１Ｂ  ３０２Ｂ０Ａ６Ｄ  Ｆ２５Ｆ１４３７
４ＦＥ１３５６Ｄ  ６Ｄ５１Ｃ２４５  Ｅ４８５Ｂ５７６  ６２５Ｅ７ＥＣ６
Ｆ４４Ｃ４２Ｅ９  Ａ６３７ＥＤ６Ｂ  ０ＢＦＦ５ＣＢ６  Ｆ４０６Ｂ７ＥＤ
ＥＥ３８６ＢＦＢ  ５Ａ８９９ＦＡ５  ＡＥ９Ｆ２４１１  ７Ｃ４Ｂ１ＦＥ６
４９２８６６５１  ＥＣＥ６５３８１  ＦＦＦＦＦＦＦＦ  ＦＦＦＦＦＦＦＦ。
【００２８】
次の共通な機能性が都合よく使用されている。ユーザおよびプロバイダの両者が、ＳＨＡ‐１ハッシュアルゴリズムおよび長い整数モジュラー累乗機能へのアクセスを要求する。Ｈ（．）で表されるＳＨＡ‐１ハッシュアルゴリズムは、いかなる入力からでも、入力の長さにかかわらず、都合よく１６０‐ビットの結果を生成する。長い整数モジュラー累乗機能は、上記ｇおよびＰを絶対的に参照し、そして与えられた値ｘ（value x）に対するｇｘモジューロＰを効率的に計算する。たとえば、加算、乗算等のような、他の長い整数モジュラー算術機能は、モジュラー累乗機能の実行において代わりに使用されるかも知れない。
【００２９】
以下のプロバイダ側のみに関するパラメータおよび機能は、都合よく用いられる。上に述べた共通機能要求に加えて、プロバイダは付加的に、暗号的に信頼できる方法で、クッキーを作成し確認する能力を要求する。これを行うために、プロバイダは次の項目：（１）３ＤＥＳ暗号化アルゴリズム；（２）認証鍵Ｋａ；（３）クッキーを暗号化するのに使用される鍵Ｋｐ；そして（４）高品質の、秘密の擬似乱数のソースを要求する。一つの実施例においては、認証鍵Ｋａは長さが１２８ビットである。３ＤＥＳ暗号化アルゴリズム以外の暗号化アルゴリズムが用いられるかも知れないことは理解されるべきである。３ＤＥＳ暗号化アルゴリズムが使用されている実施例においては、クッキーを暗号化するための鍵Ｋｐは、都合よく長さが１１２ビットであろう。
【００３０】
この特定の実施例に従って、暗号化されたクッキーはつぎのようにして作成されるかも知れない。述べられた特定の実施例においては、クッキーは１バイトバッファである。入力クッキーの最大長は、素数Ｐの１０２４ビット長プラス、結局追加されるであろうところの８０ビットによって制限されると仮定されている。クッキーは８オクテットの倍数となるように、１あるいはそれ以上のオクテットで引き伸ばされ、そしてプレペンド（prepend）された認証情報の８オクテットを有する。付加された８０個の付加的ビットとともに、クッキーの長さは１０２３ビットより小さく留まらなければならない。その結果、この特定の実施例においては、入力クッキーは多くても長さが１０１オクテット、すなわち８０８ビットでなければならない。当業界における熟練した人々によって、より長いクッキーも、もしも必要ならば、僅かの修正で取り扱い可能であることを理解されるべきであろう。クッキーは都合よく８オクテットの最小長さを有するであろう。次の擬似符号パラメータは、この特定な実施例に従ってクッキーを暗号化するのに適用されるかも知れない：
ｖｏｉｄ  ｅｎｃｒｙｐｔＣｏｏｋｉｅ（
ｃｏｎｓｔ  ｕｎｓｉｇｎｅｄ  ｃｈａｒ  ＊ｃｏｏｋｉｅ、
ｉｎｔ  ｃｏｏｋｉｅＬｅｎｇｔｈ、
ｕｎｓｉｇｎｅｄ  ｃｈａｒ  ＊ｅｎｃｒｙｐｔｅｄＣｏｏｋｉｅ）；
上記の擬似符号パラメータにおいて、パラメータｃｏｏｋｉｅは、情報のｃｏｏｋｉｅＬｅｎｇｔｈ（多くても１０１）オクテットをもつバッファを示す。パラメータｅｎｃｒｙｐｔｅｄＣｏｏｋｉｅは、少なくても（（ｃｏｏｋｉｅＬｅｎｇｔｈ  ＋１６）ε  ０ｘＦ８）オクテットの利用可能なスペースをもったバッファを示し、そしてそれは結果的には上書きされるであろう。用いられた総体的情報は、パラメータＫａおよびＫｐを含む。
【００３１】
次の方法ステップは、この特定の実施例に従ってクッキーを暗号化するのに使用されるかも知れない。第一にＳＨＡ  ｈａｓｈ  Ｈ（Ｋａ、ｃｏｏｋｉｅ）が計算され、そしてそこで８オクテットに切り縮められる。縮められたハッシュはそこでｅｎｃｒｙｐｔｅｄＣｏｏｋｉｅと呼ばれるファイルにコピーされる。第二に、ｃｏｏｋｉｅと呼ばれるファイルはｅｎｃｒｙｐｔｅｄＣｏｏｋｉｅファイルに付加される。第三に、必要とされる付加オクテットの数、１＜＝ｎ＜＝８が計算され、そしてそこで値ｎ（value n）を含むオクテットの数が付加される。この第三の方法ステップは、明瞭に逆転されることが可能である。第四に、ｅｎｃｒｙｐｔｅｄＣｏｏｋｉｅファイルは、３ＤＥＳ暗号化アルゴリズムを用いて、暗号ブロック連鎖（ＣＢＣ）モードにおける鍵Ｋｐおよびゼロの初期化ベクトルとともに暗号化される。
【００３２】
この特定の実施例に従って、暗号化されたクッキーは次の擬似符号パラメータを用いることによって復号されるかも知れない：
ｉｎｔ  ｄｅｃｒｙｐｔＣｏｏｋｉｅ（
ｃｏｎｓｔ  ｕｎｓｉｇｎｅｄ  ｃｈａｒ  ＊ｅｎｃｒｙｐｔｅｄＣｏｏｋｉｅ、
ｉｎｔ  ｃｏｏｋｉｅＬｅｎｇｔｈ、
ｕｎｓｉｇｎｅｄ  ｃｈａｒ＊ｃｏｏｋｉｅ
）；
上記の擬似符号パラメータにおいて、ファイルｅｎｃｒｙｐｔｅｄＣｏｏｋｉｅは、情報のｃｏｏｋｉｅＬｅｎｇｔｈ（多くても１１２）オクテットをもったバッファを示している。ファイルｃｏｏｋｉｅは、利用できるスペースが少なくとも（ｃｏｏｋｉｅＬｅｎｇｔｈ−８）オクテットのバッファを示し、そしてそれは結果的には上書きされるであろう。もしも認証が成功すれば、返す値は復号されたクッキーの長さである。そうでなければ、返す値はゼロである。使用された総体的な情報は、パラメータＫａおよびＫｂを含む。
【００３３】
次の方法ステップは、この特定の実施例に従って、暗号化されたクッキーを復号するのに使用されるかも知れない。第一にｅｎｃｒｙｐｔｅｄＣｏｏｋｉｅと呼ばれるファイルは仮のバッファにコピーされ、そしてそこで、３ＤＥＳ暗号化アルゴリズムを用いて、ＣＢＣモードにおける鍵Ｋｐおよびゼロの初期化ベクトルとともに復号される。第二に、ＳＨＡハッシュＨ（Ｋａ、ｂｕｆｆｅｒ＋８）が、付加部が取り去られた後に計算される。ＳＨＡハッシュは、そこで８オクテットに切り縮められる。第三に、８オクテット出力はバッファの最初の８オクテットと比較される。もしも二つの比較された８オクテットのセットが等しくなければ、ゼロの値が返される。第四に、もしも比較が等しければ、仮のバッファプラス８オクテットがｃｏｏｋｉｅファイルにコピーされ、そしてｃｏｏｋｉｅファイルの付加されない長さが返される。
【００３４】
この特定の実施例に従って、図２に示したように暗号化されたクッキーからパズルが生成されるかも知れない。暗号化されたクッキー２００は、左（Ｌ）および右（Ｒ）成分に概念的に分割される。右成分は長さが８０ビットである。乱数発生器２０２は、擬似ランダム的に、０から２２３の範囲内の数を選択する。暗号化されたクッキー２００は、１０２４ビットのバッファ２０４の中にコピーされ、そして左側にゼロ２０６で引き伸ばされ、そして右側にゼロの１０オクテット（８０個のゼロビット）で引き伸ばされる。１６０ビットＳＨＡハッシュ関数２０８は、暗号化されたクッキー２００の右成分および乱数発生器２０２によって選択された乱数の結合に実行される。長さ２０オクテットのハッシュ関数２０８の結果は、バッファ２０４の最も右の２０オクテットの中に、暗号化されたクッキー２００の最も右の１０オクテットおよびゼロの１０オクテットを一部修正しながらビット方向排他的論理和される。バッファ２０４は、累乗された結果Ｚを生成するために累乗される。累乗された結果Ｚは、パズル２１０の中で、ユーザ、あるいは依頼人に送られ、そしてパズルは、結果Ｚおよび捨てられてしまう、バッファ２０４の中の最も右の８０ビット以外のすべてを含んでいる。
【００３５】
一つの実施例に従って、暗号化されたクッキーからパズルを生成するために、次の擬似符号構造が用いられるかも知れない：
ｓｔｒｕｃｔ  ｐｕｚｚｌｅ｛
ｉｎｔ                          ｄｉｆｆｉｃｕｌｔｙ；
ｉｎｔ                          ｃｏｏｋｉｅＬｅｎｇｔｈ；
ｕｎｓｉｇｎｅｄ  ｃｈａｒ      ａｎｓｗｅｒ［１２８］；
ｕｎｓｉｇｎｅｄ  ｃｈａｒ    ｅｎｃｒｙｐｔｅｄＣｏｏｋｉｅ［ｃｏｏｋｉｅＬｅｎｇｔｈ］；
｝
ｖｏｉｄ  ｍａｋｅＰｕｚｚｌｅ（
ｕｎｓｉｇｎｅｄ  ｃｈａｒ  ＊ｅｎｃｒｙｐｔｅｄＣｏｏｋｉｅ、
ｉｎｔ  ｃｏｏｋｉｅＬｅｎｇｔｈ、
ｉｎｔ  ｄｉｆｆｉｃｕｌｔｙ、
ｓｔｒｕｃｔ  ｐｕｚｚｌｅ  ＊ｐ
）；
入力ｄｉｆｆｉｃｕｌｔｙは、使用される乱数のサイズを決定する。そして乱数は、その結果、パズルを解くために行われる必要のある試行累乗の予想される数に影響する。たとえば、もしもｄｉｆｆｉｃｕｌｔｙが２０であれば、そこで平均して２１９のハッシュ計算および試行累乗が、パズルをこわすためにユーザによって行われることが必要であろう。入力暗号化されたクッキーは長さｃｏｏｋｉｅＬｅｎｇｔｈを有する。この機能はｐによって示された構造を満たした後に復帰する。構造内のｅｎｃｒｙｐｔｅｄＣｏｏｋｉｅは、入力暗号化されたクッキーとは異なり、その結果認証に失敗するであろう。
【００３６】
暗号化されたクッキーは概念的に、Ｒが１０オクテット（８０ビット）の長さであるように、二つの部分ＬおよびＲに分割される。乱数ｒは、０‥２ｄｉｆｆｉｃｕｌｔｙ―１の範囲に発生される。暗号化されたクッキーはそこで１０２４ビットの仮のバッファＫの中にコピーされる。そしてそれは左側においてゼロで引き伸ばされ、右端においてゼロの１０オクテットで引き伸ばされる。Ｌ、ｒのハッシュ関数が、長さ２０オクテットの値ｈを生成するのに実行される。もとの暗号化されたクッキーの最後の１０オクテットおよび他のゼロの１０オクテットを修正しながら、ｈの値はバッファの最後の２０オクテットに、排他的論理和される。仮のバッファＫは１０２４ビットの整数として取り扱われ、次の方程式：Ｚ＝ｇＫ  ｍｏｄ  Ｐに従ってＺを生成するために累乗される。擬似符号構造は、つぎの擬似符号ステップに従って適切な場（field）を示すことによって満たされる。
【００３７】
ｐ−＞ｄｉｆｆｉｃｕｌｔｙ＝ｄｉｆｆｉｃｕｌｔｙ；
ｐ−＞ｃｏｏｋｉｅＬｅｎｇｔｈ＝ｃｏｏｋｉｅＬｅｎｇｔｈ；
ｐ−＞ａｎｓｗｅｒ＝Ｚ；
ｐ−＞ｅｎｃｒｙｐｔｅｄＣｏｏｋｉｅ＝ｔｈｅ  ｍｉｄｄｌｅ  ｐａｒｔ  ｏｆ  Ｋ。
【００３８】
一つの実施例に従って、パズルはｓｏｌｖｅＰａｚｚｌｅで示されるソフトウエアルーチンを呼ぶことによって解かれるかも知れない。パズル解答関数は、パズルを実際に解くために繰り返し呼ばれなければならない。それぞれの呼が一つの試行累乗を実行する。呼んでいるプログラムは、当業界における熟練した人々によって理解されるであろうように、都合よく、たとえば、背景スレッドを生成すること、中間状態を周期的に保存すること等のような機能に対して任務を与えられている。つぎの擬似符号構造は、追跡プロセスの状態を完全に明らかにしており、そして継続するために保存されそしてもとに戻される必要のある情報である：
ｓｔｒｕｃｔ  ｐｕｚｚｌｅｓｔａｔｅ｛
ｓｔｒｕｃｔ  ｐｕｚｚｌｅ  ｐ；
ｉｎｔ              ｕｐｔｏ；
ｕｎｓｉｇｎｅｄ  ｃｈａｒ    ｉｎｔｅｒｍｅｄｉａｔｅ［１２８］；
｝；
ｉｎｔ  ｓｏｌｖｅＰｕｚｚｌｅ（ｓｔｒｕｃｔ  Ｐｕｚｚｌｅｓｔａｔｅ＊ｓ）；
ｓｏｌｖｅＰｕｚｚｌｅルーチンは、ｓｏｌｖｅＰｕｚｚｌｅルーチンがパズルに対する解を見いだしているときは、１の値を返すであろう。この場合、ｐｕｚｚｌｅｓｔａｔｅ構造のｅｎｃｒｙｐｔｅｄＣｏｏｋｉｅ場は、価値ある暗号化されたクッキーを含むであろう。まだ追跡中の間は、ｓｏｌｖｅＰｕｚｚｌｅルーチンは、ゼロの値を返すであろう。ｓｏｌｖｅＰｕｚｚｌｅルーチンが、全範囲を探索する以前に価値ある暗号化されたクッキーを見いだしていない“不可能な”場合、ｓｏｌｖｅＰｕｚｚｌｅルーチンは、負の１の値を返すであろう。このような結果は、パズルの送信が改悪を受けたか、あるいはユーザ側あるいはプロバイダ側のいずれかにおいてプログラムにバグが存在したかの場合にのみ生じうるであろう。
【００３９】
初めてｓｏｌｖｅＰｕｚｚｌｅを呼ぶ以前に、ユーザはプロバイダから受信したパズルを上に示したｐｕｚｚｌｅｓｔａｔｅ構造の中にコピーすべきであることは指摘されるべきであろう。初めてｓｏｌｖｅＰｕｚｚｌｅを呼ぶ前にまた、ユーザは場ｕｐｔｏをゼロにセットすべきである。
【００４０】
当業界における熟練した人々によって、種々の代わりの方法がパズルを解きそしてクッキーの正しいことを確かめるために使用されうることは理解されるべきであることはまた留意されるべきであろう。一つのこのような方法は、鍵をかけられたメッセージ（keyed message）認証符号の使用である。
【００４１】
パズルを解くのに使用される方法が効率的であることは重要である。たとえ目的は計算機時間を使用することであるとしても、使用される時間は避けられないことは重要であり、単純な最適化に従うものではない。この理由から、ｓｏｌｖｅＰｕｚｚｌｅへの最初の呼は、その後の計算（それは確かにシステムの破壊を望む誰かがするであろうことである）を避けるために、中間的な結果を計算し、そして結果を保存しなければならない。ｇ（ｘ＋ｙ）＝ｇｘｇｙであるから、推測して固定および可変部分にパズルをこわし、より小さい可変部分のみについて累乗を計算することは可能である。事実、固定部分で解を分割（逆に乗算）することによって、１６０ビットの可変部分を累乗し、そしてそこで問題が解かれたか否かをチェックするために比較を行うことのみが必要である。
【００４２】
この特定の実施例に従って、次のステップを実行することによって、パズルは解かれるかも知れない：第一に、もしもｕｐｔｏ場がゼロであれば、ｉｎｔｅｒｍｅｄｉａｔｅ場は初期化される。初期化の手順はｅｎｃｒｙｐｔｅｄＣｏｏｋｉｅ場を、Ｒが１０オクテットの長さであるように左および右（ＬおよびＲ）の部分に分割し、そしてそこで（Ｌ＊２１６０）の逆数を計算し、ｉｎｔｅｒｍｅｄｉａｔｅ場に対する結果として生じる値を得るためにａｎｓｗｅｒ場を乗じることによって行われる。第二に、ハッシュ関数はＬおよびｕｐｔｏ場に対して実行され、そして１６０ビットの結果はＲおよびハッシュの最も右の１０オクテットから形成される。第三に、１６０ビットの結果は、累乗の結果を生成するために累乗される。第四に、累乗の結果は、ｉｎｔｅｒｍｅｄｉａｔｅ場の中の値と比較される。もしも比較された値が異なれば、ｕｐｔｏ場は増加され、そしてゼロの値が返される。（あるいは、もしもｕｐｔｏ場の値が２ｄｉｆｆｉｃｕｌｔｙよりも大きいかあるいは等しければ（すなわち何かが悪く進行していれば）、負の１の値が返される。）第五に、そうでなければ（すなわちもしも第四のステップで比較された値が同じであれば）、Ｌのハッシュの最も左の８０ビットおよびｕｐｔｏは、ｅｎｃｒｙｐｔｅｄＣｏｏｋｉｅ場の最も右のビット（それが今や正しい）の中に排他的論理和され、成功を示して１の値が返される。
【００４３】
このようにして、ミドルマン詐欺の可能性を減少すると同時に匿名のユーザを認証する新しいそして改善された方法が述べられてきた。当業界における熟練した人々は、この中に開示されている実施例に関連して述べられた、種々の実例となる論理ブロック、モジュール、回路、そしてアルゴリズムステップが、電子的ハードウエア、計算機ソフトウエア、あるいは両者の組み合わせとして実施されるであろうことを了解するであろう。種々の実例となる部品、ブロック、モジュール、回路、そしてステップは、一般的にそれらの機能の形で述べられている。この機能がハードウエアとして、あるいはソフトウエアとして実施されるかどうかは、個々の応用そしてシステム全体に課せられた設計的制約により異なる。熟練した技能者は、こういった環境の下でのハードウエアおよびソフトウエアの互換性と、そしてそれぞれの個々の応用に関する述べられた機能を実施する最善の方法を認識する。例として、この中に開示されている実施例に関連して述べられた、種々の例となる論理ブロック、モジュール、回路、そしてアルゴリズムステップは、ディジタル信号処理装置（ＤＳＰ）、特定用途向けの集積回路（ＡＳＩＣ）、ディスクリートゲートあるいはトランジスタ論理、たとえば抵抗器そしてＦＩＦＯのようなディスクリートハードウエア部品、一連のファームウエア命令を実行する処理装置、何れかの従来のプログラマブルソフトウエアモジュールそして処理装置、あるいは、何れかのその組み合わせをもって実行されあるいは成し遂げられるであろう。処理装置は都合よくマイクロプロセッサであるかも知れず、しかし代わりに、任意の従来の処理装置、コントローラ、マイクロコントローラ、あるいはステートマシンであるかも知れない。ソフトウエアモジュールは、ＲＡＭメモリ、フラッシュメモリ、ＲＯＭメモリ、抵抗器、ハードディスク、取り外し可能なディスク、ＣＤ‐ＲＯＭあるいは当業界において知られた任意の蓄積媒体の他の形態の中に存在してもよいであろう。熟練した人々は、さらに、上の記述を通じて参照されたであろうデータ、命令（instruction）、コマンド、情報、信号、ビット、記号、そしてチップは、都合よく電圧、電流、電磁波、磁場あるいは磁気粒子、光学的場あるいは光学粒子、あるいは任意のこの組み合わせによって表されることを認めるであろう。
【００４４】
このように本発明の望ましい実施例が示されそして記述された。しかしながら、当業界において普通に熟練した人にとっては、本発明の精神あるいは範囲から逸脱することなしに、ここに開示された実施例に対して多くの代案が作成されうるであろうことが明白であろう。それ故、本発明は以下の特許請求範囲に従ったものを除き限定されるべきものではない。
【図面の簡単な説明】
【図１】  図１は、情報がプロバイダおよびユーザの間で交換されているシステムのブロック線図である。
【図２】  図２は、“パズル”の累乗操作への暗号化された“クッキー”のビットの整合を説明しているブロック線図である。
【符号の説明】
１００  …  システム
１０２  …  ユーザ
１０４  …  プロバイダ
１０６  …  データ
１０８  …  パズル
１１０  …  回答
２０２  …  乱数発生器
２０４  …  バッファ
【図１】
0004782343.tif 000004
【図２】
0004782343.tif 000005