コールサイン
【課題】ピアツーピアネットワークなどに使用される、暗号文によりセキュリティ保護されている短い簡単に覚えられるコールサインを生成する方法を提供する。
【解決手段】公開鍵およびパーソナライゼーション情報文字列からなる区別された修飾子を決定すること、暗号化一方向関数を通じて公開鍵およびパーソナライゼーション情報文字列とともにハッシュされた場合に、結果が、多数の0から始まる、区別されたハッシュ値となる区別されたsaltを見つけること、および区別されたsaltを公開鍵およびパーソナライゼーション情報文字列からなる区別された修飾子とともにハッシングすること、ハッシュから先行0の個数を見つけること、ハッシュからビットの個数を取り出すこと、先行0の個数およびビットの個数のビットの英数字表現を見つけることにより、コールサインを生成する。
【解決手段】公開鍵およびパーソナライゼーション情報文字列からなる区別された修飾子を決定すること、暗号化一方向関数を通じて公開鍵およびパーソナライゼーション情報文字列とともにハッシュされた場合に、結果が、多数の0から始まる、区別されたハッシュ値となる区別されたsaltを見つけること、および区別されたsaltを公開鍵およびパーソナライゼーション情報文字列からなる区別された修飾子とともにハッシングすること、ハッシュから先行0の個数を見つけること、ハッシュからビットの個数を取り出すこと、先行0の個数およびビットの個数のビットの英数字表現を見つけることにより、コールサインを生成する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ユーザをコンピュータネットワークに識別させるための比較的短い「コールサイン」に関する。
【背景技術】
【0002】
鍵と暗号識別(「IDs」)は、コンピュータシステムなど、ユーザの検証を必要とする多くのアプリケーションにおいて重要な役割を果たす。ピアツーピアコンピュータシステムの実施例では、ユーザ識別(「ID」)は、IDが電子メールなどで電子的に提示される場合にユーザがネットワークにアクセスする権利を有することを検証する、システム管理者への証明書(verifier)として使用することが可能である。それとは別に、IDは、音声または筆記により伝達することもできる。
【発明の開示】
【発明が解決しようとする課題】
【0003】
以前には、IDは、名刺を使用して、または口頭で、手作業により提示されていた。IDは、通常、簡単に覚えられない2進数の長い数列である。IDは、暗号化プロセスを使用してセキュリティ保護されるようにできる。しかし、保護されているIDは、通常、さらに長く、また簡単に回覧することも難しい。そのため、さらに、ユーザは暗号化でIDを保護する場合に使い勝手をあきらめる。
【0004】
以下では、読者が基本的な理解を得られるように、開示について簡単に説明する。この「発明の開示」は、開示の広い範囲にわたる概要ではなく、また本発明の鍵となる/重要な意味を持つ要素を識別しない、または本発明の範囲を線引きすることもない。後で述べる詳細な説明の前置きとして、本明細書で開示されているいくつかの概念を簡略化した形式で述べることのみを目的とする。
【課題を解決するための手段】
【0005】
本発明は、ユーザをコンピュータネットワークに識別させるための比較的短い「コールサイン」を実現する。このネットワークは、ネットワーク内の個々のコンピュータが他のネットワークの場合と比べてセキュリティを厳しくする必要のあるピアツーピアネットワークであってよい。コールサインは、ネットワークへの参加を求めるコールサインを提示する人に関する情報を組み込む。コールサインは、短く、覚えやすいが、従来のIDは、通常長く、覚えにくい。コールサインは、さらに、事前に計算される「salt」値も組み込み、これにより、それ自身と個人情報のハッシュで、英字および数字を含むコールサインに容易に変換できる固定長の結果を出力する。個人情報以外の情報は、アプリケーションに応じてハッシングに取り込むことができる。
【0006】
当業者であれば、暗号文によりセキュリティ保護されている短い簡単に覚えられるIDを持つことが望ましいことを理解するであろう。この種のコールサインは、必ず、覚えられるくらい十分に短いが、それでも、十分なセキュリティを提供し、ピアツーピアまたは他のネットワークの利便性を高めることができる。
【0007】
本発明の付随する特徴の多くは、添付の図面に関して考察される以下の詳細な説明を参照することにより容易に理解できるため明白であろう。
【0008】
以下の説明は、本開示の一部をなす、以下で手短に説明されている、図面の様々な部位を参照することで最もよく理解できるであろう。
【発明を実施するための最良の形態】
【0009】
付属の図面に関して以下で述べる詳細な説明は、本発明のこの実施形態の説明として意図しており、本発明が構成または利用されうる唯一の形態を表すことを意図していない。この説明では、本発明の機能、および例示されている実施形態に関して本発明を構成し、動作させるステップの順序を規定する。ただし、同じ、または同等の機能および順序は、本発明の精神および範囲内に包含されることも意図している異なる実施形態により達成することが可能である。
【0010】
本発明は、本明細書では、ピアツーピアコンピュータネットワークシステム内に実装されるものとして説明され、例示されているが、説明されているシステムは一実施例として提示されているのであり、限定するものとして提示されているのではない。当業者であれば、本発明は、様々な異なる種類のコンピュータシステムによるアプリケーションに好適であることを理解するであろう。
【0011】
図1は、ピアツーピアネットワークまたは同等のネットワーク例にアクセスするために使用される標準的なセキュリティ保護されたユーザ識別を示す図である。ピアツーピアコンピュータネットワークは、サーバコンピュータなしで機能しうるコンピュータのネットワークであり、そのセキュリティに対する責任は、ネットワーク内のそれぞれのピアコンピュータが負う。周知のように、ユーザのアクセス権を識別し、検証するために使用される識別子101は、通常、極めて長い。このような2進数は、通常、160ビット長(102)であり、これは、40桁の16進数に等しい。識別子101の他の実施例としては、40個の16進数により表される数と任意長の文字列の2つの構成要素を含むPNRP名がある。このような識別は、マシン以外では、容易に伝達することはできない。
【0012】
多くのコンピュータネットワークは、「ピアツーピア」名前解決のプロセスで通常使用されるピア名の生成を必要とする場合がある。現在実装されているように、ピアツーピア名前解決プロトコル(PNRP)は、通常、ユーザに扱いやすい(十分なセキュリティ機能を持たない傾向がある)短いピア名を使用するか、またはユーザに扱いにくい(通常は、より高いレベルのセキュリティ機能を持つ)長い2進数列を含む長いピア名を使用することに制約される。当業者であれば、任意の種類のコンピュータネットワーク、またはセキュリティ保護され、短縮された識別ツールが望まれているシステムに、短縮された識別子を適用可能であることを理解するであろう。
【0013】
長いピア名は、通常、暗号化プロセスを適用することにより、セキュリティ保護することが可能である。しかし、そのような長い名前は、通常、ユーザに扱いやすいものではない。長い名前は、通常、覚えておいてコンピュータネットワークへのアクセス権を得るために入力するのが難しい。つまり、最新技術では、通常、ユーザに対し利便性とセキュリティの択一選択を迫るのである。ピアツーピアネットワーク内で、安全な方法により、短く覚えやすい識別子を使用してコンピュータを識別する手段を実現することが望ましい。
【0014】
(I.0の個数が明示されているコールサインの第1の実施形態およびそれらを生成する方法)
図2は、コールサインを発生する方法の第1の実施形態により生成される短縮されたコールサイン識別子202の表現を示す図である。特に、この本実施形態では、コールサイン内の「0の個数フィールド」を使用する。本明細書で説明されているピアツーピア識別(「コールサイン」)に対するセキュリティ保護されたコールサインを生成するシステムおよび方法を使用することで、ピアツーピアネットワーク(「P2P」)、および当業者に知られている他の同等のネットワークアプリケーションに使用することができる覚えやすいセキュリティコードまたはコールサイン202を生成する。特に、コールサインを構成する際に使用される特定の情報、および適用される暗号機能により、コールサインを様々なアプリケーションで使用することができる。例えば、コールサインおよびそれらのコールサインを生成する方法の一実施形態をピアツーピア名前解決プロトコル(PNRP)に適用することができる。他のアプリケーションは、限定はしないが、 を含むことができる。
【0015】
ピアツーピア識別に通常使用されるコールサインを生成する方法により、ユーザのIDを安全に伝達するという難題を解決する。セキュリティは、セキュリティ保護されたプロセスを使用して、ユーザに覚えやすい、また入力しやすい短いコールサインを構成することにより実現される。そのようなコールサインに対し、暗号化プロセスにより強力な保護を行うことができる。例えば、「ZA4−3Y−4W−ZF4」などのピアツーピア識別のコールサイン202は、短く、セキュリティ保護されている。このようなコールサインを覚えるのは、社会保障番号を覚えるよりも少し難しいだけである。
【0016】
例示されているコールサイン例202は、10個の英数字を含む。当業者であれば、それよりも多い、または少ない文字を含むコールサインを生成できることを理解するであろう。10個のコールサイン文字はそれぞれ、5個の2進数ビット203を表す。これらのセグメントは、5つのビットセグメントに分割されているさらに長い2進数の一部分である。当業者であれば、5ビットよりも多い、または少ない長さの2進数を表すために同等の実施形態で使用できることを理解するであろう。
【0017】
コールサインの桁の最初の桁は、この実施例を見るとわかるように、文字「Z」である。この実施例では、第1の桁は、コールサインを復号化する際に使用される0の個数を伝達するように定義されている。ここで、文字Zは、5ビット2進数11111である、10進数31を表すように定義されている。当業者であれば、本発明の同等の実施形態において、0の個数を識別する桁の配置、およびコールサイン内の0の個数は、異なっていてもよい。同様に、実施例では、「Z」の代わりに任意のビットパターンまたは文字を選択できる。
【0018】
このコールサインの残りの9個の英数字は、2進数の残り部分を表す。これらの桁は、(「L」)として指定される。この実施例では、Lは、長さが45ビットである。2進数Lは、ユーザ識別を暗号化するために使用される暗号化プロセスの結果から取り出したものである。2桁目から10桁目までの中の残りLビットは、残りの9つの英数字にマッピングされる5ビットセグメントに分割される。当業者であれば、2進数の英数字へのマッピングは、テーブルルックアップ、公式、または当業者に知られているその他の同等な方法により実行できることを理解するであろう。当業者であれば、さらに、10個の文字の順序付けは、同等な実施形態でも異なることがあることも理解するであろう。
【0019】
0の個数および数Lをコールサインから復号化した後、2進数に対し暗号化処理が実行されて、ユーザのIDを再作成する。ユーザの識別が確立されたら、コールサインを保持している人に、ネットワークへのアクセス権およびその他の特権を付与することができる。
【0020】
(区別された修飾子からのコールサインの第1の実施形態の生成)
名前を付けるべきエンティティは、従来通り生成された公開鍵/秘密鍵のペアK/P、およびパーソナライゼーション情報文字列、またはデジタルID、Xを所有していると仮定する。パーソナライゼーション情報文字列は、名前を付けるべきエンティティの自然な属性で構成することができる。例えば、パーソナライゼーション情報文字列は、一般名、会社名、市名、および電子メールアドレスなどの組合せを含むことができる。従来通り構成された公開鍵Kは、バイナリ文字列により表すことができ、パーソナライゼーション情報文字列は、テキスト文字列により表すことができる。
【0021】
図3に、コールサインの構成を示す。コールサイン生成プロセスの第1のステップは、Sが暗号化一方向関数(「H(x)」)308を通じてK310とX309とともにハッシュされた場合(307)に、結果が、多数の0から始まる、「区別された」ハッシュ値(「H」)301となる、「区別された」「salt」値Sを見つけることである。コールサインを生成する後続のステップでは、特定の個数の0が必要である。区別されたsalt値を見つける際に、与えられた時間間隔にわたって多数の値を試すことができ、所望の個数の0を生成する区別されたsalt値が保持される。区別されたsalt値により、ユーザが認証用のコールサインを提示した場合にコールサインが検証手順をパスするようにできる。
【0022】
当業者であれば、先行0の代わりに特定のビットパターンを使用できることを理解するであろう。例えば、他の実施形態では、先行1、または最小個数の「0110」グループなどを利用することもできる。コールサインを生成する際に求めているのは、コールの一部が所定のパターンと一致していることであるが、コールサインを構成し、パターンを持たない傾向のあるビットの残りはコールサインの残りの桁を構成する。それとは別に、所定のパターンは、区別されたハッシュ値を生成するために使用されるハッシュ関数ではなく2次的な関数から得ることも可能である。
【0023】
ハッシングは、ハッシングアルゴリズムと呼ばれる数学的関数を任意の量のデータに適用することにより固定サイズの結果を出力する暗号化プロセスでよく使用されるプロセスである。これらの実施形態で使用されるハッシュ関数は、当業者に知られている型である。標準的なハッシングアルゴリズムとしては、MD2、MD4、MD5、およびSHA−1がある。
【0024】
これらの実施形態で使用されるハッシュ関数は、一方向暗号化ハッシュ関数として特徴付けることができる。当業者であれば理解するように、一方向ハッシュ関数は、通常、複数の一意的な特性を持つが、それは、任意長のメッセージ入力から固定長のハッシュ値または結果を計算するのは容易であり、固定長のハッシュ値が与えられた場合、任意長のメッセージを計算することは難しく、また任意長のメッセージ入力が与えられた場合、同じ固定長のハッシュ値を生成する他のメッセージを見つけることは困難であるからである。
【0025】
区別されたsalt値およびその他の文字列から出力される区別されたハッシュH301は、そのハッシュにより生成される数のMSB側の多数の0(または他の同等の定義済みビットパターン)から始まる。当業者であれば、他の同等の実施形態において、複数の0(またはその他の同等の定義済みビットパターン)をLSB桁またはその他の位置に配置できること、または説明されているハッシュまたは他の関数の順序特性をインジケータとして使用することが可能であることを理解するであろう。区別されたsalt値および最終的な区別されたハッシュは、異なるsalt値で評価される一方向ハッシュ関数の反復を通じて見つけられる。多数の先行0を伴うハッシュを生じるsalt値は、区別されたハッシュとして保持される。一定の時間Tが経過するまで試行を繰り返す。当業者であれば、本発明の複数の実施形態では、攻撃者がTの倍数の時間をかけて同じ個数の0を見つけ、40ビットまたは45ビットと照合しなければならないという想定の下で、ある固定時間「T」の間に0を見つけようとすることを理解するであろう。区別されたsalt値を見つけるための探索プロセスの一実施形態は、以下のように書くことができる。
見つける0の個数を初期化する:Z=0
時間Tの間、以下を実行する:
新しいsalt値Vを選択する
HV=一方向ハッシュ(K,X,V)を計算する
HV内の先行0の個数、Yを計算する
(Y>Z)ならば
S=V,H=HV,Z=Y
指定された時間Tの終わりに、区別されたsalt値Sおよび区別されたHが見つかる。
【0026】
区別されたハッシュHは、暗号に関して強力な一方向関数を通じてK、X、およびSのハッシュとして定義される。
区別されたハッシュ=H=H(K,X,S)
【0027】
2進数である区別されたハッシュHから論理コールサインが作成される。区別されたハッシュ301は、所定の個数のビット(「M」)からなる。Mは、区別されたハッシュの先行0(「Z」)」302、および最後の先行0(または先行0のLSB)の直後にある区別されハッシュ値Hの予め選択された個数のビット(「L」)303を含む。
【0028】
0の個数が決定された後、次のステップは、コールサインのコンテンツ内に含める区別されたハッシュHからの残りのビットの個数を決定することである。(区別されたsalt値を見つける際に使用される)パラメータTおよびLは、セキュリティおよびスケーリング考慮事項を考慮して選択される。上記のプロセスは、試行が実行される期間T、および選択されたビットの個数Lの2つのパラメータを持つ。これらのパラメータは、所定の数のエントリへのスケーリングを考慮し、ハッカーによるスプーフィング攻撃を難しくし、将来もセキュリティが保たれコールサインを将来にわたって使い続けられるようにすることにより、決定される。将来にわたって使い続けられるには、通常、ムーアの法則を考慮し、コンピュータの速度が向上してもコールサインの偽造不可能性が無効にならないようにすることである。これらのパラメータを選択する際にさらに考慮することは、ハッカーからの「カタログ」攻撃に抵抗することである。
【0029】
(第1の実施形態における0の個数の符号化)
0の個数が判明した後、その個数をコールサインの中に符号化する方法も見つけなければならない。十分なセキュリティを備える短いコールサインを生成するために、短いデジタルまたは英数字文字列に符号化できるようにビットの総数を十分小さな値に抑える。符号化するビットの総数は、数Lと、0の個数Zを符号化するために必要なビットの数との総和である。通常、数Zは、128よりも小さく、7ビットで符号化することができる。
【0030】
他の実施形態では、ヌルビットの実際の個数を符号化する代わりに、4ビットを使用するヌルオクテットの個数、または5ビットを使用するヌル「4ビットニブル」の個数を符号化することが可能である。十分な数のニブルを見つける修正されたプロセスは以下のとおりである。
【0031】
見つける0の個数を初期化する:Z=0
時間Tの間、以下を実行する:
新しいsalt値Vを選択する
HV=一方向ハッシュ(K,X,V)を計算する
HV内の先行ニブルの個数、Yを計算する
(Y>Z)ならば
S=V,H=HV,Z=Y
例えば、24個の先行0は、通常、1GHzのCPUを搭載する従来のPC上で、この方法により、1分未満で得ることができる。
【0032】
以下に示されるように、コールサインを構成する先行0の後に続くビットのグループである、数Lは、40ビット未満となることは滅多にないであろう。先行0の個数Zに対する実用的な範囲は、24から88までの間である。24から87までの間の値は、以下の公式を使用して符号化できる。
Z=24+R
【0033】
この公式では、Rは、0から63までの間で変化する数値である。これと同等のことであるが、以下の公式を使用することもできる。
Z=24+2*P
【0034】
Pは、0のペアの個数を符号化する0から31までの範囲の数値である。0から31までの間の数は、単一の英数字文字として符号化できるため、かなり実用的である。単一の英数字文字に符号化できる十分な個数の0を見つける修正されたプロセスは以下のとおりである。
【0035】
見つける0のペアの個数を初期化する:Z=0
以下を繰り返す:
新しいsalt値Vを選択する
HV=一方向ハッシュ(K,X,V)を計算する
HV内の先行ペアの個数、Yを計算する
(Y>Z)ならば
S=V,H=HV,P=Z
Zが24よりも大きくなり、また時間Tが経過するまで
Z=Z−12を設定する
次のトレードオフは、値Lおよび時間Tの選択である。後でその選択について説明する。
【0036】
カジュアルなやり取りに適しているコールサインは、0の個数Zの符号化およびL個の選択されたビットの符号化を含む、論理コールサインのデジタルまたは英数字符号化を使用することにより得られる。コールサインを構成するZ+Lビット304は、いくつかの5ビットセグメントに分割できる。それぞれの5ビットセグメントは、英数字文字により表される。英数字文字は、その後、コールサイン305に組み立てられる。そして、最後に、1つまたは複数のセパレータが追加され、最終的なコールサイン306が形成される。また、先行「Q」を削除するなどのコールサイン短縮化規則を採用することもできる。
【0037】
図4に、コールサインを決定するプロセスを示す。ステップ401で、区別された修飾子が構成される。ステップ402で、区別されたsalt値が見つけられる。ステップ403で、区別されたsalt(S)、パーソナライゼーション情報文字列(X)、および公開鍵(K)がM個のビットにハッシングされる。ステップ404で、ハッシュから先行0の個数が見つけられる。ステップ405で、ハッシュから先行0の個数(Z)が取り出される。ステップ406で、ハッシュからビットの個数(L)が取り出され、コールサインに入れられる。そして最後に、ステップ407で、ZおよびL個のビットの英数字表現を見つけてコールサインが形成される。
【0038】
(コールサイン検証手順)
第三者がコールサインを受け取ると、コールサインの意図された所有者に、公開鍵K、パーソナライゼーション情報文字列X、および区別されたsaltSの値の提示を要求することにより、コードサイン、公開鍵、およびパーソナライゼーション情報文字列の間の関連を検証する。第三者は、証明書を使用して、K、X、およびSから区別されたハッシュを計算する。その後、先行0の個数がコールサインの中に表されている値Zと一致することを検証し、値Zが所定の最小値以上であることを検証し、コールサインの中に符号化されているL個のビットがハッシュ値の中の対応するビットと一致することを検証する。追加予防策として、ベリファイアは、パーソナライゼーション情報文字列Xが予想される自然な値に対応するかどうかを「目視」検査する。
【0039】
すでに述べたように、パラメータTおよびLは、セキュリティおよびスケーリングを考慮したうえで選択される。上記のプロセスは、試行が実行される期間T、および選択されたビットの個数Lの2つのパラメータを持つ。これらのパラメータは、所定の個数のエントリに合わせてスケーリングする必要性、スプーフィングが簡単にできてしまうことのないようにする必要性、および将来にわたって使い続けられるようにする必要性、つまり、ムーアの法則に耐える必要性によって決まる。さらに考慮すべきなのは、「カタログ」攻撃に対する抵抗力である。
【0040】
(起こり得るスプーフィング攻撃を考慮したLおよびTの選択)
公開鍵を短い署名にリンクするプロセスでは、攻撃者が同じ署名が得られる他の公開鍵を見つける、スプーフィング攻撃に注意しなければならない。
【0041】
一般的な防御方法は、公開鍵を生成することの難しさに依存することである。署名が公開鍵とある種の固定されたテキストのハッシュであり、署名がLビット長の場合、攻撃者は、一致するものを見つけるのに2^L個の公開鍵を生成しなければならない。当業者であれば、公開鍵を生成する作業は、非常に費用のかかる演算である、2つの長い素数を見つける作業を伴うことを理解するであろう。しかし、標準の鍵生成ソフトウェアを使用して一致する鍵を見つけようとするのは無能な攻撃者だけであろう。その代わりに、攻撃者は、以下のようなプロセスを使用することもありえる。
第1の素数を取得する。
素数をリストに追加する。
以下を繰り返す:
新しい素数Pを取得する。
リストに含まれる各素数Qについて以下を繰り返す:
N=P*Q(単純乗算)を計算する
Nに関連付けられている公開鍵Kを計算する
ハッシュ(K,パーソナライゼーション情報)を計算する
If(ハッシュがターゲットに一致する)
//われわれの勝ち
RETURN(P,Q)
END if
END For
If リストのサイズ<最大サイズ
Pをリストに追加する
End list
End repeat
【0042】
このプロセスでは、サイズMの最大リストの場合、素数計算は平均してM回ループする毎に1回発生するだけである。大きなMを選択することにより、攻撃者はコアループの実行時間に対する素数生成の影響を効果的に最小限に抑えるが、最後にはハッシュ関数のコストに支配されることになる。公開鍵生成の複雑度に依存することは、効率的な防御手段とはいえない。
【0043】
Z個の先行0を含むハッシュを見つけるために、ジェネレータは、約2^(Z)回の演算を実行しなければならず、したがって、対応するハッシュを見つけるために、攻撃者は約2^(Z+L)回の演算を実行しなければならなくなる。ZおよびLの十分に大きな値を選択することにより、コールサインに対するスプーフィングが困難であることを保証し、しかも素数の生成に関して仮定を設けなくてよい。
【0044】
他のよく知られている防御は、「Nのべき乗ハッシュ」と呼べるものを取得するために、ハッシュ関数のコストを、例えば、標準ハッシュを数回実行することを要求して高める方法である。暗号化の考慮事項とは無関係に、ハッシュ関数のコスト増大が対称的であることが欠点であり、コールサインの生成およびその検証の両方に適用される。これは望ましい特性ではない。スプーフィング攻撃を阻止するために生成に多量の計算を必要とする可能性のある、非対称なセットアップが望まれることもあるが、リーダーに過度の負荷をかけないために検証は非常に高速である。
【0045】
コールサインプロセスでは、ジェネレータが、十分な数の先行0を見つけるため何回も試行を実行する必要がある。これは、長い生成時間を必要とする場合があるが、検証時間には影響を及ぼさず、単純ハッシュ比較よりもわずかに遅いだけである。
【0046】
(将来にわたって使い続けられるようにすることとムーアの法則とを考慮したLおよびTの選択)
時が経つうちに計算能力が進化することも、通常は、ハッシングアルゴリズムの暗号強度の評価の際に考慮される。ムーアの法則によれば、与えられたコストに関して利用可能な計算能力は、ほぼ1年半毎に倍になり、3年毎に4倍になる。つまり、他はすべて同じであるとすると、攻撃者が利用できる計算能力の大きさは、1年半毎に倍になるということである。別の言い方をすると、現在100万年かかる攻撃も、今から30年後には1年以内で済むようになるということである。現在破ることが不可能なように見えるコードも、十分に難しくするか、「将来にわたって使い続けられるようにする」のでない限り、将来的にはいとも簡単に攻撃される可能性がある。
【0047】
将来の攻撃からコールサインを保護するために、最初の0の個数を、ムーアの法則に従うように選択する。これを行うことにより、ムーアの法則はコールサインのセキュリティに役立つ。長いコールサインが生成されるようにコードのオーバーディメンショニング(over−dimensioning)を行う代わりに、ムーアの法則に従って最初の0の個数を選択する。現在使用されているコードが含む0の個数は比較的少ないかもしれないが、数年以内に使用されるコードが含む先行0の個数は増えていることだろう。
【0048】
新しいマシン上で新しいコードが生成される場合、今から3年後に生成プロセスに同じだけの時間を費やして、0が2つ付加されたハッシュを見つける。当業者であれば、生成のコストは2^(Z)に比例し、攻撃のコストは2^(Z+L)に比例することを理解するであろう。生成に固定された時間を費やすようにすると、攻撃者側は攻撃をかけるのにその時間の2^L倍の時間を費やす必要がある。つまり、攻撃は、30年後も現在と同じくらい難しいということである。例えば、生成期間Tが1分に設定され、長さLが40ビットに設定された場合、スプーフィングされた値の生成は、現行マシンでは、ほぼ200万年分の計算を必要とし、今後30年間同様に生成されるコールサインも、スプーフィングには類似のマシン上で200万年分の計算を必要とする。
【0049】
しかし、この議論が適用されるのは、コールサインが短い期間にしか使用されない場合のみである。2003年に1分かけて生成された40ビットのコールサインを破るには、2003年に利用可能な複数のコンピュータを使って200万年分の計算をするか、つまり1年間、そのような200万台のコンピュータを並列使用する必要がある。2033年に1分かけて生成された40ビットのコールサインを破る場合も、その年に利用できる複数のコンピュータを使用して200万年分の計算をする必要がある。しかし、2033年の複数のコンピュータは、2003年のコールサインをわずか2年以内に破ることができる。
【0050】
そのため、コールサインには、何らかの形の陳腐化が生じる。ある特定の年に生成されたコールサインは、おそらく、かなりの年数の間、使用されないであろう。コールサインの全体的回復力は、生成に費やされた時間とビットの個数Lとに依存する。生成プロセスを長くとることで回復力を高められ、生成時間Tを倍にする毎に、ムーアの法則の繰り返しから保護される。さらに他の実施形態では、本当に強いサインは、生成プロセスを長時間にわたって実行することにより形成することができる。
【0051】
さらに他の実施形態では、有効期限をコールサインに関連付けることにより妥当な保護が実現される。これは、相手の実際の公開鍵を見つけるために、コールサインがブートストラップメカニズムとして使用される場合に特に魅力的である。公開鍵が見つけられた後、コールサインの中に表されている圧縮情報ではなく、完全な情報を使用できる。完全な情報は、陳腐化に対する脆弱性がかなり低い。
【0052】
(自然な衝突の可能性を考慮したLおよびTの選択)
攻撃がない場合でも、短いコードには問題があって、それは2人のユーザが同じコールサインになる鍵、パーソナライゼーション情報文字列、およびsalt値の組合せをたまたま選択した場合に生じる「自然な」衝突の可能性である。
【0053】
コールサインで使用されるビット長Lは、コールサインを短くしておくために制限されるが、コンピュータユーザの母集団(「P」)は非常に大きなものとなりうる。例えば、当業者に知られている方法を使用して衝突の確率が50%未満となるようにP=10^10の母集団内のコンピュータユーザ毎に少なくとも1つのコールサインを割り当てると、長さLは67ビットを越えることになる。衝突の確率が1%未満でなければならないとすれば、Lは73ビットよりも大きくなければならない。
【0054】
このように大きなビット列は、15英数字コールサインで符号化されるであろう。このような長さは、コールサインの実用的な長さを超えている。つまり、衝突の可能性を完全に排除することは、パーソナライゼーション情報文字列に電子メールアドレスなどの一意的なトークンが埋め込まれており、この一意的なトークンがコールサインと一緒に安全に転送された場合にしか実用的でない。
【0055】
コールサイン長は制約されており、衝突が発生するので、衝突を検出する方法が採用される。衝突は、コールサインの解決を使って解決される。衝突がある場合、リーダーはコールサインに関連する公開鍵、パーソナライゼーション情報文字列、およびsalt値の複数のバージョンを取得し、そのすべてが第1レベルの検証プロセスをパスする。リーダーは、パーソナライゼーション情報文字列に基づいて「正しい」または「予想される」バージョンを選択する。衝突解決プロセスは、以下のステップまたはその同等の手順を実行することにより繰り返すことができる。
1)コールサインの探索を開始する。
2)コールサインに関連する公開鍵、パーソナライゼーション情報文字列、およびsalt値を取り出す。
3)そのような利用可能なエントリがない場合、探索は失敗として終了する。
4)一方向関数を使用して検証を実行する。失敗した場合には、ステップ2を繰り返す。
5)パーソナライゼーション情報文字列が予想される値と一致した場合、探索は成功し終了する。
6)パーソナライゼーション情報文字列が一致しない場合、ステップ2を繰り返す。
【0056】
解決プロセスが効率的な場合、鍵は、衝突解決メカニズムと親和性のある衝突の頻度を維持できる十分な長さであればよい。例えば、パーソナライゼーション情報文字列の長いリストを延々と調べるのは不効率である。当業者であれば、衝突がかなりまれなことであり、2^LがPよりも十分に大きい、つまりL>log2 Pならば、2、3の一致するエントリを伴うだけであることを理解するであろう。
【0057】
(LおよびTを選択する際の定量化)
コールサインの第1の実施形態は、一組の英数字文字からなる。それぞれの文字は、5ビットの情報を符号化したものである。長さを考慮した場合については、コールサインの第1の実施形態は、長さ10文字を超える英数字であってはならない。10個の文字のうちの1つは、0の個数Zを符号化したものである。残り9文字は、Lビットを符号化したもので、1文字につき5ビットを使用した場合には、Lを45ビットとする。L=35、40、または45ビットのコールサインの他の実施形態も可能である。第1の実施形態について、45ビットのうちのLに到達した際に、上記の基準は、当業者に知られている方法を使用して定量化されている。Lの値には、値のうちどれにアクセス可能かを知るための定量化可能な測定基準を割り当てることができ、同様に、0の探索に費やされなければならない時間Tも定量化されている。
【0058】
前のセクションでは、スプーフィング攻撃、カタログ攻撃、自然な衝突、および年月のたつうちに高まる計算能力について述べたが、以下の基準で要約される。合計Z+Lは、スプーフィングを防止できるように十分大きくなければならない。0の個数Zは、計算時間Tに対応する。積T*2^Lは、数回のムーアの法則の繰り返しを考慮した場合であっても、スプーフィングを防止できるように十分大きくなければならない。パーソナライゼーション情報文字列は、カタログ攻撃を阻止できるように十分一意的なものでなければならない。長さLは、ポータブルな母集団サイズを与えた場合に、名前衝突の発生がまれであるように十分に長くとらなければならない。
【0059】
(スプーフィング攻撃を考慮したLおよびTの選択における定量化)
図5は、スプーフィング攻撃を無効化することに基づく長さLおよび時間Tの選択を示す表である。この表は、サインを破るのに何年分の計算が必要になるかを、ビット数(35、40、または45)および費やされる計算時間T(15、60、240、960、または3840秒)の関数として示している。この表では、二重下線および太字の値は、100,000年未満である。鍵を破るのに必要な計算は、コンピュータネットワークに容易に分散させることができる。当業者であれば、以前には100,000台のコンピュータで構成されるネットワークを使用すれば暗号チャレンジを破ることができたことを理解するだろう。コールサインをそのようなネットワークへの少なくとも1年のクラッキングに抵抗するようにするために、35ビットのLは、0の探索が少なくとも4分間持続しない限り最良の選択とはいえない。
【0060】
10,000,000年よりも大きな値は、一重下線付きの斜体であり、これらの値は、100,000台の現在のコンピュータのネットワーク上で100年分の計算を必要とする。表からわかるように、45ビットのLであれば一般的には安全である。16分以上の0に対する探索時間(T)と組み合わせて45ビットのLを使用すると、10年間有効であり続ける可能性のあるコールサインが得られる。
【0061】
(カタログ攻撃を考慮したLおよびTの選択における定量化)
図6は、Lビットから形成される様々なコールサインおよびT秒間に計算される区別されるsalts値に対するコールサインの脆弱性を示す表である。コールサインのような短いコードは、スプーフィング攻撃の一変種である、「カタログ」攻撃を受ける可能性がある。この攻撃では、一人の攻撃者または複数の攻撃者のグループは、多数のコールサイン「ソリューション」を生成し、それらをデータベース、つまりカタログに格納する。それぞれのソリューションは、攻撃者に知られている公開鍵およびコールサインの特定の値をリンクする。当業者であれば、この表は、さらに、100,000台のコンピュータのネットワークにより1年で構築可能なカタログのサイズを示すことを理解するであろう。「脆弱性」の欄は、カタログが少なくとも1つの有効なコールサインを含むためにネットワーク内に存在していなければならないカタログ化された名前の出現回数を示す。
【0062】
当業者であれば、カタログ攻撃は、ポピュラーなパーソナライゼーション情報文字列に対してのみ適用可能であることを理解するであろう。パーソナライゼーション情報文字列がユーザの名前と名字のみを含んでいた場合、カタログ攻撃はほとんど効力を持たないであろう。
【0063】
他の実施形態では、パーソナライゼーション情報文字列に追加トークンを含めることにより、一般名の出現頻度を減らし、コールサインのセキュリティを強化することが可能である。例えば、市および国の名前をパーソナライゼーション情報文字列に追加することができる。すると、カタログ攻撃は、パーソナライゼーション情報の中に同じ追加トークンを持つユーザしかターゲットにできない。例えば、同じ名前と名字を持ち、同一市内に居住するユーザである。当業者であれば、これらのユーザは比較的小さな母集団を形成することを理解するであろう。当業者であれば、市内にそのようなユーザが数百人以上いることは滅多にないことを理解するであろう。この表から、45ビットのビット長Lと4分(240秒)の持続時間Tとの組合せで、本出願において十分なセキュリティが確保されることがわかる。
【0064】
さらに他の実施形態では、パーソナライゼーション情報文字列は、電子メールアドレスなどの一意的なトークンを含み、このトークンがコールサインの一部として安全に受け渡された場合、カタログ攻撃は無効化される。このようなカタログ攻撃を成功させるのは、スプーフィング攻撃と同じくらい難しい。
【0065】
(不愉快な識別子の回避)
コールサインを生成するのは運任せなので、「IAM−SO−DUMB」などの非常に望ましくないコールサインが生じる可能性がある。ランダムに選択されるため、禁句の4文字語など、明らかに不快感を与える単語を含むコールサインが生じることすらある。
【0066】
これらの出現を排除する最も確実な方法は、提案されたコールサインをユーザに提示し、ユーザに、提案された値を受け入れてもらうか、または他の値を要求してもらうことである。計算を16個の順次ステップとして設計すると、他のコールサインを素早く再生成しやすい。コールサインが拒絶された場合、他の実施形態では、完全に新規の計算に要する時間のわずか1/16の時間を使用し、手順の本当に最後のステップを繰り返すことで十分である。コールサインが最終のハッシュステップにより導かれる設計が維持されている場合、さらに他の実施形態では、その段階で最終のsalt値を導入し、乱数を単純に選んで新しいコールサインを導くようにすることが可能である。
【0067】
さらに他の実施形態では、生成プロセスに「望ましくないキーワード」のリストを含めるステップを追加することにより望ましくないコールサインに対する保護を埋め込む。キーワードを含めるこのような保護は、コード自体をいくぶん不快なものとする。しかし、他の実施形態では、2進数値の英数字符号化が問題となる。そこで、実際のキーワードではなく、符号化された2進数値をプログラムに含めることができる。これらは、存在するが、読み取り不可能な形式である。
【0068】
(II.要求された0の個数が証明書により設定されるコールサインの第2の実施形態およびそれらを生成する方法)
第1の実施形態では、いくつか改善余地がある。コールサインの中の0の個数を符号化する必要がない場合があり、したがって、より短いコールサイン、または等しく長いが有効ビットの大きい方の数Lを含むコールサインを考慮する。また、英数字符号化とともに望ましくない結果が生じることがある。そのため、不注意で、不快な言葉を含む「読み取り可能な」文字列が生じる可能性がある。コールサイン生成プロセスにより、そのような単語が回避されるようにしなければならない。
【0069】
(第2の実施形態における0の個数の符号化)
第1の実施形態の0の個数の符号化は妥協である。0の個数は、常に、24よりも大きく、98よりも小さく、また0の個数ではなくペアの個数を符号化することで十分な精度が得られると想定する。
【0070】
より基本的なこととして、コールサイン内の0の個数の符号化では、コールサインの所有者は、必要な0の個数を決定しなければならないという点が挙げられる。第1の実施形態では、区別されたsaltを探すのに費やされる時間は固定されており、またその時間内に見つけられる0の個数は、「ムーアの法則に従い」、その年のコンピュータの平均能力を表すと仮定している。しかし、制限時間が固定されているため、コールサインを生成するために使用されるコンピュータの能力とそのコールサインの強度との間に依存関係が生じる。第2の実施形態では、0の必要な個数は、コールサインの受信者により決定されると仮定する。
【0071】
この実施形態では、検証コード内にチェックを符号化する。コールサインの受信者は、公開鍵K、識別子X、および区別されたsaltSを取得し、その後、ハッシュ内の0の個数Zが、年Yおよび有効ビットの個数Lの関数である、最小値よりも大きいことを検証する。
Z>Z0−L+(Y−2003)/X
【0072】
この公式では、数Z0は、2003年に十分強度があると考えられた鍵の長さを表すように設定されている。係数Xは、平均的なコンピュータの能力が倍になるのに要する年数を示す。実用的な実装に関して、ムーアの法則に従ってXの値を1.5に設定し、Z0の値を62に設定すると、以下の公式が得られる。
Z>62−L+(Y−2003)/1.5
【0073】
この公式では、数62は、100,000年分の計算が十分な障害となると仮定して計算された値である。実際、「バー」は、コールサインが使用される背景状況にかなり依存することがある。財務用途では、さらに大きな値、例えば、66(1,000,000年)を必要とする場合がある。軍事用途だと、なおいっそう条件が厳しい。
【0074】
図7に、第2の実施形態によるコールサインの構成を示す。コールサインは0の個数を符号化しないため、第1の実施形態と同じハッシュ関数を使用することはできない。コールサインを構成するL個のビットは、区別されたハッシュ内の固定位置に置かれるが、0は他の固定位置の後に数えられる。
【0075】
(III.コールサインのパッセージのASCIIへの英数字符号化)
図8および図9に、コールサインの英数字符号化を示す。コールサインを作成する際に、互いに区別しやすく、転記の誤りを生じがちでないコールサインの英字および/または数字を選ぶことが望ましい。ピア識別子には、英数字表現が割り当てられる。これらの実施形態で選択された符号化例では、結果として得られるコールサインの中で、数0および1または英字OおよびIを使用しない。当業者であれば、これらの英字は、互いに混同しやすい傾向があるため使用されないが、他の実施形態ではそれらの文字を使用できることを理解するであろう。当業者であれば、さらに、他の実施形態では、他の文字を排除するか、または追加することができることも理解するであろう。当業者であれば、発明の他の実施形態は、実際には、ローマ字とアラビア数字に限定されないことを理解するであろう。当業者であれば、さらに、すべての数字またはすべての文字は、所望の数の記号が生成できる限り使用できることを理解するであろう。実施例では、不要な文字を削除することで、8個の数字と24個の英字を残し、図に示されているように32個の記号が得られる。
【0076】
上述のように、コールサインを生成する際に、このプロセスでは、コールサイン内で使用するために選ばれたそれぞれの文字について0から31までの数値を割り当てて、32個の利用可能な記号を出力する。コンピュータによりコールサインが読み取られると、コールサインの各文字は、コンピュータメモリ内で数値を割り当てられる。コールサインがコンピュータから出力されるときに、コンピュータ内でコールサインを構成するそれぞれの数に対し、ユーザに出力されるコールサインを構成する数字または英字を割り当てる。コールサインを構成する文字の組合せは、コールサイン生成手順により選択される。その後、コールサイン検証手順によりその有効性がチェックされる。
【0077】
(IV.ピア名解決プロトコル(PNRP)内で適用されるコールサイン)
図10は、ピアツーピアコールサインの一実施形態を利用するピアツーピアネットワークのブロック図である。ピアツーピアネットワーク技術では、1つまたは複数の分散ネットワーク上でリアルタイム通信を実現する。ピアツーピアネットワーキングは、サーバレス技術である。ピアツーピアネットワークでは、個々のPCは、インターネットサービスを使用せずに、データの交換、資源の共有、他のユーザの特定、通信、および協働をリアルタイムで行うことができる。PCは、通常、PCがピアツーピアネットワークに結合されている場合にピアツーピア通信を可能にするアプリケーションソフトウェアを備える。この種のネットワークでは、ピアコンピュータはそれぞれ、独自のセキュリティの維持を受け持つ。そのため、認定ユーザの検証および衝突しているアドレスの解決は、サーバベースのネットワークといくぶん異なる方法で実行されるタスクである。
【0078】
ピアグループに接続し、その後、ピアグループに参加することは、ユーザを識別する際にセキュリティ対策を利用するピアネットワークでの一般的なタスクである。グループに参加するには、ピアコンピュータは、ピアグループの所有者から招待を受ける。グループ所有者から招待を受け取るには、仮グループメンバがまず、ピア名および公開鍵である識別資料をグループ所有者に受け渡さなければならない。この情報は、電子メール、ファイル共有、XMLなどを使用して受け渡される。グループ所有者は、次に、招待を仮グループメンバに発行する。
【0079】
仮グループメンバは、その情報を受け取ると、招待情報を使用して、グループに接続する。グループに接続するために、仮グループメンバは、PNRPとグループIDを使用して、グループメンバのアドレスを解決し、そのグループメンバを通じてピアネットワークに接続する。
【0080】
仮グループメンバと現在のグループメンバとの間の相互認証は、通常は、信頼できるWebを通じて実行される。相互認証の後、仮グループメンバが、単一の隣接者を持つ新しいグループメンバとなる。隣接者は、接続を受け入れ、認証が実行されたピアネットワークからのコンピュータである。
【0081】
特に、ピアツーピアコンピュータネットワークへの接続に関して、ピアツーピアネットワークは、ネットワーキング用の一組のネットワーキングアプリケーションプログラムインターフェース(「API」)を提供する、インフラストラクチャネットワーキングソフトウェアを含む。これらのピアツーピアアプリケーションは、協働通信、コンテンツ配信などに関係する場合がある。ピアツーピアインフラストラクチャAPIソフトウェアは、ピア名解決プロトコル、マルチポイント通信、分散データ管理、セキュリティ保護されたピアID、およびセキュリティ保護されたピアツーピアグループなどのコンポーネントを含むことができる。
【0082】
ピアツーピア名前解決プロトコル(PNRP)を使用すると、ピアツーピアネットワーク内のピアは、通常であればサーバベースのネットワーク内では必要になるようなサーバを必要とせずに、「ピア名」を解決することができる。PNRPでは、ピアコンピュータは、ネットワーク内の他のコンピュータ、つまりピアを識別することができる。ピア名解決プロトコルは、複数のエンドポイント、または衝突の生じうるネットワーク内の複数のノードへの名前のピアツーピア解決を可能にするアプリケーションプログラムインターフェース(API)を備える。
【0083】
ピア名解決プロトコル(PNRP)APIは、コンピュータノードがピアツーピアネットワーク内で互いに見つけ合うことができるようにすることにより参加ピアのグループが互いにやり取りできるようにする名前−IP解決プロトコルである。通常であればピアツーピアネットワーク内で提供されるタスクとしては、ピア名の登録および登録解除、ピア名の解決、およびピアのグループの列挙がある。当業者であれば理解するように、ピア名の解決は、互いに衝突しないピア名を見つけることを含む。互いに衝突しない名前を見つけることに加えて、見つかった名前は十分なセキュリティが対策され、ユーザがそのピア名を覚えられることが望ましい。
【0084】
ピア名は、コンピュータ、ユーザ、グループ、またはサービスを識別できる安定した名前である。ピア名は、通常、ピアがセキュリティ保護されているかどうかを示す権限および単に文字列である分類子を含む。当業者であれば理解するように、セキュリティ保護されたピア名では、通常、セキュリティ保護されたハッシュアルゴリズム(SHA−1)またはMD5アルゴリズムを使用して、128ビットPNRP識別子を導き、公開鍵Kを分類子Cにハッシングし、ピア名のセキュリティ保護された伝送を実現することができる。第3の実施形態では、Cは識別子X、salt S、およびハッシングアルゴリズムの識別を含む。
【0085】
暗号鍵は、ネットワーク通信内のセキュリティ対策のための当業者に知られている仕組みである。暗号鍵は、一般的に、アクセスの許可およびソースの識別の検証のためピアツーピア環境で使用される。暗号鍵を使用すると、鍵を所有している人は、その鍵が関連付けられているデータにアクセスしたり、または鍵所有者の電子署名を作成したりすることができる。公開鍵アルゴリズムは、通常、K/Pと表される、公開鍵と秘密鍵からなるペアを備える。秘密鍵は、メッセージの受信者への識別子として使用できるため、秘密に保ち、セキュリティ保護されなければならない。公開鍵は、自由に配布でき、他人がメッセージを自由に復号化できる。鍵ペアの公開鍵は、デジタル証明書とともに配布されることが多い。鍵ペアの一方の鍵がメッセージの暗号化に使用される場合、そのペアの他方の鍵は、メッセージの復号化に使用される。
【0086】
これらの鍵は、長くなる傾向があり、通常は、少なくとも256個の16進数である。そのため、それらを受け渡し、特に公開鍵を受け渡すのは、面倒な場合がある。インスタントメッセージングまたは電子メールは、使用できるが、改ざんを受けやすく、鍵の検証を望ましいものとする。また、鍵の検証のプロセスに、鍵を受け取る人が、送信者が鍵を送信する相手として意図している人であるかどうかの検証を含むことも望ましい。
【0087】
(IV.ピアツーピア名前解決プロトコルに適用されるようなコールサインの第3の実施形態)
ピアツーピア名前解決プロトコル(「PNRP」)では、ピアはサービスを伴わずに「ピア名」を解決することができる。PNRPピア名は、第1に、公開鍵のSHA−1ハッシュである「authority」とUnicodeテキスト文字列である「qualifier」の2つのフィールドで構成される。PNRPは、以下のような暗号ハッシング関数を使用して、これら2つのフィールドから128ビットPNRP−IDを導く。
PNRP−ID=hash(authority,hash(qualifier))
【0088】
この第3の実施形態は、PNRPを「コールサイン」で強化する。PNRPのコールサインを生成するために、ユーザは、「区別された修飾子」を生成する。権限、区別されたsalt値、および区別された修飾子の組合せの結果として、多数の0から始まるPNRP−IDが得られる。コールサインは、このPNRP−IDから導かれる。新しいPNRP APIを使用することにより、ユーザは、コールサインに一致するPNRPエントリを列挙し、その後、関連付けられている権限および修飾子を取得することができる。
【0089】
(区別されたPNRP修飾子)
区別された修飾子は、区切り記号「//」および「/」により区切った、パーソナライゼーション情報文字列、二次ハッシュ関数の識別子、および区別されたsalt値から形成される。当業者であれば、パーソナライゼーション情報文字列の内容は、コールサインが使用されるアプリケーションによって異なることがあることを理解するであろう。例えば、PNRPコールサインの実施例では一意的なパーソナライゼーション情報文字列を使用するが、他のアプリケーションでは、異なるパーソナライゼーション文字列を必要とする場合がある。
【0090】
当業者であれば、これらの文字列は、区切り記号または当業者に知られているその他の同等の方法により区切られることを理解するであろう。当業者であれば、さらに、文字列の順序および使用される区切り記号は異なっていてもよいことも理解するであろう。
【0091】
使用されるハッシュ関数は、さらに、区別された修飾子に含まれ、区切り記号により区切られる。当業者が理解するように、ハッシュ関数は当業者に知られている、十分なセキュリティ対策が施される型のものであればよい。例えば、SHA−1ハッシュ関数またはその同等の関数がある。
【0092】
saltは、コールサイン生成プロセス時に選択される。saltは、ピア名の二次ハッシュを実行することにより選択され、これにより、ハッシングされた結果は十分な数の0から始まる。salt自体は、ASCII英数字からなる。正式な構文は以下のとおりである。
区別された修飾子=<パーソナライゼーション>”//”<ハッシュ関数>”/”<salt>
区別された修飾子の例を以下に示す。
【0093】
Qualifier:JonSmith<jsmith@yuhoo.com>//SHA1/A5E5F3Z4YWZTRF0TW9RTQ
saltは、権限および修飾子の二次ハッシュが多数の0から始まるように選択される。
【0094】
(コールサインの第3の実施形態の生成)
コールサイン生成手順の目的は、ピア名および関連するコールサインが検証手順にパスできるようにする区別された修飾子を見つけることである。これは、適切な「区別されたsalt」を見つけることを含むので、ピア名の二次ハッシュは、適切な数の0から始まる。
【0095】
検証のセクションで示されているように、0の適切な個数は時間の経過とともに変わる。式
Z>17+(Y−2003)/1.5
は、それらの目的のために使用される。
【0096】
生成目的に関して、値Yは、現在の年に設定すべきではなく、むしろ、コールサインが有効である期間の最終年に設定すべきである。既定では、これは、現在の年+10に設定される。
【0097】
生成は、以下のように進行する。
1)検証手順において予想されるようにこの権限の正準形式を使用して、PNRPに従って、PNRP名前権限の値を初期化する。
2)ユーザ名に応じてパーソナライゼーション情報Xの値を初期化する。
3)既定SHA−1により、有効な二次ハッシュ関数を選択し、対応する識別子Iに注目する。
4)0の適切な個数Zを選択する。
5)数Nが数Z以上になるまで以下を繰り返す:
a.Salt Sを選ぶ。
b.権限に基づくピア名および仮の区別された修飾子をX、I、およびSに基づいて構成する。
c.関数Iに従ってピア名のハッシュを計算する。
d.このハッシュ内の0の個数(N)を測定する。
6)ピア名に関連付けられたPNRP識別子を計算する。
7)PNRP識別子の最上位45ビットに基づいてコールサインを構成する。
8)コールサインが不快な単語を含まないか検証し、もし含んでいれば、ステップ5を繰り返す。
【0098】
ステップ5は、最新のコンピュータ上で約15秒続くことが予想される。
【0099】
生成関数の最後のステップは、コールサイン内の文字のランダムな集まりから何らかの不快な言葉が生じないかチェックすることを目的としている。これは、提案されたコールサインを使用することを受け入れるかどうかをユーザに問い合わせることにより実装できる。
【0100】
(第3の実施形態で生成されるコールサインの検証)
コールサイン検証手順では、ピア識別子とコールサインとを比較し、二次ハッシュが十分な数Zの先行0を含むことを検証する。先行0の個数を検証することにより、コールサインに対する第三者によるスプーフィングが難しくなる。第1近似では、コールサインの暗号強度は、長さがZ+45の対称鍵の強度に等しい。Zの値は、時間の経過とともに変化する場合がある。ムーアの法則から、コンピュータはますます強力になることが予測されるので、Zに対する長さ要件は増大する傾向にある。予見可能な将来にわたってムーアの法則が成立すると仮定した場合、先行0の個数Zに対する値は、現在の年Yの関数であると考えることができる。
Z>17+(Y−2003)/1.5
【0101】
当業者であれば、上の不等式の中で使用される値17は、選択されたセキュリティと計算とのトレードオフの関係に対応し、また条件がきつい環境ほど、選択される値は大きくなる可能性があることを理解するであろう。
【0102】
コールサインを検証するために使用される二次ハッシュ関数は、時間の経過とともに変化しうる。現在の実装では、当業者に知られているハッシュ関数SHA1が使用される。他の実施形態では、受け入れ可能なハッシュ関数のリストは、使用できるようにコンピュータメモリに保持することができる。特に、セキュリティが向上するようにハッシュ関数の開発が続けられることも予想される。本発明の実施形態は、新しいハッシュ関数が現れたときの将来の使用を規定することにより新しいハッシュ関数の開発に対応できる。
【0103】
検証は、以下のように進行する。
1)ピア名に関連付けられたPNRP識別子を計算する。
2)PNRP識別子の最上位45ビットとコールサイン内に符号化されている45ビットとを比較する。
3)45ビットが一致しない場合、検証は失敗である。
4)区別されたsaltから二次ハッシュ関数の識別子を抽出する。
5)ハッシュ関数識別子がない、または証明書が受け付けない、または有効な値として認識されない場合、検証は失敗である。
6)ピア名全体の正準化されたバージョンのハッシュを指定された二次ハッシュ関数とともに計算する。
7)その結果得られたハッシュ内の先行0の個数を測定する。0の個数がターゲット値Zよりも小さい場合、検証は失敗である。
8)識別文字列がコールサインにより指定された人またはエンティティの理にかなった説明となっていることを検証し、そうでなければ、検証は失敗である。
9)ステップ1から8がパスした場合、検証は成功である。
【0104】
ピア名の「正準化されたバージョン」を得るには、通常16進数からなるピア名の権限部分が必ず数字と大文字A、B、C、D、E、およびFのみで符号化されているようにする。ステップ8は、通常、人間による対話操作を伴うことに注意されたい。
【0105】
(コールサインからのPNRPレコードの取り出し)
場合によっては、コールサインに関連付けられたPNRPレコード、したがって関連付けられたピア名を取り出すのが有益である。そうするには、PNRP識別子がコールサインと同じ45ビットから始まるすべてのPNRPレコードを取り出し、対応するピア名を取り出し、検証手順のステップ1から7をパスできないピア名を取り除き、検証手順のステップ8を使用して、予想されるIDと一致する名前のみを残す。
【0106】
独占的権利または特権を主張する本発明の実施形態は、特許請求の範囲で定められる。
【図面の簡単な説明】
【0107】
【図1】ピアツーピアコンピュータネットワークにアクセスするために使用される標準的なセキュリティ保護されたユーザ識別を示す図である。
【図2】コールサインを発生する方法の第1の実施形態により生成される短縮されたコールサイン識別子の表現を示す図である。
【図3】コールサインの構成を示す図である。
【図4】コールサインを決定するプロセスを示す流れ図である。
【図5】Lビットから形成される様々なコールサインおよびT秒間に計算される区別されるsalts値に対するコールサインの脆弱性を示す表である。
【図6】衝突頻度と45ビットのビット長Lに対する集団の大きさとの対比を示す表である。
【図7】第2の実施形態によるコールサインの構成を示す図である。
【図8】コールサインの英数字符号化を示す図である。
【図9】コールサインの英数字符号化を示す図である。
【図10】コールサインの第3の実施形態に使用されるようなコールサインを生成するプロセスを示す流れ図である。
【符号の説明】
【0108】
202 コールサイン識別子
【技術分野】
【0001】
本発明は、ユーザをコンピュータネットワークに識別させるための比較的短い「コールサイン」に関する。
【背景技術】
【0002】
鍵と暗号識別(「IDs」)は、コンピュータシステムなど、ユーザの検証を必要とする多くのアプリケーションにおいて重要な役割を果たす。ピアツーピアコンピュータシステムの実施例では、ユーザ識別(「ID」)は、IDが電子メールなどで電子的に提示される場合にユーザがネットワークにアクセスする権利を有することを検証する、システム管理者への証明書(verifier)として使用することが可能である。それとは別に、IDは、音声または筆記により伝達することもできる。
【発明の開示】
【発明が解決しようとする課題】
【0003】
以前には、IDは、名刺を使用して、または口頭で、手作業により提示されていた。IDは、通常、簡単に覚えられない2進数の長い数列である。IDは、暗号化プロセスを使用してセキュリティ保護されるようにできる。しかし、保護されているIDは、通常、さらに長く、また簡単に回覧することも難しい。そのため、さらに、ユーザは暗号化でIDを保護する場合に使い勝手をあきらめる。
【0004】
以下では、読者が基本的な理解を得られるように、開示について簡単に説明する。この「発明の開示」は、開示の広い範囲にわたる概要ではなく、また本発明の鍵となる/重要な意味を持つ要素を識別しない、または本発明の範囲を線引きすることもない。後で述べる詳細な説明の前置きとして、本明細書で開示されているいくつかの概念を簡略化した形式で述べることのみを目的とする。
【課題を解決するための手段】
【0005】
本発明は、ユーザをコンピュータネットワークに識別させるための比較的短い「コールサイン」を実現する。このネットワークは、ネットワーク内の個々のコンピュータが他のネットワークの場合と比べてセキュリティを厳しくする必要のあるピアツーピアネットワークであってよい。コールサインは、ネットワークへの参加を求めるコールサインを提示する人に関する情報を組み込む。コールサインは、短く、覚えやすいが、従来のIDは、通常長く、覚えにくい。コールサインは、さらに、事前に計算される「salt」値も組み込み、これにより、それ自身と個人情報のハッシュで、英字および数字を含むコールサインに容易に変換できる固定長の結果を出力する。個人情報以外の情報は、アプリケーションに応じてハッシングに取り込むことができる。
【0006】
当業者であれば、暗号文によりセキュリティ保護されている短い簡単に覚えられるIDを持つことが望ましいことを理解するであろう。この種のコールサインは、必ず、覚えられるくらい十分に短いが、それでも、十分なセキュリティを提供し、ピアツーピアまたは他のネットワークの利便性を高めることができる。
【0007】
本発明の付随する特徴の多くは、添付の図面に関して考察される以下の詳細な説明を参照することにより容易に理解できるため明白であろう。
【0008】
以下の説明は、本開示の一部をなす、以下で手短に説明されている、図面の様々な部位を参照することで最もよく理解できるであろう。
【発明を実施するための最良の形態】
【0009】
付属の図面に関して以下で述べる詳細な説明は、本発明のこの実施形態の説明として意図しており、本発明が構成または利用されうる唯一の形態を表すことを意図していない。この説明では、本発明の機能、および例示されている実施形態に関して本発明を構成し、動作させるステップの順序を規定する。ただし、同じ、または同等の機能および順序は、本発明の精神および範囲内に包含されることも意図している異なる実施形態により達成することが可能である。
【0010】
本発明は、本明細書では、ピアツーピアコンピュータネットワークシステム内に実装されるものとして説明され、例示されているが、説明されているシステムは一実施例として提示されているのであり、限定するものとして提示されているのではない。当業者であれば、本発明は、様々な異なる種類のコンピュータシステムによるアプリケーションに好適であることを理解するであろう。
【0011】
図1は、ピアツーピアネットワークまたは同等のネットワーク例にアクセスするために使用される標準的なセキュリティ保護されたユーザ識別を示す図である。ピアツーピアコンピュータネットワークは、サーバコンピュータなしで機能しうるコンピュータのネットワークであり、そのセキュリティに対する責任は、ネットワーク内のそれぞれのピアコンピュータが負う。周知のように、ユーザのアクセス権を識別し、検証するために使用される識別子101は、通常、極めて長い。このような2進数は、通常、160ビット長(102)であり、これは、40桁の16進数に等しい。識別子101の他の実施例としては、40個の16進数により表される数と任意長の文字列の2つの構成要素を含むPNRP名がある。このような識別は、マシン以外では、容易に伝達することはできない。
【0012】
多くのコンピュータネットワークは、「ピアツーピア」名前解決のプロセスで通常使用されるピア名の生成を必要とする場合がある。現在実装されているように、ピアツーピア名前解決プロトコル(PNRP)は、通常、ユーザに扱いやすい(十分なセキュリティ機能を持たない傾向がある)短いピア名を使用するか、またはユーザに扱いにくい(通常は、より高いレベルのセキュリティ機能を持つ)長い2進数列を含む長いピア名を使用することに制約される。当業者であれば、任意の種類のコンピュータネットワーク、またはセキュリティ保護され、短縮された識別ツールが望まれているシステムに、短縮された識別子を適用可能であることを理解するであろう。
【0013】
長いピア名は、通常、暗号化プロセスを適用することにより、セキュリティ保護することが可能である。しかし、そのような長い名前は、通常、ユーザに扱いやすいものではない。長い名前は、通常、覚えておいてコンピュータネットワークへのアクセス権を得るために入力するのが難しい。つまり、最新技術では、通常、ユーザに対し利便性とセキュリティの択一選択を迫るのである。ピアツーピアネットワーク内で、安全な方法により、短く覚えやすい識別子を使用してコンピュータを識別する手段を実現することが望ましい。
【0014】
(I.0の個数が明示されているコールサインの第1の実施形態およびそれらを生成する方法)
図2は、コールサインを発生する方法の第1の実施形態により生成される短縮されたコールサイン識別子202の表現を示す図である。特に、この本実施形態では、コールサイン内の「0の個数フィールド」を使用する。本明細書で説明されているピアツーピア識別(「コールサイン」)に対するセキュリティ保護されたコールサインを生成するシステムおよび方法を使用することで、ピアツーピアネットワーク(「P2P」)、および当業者に知られている他の同等のネットワークアプリケーションに使用することができる覚えやすいセキュリティコードまたはコールサイン202を生成する。特に、コールサインを構成する際に使用される特定の情報、および適用される暗号機能により、コールサインを様々なアプリケーションで使用することができる。例えば、コールサインおよびそれらのコールサインを生成する方法の一実施形態をピアツーピア名前解決プロトコル(PNRP)に適用することができる。他のアプリケーションは、限定はしないが、 を含むことができる。
【0015】
ピアツーピア識別に通常使用されるコールサインを生成する方法により、ユーザのIDを安全に伝達するという難題を解決する。セキュリティは、セキュリティ保護されたプロセスを使用して、ユーザに覚えやすい、また入力しやすい短いコールサインを構成することにより実現される。そのようなコールサインに対し、暗号化プロセスにより強力な保護を行うことができる。例えば、「ZA4−3Y−4W−ZF4」などのピアツーピア識別のコールサイン202は、短く、セキュリティ保護されている。このようなコールサインを覚えるのは、社会保障番号を覚えるよりも少し難しいだけである。
【0016】
例示されているコールサイン例202は、10個の英数字を含む。当業者であれば、それよりも多い、または少ない文字を含むコールサインを生成できることを理解するであろう。10個のコールサイン文字はそれぞれ、5個の2進数ビット203を表す。これらのセグメントは、5つのビットセグメントに分割されているさらに長い2進数の一部分である。当業者であれば、5ビットよりも多い、または少ない長さの2進数を表すために同等の実施形態で使用できることを理解するであろう。
【0017】
コールサインの桁の最初の桁は、この実施例を見るとわかるように、文字「Z」である。この実施例では、第1の桁は、コールサインを復号化する際に使用される0の個数を伝達するように定義されている。ここで、文字Zは、5ビット2進数11111である、10進数31を表すように定義されている。当業者であれば、本発明の同等の実施形態において、0の個数を識別する桁の配置、およびコールサイン内の0の個数は、異なっていてもよい。同様に、実施例では、「Z」の代わりに任意のビットパターンまたは文字を選択できる。
【0018】
このコールサインの残りの9個の英数字は、2進数の残り部分を表す。これらの桁は、(「L」)として指定される。この実施例では、Lは、長さが45ビットである。2進数Lは、ユーザ識別を暗号化するために使用される暗号化プロセスの結果から取り出したものである。2桁目から10桁目までの中の残りLビットは、残りの9つの英数字にマッピングされる5ビットセグメントに分割される。当業者であれば、2進数の英数字へのマッピングは、テーブルルックアップ、公式、または当業者に知られているその他の同等な方法により実行できることを理解するであろう。当業者であれば、さらに、10個の文字の順序付けは、同等な実施形態でも異なることがあることも理解するであろう。
【0019】
0の個数および数Lをコールサインから復号化した後、2進数に対し暗号化処理が実行されて、ユーザのIDを再作成する。ユーザの識別が確立されたら、コールサインを保持している人に、ネットワークへのアクセス権およびその他の特権を付与することができる。
【0020】
(区別された修飾子からのコールサインの第1の実施形態の生成)
名前を付けるべきエンティティは、従来通り生成された公開鍵/秘密鍵のペアK/P、およびパーソナライゼーション情報文字列、またはデジタルID、Xを所有していると仮定する。パーソナライゼーション情報文字列は、名前を付けるべきエンティティの自然な属性で構成することができる。例えば、パーソナライゼーション情報文字列は、一般名、会社名、市名、および電子メールアドレスなどの組合せを含むことができる。従来通り構成された公開鍵Kは、バイナリ文字列により表すことができ、パーソナライゼーション情報文字列は、テキスト文字列により表すことができる。
【0021】
図3に、コールサインの構成を示す。コールサイン生成プロセスの第1のステップは、Sが暗号化一方向関数(「H(x)」)308を通じてK310とX309とともにハッシュされた場合(307)に、結果が、多数の0から始まる、「区別された」ハッシュ値(「H」)301となる、「区別された」「salt」値Sを見つけることである。コールサインを生成する後続のステップでは、特定の個数の0が必要である。区別されたsalt値を見つける際に、与えられた時間間隔にわたって多数の値を試すことができ、所望の個数の0を生成する区別されたsalt値が保持される。区別されたsalt値により、ユーザが認証用のコールサインを提示した場合にコールサインが検証手順をパスするようにできる。
【0022】
当業者であれば、先行0の代わりに特定のビットパターンを使用できることを理解するであろう。例えば、他の実施形態では、先行1、または最小個数の「0110」グループなどを利用することもできる。コールサインを生成する際に求めているのは、コールの一部が所定のパターンと一致していることであるが、コールサインを構成し、パターンを持たない傾向のあるビットの残りはコールサインの残りの桁を構成する。それとは別に、所定のパターンは、区別されたハッシュ値を生成するために使用されるハッシュ関数ではなく2次的な関数から得ることも可能である。
【0023】
ハッシングは、ハッシングアルゴリズムと呼ばれる数学的関数を任意の量のデータに適用することにより固定サイズの結果を出力する暗号化プロセスでよく使用されるプロセスである。これらの実施形態で使用されるハッシュ関数は、当業者に知られている型である。標準的なハッシングアルゴリズムとしては、MD2、MD4、MD5、およびSHA−1がある。
【0024】
これらの実施形態で使用されるハッシュ関数は、一方向暗号化ハッシュ関数として特徴付けることができる。当業者であれば理解するように、一方向ハッシュ関数は、通常、複数の一意的な特性を持つが、それは、任意長のメッセージ入力から固定長のハッシュ値または結果を計算するのは容易であり、固定長のハッシュ値が与えられた場合、任意長のメッセージを計算することは難しく、また任意長のメッセージ入力が与えられた場合、同じ固定長のハッシュ値を生成する他のメッセージを見つけることは困難であるからである。
【0025】
区別されたsalt値およびその他の文字列から出力される区別されたハッシュH301は、そのハッシュにより生成される数のMSB側の多数の0(または他の同等の定義済みビットパターン)から始まる。当業者であれば、他の同等の実施形態において、複数の0(またはその他の同等の定義済みビットパターン)をLSB桁またはその他の位置に配置できること、または説明されているハッシュまたは他の関数の順序特性をインジケータとして使用することが可能であることを理解するであろう。区別されたsalt値および最終的な区別されたハッシュは、異なるsalt値で評価される一方向ハッシュ関数の反復を通じて見つけられる。多数の先行0を伴うハッシュを生じるsalt値は、区別されたハッシュとして保持される。一定の時間Tが経過するまで試行を繰り返す。当業者であれば、本発明の複数の実施形態では、攻撃者がTの倍数の時間をかけて同じ個数の0を見つけ、40ビットまたは45ビットと照合しなければならないという想定の下で、ある固定時間「T」の間に0を見つけようとすることを理解するであろう。区別されたsalt値を見つけるための探索プロセスの一実施形態は、以下のように書くことができる。
見つける0の個数を初期化する:Z=0
時間Tの間、以下を実行する:
新しいsalt値Vを選択する
HV=一方向ハッシュ(K,X,V)を計算する
HV内の先行0の個数、Yを計算する
(Y>Z)ならば
S=V,H=HV,Z=Y
指定された時間Tの終わりに、区別されたsalt値Sおよび区別されたHが見つかる。
【0026】
区別されたハッシュHは、暗号に関して強力な一方向関数を通じてK、X、およびSのハッシュとして定義される。
区別されたハッシュ=H=H(K,X,S)
【0027】
2進数である区別されたハッシュHから論理コールサインが作成される。区別されたハッシュ301は、所定の個数のビット(「M」)からなる。Mは、区別されたハッシュの先行0(「Z」)」302、および最後の先行0(または先行0のLSB)の直後にある区別されハッシュ値Hの予め選択された個数のビット(「L」)303を含む。
【0028】
0の個数が決定された後、次のステップは、コールサインのコンテンツ内に含める区別されたハッシュHからの残りのビットの個数を決定することである。(区別されたsalt値を見つける際に使用される)パラメータTおよびLは、セキュリティおよびスケーリング考慮事項を考慮して選択される。上記のプロセスは、試行が実行される期間T、および選択されたビットの個数Lの2つのパラメータを持つ。これらのパラメータは、所定の数のエントリへのスケーリングを考慮し、ハッカーによるスプーフィング攻撃を難しくし、将来もセキュリティが保たれコールサインを将来にわたって使い続けられるようにすることにより、決定される。将来にわたって使い続けられるには、通常、ムーアの法則を考慮し、コンピュータの速度が向上してもコールサインの偽造不可能性が無効にならないようにすることである。これらのパラメータを選択する際にさらに考慮することは、ハッカーからの「カタログ」攻撃に抵抗することである。
【0029】
(第1の実施形態における0の個数の符号化)
0の個数が判明した後、その個数をコールサインの中に符号化する方法も見つけなければならない。十分なセキュリティを備える短いコールサインを生成するために、短いデジタルまたは英数字文字列に符号化できるようにビットの総数を十分小さな値に抑える。符号化するビットの総数は、数Lと、0の個数Zを符号化するために必要なビットの数との総和である。通常、数Zは、128よりも小さく、7ビットで符号化することができる。
【0030】
他の実施形態では、ヌルビットの実際の個数を符号化する代わりに、4ビットを使用するヌルオクテットの個数、または5ビットを使用するヌル「4ビットニブル」の個数を符号化することが可能である。十分な数のニブルを見つける修正されたプロセスは以下のとおりである。
【0031】
見つける0の個数を初期化する:Z=0
時間Tの間、以下を実行する:
新しいsalt値Vを選択する
HV=一方向ハッシュ(K,X,V)を計算する
HV内の先行ニブルの個数、Yを計算する
(Y>Z)ならば
S=V,H=HV,Z=Y
例えば、24個の先行0は、通常、1GHzのCPUを搭載する従来のPC上で、この方法により、1分未満で得ることができる。
【0032】
以下に示されるように、コールサインを構成する先行0の後に続くビットのグループである、数Lは、40ビット未満となることは滅多にないであろう。先行0の個数Zに対する実用的な範囲は、24から88までの間である。24から87までの間の値は、以下の公式を使用して符号化できる。
Z=24+R
【0033】
この公式では、Rは、0から63までの間で変化する数値である。これと同等のことであるが、以下の公式を使用することもできる。
Z=24+2*P
【0034】
Pは、0のペアの個数を符号化する0から31までの範囲の数値である。0から31までの間の数は、単一の英数字文字として符号化できるため、かなり実用的である。単一の英数字文字に符号化できる十分な個数の0を見つける修正されたプロセスは以下のとおりである。
【0035】
見つける0のペアの個数を初期化する:Z=0
以下を繰り返す:
新しいsalt値Vを選択する
HV=一方向ハッシュ(K,X,V)を計算する
HV内の先行ペアの個数、Yを計算する
(Y>Z)ならば
S=V,H=HV,P=Z
Zが24よりも大きくなり、また時間Tが経過するまで
Z=Z−12を設定する
次のトレードオフは、値Lおよび時間Tの選択である。後でその選択について説明する。
【0036】
カジュアルなやり取りに適しているコールサインは、0の個数Zの符号化およびL個の選択されたビットの符号化を含む、論理コールサインのデジタルまたは英数字符号化を使用することにより得られる。コールサインを構成するZ+Lビット304は、いくつかの5ビットセグメントに分割できる。それぞれの5ビットセグメントは、英数字文字により表される。英数字文字は、その後、コールサイン305に組み立てられる。そして、最後に、1つまたは複数のセパレータが追加され、最終的なコールサイン306が形成される。また、先行「Q」を削除するなどのコールサイン短縮化規則を採用することもできる。
【0037】
図4に、コールサインを決定するプロセスを示す。ステップ401で、区別された修飾子が構成される。ステップ402で、区別されたsalt値が見つけられる。ステップ403で、区別されたsalt(S)、パーソナライゼーション情報文字列(X)、および公開鍵(K)がM個のビットにハッシングされる。ステップ404で、ハッシュから先行0の個数が見つけられる。ステップ405で、ハッシュから先行0の個数(Z)が取り出される。ステップ406で、ハッシュからビットの個数(L)が取り出され、コールサインに入れられる。そして最後に、ステップ407で、ZおよびL個のビットの英数字表現を見つけてコールサインが形成される。
【0038】
(コールサイン検証手順)
第三者がコールサインを受け取ると、コールサインの意図された所有者に、公開鍵K、パーソナライゼーション情報文字列X、および区別されたsaltSの値の提示を要求することにより、コードサイン、公開鍵、およびパーソナライゼーション情報文字列の間の関連を検証する。第三者は、証明書を使用して、K、X、およびSから区別されたハッシュを計算する。その後、先行0の個数がコールサインの中に表されている値Zと一致することを検証し、値Zが所定の最小値以上であることを検証し、コールサインの中に符号化されているL個のビットがハッシュ値の中の対応するビットと一致することを検証する。追加予防策として、ベリファイアは、パーソナライゼーション情報文字列Xが予想される自然な値に対応するかどうかを「目視」検査する。
【0039】
すでに述べたように、パラメータTおよびLは、セキュリティおよびスケーリングを考慮したうえで選択される。上記のプロセスは、試行が実行される期間T、および選択されたビットの個数Lの2つのパラメータを持つ。これらのパラメータは、所定の個数のエントリに合わせてスケーリングする必要性、スプーフィングが簡単にできてしまうことのないようにする必要性、および将来にわたって使い続けられるようにする必要性、つまり、ムーアの法則に耐える必要性によって決まる。さらに考慮すべきなのは、「カタログ」攻撃に対する抵抗力である。
【0040】
(起こり得るスプーフィング攻撃を考慮したLおよびTの選択)
公開鍵を短い署名にリンクするプロセスでは、攻撃者が同じ署名が得られる他の公開鍵を見つける、スプーフィング攻撃に注意しなければならない。
【0041】
一般的な防御方法は、公開鍵を生成することの難しさに依存することである。署名が公開鍵とある種の固定されたテキストのハッシュであり、署名がLビット長の場合、攻撃者は、一致するものを見つけるのに2^L個の公開鍵を生成しなければならない。当業者であれば、公開鍵を生成する作業は、非常に費用のかかる演算である、2つの長い素数を見つける作業を伴うことを理解するであろう。しかし、標準の鍵生成ソフトウェアを使用して一致する鍵を見つけようとするのは無能な攻撃者だけであろう。その代わりに、攻撃者は、以下のようなプロセスを使用することもありえる。
第1の素数を取得する。
素数をリストに追加する。
以下を繰り返す:
新しい素数Pを取得する。
リストに含まれる各素数Qについて以下を繰り返す:
N=P*Q(単純乗算)を計算する
Nに関連付けられている公開鍵Kを計算する
ハッシュ(K,パーソナライゼーション情報)を計算する
If(ハッシュがターゲットに一致する)
//われわれの勝ち
RETURN(P,Q)
END if
END For
If リストのサイズ<最大サイズ
Pをリストに追加する
End list
End repeat
【0042】
このプロセスでは、サイズMの最大リストの場合、素数計算は平均してM回ループする毎に1回発生するだけである。大きなMを選択することにより、攻撃者はコアループの実行時間に対する素数生成の影響を効果的に最小限に抑えるが、最後にはハッシュ関数のコストに支配されることになる。公開鍵生成の複雑度に依存することは、効率的な防御手段とはいえない。
【0043】
Z個の先行0を含むハッシュを見つけるために、ジェネレータは、約2^(Z)回の演算を実行しなければならず、したがって、対応するハッシュを見つけるために、攻撃者は約2^(Z+L)回の演算を実行しなければならなくなる。ZおよびLの十分に大きな値を選択することにより、コールサインに対するスプーフィングが困難であることを保証し、しかも素数の生成に関して仮定を設けなくてよい。
【0044】
他のよく知られている防御は、「Nのべき乗ハッシュ」と呼べるものを取得するために、ハッシュ関数のコストを、例えば、標準ハッシュを数回実行することを要求して高める方法である。暗号化の考慮事項とは無関係に、ハッシュ関数のコスト増大が対称的であることが欠点であり、コールサインの生成およびその検証の両方に適用される。これは望ましい特性ではない。スプーフィング攻撃を阻止するために生成に多量の計算を必要とする可能性のある、非対称なセットアップが望まれることもあるが、リーダーに過度の負荷をかけないために検証は非常に高速である。
【0045】
コールサインプロセスでは、ジェネレータが、十分な数の先行0を見つけるため何回も試行を実行する必要がある。これは、長い生成時間を必要とする場合があるが、検証時間には影響を及ぼさず、単純ハッシュ比較よりもわずかに遅いだけである。
【0046】
(将来にわたって使い続けられるようにすることとムーアの法則とを考慮したLおよびTの選択)
時が経つうちに計算能力が進化することも、通常は、ハッシングアルゴリズムの暗号強度の評価の際に考慮される。ムーアの法則によれば、与えられたコストに関して利用可能な計算能力は、ほぼ1年半毎に倍になり、3年毎に4倍になる。つまり、他はすべて同じであるとすると、攻撃者が利用できる計算能力の大きさは、1年半毎に倍になるということである。別の言い方をすると、現在100万年かかる攻撃も、今から30年後には1年以内で済むようになるということである。現在破ることが不可能なように見えるコードも、十分に難しくするか、「将来にわたって使い続けられるようにする」のでない限り、将来的にはいとも簡単に攻撃される可能性がある。
【0047】
将来の攻撃からコールサインを保護するために、最初の0の個数を、ムーアの法則に従うように選択する。これを行うことにより、ムーアの法則はコールサインのセキュリティに役立つ。長いコールサインが生成されるようにコードのオーバーディメンショニング(over−dimensioning)を行う代わりに、ムーアの法則に従って最初の0の個数を選択する。現在使用されているコードが含む0の個数は比較的少ないかもしれないが、数年以内に使用されるコードが含む先行0の個数は増えていることだろう。
【0048】
新しいマシン上で新しいコードが生成される場合、今から3年後に生成プロセスに同じだけの時間を費やして、0が2つ付加されたハッシュを見つける。当業者であれば、生成のコストは2^(Z)に比例し、攻撃のコストは2^(Z+L)に比例することを理解するであろう。生成に固定された時間を費やすようにすると、攻撃者側は攻撃をかけるのにその時間の2^L倍の時間を費やす必要がある。つまり、攻撃は、30年後も現在と同じくらい難しいということである。例えば、生成期間Tが1分に設定され、長さLが40ビットに設定された場合、スプーフィングされた値の生成は、現行マシンでは、ほぼ200万年分の計算を必要とし、今後30年間同様に生成されるコールサインも、スプーフィングには類似のマシン上で200万年分の計算を必要とする。
【0049】
しかし、この議論が適用されるのは、コールサインが短い期間にしか使用されない場合のみである。2003年に1分かけて生成された40ビットのコールサインを破るには、2003年に利用可能な複数のコンピュータを使って200万年分の計算をするか、つまり1年間、そのような200万台のコンピュータを並列使用する必要がある。2033年に1分かけて生成された40ビットのコールサインを破る場合も、その年に利用できる複数のコンピュータを使用して200万年分の計算をする必要がある。しかし、2033年の複数のコンピュータは、2003年のコールサインをわずか2年以内に破ることができる。
【0050】
そのため、コールサインには、何らかの形の陳腐化が生じる。ある特定の年に生成されたコールサインは、おそらく、かなりの年数の間、使用されないであろう。コールサインの全体的回復力は、生成に費やされた時間とビットの個数Lとに依存する。生成プロセスを長くとることで回復力を高められ、生成時間Tを倍にする毎に、ムーアの法則の繰り返しから保護される。さらに他の実施形態では、本当に強いサインは、生成プロセスを長時間にわたって実行することにより形成することができる。
【0051】
さらに他の実施形態では、有効期限をコールサインに関連付けることにより妥当な保護が実現される。これは、相手の実際の公開鍵を見つけるために、コールサインがブートストラップメカニズムとして使用される場合に特に魅力的である。公開鍵が見つけられた後、コールサインの中に表されている圧縮情報ではなく、完全な情報を使用できる。完全な情報は、陳腐化に対する脆弱性がかなり低い。
【0052】
(自然な衝突の可能性を考慮したLおよびTの選択)
攻撃がない場合でも、短いコードには問題があって、それは2人のユーザが同じコールサインになる鍵、パーソナライゼーション情報文字列、およびsalt値の組合せをたまたま選択した場合に生じる「自然な」衝突の可能性である。
【0053】
コールサインで使用されるビット長Lは、コールサインを短くしておくために制限されるが、コンピュータユーザの母集団(「P」)は非常に大きなものとなりうる。例えば、当業者に知られている方法を使用して衝突の確率が50%未満となるようにP=10^10の母集団内のコンピュータユーザ毎に少なくとも1つのコールサインを割り当てると、長さLは67ビットを越えることになる。衝突の確率が1%未満でなければならないとすれば、Lは73ビットよりも大きくなければならない。
【0054】
このように大きなビット列は、15英数字コールサインで符号化されるであろう。このような長さは、コールサインの実用的な長さを超えている。つまり、衝突の可能性を完全に排除することは、パーソナライゼーション情報文字列に電子メールアドレスなどの一意的なトークンが埋め込まれており、この一意的なトークンがコールサインと一緒に安全に転送された場合にしか実用的でない。
【0055】
コールサイン長は制約されており、衝突が発生するので、衝突を検出する方法が採用される。衝突は、コールサインの解決を使って解決される。衝突がある場合、リーダーはコールサインに関連する公開鍵、パーソナライゼーション情報文字列、およびsalt値の複数のバージョンを取得し、そのすべてが第1レベルの検証プロセスをパスする。リーダーは、パーソナライゼーション情報文字列に基づいて「正しい」または「予想される」バージョンを選択する。衝突解決プロセスは、以下のステップまたはその同等の手順を実行することにより繰り返すことができる。
1)コールサインの探索を開始する。
2)コールサインに関連する公開鍵、パーソナライゼーション情報文字列、およびsalt値を取り出す。
3)そのような利用可能なエントリがない場合、探索は失敗として終了する。
4)一方向関数を使用して検証を実行する。失敗した場合には、ステップ2を繰り返す。
5)パーソナライゼーション情報文字列が予想される値と一致した場合、探索は成功し終了する。
6)パーソナライゼーション情報文字列が一致しない場合、ステップ2を繰り返す。
【0056】
解決プロセスが効率的な場合、鍵は、衝突解決メカニズムと親和性のある衝突の頻度を維持できる十分な長さであればよい。例えば、パーソナライゼーション情報文字列の長いリストを延々と調べるのは不効率である。当業者であれば、衝突がかなりまれなことであり、2^LがPよりも十分に大きい、つまりL>log2 Pならば、2、3の一致するエントリを伴うだけであることを理解するであろう。
【0057】
(LおよびTを選択する際の定量化)
コールサインの第1の実施形態は、一組の英数字文字からなる。それぞれの文字は、5ビットの情報を符号化したものである。長さを考慮した場合については、コールサインの第1の実施形態は、長さ10文字を超える英数字であってはならない。10個の文字のうちの1つは、0の個数Zを符号化したものである。残り9文字は、Lビットを符号化したもので、1文字につき5ビットを使用した場合には、Lを45ビットとする。L=35、40、または45ビットのコールサインの他の実施形態も可能である。第1の実施形態について、45ビットのうちのLに到達した際に、上記の基準は、当業者に知られている方法を使用して定量化されている。Lの値には、値のうちどれにアクセス可能かを知るための定量化可能な測定基準を割り当てることができ、同様に、0の探索に費やされなければならない時間Tも定量化されている。
【0058】
前のセクションでは、スプーフィング攻撃、カタログ攻撃、自然な衝突、および年月のたつうちに高まる計算能力について述べたが、以下の基準で要約される。合計Z+Lは、スプーフィングを防止できるように十分大きくなければならない。0の個数Zは、計算時間Tに対応する。積T*2^Lは、数回のムーアの法則の繰り返しを考慮した場合であっても、スプーフィングを防止できるように十分大きくなければならない。パーソナライゼーション情報文字列は、カタログ攻撃を阻止できるように十分一意的なものでなければならない。長さLは、ポータブルな母集団サイズを与えた場合に、名前衝突の発生がまれであるように十分に長くとらなければならない。
【0059】
(スプーフィング攻撃を考慮したLおよびTの選択における定量化)
図5は、スプーフィング攻撃を無効化することに基づく長さLおよび時間Tの選択を示す表である。この表は、サインを破るのに何年分の計算が必要になるかを、ビット数(35、40、または45)および費やされる計算時間T(15、60、240、960、または3840秒)の関数として示している。この表では、二重下線および太字の値は、100,000年未満である。鍵を破るのに必要な計算は、コンピュータネットワークに容易に分散させることができる。当業者であれば、以前には100,000台のコンピュータで構成されるネットワークを使用すれば暗号チャレンジを破ることができたことを理解するだろう。コールサインをそのようなネットワークへの少なくとも1年のクラッキングに抵抗するようにするために、35ビットのLは、0の探索が少なくとも4分間持続しない限り最良の選択とはいえない。
【0060】
10,000,000年よりも大きな値は、一重下線付きの斜体であり、これらの値は、100,000台の現在のコンピュータのネットワーク上で100年分の計算を必要とする。表からわかるように、45ビットのLであれば一般的には安全である。16分以上の0に対する探索時間(T)と組み合わせて45ビットのLを使用すると、10年間有効であり続ける可能性のあるコールサインが得られる。
【0061】
(カタログ攻撃を考慮したLおよびTの選択における定量化)
図6は、Lビットから形成される様々なコールサインおよびT秒間に計算される区別されるsalts値に対するコールサインの脆弱性を示す表である。コールサインのような短いコードは、スプーフィング攻撃の一変種である、「カタログ」攻撃を受ける可能性がある。この攻撃では、一人の攻撃者または複数の攻撃者のグループは、多数のコールサイン「ソリューション」を生成し、それらをデータベース、つまりカタログに格納する。それぞれのソリューションは、攻撃者に知られている公開鍵およびコールサインの特定の値をリンクする。当業者であれば、この表は、さらに、100,000台のコンピュータのネットワークにより1年で構築可能なカタログのサイズを示すことを理解するであろう。「脆弱性」の欄は、カタログが少なくとも1つの有効なコールサインを含むためにネットワーク内に存在していなければならないカタログ化された名前の出現回数を示す。
【0062】
当業者であれば、カタログ攻撃は、ポピュラーなパーソナライゼーション情報文字列に対してのみ適用可能であることを理解するであろう。パーソナライゼーション情報文字列がユーザの名前と名字のみを含んでいた場合、カタログ攻撃はほとんど効力を持たないであろう。
【0063】
他の実施形態では、パーソナライゼーション情報文字列に追加トークンを含めることにより、一般名の出現頻度を減らし、コールサインのセキュリティを強化することが可能である。例えば、市および国の名前をパーソナライゼーション情報文字列に追加することができる。すると、カタログ攻撃は、パーソナライゼーション情報の中に同じ追加トークンを持つユーザしかターゲットにできない。例えば、同じ名前と名字を持ち、同一市内に居住するユーザである。当業者であれば、これらのユーザは比較的小さな母集団を形成することを理解するであろう。当業者であれば、市内にそのようなユーザが数百人以上いることは滅多にないことを理解するであろう。この表から、45ビットのビット長Lと4分(240秒)の持続時間Tとの組合せで、本出願において十分なセキュリティが確保されることがわかる。
【0064】
さらに他の実施形態では、パーソナライゼーション情報文字列は、電子メールアドレスなどの一意的なトークンを含み、このトークンがコールサインの一部として安全に受け渡された場合、カタログ攻撃は無効化される。このようなカタログ攻撃を成功させるのは、スプーフィング攻撃と同じくらい難しい。
【0065】
(不愉快な識別子の回避)
コールサインを生成するのは運任せなので、「IAM−SO−DUMB」などの非常に望ましくないコールサインが生じる可能性がある。ランダムに選択されるため、禁句の4文字語など、明らかに不快感を与える単語を含むコールサインが生じることすらある。
【0066】
これらの出現を排除する最も確実な方法は、提案されたコールサインをユーザに提示し、ユーザに、提案された値を受け入れてもらうか、または他の値を要求してもらうことである。計算を16個の順次ステップとして設計すると、他のコールサインを素早く再生成しやすい。コールサインが拒絶された場合、他の実施形態では、完全に新規の計算に要する時間のわずか1/16の時間を使用し、手順の本当に最後のステップを繰り返すことで十分である。コールサインが最終のハッシュステップにより導かれる設計が維持されている場合、さらに他の実施形態では、その段階で最終のsalt値を導入し、乱数を単純に選んで新しいコールサインを導くようにすることが可能である。
【0067】
さらに他の実施形態では、生成プロセスに「望ましくないキーワード」のリストを含めるステップを追加することにより望ましくないコールサインに対する保護を埋め込む。キーワードを含めるこのような保護は、コード自体をいくぶん不快なものとする。しかし、他の実施形態では、2進数値の英数字符号化が問題となる。そこで、実際のキーワードではなく、符号化された2進数値をプログラムに含めることができる。これらは、存在するが、読み取り不可能な形式である。
【0068】
(II.要求された0の個数が証明書により設定されるコールサインの第2の実施形態およびそれらを生成する方法)
第1の実施形態では、いくつか改善余地がある。コールサインの中の0の個数を符号化する必要がない場合があり、したがって、より短いコールサイン、または等しく長いが有効ビットの大きい方の数Lを含むコールサインを考慮する。また、英数字符号化とともに望ましくない結果が生じることがある。そのため、不注意で、不快な言葉を含む「読み取り可能な」文字列が生じる可能性がある。コールサイン生成プロセスにより、そのような単語が回避されるようにしなければならない。
【0069】
(第2の実施形態における0の個数の符号化)
第1の実施形態の0の個数の符号化は妥協である。0の個数は、常に、24よりも大きく、98よりも小さく、また0の個数ではなくペアの個数を符号化することで十分な精度が得られると想定する。
【0070】
より基本的なこととして、コールサイン内の0の個数の符号化では、コールサインの所有者は、必要な0の個数を決定しなければならないという点が挙げられる。第1の実施形態では、区別されたsaltを探すのに費やされる時間は固定されており、またその時間内に見つけられる0の個数は、「ムーアの法則に従い」、その年のコンピュータの平均能力を表すと仮定している。しかし、制限時間が固定されているため、コールサインを生成するために使用されるコンピュータの能力とそのコールサインの強度との間に依存関係が生じる。第2の実施形態では、0の必要な個数は、コールサインの受信者により決定されると仮定する。
【0071】
この実施形態では、検証コード内にチェックを符号化する。コールサインの受信者は、公開鍵K、識別子X、および区別されたsaltSを取得し、その後、ハッシュ内の0の個数Zが、年Yおよび有効ビットの個数Lの関数である、最小値よりも大きいことを検証する。
Z>Z0−L+(Y−2003)/X
【0072】
この公式では、数Z0は、2003年に十分強度があると考えられた鍵の長さを表すように設定されている。係数Xは、平均的なコンピュータの能力が倍になるのに要する年数を示す。実用的な実装に関して、ムーアの法則に従ってXの値を1.5に設定し、Z0の値を62に設定すると、以下の公式が得られる。
Z>62−L+(Y−2003)/1.5
【0073】
この公式では、数62は、100,000年分の計算が十分な障害となると仮定して計算された値である。実際、「バー」は、コールサインが使用される背景状況にかなり依存することがある。財務用途では、さらに大きな値、例えば、66(1,000,000年)を必要とする場合がある。軍事用途だと、なおいっそう条件が厳しい。
【0074】
図7に、第2の実施形態によるコールサインの構成を示す。コールサインは0の個数を符号化しないため、第1の実施形態と同じハッシュ関数を使用することはできない。コールサインを構成するL個のビットは、区別されたハッシュ内の固定位置に置かれるが、0は他の固定位置の後に数えられる。
【0075】
(III.コールサインのパッセージのASCIIへの英数字符号化)
図8および図9に、コールサインの英数字符号化を示す。コールサインを作成する際に、互いに区別しやすく、転記の誤りを生じがちでないコールサインの英字および/または数字を選ぶことが望ましい。ピア識別子には、英数字表現が割り当てられる。これらの実施形態で選択された符号化例では、結果として得られるコールサインの中で、数0および1または英字OおよびIを使用しない。当業者であれば、これらの英字は、互いに混同しやすい傾向があるため使用されないが、他の実施形態ではそれらの文字を使用できることを理解するであろう。当業者であれば、さらに、他の実施形態では、他の文字を排除するか、または追加することができることも理解するであろう。当業者であれば、発明の他の実施形態は、実際には、ローマ字とアラビア数字に限定されないことを理解するであろう。当業者であれば、さらに、すべての数字またはすべての文字は、所望の数の記号が生成できる限り使用できることを理解するであろう。実施例では、不要な文字を削除することで、8個の数字と24個の英字を残し、図に示されているように32個の記号が得られる。
【0076】
上述のように、コールサインを生成する際に、このプロセスでは、コールサイン内で使用するために選ばれたそれぞれの文字について0から31までの数値を割り当てて、32個の利用可能な記号を出力する。コンピュータによりコールサインが読み取られると、コールサインの各文字は、コンピュータメモリ内で数値を割り当てられる。コールサインがコンピュータから出力されるときに、コンピュータ内でコールサインを構成するそれぞれの数に対し、ユーザに出力されるコールサインを構成する数字または英字を割り当てる。コールサインを構成する文字の組合せは、コールサイン生成手順により選択される。その後、コールサイン検証手順によりその有効性がチェックされる。
【0077】
(IV.ピア名解決プロトコル(PNRP)内で適用されるコールサイン)
図10は、ピアツーピアコールサインの一実施形態を利用するピアツーピアネットワークのブロック図である。ピアツーピアネットワーク技術では、1つまたは複数の分散ネットワーク上でリアルタイム通信を実現する。ピアツーピアネットワーキングは、サーバレス技術である。ピアツーピアネットワークでは、個々のPCは、インターネットサービスを使用せずに、データの交換、資源の共有、他のユーザの特定、通信、および協働をリアルタイムで行うことができる。PCは、通常、PCがピアツーピアネットワークに結合されている場合にピアツーピア通信を可能にするアプリケーションソフトウェアを備える。この種のネットワークでは、ピアコンピュータはそれぞれ、独自のセキュリティの維持を受け持つ。そのため、認定ユーザの検証および衝突しているアドレスの解決は、サーバベースのネットワークといくぶん異なる方法で実行されるタスクである。
【0078】
ピアグループに接続し、その後、ピアグループに参加することは、ユーザを識別する際にセキュリティ対策を利用するピアネットワークでの一般的なタスクである。グループに参加するには、ピアコンピュータは、ピアグループの所有者から招待を受ける。グループ所有者から招待を受け取るには、仮グループメンバがまず、ピア名および公開鍵である識別資料をグループ所有者に受け渡さなければならない。この情報は、電子メール、ファイル共有、XMLなどを使用して受け渡される。グループ所有者は、次に、招待を仮グループメンバに発行する。
【0079】
仮グループメンバは、その情報を受け取ると、招待情報を使用して、グループに接続する。グループに接続するために、仮グループメンバは、PNRPとグループIDを使用して、グループメンバのアドレスを解決し、そのグループメンバを通じてピアネットワークに接続する。
【0080】
仮グループメンバと現在のグループメンバとの間の相互認証は、通常は、信頼できるWebを通じて実行される。相互認証の後、仮グループメンバが、単一の隣接者を持つ新しいグループメンバとなる。隣接者は、接続を受け入れ、認証が実行されたピアネットワークからのコンピュータである。
【0081】
特に、ピアツーピアコンピュータネットワークへの接続に関して、ピアツーピアネットワークは、ネットワーキング用の一組のネットワーキングアプリケーションプログラムインターフェース(「API」)を提供する、インフラストラクチャネットワーキングソフトウェアを含む。これらのピアツーピアアプリケーションは、協働通信、コンテンツ配信などに関係する場合がある。ピアツーピアインフラストラクチャAPIソフトウェアは、ピア名解決プロトコル、マルチポイント通信、分散データ管理、セキュリティ保護されたピアID、およびセキュリティ保護されたピアツーピアグループなどのコンポーネントを含むことができる。
【0082】
ピアツーピア名前解決プロトコル(PNRP)を使用すると、ピアツーピアネットワーク内のピアは、通常であればサーバベースのネットワーク内では必要になるようなサーバを必要とせずに、「ピア名」を解決することができる。PNRPでは、ピアコンピュータは、ネットワーク内の他のコンピュータ、つまりピアを識別することができる。ピア名解決プロトコルは、複数のエンドポイント、または衝突の生じうるネットワーク内の複数のノードへの名前のピアツーピア解決を可能にするアプリケーションプログラムインターフェース(API)を備える。
【0083】
ピア名解決プロトコル(PNRP)APIは、コンピュータノードがピアツーピアネットワーク内で互いに見つけ合うことができるようにすることにより参加ピアのグループが互いにやり取りできるようにする名前−IP解決プロトコルである。通常であればピアツーピアネットワーク内で提供されるタスクとしては、ピア名の登録および登録解除、ピア名の解決、およびピアのグループの列挙がある。当業者であれば理解するように、ピア名の解決は、互いに衝突しないピア名を見つけることを含む。互いに衝突しない名前を見つけることに加えて、見つかった名前は十分なセキュリティが対策され、ユーザがそのピア名を覚えられることが望ましい。
【0084】
ピア名は、コンピュータ、ユーザ、グループ、またはサービスを識別できる安定した名前である。ピア名は、通常、ピアがセキュリティ保護されているかどうかを示す権限および単に文字列である分類子を含む。当業者であれば理解するように、セキュリティ保護されたピア名では、通常、セキュリティ保護されたハッシュアルゴリズム(SHA−1)またはMD5アルゴリズムを使用して、128ビットPNRP識別子を導き、公開鍵Kを分類子Cにハッシングし、ピア名のセキュリティ保護された伝送を実現することができる。第3の実施形態では、Cは識別子X、salt S、およびハッシングアルゴリズムの識別を含む。
【0085】
暗号鍵は、ネットワーク通信内のセキュリティ対策のための当業者に知られている仕組みである。暗号鍵は、一般的に、アクセスの許可およびソースの識別の検証のためピアツーピア環境で使用される。暗号鍵を使用すると、鍵を所有している人は、その鍵が関連付けられているデータにアクセスしたり、または鍵所有者の電子署名を作成したりすることができる。公開鍵アルゴリズムは、通常、K/Pと表される、公開鍵と秘密鍵からなるペアを備える。秘密鍵は、メッセージの受信者への識別子として使用できるため、秘密に保ち、セキュリティ保護されなければならない。公開鍵は、自由に配布でき、他人がメッセージを自由に復号化できる。鍵ペアの公開鍵は、デジタル証明書とともに配布されることが多い。鍵ペアの一方の鍵がメッセージの暗号化に使用される場合、そのペアの他方の鍵は、メッセージの復号化に使用される。
【0086】
これらの鍵は、長くなる傾向があり、通常は、少なくとも256個の16進数である。そのため、それらを受け渡し、特に公開鍵を受け渡すのは、面倒な場合がある。インスタントメッセージングまたは電子メールは、使用できるが、改ざんを受けやすく、鍵の検証を望ましいものとする。また、鍵の検証のプロセスに、鍵を受け取る人が、送信者が鍵を送信する相手として意図している人であるかどうかの検証を含むことも望ましい。
【0087】
(IV.ピアツーピア名前解決プロトコルに適用されるようなコールサインの第3の実施形態)
ピアツーピア名前解決プロトコル(「PNRP」)では、ピアはサービスを伴わずに「ピア名」を解決することができる。PNRPピア名は、第1に、公開鍵のSHA−1ハッシュである「authority」とUnicodeテキスト文字列である「qualifier」の2つのフィールドで構成される。PNRPは、以下のような暗号ハッシング関数を使用して、これら2つのフィールドから128ビットPNRP−IDを導く。
PNRP−ID=hash(authority,hash(qualifier))
【0088】
この第3の実施形態は、PNRPを「コールサイン」で強化する。PNRPのコールサインを生成するために、ユーザは、「区別された修飾子」を生成する。権限、区別されたsalt値、および区別された修飾子の組合せの結果として、多数の0から始まるPNRP−IDが得られる。コールサインは、このPNRP−IDから導かれる。新しいPNRP APIを使用することにより、ユーザは、コールサインに一致するPNRPエントリを列挙し、その後、関連付けられている権限および修飾子を取得することができる。
【0089】
(区別されたPNRP修飾子)
区別された修飾子は、区切り記号「//」および「/」により区切った、パーソナライゼーション情報文字列、二次ハッシュ関数の識別子、および区別されたsalt値から形成される。当業者であれば、パーソナライゼーション情報文字列の内容は、コールサインが使用されるアプリケーションによって異なることがあることを理解するであろう。例えば、PNRPコールサインの実施例では一意的なパーソナライゼーション情報文字列を使用するが、他のアプリケーションでは、異なるパーソナライゼーション文字列を必要とする場合がある。
【0090】
当業者であれば、これらの文字列は、区切り記号または当業者に知られているその他の同等の方法により区切られることを理解するであろう。当業者であれば、さらに、文字列の順序および使用される区切り記号は異なっていてもよいことも理解するであろう。
【0091】
使用されるハッシュ関数は、さらに、区別された修飾子に含まれ、区切り記号により区切られる。当業者が理解するように、ハッシュ関数は当業者に知られている、十分なセキュリティ対策が施される型のものであればよい。例えば、SHA−1ハッシュ関数またはその同等の関数がある。
【0092】
saltは、コールサイン生成プロセス時に選択される。saltは、ピア名の二次ハッシュを実行することにより選択され、これにより、ハッシングされた結果は十分な数の0から始まる。salt自体は、ASCII英数字からなる。正式な構文は以下のとおりである。
区別された修飾子=<パーソナライゼーション>”//”<ハッシュ関数>”/”<salt>
区別された修飾子の例を以下に示す。
【0093】
Qualifier:JonSmith<jsmith@yuhoo.com>//SHA1/A5E5F3Z4YWZTRF0TW9RTQ
saltは、権限および修飾子の二次ハッシュが多数の0から始まるように選択される。
【0094】
(コールサインの第3の実施形態の生成)
コールサイン生成手順の目的は、ピア名および関連するコールサインが検証手順にパスできるようにする区別された修飾子を見つけることである。これは、適切な「区別されたsalt」を見つけることを含むので、ピア名の二次ハッシュは、適切な数の0から始まる。
【0095】
検証のセクションで示されているように、0の適切な個数は時間の経過とともに変わる。式
Z>17+(Y−2003)/1.5
は、それらの目的のために使用される。
【0096】
生成目的に関して、値Yは、現在の年に設定すべきではなく、むしろ、コールサインが有効である期間の最終年に設定すべきである。既定では、これは、現在の年+10に設定される。
【0097】
生成は、以下のように進行する。
1)検証手順において予想されるようにこの権限の正準形式を使用して、PNRPに従って、PNRP名前権限の値を初期化する。
2)ユーザ名に応じてパーソナライゼーション情報Xの値を初期化する。
3)既定SHA−1により、有効な二次ハッシュ関数を選択し、対応する識別子Iに注目する。
4)0の適切な個数Zを選択する。
5)数Nが数Z以上になるまで以下を繰り返す:
a.Salt Sを選ぶ。
b.権限に基づくピア名および仮の区別された修飾子をX、I、およびSに基づいて構成する。
c.関数Iに従ってピア名のハッシュを計算する。
d.このハッシュ内の0の個数(N)を測定する。
6)ピア名に関連付けられたPNRP識別子を計算する。
7)PNRP識別子の最上位45ビットに基づいてコールサインを構成する。
8)コールサインが不快な単語を含まないか検証し、もし含んでいれば、ステップ5を繰り返す。
【0098】
ステップ5は、最新のコンピュータ上で約15秒続くことが予想される。
【0099】
生成関数の最後のステップは、コールサイン内の文字のランダムな集まりから何らかの不快な言葉が生じないかチェックすることを目的としている。これは、提案されたコールサインを使用することを受け入れるかどうかをユーザに問い合わせることにより実装できる。
【0100】
(第3の実施形態で生成されるコールサインの検証)
コールサイン検証手順では、ピア識別子とコールサインとを比較し、二次ハッシュが十分な数Zの先行0を含むことを検証する。先行0の個数を検証することにより、コールサインに対する第三者によるスプーフィングが難しくなる。第1近似では、コールサインの暗号強度は、長さがZ+45の対称鍵の強度に等しい。Zの値は、時間の経過とともに変化する場合がある。ムーアの法則から、コンピュータはますます強力になることが予測されるので、Zに対する長さ要件は増大する傾向にある。予見可能な将来にわたってムーアの法則が成立すると仮定した場合、先行0の個数Zに対する値は、現在の年Yの関数であると考えることができる。
Z>17+(Y−2003)/1.5
【0101】
当業者であれば、上の不等式の中で使用される値17は、選択されたセキュリティと計算とのトレードオフの関係に対応し、また条件がきつい環境ほど、選択される値は大きくなる可能性があることを理解するであろう。
【0102】
コールサインを検証するために使用される二次ハッシュ関数は、時間の経過とともに変化しうる。現在の実装では、当業者に知られているハッシュ関数SHA1が使用される。他の実施形態では、受け入れ可能なハッシュ関数のリストは、使用できるようにコンピュータメモリに保持することができる。特に、セキュリティが向上するようにハッシュ関数の開発が続けられることも予想される。本発明の実施形態は、新しいハッシュ関数が現れたときの将来の使用を規定することにより新しいハッシュ関数の開発に対応できる。
【0103】
検証は、以下のように進行する。
1)ピア名に関連付けられたPNRP識別子を計算する。
2)PNRP識別子の最上位45ビットとコールサイン内に符号化されている45ビットとを比較する。
3)45ビットが一致しない場合、検証は失敗である。
4)区別されたsaltから二次ハッシュ関数の識別子を抽出する。
5)ハッシュ関数識別子がない、または証明書が受け付けない、または有効な値として認識されない場合、検証は失敗である。
6)ピア名全体の正準化されたバージョンのハッシュを指定された二次ハッシュ関数とともに計算する。
7)その結果得られたハッシュ内の先行0の個数を測定する。0の個数がターゲット値Zよりも小さい場合、検証は失敗である。
8)識別文字列がコールサインにより指定された人またはエンティティの理にかなった説明となっていることを検証し、そうでなければ、検証は失敗である。
9)ステップ1から8がパスした場合、検証は成功である。
【0104】
ピア名の「正準化されたバージョン」を得るには、通常16進数からなるピア名の権限部分が必ず数字と大文字A、B、C、D、E、およびFのみで符号化されているようにする。ステップ8は、通常、人間による対話操作を伴うことに注意されたい。
【0105】
(コールサインからのPNRPレコードの取り出し)
場合によっては、コールサインに関連付けられたPNRPレコード、したがって関連付けられたピア名を取り出すのが有益である。そうするには、PNRP識別子がコールサインと同じ45ビットから始まるすべてのPNRPレコードを取り出し、対応するピア名を取り出し、検証手順のステップ1から7をパスできないピア名を取り除き、検証手順のステップ8を使用して、予想されるIDと一致する名前のみを残す。
【0106】
独占的権利または特権を主張する本発明の実施形態は、特許請求の範囲で定められる。
【図面の簡単な説明】
【0107】
【図1】ピアツーピアコンピュータネットワークにアクセスするために使用される標準的なセキュリティ保護されたユーザ識別を示す図である。
【図2】コールサインを発生する方法の第1の実施形態により生成される短縮されたコールサイン識別子の表現を示す図である。
【図3】コールサインの構成を示す図である。
【図4】コールサインを決定するプロセスを示す流れ図である。
【図5】Lビットから形成される様々なコールサインおよびT秒間に計算される区別されるsalts値に対するコールサインの脆弱性を示す表である。
【図6】衝突頻度と45ビットのビット長Lに対する集団の大きさとの対比を示す表である。
【図7】第2の実施形態によるコールサインの構成を示す図である。
【図8】コールサインの英数字符号化を示す図である。
【図9】コールサインの英数字符号化を示す図である。
【図10】コールサインの第3の実施形態に使用されるようなコールサインを生成するプロセスを示す流れ図である。
【符号の説明】
【0108】
202 コールサイン識別子
【特許請求の範囲】
【請求項1】
区別された修飾子を決定するステップと、
区別されたsaltを見つけるステップと、
前記区別されたsaltを前記区別された修飾子とともにハッシングするステップと
を備えたことを特徴とするコールサインを生成する方法。
【請求項2】
前記ハッシュ結果が所定の出力パターンを含むようにする区別されたsaltを検出するステップをさらに備えたことを特徴とする請求項1に記載のコールサインを生成する方法。
【請求項3】
前記ハッシュから多数の先行0を検出するステップをさらに備えたことを特徴とする請求項2に記載のコールサインを生成する方法。
【請求項4】
前記複数の先行0の後に多数のビットを保持するステップをさらに備えたことを特徴とする請求項3に記載のコールサインを生成する方法。
【請求項5】
前記0の個数を英数字コールサインの0の桁に符号化するステップをさらに備えたことを特徴とする請求項4に記載のコールサインを生成する方法。
【請求項6】
前記複数の先行0に続くビットの前記個数を複数の英数字コールサイン桁に符号化するステップをさらに備えたことを特徴とする請求項5に記載のコールサインを生成する方法。
【請求項7】
前記コールサインの0の桁および前記複数の英数字コールサイン桁から1つのコールサインを形成するステップをさらに備えたことを特徴とする請求項6に記載のコールサインを生成する方法。
【請求項8】
暗号法でセキュリティ保護されているハッシング関数により生成された前記複数の先行0に続く複数の桁から2進数を作成するステップと、
前記2進数を複数の5ビットセグメントに分割するステップと、
前記5ビットセグメントのそれぞれを、対応する英数字に符号化するステップと
を備えたことを特徴とするコールサインを符号化する方法。
【請求項9】
前記2進数は、45ビット長であることを特徴とする請求項8に記載のコールサインを符号化する方法。
【請求項10】
前記英数字0文字は、MSBであることを特徴とする請求項8に記載のコールサインを符号化する方法。
【請求項11】
パーソナライゼーション情報文字列を形成するステップと、
前記パーソナライゼーション文字列とともにハッシングされた場合に、前記ハッシングされた結果の中に所定の個数の先行0を生成するsalt値を検出するステップとを備えたことを特徴とする暗号化ハッシュを生成する方法。
【請求項12】
前記パーソナライゼーション情報文字列を区別されたハッシュを生成するための前記salt値とともにハッシングするステップをさらに備えたことを特徴とする請求項11に記載の暗号化ハッシュを生成する方法。
【請求項13】
前記salt値は区別されたsalt値であることを特徴とする請求項12に記載の暗号化ハッシュを生成する方法。
【請求項14】
前記パーソナライゼーション情報文字列は、個人の名前を含むことを特徴とする請求項11に記載の暗号化ハッシュを生成する方法。
【請求項15】
前記パーソナライゼーション情報文字列は、個人の電子メールアドレスを含むことを特徴とする請求項11に記載の暗号化ハッシュを生成する方法。
【請求項16】
前記パーソナライゼーション情報文字列は、個人の会社名を含むことを特徴とする請求項11に記載の暗号化ハッシュを生成する方法。
【請求項17】
パーソナライゼーション情報文字列を形成するステップと、
前記パーソナライゼーション文字列および公開鍵とともにハッシングされた場合に、前記ハッシングされた結果の中に所定の出力パターンを生成するsalt値を見つけるステップと
を備えたことを特徴とする暗号化ハッシュを生成する方法。
【請求項18】
前記パーソナライゼーション情報文字列を区別されたハッシュを生成するための前記salt値とともにハッシングするステップをさらに備えたことを特徴とする請求項17に記載の暗号化ハッシュを生成する方法。
【請求項19】
前記salt値は区別されたsalt値であることを特徴とする請求項18に記載の暗号化ハッシュを生成する方法。
【請求項20】
前記パーソナライゼーション情報文字列は、個人の名前を含むことを特徴とする請求項17に記載の暗号化ハッシュを生成する方法。
【請求項21】
前記パーソナライゼーション情報文字列は、個人の電子メールアドレスを含むことを特徴とする請求項17に記載の暗号化ハッシュを生成する方法。
【請求項22】
前記パーソナライゼーション情報文字列は、個人の会社名を含むことを特徴とする請求項17に記載の暗号化ハッシュを生成する方法。
【請求項23】
区別された修飾子をユーザ用に構成するステップと、
区別されたsaltを見つけるステップと、
前記区別された修飾子、区別されたsalt、および公開鍵をMビットハッシュにハッシングするステップと、
前記ハッシュ内の先行0の個数を決定するステップと、
前記ハッシュから所定の個数のビットを取り除くステップと、
テーブルルックアップを使用して前記0の個数を英数字コールサインの1桁に符号化するステップと
を備えたことを特徴とするコールサインを生成する方法。
【請求項1】
区別された修飾子を決定するステップと、
区別されたsaltを見つけるステップと、
前記区別されたsaltを前記区別された修飾子とともにハッシングするステップと
を備えたことを特徴とするコールサインを生成する方法。
【請求項2】
前記ハッシュ結果が所定の出力パターンを含むようにする区別されたsaltを検出するステップをさらに備えたことを特徴とする請求項1に記載のコールサインを生成する方法。
【請求項3】
前記ハッシュから多数の先行0を検出するステップをさらに備えたことを特徴とする請求項2に記載のコールサインを生成する方法。
【請求項4】
前記複数の先行0の後に多数のビットを保持するステップをさらに備えたことを特徴とする請求項3に記載のコールサインを生成する方法。
【請求項5】
前記0の個数を英数字コールサインの0の桁に符号化するステップをさらに備えたことを特徴とする請求項4に記載のコールサインを生成する方法。
【請求項6】
前記複数の先行0に続くビットの前記個数を複数の英数字コールサイン桁に符号化するステップをさらに備えたことを特徴とする請求項5に記載のコールサインを生成する方法。
【請求項7】
前記コールサインの0の桁および前記複数の英数字コールサイン桁から1つのコールサインを形成するステップをさらに備えたことを特徴とする請求項6に記載のコールサインを生成する方法。
【請求項8】
暗号法でセキュリティ保護されているハッシング関数により生成された前記複数の先行0に続く複数の桁から2進数を作成するステップと、
前記2進数を複数の5ビットセグメントに分割するステップと、
前記5ビットセグメントのそれぞれを、対応する英数字に符号化するステップと
を備えたことを特徴とするコールサインを符号化する方法。
【請求項9】
前記2進数は、45ビット長であることを特徴とする請求項8に記載のコールサインを符号化する方法。
【請求項10】
前記英数字0文字は、MSBであることを特徴とする請求項8に記載のコールサインを符号化する方法。
【請求項11】
パーソナライゼーション情報文字列を形成するステップと、
前記パーソナライゼーション文字列とともにハッシングされた場合に、前記ハッシングされた結果の中に所定の個数の先行0を生成するsalt値を検出するステップとを備えたことを特徴とする暗号化ハッシュを生成する方法。
【請求項12】
前記パーソナライゼーション情報文字列を区別されたハッシュを生成するための前記salt値とともにハッシングするステップをさらに備えたことを特徴とする請求項11に記載の暗号化ハッシュを生成する方法。
【請求項13】
前記salt値は区別されたsalt値であることを特徴とする請求項12に記載の暗号化ハッシュを生成する方法。
【請求項14】
前記パーソナライゼーション情報文字列は、個人の名前を含むことを特徴とする請求項11に記載の暗号化ハッシュを生成する方法。
【請求項15】
前記パーソナライゼーション情報文字列は、個人の電子メールアドレスを含むことを特徴とする請求項11に記載の暗号化ハッシュを生成する方法。
【請求項16】
前記パーソナライゼーション情報文字列は、個人の会社名を含むことを特徴とする請求項11に記載の暗号化ハッシュを生成する方法。
【請求項17】
パーソナライゼーション情報文字列を形成するステップと、
前記パーソナライゼーション文字列および公開鍵とともにハッシングされた場合に、前記ハッシングされた結果の中に所定の出力パターンを生成するsalt値を見つけるステップと
を備えたことを特徴とする暗号化ハッシュを生成する方法。
【請求項18】
前記パーソナライゼーション情報文字列を区別されたハッシュを生成するための前記salt値とともにハッシングするステップをさらに備えたことを特徴とする請求項17に記載の暗号化ハッシュを生成する方法。
【請求項19】
前記salt値は区別されたsalt値であることを特徴とする請求項18に記載の暗号化ハッシュを生成する方法。
【請求項20】
前記パーソナライゼーション情報文字列は、個人の名前を含むことを特徴とする請求項17に記載の暗号化ハッシュを生成する方法。
【請求項21】
前記パーソナライゼーション情報文字列は、個人の電子メールアドレスを含むことを特徴とする請求項17に記載の暗号化ハッシュを生成する方法。
【請求項22】
前記パーソナライゼーション情報文字列は、個人の会社名を含むことを特徴とする請求項17に記載の暗号化ハッシュを生成する方法。
【請求項23】
区別された修飾子をユーザ用に構成するステップと、
区別されたsaltを見つけるステップと、
前記区別された修飾子、区別されたsalt、および公開鍵をMビットハッシュにハッシングするステップと、
前記ハッシュ内の先行0の個数を決定するステップと、
前記ハッシュから所定の個数のビットを取り除くステップと、
テーブルルックアップを使用して前記0の個数を英数字コールサインの1桁に符号化するステップと
を備えたことを特徴とするコールサインを生成する方法。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【公開番号】特開2006−48654(P2006−48654A)
【公開日】平成18年2月16日(2006.2.16)
【国際特許分類】
【外国語出願】
【出願番号】特願2005−184991(P2005−184991)
【出願日】平成17年6月24日(2005.6.24)
【出願人】(500046438)マイクロソフト コーポレーション (3,165)
【Fターム(参考)】
【公開日】平成18年2月16日(2006.2.16)
【国際特許分類】
【出願番号】特願2005−184991(P2005−184991)
【出願日】平成17年6月24日(2005.6.24)
【出願人】(500046438)マイクロソフト コーポレーション (3,165)
【Fターム(参考)】
[ Back to top ]