特許第6233846号(P6233846)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ グーグル インコーポレイテッドの特許一覧

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6233846
(24)【登録日】2017年11月2日
(45)【発行日】2017年11月22日
(54)【発明の名称】可変長ノンスの生成
(51)【国際特許分類】
   H04L 9/32 20060101AFI20171113BHJP
   G09C 1/00 20060101ALI20171113BHJP
【FI】
   H04L9/00 675A
   G09C1/00 650B
【請求項の数】20
【全頁数】27
(21)【出願番号】特願2014-520386(P2014-520386)
(86)(22)【出願日】2012年7月13日
(65)【公表番号】特表2014-524210(P2014-524210A)
(43)【公表日】2014年9月18日
(86)【国際出願番号】US2012046765
(87)【国際公開番号】WO2013010125
(87)【国際公開日】20130117
【審査請求日】2015年7月7日
(31)【優先権主張番号】13/245,812
(32)【優先日】2011年9月26日
(33)【優先権主張国】US
(31)【優先権主張番号】13/183,028
(32)【優先日】2011年7月14日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
(74)【代理人】
【識別番号】110001195
【氏名又は名称】特許業務法人深見特許事務所
(72)【発明者】
【氏名】リウ, リーカイ
【審査官】 金沢 史明
(56)【参考文献】
【文献】 特開2010−044600(JP,A)
【文献】 特開2006−268191(JP,A)
【文献】 特開2006−211261(JP,A)
【文献】 特開2005−280285(JP,A)
【文献】 特開平10−198613(JP,A)
【文献】 特開2002−015002(JP,A)
【文献】 特開2010−140228(JP,A)
【文献】 特開2005−276192(JP,A)
【文献】 特開2009−181546(JP,A)
【文献】 特開2012−247869(JP,A)
【文献】 特開2003−323449(JP,A)
【文献】 how do they suggest alternative usernames,The Forums,SitePoint,2004年,[2016年12月26日検索],インターネット,URL,http://www.sitepoint.com/forums/showthread.php?152144-how-do-they-suggest-alternative-usernames
【文献】 Suggest Username,The Forums,SitePoint,2003年,[2016年12月26日検索],インターネット,URL,http://www.sitepoint.com/forums/showthread.php?90935-Suggest-Username
(58)【調査した分野】(Int.Cl.,DB名)
H04L 9/32
G06F 21/30−21/46
(57)【特許請求の範囲】
【請求項1】
ノンスを取得するためにコンピュータによって実行される方法であって、
少なくとも1つのキャラクタを含む第1の文字列を取得することと、
前記第1の文字列に含まれる1つ以上のキャラクタと複数の権限部−プレフィックスとに基づいて複数の権限部から1つの権限部を決定することとを含み、各権限部−プレフィックスは各権限部に対応しかつ当該権限部に割り当てられた1つ以上の文字列を含み、各権限部−プレフィックスは他の権限部−プレフィックスとは異なり、前記方法は、さらに、
前記第1の文字列がノンスしてオブジェクトまたはトランザクションに割り当てられているかどうかを決定するためのクエリを前記決定された権限部に伝送することと、
前記第1の文字列がノンスしてオブジェクトまたはトランザクションに割り当てられている場合、少なくとも1つのキャラクタを含む第2の文字列を取得することとを含み、前記第1の文字列は少なくとも1つのランダムに生成されたキャラクタを有し、前記第2の文字列は少なくとも1つのランダムに生成されたキャラクタを有し、
前記方法は、
第1の組み合わせられた文字列を生成することを含み、前記第1の組み合わせられた文字列は、前記第1の文字列に付加された前記第2の文字列を含み、
前記方法は、
前記第1の組み合わせられた文字列がノンスとしてオブジェクトまたはトランザクションに割り当てられているかどうかを決定するためのクエリを前記決定された権限部に伝送することを含む、方法。
【請求項2】
第2の文字列を取得することは、前記第2の文字列を生成することを含み、
第1の組み合わせられた文字列を生成することは、前記第2の文字列を前記第1の文字列に付加することを含む、請求項1に記載の方法。
【請求項3】
前記方法は、前記第1の組み合わせられた文字列がノンスとしてオブジェクトまたはトランザクションに割り当てられている場合、
少なくとも2つのキャラクタを含む第3の文字列を取得することと、
第2の組み合わせられた文字列を生成することとを含み、第2の組み合わせられた文字列を生成することは、前記第3の文字列を前記第1の組み合わせられた文字列に付加することを含み、
前記第2の文字列は、第1の数のキャラクタを含み、前記第3の文字列は、少なくとも1つのランダムに生成されたキャラクタを含む第2の数のキャラクタを含み、前記第2の数は、前記第1の数より大きい、請求項1または請求項2に記載の方法。
【請求項4】
前記第2の文字列は、前記第1の文字列の最後に付加される、請求項1〜請求項3のいずれか1項に記載の方法。
【請求項5】
前記第1の文字列がノンスとしてオブジェクトまたはトランザクションに割り当てられている場合、前記決定された権限部から、前記第1の文字列がノンスとしてオブジェクトまたはトランザクションに割り当てられており、新しい割当が生じていないことを示す応答を受信することと、
前記第1の文字列がノンスとしてオブジェクトまたはトランザクションに割り当てられていない場合、前記決定された権限部から、新しい割当として、前記第1の文字列の承認を示す応答を受信することと
をさらに含む、請求項1〜請求項4のいずれか1項に記載の方法。
【請求項6】
前記第1の文字列は、キャラクタセットからの1つ以上のキャラクタを含む、請求項1〜請求項5のいずれか1項に記載の方法。
【請求項7】
前記決定された権限部は、物理的機械、仮想機械、マルチプロセッサ機械上のオペレーティングシステム内のプロセス、または、プロセス内のスレッドのうちの少なくとも1つである、請求項1〜請求項6のいずれか1項に記載の方法。
【請求項8】
コンピュータによって実行される、一意のトークンを取得する方法であって、
クライアントから、一意のトークンの要求を受信することと、
第1のトークンに含まれる1つ以上のキャラクタと複数のデータベースのそれぞれに割り当てられる1つ以上のキャラクタとに基づいて前記複数のデータベースから1つのデータベースを決定することとを含み、前記複数のデータベースのそれぞれは互いに素である1つ以上のキャラクタを含み、前記方法は、
前記第1のトークンが前記決定されたデータベース内に記憶されているかどうかを決定することを含み、前記第1のトークンは、少なくとも1つのランダムに生成されたキャラクタを含前記方法は、
前記第1のトークンが前記決定されたデータベース内に記憶されている場合、前記クライアントから、第1の組み合わせられたトークンが前記決定されたデータベース内に記憶されているかどうかを決定するための要求を受信することと、
前記第1のトークンが前記決定されたデータベース内に記憶されている場合、前記第1の組み合わせられたトークンが前記決定されたデータベース内に記憶されているかどうかを決定することと
を含み、
前記第1の組み合わせられたトークンは、前記第1のトークンに付加された第2のトークンを含み、前記第2のトークンは、少なくとも1つのランダムに生成されたキャラクタを含む、方法。
【請求項9】
前記第1のトークンおよび前記第1の組み合わせられたトークンが前記決定されたデータベース内に記憶されている場合、第2の組み合わせられたトークンが前記決定されたデータベース内に記憶されているかどうかを決定することをさらに含み、前記第2の組み合わせられたトークンは、前記第1の組み合わせられたトークンに付加された第3のトークンを含む、請求項8に記載の方法。
【請求項10】
前記第3のトークンの長さは、前記第2のトークンの長さより大きい、請求項9に記載の方法。
【請求項11】
前記第1のトークンが前記決定されたデータベース内に記憶されている場合、前記クライアントから、前記第1の組み合わせられたトークンを受信することをさらに含む、請求項8〜請求項10のいずれか1項に記載の方法。
【請求項12】
前記第1のトークンが前記決定されたデータベース内に記憶されている場合、
前記第2のトークンを生成することと、
前記第1の組み合わせられたトークンを生成することと
をさらに含む、請求項8〜請求項11のいずれか1項に記載の方法。
【請求項13】
コンピュータによって実行される、一意のトークンを取得する方法であって、
クライアントから、一意のトークンの要求を受信することと、
第1のトークンに含まれる1つ以上のキャラクタと複数のデータベースのそれぞれに割り当てられる1つ以上のキャラクタとに基づいて前記複数のデータベースから1つのデータベースを決定することとを含み、前記複数のデータベースのそれぞれは互いに素である1つ以上のキャラクタを含み、
前記第1のトークンが前記決定されたデータベース内に記憶されているかどうかを決定することであって、前記第1のトークンは、少なくとも1つのランダムに生成されたキャラクタを含む、ことと、
前記第1のトークンが前記決定されたデータベース内に記憶されている場合、前記クライアントに、前記第1のトークンが前記決定されたデータベース内に記憶されていることを示すメッセージを伝送することと、
前記第1のトークンが前記決定されたデータベース内に記憶されている場合、第1の組み合わせられたトークンが前記決定されたデータベース内に記憶されているかどうかを決定することと
を含み、
前記第1の組み合わせられたトークンは、前記第1のトークンに付加された第2のトークンを含み、前記第2のトークンは、少なくとも1つのランダムに生成されたキャラクタを含む、方法。
【請求項14】
前記第1のトークンおよび前記第1の組み合わせられたトークンが前記決定されたデータベース内に記憶されている場合、第2の組み合わせられたトークンが前記決定されたデータベース内に記憶されているかどうかを決定することをさらに含み、前記第2の組み合わせられたトークンは、前記第1の組み合わせられたトークンに付加された第3のトークンを含み、前記第3のトークンは、少なくとも1つのランダムに生成されたキャラクタを含む、請求項13に記載の方法。
【請求項15】
前記第3のトークンの長さは、前記第2のトークンの長さより大きい、請求項14に記載の方法。
【請求項16】
前記第1のトークンが前記決定されたデータベース内に記憶されている場合、前記クライアントから、前記第1の組み合わせられたトークンを受信することをさらに含む、請求項13〜請求項15のいずれか1項に記載の方法。
【請求項17】
前記第1のトークンが前記決定されたデータベース内に記憶されている場合、
前記第2のトークンを生成することと、
前記第1の組み合わせられたトークンを生成することと
をさらに含む、請求項13〜請求項16のいずれか1項に記載の方法。
【請求項18】
データベースに結合されており、一意のトークンを取得するための、システムであって、
一意のトークンの要求をクライアントから受信するように構成されている受信エンジンを備え、前記要求は、前記データベースに含まれる1つ以上のキャラクタを有する第1のトークンを含み、前記データベースは他のデータベースに対して互いに素である1つ以上のキャラクタを含み、前記システムは、
前記第1のトークンが前記データベース内に記憶されているかどうかを決定するように構成されているトークン獲得エンジンとを備え、前記第1のトークンは、少なくとも1つのランダムに生成されたキャラクタを含み、
前記受信エンジンは、前記第1のトークンが前記データベース内に記憶されている場合、前記クライアントから、第1の組み合わせられたトークンが前記データベース内に記憶されているかどうかを決定するための要求を受信するように構成され、
前記トークン獲得エンジンは、前記第1のトークンが前記データベース内に記憶されている場合、前記第1の組み合わせられたトークンが前記データベース内に記憶されているかどうかを決定するように構成され、
前記第1の組み合わせられたトークンは、前記第1のトークンに付加された第2のトークンを含み、前記第2のトークンは、少なくとも1つのランダムに生成されたキャラクタを含む、システム。
【請求項19】
前記クライアントに、前記第1のトークンが前記データベース内に記憶されていることを示すメッセージを伝送するように構成されている伝送エンジンをさらに備えている、請求項18に記載のシステム。
【請求項20】
請求項1〜請求項17のいずれか1項に記載の方法をコンピュータに実行させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、ノンス生成に関する。
【背景技術】
【0002】
ノンスは、種々の目的のために使用され得る、一意の識別子である。例えば、ノンスはまた、CまたはCC++ヘッダーファイルインクルードガードにも使用され得る。ノンスはまた、URLをより短いURLに短縮するためのUniform Resource Locator(URL)短縮サービスによっても使用され得る。その後、URLは、より短いURLを使用して参照され得る。ノンスはまた、トランザクションを一意に識別するために、オンライン小売店、電子サービスプロバイダ、またはその他によっても使用され得る。
【0003】
今日使用されているノンス生成方式の1つは、カウンタをインクリメントする、中央エンティティである。例えば、自動インクリメントカウンタは、データベースシステム内で使用され、ノンスが要求されるたびにインクリメントされ得る。中央エンティティが、ノンスに対する多数の要求で圧倒される場合、中央エンティティは、要求に対して渋滞状態となる。
【0004】
業界規格GUID(グローバル一意識別子)、UUIDv1(汎用一意識別子バージョン1)、およびUUIDv4(汎用一意識別子バージョン4)は、分散型ノンス生成のための識別子規格である。UUIDは、ランダムに生成された128ビット値であり、2つのコンピュータシステムが、同一の128ビット値を伴うUUIDを生成する可能性が小さいが、一意性が、保証されず、衝突の検出が困難であると定義される。さらに、衝突の確率を低減させるために使用される識別子の長さは、いくつかの用途に対しては、無駄となり得る。例えば、UUIDによって暗号化されたキー−値対のデータベーステーブル内では、値のサイズは、キーのサイズより小さくなり得る。
【発明の概要】
【課題を解決するための手段】
【0005】
本開示は、可変長の一意のノンス取得に関する。スケーラブルな可変長ノンスを取得する方法、システム、および技法が、提供される。スケーラブルな可変長ノンスを取得するための例示的方法は、初期ノンス候補を取得することを含む。例示的方法はまた、初期ノンス候補が既に割り当てられているかどうかを決定するためのクエリを伝送することを含む。初期ノンス候補が既に割り当てられている場合、組み合わせられたノンス候補が、取得される。組み合わせられたノンス候補は、初期ノンス候補に付加されたキャラクタを含む。
【0006】
スケーラブルな可変長ノンスを取得するための例示的システムは、現在のトークンに関連付けられた要求を伝送する伝送エンジンを含む。例示的システムはまた、現在のトークンに関連付けられたメッセージを受信する受信エンジンを含む。例示的システムはさらに、新しいトークンを取得するトークン獲得エンジンと、新しいトークンを現在のトークンに付加する付加エンジンを含む。
【0007】
本発明のさらなる実施形態、特徴、および利点、ならびに本発明の種々の実施形態の構造および動作が、付随の図面を参照して、以下に詳細に説明される。
【0008】
本明細書に組み込まれ、本明細書の一部を形成する、付随の図面は、本発明の実施形態を図示し、説明とともに、さらに、実施形態の原理を説明し、当業者が、実施形態を作製および使用することを可能にする役割を果たす。図面中、類似参照番号は、同じまたは機能的類似要素を示し得る。ある要素が最初に表出する図面は、概して、対応する参照番号の最左数字によって示される。
【図面の簡単な説明】
【0009】
図1図1は、可変長ノンスを取得するための例示的システムの略図を示す。
図2図2は、可変長ノンスを取得するための例示的コンピュータシステムのブロック図を示す。
図3図3は、可変長ノンスを取得するための例示的コンピュータシステムのブロック図を示す。
図4図4Aは、トークン獲得エンジンによって取得され得る、例示的文字列を示す。図4Bは、トークン獲得エンジンによって取得され得る、例示的文字列を示す。図4Cは、例示的組み合わせられた文字列を示す。図4Dは、例示的組み合わせられた文字列を示す。
図5A図5Aは、権限部−プレフィックス範囲データを記憶する、例示的データベースを示す。図5Bは、権限部Aによって記録される割り当てられたノンスを記憶する、例示的データベースを示す。図5Cは、権限部Bによって記録される割り当てられたノンスを記憶する、例示的データベースを示す。
図5B図5Aは、権限部−プレフィックス範囲データを記憶する、例示的データベースを示す。図5Bは、権限部Aによって記録される割り当てられたノンスを記憶する、例示的データベースを示す。図5Cは、権限部Bによって記録される割り当てられたノンスを記憶する、例示的データベースを示す。
図5C図5Aは、権限部−プレフィックス範囲データを記憶する、例示的データベースを示す。図5Bは、権限部Aによって記録される割り当てられたノンスを記憶する、例示的データベースを示す。図5Cは、権限部Bによって記録される割り当てられたノンスを記憶する、例示的データベースを示す。
図6A図6Aは、2つの権限部間の例示的ノンススペース分配の略図を示す。図6Bは、ノンススペース分配後の権限部−プレフィックス範囲データを記憶する、例示的データベースを示す。図6Cは、権限部B1によって記録される割り当てられたノンスを記憶する、例示的データベースを示す。図6Dは、権限部B2によって記録される割り当てられたノンスを記憶する、例示的データベースを示す。
図6B図6Aは、2つの権限部間の例示的ノンススペース分配の略図を示す。図6Bは、ノンススペース分配後の権限部−プレフィックス範囲データを記憶する、例示的データベースを示す。図6Cは、権限部B1によって記録される割り当てられたノンスを記憶する、例示的データベースを示す。図6Dは、権限部B2によって記録される割り当てられたノンスを記憶する、例示的データベースを示す。
図6C図6Aは、2つの権限部間の例示的ノンススペース分配の略図を示す。図6Bは、ノンススペース分配後の権限部−プレフィックス範囲データを記憶する、例示的データベースを示す。図6Cは、権限部B1によって記録される割り当てられたノンスを記憶する、例示的データベースを示す。図6Dは、権限部B2によって記録される割り当てられたノンスを記憶する、例示的データベースを示す。
図6D図6Aは、2つの権限部間の例示的ノンススペース分配の略図を示す。図6Bは、ノンススペース分配後の権限部−プレフィックス範囲データを記憶する、例示的データベースを示す。図6Cは、権限部B1によって記録される割り当てられたノンスを記憶する、例示的データベースを示す。図6Dは、権限部B2によって記録される割り当てられたノンスを記憶する、例示的データベースを示す。
図7図7は、可変長ノンスを取得するための例示的方法を図示する、流れ図を示す。
図8図8は、可変長ノンスを取得するための別の例示的方法を図示する、流れ図を示す。
図9図9は、可変長ノンスを取得するための別の例示的方法を図示する、流れ図を示す。
図10図10は、可変長ノンスを取得するための別の例示的方法を図示する、流れ図を示す。
図11図11は、可変長ノンスを取得するための別の例示的方法を図示する、流れ図を示す。
【発明を実施するための形態】
【0010】
本開示は、可変長ノンスを取得する方法、システム、および技法を提供する。以下の発明を実施するための形態は、例示的実施形態を図示する、付随の図面を参照する。他の実施形態も可能であり、修正も、本説明の精神および範囲内で実施形態に成され得る。本明細書に提供される教示を利用可能な当業者は、その範囲内の追加の修正、用途、および実施形態、ならびに本発明が有意な有用となるであろう追加の分野を認識するであろう。したがって、発明を実施するための形態は、以下に説明される実施形態に限定することを意図するものではない。
【0011】
以下に説明される特徴が、図に例示されるソフトウェア、ハードウェア、ファームウェア、および/またはエンティティの多くの異なる実施形態において実装され得ることは、当業者に明白であろう。実施形態を実装するためのハードウェアの特殊制御を伴う、任意の実際のソフトウェアコードは、本説明の限定ではない。したがって、実施形態の動作挙動は、実施形態の修正および変形例が、本明細書に提示される詳細のレベルを前提として、可能であるという理解の下、説明されるであろう。
【0012】
以下の実施形態の詳細な説明では、「一実施形態」、「ある実施形態」、「ある例示的実施形態」等の言及は、説明される実施形態が、特定の特徴、構造、または特性を含み得るが、全ての実施形態が、必ずしも、その特定の特徴、構造、または特性を含まなくてもよいことを示す。さらに、そのような語句は、必ずしも、同一の実施形態を指すわけではない。さらに、特定の特徴、構造、または特性が、ある実施形態と関連して説明される場合、明示的に説明されるかどうかにかかわらず、他の実施形態と関連して、そのような特徴、構造、または特性がもたらされることも、当業者の知識内であると思量される。
【0013】
可変長ノンスを取得するための技法が、提供される。ノンスは、オブジェクトまたはトランザクションを識別するため等、種々の目的のために使用され得る、キャラクタの一意の文字列である(例えば、電子メールメッセージ識別子、グループディスカッション識別子、ブログポスト識別子、または製品識別子)。
【0014】
ノンスはまた、一意のトークン、番号、識別子、文字列、表現、記号、またはキャラクタとも称され得る。
【0015】
図1は、可変長ノンスを取得するための例示的システム100の略図を示す。システム100は、クライアント104と、権限部A108aと、権限部B108bと、送信機112とを含む。クライアント、権限部、および送信機は、直接または間接的に、ネットワーク116を経由して、互いに通信することができる。権限部A108aは、データベース124aに結合され、権限部B108bは、データベース124bに結合される。データベース124aおよび124bは、既に割り当てられているノンスを記憶し得る。
【0016】
クライアント104は、少なくとも1つのキャラクタを含む、第1の文字列またはノンス候補を取得し、第1の文字列が割り当てられているかどうかを決定するためのクエリを権限部A108aに伝送し得る。クエリは、パラメータとしての第1の文字列とともに、他の情報も含むことができる。権限部A108aは、割り当てられたノンスを記憶する、データベース124aを検索することによって、第1の文字列が割り当てられているかどうかを決定する。
【0017】
第1の文字列が、データベース124a内に記憶されていない場合、第1の文字列は、ノンスとして割り当てられていない。この場合、要求は、成功し、第1の文字列は、一意であり、既存のノンスと衝突しない。権限部A108aが、第1の文字列がノンスとして割り当てられていないと決定する場合、権限部は、第1の文字列をデータベース124aに挿入することによって、第1の文字列をノンスとして割り当てる。今後、第1の文字列が、再び、ノンス候補として使用される場合、権限部A108aは、データベース124a内の第1の文字列を見つけ、第1の文字列が既に割り当てられていると決定するであろう。利点は、本実施形態が、ノンスが1回を上回って割り当てられないように防止し、一意性を保証し得ることである。
【0018】
一実施形態では、第1の文字列が、一意であることを示すために、権限部A108aは、クライアント104に、ノンスとしての第1の文字列の承認を示す、メッセージを伝送する。承認は、クエリに応答して、ノンスとしての第1の文字列の新しい割当を示し得る。クライアント104は、メッセージを受信し、第1の文字列が、一意の識別子として使用され得ることを通知される。その後、ノンスは、オブジェクトまたはトランザクションを識別するために使用されることができる。
【0019】
競合状態は、ノンスの存在に対するクエリおよび割当の要求が、2つの別個のステップにおいて行なわれる場合、生じ得る。例えば、第1のクライアントおよび第2のクライアントが、同時に、ノンスNの存在をクエリしようとする場合、第1および第2のクライアントは両方とも、ノンスNが利用可能であると通知され得る。第1のクライアントは、そのノンス候補を請求し、第2のクライアントもまた、ノンスNが、依然として、利用可能であると誤認し、そのノンス候補を請求するであろう。
【0020】
いくつかの実施形態では、権限部108aは、文字列をノンスとしてアトミックに割り当てる。アトミック動作は、一連の動作が、システムの残りに対して、1つの単一動作であるように現れるように組み合わせられ得る、一連の動作である。一連の動作内の動作の1つが失敗する場合、アトミック動作は、失敗する。これは、完全ロールバックをもたらし得、データは、アトミック動作の起動に先立ったその状態に復元される。
【0021】
一実施形態では、アトミック動作は、文字列のノンスの存在をチェックし、文字列がノンスとして割り当てられていない場合、文字列をノンスとして割り当てること含む。一実施形態では、アトミック動作はさらに、ノンスとしての文字列の割当が、新しい割当であることを示すことを含む。割当が新しいことを示すために、権限部A108aは、例えば、クライアント104またはシステムの別の構成要素に、割当が新しく、かつデータベース124a内に以前に記憶されていないことを報告し得る。
【0022】
第1の文字列が、この要求の結果としてではなく、データベース124aに記憶されている場合、第1の文字列は、既にノンスとして割り当てられている。この場合、第1の文字列は、一意ではなく、既存のノンスと衝突する。権限部は、ノンス候補をノンスとして割り当てない。一実施形態では、権限部A108aは、クライアント104に、第1の文字列が既に割り当てられていることを示すメッセージを伝送する。クライアント104は、メッセージを受信し、第1の文字列が一意の識別子と使用され得ないことを通知される。第1の文字列が、一意ではない場合、クライアント104は、少なくとも1つのキャラクタを含む、第2の文字列を取得することができる。
【0023】
クライアント104は、第2の文字列を第1の文字列に付加または連結し、第1の組み合わせられた文字列を取得する。第1の組み合わせられた文字列は、一意性がチェックされ得る新しいノンス候補である。クライアント104は、権限部A108aに、第1の組み合わせられた文字列が割り当てられているかどうかを決定するためのクエリを伝送することができる。
【0024】
権限部A108aは、第1の組み合わせられた文字列を受信し、ノンスとして割り当てられているかどうかを決定する。第1の組み合わせられた文字列が、データベース124a内に記憶されていない場合、第1の組み合わせられた文字列は、未だノンスとして割り当てられていない。権限部A108aは、次いで、第1の組み合わせられた文字列をノンスとして割り当てることができる。第1の組み合わせられた文字列が、この要求の結果としてではなく、データベース124a内に記憶されている場合、第1の組み合わせられた文字列は、既にノンスとして割り当てられている。権限部A108aは、次いで、クライアント104に、第1の組み合わせられた文字列が一意ではないことのメッセージを送信することができる。
【0025】
いくつかの実施形態では、追加のキャラクタが、衝突が生じなくなるまで、チェックされたノンス候補に継続的に付加されることができる。チェックされたノンス候補に付加された新しい文字列を含む新しいノンス候補は、組み合わせられた文字列と称され得る。
【0026】
キャラクタは、文字、数字、記号、特殊キャラクタ、または任意のそれらの組み合わせであることができる。一実施例では、第1の文字列は、少なくとも1つのランダムなキャラクタを含む。別の実施例では、第2の文字列は、少なくとも1つのランダムなキャラクタを含む。ランダムなキャラクタは、真ランダムに、疑似ランダムに、アルゴリズム、時刻、日付、またはその他に基づいて生成されるキャラクタを含むことができる。
【0027】
多数の割り当てられたノンスが存在し得る。全ノンスを記録する1つのみの権限部を有する代わりに、ノンススペースは、複数の権限部間で共有されることができる。一実施形態では、2つのデータベースが、重複するノンススペースに関与することはない。本実施形態では、データベース124aおよび124bは、互いに素であるノンススペースを記録する。データベース124aによって記録されるノンススペースは、データベース124bによって記録されず、データベース124bによって記録されるノンススペースは、データベース124aによって記録されない。
【0028】
システム100はまた、データベース120に結合される送信機112を含む。データベース120は、どの権限部がどのノンススペースを記録するかに関する情報を記憶することができる。いくつかの実施形態では、クライアント104は、ノンス候補に関連付けられた要求を送信機112に送信する。送信機112は、データベース120を調べ、どの権限部に、要求を自動転送すべきかを決定することができる。例えば、送信機112が、要求を権限部A108aに伝送する場合、権限部A108aは、データベース124aを調べ、ノンス候補が既に割り当てられているかどうかを決定する。同様に、送信機112が、要求を権限部B108bに伝送する場合、権限部B108bは、データベース124bを調べ、ノンス候補が既に割り当てられているかどうかを決定する。
【0029】
クライアント104は、権限部に、要求を送信し、これは、送信機112によって透過的に傍受され得る。本実施形態では、クライアントは、要求を送信し、要求が傍受されたことに気付くことはない。
【0030】
多数の方式が、適切な権限部を特定し、ノンス候補が既に割り当てられているかどうかを証明するために使用されることができる。クライアント104が、送信機112の機能性を果たし得る。例えば、クライアント104は、データベースを維持し、どの権限部Aに対して、要求が行なわれるべきか決定し得る。この技法は、権限部の数が小さく、クライアント104が、テーブルを維持することができる場合、有益であり得る。別の実施例では、ユーザデバイスは、ユーザデバイスに、トークンが第1の数字から開始する場合、要求を第1の権限部に送信し、トークンが第2の数字から開始する場合、要求を第2の権限部に送信する等と命令する、ルックアップテーブルを維持することができる。別の実施例では、クライアント104は、ノンス生成プログラムへのアクセスを有する。適切な権限部およびルックアップテーブルは、ノンス生成プログラムでコードされ得、クライアント104は、プログラム内で適切な権限部を見つける。別の実施形態では、クライアント104は、権限部をランダムに取り上げ、ノンス生成反復を行なう。これは、負荷の平均化目的のために行なわれ得る。
【0031】
中央権限部が、送信機112の機能を果たし得る。例えば、クライアント104は、要求を中央権限部に送信し得る。中央権限部は、要求に応答すべきかどうか、または要求を別の権限部に伝送すべきかどうかを決定することができる。
【0032】
権限部が、物理的機械、仮想機械、マルチ−プロセッサ機械上のオペレーティングシステム内のプロセス、またはプロセス内のスレッド等、種々の方法で実装されることができる。
【0033】
システム100は、1つのクライアント、2つの権限部、および1つの送信機を参照して、本明細書に説明されるが、当業者は、システム100が、説明される実施形態の精神および範囲から逸脱することなく、2つ以上のクライアント、2つを上回るまたは下回る権限部、および1つを上回るまたは下回る送信機を有し得ることを認識するであろう。
【0034】
本明細書に説明される実施形態の種々の側面は、ソフトウェア、ファームウェア、ハードウェア、または任意のそれらの組み合わせによって実装されることができる。クライアントは、プロセッサと、ローカルメモリと、ディスプレイと、キーボード、マウス、および/またはジョイスティック等の1つ以上のコンピュータ入力デバイスとを伴う、汎用コンピュータであることができる。代替として、クライアントは、例えば、モバイルハンドセット等の特殊コンピューティングデバイスであることができる。クライアントは、インターネット等の1つ以上のネットワークを経由して、1つ以上の権限部と通信する。クライアントと同様に、権限部も、データをクライアントにサーブ可能な任意の汎用コンピュータを使用して実装されることができる。
【0035】
クライアント、権限部、または送信機の各々は、任意のコンピューティングデバイス上に実装され得る。そのようなコンピューティングデバイスは、限定ではないが、パーソナルコンピュータ、携帯電話等のモバイルデバイス、ワークステーション、内蔵システム、ゲームコンソール、テレビ、セットトップボックス、または任意の他のコンピューティングデバイスを含むことができる。さらに、コンピューティングデバイスは、限定ではないが、命令を実行および記憶するためのプロセッサおよびメモリを有する、デバイスを含むことができる。ソフトウェアは、1つ以上のアプリケーションおよびオペレーティングシステムを含み得る。ハードウェアは、限定ではないが、プロセッサ、メモリ、およびグラフィカルユーザインターフェースディスプレイを含むことができる。コンピューティングデバイスはまた、複数のプロセッサおよび複数の共有または別個のメモリ構成要素を有し得る。例えば、コンピューティングデバイスは、クラスタ化コンピューティング環境またはサーバファームであり得る。
【0036】
ネットワーク116は、データ通信を搬送することができる、任意のネットワークまたはネットワークの組み合わせであることができ、本明細書では、コンピュータネットワークと称され得る。そのようなネットワーク116は、限定ではないが、ローカルエリアネットワーク、中規模ネットワーク、および/またはインターネット等の広域ネットワークを含むことができる。ネットワーク116は、限定されないが、World Wide Webプロトコルおよび/またはサービスを含む、プロトコルおよび技術をサポートすることができる。中間ウェブサーバ、ゲートウェイ、または他のサーバが、用途または環境に応じて、システム100の構成要素間に提供され得る。
【0037】
図2は、可変長ノンスを取得するための例示的コンピュータシステム200のブロック図を示す。システム200は、ネットワーク116を経由して通信し得る、クライアント104を含む。クライアント104は、トークン獲得エンジン204と、付加エンジン208と、伝送エンジン212と、受信エンジン216とを含む。
【0038】
トークン獲得エンジン204は、トークンを取得する。一実施形態では、トークン獲得エンジン204は、トークンを生成することによって、トークンを取得する。トークンは、トークン生成の公知の方法に従って生成され得る。別の実施形態では、トークン獲得エンジン204は、ネットワーク116を経由して(例えば、受信エンジン216を介して、サーバから)、トークンを取得する。トークンは、少なくとも1つのキャラクタを含む、文字列であることができる。トークン獲得エンジン204は、付加エンジン208、伝送エンジン212、または両方に結合され得る。伝送エンジン212は、ネットワーク116を経由して(例えば、権限部または送信機に)、メッセージを伝送し得る。例えば、伝送エンジン212は、トークン獲得エンジン204によって取得される第1のトークンが一意であるか、または割り当てられているかを決定するためのクエリを伝送し得る。
【0039】
受信エンジン216は、ネットワーク116を経由して(例えば、権限部または送信機から)メッセージを受信し得る。例えば、受信エンジン216は、クエリに関連付けられた応答を受信し得る。一実施例では、応答は、ノンスとしての第1の文字列の承認を示すことができる。本実施例では、承認は、クエリに応答して、新しい割当を示し得る。別の実施例では、応答は、第1のトークンがノンスとして既に割り当てられていることを示すことができる。本実施例では、割当ステータスの変更は、生じていない。
【0040】
応答が、第1のトークンが既に割り当てられていることを示す場合、トークン獲得エンジン204は、第2のトークンを取得し得る。付加エンジン208は、第2のトークンを第1のトークンに付加または連結し、第1の組み合わせられたトークンを取得することができる。付加エンジン208は、2つのトークンを入力として受け取り、2つのトークンを付加し、第1の組み合わせられたトークンを取得し得る。
【0041】
一実施形態では、クライアント104は、クエリに応答して、割り当てられた第1のトークンを受信する。本実施形態では、付加エンジン208は、第1のトークンを受信エンジン216から、第2のトークンをトークン獲得エンジン204から受け取り、これらの2つのトークンを一緒に付加し得る。別の実施形態では、クライアント104は、どのノンス候補が送信されたかを記録する。本実施形態では、付加エンジン208は、第1のトークン(図示せず)に関して、データベースを調べ、第2のトークンをトークン獲得エンジン204から受信し、これらの2つのトークンを一緒に付加し得る。
【0042】
ノンス候補に付加されるキャラクタは、ランダムに生成され得る。この技法の利点は、ノンス候補の均一なランダム構成が、権限部間の負荷の平均化機構としての役割を効果的に果たし得ることである(以下に詳細)。
【0043】
第2のトークンは、異なる位置において、第1のトークンに挿入または付加されることができる。例えば、第2のトークンは、第1のトークンの最後に、第1のトークンの最初に、または第1のトークンの最初と最後との間の任意の位置に挿入されることができる。第2のトークンが、第1のトークンの最後に挿入されると、第1のトークンは、組み合わせられたトークン内の第2のトークンの前に現れる。伝送エンジン212は、ネットワーク116を経由して、組み合わせられたトークンを伝送し、組み合わせられたトークンが割り当てられているかどうかチェックすることができる。
【0044】
いくつかの実施形態では、ノンス候補は、衝突が生じ、別のノンス候補クエリが行なわれるたびに増大する。一実施形態では、少なくとも1つのキャラクタが、衝突が生じ、ノンス候補クエリが行なわれる場合、ノンス候補(例えば、第1のトークンまたは組み合わせられたトークン)に付加される。いくつかの実施形態では、ノンス候補は、1度に1つの数字を増大させる。本実施形態では、ノンス候補の長さは、衝突が生じ、ノンス候補クエリが行なわれるたびに、1つずつ増加し得る。ノンス候補を1度に1つのキャラクタを増大させることは、時間がかかり得る。
【0045】
別の実施形態では、固定数のキャラクタが、衝突が生じ、ノンス候補クエリが行なわれる場合、ノンス候補に付加される。複数のキャラクタが、衝突が生じ、ノンス候補クエリが行なわれる場合、付加され得る。例えば、ノンス候補は、1度にj桁増加することができる。本実施形態では、ノンス候補の長さは、衝突が生じ、ノンス候補クエリが行なわれるたびに、jずつ増加し得る。
【0046】
別の実施形態では、異なる数のキャラクタが、衝突が生じ、ノンス候補クエリが行なわれる場合、ノンス候補に付加される。一実施例では、ノンス候補に付加されるキャラクタの数は、衝突が生じ、ノンス候補クエリが行なわれる場合、指数関数的に増加する。最初に取得されたトークンの長さは、第2の取得されたトークンの長さを上回らない。本実施例では、ノンス候補は、指数関数的に増大することができ、k倍の可変長ノンス候補であることができる。例えば、初期ノンス候補が既に割り当てられている場合、2つのキャラクタが、取得され、初期ノンスに付加されることができる。新しいノンス候補は、割り当てられているかどうかを決定するためにチェックされることができる。既に割り当てられている場合、例えば、一意の識別子が見出されるまで、4つのキャラクタが、取得され、チェックされたノンス候補に付加されることができ、次いで、8つのキャラクタが、取得され、チェックされたノンス候補に付加されることができる。
【0047】
識別子長が長いほど、衝突の確率は、低くなり得る。しかしながら、前述の利点のために、より短い文字列を有することが有益であり得る。生成されたノンス候補は、既に生成されたノンスのセットの中で可能な最短長である傾向となり得る。
【0048】
一実施例では、第1の組み合わせられたトークンは、第1のトークンに付加された第2のトークンを含む。第1の組み合わせられたトークンが既に割り当てられている場合、第3のトークンが、取得される。第2の組み合わせられたトークンは、第3のトークンを第1の組み合わせられたトークンに付加することによって、取得されることができる。第2のトークンが、第1の数のキャラクタを含み、第3のトークンが、第2の数のキャラクタを含む場合、第2の数は、第1の数を上回る。
【0049】
代替実施形態では、クライアント104は、示されるものより多いまたは少ない構成要素を含み得ることに留意されたい。例えば、図2に示される構成要素の任意のサブセットが、実際、単一構成要素として具現化され得る。例えば、トークン獲得エンジン204および付加エンジン208の機能性は、単一デバイスまたはモジュール内で組み合わせられ得る。図2の機能的構成要素の他の組み合わせもまた、当業者に公知となるであろうように、可能であろう。
【0050】
いくつかの実施形態では、クライアント104は、付加エンジン208を含まない。本実施形態では、例えば、クライアント104は、トークン獲得エンジン204と、伝送エンジン212と、受信エンジン216とを含み得る。一実施例では、トークン獲得エンジン204は、第1のトークンを取得し、伝送エンジン112は、ネットワーク116を経由して、権限部A108aに、第1のトークンに関連付けられたメッセージを伝送する。受信エンジン216は、ネットワーク116を経由して、一意のノンスを含む、メッセージへの応答を受信し得る。一意のノンスは、しかしながら、伝送された第1のトークンであってもなくてもよい。本実施例では、権限部A108aは、第1のトークンが既に割り当てられていることを決定し、第2のトークンを取得し、第1のトークンに付加し得る。権限部A108aは、衝突が生じなくなり、一意のノンスが取得されるまで、ノンス候補をチェックおよび付加し続け得る。一意のノンスが取得されると、権限部A108aは、新しいノンスが取得されたことを示すメッセージを伝送することができる。
【0051】
図3は、可変長ノンスを取得するための例示的コンピュータシステム300のブロック図を示す。システム300は、ネットワーク116を経由して通信し得る権限部A108aを含む。権限部A108aは、トークン獲得エンジン304と、付加エンジン308と、伝送エンジン312と、受信エンジン316と、データベース320とを含む。データベース320は、ノンス割当を記憶する。
【0052】
受信エンジン316は、ネットワーク116を経由して、メッセージを受信し得る。受信エンジン316は、クライアント104から、現在のトークンに関連付けられたクエリを受信する。クエリは、現在のトークンを含むことができる。権限部A108aは、データベース320を調べ、現在のトークンが既にノンスとして割り当てられているかどうかを決定する。現在のトークンがノンスとして割り当てられていない場合、権限部A108aは、現在のトークンをデータベース320に挿入し、伝送エンジン312は、クライアント104に、現在のトークンの承認を示すメッセージを送信する。現在のトークンが、既にノンスとして割り当てられている場合、トークン獲得エンジン304は、新しいトークンを取得し得る。付加エンジン308は、新しいトークンを現在のトークンに付加し、組み合わせられたトークンを取得し得る。権限部A108aは、データベース320を調べ、組み合わせられたトークンが割り当てられているかどうか決定し得る。権限部A108aは、一意のノンスが見出されるまで、トークンを取得し、組み合わせられたトークンに付加し続け得る。伝送エンジン312は、クライアント104に、一意のノンスを伝送し得る。
【0053】
代替実施形態では、権限部A108aは、示されるものより多いまたは少ない構成要素を含み得る。例えば、図3に示される構成要素の任意のサブセットは、実際、単一構成要素として具現化され得る。例えば、トークン獲得エンジン304および付加エンジン308の機能性は、単一デバイスまたはモジュール内に組み合わせられ得る。図3の機能的構成要素の他の組み合わせもまた、当業者に公知であろうように、可能である。
【0054】
一実施形態では、例えば、権限部A108aは、トークン獲得エンジン304または付加エンジン308を含まない。本実施形態では、例えば、権限部A108aは、伝送エンジン312と、受信エンジン316と、データベース320とを含む。トークンが受信され、権限部A108aが、トークンが既に割り当てられていると決定すると、伝送エンジン312は、クライアント104に、トークンが既に割り当てられていることを示すメッセージを伝送することができる。権限部A108aは、一意のトークンが受信されるまで、クライアント104から、クエリを受信し続け得る。
【0055】
データベース320は、ノンス割当に関する情報を記憶する。クライアントは、データベース320をメモリ内に維持し得る。限定されたドメイン用途の場合、ノンス割当は、メインメモリ内に全体的に記憶され得る。
【0056】
ノンス割当は、メインメモリ、ローカルハードディスク、およびネットワーク−エリア記憶デバイスの組み合わせを使用して実装される汎用データベース内に記憶されることができる。
【0057】
一実施形態では、データベースは、ファイルシステムを使用して実装される。ノンス割当は、ファイルシステム内に記憶され得る。ファイルシステム自体、RAID(低価格ディスク冗長アレイ)等の別のスケーラビリティ方式またはNFS(ネットワークファイルシステム)等のある形態の分散型ファイルシステムを使用し得る。この場合、権限部は、単純なものに維持され得、ノンスを確保するためのアトミック動作は、排他的フラグを伴うファイルを作成するためにシステムコールを呼び出すことによって行なわれ、
そのファイルが存在する場合、システムコールが失敗する。大量のファイルをファイルシステム上に記憶する場合、ディレクトリツリーが、プレフィックスに従って、ファイルを分散させるように作成されることができる。
【0058】
図2および3は、実施形態またはその一部が、コンピュータ読み取り可能なコードとして実装され得る、例示的コンピュータシステムを図示する。本明細書に説明される実施形態の種々の側面は、ソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせによって実装されることができる。実施例では、トークン獲得エンジン204および付加エンジン208は、したがって、1つ以上のコンピューティングデバイス上で実行するソフトウェアとして実装され得る。プログラマブルハードウェアを使用する実装は、本明細書に説明される機能を果たすことが可能な任意の市販および周知のコンピュータを使用し得る。
【0059】
種々の実施形態が、例示的コンピュータシステム200および300に照らして説明される。コンピュータシステム200および300は、1つ以上のプロセッサを含み得る。例えば、前述のエンジンは、プロセッサ(例えば、デュアルプロセッサまたは複数の機械にわたって散在)を使用して実装されることができる。プロセッサは、特殊または汎用プロセッサであることができ、通信インフラストラクチャ(例えば、バスまたはネットワーク)に接続されることができる。コンピュータシステムはまた、ランダムアクセスメモリ(RAM)等のメインメモリを含み、また、二次メモリを含み得る。二次メモリは、例えば、ハードディスクドライブおよび/またはリムーバブル記憶ドライブを含み得る。リムーバブル記憶ドライブは、フロッピー(登録商標)ディスクドライブ、磁気テープドライブ、光ディスクドライブ、フラッシュメモリ等を含み得る。リムーバブル記憶ドライブは、公知の様式において、リムーバブル記憶ユニットからの読み取り、および/またはそこに書き込みを行なう。リムーバブル記憶ユニットは、リムーバブル記憶ドライブによって読み取られ、かつ書き込まれるフロッピー(登録商標)ディスク、磁気テープ、光ディスク等を含み得る。当業者によって理解されるように、リムーバブル記憶ユニットは、その中にコンピュータソフトウェアおよび/またはデータを記憶するコンピュータ読み取り可能な記憶媒体を含む。
【0060】
代替実装では、二次メモリは、コンピュータプログラムまたは他の命令が、コンピュータシステム200および300内にロードされることを可能にするための他の類似手段を含み得る。そのような手段は、例えば、リムーバブル記憶ユニットおよびインターフェースを含み得る。そのような手段の実施例は、プログラムカートリッジおよびカートリッジインターフェース(ビデオゲームデバイスに見出されるもの等)、リムーバブルメモリチップ(EPROMまたはPROM等)および関連付けられたソケット、ならびにソフトウェアおよびデータが、リムーバブル記憶ユニットからコンピュータシステム200および300に転送されることを可能にする、他のリムーバブル記憶ユニットおよびインターフェースを含み得る。
【0061】
コンピュータシステム200および300はまた、通信インターフェースを含み得る。通信インターフェースは、ソフトウェアおよびデータが、コンピュータシステム200および300と外部デバイスとの間で転送されることを可能にする。通信インターフェースは、モデム、ネットワークインターフェース(Ethernet(登録商標)カード等)、通信ポート、PCMCIAスロットおよびカード等を含み得る。通信インターフェースを介して転送されるソフトウェアおよびデータは、通信インターフェースによって受信可能な電子、電磁、光学、または他の信号であり得る信号の形態にある。これらの信号は、通信経路を介して、通信インターフェースに提供される。通信経路は、信号を搬送し、ワイヤまたはケーブル、光ファイバ、電話回線、携帯電話リンク、RFリンク、または他の通信チャネルを使用して、実装され得る。
【0062】
本書では、用語「コンピュータプログラム製品」および「コンピュータ読み取り可能な媒体」は、概して、リムーバブル記憶ユニット、リムーバブル記憶ユニット、およびハードディスクドライブ内にインストールされたハードディスク等の記憶媒体を指すために使用される。コンピュータプログラム製品およびコンピュータ読み取り可能な媒体はまた、メモリ半導体(例えば、DRAM等)であり得る、メインメモリおよび二次メモリ等の1つ以上のメモリを指すことができる。これらのコンピュータプログラム製品は、ソフトウェアをコンピュータシステム200および300に提供するための手段である。
【0063】
コンピュータプログラム(コンピュータ制御論理とも呼ばれる)は、メインメモリおよび/または二次メモリ内に記憶される。コンピュータプログラムはまた、通信インターフェースを介して、受信され得る。そのようなコンピュータプログラムは、実行されると、コンピュータシステム200および300が、本明細書に論じられるような実施形態を実装することを可能にする。特に、コンピュータプログラムは、実行されると、プロセッサが、以下に論じられる方法におけるステップ等、実施形態のプロセスを実装することを可能にする。故に、そのようなコンピュータプログラムは、コンピュータシステム200および300のコントローラを表す。実施形態が、ソフトウェアを使用して実装される場合、ソフトウェアは、コンピュータプログラム製品内に記憶され、リムーバブル記憶ドライブ、インターフェース、またはハードドライブを使用して、コンピュータシステム200および300にロードされ得る。
【0064】
実施形態はまた、任意のコンピュータ読み取り可能な媒体上に記憶されたソフトウェアを有するコンピュータ製品を対象とし得る。そのようなソフトウェアは、1つ以上のデータ処理デバイス内で実行されると、データ処理デバイスを本明細書に説明されるように動作させる。
【0065】
図4Aは、トークン獲得エンジンによって取得され得る、例示的文字列400を示す。文字列400は、値「5」を有する。文字列400は、既に割り当てられていることも、割り当てられていないこともあるノンス候補である。ノンス候補は、キャラクタセットからのキャラクタを含み得る。例えば、ノンス候補は、キャラクタセット{0、1、2、3、4、5、6、7、8、9}内のキャラクタであることができる。ノンスプレフィックスもまた、キャラクタセット内で定義されることができる。例えば、前述のキャラクタセットを使用して、ノンスプレフィックスは、数字のみから成り得る。
【0066】
少なくとも1つの権限部が、発行されたノンスを記録するように指定される。指定される権限部の数は、記憶されるノンスの予想数、利用可能なメモリスペース、権限部の処理力、または他の要因等、多くの要因に依存し得る。一実施形態では、各権限部は、そのノンススペース内の発行されたノンスのみ、記録する。本実施形態では、第1の権限部によって維持されるノンススペースは、第2の権限部によって維持されるノンススペースとは互いに素である。ノンススペースは、ノンスプレフィックスまたはノンスの長さ等、ノンスの異なる特性によって決定され得る。図1では、2つの権限部が、発行されたノンスを記録するように指定される。送信機112は、権限部およびノンススペースを記録する、データベース120に結合される。データベース120は、ある実施形態による、権限部−プレフィックス範囲データを記憶することができる。
【0067】
図5Aは、権限部−プレフィックス範囲データを記憶する、例示的データベース500を示す。本図では、データベース500は、2つの権限部、権限部Aおよび権限部Bに関する情報を記憶する。例えば、権限部AおよびBは、所定のキャラクタセット{0、1、2、3、4、5、6、7、8、9}内のプレフィックスを有する、ノンスを記憶する。図5Aでは、権限部Aは、プレフィックス範囲0−4を有する、発行されたノンスを記録するように指定される。言い換えると、数字0−4から開始するノンスは、権限部Aによって取り扱われる。権限部Bは、プレフィックス範囲5−9を有する、発行されたノンスを記録するように指定される。言い換えると、数字5−9から開始するノンスは、権限部Bによって取り扱われる。
【0068】
図5Bは、権限部Aによって記録される割り当てられたノンスを記憶する、例示的データベース504を示す。図5Cは、権限部Bによって記録される割り当てられたノンスを記憶する、例示的データベース508を示す。図5Bに示されるように、データベース504は、0−4の範囲のプレフィックスを有する、ノンスの複数のエントリを有する。特に、文字列0、3、4、35、および35g9が、ノンスとして割り当てられている。図5Cに示されるように、データベース508は、5−9の範囲のプレフィックスを有する、ノンスの複数のエントリを有する。特に、文字列5、6、8、9、58、82、および825fが、ノンスとして割り当てられている。
【0069】
送信機112が、文字列400が一意であるかどうかを決定するための要求を受信すると、送信機112は、文字列400のプレフィックスに基づいて、どの権限部に、要求をダイレクトすべきかを決定する。文字列400は、プレフィックス範囲5−9を有するので、送信機112は、要求を権限部Bにダイレクトするであろう。権限部Bが、要求を受信すると、権限部Bは、文字列400が既に割り当てられているかどうか確認するためのチェックを行なう。図5Cに示されるように、データベース508内の第1のエントリは、「5」である。したがって、文字列400は、既に割り当てられている。クライアント104は、文字列400が既に割り当てられていることを示す、要求に関連付けられたメッセージを受信する。
【0070】
クライアント104は、種々の方法において、これを通知されることができる。例えば、権限部Bは、クライアント104に、文字列が一意ではなく、新しい割当が生じていないことを示す応答を送信する。クライアント104は、次いで、別の文字列を取得し、それをチェックされた文字列に付加するように進めることができる。別の実施形態では、権限部Bは、クライアント104に、異なる文字列を伴う新しい割当が生じたことを示す応答を送信する。この場合、初期文字列は、既に割り当てられており、権限部Bは、次いで、別の文字列を取得し、それをチェックされた文字列に付加するように進められる。別の実施形態では、権限部Bは、送信機112に、文字列400が既に割り当てられていることを示すメッセージを送信する。順に、送信機112は、クライアント104に、文字列が既に割り当てられていることを示すメッセージを送信するであろう。
【0071】
図4Bは、トークン獲得エンジンによって取得され得る、例示的文字列404を示す。文字列404は、値「8」を有する。図4Cは、例示的組み合わせられた文字列408を示す。組み合わせられた文字列408は、文字列400の最後に付加された文字列404を含む。組み合わせられた文字列408は、ノンス候補であり、既にノンスとして割り当てられていることも、割り当てられていないこともある。
【0072】
ノンスプレフィックスは、文字列400および組み合わせられた文字列408に対して同一であるので(例えば、5)、同一の権限部(例えば、権限部B)が、ノンス候補が一意であるかどうかを決定する。権限部Bは、組み合わせられた文字列408が既に割り当てられているかどうか確認するためのチェックを行なう。図5Cに示されるように、データベース508内の第5のエントリは、「58」である。したがって、組み合わせられた文字列408は、既に割り当てられている。ノンス候補である組み合わせられた文字列408が、既に割り当てられているので、別の文字列が、取得されることができる。
【0073】
図4Dは、例示的組み合わせられた文字列416を示す。組み合わせられた文字列416は、組み合わせられた文字列408(または、チェックされたノンス候補)の最後に付加された文字列412を含む。組み合わせられた文字列416は、ノンス候補であり、既にノンスとして割り当てられていることも、割り当てられていないこともある。
【0074】
ノンスプレフィックスは、組み合わせられた文字列408および組み合わせられた文字列416に対して同一であるので(例えば、5)、同一の権限部(例えば、権限部B)が、ノンス候補が一意であるかどうかを決定する。権限部Bは、組み合わせられた文字列416が既に割り当てられているかどうか確認するためのチェックを行なう。図5Cに示されるように、データベース508内に、組み合わせられた文字列416を有するエントリが存在しない。これは、組み合わせられた文字列416が、未だ割り当てられておらず、ノンスとして承認され得ることを示す。権限部Bは、新しい割当として、組み合わせられた文字列416の承認を示すことができ、組み合わせられた文字列416をデータベース508内に挿入することができる。
【0075】
各一意のノンス候補は、データベースから情報を読み取るか、またはその中に情報を挿入する、クエリをもたらし得る。データベースは、データが増大し続けると、非常に低速となり得る。データベースは、2つ以上の権限部間に分配され得る。例えば、権限部を拡張することが決定されると、権限部に関連付けられたノンススペースは、少なくとも2つの権限部間に分配されることができる。
【0076】
図6Aは、2つの権限部間の例示的ノンススペース分配の略図を示す。権限部B604に関連付けられ、それによって取り扱われるノンススペースは、分割され、権限部B1 608および権限部B2 612によって取り扱われるであろう。
【0077】
図6Bは、ノンススペース分配後の権限部−プレフィックス範囲データを記憶する、例示的データベース616を示す。図6Bでは、データベース616は、3つの権限部、権限部A、権限部B1、および権限部B2に関する情報を記憶する。権限部Aは、プレフィックス範囲0−4を有する、発行されたノンスを記録するように指定される。権限部B1は、プレフィックス範囲5−7を有する、発行されたノンスを記録するように指定される。権限部B2は、プレフィックス範囲8−9を有する、発行されたノンスを記録するように指定される。
【0078】
図5Aに戻って参照すると、権限部Bは、ノンス−プレフィックス範囲5−9を取り扱う。図6Bに示されるように、図5Aにおいて権限部Bによって以前に取り扱われていたノンス−プレフィックス範囲(例えば、5−9)は、分配され、権限部B1(例えば、5−7)および権限部B2(例えば、8−9)によって取り扱われるであろう。分配後、権限部B604に関連付けられた少なくとも1つのエントリが、権限部B1 608に転送または移動される。その結果、権限部B1 608は、権限部B604によって記憶されていた少なくとも1つのノンスを記憶する。
【0079】
図6Cは、権限部B1によって記録される割り当てられたノンスを記憶する、例示的データベース620を示す。図6Dは、権限部B2によって記録される割り当てられたノンスを記憶する、例示的データベース624を示す。
【0080】
図5Cに戻って参照すると、権限部Bは、データベース508内に、7つの割り当てられたノンスエントリ5、6、8、9、58、82、および825fを有する。これらのノンスエントリは、権限部B1 608と権限部B2 612との間で分配される。権限部B1 608は、5、6、または7から開始する数字を有するノンスを取り扱い、権限部B2 612は、8または9から開始する数字を有するノンスを取り扱う。特に、図6Cに示されるように、権限部B1は、データベース620内に、プレフィックス範囲5−7を有するノンスの複数のエントリを有する。プレフィックス範囲5−7(例えば、5、6、および58)を有するノンスは、権限部B1によって記録される(図6C参照)。図6Dに示されるように、権限部B2は、データベース624内に、プレフィックス範囲8−9を有するノンスの複数のエントリを有する。プレフィックス範囲8−9(例えば、8、9、82、および825f)を有するノンスは、権限部B2によって記録される(図6D参照)。
【0081】
権限部B604および権限部B1 608は、同一の権限部であり得る。プレフィックス範囲8−9を有するそれらのエントリのみ、権限部B2 612に移動され、プレフィックス範囲5−7を有する他のエントリは、権限部Bに残留する。移動されたエントリは、権限部B604が、移動されたエントリをもはや記憶していないように、権限部B604から削除され得る。
【0082】
送信機112が、ノンス要求を受信すると、送信機は、データベース616を調べ、どの権限部に要求が伝送されるべきかを決定する。例えば、ノンス候補が、値「79h」を有する場合、ノンス候補のプレフィックスは、「7」である。送信機112は、この要求を権限部B1に自動転送する。別の実施例では、ノンス候補が、値「8xe25h」を有する場合、ノンス候補のプレフィックスは、「8」である。送信機112は、この要求を権限部B2に自動転送する。
【0083】
ノンスプレフィックスは、キャラクタセットから取得される。例えば、ノンス候補が、取得される場合、所定のキャラクタセット内のキャラクタが、ランダムな均一分布内から取り上げられ得る。多くのプログラミング言語が、標準的均一分布に従って効果的に分布される、擬乱数を生成可能である。ランダムな均一分布以外の他の分布も、使用され得る。例えば、一実装では、正規分布が、使用されることができる。
【0084】
さらに、ノンススペースは、種々の状況下、分配されることができる。例えば、データベースのノンススペースは、データベースが、データベース内に閾値データ量を記憶している場合、分配されることができる。
【0085】
ノンスプレフィックスは、少なくとも1つのキャラクタを含む。図6Bでは、プレフィックスは、1桁のプレフィックスを含む(例えば、権限部Aは、プレフィックス範囲0−4を有するノンスを記録し、権限部B1は、プレフィックス範囲5−7を有するノンスを記録し、権限部B2は、プレフィックス範囲8−9を有するノンスを記録する)。
【0086】
さらに、プレフィックスは、文字、数字、記号、特殊キャラクタ、またはその他等の任意のキャラクタであることができる。プレフィックスは、任意のキャラクタ(例えば、キャラクタセットから)を含むことができる。例えば、第1の権限部は、キャラクタセット{*、#、$}内の第1のキャラクタを有するノンスを記憶し、第2の権限部は、キャラクタセット{@、!、?、&}内の第1のキャラクタを有するノンスを記憶する。他のキャラクタもまた、使用されることができる。さらに、ノンススペースは、可変プレフィックスを使用して分割されることができる。例えば、権限部は、プレフィックス範囲a−−iri、irj−−−riq、またはrir−−zを有する。別の実施形態では、第1の権限部は、プレフィックス範囲A−CおよびM−Zを有し、第2の権限部は、プレフィックス範囲D−Lを有する。
【0087】
プレフィックスは、任意の数のキャラクタを有することができる。いくつかの実施形態では、プレフィックスは、少なくとも2つのキャラクタを含み得る。例えば、第1の権限部は、プレフィックス範囲AA−MAを有するノンスを記録することができ、第2の権限部は、プレフィックス範囲MB−ZZを有するノンスを記録することができる。第1の権限部が、閾値データ量を記憶している場合、第1の権限部によって記録されるノンススペースは、分配される。本実施形態では、第1の権限部は、プレフィックス範囲AA−FAを有するノンスを記録することができ、第3の権限部は、プレフィックス範囲FB−MAを有するノンスを記録することができる。この技法の利点は、スケーラブルなノンス生成方式を提供し、権限部が、スケーラブルであり、一意のノンスが、取得されることである。
【0088】
さらに、プレフィックスは、チェックされるキャラクタの異なるタイプを含むことができる。例えば、プレフィックスは、文字である、第1のキャラクタと、数字である、第2のキャラクタとを含む。例えば、第1の権限部は、プレフィックス範囲A−F内の第1のキャラクタおよびプレフィックス範囲0−2内の第2のキャラクタを有する、ノンスを記憶し、第2の権限部は、プレフィックス範囲A−F内の第1のキャラクタおよびプレフィックス範囲3−8内の第2のキャラクタを有する、ノンスを記憶する。
【0089】
さらに、異なる技法が、適切な権限部を決定するために使用され得る。ノンススペースは、ノンスのプレフィックス範囲に従って、分割されることに限定されない。ノンススペースは、他の要因を使用して、分割されることもできる。例えば、ノンススペースは、ノンスの最後の2つのキャラクタに基づいて、分配される。ノンススペースを分配するための他の方式も、使用され得ることを理解されたい。別の実施形態では、送信機112は、送信機までの権限部の近接性に基づいて、要求を適切な権限部に伝送する。別の実施形態では、送信機112は、要求を権限部にランダムに伝送する。これは、負荷の平均化技法として使用され得る。
【0090】
ノンスは、製品または顧客名等の追加の情報に関連付けられ得る。ノンスが、新しく割り当てられると、データベースに入力される。既存のノンスが見つけられると、既存のノンスは、修正されない。権限部は、ノンスに関連付けられたデータを記憶することができ、ノンスをキーとして使用して、データの後の読み出しを可能にする。ノンスは、一次キーとして使用され、データベース内のオブジェクト(例えば、製品または顧客名)を識別し得る。ノンスは、顧客を識別するための顧客番号であり得、ノンス(例えば、顧客番号)は、データベース内に顧客とともに記憶されることができる。別の実施例では、ノンスは、その関連付けられたより長いURLとともに記憶され得る、短URLである。
【0091】
ノンスはまた、権限部がノンスを発行した、ノンスが発行された日付および時間等のメタデータ、または他のノンスに関する他の情報に関連付けられ得るメタデータは、データベース内に記憶され、ノンスに関連付けられることができる。
【0092】
さらに、ノンス候補が既に割り当てられているかどうかを決定する場合、権限部は、ルックアップ方法を使用して、その独自のノンススペース内のノンスの存在を決定する。図5A−5Cおよび6B−6Dでは、ノンス情報を記憶するデータベースは、テーブルとして説明される。バイナリ検索ツリー、アレイ、B−ツリー、またはその他等、他のデータ構造もまた、使用され得る。いくつかのデータ構造は、クライアントまたはサーバの一意の識別子の予想量、プログラミング人員、または処理力等の要因に応じて実装するために、その他より効率的または低コストであり得る。
【0093】
開示されるシステムは、ノンスの高速生成を提供し得る。スケーラブルな記憶バックエンドは、複数のバックエンドサーバ上の分散型データを含み得る。一実施形態では、スケーラブルな記憶バックエンドは、O(lg n)ルックアップ時間を有する。1キャラクタ識別子が、ランダムに生成され、権限部が、記憶バックエンド内でその識別子の検索を行なう。その識別子が見つけられない場合、その識別子は、挿入される。そうでなければ、別のキャラクタが、生成され、既存の識別子に付加される。権限部は、記憶バックエンド内で新しい文字列の別の検索を行なう。これは、衝突が生じなくなるまで続く。nが、既に生成されたノンスの数であり、乱数生成が、O(1)時間である場合、既存のノンスをルックアップするための時間は、O(lg n)である。さらに、生成された数字の数もまた、O(lg n)である。この場合、ノンスを生成するための起動時間は、O(lg n*lg n)である。別の実施形態では、記憶バックエンドは、ルックアップを並列処理するために分け合われる。記憶バックエンドの分け合いは、記憶バックエンドを区画化し、分散型サーバにわたって、区画を広げることを含み得る。
【0094】
図7は、可変長ノンスを取得するための例示的方法700を図示する、流れ図を示す。図8は、可変長ノンスを取得するための例示的方法800を図示する、流れ図を示す。方法700および800は、限定を意味するものではなく、他の用途において使用され得る。例えば、方法700および800は、図2および3のシステム200および300のように、可変長ノンスを取得するために使用され得る。しかしながら、方法700および800は、システム200および300に限定されることを意味するものではない。
【0095】
図7に示されるように、例示的方法700は、文字列が取得される、段階704を含む。一実施形態では、トークン獲得エンジン204が、文字列を取得する。別の実施形態では、受信エンジン216が、文字列を取得する。段階708において、文字列が割り当てられているかどうかを決定するために、要求が伝送される。伝送エンジン212が、要求を伝送する。
【0096】
段階712において、伝送された文字列が割り当てられているかどうか決定される。段階716において、伝送された文字列が割り当てられていない場合、伝送された文字列の承認を示す、メッセージが受信される。受信エンジン216が、メッセージを受信する。
【0097】
段階720において、伝送された文字列が割り当てられている場合、新しい文字列の承認を示す、メッセージが受信される。新しい文字列は、伝送された文字列に付加された少なくとも1つのキャラクタを含み得る。権限部は、クライアントが伝送した文字列と異なる、代替文字列をノンスとして返し得る。これは、クライアントが低処理電力を有するか、または限定メモリを有する場合、有利であり得る。例えば、伝送された文字列が既に割り当てられている場合、権限部は、ノンスを取得するためのアルゴリズムを行い、次いで、ノンスの承認を示すメッセージをクライアントに送信し得る。
【0098】
新しい文字列は、伝送された文字列に付加された少なくとも1つのランダムなキャラクタを含み得る。受信エンジン216が、メッセージを受信する。段階704−720は、ソフトウェア、ハードウェア、ファームウェア、または任意のそれらの組み合わせとして実装され得る。
【0099】
図8では、例示的方法800は、前述の段階704、708、712、および716を含む。段階804において、伝送された文字列が割り当てられている場合、伝送された文字列が割り当てられていることを示すメッセージが受信される。段階808において、新しい文字列が、取得される。段階812において、伝送された文字列に付加された新しい文字列を含む、文字列が生成される。方法のプロセスフローは、次いで、段階708に進み、伝送された文字列に付加された新しい文字列を含む文字列が、割り当てられているかどうかを決定するための要求が伝送される。
【0100】
図9は、可変長ノンスを取得するための別の例示的方法900を図示する、流れ図を示す。図10は、可変長ノンスを取得するための別の例示的方法1000を図示する、流れ図を示す。図11は、可変長ノンスを取得するための別の例示的方法1100を図示する、流れ図を示す。方法900、1000、および1100は、限定を意味するものではなく、他の用途において使用され得る。例えば、方法900、1000、および1100は、図2および3のシステム200および300のように、可変長ノンスを取得するために使用され得る。しかしながら、方法900、1000、および1100は、システム200および300に限定されることを意味するものではない。
【0101】
図9に示されるように、例示的方法900は、文字列がデータベース内に記憶されているかどうかを決定するための要求が受信される、段階904を含む。段階908において、文字列がデータベース内に記憶されているかどうか決定される。段階912において、チェックされた文字列がデータベース内に記憶されていない場合、チェックされた文字列は、データベース内に挿入される。この場合、チェックされた文字列は、ノンスとして発行され得る。段階916において、チェックされた文字列の承認を示す、メッセージが伝送される。
【0102】
段階920において、チェックされた文字列がデータベース内に記憶されている場合、新しい文字列が割り当てられていることを示すメッセージが伝送される。新しい文字列は、チェックされた文字列と異なり得る。新しい文字列は、チェックされた文字列に付加された少なくとも1つのキャラクタを含む。チェックされた文字列に付加された少なくとも1つのキャラクタは、ランダムなキャラクタであり得る。
【0103】
図10では、例示的方法1000は、前述の段階904、908、912、および916を含む。段階1004において、チェックされた文字列がデータベース内に記憶されている場合、新しい文字列が、取得される。段階1008において、チェックされた文字列に付加された新しい文字列を含む文字列が、取得される。方法のプロセスフローは、次いで、段階908に進み、チェックされた文字列に付加された新しい文字列を含む文字列が、データベース内に記憶されているかどうか決定される。
【0104】
図11の例示的方法は、競合状態の発生を防止し得る。図11では、例示的方法1100は、第1の文字列のノンスの存在を決定するための第1のクエリが受信される、段階1104を含む。段階1108において、第2の文字列のノンスの存在を決定するための第2のクエリが、受信される。段階1112において、第1のクエリが最初に処理されるかどうか決定される。
【0105】
第1のクエリが最初に処理されると決定される場合、方法のプロセスフローは、次いで、段階1116に進む。第1のクエリが最初に処理されないと決定される場合、方法のプロセスフローは、次いで、段階1136に進む。
【0106】
段階1116において、アトミック動作が、開始する。段階1120において、第1のクエリが、処理される。いくつかの実施形態では、第1のクエリの処理は、第1の文字列がノンスとして割り当てられているかどうか決定し、第1の文字列が割り当てられていない場合、第1の文字列をノンスとして割り当てることを含む。第1のクエリの処理はさらに、新しいノンスとしての第1の文字列の割当が、新しい割当であることを示すステップを含み得る。段階1124において、アトミック動作は、終了する。段階1128において、第2のクエリが処理されているかどう決定される。第2のクエリが処理されている場合、方法のプロセスフローは、次いで、段階1132に進み、プロセスは、終了する。第2のクエリが処理されていない場合、方法のプロセスフローは、次いで、段階1136に進む。
【0107】
段階1136において、アトミック動作が、開始する。段階1140において、第2のクエリが、処理される。いくつかの実施形態では、第2のクエリの処理は、第2の文字列がノンスとして割り当てられているかどうか決定し、第2の文字列が割り当てられていない場合、第2の文字列をノンスとして割り当てることを含む。第2のクエリの処理はさらに、新しいノンスとしての第2の文字列の割当が、新しい割当であることを示すことを含み得る。段階1144において、アトミック動作が、終了する。段階1148において、第1のクエリが処理されているかどうか決定される。第1のクエリが処理されている場合、方法のプロセスフローは、次いで、段階1132に進み、プロセスが、終了する。第1のクエリが処理されていない場合、方法のプロセスフローは、次いで、段階1116に進む。
【0108】
セット長の長い一意の識別子(例えば、128ビット)を有するのではなく、短い一意の識別子が、可能であるとき、提供され得る。初期ノンス候補の長さは、可能であるとき、長さが短くなる傾向となるように、一意のノンスが見つけられるまで、増大し得る。可変長識別子は、一意の識別子を記憶するために要求される記憶量を軽減し得る。
【0109】
識別子は、一意性の高確率を単に有するのではなく、真に一意であり得る。
【0110】
異なる権限部が、所与のプレフィックスを有するノンスを記録するように設定され得る。プレフィックスは、ノンス候補またはトークンの第1の数のキャラクタ(例えば、最初のキャラクタ、最初の2つのキャラクタ、最初の3つのキャラクタ等)であることができる。要求は、プレフィックスに基づいて、適切な権限部にダイレクトされることができる。そのような技法は、スケーラブルであり得る。これは、一意のノンスの数を正常に拡張させ、かつ同時ノンス割当要求をサーブするという観点から、正常に拡張するであろう用途のためのノンス生成を可能にし得る。
【0111】
権限部が、閾値数のノンスを記録している場合、ノンススペースが、分配され、他の権限部が追加されることができる。権限部が、オーバーロードされると、ノンススペースを記録する権限部の数が、増加され、データベースが、2つ以上の権限部間に分配されることができる。サーバが、プレフィックス範囲に基づいて、配分される場合、データベースは、プレフィックス範囲に基づいて、分配されることができる。
【0112】
1つ以上の衝突が、特定の要求に対して生じると、最初の数キャラクタが同一のままである場合、同一の権限部が、ノンス候補が割り当てられているかどうかチェックするために使用される可能性が高い。したがって、システムが、新しいノンス候補がチェックされるたび、その要求を送信するための権限部をルックアップすることは、不必要となる。
【0113】
さらに、実施形態は、ネットワークを経由して、メッセージを送信および受信する場合、キャッシング含意(cashing implications)を有し得る。例えば、異なるサーバが、後続クエリにおいて使用される場合、ドメイン名システム(DNS)ルックアップが、異なるサーバに対して行なわれ、伝送制御プロトコル(TCP)接続が、異なるサーバと確立される。しかしながら、同一のサーバが使用される場合、DNSルックアップは、不必要であり、同一のTCP接続が、再使用され、ハンドシェイク時間を節約する。
【0114】
さらに、低確率の衝突は、スケーラビリティを達成するために利用され得る。衝突スペースが、大きくなり得、かつ衝突の機会が、低くなり得る。
【0115】
具体的実施形態の前述の説明は、他者が、当該技術分野内の知識を適用することによって、本発明の一般的概念から逸脱することなく、過度の実験を伴わずに、種々の用途のために、そのような具体的実施形態を容易に修正および/または適応させることができるように、本発明の一般的性質を完全に明らかにするであろう。したがって、そのような適応および修正は、本明細書に提示される教示および指針に基づいて、開示される実施形態の均等物の意味および範囲内にあることが意図される。本明細書の語句または専門用語は、本明細書の専門用語または語句が、教示および指針に照らして、当業者によって理解されるように、限定ではなく、説明の目的のためであることを理解されたい。
図1
図2
図3
図4A
図4B
図4C
図4D
図5A
図5B
図5C
図6A
図6B
図6C
図6D
図7
図8
図9
図10
図11